summaryrefslogtreecommitdiff
path: root/board/cr50/dcrypto/app_key.c
diff options
context:
space:
mode:
Diffstat (limited to 'board/cr50/dcrypto/app_key.c')
-rw-r--r--board/cr50/dcrypto/app_key.c37
1 files changed, 17 insertions, 20 deletions
diff --git a/board/cr50/dcrypto/app_key.c b/board/cr50/dcrypto/app_key.c
index f655471f69..0bc7620ed7 100644
--- a/board/cr50/dcrypto/app_key.c
+++ b/board/cr50/dcrypto/app_key.c
@@ -21,9 +21,8 @@ const char *const dcrypto_app_names[] = {
};
static void name_hash(enum dcrypto_appid appid,
- uint32_t digest[SHA256_DIGEST_WORDS])
+ struct sha256_digest *digest)
{
- LITE_SHA256_CTX ctx;
const char *name = dcrypto_app_names[appid];
size_t x;
@@ -31,20 +30,18 @@ static void name_hash(enum dcrypto_appid appid,
* exists to prevent data loss.
*/
if (appid == PERSO_AUTH) {
- digest[0] = 0x2019da34;
- digest[1] = 0xf1a01a13;
- digest[2] = 0x0fb9f73f;
- digest[3] = 0xf2e85f76;
- digest[4] = 0x5ecb7690;
- digest[5] = 0x09f732c9;
- digest[6] = 0xe540bf14;
- digest[7] = 0xcc46799a;
+ digest->b32[0] = 0x2019da34;
+ digest->b32[1] = 0xf1a01a13;
+ digest->b32[2] = 0x0fb9f73f;
+ digest->b32[3] = 0xf2e85f76;
+ digest->b32[4] = 0x5ecb7690;
+ digest->b32[5] = 0x09f732c9;
+ digest->b32[6] = 0xe540bf14;
+ digest->b32[7] = 0xcc46799a;
return;
}
- DCRYPTO_SHA256_init(&ctx, 0);
- HASH_update(&ctx, name, strlen(name));
- memcpy(digest, HASH_final(&ctx), SHA256_DIGEST_SIZE);
+ SHA256_hw_hash(name, strlen(name), digest);
/* The digests were originally endian swapped because xxd was used to
* print them so this operation is needed to keep the derived keys the
@@ -53,17 +50,17 @@ static void name_hash(enum dcrypto_appid appid,
* effectively be reset and user data will be lost by the key change.
*/
for (x = 0; x < SHA256_DIGEST_WORDS; ++x)
- digest[x] = __builtin_bswap32(digest[x]);
+ digest->b32[x] = __builtin_bswap32(digest->b32[x]);
}
int DCRYPTO_appkey_init(enum dcrypto_appid appid, struct APPKEY_CTX *ctx)
{
- uint32_t digest[SHA256_DIGEST_WORDS];
+ struct sha256_digest digest;
memset(ctx, 0, sizeof(*ctx));
- name_hash(appid, digest);
+ name_hash(appid, &digest);
- if (!dcrypto_ladder_compute_usr(appid, digest))
+ if (!dcrypto_ladder_compute_usr(appid, digest.b32))
return 0;
return 1;
@@ -78,8 +75,8 @@ void DCRYPTO_appkey_finish(struct APPKEY_CTX *ctx)
int DCRYPTO_appkey_derive(enum dcrypto_appid appid, const uint32_t input[8],
uint32_t output[8])
{
- uint32_t digest[SHA256_DIGEST_WORDS];
+ struct sha256_digest digest;
- name_hash(appid, digest);
- return !!dcrypto_ladder_derive(appid, digest, input, output);
+ name_hash(appid, &digest);
+ return !!dcrypto_ladder_derive(appid, digest.b32, input, output);
}