Files
bluelib/core/hash/sha2_384.c

43 lines
1.4 KiB
C
Raw Normal View History

// SHA-384. Adapted from LibTomCrypt. This code is Public Domain
#include "hash.h"
#include <blue/core/hash.h>
#include <string.h>
extern void z__b_sha2_512_update(
struct b_hash_ctx *md, const void *src, size_t inlen);
extern void z__b_sha2_512_finish(struct b_hash_ctx *md, void *out, size_t max);
void sha_init(struct b_hash_ctx *md)
{
md->ctx_state.sha2_512.curlen = 0;
md->ctx_state.sha2_512.length = 0;
md->ctx_state.sha2_512.state[0] = 0xcbbb9d5dc1059ed8ULL;
md->ctx_state.sha2_512.state[1] = 0x629a292a367cd507ULL;
md->ctx_state.sha2_512.state[2] = 0x9159015a3070dd17ULL;
md->ctx_state.sha2_512.state[3] = 0x152fecd8f70e5939ULL;
md->ctx_state.sha2_512.state[4] = 0x67332667ffc00b31ULL;
md->ctx_state.sha2_512.state[5] = 0x8eb44a8768581511ULL;
md->ctx_state.sha2_512.state[6] = 0xdb0c2e0d64f98fa7ULL;
md->ctx_state.sha2_512.state[7] = 0x47b5481dbefa4fa4ULL;
}
static void sha_update(struct b_hash_ctx *md, const void *in, size_t inlen)
{
z__b_sha2_512_update(md, in, inlen);
}
static void sha_finish(struct b_hash_ctx *md, void *out, size_t max)
{
unsigned char res[B_DIGEST_LENGTH_SHA2_512];
z__b_sha2_512_finish(md, res, max);
/* truncate the digest to 384 bits */
memcpy(out, res, b_min(size_t, max, B_DIGEST_LENGTH_384));
}
struct b_hash_function_ops z__b_sha2_384_ops = {
.hash_init = sha_init,
.hash_update = sha_update,
.hash_finish = sha_finish,
};