28 static uint32_t sha1_init_state[64] = {
29 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5,0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5,
30 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3,0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174,
31 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc,0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da,
32 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7,0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967,
33 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13,0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85,
34 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3,0xd192e819,0xd6990624,0xf40e3585,0x106aa070,
35 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5,0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3,
36 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208,0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
47 uint32_t a,b,c,d,e,f,g,h,i,j,t1,t2,m[64];
49 for (i=0,j=0; i < 16; ++i, j += 4)
50 m[i] = (data[j] << 24) | (data[j+1] << 16) | (data[j+2] << 8) | (data[j+3]);
52 m[i] = SIG1(m[i-2]) + m[i-7] + SIG0(m[i-15]) + m[i-16];
63 for (i = 0; i < 64; ++i) {
64 t1 = h + EP1(e) + CH(e,f,g) + sha1_init_state[i] + m[i];
65 t2 = EP0(a) + MAJ(a,b,c);
96 s->
state[0] = 0x6a09e667;
97 s->
state[1] = 0xbb67ae85;
98 s->
state[2] = 0x3c6ef372;
99 s->
state[3] = 0xa54ff53a;
100 s->
state[4] = 0x510e527f;
101 s->
state[5] = 0x9b05688c;
102 s->
state[6] = 0x1f83d9ab;
103 s->
state[7] = 0x5be0cd19;
117 for (i=0; i < len; ++i) {
151 memset(s->
data,0,56);
168 for (i=0; i < 4; ++i) {
169 hash[i] = (s->
state[0] >> (24-i*8)) & 0x000000ff;
170 hash[i+4] = (s->
state[1] >> (24-i*8)) & 0x000000ff;
171 hash[i+8] = (s->
state[2] >> (24-i*8)) & 0x000000ff;
172 hash[i+12] = (s->
state[3] >> (24-i*8)) & 0x000000ff;
173 hash[i+16] = (s->
state[4] >> (24-i*8)) & 0x000000ff;
174 hash[i+20] = (s->
state[5] >> (24-i*8)) & 0x000000ff;
175 hash[i+24] = (s->
state[6] >> (24-i*8)) & 0x000000ff;
176 hash[i+28] = (s->
state[7] >> (24-i*8)) & 0x000000ff;
180 void sha256(uint8_t * hashvalue,
const uint8_t * data,
const uint64_t data_len)
182 unsigned char hash[32];
188 memcpy(hashvalue, hash, 32);
void sha256_transform(sha256_state *s, unsigned char data[])
Called each time 64 bytes are written, modify the state structure.
void sha256(uint8_t *hashvalue, const uint8_t *data, const uint64_t data_len)
Compute the Sha256 hash of "data".
void sha256_init(sha256_state *s)
Initialise a sha256_state structure.
void sha256_result(sha256_state *s, uint8_t *hash)
Add padding, and perform a last computation on the sha256 states.
void sha256_write(sha256_state *s, const uint8_t *data, uint64_t len)
Write user data (message) into the sha256 state structure.
Declaration of sha256 functions.
All the sha256 computations are done on this structure.