22// Licensed under the Apache License, Version 2.0, see LICENSE for details.
33// SPDX-License-Identifier: Apache-2.0
44
5+ #include <stdalign.h>
56#include <stdbool.h>
67#include <stdint.h>
78
1920
2021OTTF_DEFINE_TEST_CONFIG ();
2122
23+ enum {
24+ kShortDigestLen = 8 ,
25+ kLongDigestLen = 75 ,
26+ kShortMsgLen = 13 ,
27+ kLongMsgLen = 26 * 4 ,
28+ };
29+
30+ typedef struct unalignedhash {
31+ char unused ;
32+ char short_payload [kShortMsgLen ];
33+ char long_payload [kLongMsgLen ];
34+ } unalignedhash_t ;
35+
36+ static const alignas(uint32_t ) unalignedhash_t kKmacTestData = {
37+ .short_payload = "Test message!" ,
38+ .long_payload =
39+ "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr"
40+ "stuv"
41+ "wxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" ,
42+ };
43+
2244/**
2345 * Test data: short message with short output.
2446 */
2547static const char short_msg [] = "Test message!" ;
26- static const size_t short_msg_len = 13 ;
27- static const uint32_t short_msg_digest [8 ] = {
48+ static const uint32_t short_msg_digest [kShortDigestLen ] = {
2849 0x84f1c984 , 0x7a0316bb , 0xe404cfed , 0x83f9078a ,
2950 0x21491adc , 0xd6c30988 , 0xc6822ff6 , 0x20b73405 ,
3051};
@@ -35,8 +56,7 @@ static const uint32_t short_msg_digest[8] = {
3556static const char long_msg [] =
3657 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuv"
3758 "wxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" ;
38- static const size_t long_msg_len = 26 * 4 ;
39- static const uint32_t long_msg_digest [75 ] = {
59+ static const uint32_t long_msg_digest [kLongDigestLen ] = {
4060 0x262992ca , 0xe4790cf1 , 0x7681c77f , 0xa5366b52 , 0x86490a2f , 0xf072d4c9 ,
4161 0xd4ea499a , 0x7a192fd2 , 0xe1156b59 , 0xb8f00ad5 , 0x2ff4ba7c , 0xdec27032 ,
4262 0x33624f74 , 0x88836d86 , 0x4c3c6982 , 0xb9e841e1 , 0x78acb95a , 0x0bdbc7bc ,
@@ -80,14 +100,33 @@ rom_error_t kmac_shake256_test(void) {
80100 RETURN_IF_ERROR (kmac_shake256_configure ());
81101
82102 // Simple test.
83- RETURN_IF_ERROR (shake256_test (short_msg_len , short_msg ,
103+ RETURN_IF_ERROR (shake256_test (kShortMsgLen , short_msg ,
84104 ARRAYSIZE (short_msg_digest ), short_msg_digest ));
85105
86106 // Test with long input, short output.
87- RETURN_IF_ERROR (shake256_test (long_msg_len , long_msg , 1 , long_msg_digest ));
107+ RETURN_IF_ERROR (shake256_test (kLongMsgLen , long_msg , 1 , long_msg_digest ));
88108
89109 // Test with long input, long output.
90- RETURN_IF_ERROR (shake256_test (long_msg_len , long_msg ,
110+ RETURN_IF_ERROR (shake256_test (kLongMsgLen , long_msg ,
111+ ARRAYSIZE (long_msg_digest ), long_msg_digest ));
112+
113+ return kErrorOk ;
114+ }
115+
116+ rom_error_t kmac_shake256_unalign_test (void ) {
117+ // Configure KMAC to run SHAKE-256.
118+ RETURN_IF_ERROR (kmac_shake256_configure ());
119+
120+ // Simple test for unalign.
121+ RETURN_IF_ERROR (shake256_test (kShortMsgLen , kKmacTestData .short_payload ,
122+ ARRAYSIZE (short_msg_digest ), short_msg_digest ));
123+
124+ // Test with unalign long input, short output.
125+ RETURN_IF_ERROR (shake256_test (kLongMsgLen , kKmacTestData .long_payload , 1 ,
126+ long_msg_digest ));
127+
128+ // Test with unalign long input, long output.
129+ RETURN_IF_ERROR (shake256_test (kLongMsgLen , kKmacTestData .long_payload ,
91130 ARRAYSIZE (long_msg_digest ), long_msg_digest ));
92131
93132 return kErrorOk ;
@@ -176,6 +215,7 @@ bool test_main(void) {
176215
177216 status_t result = OK_STATUS ();
178217 EXECUTE_TEST (result , kmac_shake256_test );
218+ EXECUTE_TEST (result , kmac_shake256_unalign_test );
179219 EXECUTE_TEST (result , kmac_kmac256_kat_1 );
180220 EXECUTE_TEST (result , kmac_kmac256_kat_2 );
181221 EXECUTE_TEST (result , kmac_kmac256_kat_3 );
0 commit comments