0% found this document useful (0 votes)
140 views5 pages

Steps in SHA-256 Algorithm

The SHA-256 algorithm has 5 main steps: 1. The input is preprocessed by converting it to binary, appending a 1 bit, padding with 0s to 448 bits, and appending the original length in bits. 2. Initialize hash values and round constants that are used in subsequent steps. 3. Create a message schedule of 64 words that are used for each round of processing. 4. Perform 64 rounds of compression that use logical and mathematical operations to process each word from the message schedule. 5. Concatenate the final hash values into a 256-bit digest.

Uploaded by

Osama Yaqoob
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
140 views5 pages

Steps in SHA-256 Algorithm

The SHA-256 algorithm has 5 main steps: 1. The input is preprocessed by converting it to binary, appending a 1 bit, padding with 0s to 448 bits, and appending the original length in bits. 2. Initialize hash values and round constants that are used in subsequent steps. 3. Create a message schedule of 64 words that are used for each round of processing. 4. Perform 64 rounds of compression that use logical and mathematical operations to process each word from the message schedule. 5. Concatenate the final hash values into a 256-bit digest.

Uploaded by

Osama Yaqoob
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 5

Steps in SHA-256 Algorithm

Step 1: Pre-processing. (512 bit chunks)


A. Convert to binary.
B. Append 1
C. Pad with 0’s till we have 448 bits
D. Append 64 bit length

Step 2: Initial hash values / Initialize round constant

Initialize hash values:


(first 32 bits of the fractional parts of the square roots of the first
8 primes 2..19):
h0 := 0x6a09e667
h1 := 0xbb67ae85
h2 := 0x3c6ef372
h3 := 0xa54ff53a
h4 := 0x510e527f
h5 := 0x9b05688c
h6 := 0x1f83d9ab
h7 := 0x5be0cd19

(first 32 bits of the fractional parts of the cube roots of the first
64 primes 2..311):
k[0..63] :=
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,
0x59f111f1, 0x923f82a4, 0xab1c5ed5,
0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74,
0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f,
0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3,
0xd5a79147, 0x06ca6351, 0x14292967,
0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354,
0x766a0abb, 0x81c2c92e, 0x92722c85,
0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,
0xd6990624, 0xf40e3585, 0x106aa070,
0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3,
0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa,
0xa4506ceb, 0xbef9a3f7, 0xc67178f2

Step 3: Create Message Schedule (w)

8 bit word = 32 bit = now we have 16 words


Total 64 words
For Message schedule:
s0 = (w[i-15] rightrotate 7) xor (w[i-15] rightrotate 18) xor (w[i-15] rightshift 3)
s1 = (w[i- 2] rightrotate 17) xor (w[i- 2] rightrotate 19) xor (w[i- 2] rightshift 10)
w[i] = w[i-16] + s0 + w[i-7] + s1

Step 4: Compression

S1 = (e rightrotate 6) xor (e rightrotate 11) xor (e rightrotate 25)


ch = (e and f) xor ((not e) and g)
temp1 = h + S1 + ch + k[i] + w[i]
S0 = (a rightrotate 2) xor (a rightrotate 13) xor (a rightrotate 22)
maj = (a and b) xor (a and c) xor (b and c)
temp2 := S0 + maj
h=g
g=f
f=e
e = d + temp1
d=c
c=b
32 bits (8 different values)
a = 10111010011110000001011010111111 = ba7816bf
b = 10001111000000011100111111101010 = 8f01cfea
c = 01000001010000010100000011011110 = 414140de
d = 01011101101011100010001000100011 = 5dae2223
e = 10110000000000110110000110100011 = b00361a3
f = 10010110000101110111101010011100 = 96177a9c
g = 10110100000100001111111101100001 = b410ff61
h = 11110010000000000001010110101101 = f20015ad
b=a
a = temp1 + temp2

Step 5: Concatenate
ba7816bf8f01cfea414140de5dae2223 b00361a396177a9cb410ff61f20015ad

modulo 2^32:

011000010110001001100011

011000010110001001100011 100000000000000000000000
000000000000000000000000 000000000000000000000000
000000000000000000000000 0000000000000000000000000
00000000000000
Input = abc
ASCII = 01100001 01100010 01100011 = 24 bits

ASCII = 01100001 01100010 01100011 1

ASCII = 01100001 01100010 01100011 100000 00000 00000


00000 000000 ……. 00000 (448bits)
0110000101100010011000111000000000000000000000000
0000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000
0000000
(Chunk 448 bit)
512 bits = (64 words) 16-64
011000010110001001100011100
000000000000000000000000000
000000000000000000000000000
000000000000000000000000000
000000000000000000000000000
000000000000000000000000000
0000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000
000000000000000011000

You might also like