3. Operations on Words (Opérations sur les mots)
Les opérateurs logiques suivants seront appliqués aux mots dans les quatre opérations de hachage spécifiées dans ce document. SHA-224 et SHA-256 opèrent sur des mots de 32 bits tandis que SHA-384 et SHA-512 opèrent sur des mots de 64 bits.
Dans les opérations ci-dessous, x<<n est obtenu comme suit : on supprime les n bits les plus à gauche de x, puis on remplit le résultat avec n bits à zéro à droite (le résultat aura toujours le même nombre de bits). De même, x>>n est obtenu comme suit : on supprime les n bits les plus à droite de x, puis on préfixe le résultat avec n bits à zéro à gauche (le résultat aura toujours le même nombre de bits).
a. Opérations logiques bit à bit sur les mots (Bitwise Logical Word Operations)
X AND Y = "et" logique bit à bit de X et Y.
X OR Y = "ou inclusif" logique bit à bit de X et Y.
X XOR Y = "ou exclusif" logique bit à bit de X et Y.
NOT X = "complément" logique bit à bit de X.
Exemple :
01101100101110011101001001111011
XOR 01100101110000010110100110110111
--------------------------------
= 00001001011110001011101111001100
b. L'opération X + Y est définie comme suit : les mots X et Y représentent des entiers de w bits x et y, où 0 <= x < 2^w et 0 <= y < 2^w. Pour les entiers positifs n et m, soit
n mod m
le reste de la division de n par m. Calculer
z = (x + y) mod `2^w`.
Alors 0 <= z < 2^w. Convertir z en un mot Z, et définir Z = X + Y.
c. L'opération de décalage à droite (Right Shift Operation) SHR^n(x), où x est un mot de w bits et n est un entier avec 0 <= n < w, est définie par
`SHR^n(x)` = `x>>n`
d. L'opération de rotation à droite (décalage circulaire à droite / Rotate Right / Circular Right Shift) ROTR^n(x), où x est un mot de w bits et n est un entier avec 0 <= n < w, est définie par
`ROTR^n(x)` = (`x>>n`) OR (x<<(w-n))
e. L'opération de rotation à gauche (décalage circulaire à gauche / Rotate Left / Circular Left Shift) ROTL^n(x), où x est un mot de w bits et n est un entier avec 0 <= n < w, est définie par
`ROTL^n(X)` = (`x<<n`) OR (x>>(w-n))
Notez les relations d'équivalence suivantes, où w est fixe dans chaque relation :
ROTL^n(x) = ROTR^(w-n)(x)
`ROTR^n(x)` = ROTL^(w-n)(x)