34#if 1 || defined(MBEDTLS_SHA512_C)
39#if defined(_MSC_VER) || defined(__WATCOMC__)
40 #define UL64(x) x##ui64
42 #define UL64(x) x##ULL
47#if defined(MBEDTLS_SELF_TEST)
48#if defined(MBEDTLS_PLATFORM_C)
49#include "mbedtls/platform.h"
52#define mbedtls_printf printf
58 volatile unsigned char *p = (
unsigned char*)v;
while(
n-- ) *p++ = 0;
61#if !defined(MBEDTLS_SHA512_ALT)
67#define GET_UINT64_BE(n,b,i) \
69 (n) = ( (uint64_t) (b)[(i) ] << 56 ) \
70 | ( (uint64_t) (b)[(i) + 1] << 48 ) \
71 | ( (uint64_t) (b)[(i) + 2] << 40 ) \
72 | ( (uint64_t) (b)[(i) + 3] << 32 ) \
73 | ( (uint64_t) (b)[(i) + 4] << 24 ) \
74 | ( (uint64_t) (b)[(i) + 5] << 16 ) \
75 | ( (uint64_t) (b)[(i) + 6] << 8 ) \
76 | ( (uint64_t) (b)[(i) + 7] ); \
81#define PUT_UINT64_BE(n,b,i) \
83 (b)[(i) ] = (unsigned char) ( (n) >> 56 ); \
84 (b)[(i) + 1] = (unsigned char) ( (n) >> 48 ); \
85 (b)[(i) + 2] = (unsigned char) ( (n) >> 40 ); \
86 (b)[(i) + 3] = (unsigned char) ( (n) >> 32 ); \
87 (b)[(i) + 4] = (unsigned char) ( (n) >> 24 ); \
88 (b)[(i) + 5] = (unsigned char) ( (n) >> 16 ); \
89 (b)[(i) + 6] = (unsigned char) ( (n) >> 8 ); \
90 (b)[(i) + 7] = (unsigned char) ( (n) ); \
99 UL64(0x428A2F98D728AE22),
UL64(0x7137449123EF65CD),
100 UL64(0xB5C0FBCFEC4D3B2F),
UL64(0xE9B5DBA58189DBBC),
101 UL64(0x3956C25BF348B538),
UL64(0x59F111F1B605D019),
102 UL64(0x923F82A4AF194F9B),
UL64(0xAB1C5ED5DA6D8118),
103 UL64(0xD807AA98A3030242),
UL64(0x12835B0145706FBE),
104 UL64(0x243185BE4EE4B28C),
UL64(0x550C7DC3D5FFB4E2),
105 UL64(0x72BE5D74F27B896F),
UL64(0x80DEB1FE3B1696B1),
106 UL64(0x9BDC06A725C71235),
UL64(0xC19BF174CF692694),
107 UL64(0xE49B69C19EF14AD2),
UL64(0xEFBE4786384F25E3),
108 UL64(0x0FC19DC68B8CD5B5),
UL64(0x240CA1CC77AC9C65),
109 UL64(0x2DE92C6F592B0275),
UL64(0x4A7484AA6EA6E483),
110 UL64(0x5CB0A9DCBD41FBD4),
UL64(0x76F988DA831153B5),
111 UL64(0x983E5152EE66DFAB),
UL64(0xA831C66D2DB43210),
112 UL64(0xB00327C898FB213F),
UL64(0xBF597FC7BEEF0EE4),
113 UL64(0xC6E00BF33DA88FC2),
UL64(0xD5A79147930AA725),
114 UL64(0x06CA6351E003826F),
UL64(0x142929670A0E6E70),
115 UL64(0x27B70A8546D22FFC),
UL64(0x2E1B21385C26C926),
116 UL64(0x4D2C6DFC5AC42AED),
UL64(0x53380D139D95B3DF),
117 UL64(0x650A73548BAF63DE),
UL64(0x766A0ABB3C77B2A8),
118 UL64(0x81C2C92E47EDAEE6),
UL64(0x92722C851482353B),
119 UL64(0xA2BFE8A14CF10364),
UL64(0xA81A664BBC423001),
120 UL64(0xC24B8B70D0F89791),
UL64(0xC76C51A30654BE30),
121 UL64(0xD192E819D6EF5218),
UL64(0xD69906245565A910),
122 UL64(0xF40E35855771202A),
UL64(0x106AA07032BBD1B8),
123 UL64(0x19A4C116B8D2D0C8),
UL64(0x1E376C085141AB53),
124 UL64(0x2748774CDF8EEB99),
UL64(0x34B0BCB5E19B48A8),
125 UL64(0x391C0CB3C5C95A63),
UL64(0x4ED8AA4AE3418ACB),
126 UL64(0x5B9CCA4F7763E373),
UL64(0x682E6FF3D6B2B8A3),
127 UL64(0x748F82EE5DEFB2FC),
UL64(0x78A5636F43172F60),
128 UL64(0x84C87814A1F0AB72),
UL64(0x8CC702081A6439EC),
129 UL64(0x90BEFFFA23631E28),
UL64(0xA4506CEBDE82BDE9),
130 UL64(0xBEF9A3F7B2C67915),
UL64(0xC67178F2E372532B),
131 UL64(0xCA273ECEEA26619C),
UL64(0xD186B8C721C0C207),
132 UL64(0xEADA7DD6CDE0EB1E),
UL64(0xF57D4F7FEE6ED178),
133 UL64(0x06F067AA72176FBA),
UL64(0x0A637DC5A2C898A6),
134 UL64(0x113F9804BEF90DAE),
UL64(0x1B710B35131C471B),
135 UL64(0x28DB77F523047D84),
UL64(0x32CAAB7B40C72493),
136 UL64(0x3C9EBE0A15C9BEBC),
UL64(0x431D67C49C100D4C),
137 UL64(0x4CC5D4BECB3E42B6),
UL64(0x597F299CFC657E2A),
138 UL64(0x5FCB6FAB3AD6FAEC),
UL64(0x6C44198C4A475817)
171 ctx->
state[0] =
UL64(0x6A09E667F3BCC908);
172 ctx->
state[1] =
UL64(0xBB67AE8584CAA73B);
173 ctx->
state[2] =
UL64(0x3C6EF372FE94F82B);
174 ctx->
state[3] =
UL64(0xA54FF53A5F1D36F1);
175 ctx->
state[4] =
UL64(0x510E527FADE682D1);
176 ctx->
state[5] =
UL64(0x9B05688C2B3E6C1F);
177 ctx->
state[6] =
UL64(0x1F83D9ABFB41BD6B);
178 ctx->
state[7] =
UL64(0x5BE0CD19137E2179);
183 ctx->
state[0] =
UL64(0xCBBB9D5DC1059ED8);
184 ctx->
state[1] =
UL64(0x629A292A367CD507);
185 ctx->
state[2] =
UL64(0x9159015A3070DD17);
186 ctx->
state[3] =
UL64(0x152FECD8F70E5939);
187 ctx->
state[4] =
UL64(0x67332667FFC00B31);
188 ctx->
state[5] =
UL64(0x8EB44A8768581511);
189 ctx->
state[6] =
UL64(0xDB0C2E0D64F98FA7);
190 ctx->
state[7] =
UL64(0x47B5481DBEFA4FA4);
196#if !defined(MBEDTLS_SHA512_PROCESS_ALT)
203#define SHR(x,n) (x >> n)
204#define ROTR(x,n) (SHR(x,n) | (x << (64 - n)))
206#define S0(x) (ROTR(x, 1) ^ ROTR(x, 8) ^ SHR(x, 7))
207#define S1(x) (ROTR(x,19) ^ ROTR(x,61) ^ SHR(x, 6))
209#define S2(x) (ROTR(x,28) ^ ROTR(x,34) ^ ROTR(x,39))
210#define S3(x) (ROTR(x,14) ^ ROTR(x,18) ^ ROTR(x,41))
212#define F0(x,y,z) ((x & y) | (z & (x | y)))
213#define F1(x,y,z) (z ^ (x & (y ^ z)))
215#define P(a,b,c,d,e,f,g,h,x,K) \
217 temp1 = h + S3(e) + F1(e,f,g) + K + x; \
218 temp2 = S2(a) + F0(a,b,c); \
219 d += temp1; h = temp1 + temp2; \
222 for(
i = 0;
i < 16;
i++ )
230 S0(
W[
i - 15]) +
W[
i - 16];
309 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
310 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
311 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
312 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
313 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
314 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
315 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
316 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
329 | ( ctx->
total[1] << 3 );
348 if( ctx->
is384 == 0 )
361 unsigned char output[64],
int is384 )
372#if defined(MBEDTLS_SELF_TEST)
380 {
"abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
381 "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" },
395 { 0xCB, 0x00, 0x75, 0x3F, 0x45, 0xA3, 0x5E, 0x8B,
396 0xB5, 0xA0, 0x3D, 0x69, 0x9A, 0xC6, 0x50, 0x07,
397 0x27, 0x2C, 0x32, 0xAB, 0x0E, 0xDE, 0xD1, 0x63,
398 0x1A, 0x8B, 0x60, 0x5A, 0x43, 0xFF, 0x5B, 0xED,
399 0x80, 0x86, 0x07, 0x2B, 0xA1, 0xE7, 0xCC, 0x23,
400 0x58, 0xBA, 0xEC, 0xA1, 0x34, 0xC8, 0x25, 0xA7 },
401 { 0x09, 0x33, 0x0C, 0x33, 0xF7, 0x11, 0x47, 0xE8,
402 0x3D, 0x19, 0x2F, 0xC7, 0x82, 0xCD, 0x1B, 0x47,
403 0x53, 0x11, 0x1B, 0x17, 0x3B, 0x3B, 0x05, 0xD2,
404 0x2F, 0xA0, 0x80, 0x86, 0xE3, 0xB0, 0xF7, 0x12,
405 0xFC, 0xC7, 0xC7, 0x1A, 0x55, 0x7E, 0x2D, 0xB9,
406 0x66, 0xC3, 0xE9, 0xFA, 0x91, 0x74, 0x60, 0x39 },
407 { 0x9D, 0x0E, 0x18, 0x09, 0x71, 0x64, 0x74, 0xCB,
408 0x08, 0x6E, 0x83, 0x4E, 0x31, 0x0A, 0x4A, 0x1C,
409 0xED, 0x14, 0x9E, 0x9C, 0x00, 0xF2, 0x48, 0x52,
410 0x79, 0x72, 0xCE, 0xC5, 0x70, 0x4C, 0x2A, 0x5B,
411 0x07, 0xB8, 0xB3, 0xDC, 0x38, 0xEC, 0xC4, 0xEB,
412 0xAE, 0x97, 0xDD, 0xD8, 0x7F, 0x3D, 0x89, 0x85 },
417 { 0xDD, 0xAF, 0x35, 0xA1, 0x93, 0x61, 0x7A, 0xBA,
418 0xCC, 0x41, 0x73, 0x49, 0xAE, 0x20, 0x41, 0x31,
419 0x12, 0xE6, 0xFA, 0x4E, 0x89, 0xA9, 0x7E, 0xA2,
420 0x0A, 0x9E, 0xEE, 0xE6, 0x4B, 0x55, 0xD3, 0x9A,
421 0x21, 0x92, 0x99, 0x2A, 0x27, 0x4F, 0xC1, 0xA8,
422 0x36, 0xBA, 0x3C, 0x23, 0xA3, 0xFE, 0xEB, 0xBD,
423 0x45, 0x4D, 0x44, 0x23, 0x64, 0x3C, 0xE8, 0x0E,
424 0x2A, 0x9A, 0xC9, 0x4F, 0xA5, 0x4C, 0xA4, 0x9F },
425 { 0x8E, 0x95, 0x9B, 0x75, 0xDA, 0xE3, 0x13, 0xDA,
426 0x8C, 0xF4, 0xF7, 0x28, 0x14, 0xFC, 0x14, 0x3F,
427 0x8F, 0x77, 0x79, 0xC6, 0xEB, 0x9F, 0x7F, 0xA1,
428 0x72, 0x99, 0xAE, 0xAD, 0xB6, 0x88, 0x90, 0x18,
429 0x50, 0x1D, 0x28, 0x9E, 0x49, 0x00, 0xF7, 0xE4,
430 0x33, 0x1B, 0x99, 0xDE, 0xC4, 0xB5, 0x43, 0x3A,
431 0xC7, 0xD3, 0x29, 0xEE, 0xB6, 0xDD, 0x26, 0x54,
432 0x5E, 0x96, 0xE5, 0x5B, 0x87, 0x4B, 0xE9, 0x09 },
433 { 0xE7, 0x18, 0x48, 0x3D, 0x0C, 0xE7, 0x69, 0x64,
434 0x4E, 0x2E, 0x42, 0xC7, 0xBC, 0x15, 0xB4, 0x63,
435 0x8E, 0x1F, 0x98, 0xB1, 0x3B, 0x20, 0x44, 0x28,
436 0x56, 0x32, 0xA8, 0x03, 0xAF, 0xA9, 0x73, 0xEB,
437 0xDE, 0x0F, 0xF2, 0x44, 0x87, 0x7E, 0xA6, 0x0A,
438 0x4C, 0xB0, 0x43, 0x2C, 0xE5, 0x77, 0xC3, 0x1B,
439 0xEB, 0x00, 0x9C, 0x5C, 0x2C, 0x49, 0xAA, 0x2E,
440 0x4E, 0xAD, 0xB2, 0x17, 0xAD, 0x8C, 0xC0, 0x9B }
449 unsigned char buf[1024];
455 for(
i = 0;
i < 6;
i++ )
469 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_sha512_starts(mbedtls_sha512_context *ctx, int is384)
SHA-512 context setup.
void mbedtls_sha512_process(mbedtls_sha512_context *ctx, const unsigned char data[128])
void mbedtls_sha512_clone(mbedtls_sha512_context *dst, const mbedtls_sha512_context *src)
Clone (the state of) a SHA-512 context.
void mbedtls_sha512_update(mbedtls_sha512_context *ctx, const unsigned char *input, size_t ilen)
SHA-512 process buffer.
void mbedtls_sha512_free(mbedtls_sha512_context *ctx)
Clear SHA-512 context.
void mbedtls_sha512(const unsigned char *input, size_t ilen, unsigned char output[64], int is384)
Output = SHA-512( input buffer )
#define P(a, b, c, d, e, f, g, h, x, K)
void mbedtls_sha512_finish(mbedtls_sha512_context *ctx, unsigned char output[64])
SHA-512 final digest.
#define GET_UINT64_BE(n, b, i)
static const uint64_t K[80]
static const unsigned char sha512_padding[128]
#define PUT_UINT64_BE(n, b, i)
void mbedtls_sha512_init(mbedtls_sha512_context *ctx)
Initialize SHA-512 context.
int mbedtls_sha512_self_test(int verbose)
Checkup routine.
SHA-512 context structure.
unsigned char buffer[128]