2. Notation and Conventions (Notazione e convenzioni)
2. Notation and Conventions (Notazione e convenzioni)
In tutto il documento viene utilizzata la seguente notazione:
p - Denota il numero primo che definisce il campo sottostante
GF(p) - Campo finito (Finite field) con p elementi
x^y - x moltiplicato per se stesso y volte
B - Generatore (Generator) del gruppo o sottogruppo di interesse
[n]X - X addizionato a se stesso n volte
h[i] - L'i-esimo ottetto della stringa di ottetti h
h_i - L'i-esimo bit di h
a || b - Stringa (di bit) a concatenata con la stringa (di bit) b
a <= b - a è minore o uguale a b
a >= b - a è maggiore o uguale a b
i+j - Somma di i e j
i*j - Moltiplicazione di i e j
i-j - Sottrazione di j da i
i/j - Divisione di i per j
i x j - Prodotto cartesiano (Cartesian product) di i e j
(u,v) - Punto di curva ellittica con coordinata x u e coordinata y v
SHAKE256(x, y) - I primi y ottetti dell'output SHAKE256 [FIPS202] per l'input x
OCTET(x) - L'ottetto con valore x
OLEN(x) - Il numero di ottetti nella stringa x
dom2(x, y) - La stringa di ottetti vuota quando si firma o si verifica Ed25519. Altrimenti, la stringa di ottetti: "SigEd25519 no Ed25519 collisions" || octet(x) || octet(OLEN(y)) || y, dove x è nell'intervallo 0-255 e y è una stringa di ottetti di al massimo 255 ottetti. "SigEd25519 no Ed25519 collisions" è in ASCII (32 ottetti).
dom4(x, y) - La stringa di ottetti "SigEd448" || octet(x) || octet(OLEN(y)) || y, dove x è nell'intervallo 0-255 e y è una stringa di ottetti di al massimo 255 ottetti. "SigEd448" è in ASCII (8 ottetti).
Le parentesi (cioè '(' e ')') sono utilizzate per raggruppare le espressioni, al fine di evitare che la descrizione dipenda da un ordine di legame tra gli operatori.
Le stringhe di bit vengono convertite in stringhe di ottetti prendendo i bit da sinistra a destra, impacchettandoli dal bit meno significativo di ciascun ottetto al bit più significativo, e passando all'ottetto successivo quando ciascun ottetto si riempie. La conversione da stringa di ottetti a stringa di bit è l'inverso di questo processo; ad esempio, la stringa di bit a 16 bit
b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15
viene convertita in due ottetti x0 e x1 (in questo ordine) come
x0 = b7*128+b6*64+b5*32+b4*16+b3*8+b2*4+b1*2+b0
x1 = b15*128+b14*64+b13*32+b12*16+b11*8+b10*4+b9*2+b8
La codifica little-endian in bit posiziona i bit da sinistra a destra e dal meno significativo al più significativo. Se combinata con la conversione stringa-di-bit-a-stringa-di-ottetti definita sopra, questo risulta in una codifica little-endian in ottetti (se la lunghezza non è un multiplo di 8, i bit più significativi dell'ultimo ottetto rimangono inutilizzati).
Le parole chiave "MUST" (DEVE), "MUST NOT" (NON DEVE), "REQUIRED" (RICHIESTO), "SHALL" (DEVE), "SHALL NOT" (NON DEVE), "SHOULD" (DOVREBBE), "SHOULD NOT" (NON DOVREBBE), "RECOMMENDED" (RACCOMANDATO), "MAY" (PUÒ), e "OPTIONAL" (FACOLTATIVO) in questo documento devono essere interpretate come descritto in [RFC2119].