lib/crypto: sha256: Add sha224() and sha224_update()

Add a one-shot SHA-224 computation function sha224(), for consistency
with sha256(), sha384(), and sha512() which all already exist.

Similarly, add sha224_update().  While for now it's identical to
sha256_update(), omitting it makes the API harder to use since users
have to "know" which functions are the same between SHA-224 and SHA-256.
Also, this is a prerequisite for using different context types for each.

Acked-by: Ard Biesheuvel <ardb@kernel.org>
Link: https://lore.kernel.org/r/20250630160645.3198-6-ebiggers@kernel.org
Signed-off-by: Eric Biggers <ebiggers@kernel.org>
This commit is contained in:
Eric Biggers
2025-06-30 09:06:36 -07:00
parent 9f97707bdb
commit 6fa4b29220
2 changed files with 18 additions and 2 deletions

View File

@@ -114,18 +114,24 @@ struct sha512_state {
u8 buf[SHA512_BLOCK_SIZE];
};
void sha256_update(struct sha256_state *sctx, const u8 *data, size_t len);
static inline void sha224_init(struct sha256_state *sctx)
{
sha224_block_init(&sctx->ctx);
}
/* Simply use sha256_update as it is equivalent to sha224_update. */
static inline void sha224_update(struct sha256_state *sctx,
const u8 *data, size_t len)
{
sha256_update(sctx, data, len);
}
void sha224_final(struct sha256_state *sctx, u8 out[SHA224_DIGEST_SIZE]);
void sha224(const u8 *data, size_t len, u8 out[SHA224_DIGEST_SIZE]);
static inline void sha256_init(struct sha256_state *sctx)
{
sha256_block_init(&sctx->ctx);
}
void sha256_update(struct sha256_state *sctx, const u8 *data, size_t len);
void sha256_final(struct sha256_state *sctx, u8 out[SHA256_DIGEST_SIZE]);
void sha256(const u8 *data, size_t len, u8 out[SHA256_DIGEST_SIZE]);