Similar to the oneshot helper for sha256, add helpers for sha384 and sha512.
The helper functions don't use the ARMv8 Crypto Extensions, yet. Signed-off-by: Michael Tretter <[email protected]> --- Changes in v2: - Move implementation from header to pbl/sha.c --- include/crypto/pbl-sha.h | 6 ++++++ pbl/sha.c | 30 ++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/include/crypto/pbl-sha.h b/include/crypto/pbl-sha.h index dbfb79647462..dc5d5ccdadd6 100644 --- a/include/crypto/pbl-sha.h +++ b/include/crypto/pbl-sha.h @@ -28,7 +28,13 @@ int sha512_init(struct digest *desc); int sha512_update(struct digest *desc, const void *data, unsigned long len); int sha512_final(struct digest *desc, u8 *out); +/* One-shot SHA-512 that picks the best transform available in the PBL. */ +void pbl_sha512(const void *buf, size_t len, u8 out[SHA512_DIGEST_SIZE]); + int sha384_init(struct digest *desc); int sha384_final(struct digest *desc, u8 *out); +/* One-shot SHA-384 that picks the best transform available in the PBL. */ +void pbl_sha384(const void *buf, size_t len, u8 out[SHA384_DIGEST_SIZE]); + #endif /* __PBL-SHA_H_ */ diff --git a/pbl/sha.c b/pbl/sha.c index f08e554ea4c8..81ffab9123dc 100644 --- a/pbl/sha.c +++ b/pbl/sha.c @@ -26,3 +26,33 @@ void pbl_sha256(const void *buf, size_t len, u8 out[static SHA256_DIGEST_SIZE]) pbl_sha256_generic(buf, len, out); } + +static void pbl_sha512_generic(const void *buf, size_t len, u8 *out) +{ + struct sha512_state state = { }; + struct digest d = { .ctx = &state, .length = SHA512_DIGEST_SIZE }; + + sha512_init(&d); + sha512_update(&d, buf, len); + sha512_final(&d, out); +} + +void pbl_sha512(const void *buf, size_t len, u8 out[static SHA512_DIGEST_SIZE]) +{ + pbl_sha512_generic(buf, len, out); +} + +static void pbl_sha384_generic(const void *buf, size_t len, u8 *out) +{ + struct sha512_state state = { }; + struct digest d = { .ctx = &state, .length = SHA384_DIGEST_SIZE }; + + sha384_init(&d); + sha512_update(&d, buf, len); + sha384_final(&d, out); +} + +void pbl_sha384(const void *buf, size_t len, u8 out[static SHA384_DIGEST_SIZE]) +{ + pbl_sha384_generic(buf, len, out); +} -- 2.47.3
