32 #define TRACE_LEVEL CRYPTO_TRACE_LEVEL
35 #include <mcuxClEls.h>
43 #if (MCXN947_CRYPTO_HASH_SUPPORT == ENABLED)
46 static const uint8_t padding[128] =
48 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
49 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
50 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
51 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
52 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
53 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
54 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
55 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
80 blockSize = (algo == MCUXCLELS_HASH_MODE_SHA_256) ? 64 : 128;
87 options.bits.hashini = MCUXCLELS_HASH_INIT_ENABLE;
88 options.bits.hashld = MCUXCLELS_HASH_LOAD_DISABLE;
90 options.bits.hashoe = MCUXCLELS_HASH_OUTPUT_ENABLE;
91 options.bits.rtfupd = MCUXCLELS_HASH_RTF_UPDATE_DISABLE;
92 options.bits.rtfoe = MCUXCLELS_HASH_RTF_OUTPUT_DISABLE;
95 MCUX_CSSL_FP_FUNCTION_CALL_BEGIN(status,
token, mcuxClEls_Hash_Async(
96 options, padding, blockSize, temp));
99 if(
token != MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClEls_Hash_Async) ||
100 status != MCUXCLELS_STATUS_OK_WAIT)
106 MCUX_CSSL_FP_FUNCTION_CALL_END();
112 MCUX_CSSL_FP_FUNCTION_CALL_BEGIN(status,
token, mcuxClEls_WaitForOperation(
113 MCUXCLELS_ERROR_FLAGS_CLEAR));
116 if(
token != MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClEls_WaitForOperation) ||
117 status != MCUXCLELS_STATUS_OK)
123 MCUX_CSSL_FP_FUNCTION_CALL_END();
130 options.bits.hashini = MCUXCLELS_HASH_INIT_DISABLE;
131 options.bits.hashld = MCUXCLELS_HASH_LOAD_ENABLE;
134 MCUX_CSSL_FP_FUNCTION_CALL_BEGIN(status,
token, mcuxClEls_Hash_Async(
138 if(
token != MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClEls_Hash_Async) ||
139 status != MCUXCLELS_STATUS_OK_WAIT)
145 MCUX_CSSL_FP_FUNCTION_CALL_END();
152 MCUX_CSSL_FP_FUNCTION_CALL_BEGIN(status,
token, mcuxClEls_WaitForOperation(
153 MCUXCLELS_ERROR_FLAGS_CLEAR));
156 if(
token != MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClEls_WaitForOperation) ||
157 status != MCUXCLELS_STATUS_OK)
163 MCUX_CSSL_FP_FUNCTION_CALL_END();
174 #if (SHA224_SUPPORT == ENABLED)
184 context->
h[0] =
BETOH32(0xC1059ED8);
185 context->
h[1] =
BETOH32(0x367CD507);
186 context->
h[2] =
BETOH32(0x3070DD17);
187 context->
h[3] =
BETOH32(0xF70E5939);
188 context->
h[4] =
BETOH32(0xFFC00B31);
189 context->
h[5] =
BETOH32(0x68581511);
190 context->
h[6] =
BETOH32(0x64F98FA7);
191 context->
h[7] =
BETOH32(0xBEFA4FA4);
200 #if (SHA256_SUPPORT == ENABLED)
210 context->
h[0] =
BETOH32(0x6A09E667);
211 context->
h[1] =
BETOH32(0xBB67AE85);
212 context->
h[2] =
BETOH32(0x3C6EF372);
213 context->
h[3] =
BETOH32(0xA54FF53A);
214 context->
h[4] =
BETOH32(0x510E527F);
215 context->
h[5] =
BETOH32(0x9B05688C);
216 context->
h[6] =
BETOH32(0x1F83D9AB);
217 context->
h[7] =
BETOH32(0x5BE0CD19);
272 if(context->
size == 64)
276 context->
size, context->
h);
302 if(context->
size < 56)
304 paddingSize = 56 - context->
size;
308 paddingSize = 64 + 56 - context->
size;
315 for(i = 0; i < 8; i++)
317 context->
buffer[63 - i] = totalSize & 0xFF;
351 #if (SHA384_SUPPORT == ENABLED)
361 context->
h[0] =
BETOH64(0xCBBB9D5DC1059ED8);
362 context->
h[1] =
BETOH64(0x629A292A367CD507);
363 context->
h[2] =
BETOH64(0x9159015A3070DD17);
364 context->
h[3] =
BETOH64(0x152FECD8F70E5939);
365 context->
h[4] =
BETOH64(0x67332667FFC00B31);
366 context->
h[5] =
BETOH64(0x8EB44A8768581511);
367 context->
h[6] =
BETOH64(0xDB0C2E0D64F98FA7);
368 context->
h[7] =
BETOH64(0x47B5481DBEFA4FA4);
395 #if (SHA512_SUPPORT == ENABLED)
405 context->
h[0] =
BETOH64(0x6A09E667F3BCC908);
406 context->
h[1] =
BETOH64(0xBB67AE8584CAA73B);
407 context->
h[2] =
BETOH64(0x3C6EF372FE94F82B);
408 context->
h[3] =
BETOH64(0xA54FF53A5F1D36F1);
409 context->
h[4] =
BETOH64(0x510E527FADE682D1);
410 context->
h[5] =
BETOH64(0x9B05688C2B3E6C1F);
411 context->
h[6] =
BETOH64(0x1F83D9ABFB41BD6B);
412 context->
h[7] =
BETOH64(0x5BE0CD19137E2179);
443 (uint32_t *) context->
h);
469 if(context->
size == 128)
473 context->
size, (uint32_t *) context->
h);
499 if(context->
size < 112)
501 paddingSize = 112 - context->
size;
505 paddingSize = 128 + 112 - context->
size;
512 for(i = 0; i < 16; i++)
514 context->
buffer[127 - i] = totalSize & 0xFF;
520 (uint32_t *) context->
h);
530 #if (SHA512_224_SUPPORT == ENABLED)
540 context->
h[0] =
BETOH64(0x8C3D37C819544DA2);
541 context->
h[1] =
BETOH64(0x73E1996689DCD4D6);
542 context->
h[2] =
BETOH64(0x1DFAB7AE32FF9C82);
543 context->
h[3] =
BETOH64(0x679DD514582F9FCF);
544 context->
h[4] =
BETOH64(0x0F6D2B697BD44DA8);
545 context->
h[5] =
BETOH64(0x77E36F7304C48942);
546 context->
h[6] =
BETOH64(0x3F9D85A86A1D36C8);
547 context->
h[7] =
BETOH64(0x1112E6AD91D692A1);
556 #if (SHA512_256_SUPPORT == ENABLED)
566 context->
h[0] =
BETOH64(0x22312194FC2BF72C);
567 context->
h[1] =
BETOH64(0x9F555FA3C84C64C2);
568 context->
h[2] =
BETOH64(0x2393B86B6F53B151);
569 context->
h[3] =
BETOH64(0x963877195940EABD);
570 context->
h[4] =
BETOH64(0x96283EE2A88EFFE3);
571 context->
h[5] =
BETOH64(0xBE5E1E2553863992);
572 context->
h[6] =
BETOH64(0x2B0199FC2C85B8AA);
573 context->
h[7] =
BETOH64(0x0EB72DDC81C52CA2);