Aller au contenu principal

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)