3. Operations on Words (Operazioni sulle parole)
I seguenti operatori logici verranno applicati alle parole in tutte le quattro operazioni hash specificate nel presente documento. SHA-224 e SHA-256 operano su parole a 32 bit mentre SHA-384 e SHA-512 operano su parole a 64 bit.
Nelle operazioni seguenti, x<<n si ottiene come segue: scartare i n bit più a sinistra di x e quindi riempire il risultato con n bit a zero sulla destra (il risultato avrà comunque lo stesso numero di bit). Allo stesso modo, x>>n si ottiene come segue: scartare i n bit più a destra di x e quindi anteporre il risultato con n bit a zero sulla sinistra (il risultato avrà comunque lo stesso numero di bit).
a. Operazioni logiche bit a bit sulle parole (Bitwise Logical Word Operations)
X AND Y = "and" logico bit a bit di X e Y.
X OR Y = "or inclusivo" logico bit a bit di X e Y.
X XOR Y = "or esclusivo" logico bit a bit di X e Y.
NOT X = "complemento" logico bit a bit di X.
Esempio:
01101100101110011101001001111011
XOR 01100101110000010110100110110111
--------------------------------
= 00001001011110001011101111001100
b. L'operazione X + Y è definita come segue: le parole X e Y rappresentano interi a w bit x e y, dove 0 <= x < 2^w e 0 <= y < 2^w. Per gli interi positivi n e m, sia
n mod m
il resto della divisione di n per m. Calcolare
z = (x + y) mod 2^w.
Quindi 0 <= x < 2^w. Convertire z in una parola Z e definire Z = X + Y.
c. L'operazione di spostamento a destra (Right Shift Operation) SHR^n(x), dove x è una parola di w bit e n è un intero con 0 <= n < w, è definita da
SHR^n(x) = `x>>n`
d. L'operazione di rotazione a destra (spostamento circolare a destra / Rotate Right / Circular Right Shift) ROTR^n(x), dove x è una parola di w bit e n è un intero con 0 <= n < w, è definita da
ROTR^n(x) = (`x>>n`) OR (x<<(w-n))
e. L'operazione di rotazione a sinistra (spostamento circolare a sinistra / Rotate Left / Circular Left Shift) ROTL^n(x), dove x è una parola di w bit e n è un intero con 0 <= n < w, è definita da
ROTL^n(X) = (`x<<n`) OR (x>>(w-n))
Notare le seguenti relazioni di equivalenza, dove w è fisso in ogni relazione:
ROTL^n(x) = ROTR^(w-n)(x)
ROTR^n(x) = ROTL^(w-n)(x)