/* * LITLS -- SHA-384 (FIPS 180-4) * SHA-384 is SHA-512 with different initial values, truncated to 48 bytes. */ #include "litls.h" #include /* Defined in litls_sha512.c */ void litls_sha512_transform_(litls_sha512_ctx *ctx); void litls_sha384_init(litls_sha384_ctx *ctx) { ctx->datalen = 0; ctx->bitlen[0] = 0; ctx->bitlen[1] = 0; ctx->state[0] = 0xcbbb9d5dc1059ed8ULL; ctx->state[1] = 0x629a292a367cd507ULL; ctx->state[2] = 0x9159015a3070dd17ULL; ctx->state[3] = 0x152fecd8f70e5939ULL; ctx->state[4] = 0x67332667ffc00b31ULL; ctx->state[5] = 0x8eb44a8768581511ULL; ctx->state[6] = 0xdb0c2e0d64f98fa7ULL; ctx->state[7] = 0x47b5481dbefa4fa4ULL; } void litls_sha384_update(litls_sha384_ctx *ctx, const uint8_t *data, size_t len) { litls_sha512_update(ctx, data, len); } void litls_sha384_final(litls_sha384_ctx *ctx, uint8_t out[48]) { uint8_t full[64]; litls_sha512_final(ctx, full); memcpy(out, full, 48); } void litls_sha384(const uint8_t *data, size_t len, uint8_t out[48]) { litls_sha384_ctx ctx; litls_sha384_init(&ctx); litls_sha384_update(&ctx, data, len); litls_sha384_final(&ctx, out); }