52#if !defined(MBEDTLS_CONFIG_FILE)
55#include MBEDTLS_CONFIG_FILE
58#if defined(MBEDTLS_SHA256_C)
65#if defined(MBEDTLS_SELF_TEST)
66#if defined(MBEDTLS_PLATFORM_C)
71#define mbedtls_printf printf
72#define mbedtls_calloc calloc
73#define mbedtls_free free
77#define SHA256_VALIDATE_RET(cond) \
78 MBEDTLS_INTERNAL_VALIDATE_RET( cond, MBEDTLS_ERR_SHA256_BAD_INPUT_DATA )
79#define SHA256_VALIDATE(cond) MBEDTLS_INTERNAL_VALIDATE( cond )
81#if !defined(MBEDTLS_SHA256_ALT)
87#define GET_UINT32_BE(n,b,i) \
89 (n) = ( (uint32_t) (b)[(i) ] << 24 ) \
90 | ( (uint32_t) (b)[(i) + 1] << 16 ) \
91 | ( (uint32_t) (b)[(i) + 2] << 8 ) \
92 | ( (uint32_t) (b)[(i) + 3] ); \
97#define PUT_UINT32_BE(n,b,i) \
99 (b)[(i) ] = (unsigned char) ( (n) >> 24 ); \
100 (b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \
101 (b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \
102 (b)[(i) + 3] = (unsigned char) ( (n) ); \
108 SHA256_VALIDATE(
ctx !=
NULL );
124 SHA256_VALIDATE(
dst !=
NULL );
125 SHA256_VALIDATE(
src !=
NULL );
135 SHA256_VALIDATE_RET(
ctx !=
NULL );
136 SHA256_VALIDATE_RET( is224 == 0 || is224 == 1 );
144 ctx->state[0] = 0x6A09E667;
145 ctx->state[1] = 0xBB67AE85;
146 ctx->state[2] = 0x3C6EF372;
147 ctx->state[3] = 0xA54FF53A;
148 ctx->state[4] = 0x510E527F;
149 ctx->state[5] = 0x9B05688C;
150 ctx->state[6] = 0x1F83D9AB;
151 ctx->state[7] = 0x5BE0CD19;
156 ctx->state[0] = 0xC1059ED8;
157 ctx->state[1] = 0x367CD507;
158 ctx->state[2] = 0x3070DD17;
159 ctx->state[3] = 0xF70E5939;
160 ctx->state[4] = 0xFFC00B31;
161 ctx->state[5] = 0x68581511;
162 ctx->state[6] = 0x64F98FA7;
163 ctx->state[7] = 0xBEFA4FA4;
171#if !defined(MBEDTLS_DEPRECATED_REMOVED)
179#if !defined(MBEDTLS_SHA256_PROCESS_ALT)
182 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
183 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
184 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
185 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
186 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
187 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
188 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
189 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
190 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
191 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
192 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
193 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
194 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
195 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
196 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
197 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2,
200#define SHR(x,n) (((x) & 0xFFFFFFFF) >> (n))
201#define ROTR(x,n) (SHR(x,n) | ((x) << (32 - (n))))
203#define S0(x) (ROTR(x, 7) ^ ROTR(x,18) ^ SHR(x, 3))
204#define S1(x) (ROTR(x,17) ^ ROTR(x,19) ^ SHR(x,10))
206#define S2(x) (ROTR(x, 2) ^ ROTR(x,13) ^ ROTR(x,22))
207#define S3(x) (ROTR(x, 6) ^ ROTR(x,11) ^ ROTR(x,25))
209#define F0(x,y,z) (((x) & (y)) | ((z) & ((x) | (y))))
210#define F1(x,y,z) ((z) ^ ((x) & ((y) ^ (z))))
214 local.W[t] = S1(local.W[(t) - 2]) + local.W[(t) - 7] + \
215 S0(local.W[(t) - 15]) + local.W[(t) - 16] \
218#define P(a,b,c,d,e,f,g,h,x,K) \
221 local.temp1 = (h) + S3(e) + F1((e),(f),(g)) + (K) + (x); \
222 local.temp2 = S2(a) + F0((a),(b),(c)); \
223 (d) += local.temp1; (h) = local.temp1 + local.temp2; \
227 const unsigned char data[64] )
237 SHA256_VALIDATE_RET(
ctx !=
NULL );
238 SHA256_VALIDATE_RET( (
const unsigned char *)
data !=
NULL );
240 for(
i = 0;
i < 8;
i++ )
243#
if defined(MBEDTLS_SHA256_SMALLER)
244 for(
i = 0;
i < 64;
i++ )
261 for(
i = 0;
i < 16;
i++ )
264 for(
i = 0;
i < 16;
i += 8 )
284 for(
i = 16;
i < 64;
i += 8 )
305 for(
i = 0;
i < 8;
i++ )
314#if !defined(MBEDTLS_DEPRECATED_REMOVED)
316 const unsigned char data[64] )
327 const unsigned char *
input,
334 SHA256_VALIDATE_RET(
ctx !=
NULL );
335 SHA256_VALIDATE_RET( ilen == 0 ||
input !=
NULL );
344 ctx->total[0] &= 0xFFFFFFFF;
376#if !defined(MBEDTLS_DEPRECATED_REMOVED)
378 const unsigned char *
input,
389 unsigned char output[32] )
395 SHA256_VALIDATE_RET(
ctx !=
NULL );
396 SHA256_VALIDATE_RET( (
unsigned char *)output !=
NULL );
424 high = (
ctx->total[0] >> 29 )
425 | (
ctx->total[1] << 3 );
426 low = (
ctx->total[0] << 3 );
428 PUT_UINT32_BE( high,
ctx->buffer, 56 );
429 PUT_UINT32_BE( low,
ctx->buffer, 60 );
437 PUT_UINT32_BE(
ctx->state[0], output, 0 );
438 PUT_UINT32_BE(
ctx->state[1], output, 4 );
439 PUT_UINT32_BE(
ctx->state[2], output, 8 );
440 PUT_UINT32_BE(
ctx->state[3], output, 12 );
441 PUT_UINT32_BE(
ctx->state[4], output, 16 );
442 PUT_UINT32_BE(
ctx->state[5], output, 20 );
443 PUT_UINT32_BE(
ctx->state[6], output, 24 );
445 if(
ctx->is224 == 0 )
446 PUT_UINT32_BE(
ctx->state[7], output, 28 );
451#if !defined(MBEDTLS_DEPRECATED_REMOVED)
453 unsigned char output[32] )
466 unsigned char output[32],
472 SHA256_VALIDATE_RET( is224 == 0 || is224 == 1 );
473 SHA256_VALIDATE_RET( ilen == 0 ||
input !=
NULL );
474 SHA256_VALIDATE_RET( (
unsigned char *)output !=
NULL );
493#if !defined(MBEDTLS_DEPRECATED_REMOVED)
496 unsigned char output[32],
503#if defined(MBEDTLS_SELF_TEST)
507static const unsigned char sha256_test_buf[3][57] =
510 {
"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" },
514static const size_t sha256_test_buflen[3] =
519static const unsigned char sha256_test_sum[6][32] =
524 { 0x23, 0x09, 0x7D, 0x22, 0x34, 0x05, 0xD8, 0x22,
525 0x86, 0x42, 0xA4, 0x77, 0xBD, 0xA2, 0x55, 0xB3,
526 0x2A, 0xAD, 0xBC, 0xE4, 0xBD, 0xA0, 0xB3, 0xF7,
527 0xE3, 0x6C, 0x9D, 0xA7 },
528 { 0x75, 0x38, 0x8B, 0x16, 0x51, 0x27, 0x76, 0xCC,
529 0x5D, 0xBA, 0x5D, 0xA1, 0xFD, 0x89, 0x01, 0x50,
530 0xB0, 0xC6, 0x45, 0x5C, 0xB4, 0xF5, 0x8B, 0x19,
531 0x52, 0x52, 0x25, 0x25 },
532 { 0x20, 0x79, 0x46, 0x55, 0x98, 0x0C, 0x91, 0xD8,
533 0xBB, 0xB4, 0xC1, 0xEA, 0x97, 0x61, 0x8A, 0x4B,
534 0xF0, 0x3F, 0x42, 0x58, 0x19, 0x48, 0xB2, 0xEE,
535 0x4E, 0xE7, 0xAD, 0x67 },
540 { 0xBA, 0x78, 0x16, 0xBF, 0x8F, 0x01, 0xCF, 0xEA,
541 0x41, 0x41, 0x40, 0xDE, 0x5D, 0xAE, 0x22, 0x23,
542 0xB0, 0x03, 0x61, 0xA3, 0x96, 0x17, 0x7A, 0x9C,
543 0xB4, 0x10, 0xFF, 0x61, 0xF2, 0x00, 0x15, 0xAD },
544 { 0x24, 0x8D, 0x6A, 0x61, 0xD2, 0x06, 0x38, 0xB8,
545 0xE5, 0xC0, 0x26, 0x93, 0x0C, 0x3E, 0x60, 0x39,
546 0xA3, 0x3C, 0xE4, 0x59, 0x64, 0xFF, 0x21, 0x67,
547 0xF6, 0xEC, 0xED, 0xD4, 0x19, 0xDB, 0x06, 0xC1 },
548 { 0xCD, 0xC7, 0x6E, 0x5C, 0x99, 0x14, 0xFB, 0x92,
549 0x81, 0xA1, 0xC7, 0xE2, 0x84, 0xD7, 0x3E, 0x67,
550 0xF1, 0x80, 0x9A, 0x48, 0xA4, 0x97, 0x20, 0x0E,
551 0x04, 0x6D, 0x39, 0xCC, 0xC7, 0x11, 0x2C, 0xD0 }
557int mbedtls_sha256_self_test(
int verbose )
559 int i,
j,
k, buflen,
ret = 0;
561 unsigned char sha256sum[32];
575 for(
i = 0;
i < 6;
i++ )
590 for(
j = 0;
j < 1000;
j++ )
601 sha256_test_buflen[
j] );
610 if(
memcmp( sha256sum, sha256_test_sum[
i], 32 -
k * 4 ) != 0 )
_STLP_MOVE_TO_STD_NAMESPACE void fill(_ForwardIter __first, _ForwardIter __last, const _Tp &__val)
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLenum GLuint GLenum GLsizei const GLchar * buf
GLenum GLenum GLenum input
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
#define memcpy(s1, s2, n)
Configuration options (set of defines)
This file contains SHA-224 and SHA-256 definitions and functions.
MBEDTLS_DEPRECATED void mbedtls_sha256_process(mbedtls_sha256_context *ctx, const unsigned char data[64])
This function processes a single data block within the ongoing SHA-256 computation....
MBEDTLS_DEPRECATED void mbedtls_sha256(const unsigned char *input, size_t ilen, unsigned char output[32], int is224)
This function calculates the SHA-224 or SHA-256 checksum of a buffer.
void mbedtls_sha256_free(mbedtls_sha256_context *ctx)
This function clears a SHA-256 context.
MBEDTLS_DEPRECATED void mbedtls_sha256_finish(mbedtls_sha256_context *ctx, unsigned char output[32])
This function finishes the SHA-256 operation, and writes the result to the output buffer.
MBEDTLS_DEPRECATED void mbedtls_sha256_update(mbedtls_sha256_context *ctx, const unsigned char *input, size_t ilen)
This function feeds an input buffer into an ongoing SHA-256 checksum calculation.
void mbedtls_sha256_init(mbedtls_sha256_context *ctx)
This function initializes a SHA-256 context.
int mbedtls_internal_sha256_process(mbedtls_sha256_context *ctx, const unsigned char data[64])
This function processes a single data block within the ongoing SHA-256 computation....
void mbedtls_sha256_clone(mbedtls_sha256_context *dst, const mbedtls_sha256_context *src)
This function clones the state of a SHA-256 context.
MBEDTLS_DEPRECATED void mbedtls_sha256_starts(mbedtls_sha256_context *ctx, int is224)
This function starts a SHA-224 or SHA-256 checksum calculation.
int mbedtls_sha256_ret(const unsigned char *input, size_t ilen, unsigned char output[32], int is224)
This function calculates the SHA-224 or SHA-256 checksum of a buffer.
int mbedtls_sha256_finish_ret(mbedtls_sha256_context *ctx, unsigned char output[32])
This function finishes the SHA-256 operation, and writes the result to the output buffer.
int mbedtls_sha256_starts_ret(mbedtls_sha256_context *ctx, int is224)
This function starts a SHA-224 or SHA-256 checksum calculation.
int mbedtls_sha256_update_ret(mbedtls_sha256_context *ctx, const unsigned char *input, size_t ilen)
This function feeds an input buffer into an ongoing SHA-256 checksum calculation.
The SHA-256 context structure.