Skip to content

Commit

Permalink
Merge pull request RIOT-OS#20116 from bergzand/pr/sha256/no_static
Browse files Browse the repository at this point in the history
hashes/sha2{24,56}: Remove static variables from sha256
  • Loading branch information
mguetschow authored Jan 16, 2024
2 parents c1ae2ec + 434e564 commit 084dedc
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 39 deletions.
11 changes: 3 additions & 8 deletions sys/hashes/sha224.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
*/

#include <string.h>
#include <assert.h>

#include "hashes/sha224.h"
#include "hashes/sha2xx_common.h"
Expand All @@ -40,18 +41,12 @@ void sha224_init(sha224_context_t *ctx)
ctx->state[7] = 0xBEFA4FA4;
}

void *sha224(const void *data, size_t len, void *digest)
void sha224(const void *data, size_t len, void *digest)
{
sha224_context_t c;
static unsigned char m[SHA224_DIGEST_LENGTH];

if (digest == NULL) {
digest = m;
}
assert(digest);

sha224_init(&c);
sha224_update(&c, data, len);
sha224_final(&c, digest);

return digest;
}
22 changes: 4 additions & 18 deletions sys/hashes/sha256.c
Original file line number Diff line number Diff line change
Expand Up @@ -68,20 +68,14 @@ void sha256_init(sha256_context_t *ctx)
ctx->state[7] = 0x5BE0CD19;
}

void *sha256(const void *data, size_t len, void *digest)
void sha256(const void *data, size_t len, void *digest)
{
sha256_context_t c;
static unsigned char m[SHA256_DIGEST_LENGTH];

if (digest == NULL) {
digest = m;
}
assert(digest);

sha256_init(&c);
sha256_update(&c, data, len);
sha256_final(&c, digest);

return digest;
}

void hmac_sha256_init(hmac_context_t *ctx, const void *key, size_t key_length)
Expand Down Expand Up @@ -135,28 +129,20 @@ void hmac_sha256_final(hmac_context_t *ctx, void *digest)
{
unsigned char tmp[SHA256_DIGEST_LENGTH];

static unsigned char m[SHA256_DIGEST_LENGTH];

if (digest == NULL) {
digest = m;
}

sha256_final(&ctx->c_in, tmp);
sha2xx_update(&ctx->c_out, tmp, SHA256_DIGEST_LENGTH);
sha256_final(&ctx->c_out, digest);
}

const void *hmac_sha256(const void *key, size_t key_length,
const void *data, size_t len, void *digest)
void hmac_sha256(const void *key, size_t key_length,
const void *data, size_t len, void *digest)
{

hmac_context_t ctx;

hmac_sha256_init(&ctx, key, key_length);
hmac_sha256_update(&ctx,data, len);
hmac_sha256_final(&ctx, digest);

return digest;
}

/**
Expand Down
5 changes: 2 additions & 3 deletions sys/include/hashes/sha224.h
Original file line number Diff line number Diff line change
Expand Up @@ -110,11 +110,10 @@ static inline void sha224_final(sha224_context_t *ctx, void *digest)
*
* @param[in] data pointer to the buffer to generate hash from
* @param[in] len length of the buffer
* @param[out] digest optional pointer to an array for the result, length must
* @param[out] digest Pointer to an array for the result, length must
* be SHA224_DIGEST_LENGTH
* if digest == NULL, one static buffer is used
*/
void *sha224(const void *data, size_t len, void *digest);
void sha224(const void *data, size_t len, void *digest);

#ifdef __cplusplus
}
Expand Down
14 changes: 4 additions & 10 deletions sys/include/hashes/sha256.h
Original file line number Diff line number Diff line change
Expand Up @@ -128,11 +128,10 @@ static inline void sha256_final(sha256_context_t *ctx, void *digest)
*
* @param[in] data pointer to the buffer to generate hash from
* @param[in] len length of the buffer
* @param[out] digest optional pointer to an array for the result, length must
* @param[out] digest Pointer to an array for the result, length must
* be SHA256_DIGEST_LENGTH
* if digest == NULL, one static buffer is used
*/
void *sha256(const void *data, size_t len, void *digest);
void sha256(const void *data, size_t len, void *digest);

/**
* @brief hmac_sha256_init HMAC SHA-256 calculation. Initiate calculation of a HMAC
Expand All @@ -153,9 +152,7 @@ void hmac_sha256_update(hmac_context_t *ctx, const void *data, size_t len);
/**
* @brief hmac_sha256_final HMAC SHA-256 finalization. Finish HMAC calculation and export the value
* @param[in] ctx hmac_context_t handle to use
* @param[out] digest the computed hmac-sha256,
* length MUST be SHA256_DIGEST_LENGTH
* if digest == NULL, a static buffer is used
* @param[out] digest the computed hmac-sha256, length MUST be SHA256_DIGEST_LENGTH
*/
void hmac_sha256_final(hmac_context_t *ctx, void *digest);

Expand All @@ -168,11 +165,8 @@ void hmac_sha256_final(hmac_context_t *ctx, void *digest);
* @param[in] len the length of the message in bytes
* @param[out] digest the computed hmac-sha256,
* length MUST be SHA256_DIGEST_LENGTH
* if digest == NULL, a static buffer is used
* @returns pointer to the resulting digest.
* if result == NULL the pointer points to the static buffer
*/
const void *hmac_sha256(const void *key, size_t key_length,
void hmac_sha256(const void *key, size_t key_length,
const void *data, size_t len, void *digest);

/**
Expand Down

0 comments on commit 084dedc

Please sign in to comment.