MIDAS
Loading...
Searching...
No Matches
sha512.cxx
Go to the documentation of this file.
1/*
2 * FIPS-180-2 compliant SHA-384/512 implementation
3 *
4 * Copyright (C) 2006-2014, ARM Limited, All Rights Reserved
5 *
6 * This file is part of mbed TLS (https://tls.mbed.org)
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License along
19 * with this program; if not, write to the Free Software Foundation, Inc.,
20 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21 */
22/*
23 * The SHA-512 Secure Hash Standard was published by NIST in 2002.
24 *
25 * http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf
26 */
27
28//#if !defined(MBEDTLS_CONFIG_FILE)
29//#include "mbedtls/config.h"
30//#else
31//#include MBEDTLS_CONFIG_FILE
32//#endif
33
34#if 1 || defined(MBEDTLS_SHA512_C)
35
36//#include "mbedtls/sha512.h"
37#include "sha512.h"
38
39#if defined(_MSC_VER) || defined(__WATCOMC__)
40 #define UL64(x) x##ui64
41#else
42 #define UL64(x) x##ULL
43#endif
44
45#include <string.h>
46
47#if defined(MBEDTLS_SELF_TEST)
48#if defined(MBEDTLS_PLATFORM_C)
49#include "mbedtls/platform.h"
50#else
51#include <stdio.h>
52#define mbedtls_printf printf
53#endif /* MBEDTLS_PLATFORM_C */
54#endif /* MBEDTLS_SELF_TEST */
55
56/* Implementation that should never be optimized out by the compiler */
57static void mbedtls_zeroize( void *v, size_t n ) {
58 volatile unsigned char *p = (unsigned char*)v; while( n-- ) *p++ = 0;
59}
60
61#if !defined(MBEDTLS_SHA512_ALT)
62
63/*
64 * 64-bit integer manipulation macros (big endian)
65 */
66#ifndef GET_UINT64_BE
67#define GET_UINT64_BE(n,b,i) \
68{ \
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] ); \
77}
78#endif /* GET_UINT64_BE */
79
80#ifndef PUT_UINT64_BE
81#define PUT_UINT64_BE(n,b,i) \
82{ \
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) ); \
91}
92#endif /* PUT_UINT64_BE */
93
94/*
95 * Round constants
96 */
97static const uint64_t K[80] =
98{
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)
139};
140
142{
143 memset( ctx, 0, sizeof( mbedtls_sha512_context ) );
144}
145
147{
148 if( ctx == NULL )
149 return;
150
151 mbedtls_zeroize( ctx, sizeof( mbedtls_sha512_context ) );
152}
153
155 const mbedtls_sha512_context *src )
156{
157 *dst = *src;
158}
159
160/*
161 * SHA-512 context setup
162 */
164{
165 ctx->total[0] = 0;
166 ctx->total[1] = 0;
167
168 if( is384 == 0 )
169 {
170 /* SHA-512 */
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);
179 }
180 else
181 {
182 /* SHA-384 */
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);
191 }
192
193 ctx->is384 = is384;
194}
195
196#if !defined(MBEDTLS_SHA512_PROCESS_ALT)
197void mbedtls_sha512_process( mbedtls_sha512_context *ctx, const unsigned char data[128] )
198{
199 int i;
200 uint64_t temp1, temp2, W[80];
201 uint64_t A, B, C, D, E, F, G, H;
202
203#define SHR(x,n) (x >> n)
204#define ROTR(x,n) (SHR(x,n) | (x << (64 - n)))
205
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))
208
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))
211
212#define F0(x,y,z) ((x & y) | (z & (x | y)))
213#define F1(x,y,z) (z ^ (x & (y ^ z)))
214
215#define P(a,b,c,d,e,f,g,h,x,K) \
216{ \
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; \
220}
221
222 for( i = 0; i < 16; i++ )
223 {
224 GET_UINT64_BE( W[i], data, i << 3 );
225 }
226
227 for( ; i < 80; i++ )
228 {
229 W[i] = S1(W[i - 2]) + W[i - 7] +
230 S0(W[i - 15]) + W[i - 16];
231 }
232
233 A = ctx->state[0];
234 B = ctx->state[1];
235 C = ctx->state[2];
236 D = ctx->state[3];
237 E = ctx->state[4];
238 F = ctx->state[5];
239 G = ctx->state[6];
240 H = ctx->state[7];
241 i = 0;
242
243 do
244 {
245 P( A, B, C, D, E, F, G, H, W[i], K[i] ); i++;
246 P( H, A, B, C, D, E, F, G, W[i], K[i] ); i++;
247 P( G, H, A, B, C, D, E, F, W[i], K[i] ); i++;
248 P( F, G, H, A, B, C, D, E, W[i], K[i] ); i++;
249 P( E, F, G, H, A, B, C, D, W[i], K[i] ); i++;
250 P( D, E, F, G, H, A, B, C, W[i], K[i] ); i++;
251 P( C, D, E, F, G, H, A, B, W[i], K[i] ); i++;
252 P( B, C, D, E, F, G, H, A, W[i], K[i] ); i++;
253 }
254 while( i < 80 );
255
256 ctx->state[0] += A;
257 ctx->state[1] += B;
258 ctx->state[2] += C;
259 ctx->state[3] += D;
260 ctx->state[4] += E;
261 ctx->state[5] += F;
262 ctx->state[6] += G;
263 ctx->state[7] += H;
264}
265#endif /* !MBEDTLS_SHA512_PROCESS_ALT */
266
267/*
268 * SHA-512 process buffer
269 */
270void mbedtls_sha512_update( mbedtls_sha512_context *ctx, const unsigned char *input,
271 size_t ilen )
272{
273 size_t fill;
274 unsigned int left;
275
276 if( ilen == 0 )
277 return;
278
279 left = (unsigned int) (ctx->total[0] & 0x7F);
280 fill = 128 - left;
281
282 ctx->total[0] += (uint64_t) ilen;
283
284 if( ctx->total[0] < (uint64_t) ilen )
285 ctx->total[1]++;
286
287 if( left && ilen >= fill )
288 {
289 memcpy( (void *) (ctx->buffer + left), input, fill );
290 mbedtls_sha512_process( ctx, ctx->buffer );
291 input += fill;
292 ilen -= fill;
293 left = 0;
294 }
295
296 while( ilen >= 128 )
297 {
299 input += 128;
300 ilen -= 128;
301 }
302
303 if( ilen > 0 )
304 memcpy( (void *) (ctx->buffer + left), input, ilen );
305}
306
307static const unsigned char sha512_padding[128] =
308{
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
317};
318
319/*
320 * SHA-512 final digest
321 */
323{
324 size_t last, padn;
326 unsigned char msglen[16];
327
328 high = ( ctx->total[0] >> 61 )
329 | ( ctx->total[1] << 3 );
330 low = ( ctx->total[0] << 3 );
331
333 PUT_UINT64_BE( low, msglen, 8 );
334
335 last = (size_t)( ctx->total[0] & 0x7F );
336 padn = ( last < 112 ) ? ( 112 - last ) : ( 240 - last );
337
339 mbedtls_sha512_update( ctx, msglen, 16 );
340
341 PUT_UINT64_BE( ctx->state[0], output, 0 );
342 PUT_UINT64_BE( ctx->state[1], output, 8 );
343 PUT_UINT64_BE( ctx->state[2], output, 16 );
344 PUT_UINT64_BE( ctx->state[3], output, 24 );
345 PUT_UINT64_BE( ctx->state[4], output, 32 );
346 PUT_UINT64_BE( ctx->state[5], output, 40 );
347
348 if( ctx->is384 == 0 )
349 {
350 PUT_UINT64_BE( ctx->state[6], output, 48 );
351 PUT_UINT64_BE( ctx->state[7], output, 56 );
352 }
353}
354
355#endif /* !MBEDTLS_SHA512_ALT */
356
357/*
358 * output = SHA-512( input buffer )
359 */
360void mbedtls_sha512( const unsigned char *input, size_t ilen,
361 unsigned char output[64], int is384 )
362{
364
365 mbedtls_sha512_init( &ctx );
366 mbedtls_sha512_starts( &ctx, is384 );
369 mbedtls_sha512_free( &ctx );
370}
371
372#if defined(MBEDTLS_SELF_TEST)
373
374/*
375 * FIPS-180-2 test vectors
376 */
377static const unsigned char sha512_test_buf[3][113] =
378{
379 { "abc" },
380 { "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
381 "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" },
382 { "" }
383};
384
385static const int sha512_test_buflen[3] =
386{
387 3, 112, 1000
388};
389
390static const unsigned char sha512_test_sum[6][64] =
391{
392 /*
393 * SHA-384 test vectors
394 */
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 },
413
414 /*
415 * SHA-512 test vectors
416 */
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 }
441};
442
443/*
444 * Checkup routine
445 */
447{
448 int i, j, k, buflen, ret = 0;
449 unsigned char buf[1024];
450 unsigned char sha512sum[64];
452
453 mbedtls_sha512_init( &ctx );
454
455 for( i = 0; i < 6; i++ )
456 {
457 j = i % 3;
458 k = i < 3;
459
460 if( verbose != 0 )
461 mbedtls_printf( " SHA-%d test #%d: ", 512 - k * 128, j + 1 );
462
463 mbedtls_sha512_starts( &ctx, k );
464
465 if( j == 2 )
466 {
467 memset( buf, 'a', buflen = 1000 );
468
469 for( j = 0; j < 1000; j++ )
470 mbedtls_sha512_update( &ctx, buf, buflen );
471 }
472 else
475
477
478 if( memcmp( sha512sum, sha512_test_sum[i], 64 - k * 16 ) != 0 )
479 {
480 if( verbose != 0 )
481 mbedtls_printf( "failed\n" );
482
483 ret = 1;
484 goto exit;
485 }
486
487 if( verbose != 0 )
488 mbedtls_printf( "passed\n" );
489 }
490
491 if( verbose != 0 )
492 mbedtls_printf( "\n" );
493
494exit:
495 mbedtls_sha512_free( &ctx );
496
497 return( ret );
498}
499
500#endif /* MBEDTLS_SELF_TEST */
501
502#endif /* MBEDTLS_SHA512_C */
Definition test_init.cxx:9
DWORD n[4]
Definition mana.cxx:247
void * data
Definition mana.cxx:268
BOOL verbose
Definition mana.cxx:255
INT i
Definition mdump.cxx:32
static void output(code_int code)
Definition mgd.cxx:1647
static int left(const struct frozen *f)
INT j
Definition odbhist.cxx:40
INT k
Definition odbhist.cxx:40
TH1X EXPRT * h1_book(const char *name, const char *title, int bins, double min, double max)
Definition rmidas.h:24
static void mbedtls_zeroize(void *v, size_t n)
Definition sha512.cxx:57
void mbedtls_sha512_starts(mbedtls_sha512_context *ctx, int is384)
SHA-512 context setup.
Definition sha512.cxx:163
void mbedtls_sha512_process(mbedtls_sha512_context *ctx, const unsigned char data[128])
Definition sha512.cxx:197
void mbedtls_sha512_clone(mbedtls_sha512_context *dst, const mbedtls_sha512_context *src)
Clone (the state of) a SHA-512 context.
Definition sha512.cxx:154
#define S0(x)
void mbedtls_sha512_update(mbedtls_sha512_context *ctx, const unsigned char *input, size_t ilen)
SHA-512 process buffer.
Definition sha512.cxx:270
#define S1(x)
void mbedtls_sha512_free(mbedtls_sha512_context *ctx)
Clear SHA-512 context.
Definition sha512.cxx:146
void mbedtls_sha512(const unsigned char *input, size_t ilen, unsigned char output[64], int is384)
Output = SHA-512( input buffer )
Definition sha512.cxx:360
#define UL64(x)
Definition sha512.cxx:42
#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.
Definition sha512.cxx:322
#define GET_UINT64_BE(n, b, i)
Definition sha512.cxx:67
static const uint64_t K[80]
Definition sha512.cxx:97
static const unsigned char sha512_padding[128]
Definition sha512.cxx:307
#define PUT_UINT64_BE(n, b, i)
Definition sha512.cxx:81
void mbedtls_sha512_init(mbedtls_sha512_context *ctx)
Initialize SHA-512 context.
Definition sha512.cxx:141
int mbedtls_sha512_self_test(int verbose)
Checkup routine.
SHA-512 context structure.
Definition sha512.h:48
uint64_t total[2]
Definition sha512.h:49
unsigned char buffer[128]
Definition sha512.h:51
uint64_t state[8]
Definition sha512.h:50