Skip to content

Commit

Permalink
core: crypto add support for SHA-512/256 for RFCs 8760/7616
Browse files Browse the repository at this point in the history
  • Loading branch information
space88man authored and miconda committed Jul 11, 2022
1 parent 0080e06 commit 805b921
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 1 deletion.
23 changes: 22 additions & 1 deletion src/core/crypto/sha256.c
Expand Up @@ -301,6 +301,18 @@ const static sha2_word64 sha512_initial_hash_value[8] = {
0x5be0cd19137e2179ULL
};

/* Initial hash value H for SHA-512/256 */
const static sha2_word64 sha512_256_initial_hash_value[8] = {
0x22312194FC2BF72CULL,
0x9F555FA3C84C64C2ULL,
0x2393B86B6F53B151ULL,
0x963877195940EABDULL,
0x96283EE2A88EFFE3ULL,
0xBE5E1E2553863992ULL,
0x2B0199FC2C85B8AAULL,
0x0EB72DDC81C52CA2ULL
};

/*
* Constant used by SHA256/384/512_End() functions for converting the
* digest to a readable hexadecimal character string:
Expand Down Expand Up @@ -636,7 +648,7 @@ char* sr_SHA256_Data(const sha2_byte* data, size_t len, char digest[SHA256_DIGES
}


/*** SHA-512: *********************************************************/
/*** SHA-512 SHA-512/256: *********************************************************/
void sr_SHA512_Init(SHA512_CTX* context) {
if (context == (SHA512_CTX*)0) {
return;
Expand All @@ -646,6 +658,15 @@ void sr_SHA512_Init(SHA512_CTX* context) {
context->bitcount[0] = context->bitcount[1] = 0;
}

void sr_SHA512_256_Init(SHA512_CTX* context) {
if (context == (SHA512_CTX*)0) {
return;
}
MEMCPY_BCOPY(context->state, sha512_256_initial_hash_value, SHA512_DIGEST_LENGTH);
MEMSET_BZERO(context->buffer, SHA512_BLOCK_LENGTH);
context->bitcount[0] = context->bitcount[1] = 0;
}

#ifdef SHA2_UNROLL_TRANSFORM

/* Unrolled SHA-512 round macros: */
Expand Down
2 changes: 2 additions & 0 deletions src/core/crypto/sha256.h
Expand Up @@ -97,6 +97,7 @@ char* sr_SHA384_End(SHA384_CTX*, char[SHA384_DIGEST_STRING_LENGTH]);
char* sr_SHA384_Data(const uint8_t*, size_t, char[SHA384_DIGEST_STRING_LENGTH]);

void sr_SHA512_Init(SHA512_CTX*);
void sr_SHA512_256_Init(SHA512_CTX*);
void sr_SHA512_Update(SHA512_CTX*, const uint8_t*, size_t);
void sr_SHA512_Final(sha2_byte[SHA512_DIGEST_LENGTH], SHA512_CTX*);
char* sr_SHA512_End(SHA512_CTX*, char[SHA512_DIGEST_STRING_LENGTH]);
Expand All @@ -117,6 +118,7 @@ char* sr_SHA384_End();
char* sr_SHA384_Data();

void sr_SHA512_Init();
void sr_SHA512_256_Init();
void sr_SHA512_Update();
void sr_SHA512_Final();
char* sr_SHA512_End();
Expand Down

0 comments on commit 805b921

Please sign in to comment.