diff options
Diffstat (limited to 'firmware/lib20/api.c')
-rw-r--r-- | firmware/lib20/api.c | 23 |
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; |