In Part 1, we explained the padding step of SHA-256.
In this part, we move to the next step: the Message Schedule.
┌───────┐ ┌─────────┐ ┌──────────────────┐ ┌──────────────┐ ┌──────┐
│ Input │ -> │ Padding │ -> │ Message Schedule │ -> │ Compression │ -> │ Hash │
└───────┘ └─────────┘ └──────────────────┘ └──────────────┘ └──────┘
↑ ↑
Part 1 Part 2 (current)Reminder:Reminder:
After padding, the message becomes a single 512-bit block.
Now this block goes into the message schedule step.
Input ("bitcoin")
│
▼
┌─────────┐ ---> ┌────────────────────────────────────┐ ---> ┌──────────────────┐
│ Padding │ ---> │ 512-bit padded block │ ---> │ Message Schedule │
└─────────┘ ---> └────────────────────────────────────┘ ---> └──────────────────┘
│ 01100010011010010111010001100011 │
│ 01101111011010010110111010000000 │
│ 00000000000000000000000000000000 │
│ 00000000000000000000000000000000 │
│ 00000000000000000000000000000000 │
│ 00000000000000000000000000000000 │
│ 00000000000000000000000000000000 │
│ 00000000000000000000000000111000 │
Step 1: Split Block Into WordsStep 1: Split Block Into Words
The padded block has:512 bits total
We split it into:16 pieces
Each piece is:32 bits
And each piece is called a word.
So we get: W0, W1, W2, ..., W15
These come directly from the padded message.
w0 = 01100010011010010111010001100011
w1 = 01101111011010010110111010000000
w2 = 00000000000000000000000000000000
w3 = 00000000000000000000000000000000
w4 = 00000000000000000000000000000000
w5 = 00000000000000000000000000000000
w6 = 00000000000000000000000000000000
w7 = 00000000000000000000000000000000
w8 = 00000000000000000000000000000000
w9 = 00000000000000000000000000000000
w10 = 00000000000000000000000000000000
w11 = 00000000000000000000000000000000
w12 = 00000000000000000000000000000000
w13 = 00000000000000000000000000000000
w14 = 00000000000000000000000000000000
w15 = 00000000000000000000000000111000Step 2: Notice We Need More WordsStep 2: Notice We Need More Words
The compression step needs:
W0 → W63 (64 words total)
But we only have:W0 → W15
So we must compute 48 additional words:W16 → W63
Step 3: How New Words Are BuiltStep 3: How New Words Are Built
Each new word is computed from four earlier words
So every new word depends on previous schedule values.
Example for W16:W16 = W0 + σ0(W1) + W9 + σ1(W14)
We reuse earlier words to generate new ones.
Step 4: Bit Mixing Functions σ0 and σ1Step 4: Bit Mixing Functions σ0 and σ1
The functions σ0 and σ1 mix bits using rotations and shifts:
σ0(x) = ROTR7(x) XOR ROTR18(x) XOR SHR3(x)
σ1(x) = ROTR17(x) XOR ROTR19(x) XOR SHR10(x)These operations spread information across bits.
Check https://hashexplained.com/ for more details about σ0 and σ1
Step 5: General Rule for All Remaining WordsStep 5: General Rule for All Remaining Words
All later words are computed using:
W[t] = W[t-16] + σ0(W[t-15]) + W[t-7] + σ1(W[t-2])Repeat this until: W63 is computed
After computing everything:
w16 = 10111000111111010101100100111010
w17 = 01101111100001000110111010000000
w18 = 00000111100101000011010000110111
w19 = 10111010100010111101101100101001
w20 = 10011100100111001000011000110101
w21 = 10010110110111110100100011100010
w22 = 11010011111110110101101100110100
w23 = 00000110010001100000011110100000
w24 = 00110110010011000111101111010100
w25 = 11001010101110011100011010100001
w26 = 01101101001010001110101000011010
w27 = 01111000010100101111100010101111
w28 = 11111111001101000111100111101101
w29 = 11110111010101111010001011010001
w30 = 00101010010010001001010100001001
w31 = 10001111011111001000110001011111
w32 = 11110010011101011110000100001111
w33 = 00011000001001011011000100010111
w34 = 01111111011011111100100101100011
w35 = 10000001100101111000101001111101
w36 = 10110111010001010010011011101000
w37 = 10011010100011101001110000110100
w38 = 01011100001010001101000100000000
w39 = 01000110110001101000000001111110
w40 = 11101100100100111001011010000111
w41 = 11011110010001001100000111111100
w42 = 10011000001110011100100011000101
w43 = 00000010111100100001110101110100
w44 = 11001100110011111010111001010100
w45 = 11010010111101000111101010001010
w46 = 00100001110010010110110011101000
w47 = 10101000000110100101110010011110
w48 = 10101110000011010100010011011010
w49 = 01010001101000011111101011011010
w50 = 10010110111011100010011010101011
w51 = 10011110110001010100011010101100
w52 = 00111111010010001000101110110010
w53 = 00000111011110011101001110001111
w54 = 10101101001011101000010011001011
w55 = 11000000011101100011000101011000
w56 = 10100011000110001010000000100001
w57 = 00111101111100000111101011100111
w58 = 11101010010000011101101001100000
w59 = 11001111111100000000100000100011
w60 = 10111011111010100100110100011010
w61 = 00010100100010100001100010001111
w62 = 00010000101101010110001110000111
w63 = 10001100001100010110000010100010At this point, the message schedule is complete.
Next StepNext Step
Now the 64 words are ready.
They are passed into the compression function, which produces the final hash state.
┌───────┐ ┌─────────┐ ┌──────────────────┐ ┌──────────────┐ ┌──────┐
│ Input │ -> │ Padding │ -> │ Message Schedule │ -> │ Compression │ -> │ Hash │
└───────┘ └─────────┘ └──────────────────┘ └──────────────┘ └──────┘
↑ ↑ ↑
Part 1 Part 2 Part 3 (next)SummarySummary
Padding step ✔
Message schedule ✔
Next: Compression step
Learn MoreLearn More
You can see the message schedule step animated here: