1010#include "hash.h"
1111#include "util.h"
1212
13+ #include "../include/secp256k1_sha.h"
14+
1315#include <stdlib.h>
1416#include <stdint.h>
1517#include <string.h>
1618
17- #define Ch (x ,y ,z ) ((z) ^ ((x) & ((y) ^ (z))))
18- #define Maj (x ,y ,z ) (((x) & (y)) | ((z) & ((x) | (y))))
19- #define Sigma0 (x ) (((x) >> 2 | (x) << 30) ^ ((x) >> 13 | (x) << 19) ^ ((x) >> 22 | (x) << 10))
20- #define Sigma1 (x ) (((x) >> 6 | (x) << 26) ^ ((x) >> 11 | (x) << 21) ^ ((x) >> 25 | (x) << 7))
21- #define sigma0 (x ) (((x) >> 7 | (x) << 25) ^ ((x) >> 18 | (x) << 14) ^ ((x) >> 3))
22- #define sigma1 (x ) (((x) >> 17 | (x) << 15) ^ ((x) >> 19 | (x) << 13) ^ ((x) >> 10))
23-
24- #define Round (a ,b ,c ,d ,e ,f ,g ,h ,k ,w ) do { \
25- uint32_t t1 = (h) + Sigma1(e) + Ch((e), (f), (g)) + (k) + (w); \
26- uint32_t t2 = Sigma0(a) + Maj((a), (b), (c)); \
27- (d) += t1; \
28- (h) = t1 + t2; \
29- } while(0)
30-
3119static void secp256k1_sha256_initialize (secp256k1_sha256 * hash ) {
3220 hash -> s [0 ] = 0x6a09e667ul ;
3321 hash -> s [1 ] = 0xbb67ae85ul ;
@@ -40,89 +28,6 @@ static void secp256k1_sha256_initialize(secp256k1_sha256 *hash) {
4028 hash -> bytes = 0 ;
4129}
4230
43- /** Perform one SHA-256 transformation, processing 16 big endian 32-bit words. */
44- static void secp256k1_sha256_transform (uint32_t * s , const unsigned char * buf ) {
45- uint32_t a = s [0 ], b = s [1 ], c = s [2 ], d = s [3 ], e = s [4 ], f = s [5 ], g = s [6 ], h = s [7 ];
46- uint32_t w0 , w1 , w2 , w3 , w4 , w5 , w6 , w7 , w8 , w9 , w10 , w11 , w12 , w13 , w14 , w15 ;
47-
48- Round (a , b , c , d , e , f , g , h , 0x428a2f98 , w0 = secp256k1_read_be32 (& buf [0 ]));
49- Round (h , a , b , c , d , e , f , g , 0x71374491 , w1 = secp256k1_read_be32 (& buf [4 ]));
50- Round (g , h , a , b , c , d , e , f , 0xb5c0fbcf , w2 = secp256k1_read_be32 (& buf [8 ]));
51- Round (f , g , h , a , b , c , d , e , 0xe9b5dba5 , w3 = secp256k1_read_be32 (& buf [12 ]));
52- Round (e , f , g , h , a , b , c , d , 0x3956c25b , w4 = secp256k1_read_be32 (& buf [16 ]));
53- Round (d , e , f , g , h , a , b , c , 0x59f111f1 , w5 = secp256k1_read_be32 (& buf [20 ]));
54- Round (c , d , e , f , g , h , a , b , 0x923f82a4 , w6 = secp256k1_read_be32 (& buf [24 ]));
55- Round (b , c , d , e , f , g , h , a , 0xab1c5ed5 , w7 = secp256k1_read_be32 (& buf [28 ]));
56- Round (a , b , c , d , e , f , g , h , 0xd807aa98 , w8 = secp256k1_read_be32 (& buf [32 ]));
57- Round (h , a , b , c , d , e , f , g , 0x12835b01 , w9 = secp256k1_read_be32 (& buf [36 ]));
58- Round (g , h , a , b , c , d , e , f , 0x243185be , w10 = secp256k1_read_be32 (& buf [40 ]));
59- Round (f , g , h , a , b , c , d , e , 0x550c7dc3 , w11 = secp256k1_read_be32 (& buf [44 ]));
60- Round (e , f , g , h , a , b , c , d , 0x72be5d74 , w12 = secp256k1_read_be32 (& buf [48 ]));
61- Round (d , e , f , g , h , a , b , c , 0x80deb1fe , w13 = secp256k1_read_be32 (& buf [52 ]));
62- Round (c , d , e , f , g , h , a , b , 0x9bdc06a7 , w14 = secp256k1_read_be32 (& buf [56 ]));
63- Round (b , c , d , e , f , g , h , a , 0xc19bf174 , w15 = secp256k1_read_be32 (& buf [60 ]));
64-
65- Round (a , b , c , d , e , f , g , h , 0xe49b69c1 , w0 += sigma1 (w14 ) + w9 + sigma0 (w1 ));
66- Round (h , a , b , c , d , e , f , g , 0xefbe4786 , w1 += sigma1 (w15 ) + w10 + sigma0 (w2 ));
67- Round (g , h , a , b , c , d , e , f , 0x0fc19dc6 , w2 += sigma1 (w0 ) + w11 + sigma0 (w3 ));
68- Round (f , g , h , a , b , c , d , e , 0x240ca1cc , w3 += sigma1 (w1 ) + w12 + sigma0 (w4 ));
69- Round (e , f , g , h , a , b , c , d , 0x2de92c6f , w4 += sigma1 (w2 ) + w13 + sigma0 (w5 ));
70- Round (d , e , f , g , h , a , b , c , 0x4a7484aa , w5 += sigma1 (w3 ) + w14 + sigma0 (w6 ));
71- Round (c , d , e , f , g , h , a , b , 0x5cb0a9dc , w6 += sigma1 (w4 ) + w15 + sigma0 (w7 ));
72- Round (b , c , d , e , f , g , h , a , 0x76f988da , w7 += sigma1 (w5 ) + w0 + sigma0 (w8 ));
73- Round (a , b , c , d , e , f , g , h , 0x983e5152 , w8 += sigma1 (w6 ) + w1 + sigma0 (w9 ));
74- Round (h , a , b , c , d , e , f , g , 0xa831c66d , w9 += sigma1 (w7 ) + w2 + sigma0 (w10 ));
75- Round (g , h , a , b , c , d , e , f , 0xb00327c8 , w10 += sigma1 (w8 ) + w3 + sigma0 (w11 ));
76- Round (f , g , h , a , b , c , d , e , 0xbf597fc7 , w11 += sigma1 (w9 ) + w4 + sigma0 (w12 ));
77- Round (e , f , g , h , a , b , c , d , 0xc6e00bf3 , w12 += sigma1 (w10 ) + w5 + sigma0 (w13 ));
78- Round (d , e , f , g , h , a , b , c , 0xd5a79147 , w13 += sigma1 (w11 ) + w6 + sigma0 (w14 ));
79- Round (c , d , e , f , g , h , a , b , 0x06ca6351 , w14 += sigma1 (w12 ) + w7 + sigma0 (w15 ));
80- Round (b , c , d , e , f , g , h , a , 0x14292967 , w15 += sigma1 (w13 ) + w8 + sigma0 (w0 ));
81-
82- Round (a , b , c , d , e , f , g , h , 0x27b70a85 , w0 += sigma1 (w14 ) + w9 + sigma0 (w1 ));
83- Round (h , a , b , c , d , e , f , g , 0x2e1b2138 , w1 += sigma1 (w15 ) + w10 + sigma0 (w2 ));
84- Round (g , h , a , b , c , d , e , f , 0x4d2c6dfc , w2 += sigma1 (w0 ) + w11 + sigma0 (w3 ));
85- Round (f , g , h , a , b , c , d , e , 0x53380d13 , w3 += sigma1 (w1 ) + w12 + sigma0 (w4 ));
86- Round (e , f , g , h , a , b , c , d , 0x650a7354 , w4 += sigma1 (w2 ) + w13 + sigma0 (w5 ));
87- Round (d , e , f , g , h , a , b , c , 0x766a0abb , w5 += sigma1 (w3 ) + w14 + sigma0 (w6 ));
88- Round (c , d , e , f , g , h , a , b , 0x81c2c92e , w6 += sigma1 (w4 ) + w15 + sigma0 (w7 ));
89- Round (b , c , d , e , f , g , h , a , 0x92722c85 , w7 += sigma1 (w5 ) + w0 + sigma0 (w8 ));
90- Round (a , b , c , d , e , f , g , h , 0xa2bfe8a1 , w8 += sigma1 (w6 ) + w1 + sigma0 (w9 ));
91- Round (h , a , b , c , d , e , f , g , 0xa81a664b , w9 += sigma1 (w7 ) + w2 + sigma0 (w10 ));
92- Round (g , h , a , b , c , d , e , f , 0xc24b8b70 , w10 += sigma1 (w8 ) + w3 + sigma0 (w11 ));
93- Round (f , g , h , a , b , c , d , e , 0xc76c51a3 , w11 += sigma1 (w9 ) + w4 + sigma0 (w12 ));
94- Round (e , f , g , h , a , b , c , d , 0xd192e819 , w12 += sigma1 (w10 ) + w5 + sigma0 (w13 ));
95- Round (d , e , f , g , h , a , b , c , 0xd6990624 , w13 += sigma1 (w11 ) + w6 + sigma0 (w14 ));
96- Round (c , d , e , f , g , h , a , b , 0xf40e3585 , w14 += sigma1 (w12 ) + w7 + sigma0 (w15 ));
97- Round (b , c , d , e , f , g , h , a , 0x106aa070 , w15 += sigma1 (w13 ) + w8 + sigma0 (w0 ));
98-
99- Round (a , b , c , d , e , f , g , h , 0x19a4c116 , w0 += sigma1 (w14 ) + w9 + sigma0 (w1 ));
100- Round (h , a , b , c , d , e , f , g , 0x1e376c08 , w1 += sigma1 (w15 ) + w10 + sigma0 (w2 ));
101- Round (g , h , a , b , c , d , e , f , 0x2748774c , w2 += sigma1 (w0 ) + w11 + sigma0 (w3 ));
102- Round (f , g , h , a , b , c , d , e , 0x34b0bcb5 , w3 += sigma1 (w1 ) + w12 + sigma0 (w4 ));
103- Round (e , f , g , h , a , b , c , d , 0x391c0cb3 , w4 += sigma1 (w2 ) + w13 + sigma0 (w5 ));
104- Round (d , e , f , g , h , a , b , c , 0x4ed8aa4a , w5 += sigma1 (w3 ) + w14 + sigma0 (w6 ));
105- Round (c , d , e , f , g , h , a , b , 0x5b9cca4f , w6 += sigma1 (w4 ) + w15 + sigma0 (w7 ));
106- Round (b , c , d , e , f , g , h , a , 0x682e6ff3 , w7 += sigma1 (w5 ) + w0 + sigma0 (w8 ));
107- Round (a , b , c , d , e , f , g , h , 0x748f82ee , w8 += sigma1 (w6 ) + w1 + sigma0 (w9 ));
108- Round (h , a , b , c , d , e , f , g , 0x78a5636f , w9 += sigma1 (w7 ) + w2 + sigma0 (w10 ));
109- Round (g , h , a , b , c , d , e , f , 0x84c87814 , w10 += sigma1 (w8 ) + w3 + sigma0 (w11 ));
110- Round (f , g , h , a , b , c , d , e , 0x8cc70208 , w11 += sigma1 (w9 ) + w4 + sigma0 (w12 ));
111- Round (e , f , g , h , a , b , c , d , 0x90befffa , w12 += sigma1 (w10 ) + w5 + sigma0 (w13 ));
112- Round (d , e , f , g , h , a , b , c , 0xa4506ceb , w13 += sigma1 (w11 ) + w6 + sigma0 (w14 ));
113- Round (c , d , e , f , g , h , a , b , 0xbef9a3f7 , w14 + sigma1 (w12 ) + w7 + sigma0 (w15 ));
114- Round (b , c , d , e , f , g , h , a , 0xc67178f2 , w15 + sigma1 (w13 ) + w8 + sigma0 (w0 ));
115-
116- s [0 ] += a ;
117- s [1 ] += b ;
118- s [2 ] += c ;
119- s [3 ] += d ;
120- s [4 ] += e ;
121- s [5 ] += f ;
122- s [6 ] += g ;
123- s [7 ] += h ;
124- }
125-
12631static void secp256k1_sha256_write (secp256k1_sha256 * hash , const unsigned char * data , size_t len ) {
12732 size_t bufsize = hash -> bytes & 0x3F ;
12833 hash -> bytes += len ;
@@ -133,7 +38,7 @@ static void secp256k1_sha256_write(secp256k1_sha256 *hash, const unsigned char *
13338 memcpy (hash -> buf + bufsize , data , chunk_len );
13439 data += chunk_len ;
13540 len -= chunk_len ;
136- secp256k1_sha256_transform (hash -> s , hash -> buf );
41+ secp256k1_sha256_transform (hash -> s , hash -> buf , 1 );
13742 bufsize = 0 ;
13843 }
13944 if (len ) {
@@ -288,12 +193,4 @@ static void secp256k1_rfc6979_hmac_sha256_clear(secp256k1_rfc6979_hmac_sha256 *r
288193 secp256k1_memclear_explicit (rng , sizeof (* rng ));
289194}
290195
291- #undef Round
292- #undef sigma1
293- #undef sigma0
294- #undef Sigma1
295- #undef Sigma0
296- #undef Maj
297- #undef Ch
298-
299196#endif /* SECP256K1_HASH_IMPL_H */
0 commit comments