37 #define TRACE_LEVEL CRYPTO_TRACE_LEVEL
44 #if (SHA1_SUPPORT == ENABLED)
47 #define W(n) w[(n) & 0x0F]
50 #define CH(x, y, z) (((x) & (y)) | (~(x) & (z)))
51 #define PARITY(x, y, z) ((x) ^ (y) ^ (z))
52 #define MAJ(x, y, z) (((x) & (y)) | ((x) & (z)) | ((y) & (z)))
55 static const uint8_t padding[64] =
57 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
58 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
59 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
60 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
64 static const uint32_t k[4] =
73 const uint8_t
SHA1_OID[5] = {0x2B, 0x0E, 0x03, 0x02, 0x1A};
90 #if ((defined(MIMXRT1050_CRYPTO_HASH_SUPPORT) && MIMXRT1050_CRYPTO_HASH_SUPPORT == ENABLED) || \
91 (defined(MIMXRT1060_CRYPTO_HASH_SUPPORT) && MIMXRT1060_CRYPTO_HASH_SUPPORT == ENABLED) || \
92 (defined(MIMXRT1160_CRYPTO_HASH_SUPPORT) && MIMXRT1160_CRYPTO_HASH_SUPPORT == ENABLED) || \
93 (defined(MIMXRT1170_CRYPTO_HASH_SUPPORT) && MIMXRT1170_CRYPTO_HASH_SUPPORT == ENABLED))
111 #if (CRYPTO_STATIC_MEM_SUPPORT == DISABLED)
124 #if (CRYPTO_STATIC_MEM_SUPPORT == DISABLED)
139 #if (CRYPTO_STATIC_MEM_SUPPORT == DISABLED)
157 context->
h[0] = 0x67452301;
158 context->
h[1] = 0xEFCDAB89;
159 context->
h[2] = 0x98BADCFE;
160 context->
h[3] = 0x10325476;
161 context->
h[4] = 0xC3D2E1F0;
199 if(context->
size == 64)
226 if(context->
size < 56)
228 paddingSize = 56 - context->
size;
232 paddingSize = 64 + 56 - context->
size;
239 context->
w[14] =
htobe32((uint32_t) (totalSize >> 32));
240 context->
w[15] =
htobe32((uint32_t) totalSize);
246 for(i = 0; i < 5; i++)
270 for(i = 0; i < 5; i++)
279 for(i = 0; i < 5; i++)
297 uint32_t
a = context->
h[0];
298 uint32_t
b = context->
h[1];
299 uint32_t
c = context->
h[2];
300 uint32_t d = context->
h[3];
301 uint32_t e = context->
h[4];
304 uint32_t *w = context->
w;
307 for(i = 0; i < 16; i++)
313 for(i = 0; i < 80; i++)
318 W(i) =
ROL32(
W(i + 13) ^
W(i + 8) ^
W(i + 2) ^
W(i), 1);
324 temp =
ROL32(
a, 5) +
CH(
b,
c, d) + e +
W(i) + k[0];
General definitions for cryptographic algorithms.
error_t(* HashAlgoCompute)(const void *data, size_t length, uint8_t *digest)
void(* HashAlgoFinalRaw)(void *context, uint8_t *digest)
void(* HashAlgoFinal)(void *context, uint8_t *digest)
void(* HashAlgoUpdate)(void *context, const void *data, size_t length)
#define cryptoAllocMem(size)
void(* HashAlgoInit)(void *context)
@ ERROR_INVALID_PARAMETER
Invalid parameter.
#define osMemcpy(dest, src, length)
__weak_func void sha1Init(Sha1Context *context)
Initialize SHA-1 message digest context.
__weak_func void sha1ProcessBlock(Sha1Context *context)
Process message in 16-word blocks.
__weak_func void sha1Update(Sha1Context *context, const void *data, size_t length)
Update the SHA-1 context with a portion of the message being hashed.
__weak_func void sha1FinalRaw(Sha1Context *context, uint8_t *digest)
Finish the SHA-1 message digest (no padding added)
__weak_func void sha1Final(Sha1Context *context, uint8_t *digest)
Finish the SHA-1 message digest.
__weak_func error_t sha1Compute(const void *data, size_t length, uint8_t *digest)
Digest a message using SHA-1.
const uint8_t SHA1_OID[5]
const HashAlgo sha1HashAlgo
SHA-1 (Secure Hash Algorithm 1)
#define SHA1_MIN_PAD_SIZE
Common interface for hash algorithms.