5 #include "sw/device/silicon_creator/lib/sigverify/sphincsplus/address.h"
9 #include "gtest/gtest.h"
10 #include "sw/device/silicon_creator/testing/rom_test.h"
12 namespace spx_addr_unittest {
25 unsigned char *buf = (
unsigned char *)addr->addr;
36 unsigned char *buf = (
unsigned char *)addr->addr;
38 memcpy(&tree, buf + kSpxOffsetTree,
sizeof(uint64_t));
49 unsigned char *buf = (
unsigned char *)addr->addr;
50 uint32_t tree_index = 0;
51 memcpy(&tree_index, buf + kSpxOffsetTreeIndex,
sizeof(uint32_t));
62 unsigned char *buf = (
unsigned char *)addr->addr;
63 uint32_t keypair_addr = 0;
64 memcpy(&keypair_addr, buf + kSpxOffsetKpAddr,
sizeof(uint32_t));
77 EXPECT_EQ(ByteGet(addr1, offset), ByteGet(addr2, offset));
88 EXPECT_EQ(
memcmp(addr1->addr, addr2->addr,
sizeof(addr1->addr)), 0);
100 EXPECT_LE(
sizeof(addr->addr), UINT8_MAX);
102 unsigned char *buf = (
unsigned char *)addr->addr;
103 for (
size_t i = 0; i <
sizeof(addr->addr); i++) {
104 buf[i] = UINT8_MAX - i;
109 TEST_F(SpxAddrTest, LayerSetTest) {
110 uint8_t layer = 0xf0;
112 TestAddrInit(&test_addr);
113 spx_addr_layer_set(&test_addr, layer);
114 EXPECT_EQ(ByteGet(&test_addr, kSpxOffsetLayer), layer);
117 TEST_F(SpxAddrTest, TreeSetTest) {
118 uint64_t tree = 0x0102030405060708;
120 uint64_t tree_be = 0x0807060504030201;
122 TestAddrInit(&test_addr);
123 spx_addr_tree_set(&test_addr, tree);
126 EXPECT_EQ(TreeGet(&test_addr), tree_be);
129 TEST_F(SpxAddrTest, TypeSetTest) {
131 TestAddrInit(&test_addr);
134 spx_addr_type_set(&test_addr, kSpxAddrTypeWotsPk);
135 EXPECT_EQ(ByteGet(&test_addr, kSpxOffsetType), kSpxAddrTypeWotsPk);
138 spx_addr_type_set(&test_addr, kSpxAddrTypeHashTree);
139 EXPECT_EQ(ByteGet(&test_addr, kSpxOffsetType), kSpxAddrTypeHashTree);
142 TEST_F(SpxAddrTest, SubtreeCopyTest) {
144 TestAddrInit(&src_addr);
145 spx_addr_t dest_addr = {.addr = {1, 2, 3, 4, 5, 6, 7, 8}};
149 memcpy(dest_addr_orig.addr, dest_addr.addr,
sizeof(dest_addr.addr));
152 spx_addr_subtree_copy(&dest_addr, &src_addr);
155 ExpectByteEq(&dest_addr, &src_addr, kSpxOffsetLayer);
156 EXPECT_EQ(TreeGet(&dest_addr), TreeGet(&src_addr));
159 ExpectByteEq(&dest_addr, &dest_addr_orig, kSpxOffsetType);
160 ExpectByteEq(&dest_addr, &dest_addr_orig, kSpxOffsetChainAddr);
161 ExpectByteEq(&dest_addr, &dest_addr_orig, kSpxOffsetHashAddr);
162 ExpectByteEq(&dest_addr, &dest_addr_orig, kSpxOffsetTreeHeight);
163 EXPECT_EQ(TreeIndexGet(&dest_addr), TreeIndexGet(&dest_addr_orig));
164 EXPECT_EQ(KeypairAddrGet(&dest_addr), KeypairAddrGet(&dest_addr_orig));
167 TEST_F(SpxAddrTest, SubtreeCopySelf) {
169 TestAddrInit(&test_addr);
173 memcpy(test_addr_orig.addr, test_addr.addr,
sizeof(test_addr.addr));
176 spx_addr_subtree_copy(&test_addr, &test_addr);
179 ExpectAddrEq(&test_addr, &test_addr_orig);
182 TEST_F(SpxAddrTest, KeypairSetTest) {
184 TestAddrInit(&test_addr);
187 spx_addr_keypair_set(&test_addr, 0xddeeffaa);
190 EXPECT_EQ(0xaaffeedd, KeypairAddrGet(&test_addr));
193 TEST_F(SpxAddrTest, ChainSetTest) {
194 uint8_t chain = 0xf0;
196 TestAddrInit(&test_addr);
199 spx_addr_chain_set(&test_addr, chain);
200 EXPECT_EQ(ByteGet(&test_addr, kSpxOffsetChainAddr), chain);
203 TEST_F(SpxAddrTest, HashSetTest) {
206 TestAddrInit(&test_addr);
209 spx_addr_hash_set(&test_addr, hash);
210 EXPECT_EQ(ByteGet(&test_addr, kSpxOffsetHashAddr), hash);
213 TEST_F(SpxAddrTest, KeypairCopyTest) {
215 TestAddrInit(&src_addr);
216 spx_addr_t dest_addr = {.addr = {1, 2, 3, 4, 5, 6, 7, 8}};
220 memcpy(dest_addr_orig.addr, dest_addr.addr,
sizeof(dest_addr.addr));
223 spx_addr_keypair_copy(&dest_addr, &src_addr);
226 ExpectByteEq(&dest_addr, &src_addr, kSpxOffsetLayer);
227 EXPECT_EQ(TreeGet(&dest_addr), TreeGet(&src_addr));
230 EXPECT_EQ(KeypairAddrGet(&dest_addr), KeypairAddrGet(&src_addr));
233 ExpectByteEq(&dest_addr, &dest_addr_orig, kSpxOffsetType);
234 ExpectByteEq(&dest_addr, &dest_addr_orig, kSpxOffsetChainAddr);
235 ExpectByteEq(&dest_addr, &dest_addr_orig, kSpxOffsetHashAddr);
236 ExpectByteEq(&dest_addr, &dest_addr_orig, kSpxOffsetTreeHeight);
237 EXPECT_EQ(TreeIndexGet(&dest_addr), TreeIndexGet(&dest_addr_orig));
240 TEST_F(SpxAddrTest, TreeHeightSetTest) {
241 uint8_t tree_height = 0xf0;
243 TestAddrInit(&test_addr);
246 spx_addr_tree_height_set(&test_addr, tree_height);
247 EXPECT_EQ(ByteGet(&test_addr, kSpxOffsetTreeHeight), tree_height);
250 TEST_F(SpxAddrTest, TreeIndexSetTest) {
251 uint32_t tree_index = 0x01020304;
253 uint32_t tree_index_be = 0x04030201;
255 TestAddrInit(&test_addr);
258 spx_addr_tree_index_set(&test_addr, tree_index);
259 EXPECT_EQ(TreeIndexGet(&test_addr), tree_index_be);