34#if 1 || defined(MBEDTLS_SHA256_C)
41#if defined(MBEDTLS_SELF_TEST)
42#if defined(MBEDTLS_PLATFORM_C)
43#include "mbedtls/platform.h"
46#define mbedtls_printf printf
52 volatile unsigned char *p = (
unsigned char*)v;
while(
n-- ) *p++ = 0;
55#if !defined(MBEDTLS_SHA256_ALT)
61#define GET_UINT32_BE(n,b,i) \
63 (n) = ( (uint32_t) (b)[(i) ] << 24 ) \
64 | ( (uint32_t) (b)[(i) + 1] << 16 ) \
65 | ( (uint32_t) (b)[(i) + 2] << 8 ) \
66 | ( (uint32_t) (b)[(i) + 3] ); \
71#define PUT_UINT32_BE(n,b,i) \
73 (b)[(i) ] = (unsigned char) ( (n) >> 24 ); \
74 (b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \
75 (b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \
76 (b)[(i) + 3] = (unsigned char) ( (n) ); \
110 ctx->
state[0] = 0x6A09E667;
111 ctx->
state[1] = 0xBB67AE85;
112 ctx->
state[2] = 0x3C6EF372;
113 ctx->
state[3] = 0xA54FF53A;
114 ctx->
state[4] = 0x510E527F;
115 ctx->
state[5] = 0x9B05688C;
116 ctx->
state[6] = 0x1F83D9AB;
117 ctx->
state[7] = 0x5BE0CD19;
122 ctx->
state[0] = 0xC1059ED8;
123 ctx->
state[1] = 0x367CD507;
124 ctx->
state[2] = 0x3070DD17;
125 ctx->
state[3] = 0xF70E5939;
126 ctx->
state[4] = 0xFFC00B31;
127 ctx->
state[5] = 0x68581511;
128 ctx->
state[6] = 0x64F98FA7;
129 ctx->
state[7] = 0xBEFA4FA4;
135#if !defined(MBEDTLS_SHA256_PROCESS_ALT)
138 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
139 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
140 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
141 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
142 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
143 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
144 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
145 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
146 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
147 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
148 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
149 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
150 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
151 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
152 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
153 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2,
156#define SHR(x,n) ((x & 0xFFFFFFFF) >> n)
157#define ROTR(x,n) (SHR(x,n) | (x << (32 - n)))
159#define S0(x) (ROTR(x, 7) ^ ROTR(x,18) ^ SHR(x, 3))
160#define S1(x) (ROTR(x,17) ^ ROTR(x,19) ^ SHR(x,10))
162#define S2(x) (ROTR(x, 2) ^ ROTR(x,13) ^ ROTR(x,22))
163#define S3(x) (ROTR(x, 6) ^ ROTR(x,11) ^ ROTR(x,25))
165#define F0(x,y,z) ((x & y) | (z & (x | y)))
166#define F1(x,y,z) (z ^ (x & (y ^ z)))
170 W[t] = S1(W[t - 2]) + W[t - 7] + \
171 S0(W[t - 15]) + W[t - 16] \
174#define P(a,b,c,d,e,f,g,h,x,K) \
176 temp1 = h + S3(e) + F1(e,f,g) + K + x; \
177 temp2 = S2(a) + F0(a,b,c); \
178 d += temp1; h = temp1 + temp2; \
187 for(
i = 0;
i < 8;
i++ )
190#if defined(MBEDTLS_SHA256_SMALLER)
191 for(
i = 0;
i < 64;
i++ )
198 P(
A[0],
A[1],
A[2],
A[3],
A[4],
A[5],
A[6],
A[7],
W[
i],
K[
i] );
204 for(
i = 0;
i < 16;
i++ )
207 for(
i = 0;
i < 16;
i += 8 )
209 P(
A[0],
A[1],
A[2],
A[3],
A[4],
A[5],
A[6],
A[7],
W[
i+0],
K[
i+0] );
210 P(
A[7],
A[0],
A[1],
A[2],
A[3],
A[4],
A[5],
A[6],
W[
i+1],
K[
i+1] );
211 P(
A[6],
A[7],
A[0],
A[1],
A[2],
A[3],
A[4],
A[5],
W[
i+2],
K[
i+2] );
212 P(
A[5],
A[6],
A[7],
A[0],
A[1],
A[2],
A[3],
A[4],
W[
i+3],
K[
i+3] );
213 P(
A[4],
A[5],
A[6],
A[7],
A[0],
A[1],
A[2],
A[3],
W[
i+4],
K[
i+4] );
214 P(
A[3],
A[4],
A[5],
A[6],
A[7],
A[0],
A[1],
A[2],
W[
i+5],
K[
i+5] );
215 P(
A[2],
A[3],
A[4],
A[5],
A[6],
A[7],
A[0],
A[1],
W[
i+6],
K[
i+6] );
216 P(
A[1],
A[2],
A[3],
A[4],
A[5],
A[6],
A[7],
A[0],
W[
i+7],
K[
i+7] );
219 for(
i = 16;
i < 64;
i += 8 )
221 P(
A[0],
A[1],
A[2],
A[3],
A[4],
A[5],
A[6],
A[7],
R(
i+0),
K[
i+0] );
222 P(
A[7],
A[0],
A[1],
A[2],
A[3],
A[4],
A[5],
A[6],
R(
i+1),
K[
i+1] );
223 P(
A[6],
A[7],
A[0],
A[1],
A[2],
A[3],
A[4],
A[5],
R(
i+2),
K[
i+2] );
224 P(
A[5],
A[6],
A[7],
A[0],
A[1],
A[2],
A[3],
A[4],
R(
i+3),
K[
i+3] );
225 P(
A[4],
A[5],
A[6],
A[7],
A[0],
A[1],
A[2],
A[3],
R(
i+4),
K[
i+4] );
226 P(
A[3],
A[4],
A[5],
A[6],
A[7],
A[0],
A[1],
A[2],
R(
i+5),
K[
i+5] );
227 P(
A[2],
A[3],
A[4],
A[5],
A[6],
A[7],
A[0],
A[1],
R(
i+6),
K[
i+6] );
228 P(
A[1],
A[2],
A[3],
A[4],
A[5],
A[6],
A[7],
A[0],
R(
i+7),
K[
i+7] );
232 for(
i = 0;
i < 8;
i++ )
253 ctx->
total[0] &= 0xFFFFFFFF;
280 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
281 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
282 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
283 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
296 | ( ctx->
total[1] << 3 );
316 if( ctx->
is224 == 0 )
326 unsigned char output[32],
int is224 )
337#if defined(MBEDTLS_SELF_TEST)
344 {
"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" },
358 { 0x23, 0x09, 0x7D, 0x22, 0x34, 0x05, 0xD8, 0x22,
359 0x86, 0x42, 0xA4, 0x77, 0xBD, 0xA2, 0x55, 0xB3,
360 0x2A, 0xAD, 0xBC, 0xE4, 0xBD, 0xA0, 0xB3, 0xF7,
361 0xE3, 0x6C, 0x9D, 0xA7 },
362 { 0x75, 0x38, 0x8B, 0x16, 0x51, 0x27, 0x76, 0xCC,
363 0x5D, 0xBA, 0x5D, 0xA1, 0xFD, 0x89, 0x01, 0x50,
364 0xB0, 0xC6, 0x45, 0x5C, 0xB4, 0xF5, 0x8B, 0x19,
365 0x52, 0x52, 0x25, 0x25 },
366 { 0x20, 0x79, 0x46, 0x55, 0x98, 0x0C, 0x91, 0xD8,
367 0xBB, 0xB4, 0xC1, 0xEA, 0x97, 0x61, 0x8A, 0x4B,
368 0xF0, 0x3F, 0x42, 0x58, 0x19, 0x48, 0xB2, 0xEE,
369 0x4E, 0xE7, 0xAD, 0x67 },
374 { 0xBA, 0x78, 0x16, 0xBF, 0x8F, 0x01, 0xCF, 0xEA,
375 0x41, 0x41, 0x40, 0xDE, 0x5D, 0xAE, 0x22, 0x23,
376 0xB0, 0x03, 0x61, 0xA3, 0x96, 0x17, 0x7A, 0x9C,
377 0xB4, 0x10, 0xFF, 0x61, 0xF2, 0x00, 0x15, 0xAD },
378 { 0x24, 0x8D, 0x6A, 0x61, 0xD2, 0x06, 0x38, 0xB8,
379 0xE5, 0xC0, 0x26, 0x93, 0x0C, 0x3E, 0x60, 0x39,
380 0xA3, 0x3C, 0xE4, 0x59, 0x64, 0xFF, 0x21, 0x67,
381 0xF6, 0xEC, 0xED, 0xD4, 0x19, 0xDB, 0x06, 0xC1 },
382 { 0xCD, 0xC7, 0x6E, 0x5C, 0x99, 0x14, 0xFB, 0x92,
383 0x81, 0xA1, 0xC7, 0xE2, 0x84, 0xD7, 0x3E, 0x67,
384 0xF1, 0x80, 0x9A, 0x48, 0xA4, 0x97, 0x20, 0x0E,
385 0x04, 0x6D, 0x39, 0xCC, 0xC7, 0x11, 0x2C, 0xD0 }
394 unsigned char buf[1024];
400 for(
i = 0;
i < 6;
i++ )
414 for(
j = 0;
j < 1000;
j++ )
static void output(code_int code)
static int left(const struct frozen *f)
TH1X EXPRT * h1_book(const char *name, const char *title, int bins, double min, double max)
static void mbedtls_zeroize(void *v, size_t n)
void mbedtls_sha256_process(mbedtls_sha256_context *ctx, const unsigned char data[64])
#define GET_UINT32_BE(n, b, i)
#define PUT_UINT32_BE(n, b, i)
void mbedtls_sha256_finish(mbedtls_sha256_context *ctx, unsigned char output[32])
SHA-256 final digest.
void mbedtls_sha256(const unsigned char *input, size_t ilen, unsigned char output[32], int is224)
Output = SHA-256( input buffer )
void mbedtls_sha256_update(mbedtls_sha256_context *ctx, const unsigned char *input, size_t ilen)
SHA-256 process buffer.
void mbedtls_sha256_free(mbedtls_sha256_context *ctx)
Clear SHA-256 context.
static const unsigned char sha256_padding[64]
void mbedtls_sha256_init(mbedtls_sha256_context *ctx)
Initialize SHA-256 context.
#define P(a, b, c, d, e, f, g, h, x, K)
void mbedtls_sha256_clone(mbedtls_sha256_context *dst, const mbedtls_sha256_context *src)
Clone (the state of) a SHA-256 context.
static const uint32_t K[]
void mbedtls_sha256_starts(mbedtls_sha256_context *ctx, int is224)
SHA-256 context setup.
int mbedtls_sha256_self_test(int verbose)
Checkup routine.
SHA-256 context structure.