Notation Guide

This page is a quick reference for the symbols, indices, and conventions used throughout the narrative. Keep it open alongside any other page.

Conventions

All arithmetic on scalars is mod

pp
, the order of the secp256k1 curve. Points like
XX
,
RR
live on the curve. We write
gxg^x
for scalar-to-point multiplication (multiplicative group notation), where
gg
is the standard generator.

Index conventions

IndexRanges overExample
ii
Signers (or keys) within one aggregation level
ai,Ri,j,sia_i, R_{i,j}, s_i
jj
Nonce coordinates, 0 to
ν\nu
- 1
Ri,j,rj,bjR_{i,j}, r_j, b^j
\ell
Tree levels on a leaf’s path, 0 = root
b,a1,,Lb_\ell, a_{1,\ell}, L_\ell
Λ\Lambda
Nesting depth (number of aggregator ancestors)Flat MuSig2:
Λ=1\Lambda = 1

The subscript pattern

a1,a_{1,\ell}
means “signer 1’s coefficient at level
\ell
.” The “1” refers to the specific leaf signer whose partial signature is being computed.

Accent marks

MarkMeaningExamples
Tilde
X~\tilde{X}
Aggregate quantity
X~\tilde{X}
= aggregate public key
Prime
RjR'_j
Pre-binding intermediate
RjR'_j
= internal aggregate nonce (before SignAggExt)
Check
bˇ\check{b}
Cascaded product across tree levels
bˇ\check{b}
= product of all binding values on path to root

Hash functions

All four map arbitrary inputs to scalars in

Zp\mathbb{Z}_p
.

FunctionInputsPurpose
HaggH_{\text{agg}}
Key multiset
LL
, key
XiX_i
Aggregation coefficient for rogue-key resistance
HnonH_{\text{non}}
Parent key, pre-binding nonce vectorNonce binding at non-root levels
Hnon_barH_{\text{non\_bar}}
Root key
X~\tilde{X}
, root nonce vector, message
mm
Nonce binding at root (message-dependent)
HsigH_{\text{sig}}
X~\tilde{X}
,
RR
,
mm
Schnorr challenge scalar
cc
HnonH_{\text{non}}
does not include the message.
Hnon_barH_{\text{non\_bar}}
does. That split allows lower-level nonce exchange to happen before the message is finalized.

Core symbols

SymbolTypeMeaning
gg
Pointsecp256k1 generator
pp
ScalarCurve group order
mm
BytesMessage to sign
ν\nu
ConstantNumber of nonce pairs per signer (= 2)
Λ\Lambda
IntegerLeaf’s nesting depth (aggregator count on path to root)
sksk
ScalarLeaf signer’s secret key
pkpk
PointPublic key:
gskg^{sk}
LL
MultisetKey multiset at one aggregation level
aia_i
ScalarAggregation coefficient:
Hagg(L,Xi)H_{\text{agg}}(L, X_i)
X~\tilde{X}
PointAggregate public key:
iXiai\prod_i X_i^{a_i}
ri,jr_{i,j}
ScalarNonce secret (single-use)
Ri,jR_{i,j}
PointNonce commitment:
gri,jg^{r_{i,j}}
RjR'_j
PointPre-binding aggregate nonce:
iRi,j\prod_i R_{i,j}
RjR_j
PointPost-binding aggregate nonce:
(Rj)bj1(R'_j)^{b^{j-1}}
bb
ScalarBinding value from SignAggExt
bb_\ell
ScalarBinding value at level
\ell
b0b_0
ScalarRoot binding (uses
Hnon_barH_{\text{non\_bar}}
, includes
mm
)
bˇ\check{b}
ScalarCascaded binding:
=0Λ1b\prod_{\ell=0}^{\Lambda-1} b_\ell
cc
ScalarSchnorr challenge:
Hsig(X~,R,m)H_{\text{sig}}(\tilde{X}, R, m)
cˇ\check{c}
ScalarCascaded challenge:
c=0Λ1a1,c \cdot \prod_{\ell=0}^{\Lambda-1} a_{1,\ell}
sis_i
ScalarLeaf partial signature
ss
ScalarFinal aggregated signature scalar:
isi\sum_i s_i
σ\sigma
PairSignature:
(R,s)(R, s)
RR
PointFinal root nonce commitment

Key formulas

ai=Hagg(L,Xi)a_i = H_{\text{agg}}(L, X_i)

Aggregation coefficient (Key Aggregation)

X~=iXiai\tilde{X} = \prod_i X_i^{a_i}

Key aggregation (Key Aggregation)

Rj=iRi,jR'_j = \prod_i R_{i,j}

Nonce aggregation, SignAgg (Round One)

Rj=(Rj)bj1R_j = (R'_j)^{b^{j-1}}

Nonce binding, SignAggExt (Round One)

s1=cˇsk+j=0ν1rjbˇjs_1 = \check{c} \cdot sk + \sum_{j=0}^{\nu-1} r_j \cdot \check{b}^j

Partial signature, Sign' (Round Two)

gs=RX~cg^s = R \cdot \tilde{X}^c

Schnorr verification (Verification)