5 #include "sw/device/lib/crypto/impl/integrity.h"
10 #include "sw/device/lib/testing/test_framework/check.h"
17 #include "hmac_testvectors.h"
20 #define MODULE_ID MAKE_MODULE_ID('h', 'm', 'a')
23 static hmac_test_vector_t *current_test_vector = NULL;
34 static status_t get_hash_mode(hmac_test_vector_t *test_vec,
36 switch (test_vec->test_operation) {
37 case kHmacTestOperationSha256:
38 *hash_mode = kOtcryptoHashModeSha256;
40 case kHmacTestOperationSha384:
41 *hash_mode = kOtcryptoHashModeSha384;
43 case kHmacTestOperationSha512:
44 *hash_mode = kOtcryptoHashModeSha512;
47 return OTCRYPTO_BAD_ARGS;
54 static status_t run_test_vector(
void) {
56 current_test_vector->key.checksum =
57 integrity_blinded_checksum(¤t_test_vector->key);
60 size_t digest_len = current_test_vector->digest.len;
62 uint32_t act_tag[kSha512DigestWords];
72 switch (current_test_vector->test_operation) {
73 case kHmacTestOperationSha256:
75 case kHmacTestOperationSha384:
77 case kHmacTestOperationSha512:
78 TRY(get_hash_mode(current_test_vector, &hash_digest.mode));
79 TRY(
otcrypto_hash(current_test_vector->message, hash_digest));
81 case kHmacTestOperationHmacSha256:
83 case kHmacTestOperationHmacSha384:
85 case kHmacTestOperationHmacSha512:
86 TRY(
otcrypto_hmac(¤t_test_vector->key, current_test_vector->message,
90 return OTCRYPTO_BAD_ARGS;
92 TRY_CHECK_ARRAYS_EQ(act_tag, current_test_vector->digest.data, digest_len);
96 OTTF_DEFINE_TEST_CONFIG();
98 LOG_INFO(
"Testing cryptolib HMAC/SHA-2 streaming implementations.");
100 for (
size_t i = 0; i <
ARRAYSIZE(kHmacTestVectors); i++) {
101 current_test_vector = &kHmacTestVectors[i];
102 LOG_INFO(
"Running test %d of %d, test vector identifier: %s", i + 1,
104 current_test_vector->vector_identifier);
107 return status_ok(test_result);