summaryrefslogtreecommitdiff
path: root/firmware/lib20/api.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/lib20/api.c')
-rw-r--r--firmware/lib20/api.c23
1 files changed, 22 insertions, 1 deletions
diff --git a/firmware/lib20/api.c b/firmware/lib20/api.c
index 16ad6dc1..3fa492ee 100644
--- a/firmware/lib20/api.c
+++ b/firmware/lib20/api.c
@@ -100,6 +100,24 @@ int vb2api_init_hash(struct vb2_context *ctx, uint32_t tag, uint32_t *size)
if (size)
*size = pre->body_signature.data_size;
+ if (!(pre->flags & VB2_FIRMWARE_PREAMBLE_DISALLOW_HWCRYPTO)) {
+ rv = vb2ex_hwcrypto_digest_init(key.hash_alg,
+ pre->body_signature.data_size);
+ if (!rv) {
+ VB2_DEBUG("Using HW crypto engine for hash_alg %d\n",
+ key.hash_alg);
+ dc->hash_alg = key.hash_alg;
+ dc->using_hwcrypto = 1;
+ return VB2_SUCCESS;
+ }
+ if (rv != VB2_ERROR_EX_HWCRYPTO_UNSUPPORTED)
+ return rv;
+ VB2_DEBUG("HW crypto for hash_alg %d not supported, using SW\n",
+ key.hash_alg);
+ } else {
+ VB2_DEBUG("HW crypto forbidden by preamble, using SW\n");
+ }
+
return vb2_digest_init(dc, key.hash_alg);
}
@@ -139,7 +157,10 @@ int vb2api_check_hash(struct vb2_context *ctx)
return VB2_ERROR_API_CHECK_HASH_WORKBUF_DIGEST;
/* Finalize the digest */
- rv = vb2_digest_finalize(dc, digest, digest_size);
+ if (dc->using_hwcrypto)
+ rv = vb2ex_hwcrypto_digest_finalize(digest, digest_size);
+ else
+ rv = vb2_digest_finalize(dc, digest, digest_size);
if (rv)
return rv;