Multivit4min

Untitled

Apr 23rd, 2016
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.74 KB | None | 0 0
  1. Note 1: All variables are 32 bit unsigned integers and addition is calculated modulo 232
  2. Note 2: For each round, there is one round constant k[i] and one entry in the message schedule array w[i], 0 ≤ i ≤ 63
  3. Note 3: The compression function uses 8 working variables, a through h
  4. Note 4: Big-endian convention is used when expressing the constants in this pseudocode,
  5. and when parsing message block data from bytes to words, for example,
  6. the first word of the input message "abc" after padding is 0x61626380
  7.  
  8. Initialize hash values:
  9. (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):
  10. h0 := 0x6a09e667
  11. h1 := 0xbb67ae85
  12. h2 := 0x3c6ef372
  13. h3 := 0xa54ff53a
  14. h4 := 0x510e527f
  15. h5 := 0x9b05688c
  16. h6 := 0x1f83d9ab
  17. h7 := 0x5be0cd19
  18.  
  19. Initialize array of round constants:
  20. (first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311):
  21. k[0..63] :=
  22. 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
  23. 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
  24. 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
  25. 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
  26. 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
  27. 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
  28. 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
  29. 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
  30.  
  31. Pre-processing:
  32. append the bit '1' to the message
  33. append k bits '0', where k is the minimum number >= 0 such that the resulting message
  34. length (modulo 512 in bits) is 448.
  35. append length of message (without the '1' bit or padding), in bits, as 64-bit big-endian integer
  36. (this will make the entire post-processed length a multiple of 512 bits)
  37.  
  38. Process the message in successive 512-bit chunks:
  39. break message into 512-bit chunks
  40. for each chunk
  41. create a 64-entry message schedule array w[0..63] of 32-bit words
  42. (The initial values in w[0..63] don't matter, so many implementations zero them here)
  43. copy chunk into first 16 words w[0..15] of the message schedule array
  44.  
  45. Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array:
  46. for i from 16 to 63
  47. s0 := (w[i-15] rightrotate 7) xor (w[i-15] rightrotate 18) xor (w[i-15] rightshift 3)
  48. s1 := (w[i-2] rightrotate 17) xor (w[i-2] rightrotate 19) xor (w[i-2] rightshift 10)
  49. w[i] := w[i-16] + s0 + w[i-7] + s1
  50.  
  51. Initialize working variables to current hash value:
  52. a := h0
  53. b := h1
  54. c := h2
  55. d := h3
  56. e := h4
  57. f := h5
  58. g := h6
  59. h := h7
  60.  
  61. Compression function main loop:
  62. for i from 0 to 63
  63. S1 := (e rightrotate 6) xor (e rightrotate 11) xor (e rightrotate 25)
  64. ch := (e and f) xor ((not e) and g)
  65. temp1 := h + S1 + ch + k[i] + w[i]
  66. S0 := (a rightrotate 2) xor (a rightrotate 13) xor (a rightrotate 22)
  67. maj := (a and b) xor (a and c) xor (b and c)
  68. temp2 := S0 + maj
  69.  
  70. h := g
  71. g := f
  72. f := e
  73. e := d + temp1
  74. d := c
  75. c := b
  76. b := a
  77. a := temp1 + temp2
  78.  
  79. Add the compressed chunk to the current hash value:
  80. h0 := h0 + a
  81. h1 := h1 + b
  82. h2 := h2 + c
  83. h3 := h3 + d
  84. h4 := h4 + e
  85. h5 := h5 + f
  86. h6 := h6 + g
  87. h7 := h7 + h
  88.  
  89. Produce the final hash value (big-endian):
  90. digest := hash := h0 append h1 append h2 append h3 append h4 append h5 append h6 append h7
Add Comment
Please, Sign In to add comment