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