Module: kamailio Branch: master Commit: 3c6f8369c898a85b6b3dd7223e4729f277c02b5e URL: https://github.com/kamailio/kamailio/commit/3c6f8369c898a85b6b3dd7223e4729f277c02b5e
Author: Daniel-Constantin Mierla <[email protected]> Committer: Daniel-Constantin Mierla <[email protected]> Date: 2025-10-07T10:38:28+02:00 core: crypto - implementation of SH512-256 functions --- Modified: src/core/crypto/sha256.c Modified: src/core/crypto/sha256.h --- Diff: https://github.com/kamailio/kamailio/commit/3c6f8369c898a85b6b3dd7223e4729f277c02b5e.diff Patch: https://github.com/kamailio/kamailio/commit/3c6f8369c898a85b6b3dd7223e4729f277c02b5e.patch --- diff --git a/src/core/crypto/sha256.c b/src/core/crypto/sha256.c index c41a31a97c3..035046a9366 100644 --- a/src/core/crypto/sha256.c +++ b/src/core/crypto/sha256.c @@ -861,6 +861,12 @@ void sr_SHA512_Update(SHA512_CTX *context, const sha2_byte *data, size_t len) usedspace = freespace = 0; } +void sr_SHA512_256_Update( + SHA512_CTX *context, const sha2_byte *data, size_t len) +{ + sr_SHA512_Update(context, data, len); +} + void SHA512_Last(SHA512_CTX *context) { unsigned int usedspace; @@ -907,6 +913,11 @@ void SHA512_Last(SHA512_CTX *context) SHA512_Transform(context, (sha2_word64 *)context->buffer); } +void SHA512_256_Last(SHA512_CTX *context) +{ + SHA512_Last(context); +} + void sr_SHA512_Final( sha2_byte digest[SHA512_DIGEST_LENGTH], SHA512_CTX *context) { @@ -938,6 +949,15 @@ void sr_SHA512_Final( MEMSET_BZERO(context, sizeof(*context)); } +void sr_SHA512_256_Final( + sha2_byte digest[SHA512_256_DIGEST_LENGTH], SHA512_CTX *context) +{ + sha2_byte temp[SHA512_DIGEST_LENGTH]; + + sr_SHA512_Final(temp, context); + memcpy(digest, temp, SHA512_256_DIGEST_LENGTH); +} + char *sr_SHA512_End( SHA512_CTX *context, char buffer[SHA512_DIGEST_STRING_LENGTH]) { @@ -963,6 +983,31 @@ char *sr_SHA512_End( return buffer; } +char *sr_SHA512_256_End( + SHA512_CTX *context, char buffer[SHA512_256_DIGEST_STRING_LENGTH]) +{ + sha2_byte digest[SHA512_256_DIGEST_LENGTH], *d = digest; + int i; + + /* Sanity check: */ + assert(context != (SHA512_CTX *)0); + + if(buffer != (char *)0) { + sr_SHA512_256_Final(digest, context); + + for(i = 0; i < SHA512_256_DIGEST_LENGTH; i++) { + *buffer++ = sha2_hex_digits[(*d & 0xf0) >> 4]; + *buffer++ = sha2_hex_digits[*d & 0x0f]; + d++; + } + *buffer = (char)0; + } else { + MEMSET_BZERO(context, sizeof(*context)); + } + MEMSET_BZERO(digest, SHA512_256_DIGEST_LENGTH); + return buffer; +} + char *sr_SHA512_Data(const sha2_byte *data, size_t len, char digest[SHA512_DIGEST_STRING_LENGTH]) { @@ -973,6 +1018,15 @@ char *sr_SHA512_Data(const sha2_byte *data, size_t len, return sr_SHA512_End(&context, digest); } +char *sr_SHA512_256_Data(const sha2_byte *data, size_t len, + char digest[SHA512_256_DIGEST_STRING_LENGTH]) +{ + SHA512_CTX context; + + sr_SHA512_256_Init(&context); + sr_SHA512_256_Update(&context, data, len); + return sr_SHA512_256_End(&context, digest); +} /*** SHA-384: *********************************************************/ void sr_SHA384_Init(SHA384_CTX *context) diff --git a/src/core/crypto/sha256.h b/src/core/crypto/sha256.h index 6a76e956074..cf7c3f7b554 100644 --- a/src/core/crypto/sha256.h +++ b/src/core/crypto/sha256.h @@ -55,6 +55,9 @@ extern "C" #define SHA512_BLOCK_LENGTH 128 #define SHA512_DIGEST_LENGTH 64 #define SHA512_DIGEST_STRING_LENGTH (SHA512_DIGEST_LENGTH * 2 + 1) +#define SHA512_256_BLOCK_LENGTH 128 +#define SHA512_256_DIGEST_LENGTH 32 +#define SHA512_256_DIGEST_STRING_LENGTH (SHA512_256_DIGEST_LENGTH * 2 + 1) /*** SHA-1/256/384/512 Context Structures *******************************/ @@ -123,10 +126,16 @@ typedef unsigned long long u_int64_t; /* 8-bytes (64-bits) */ 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_256_Update(SHA512_CTX *, const uint8_t *, size_t); void sr_SHA512_Final(sha2_byte[SHA512_DIGEST_LENGTH], SHA512_CTX *); + void sr_SHA512_256_Final(sha2_byte[SHA512_256_DIGEST_LENGTH], SHA512_CTX *); char *sr_SHA512_End(SHA512_CTX *, char[SHA512_DIGEST_STRING_LENGTH]); + char *sr_SHA512_256_End( + SHA512_CTX *, char[SHA512_256_DIGEST_STRING_LENGTH]); char *sr_SHA512_Data( const uint8_t *, size_t, char[SHA512_DIGEST_STRING_LENGTH]); + char *sr_SHA512_256_Data( + const uint8_t *, size_t, char[SHA512_256_DIGEST_STRING_LENGTH]); #else /* NOPROTO */ _______________________________________________ Kamailio - Development Mailing List -- [email protected] To unsubscribe send an email to [email protected] Important: keep the mailing list in the recipients, do not reply only to the sender!
