3 typedef unsigned int uint32
;
5 static uint32
load_bigendian(const unsigned char *x
)
9 | (((uint32
) (x
[2])) << 8) \
10 | (((uint32
) (x
[1])) << 16) \
11 | (((uint32
) (x
[0])) << 24)
15 static void store_bigendian(unsigned char *x
,uint32 u
)
23 #define SHR(x,c) ((x) >> (c))
24 #define ROTR(x,c) (((x) >> (c)) | ((x) << (32 - (c))))
26 #define Ch(x,y,z) ((x & y) ^ (~x & z))
27 #define Maj(x,y,z) ((x & y) ^ (x & z) ^ (y & z))
28 #define Sigma0(x) (ROTR(x, 2) ^ ROTR(x,13) ^ ROTR(x,22))
29 #define Sigma1(x) (ROTR(x, 6) ^ ROTR(x,11) ^ ROTR(x,25))
30 #define sigma0(x) (ROTR(x, 7) ^ ROTR(x,18) ^ SHR(x, 3))
31 #define sigma1(x) (ROTR(x,17) ^ ROTR(x,19) ^ SHR(x,10))
33 #define M(w0,w14,w9,w1) w0 = sigma1(w14) + w9 + sigma0(w1) + w0;
54 T1 = h + Sigma1(e) + Ch(e,f,g) + k + w; \
55 T2 = Sigma0(a) + Maj(a,b,c); \
65 int crypto_hashblocks(unsigned char *statebytes
,const unsigned char *in
,unsigned long long inlen
)
79 a
= load_bigendian(statebytes
+ 0); state
[0] = a
;
80 b
= load_bigendian(statebytes
+ 4); state
[1] = b
;
81 c
= load_bigendian(statebytes
+ 8); state
[2] = c
;
82 d
= load_bigendian(statebytes
+ 12); state
[3] = d
;
83 e
= load_bigendian(statebytes
+ 16); state
[4] = e
;
84 f
= load_bigendian(statebytes
+ 20); state
[5] = f
;
85 g
= load_bigendian(statebytes
+ 24); state
[6] = g
;
86 h
= load_bigendian(statebytes
+ 28); state
[7] = h
;
89 uint32 w0
= load_bigendian(in
+ 0);
90 uint32 w1
= load_bigendian(in
+ 4);
91 uint32 w2
= load_bigendian(in
+ 8);
92 uint32 w3
= load_bigendian(in
+ 12);
93 uint32 w4
= load_bigendian(in
+ 16);
94 uint32 w5
= load_bigendian(in
+ 20);
95 uint32 w6
= load_bigendian(in
+ 24);
96 uint32 w7
= load_bigendian(in
+ 28);
97 uint32 w8
= load_bigendian(in
+ 32);
98 uint32 w9
= load_bigendian(in
+ 36);
99 uint32 w10
= load_bigendian(in
+ 40);
100 uint32 w11
= load_bigendian(in
+ 44);
101 uint32 w12
= load_bigendian(in
+ 48);
102 uint32 w13
= load_bigendian(in
+ 52);
103 uint32 w14
= load_bigendian(in
+ 56);
104 uint32 w15
= load_bigendian(in
+ 60);
202 store_bigendian(statebytes
+ 0,state
[0]);
203 store_bigendian(statebytes
+ 4,state
[1]);
204 store_bigendian(statebytes
+ 8,state
[2]);
205 store_bigendian(statebytes
+ 12,state
[3]);
206 store_bigendian(statebytes
+ 16,state
[4]);
207 store_bigendian(statebytes
+ 20,state
[5]);
208 store_bigendian(statebytes
+ 24,state
[6]);
209 store_bigendian(statebytes
+ 28,state
[7]);