diff options
Diffstat (limited to 'board/cr50/dcrypto/app_key.c')
-rw-r--r-- | board/cr50/dcrypto/app_key.c | 37 |
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); } |