Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
blake3s.test.cpp
Go to the documentation of this file.
1#include "blake3s.hpp"
2
3#include <gtest/gtest.h>
4
7#include <array>
8#include <iostream>
9#include <memory>
10#include <vector>
11
12using namespace bb;
13
14struct test_vector {
15 std::string_view input;
16 std::array<uint8_t, 32> output;
17};
18
20 size_t input_len;
21 std::vector<uint8_t> hash;
22};
23
24std::vector<uint8_t> test_input(size_t input_len)
25{
26 std::vector<uint8_t> input;
27 for (size_t i = 0; i < input_len; ++i) {
28 input.push_back(uint8_t(i % 251));
29 }
30 return input;
31}
32
33template <size_t S> constexpr std::array<uint8_t, S> convert(const std::string_view& in)
34{
36 for (size_t i = 0; i < S; ++i) {
37 output[i] = static_cast<unsigned char>(in[i]);
38 }
39 return output;
40}
41
43 test_vector{ .input = "",
44 .output = {
45 0xAF, 0x13, 0x49, 0xB9, 0xF5, 0xF9, 0xA1, 0xA6, 0xA0, 0x40, 0x4D, 0xEA, 0x36, 0xDC, 0xC9, 0x49,
46 0x9B, 0xCB, 0x25, 0xC9, 0xAD, 0xC1, 0x12, 0xB7, 0xCC, 0x9A, 0x93, 0xCA, 0xE4, 0x1F, 0x32, 0x62,
47 } },
48 test_vector{ .input = "a",
49 .output = {
50 0x17, 0x76, 0x2F, 0xDD, 0xD9, 0x69, 0xA4, 0x53, 0x92, 0x5D, 0x65, 0x71, 0x7A, 0xC3, 0xEE, 0xA2,
51 0x13, 0x20, 0xB6, 0x6B, 0x54, 0x34, 0x2F, 0xDE, 0x15, 0x12, 0x8D, 0x6C, 0xAF, 0x21, 0x21, 0x5F,
52 } },
53 test_vector{ .input = "ab",
54 .output = {
55 0x2D, 0xC9, 0x99, 0x99, 0xA6, 0xAA, 0xEF, 0x3F, 0x20, 0x34, 0x9D, 0x2E, 0xD4, 0x05, 0x7A, 0x2B,
56 0x54, 0x41, 0x95, 0x45, 0xDA, 0xBB, 0x80, 0x9E, 0x63, 0x81, 0xDE, 0x1B, 0xAD, 0x83, 0x37, 0xE2,
57 } },
58 test_vector{ .input = "abc",
59 .output = {
60 0x64, 0x37, 0xB3, 0xAC, 0x38, 0x46, 0x51, 0x33, 0xFF, 0xB6, 0x3B, 0x75, 0x27, 0x3A, 0x8D, 0xB5,
61 0x48, 0xC5, 0x58, 0x46, 0x5D, 0x79, 0xDB, 0x03, 0xFD, 0x35, 0x9C, 0x6C, 0xD5, 0xBD, 0x9D, 0x85,
62 } },
63 test_vector{ .input = "abcd",
64 .output = {
65 0x8C, 0x9C, 0x98, 0x81, 0x80, 0x5D, 0x1A, 0x84, 0x71, 0x02, 0xD7, 0xA4, 0x2E, 0x58, 0xB9, 0x90,
66 0xD0, 0x88, 0xDD, 0x88, 0xA8, 0x4F, 0x73, 0x14, 0xD7, 0x1C, 0x83, 0x81, 0x07, 0x57, 0x1F, 0x2B,
67 } },
68 test_vector{ .input = "abcde",
69 .output = {
70 0x06, 0x48, 0xC0, 0x3B, 0x5A, 0xD9, 0xBB, 0x6D, 0xDF, 0x83, 0x06, 0xEE, 0xF6, 0xA3, 0x3E, 0xBA,
71 0xE8, 0xF8, 0x9C, 0xB4, 0x74, 0x11, 0x50, 0xC1, 0xAE, 0x9C, 0xD6, 0x62, 0xFD, 0xCC, 0x1E, 0xE2,
72 } },
73 test_vector{ .input = "abcdef",
74 .output = {
75 0xB3, 0x4B, 0x56, 0x07, 0x67, 0x12, 0xFD, 0x7F, 0xB9, 0xC0, 0x67, 0x24, 0x5A, 0x6C, 0x85, 0xE1,
76 0x61, 0x74, 0xB3, 0xEF, 0x2E, 0x35, 0xDF, 0x7B, 0x56, 0xB7, 0xF1, 0x64, 0xE5, 0xC3, 0x64, 0x46,
77 } },
78 test_vector{ .input = "abcdefg",
79 .output = {
80 0xE2, 0xD1, 0x8D, 0x70, 0xDB, 0x12, 0x70, 0x5E, 0x18, 0x45, 0xFA, 0xF5, 0x00, 0xDE, 0x11, 0x98,
81 0xA5, 0xBA, 0x14, 0x83, 0x72, 0x9D, 0x97, 0x93, 0x6F, 0x1D, 0x2B, 0x76, 0x09, 0x68, 0x31, 0x2E,
82 } },
83 test_vector{ .input = "abcdefgh",
84 .output = {
85 0xDD, 0xAA, 0x2A, 0xC3, 0x0A, 0x98, 0x65, 0x59, 0x62, 0x97, 0x90, 0x19, 0xE4, 0x35, 0x38, 0x32,
86 0x6A, 0xD7, 0xBE, 0xF0, 0xDA, 0x0E, 0x6A, 0xC2, 0xF3, 0xE5, 0x1F, 0xB3, 0x51, 0x3A, 0x5C, 0xDA,
87 } },
88 test_vector{ .input = "abcdefghi",
89 .output = {
90 0x89, 0x9E, 0xAD, 0x67, 0x56, 0x1E, 0x6E, 0x71, 0x76, 0xDD, 0xCA, 0xD0, 0xB4, 0x47, 0xCA, 0xEC,
91 0x42, 0xA6, 0x58, 0xB7, 0x0B, 0xB1, 0x81, 0x75, 0x7F, 0x14, 0x4C, 0xE9, 0xEB, 0xB1, 0x59, 0xC4,
92 } },
93 test_vector{ .input = "abcdefghij",
94 .output = {
95 0xD1, 0x0C, 0x2A, 0xCB, 0x51, 0x8F, 0xD7, 0x4A, 0xE1, 0x30, 0xF6, 0x3E, 0x3A, 0x45, 0x2A, 0x9A,
96 0x05, 0x54, 0x71, 0x16, 0x41, 0x81, 0xA6, 0x3A, 0x7D, 0x94, 0xC1, 0x82, 0xF5, 0x70, 0x34, 0x9B,
97 } },
98 test_vector{ .input = "abcdefghijk",
99 .output = {
100 0x33, 0x69, 0x93, 0xBC, 0xB0, 0xAA, 0xCB, 0x8B, 0x33, 0xCB, 0xBF, 0x67, 0x70, 0x25, 0x59, 0x29,
101 0x62, 0x60, 0x6A, 0x69, 0x0C, 0xEC, 0xBE, 0xD3, 0x85, 0x7C, 0x81, 0xF9, 0x49, 0x36, 0x4E, 0xA5,
102 } },
103 test_vector{ .input = "abcdefghijkl",
104 .output = {
105 0xA7, 0x4A, 0x54, 0x2E, 0xA1, 0xF9, 0x95, 0x7F, 0x55, 0xBA, 0xE1, 0x99, 0xF8, 0x9A, 0xB4, 0x6B,
106 0x90, 0xC8, 0xB4, 0x1E, 0x94, 0x04, 0x89, 0x07, 0x5E, 0xC9, 0x24, 0x49, 0x0F, 0xB6, 0xA9, 0x26,
107 } },
108 test_vector{ .input = "abcdefghijklm",
109 .output = {
110 0xA1, 0xF7, 0xDF, 0x9D, 0x3A, 0x01, 0x44, 0x25, 0x22, 0x0D, 0x2B, 0x96, 0xDF, 0xB3, 0xCE, 0xBA,
111 0x8A, 0xD1, 0x26, 0x4E, 0xD1, 0x65, 0x56, 0x50, 0x02, 0xA6, 0xEC, 0xC3, 0x02, 0xAF, 0x7A, 0xD0,
112 } },
113 test_vector{ .input = "abcdefghijklmn",
114 .output = {
115 0x7A, 0x97, 0x9F, 0xCC, 0xF3, 0x89, 0x89, 0xFC, 0xDD, 0x63, 0x09, 0xDB, 0x94, 0x7D, 0x28, 0x6D,
116 0xF2, 0xF4, 0xF7, 0xEC, 0x80, 0xDD, 0x11, 0x88, 0xEC, 0x07, 0x94, 0xE9, 0x1B, 0x8F, 0xBE, 0x2E,
117 } },
118 test_vector{ .input = "abcdefghijklmno",
119 .output = {
120 0xF3, 0x50, 0x1B, 0x61, 0x52, 0x06, 0xCE, 0x9E, 0x7D, 0xC2, 0xC6, 0xAD, 0x16, 0xA0, 0xF2, 0xC6,
121 0x44, 0x34, 0xDD, 0xF1, 0xA5, 0x33, 0xBB, 0xDC, 0x0A, 0x25, 0xA6, 0x0D, 0x20, 0xE4, 0x4E, 0x5E,
122 } },
123 test_vector{ .input = "abcdefghijklmnop",
124 .output = {
125 0x00, 0x9E, 0x43, 0x83, 0x6D, 0x52, 0xF4, 0x8B, 0x87, 0x6D, 0x62, 0x74, 0xFF, 0x17, 0xFA, 0xF3,
126 0xB5, 0xA3, 0x4A, 0xF7, 0x7E, 0x68, 0xD7, 0xFA, 0x73, 0x0E, 0x5E, 0xF9, 0xFE, 0xA2, 0xD3, 0x58,
127 } },
128 test_vector{ .input = "abcdefghijklmnopq",
129 .output = {
130 0x26, 0xDC, 0x2E, 0x71, 0x55, 0x16, 0xD4, 0x06, 0xC3, 0x70, 0x02, 0x05, 0x68, 0x90, 0xFE, 0xD1,
131 0x94, 0x64, 0x83, 0x38, 0x7E, 0xFB, 0xB8, 0x0E, 0x87, 0x33, 0x74, 0x32, 0x67, 0x37, 0x21, 0x61,
132 } },
133 test_vector{ .input = "abcdefghijklmnopqr",
134 .output = {
135 0xD1, 0x32, 0x17, 0xD1, 0x80, 0xF3, 0x75, 0xED, 0xDD, 0x8A, 0x18, 0x9E, 0x03, 0x18, 0x31, 0x69,
136 0x1F, 0xBD, 0x73, 0xB0, 0x28, 0xEE, 0x49, 0x7A, 0x5C, 0xAF, 0xC0, 0x8B, 0xD2, 0x9C, 0xEA, 0x6C,
137 } },
138 test_vector{ .input = "abcdefghijklmnopqrs",
139 .output = {
140 0x24, 0x5F, 0xE8, 0x6C, 0xDE, 0x9B, 0x1E, 0x6F, 0xAD, 0xDB, 0xFA, 0xEE, 0xAF, 0x7F, 0x9C, 0x7C,
141 0xD9, 0xC0, 0x9A, 0xD6, 0x2B, 0x38, 0x45, 0x2D, 0x10, 0x3F, 0x62, 0x09, 0x83, 0x4C, 0xBF, 0x23,
142 } },
143 test_vector{ .input = "abcdefghijklmnopqrst",
144 .output = {
145 0x18, 0xC5, 0x4F, 0xED, 0x84, 0xD3, 0x23, 0xE2, 0xEE, 0x91, 0x94, 0x81, 0x19, 0x22, 0x4F, 0x31,
146 0x59, 0xBF, 0xD4, 0xCD, 0xD3, 0xF5, 0x85, 0xF8, 0x2B, 0x56, 0xE0, 0xA6, 0x30, 0x92, 0xAD, 0xDE,
147 } },
148 test_vector{ .input = "abcdefghijklmnopqrstu",
149 .output = {
150 0x61, 0x4A, 0x68, 0x5B, 0xE9, 0x1B, 0xC4, 0x46, 0x05, 0xEA, 0xE3, 0x31, 0x17, 0x5F, 0x45, 0xB8,
151 0xDA, 0xC2, 0x6F, 0xE3, 0xD1, 0xC5, 0xFB, 0xCD, 0x5D, 0x76, 0x1E, 0x0F, 0x74, 0x12, 0xB8, 0x2F,
152 } },
153 test_vector{ .input = "abcdefghijklmnopqrstuv",
154 .output = {
155 0x22, 0x37, 0x6F, 0x74, 0xFE, 0x12, 0x93, 0xC4, 0xB7, 0x3B, 0xA3, 0x53, 0x7F, 0x00, 0xA3, 0x52,
156 0xE6, 0xA1, 0x2D, 0x67, 0xBF, 0xF9, 0x74, 0xC3, 0xBB, 0xA4, 0x4A, 0x5F, 0xC0, 0x3F, 0xED, 0xE7,
157 } },
158 test_vector{ .input = "abcdefghijklmnopqrstuvw",
159 .output = {
160 0xC9, 0x65, 0xC1, 0xCC, 0xCE, 0x9C, 0xBC, 0xCB, 0xB8, 0x68, 0x31, 0x64, 0x91, 0xAA, 0x01, 0x86,
161 0xAB, 0x83, 0x9C, 0xFE, 0x86, 0xEF, 0xA4, 0xFE, 0xDF, 0xF0, 0x79, 0x2C, 0x79, 0xCF, 0x4E, 0xF9,
162 } },
163 test_vector{ .input = "abcdefghijklmnopqrstuvwx",
164 .output = {
165 0x3A, 0x00, 0x36, 0x42, 0xAB, 0x93, 0xEA, 0xD3, 0xDC, 0xEB, 0xDE, 0x1C, 0xD7, 0x4D, 0x48, 0x2A,
166 0xEA, 0xB7, 0x6C, 0x51, 0x52, 0xA7, 0xF2, 0xE4, 0x02, 0x39, 0x63, 0xBF, 0x36, 0x57, 0x03, 0xD8,
167 } },
168 test_vector{ .input = "abcdefghijklmnopqrstuvwxy",
169 .output = {
170 0xF7, 0xD9, 0x71, 0xE0, 0x5B, 0xAF, 0xD5, 0x8A, 0x22, 0x0F, 0x3A, 0x95, 0x34, 0x54, 0x2F, 0xE5,
171 0x45, 0x60, 0x4A, 0x7F, 0x99, 0x16, 0x56, 0x49, 0xB6, 0x59, 0x09, 0x3A, 0xEB, 0xA5, 0xFA, 0x6A,
172 } },
173 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz",
174 .output = {
175 0x24, 0x68, 0xEE, 0xC8, 0x89, 0x4A, 0xCF, 0xB4, 0xE4, 0xDF, 0x3A, 0x51, 0xEA, 0x91, 0x6B, 0xA1,
176 0x15, 0xD4, 0x82, 0x68, 0x28, 0x77, 0x54, 0x29, 0x0A, 0xAE, 0x8E, 0x9E, 0x62, 0x28, 0xE8, 0x5F,
177 } },
178 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0",
179 .output = {
180 0xD6, 0xC9, 0xDE, 0x2C, 0x54, 0xD2, 0x7B, 0xDB, 0x4F, 0x68, 0xCD, 0x3C, 0x73, 0x42, 0x1D, 0x81,
181 0xF5, 0x2C, 0xC8, 0x06, 0xD2, 0x55, 0xDA, 0x08, 0xE2, 0x25, 0x4A, 0x0D, 0x57, 0x03, 0x1F, 0xF0,
182 } },
183 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz01",
184 .output = {
185 0x4D, 0x0C, 0x6F, 0x2F, 0xB0, 0xC1, 0xEB, 0xC4, 0x1B, 0xF2, 0x3C, 0xBA, 0xED, 0x30, 0x88, 0x39,
186 0xD7, 0x80, 0xAB, 0x47, 0xC8, 0xA3, 0x81, 0x23, 0xAF, 0x46, 0xB6, 0xE3, 0xAD, 0x82, 0x5F, 0xA4,
187 } },
188 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz012",
189 .output = {
190 0x4C, 0xEB, 0x7C, 0x49, 0x7A, 0xF4, 0xB6, 0x73, 0xC8, 0x58, 0xD8, 0x74, 0x6F, 0xDD, 0xBA, 0x3B,
191 0xFA, 0x80, 0xFA, 0x1A, 0xCB, 0x84, 0xE2, 0xAE, 0x91, 0x76, 0x9D, 0x4B, 0xD8, 0x74, 0xEA, 0x70,
192 } },
193 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123",
194 .output = {
195 0xED, 0x4C, 0x4A, 0xC9, 0x6A, 0x2E, 0xB3, 0xC0, 0xCC, 0x80, 0x88, 0xB4, 0x30, 0x3F, 0xD6, 0x78,
196 0x9B, 0x65, 0x16, 0x2F, 0x35, 0xD2, 0x77, 0xB2, 0xE6, 0xA8, 0x0F, 0xAF, 0x48, 0xCA, 0x67, 0x5E,
197 } },
198 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz01234",
199 .output = {
200 0x6A, 0x96, 0x16, 0x1F, 0x64, 0xDB, 0x0D, 0x56, 0xF0, 0x73, 0xFF, 0xE3, 0xC2, 0xC6, 0x66, 0xEB,
201 0x70, 0x2F, 0xFF, 0xCA, 0xA1, 0xF0, 0x96, 0xEB, 0xB1, 0x97, 0x0F, 0x78, 0xFD, 0xB5, 0x2B, 0xC9,
202 } },
203 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz012345",
204 .output = {
205 0x35, 0x5E, 0x5F, 0xD6, 0x25, 0xA9, 0xCD, 0x5C, 0x27, 0xB3, 0x12, 0xB3, 0xC4, 0x20, 0x8D, 0x02,
206 0x36, 0xED, 0x6D, 0x32, 0x56, 0x6B, 0xD5, 0xA0, 0x64, 0x25, 0x99, 0xC1, 0xC8, 0x99, 0x64, 0x06,
207 } },
208 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123456",
209 .output = {
210 0x86, 0xDE, 0x08, 0xB3, 0x23, 0x46, 0xA1, 0x21, 0xDB, 0xC1, 0xBB, 0xB9, 0x0C, 0xFF, 0xCA, 0x94,
211 0x29, 0xA5, 0x06, 0x8D, 0x79, 0x52, 0xFE, 0xF8, 0x97, 0x41, 0x6E, 0xBC, 0xE2, 0x47, 0xC6, 0xAE,
212 } },
213 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz01234567",
214 .output = {
215 0xFA, 0x75, 0xCD, 0x23, 0x99, 0x2C, 0x82, 0xCF, 0x11, 0x0B, 0x4C, 0xA1, 0xEE, 0x6A, 0x11, 0x86,
216 0x15, 0x48, 0xE9, 0xBD, 0x9C, 0xCB, 0x63, 0x2C, 0x7B, 0x60, 0x1F, 0xC3, 0xCB, 0x10, 0x65, 0x9F,
217 } },
218 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz012345678",
219 .output = {
220 0x2F, 0x96, 0xFC, 0xD5, 0x47, 0x6D, 0x14, 0x65, 0xB0, 0xA9, 0x9B, 0x37, 0x31, 0xCA, 0xF2, 0x41,
221 0x4B, 0xD2, 0xF0, 0x90, 0x10, 0xEE, 0x09, 0x44, 0x48, 0xBD, 0xB5, 0x59, 0x8A, 0xEC, 0xFF, 0xD2,
222 } },
223 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123456789",
224 .output = {
225 0xB0, 0xB9, 0x2F, 0x78, 0x81, 0x54, 0x3E, 0xFB, 0x77, 0xF3, 0x18, 0x6D, 0x81, 0x86, 0x09, 0x44,
226 0x20, 0xA9, 0x00, 0x63, 0xBB, 0x5A, 0x38, 0xC7, 0x55, 0x1D, 0xFB, 0x3D, 0xAC, 0x2F, 0xEB, 0xB1,
227 } },
228 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123456789a",
229 .output = {
230 0x0B, 0xE1, 0x2A, 0x0C, 0xFC, 0xE8, 0xCF, 0xAF, 0xB4, 0x66, 0x2D, 0xBC, 0xFD, 0xD4, 0x21, 0xAF,
231 0x55, 0x98, 0xE2, 0x01, 0x5D, 0xC8, 0xA3, 0x80, 0x5A, 0x68, 0xA7, 0x6D, 0x9D, 0xB0, 0xFE, 0xC3,
232 } },
233 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123456789ab",
234 .output = {
235 0x82, 0x0F, 0x15, 0xAE, 0x80, 0x73, 0x5E, 0x1B, 0x0A, 0x67, 0x6C, 0xA6, 0x9D, 0x36, 0xA1, 0x8D,
236 0x86, 0x93, 0x21, 0x39, 0x84, 0xD5, 0x5B, 0x5E, 0x3A, 0x7C, 0xC9, 0x60, 0x45, 0x08, 0x49, 0x79,
237 } },
238 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123456789abc",
239 .output = {
240 0xD8, 0x42, 0xF4, 0x26, 0xC3, 0x02, 0xDD, 0x36, 0xE7, 0x26, 0xD8, 0x59, 0xF0, 0xD3, 0x54, 0x3B,
241 0xA9, 0xF3, 0x31, 0xE2, 0xA4, 0xFC, 0x93, 0xF9, 0x22, 0xC0, 0xDD, 0xFA, 0x60, 0x2E, 0x36, 0x32,
242 } },
243 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123456789abcd",
244 .output = {
245 0x50, 0xA4, 0xDE, 0x4F, 0x65, 0x9A, 0x28, 0x2C, 0xD0, 0x99, 0x68, 0x60, 0x12, 0xDB, 0xD9, 0xAF,
246 0x2C, 0x1F, 0xD9, 0x7B, 0x50, 0x8E, 0xE8, 0x7B, 0xF6, 0x5F, 0x6F, 0x3E, 0x7F, 0x67, 0xB5, 0xF9,
247 } },
248 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123456789abcde",
249 .output = {
250 0x05, 0xC5, 0x21, 0xE1, 0x77, 0x93, 0xF5, 0x5D, 0xAF, 0x1D, 0x3A, 0xDD, 0xD1, 0x3A, 0xC8, 0xF7,
251 0x84, 0x51, 0xAF, 0xE4, 0x1C, 0x3D, 0xAC, 0x3D, 0xE5, 0x5D, 0x9F, 0x11, 0xE8, 0x31, 0xED, 0x2B,
252 } },
253 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123456789abcdef",
254 .output = {
255 0x1D, 0x7D, 0x82, 0xB2, 0xD2, 0x17, 0xD9, 0xDF, 0xCB, 0xC6, 0xD9, 0x72, 0x47, 0x22, 0x0C, 0xC5,
256 0x2D, 0xF1, 0x0F, 0xAF, 0xD4, 0x51, 0x61, 0xD2, 0x6A, 0x36, 0x36, 0x5D, 0x0E, 0xB8, 0xDD, 0x65,
257 } },
258 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123456789abcdefg",
259 .output = {
260 0xC7, 0x82, 0x41, 0x6B, 0xF3, 0xE7, 0x40, 0x6B, 0x1A, 0xFD, 0xC8, 0x2A, 0xFB, 0x6D, 0xE6, 0xB9,
261 0x15, 0xFF, 0x83, 0x48, 0x2D, 0x61, 0x11, 0x8E, 0xE1, 0xC0, 0x35, 0xE6, 0x48, 0x39, 0x9E, 0xE6,
262 } },
263 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123456789abcdefgh",
264 .output = {
265 0x0C, 0xB5, 0x2C, 0xD0, 0x1B, 0x97, 0x54, 0x0F, 0x87, 0x3E, 0xD6, 0x71, 0x9D, 0x5F, 0xF6, 0xFE,
266 0xB1, 0xE1, 0x46, 0x91, 0x35, 0x50, 0x0E, 0x6E, 0xD5, 0x9D, 0x21, 0x41, 0x43, 0xD9, 0x50, 0xC2,
267 } },
268 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123456789abcdefghi",
269 .output = {
270 0x6F, 0xE1, 0xD4, 0x04, 0x47, 0x58, 0x8C, 0x8D, 0xD9, 0x7B, 0x63, 0x72, 0xE4, 0x85, 0xD9, 0x33,
271 0x63, 0x36, 0x2A, 0x5B, 0xF6, 0x4E, 0x4C, 0x1B, 0x34, 0x1B, 0xD7, 0xF7, 0xFF, 0x86, 0x81, 0xFC,
272 } },
273 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123456789abcdefghij",
274 .output = {
275 0xB4, 0x75, 0xF1, 0x63, 0xEF, 0x54, 0x19, 0x19, 0x01, 0x9D, 0x5B, 0xF2, 0x87, 0xC5, 0x6E, 0xD6,
276 0x47, 0x24, 0xFD, 0x54, 0x86, 0x5A, 0x6A, 0xC1, 0xF0, 0x1D, 0x20, 0x06, 0x23, 0x29, 0x85, 0x01,
277 } },
278 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123456789abcdefghijk",
279 .output = {
280 0x57, 0xA5, 0xD1, 0x5A, 0xAB, 0x13, 0x3A, 0x41, 0x25, 0xBA, 0x8E, 0xFC, 0x97, 0x90, 0x48, 0x16,
281 0x6A, 0x21, 0x58, 0x5F, 0x47, 0xDA, 0xC9, 0x64, 0xA6, 0x4C, 0xCA, 0xD0, 0x49, 0xF9, 0x5B, 0xC1,
282 } },
283 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123456789abcdefghijkl",
284 .output = {
285 0x40, 0x9F, 0x20, 0x6E, 0xBE, 0x1D, 0x31, 0x1C, 0x2E, 0x97, 0x16, 0xC6, 0x8F, 0x81, 0xBF, 0x7D,
286 0xA2, 0x2A, 0xC3, 0x27, 0x10, 0x07, 0xF6, 0x15, 0x54, 0x0D, 0xF8, 0xA3, 0x22, 0x54, 0x08, 0xA0,
287 } },
288 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklm",
289 .output = {
290 0xC1, 0x1A, 0x7C, 0x91, 0xAC, 0xC9, 0x02, 0xA6, 0xC5, 0x41, 0xFC, 0x0C, 0x79, 0x49, 0xDC, 0x86,
291 0xF5, 0xBE, 0xCD, 0x3E, 0xFD, 0x21, 0x89, 0x64, 0xD2, 0x36, 0x1A, 0x9D, 0xEB, 0xC9, 0xD6, 0x24,
292 } },
293 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmn",
294 .output = {
295 0xC4, 0xBB, 0x86, 0x95, 0x20, 0x61, 0xEC, 0xB5, 0x97, 0x16, 0x3E, 0xB3, 0xAD, 0xD6, 0xAB, 0x55,
296 0xEB, 0x76, 0x25, 0xCD, 0xA7, 0x43, 0x89, 0x39, 0xF0, 0x58, 0xFD, 0x37, 0x43, 0xF7, 0x50, 0xE6,
297 } },
298 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmno",
299 .output = {
300 0x52, 0x37, 0x53, 0x3B, 0x57, 0x4F, 0x97, 0xAE, 0x1F, 0x93, 0xEE, 0x00, 0x56, 0x59, 0xCD, 0xCB,
301 0x2D, 0x93, 0xF5, 0x28, 0x2D, 0x88, 0x12, 0xCD, 0xCD, 0xF1, 0xB2, 0x3C, 0xE6, 0xC0, 0x5D, 0xE1,
302 } },
303 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnop",
304 .output = {
305 0x12, 0x31, 0x05, 0x55, 0x14, 0x80, 0x59, 0xFD, 0x7D, 0x68, 0x56, 0xD8, 0x66, 0x5D, 0xBB, 0xCF,
306 0xC8, 0x27, 0x88, 0x7F, 0x4F, 0xE3, 0x3E, 0x60, 0x5B, 0x3F, 0xF8, 0x3D, 0x5F, 0x42, 0xCB, 0x4B,
307 } },
308 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopq",
309 .output = {
310 0xF1, 0xEF, 0x42, 0xBD, 0x61, 0x26, 0x88, 0x75, 0x92, 0x98, 0x37, 0x2B, 0x04, 0x3C, 0xBB, 0x22,
311 0x71, 0xA6, 0x51, 0x12, 0x0D, 0x99, 0xA4, 0x02, 0x52, 0xC0, 0x75, 0xC8, 0x32, 0x57, 0x61, 0xA1,
312 } },
313 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqr",
314 .output = {
315 0x39, 0xC9, 0x89, 0x0B, 0x86, 0xAC, 0xDF, 0xD8, 0xB8, 0x76, 0x4C, 0x78, 0x34, 0x62, 0x25, 0xF9,
316 0xD0, 0x69, 0xCC, 0x53, 0xB8, 0xD8, 0xC3, 0xB9, 0xD5, 0xD9, 0x99, 0x22, 0xBA, 0x4E, 0x2C, 0x43,
317 } },
318 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrs",
319 .output = {
320 0x94, 0x84, 0xD7, 0x8C, 0x2C, 0x64, 0x9C, 0x38, 0x41, 0xE5, 0x95, 0xCD, 0x20, 0xA4, 0xD0, 0x87,
321 0xBF, 0x52, 0xCE, 0x14, 0x69, 0xE2, 0x57, 0x08, 0xA4, 0x18, 0x32, 0x58, 0xC6, 0x1E, 0xD2, 0xEF,
322 } },
323 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrst",
324 .output = {
325 0x38, 0x5C, 0xC1, 0x1A, 0x36, 0x61, 0x12, 0xBE, 0x5B, 0xF3, 0x36, 0x32, 0xB3, 0x63, 0xD4, 0x95,
326 0x5D, 0x29, 0x5F, 0x1F, 0x2B, 0x4C, 0xF0, 0x08, 0xBB, 0x0E, 0x67, 0x90, 0xB1, 0x17, 0xD3, 0xE6,
327 } },
328 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstu",
329 .output = {
330 0x52, 0x35, 0x52, 0x89, 0x00, 0xF4, 0xBC, 0x82, 0xF5, 0x47, 0x46, 0x33, 0x05, 0x87, 0xD1, 0x1B,
331 0x8F, 0x20, 0x3E, 0x66, 0x35, 0xD8, 0x3A, 0xB7, 0x08, 0xC6, 0x9A, 0x95, 0xBC, 0x6E, 0xC7, 0xAD,
332 } },
333 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuv",
334 .output = {
335 0xD1, 0x40, 0x7E, 0x7D, 0x6B, 0x47, 0x49, 0xF9, 0x9F, 0xEB, 0x9C, 0xAE, 0x77, 0xFF, 0x4B, 0x3B,
336 0x32, 0xA6, 0xD0, 0xD3, 0x6E, 0xB1, 0xA2, 0x79, 0x28, 0xBD, 0xAB, 0x1A, 0x98, 0x21, 0xF0, 0xD7,
337 } },
338 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvw",
339 .output = {
340 0x4F, 0xE7, 0xCC, 0x9F, 0x96, 0x3F, 0x77, 0x03, 0xB4, 0x48, 0x26, 0xEC, 0x47, 0x6E, 0x63, 0x3F,
341 0x22, 0xCA, 0x25, 0x97, 0xAE, 0x1A, 0x5B, 0x75, 0xF8, 0x4A, 0xFE, 0x6C, 0x8A, 0x04, 0xAD, 0x56,
342 } },
343 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwx",
344 .output = {
345 0xD0, 0x50, 0x10, 0x40, 0xA4, 0xCE, 0x8E, 0xB2, 0x73, 0x55, 0x19, 0xC3, 0xFB, 0xED, 0x76, 0x5E,
346 0x9D, 0x80, 0x42, 0xDD, 0x3B, 0xD4, 0x3F, 0xF9, 0x07, 0xCC, 0xD9, 0x5D, 0xCC, 0x17, 0xC6, 0xCC,
347 } },
348 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxy",
349 .output = {
350 0xE8, 0x8C, 0xAF, 0x20, 0x5D, 0x3C, 0x9F, 0x8F, 0x82, 0x2F, 0x65, 0x3A, 0xD5, 0x80, 0x9F, 0x43,
351 0xD1, 0xF9, 0xD4, 0x6A, 0x3E, 0x45, 0xA9, 0xEB, 0xCF, 0xF2, 0xE6, 0xC0, 0x64, 0x38, 0xF8, 0x7D,
352 } },
353 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz",
354 .output = {
355 0x23, 0xCE, 0xAA, 0xFD, 0xAC, 0x74, 0xFB, 0xB0, 0x87, 0x33, 0xC0, 0x03, 0x25, 0xA6, 0x96, 0x40,
356 0xEE, 0x85, 0xC9, 0xB3, 0x32, 0x68, 0x2C, 0x5A, 0xE2, 0x68, 0xB4, 0x53, 0x90, 0x48, 0x7C, 0x6A,
357 } },
358 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0",
359 .output = {
360 0xD4, 0x91, 0x25, 0x0A, 0x64, 0xC0, 0xA6, 0xB6, 0xDB, 0x2D, 0xDE, 0x1A, 0xEA, 0x38, 0x92, 0xEE,
361 0x56, 0x47, 0x8D, 0x2B, 0x26, 0xC4, 0x26, 0xE2, 0xA2, 0x52, 0xE5, 0x39, 0x37, 0x5F, 0xFB, 0x59,
362 } },
363 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz01",
364 .output = {
365 0xF7, 0xF8, 0x54, 0x5A, 0x00, 0x36, 0x5D, 0xE0, 0x08, 0x90, 0xAF, 0x80, 0x89, 0x96, 0xED, 0x71,
366 0x87, 0x8A, 0xDA, 0x34, 0x9A, 0x98, 0xD2, 0xCB, 0x5B, 0x91, 0x06, 0xC1, 0x95, 0x60, 0x71, 0x37,
367 } },
368 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz012",
369 .output = {
370 0xF5, 0x2B, 0x8E, 0x5E, 0x75, 0xC5, 0x6B, 0x8E, 0xAD, 0x21, 0xE5, 0xEF, 0x19, 0x19, 0xBD, 0xA7,
371 0x30, 0x70, 0x8B, 0xA3, 0x3F, 0x9F, 0x24, 0x6A, 0x73, 0xC4, 0x03, 0xE1, 0x41, 0xCE, 0xED, 0x0F,
372 } },
373 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123",
374 .output = {
375 0x8D, 0x07, 0x4A, 0xB3, 0xB4, 0x1A, 0xF8, 0xCF, 0x10, 0xCB, 0x52, 0x60, 0x6A, 0xED, 0xEC, 0x0B,
376 0xFB, 0x8D, 0xD9, 0xF0, 0xD5, 0x22, 0xA8, 0xAA, 0xD4, 0x5C, 0x4C, 0x50, 0x01, 0x60, 0xF3, 0x07,
377 } },
378 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz01234",
379 .output = {
380 0x35, 0xFF, 0xDE, 0x6F, 0x4A, 0xF5, 0xE6, 0x5F, 0x5E, 0xCF, 0x17, 0x46, 0x4A, 0xE6, 0xDE, 0x27,
381 0x56, 0x06, 0x5F, 0xAF, 0x72, 0xF6, 0x3A, 0xD9, 0x02, 0xBD, 0x0E, 0x56, 0x2B, 0xB7, 0x18, 0x94,
382 } },
383 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz012345",
384 .output = {
385 0xFE, 0x4F, 0x12, 0xD6, 0x2E, 0xC1, 0x73, 0x6E, 0x99, 0x4A, 0x78, 0xD8, 0xEF, 0x66, 0x7E, 0x5B,
386 0x35, 0xB3, 0x03, 0x74, 0x85, 0x76, 0x0E, 0x8F, 0xFA, 0xDD, 0xE2, 0x41, 0xA6, 0x19, 0x34, 0x66,
387 } },
388 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456",
389 .output = {
390 0xA3, 0x27, 0xA8, 0xF0, 0xCE, 0xF2, 0x24, 0x4E, 0x39, 0x3F, 0xE9, 0x8B, 0xA7, 0xE5, 0x59, 0x5C,
391 0x5E, 0x40, 0xE4, 0x35, 0x93, 0xE5, 0x87, 0xCE, 0x55, 0x43, 0x02, 0x1C, 0xD5, 0xF9, 0x4C, 0xAD,
392 } },
393 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz01234567",
394 .output = {
395 0xD2, 0x17, 0xD0, 0xA3, 0xEC, 0x35, 0x28, 0x99, 0xDD, 0xB1, 0xD0, 0x38, 0xE5, 0x33, 0x6A, 0xE7,
396 0x15, 0x56, 0xC0, 0xEA, 0x61, 0x2A, 0xF9, 0x70, 0xCB, 0x75, 0xD4, 0x9B, 0x1E, 0x25, 0x36, 0x6E,
397 } },
398 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz012345678",
399 .output = {
400 0x05, 0x5E, 0x47, 0x72, 0x8E, 0x3C, 0xE5, 0xD4, 0x83, 0xBD, 0xB4, 0x8F, 0x47, 0x14, 0x5C, 0xF6,
401 0xF7, 0x31, 0xF5, 0x0F, 0xC9, 0x34, 0xA1, 0xF6, 0x4B, 0x58, 0xBD, 0xE6, 0x41, 0x38, 0x38, 0x07,
402 } },
403 test_vector{ .input = "abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789",
404 .output = {
405 0xAA, 0x60, 0x21, 0x6D, 0xE8, 0x21, 0x17, 0x5F, 0x97, 0x3E, 0x38, 0x26, 0xED, 0x7A, 0x0B, 0x74,
406 0x31, 0xEC, 0x87, 0xE8, 0xE2, 0x19, 0x2E, 0x80, 0x24, 0x12, 0x53, 0xB2, 0xA9, 0x4D, 0xB0, 0x11,
407 }}
408};
409
410/*
411 * The below test vector is a subset (covers inputs from 0 to 1024 bytes only) of the test vectors from the Blake3
412 * reference implementation. It has been modified to remove the keyed and derive_key context since our implementation
413 * does not support those modes. Further, we have converted the string formats from the source file into vector format
414 * for convenience.
415 *
416 * Link: https://github.com/BLAKE3-team/BLAKE3/blob/master/test_vectors/test_vectors.json
417 */
419 { 0,
420 {
421 0xAF, 0x13, 0x49, 0xB9, 0xF5, 0xF9, 0xA1, 0xA6, 0xA0, 0x40, 0x4D, 0xEA, 0x36, 0xDC, 0xC9, 0x49,
422 0x9B, 0xCB, 0x25, 0xC9, 0xAD, 0xC1, 0x12, 0xB7, 0xCC, 0x9A, 0x93, 0xCA, 0xE4, 0x1F, 0x32, 0x62,
423 } },
424 { 1,
425 {
426 0x2D, 0x3A, 0xDE, 0xDF, 0xF1, 0x1B, 0x61, 0xF1, 0x4C, 0x88, 0x6E, 0x35, 0xAF, 0xA0, 0x36, 0x73,
427 0x6D, 0xCD, 0x87, 0xA7, 0x4D, 0x27, 0xB5, 0xC1, 0x51, 0x02, 0x25, 0xD0, 0xF5, 0x92, 0xE2, 0x13,
428 } },
429 { 2,
430 {
431 0x7B, 0x70, 0x15, 0xBB, 0x92, 0xCF, 0x0B, 0x31, 0x80, 0x37, 0x70, 0x2A, 0x6C, 0xDD, 0x81, 0xDE,
432 0xE4, 0x12, 0x24, 0xF7, 0x34, 0x68, 0x4C, 0x2C, 0x12, 0x2C, 0xD6, 0x35, 0x9C, 0xB1, 0xEE, 0x63,
433 } },
434 { 3,
435 {
436 0xE1, 0xBE, 0x4D, 0x7A, 0x8A, 0xB5, 0x56, 0x0A, 0xA4, 0x19, 0x9E, 0xEA, 0x33, 0x98, 0x49, 0xBA,
437 0x8E, 0x29, 0x3D, 0x55, 0xCA, 0x0A, 0x81, 0x00, 0x67, 0x26, 0xD1, 0x84, 0x51, 0x9E, 0x64, 0x7F,
438 } },
439 { 4,
440 {
441 0xF3, 0x0F, 0x5A, 0xB2, 0x8F, 0xE0, 0x47, 0x90, 0x40, 0x37, 0xF7, 0x7B, 0x6D, 0xA4, 0xFE, 0xA1,
442 0xE2, 0x72, 0x41, 0xC5, 0xD1, 0x32, 0x63, 0x8D, 0x8B, 0xED, 0xCE, 0x9D, 0x40, 0x49, 0x4F, 0x32,
443 } },
444 { 5,
445 {
446 0xB4, 0x0B, 0x44, 0xDF, 0xD9, 0x7E, 0x7A, 0x84, 0xA9, 0x96, 0xA9, 0x1A, 0xF8, 0xB8, 0x51, 0x88,
447 0xC6, 0x6C, 0x12, 0x69, 0x40, 0xBA, 0x7A, 0xAD, 0x2E, 0x7A, 0xE6, 0xB3, 0x85, 0x40, 0x2A, 0xA2,
448 } },
449 { 6,
450 {
451 0x06, 0xC4, 0xE8, 0xFF, 0xB6, 0x87, 0x2F, 0xAD, 0x96, 0xF9, 0xAA, 0xCA, 0x5E, 0xEE, 0x15, 0x53,
452 0xEB, 0x62, 0xAE, 0xD0, 0xAD, 0x71, 0x98, 0xCE, 0xF4, 0x2E, 0x87, 0xF6, 0xA6, 0x16, 0xC8, 0x44,
453 } },
454 { 7,
455 {
456 0x3F, 0x87, 0x70, 0xF3, 0x87, 0xFA, 0xAD, 0x08, 0xFA, 0xA9, 0xD8, 0x41, 0x4E, 0x9F, 0x44, 0x9A,
457 0xC6, 0x8E, 0x6F, 0xF0, 0x41, 0x7F, 0x67, 0x3F, 0x60, 0x2A, 0x64, 0x6A, 0x89, 0x14, 0x19, 0xFE,
458 } },
459 { 8,
460 {
461 0x23, 0x51, 0x20, 0x7D, 0x04, 0xFC, 0x16, 0xAD, 0xE4, 0x3C, 0xCA, 0xB0, 0x86, 0x00, 0x93, 0x9C,
462 0x7C, 0x1F, 0xA7, 0x0A, 0x5C, 0x0A, 0xAC, 0xA7, 0x60, 0x63, 0xD0, 0x4C, 0x32, 0x28, 0xEA, 0xEB,
463 } },
464 { 63,
465 {
466 0xE9, 0xBC, 0x37, 0xA5, 0x94, 0xDA, 0xAD, 0x83, 0xBE, 0x94, 0x70, 0xDF, 0x7F, 0x7B, 0x37, 0x98,
467 0x29, 0x7C, 0x3D, 0x83, 0x4C, 0xE8, 0x0B, 0xA8, 0x5D, 0x6E, 0x20, 0x76, 0x27, 0xB7, 0xDB, 0x7B,
468 } },
469 { 64,
470 {
471 0x4E, 0xED, 0x71, 0x41, 0xEA, 0x4A, 0x5C, 0xD4, 0xB7, 0x88, 0x60, 0x6B, 0xD2, 0x3F, 0x46, 0xE2,
472 0x12, 0xAF, 0x9C, 0xAC, 0xEB, 0xAC, 0xDC, 0x7D, 0x1F, 0x4C, 0x6D, 0xC7, 0xF2, 0x51, 0x1B, 0x98,
473 } },
474 { 65,
475 {
476 0xDE, 0x1E, 0x5F, 0xA0, 0xBE, 0x70, 0xDF, 0x6D, 0x2B, 0xE8, 0xFF, 0xFD, 0x0E, 0x99, 0xCE, 0xAA,
477 0x8E, 0xB6, 0xE8, 0xC9, 0x3A, 0x63, 0xF2, 0xD8, 0xD1, 0xC3, 0x0E, 0xCB, 0x6B, 0x26, 0x3D, 0xEE,
478 } },
479 { 127,
480 {
481 0xD8, 0x12, 0x93, 0xFD, 0xA8, 0x63, 0xF0, 0x08, 0xC0, 0x9E, 0x92, 0xFC, 0x38, 0x2A, 0x81, 0xF5,
482 0xA0, 0xB4, 0xA1, 0x25, 0x1C, 0xBA, 0x16, 0x34, 0x01, 0x6A, 0x0F, 0x86, 0xA6, 0xBD, 0x64, 0x0D,
483 } },
484 { 128,
485 {
486 0xF1, 0x7E, 0x57, 0x05, 0x64, 0xB2, 0x65, 0x78, 0xC3, 0x3B, 0xB7, 0xF4, 0x46, 0x43, 0xF5, 0x39,
487 0x62, 0x4B, 0x05, 0xDF, 0x1A, 0x76, 0xC8, 0x1F, 0x30, 0xAC, 0xD5, 0x48, 0xC4, 0x4B, 0x45, 0xEF,
488 } },
489 { 129,
490 {
491 0x68, 0x3A, 0xAA, 0xE9, 0xF3, 0xC5, 0xBA, 0x37, 0xEA, 0xAF, 0x07, 0x2A, 0xED, 0x0F, 0x9E, 0x30,
492 0xBA, 0xC0, 0x86, 0x51, 0x37, 0xBA, 0xE6, 0x8B, 0x1F, 0xDE, 0x4C, 0xA2, 0xAE, 0xBD, 0xCB, 0x12,
493 } },
494 { 1023,
495 {
496 0x10, 0x10, 0x89, 0x70, 0xEE, 0xDA, 0x3E, 0xB9, 0x32, 0xBA, 0xAC, 0x14, 0x28, 0xC7, 0xA2, 0x16,
497 0x3B, 0x0E, 0x92, 0x4C, 0x9A, 0x9E, 0x25, 0xB3, 0x5B, 0xBA, 0x72, 0xB2, 0x8F, 0x70, 0xBD, 0x11,
498 } },
499 { 1024,
500 {
501 0x42, 0x21, 0x47, 0x39, 0xF0, 0x95, 0xA4, 0x06, 0xF3, 0xFC, 0x83, 0xDE, 0xB8, 0x89, 0x74, 0x4A,
502 0xC0, 0x0D, 0xF8, 0x31, 0xC1, 0x0D, 0xAA, 0x55, 0x18, 0x9B, 0x5D, 0x12, 0x1C, 0x85, 0x5A, 0xF7,
503 } }
504};
505
506TEST(MiscBlake3s, TestVectors)
507{
508 constexpr_for<0, 1, 73>([&]<size_t index>() {
509 constexpr auto v = test_vectors[index];
510 std::vector<uint8_t> input(v.input.begin(), v.input.end());
511 auto result_vector = blake3::blake3s(input);
512 std::array<uint8_t, 32> result;
513 std::copy(result_vector.begin(), result_vector.end(), result.begin());
514
515 EXPECT_EQ(result, v.output);
516
517 // There's no such thing as a compile-time pointer to &input_array[0] if array is empty.
518 // We use `dummy_array` as a workaround for this edge-case
519 constexpr std::array<uint8_t, 1> dummy_array{ 0 };
520 constexpr size_t S = index > 0 ? v.input.size() : 1;
521 constexpr std::array<uint8_t, S> input_array = index > 0 ? convert<S>(v.input) : dummy_array;
522 constexpr std::array<uint8_t, 32> result_constexpr =
523 blake3::blake3s_constexpr(&input_array[0], index > 0 ? S : 0);
524 EXPECT_EQ(result_constexpr, v.output);
525 static_assert(result_constexpr == v.output);
526 });
527}
528
529TEST(MiscBlake3s, TooLargeInputTest)
530{
531 std::vector<uint8_t> input(1025, 0);
532 EXPECT_THROW_OR_ABORT(blake3::blake3s(input), "Assertion failed");
533}
534
535TEST(MiscBlake3s, test_official_vectors)
536{
537 for (auto v : full_test_vector) {
538 std::vector<uint8_t> input = test_input(v.input_len);
539 EXPECT_EQ(blake3::blake3s(input), v.hash);
540 }
541}
#define EXPECT_THROW_OR_ABORT(statement, matcher)
Definition assert.hpp:174
test_vector test_vectors[]
constexpr std::array< uint8_t, S > convert(const std::string_view &in)
std::vector< uint8_t > test_input(size_t input_len)
blake3_test_vector full_test_vector[]
Entry point for Barretenberg command-line interface.
Definition api.hpp:5
TEST(BoomerangMegaCircuitBuilder, BasicCircuit)
std::vector< uint8_t > blake3s(std::vector< uint8_t > const &input)
constexpr std::array< uint8_t, BLAKE3_OUT_LEN > blake3s_constexpr(const uint8_t *input, size_t input_size)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
std::vector< uint8_t > hash
std::string input
std::array< uint8_t, 32 > output
std::string_view input