68 #define LITTLE_ENDIAN 1234 69 #define BIG_ENDIAN 4321 73 #define BYTE_ORDER LITTLE_ENDIAN 76 #if !defined(BYTE_ORDER) || (BYTE_ORDER != LITTLE_ENDIAN && BYTE_ORDER != BIG_ENDIAN) 77 #error Define BYTE_ORDER to be equal to either LITTLE_ENDIAN or BIG_ENDIAN 82 #define SHA256_SHORT_BLOCK_LENGTH (SHA256_BLOCK_LENGTH - 8) 86 #if BYTE_ORDER == LITTLE_ENDIAN 87 #define REVERSE32(w,x) { \ 89 tmp = (tmp >> 16) | (tmp << 16); \ 90 (x) = ((tmp & 0xff00ff00UL) >> 8) | ((tmp & 0x00ff00ffUL) << 8); \ 92 #define REVERSE64(w,x) { \ 94 tmp = (tmp >> 32) | (tmp << 32); \ 95 tmp = ((tmp & 0xff00ff00ff00ff00ULL) >> 8) | \ 96 ((tmp & 0x00ff00ff00ff00ffULL) << 8); \ 97 (x) = ((tmp & 0xffff0000ffff0000ULL) >> 16) | \ 98 ((tmp & 0x0000ffff0000ffffULL) << 16); \ 107 #define ADDINC128(w,n) { \ 108 (w)[0] += (uint64_t)(n); \ 109 if ((w)[0] < (n)) { \ 124 #define R(b,x) ((x) >> (b)) 126 #define S32(b,x) (((x) >> (b)) | ((x) << (32 - (b)))) 128 #define S64(b,x) (((x) >> (b)) | ((x) << (64 - (b)))) 131 #define Ch(x,y,z) (((x) & (y)) ^ ((~(x)) & (z))) 132 #define Maj(x,y,z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z))) 135 #define Sigma0_256(x) (S32(2, (x)) ^ S32(13, (x)) ^ S32(22, (x))) 136 #define Sigma1_256(x) (S32(6, (x)) ^ S32(11, (x)) ^ S32(25, (x))) 137 #define sigma0_256(x) (S32(7, (x)) ^ S32(18, (x)) ^ R(3 , (x))) 138 #define sigma1_256(x) (S32(17, (x)) ^ S32(19, (x)) ^ R(10, (x))) 141 #define Sigma0_512(x) (S64(28, (x)) ^ S64(34, (x)) ^ S64(39, (x))) 142 #define Sigma1_512(x) (S64(14, (x)) ^ S64(18, (x)) ^ S64(41, (x))) 143 #define sigma0_512(x) (S64( 1, (x)) ^ S64( 8, (x)) ^ R( 7, (x))) 144 #define sigma1_512(x) (S64(19, (x)) ^ S64(61, (x)) ^ R( 6, (x))) 156 static const uint32_t
K256[64] = {
157 0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL,
158 0x3956c25bUL, 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL,
159 0xd807aa98UL, 0x12835b01UL, 0x243185beUL, 0x550c7dc3UL,
160 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, 0xc19bf174UL,
161 0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL,
162 0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL,
163 0x983e5152UL, 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL,
164 0xc6e00bf3UL, 0xd5a79147UL, 0x06ca6351UL, 0x14292967UL,
165 0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL, 0x53380d13UL,
166 0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL,
167 0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL,
168 0xd192e819UL, 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL,
169 0x19a4c116UL, 0x1e376c08UL, 0x2748774cUL, 0x34b0bcb5UL,
170 0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL, 0x682e6ff3UL,
171 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL,
172 0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL
207 uint32_t a, b, c, d, e, f, g, h, s0, s1;
208 uint32_t T1, T2, *W256;
211 W256 = (uint32_t*)(
void*)context->
buffer;
214 a = context->
state[0];
215 b = context->
state[1];
216 c = context->
state[2];
217 d = context->
state[3];
218 e = context->
state[4];
219 f = context->
state[5];
220 g = context->
state[6];
221 h = context->
state[7];
225 #if BYTE_ORDER == LITTLE_ENDIAN 228 u32 = (data[0] << 24) | (data[1] << 16) | (data[2] << 8) | data[3];
231 data +=
sizeof(uint32_t);
252 s0 = W256[(j+1)&0x0f];
254 s1 = W256[(j+14)&0x0f];
259 (W256[j&0x0f] += s1 + W256[(j+9)&0x0f] + s0);
274 context->
state[0] += a;
275 context->
state[1] += b;
276 context->
state[2] += c;
277 context->
state[3] += d;
278 context->
state[4] += e;
279 context->
state[5] += f;
280 context->
state[6] += g;
281 context->
state[7] += h;
284 a = b = c = d = e = f = g = h = T1 = T2 = 0;
289 unsigned int freespace, usedspace;
301 if (len >= freespace) {
304 context->
bitcount += freespace << 3;
313 usedspace = freespace = 0;
330 usedspace = freespace = 0;
335 unsigned int usedspace;
338 if (digest != (uint8_t*)0) {
340 #if BYTE_ORDER == LITTLE_ENDIAN 346 context->
buffer[usedspace++] = 0x80;
375 #if BYTE_ORDER == LITTLE_ENDIAN 379 for (j = 0; j < 8; j++) {
381 digest[0] = ((context->
state[j] >> 0) & 0xff);
382 digest[1] = ((context->
state[j] >> 8) & 0xff);
383 digest[2] = ((context->
state[j] >> 16) & 0xff);
384 digest[3] = ((context->
state[j] >> 24) & 0xff);
385 digest +=
sizeof(uint32_t);
404 if (buffer != (
char*)0) {
#define SHA256_DIGEST_STRING_LENGTH
#define SHA256_SHORT_BLOCK_LENGTH
#define SHA256_BLOCK_LENGTH
ICACHE_FLASH_ATTR void sha256_raw(uint8_t *data, size_t len, uint8_t digest[SHA256_DIGEST_LENGTH])
#define ICACHE_FLASH_ATTR
uint8_t buffer[SHA256_BLOCK_LENGTH]
ICACHE_FLASH_ATTR char * sha256_end(sha256_ctx_t *context, char buffer[SHA256_DIGEST_STRING_LENGTH])
static const uint32_t sha256_initial_hash_value[8]
ICACHE_FLASH_ATTR void sha256_final(sha256_ctx_t *context, uint8_t digest[SHA256_DIGEST_LENGTH])
ICACHE_FLASH_ATTR void sha256_init(sha256_ctx_t *context)
static const char * sha2_hex_digits
void sha256_transform(sha256_ctx_t *, uint8_t *)
ICACHE_FLASH_ATTR char * sha256_data(uint8_t *data, size_t len, char digest[SHA256_DIGEST_STRING_LENGTH])
#define SHA256_DIGEST_LENGTH
ICACHE_FLASH_ATTR void sha256_update(sha256_ctx_t *context, uint8_t *data, size_t len)
static const uint32_t K256[64]