2 * Author......: Jens Steube <jens.steube@gmail.com>
6 void sha256_64 (uint block
[16], uint digest
[8])
8 #define SHIFT_RIGHT_32(x,n) ((x) >> (n))
10 #define SHA256_S0(x) (rotl32 ((x), 25u) ^ rotl32 ((x), 14u) ^ SHIFT_RIGHT_32 ((x), 3u))
11 #define SHA256_S1(x) (rotl32 ((x), 15u) ^ rotl32 ((x), 13u) ^ SHIFT_RIGHT_32 ((x), 10u))
12 #define SHA256_S2(x) (rotl32 ((x), 30u) ^ rotl32 ((x), 19u) ^ rotl32 ((x), 10u))
13 #define SHA256_S3(x) (rotl32 ((x), 26u) ^ rotl32 ((x), 21u) ^ rotl32 ((x), 7u))
15 #define SHA256_F0(x,y,z) (((x) & (y)) | ((z) & ((x) ^ (y))))
16 #define SHA256_F1(x,y,z) ((z) ^ ((x) & ((y) ^ (z))))
18 #define SHA256_F0o(x,y,z) (SHA256_F0 ((x), (y), (z)))
19 #define SHA256_F1o(x,y,z) (SHA256_F1 ((x), (y), (z)))
21 #define SHA256_STEP(F0,F1,a,b,c,d,e,f,g,h,x,K) \
32 #define SHA256_EXPAND(x,y,z,w) (SHA256_S1 (x) + y + SHA256_S0 (z) + w)
34 uint w0_t
= block
[ 0];
35 uint w1_t
= block
[ 1];
36 uint w2_t
= block
[ 2];
37 uint w3_t
= block
[ 3];
38 uint w4_t
= block
[ 4];
39 uint w5_t
= block
[ 5];
40 uint w6_t
= block
[ 6];
41 uint w7_t
= block
[ 7];
42 uint w8_t
= block
[ 8];
43 uint w9_t
= block
[ 9];
44 uint wa_t
= block
[10];
45 uint wb_t
= block
[11];
46 uint wc_t
= block
[12];
47 uint wd_t
= block
[13];
48 uint we_t
= block
[14];
49 uint wf_t
= block
[15];
60 SHA256_STEP (SHA256_F0o
, SHA256_F1o
, a
, b
, c
, d
, e
, f
, g
, h
, w0_t
, SHA256C00
);
61 SHA256_STEP (SHA256_F0o
, SHA256_F1o
, h
, a
, b
, c
, d
, e
, f
, g
, w1_t
, SHA256C01
);
62 SHA256_STEP (SHA256_F0o
, SHA256_F1o
, g
, h
, a
, b
, c
, d
, e
, f
, w2_t
, SHA256C02
);
63 SHA256_STEP (SHA256_F0o
, SHA256_F1o
, f
, g
, h
, a
, b
, c
, d
, e
, w3_t
, SHA256C03
);
64 SHA256_STEP (SHA256_F0o
, SHA256_F1o
, e
, f
, g
, h
, a
, b
, c
, d
, w4_t
, SHA256C04
);
65 SHA256_STEP (SHA256_F0o
, SHA256_F1o
, d
, e
, f
, g
, h
, a
, b
, c
, w5_t
, SHA256C05
);
66 SHA256_STEP (SHA256_F0o
, SHA256_F1o
, c
, d
, e
, f
, g
, h
, a
, b
, w6_t
, SHA256C06
);
67 SHA256_STEP (SHA256_F0o
, SHA256_F1o
, b
, c
, d
, e
, f
, g
, h
, a
, w7_t
, SHA256C07
);
68 SHA256_STEP (SHA256_F0o
, SHA256_F1o
, a
, b
, c
, d
, e
, f
, g
, h
, w8_t
, SHA256C08
);
69 SHA256_STEP (SHA256_F0o
, SHA256_F1o
, h
, a
, b
, c
, d
, e
, f
, g
, w9_t
, SHA256C09
);
70 SHA256_STEP (SHA256_F0o
, SHA256_F1o
, g
, h
, a
, b
, c
, d
, e
, f
, wa_t
, SHA256C0a
);
71 SHA256_STEP (SHA256_F0o
, SHA256_F1o
, f
, g
, h
, a
, b
, c
, d
, e
, wb_t
, SHA256C0b
);
72 SHA256_STEP (SHA256_F0o
, SHA256_F1o
, e
, f
, g
, h
, a
, b
, c
, d
, wc_t
, SHA256C0c
);
73 SHA256_STEP (SHA256_F0o
, SHA256_F1o
, d
, e
, f
, g
, h
, a
, b
, c
, wd_t
, SHA256C0d
);
74 SHA256_STEP (SHA256_F0o
, SHA256_F1o
, c
, d
, e
, f
, g
, h
, a
, b
, we_t
, SHA256C0e
);
75 SHA256_STEP (SHA256_F0o
, SHA256_F1o
, b
, c
, d
, e
, f
, g
, h
, a
, wf_t
, SHA256C0f
);
77 w0_t
= SHA256_EXPAND (we_t
, w9_t
, w1_t
, w0_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, a
, b
, c
, d
, e
, f
, g
, h
, w0_t
, SHA256C10
);
78 w1_t
= SHA256_EXPAND (wf_t
, wa_t
, w2_t
, w1_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, h
, a
, b
, c
, d
, e
, f
, g
, w1_t
, SHA256C11
);
79 w2_t
= SHA256_EXPAND (w0_t
, wb_t
, w3_t
, w2_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, g
, h
, a
, b
, c
, d
, e
, f
, w2_t
, SHA256C12
);
80 w3_t
= SHA256_EXPAND (w1_t
, wc_t
, w4_t
, w3_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, f
, g
, h
, a
, b
, c
, d
, e
, w3_t
, SHA256C13
);
81 w4_t
= SHA256_EXPAND (w2_t
, wd_t
, w5_t
, w4_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, e
, f
, g
, h
, a
, b
, c
, d
, w4_t
, SHA256C14
);
82 w5_t
= SHA256_EXPAND (w3_t
, we_t
, w6_t
, w5_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, d
, e
, f
, g
, h
, a
, b
, c
, w5_t
, SHA256C15
);
83 w6_t
= SHA256_EXPAND (w4_t
, wf_t
, w7_t
, w6_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, c
, d
, e
, f
, g
, h
, a
, b
, w6_t
, SHA256C16
);
84 w7_t
= SHA256_EXPAND (w5_t
, w0_t
, w8_t
, w7_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, b
, c
, d
, e
, f
, g
, h
, a
, w7_t
, SHA256C17
);
85 w8_t
= SHA256_EXPAND (w6_t
, w1_t
, w9_t
, w8_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, a
, b
, c
, d
, e
, f
, g
, h
, w8_t
, SHA256C18
);
86 w9_t
= SHA256_EXPAND (w7_t
, w2_t
, wa_t
, w9_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, h
, a
, b
, c
, d
, e
, f
, g
, w9_t
, SHA256C19
);
87 wa_t
= SHA256_EXPAND (w8_t
, w3_t
, wb_t
, wa_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, g
, h
, a
, b
, c
, d
, e
, f
, wa_t
, SHA256C1a
);
88 wb_t
= SHA256_EXPAND (w9_t
, w4_t
, wc_t
, wb_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, f
, g
, h
, a
, b
, c
, d
, e
, wb_t
, SHA256C1b
);
89 wc_t
= SHA256_EXPAND (wa_t
, w5_t
, wd_t
, wc_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, e
, f
, g
, h
, a
, b
, c
, d
, wc_t
, SHA256C1c
);
90 wd_t
= SHA256_EXPAND (wb_t
, w6_t
, we_t
, wd_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, d
, e
, f
, g
, h
, a
, b
, c
, wd_t
, SHA256C1d
);
91 we_t
= SHA256_EXPAND (wc_t
, w7_t
, wf_t
, we_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, c
, d
, e
, f
, g
, h
, a
, b
, we_t
, SHA256C1e
);
92 wf_t
= SHA256_EXPAND (wd_t
, w8_t
, w0_t
, wf_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, b
, c
, d
, e
, f
, g
, h
, a
, wf_t
, SHA256C1f
);
94 w0_t
= SHA256_EXPAND (we_t
, w9_t
, w1_t
, w0_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, a
, b
, c
, d
, e
, f
, g
, h
, w0_t
, SHA256C20
);
95 w1_t
= SHA256_EXPAND (wf_t
, wa_t
, w2_t
, w1_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, h
, a
, b
, c
, d
, e
, f
, g
, w1_t
, SHA256C21
);
96 w2_t
= SHA256_EXPAND (w0_t
, wb_t
, w3_t
, w2_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, g
, h
, a
, b
, c
, d
, e
, f
, w2_t
, SHA256C22
);
97 w3_t
= SHA256_EXPAND (w1_t
, wc_t
, w4_t
, w3_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, f
, g
, h
, a
, b
, c
, d
, e
, w3_t
, SHA256C23
);
98 w4_t
= SHA256_EXPAND (w2_t
, wd_t
, w5_t
, w4_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, e
, f
, g
, h
, a
, b
, c
, d
, w4_t
, SHA256C24
);
99 w5_t
= SHA256_EXPAND (w3_t
, we_t
, w6_t
, w5_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, d
, e
, f
, g
, h
, a
, b
, c
, w5_t
, SHA256C25
);
100 w6_t
= SHA256_EXPAND (w4_t
, wf_t
, w7_t
, w6_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, c
, d
, e
, f
, g
, h
, a
, b
, w6_t
, SHA256C26
);
101 w7_t
= SHA256_EXPAND (w5_t
, w0_t
, w8_t
, w7_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, b
, c
, d
, e
, f
, g
, h
, a
, w7_t
, SHA256C27
);
102 w8_t
= SHA256_EXPAND (w6_t
, w1_t
, w9_t
, w8_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, a
, b
, c
, d
, e
, f
, g
, h
, w8_t
, SHA256C28
);
103 w9_t
= SHA256_EXPAND (w7_t
, w2_t
, wa_t
, w9_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, h
, a
, b
, c
, d
, e
, f
, g
, w9_t
, SHA256C29
);
104 wa_t
= SHA256_EXPAND (w8_t
, w3_t
, wb_t
, wa_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, g
, h
, a
, b
, c
, d
, e
, f
, wa_t
, SHA256C2a
);
105 wb_t
= SHA256_EXPAND (w9_t
, w4_t
, wc_t
, wb_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, f
, g
, h
, a
, b
, c
, d
, e
, wb_t
, SHA256C2b
);
106 wc_t
= SHA256_EXPAND (wa_t
, w5_t
, wd_t
, wc_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, e
, f
, g
, h
, a
, b
, c
, d
, wc_t
, SHA256C2c
);
107 wd_t
= SHA256_EXPAND (wb_t
, w6_t
, we_t
, wd_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, d
, e
, f
, g
, h
, a
, b
, c
, wd_t
, SHA256C2d
);
108 we_t
= SHA256_EXPAND (wc_t
, w7_t
, wf_t
, we_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, c
, d
, e
, f
, g
, h
, a
, b
, we_t
, SHA256C2e
);
109 wf_t
= SHA256_EXPAND (wd_t
, w8_t
, w0_t
, wf_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, b
, c
, d
, e
, f
, g
, h
, a
, wf_t
, SHA256C2f
);
111 w0_t
= SHA256_EXPAND (we_t
, w9_t
, w1_t
, w0_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, a
, b
, c
, d
, e
, f
, g
, h
, w0_t
, SHA256C30
);
112 w1_t
= SHA256_EXPAND (wf_t
, wa_t
, w2_t
, w1_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, h
, a
, b
, c
, d
, e
, f
, g
, w1_t
, SHA256C31
);
113 w2_t
= SHA256_EXPAND (w0_t
, wb_t
, w3_t
, w2_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, g
, h
, a
, b
, c
, d
, e
, f
, w2_t
, SHA256C32
);
114 w3_t
= SHA256_EXPAND (w1_t
, wc_t
, w4_t
, w3_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, f
, g
, h
, a
, b
, c
, d
, e
, w3_t
, SHA256C33
);
115 w4_t
= SHA256_EXPAND (w2_t
, wd_t
, w5_t
, w4_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, e
, f
, g
, h
, a
, b
, c
, d
, w4_t
, SHA256C34
);
116 w5_t
= SHA256_EXPAND (w3_t
, we_t
, w6_t
, w5_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, d
, e
, f
, g
, h
, a
, b
, c
, w5_t
, SHA256C35
);
117 w6_t
= SHA256_EXPAND (w4_t
, wf_t
, w7_t
, w6_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, c
, d
, e
, f
, g
, h
, a
, b
, w6_t
, SHA256C36
);
118 w7_t
= SHA256_EXPAND (w5_t
, w0_t
, w8_t
, w7_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, b
, c
, d
, e
, f
, g
, h
, a
, w7_t
, SHA256C37
);
119 w8_t
= SHA256_EXPAND (w6_t
, w1_t
, w9_t
, w8_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, a
, b
, c
, d
, e
, f
, g
, h
, w8_t
, SHA256C38
);
120 w9_t
= SHA256_EXPAND (w7_t
, w2_t
, wa_t
, w9_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, h
, a
, b
, c
, d
, e
, f
, g
, w9_t
, SHA256C39
);
121 wa_t
= SHA256_EXPAND (w8_t
, w3_t
, wb_t
, wa_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, g
, h
, a
, b
, c
, d
, e
, f
, wa_t
, SHA256C3a
);
122 wb_t
= SHA256_EXPAND (w9_t
, w4_t
, wc_t
, wb_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, f
, g
, h
, a
, b
, c
, d
, e
, wb_t
, SHA256C3b
);
123 wc_t
= SHA256_EXPAND (wa_t
, w5_t
, wd_t
, wc_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, e
, f
, g
, h
, a
, b
, c
, d
, wc_t
, SHA256C3c
);
124 wd_t
= SHA256_EXPAND (wb_t
, w6_t
, we_t
, wd_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, d
, e
, f
, g
, h
, a
, b
, c
, wd_t
, SHA256C3d
);
125 we_t
= SHA256_EXPAND (wc_t
, w7_t
, wf_t
, we_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, c
, d
, e
, f
, g
, h
, a
, b
, we_t
, SHA256C3e
);
126 wf_t
= SHA256_EXPAND (wd_t
, w8_t
, w0_t
, wf_t
); SHA256_STEP (SHA256_F0o
, SHA256_F1o
, b
, c
, d
, e
, f
, g
, h
, a
, wf_t
, SHA256C3f
);