5 #include "sw/device/lib/crypto/drivers/entropy.h"
6 #include "sw/device/lib/crypto/drivers/kmac.h"
7 #include "sw/device/lib/crypto/impl/integrity.h"
13 #include "sw/device/lib/testing/test_framework/check.h"
20 #include "kdf_testvectors.h"
28 static status_t run_test_vector(
void) {
31 size_t km_num_words = current_test_vector->expected_output.len;
32 uint32_t km_buffer[2 * km_num_words];
39 .key_mode = kOtcryptoKeyModeKdfKmac128,
40 .key_length = km_num_words *
sizeof(uint32_t),
42 .security_level = kOtcryptoKeySecurityLevelLow,
46 .keyblob_length =
sizeof(km_buffer),
54 current_test_vector->label,
55 current_test_vector->context, &output_key_material));
61 uint32_t km_share0[km_num_words];
62 uint32_t km_share1[km_num_words];
69 uint32_t actual_output[km_num_words];
70 for (
size_t i = 0; i <
ARRAYSIZE(actual_output); i++) {
71 actual_output[i] = km_share0[i] ^ km_share1[i];
73 TRY_CHECK_ARRAYS_EQ(actual_output, current_test_vector->expected_output.data,
78 OTTF_DEFINE_TEST_CONFIG();
80 LOG_INFO(
"Testing cryptolib KMAC-KDF driver.");
83 CHECK_STATUS_OK(entropy_complex_init());
84 CHECK_STATUS_OK(kmac_hwip_default_configure());
87 for (
size_t i = 0; i <
ARRAYSIZE(kKdfTestVectors); i++) {
88 current_test_vector = &kKdfTestVectors[i];
89 LOG_INFO(
"Running test %d of %d, test vector identifier: %s", i + 1,
91 current_test_vector->vector_identifier);
94 return status_ok(test_result);