]> git.ipfire.org Git - thirdparty/strongswan.git/blob - src/libstrongswan/plugins/newhope/tests/suites/test_newhope_noise.c
96dd16787bfa1a32c5bb74e0a1dead76ad6cc282
[thirdparty/strongswan.git] / src / libstrongswan / plugins / newhope / tests / suites / test_newhope_noise.c
1 /*
2 * Copyright (C) 2016 Andreas Steffen
3 * HSR Hochschule fuer Technik Rapperswil
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License as published by the
7 * Free Software Foundation; either version 2 of the License, or (at your
8 * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
9 *
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
12 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13 * for more details.
14 */
15
16 #include "test_suite.h"
17
18 #include <newhope_noise.h>
19
20 #include <library.h>
21
22 static const uint16_t n = 1024;
23 static const uint16_t q = 12289;
24
25 static const size_t seed_len = 32;
26
27 typedef struct {
28 uint8_t key;
29 uint8_t nonce;
30 uint8_t uniform[64];
31 uint32_t poly[1024];
32 } noise_t;
33
34 static noise_t noises[] = {
35 { 0x00, 0x00, /* polynomial s */
36 { 0x9f, 0x07, 0xe7, 0xbe, 0x55, 0x51, 0x38, 0x7a, 0x98, 0xba,
37 0x97, 0x7c, 0x73, 0x2d, 0x08, 0x0d, 0xcb, 0x0f, 0x29, 0xa0,
38 0x48, 0xe3, 0x65, 0x69, 0x12, 0xc6, 0x53, 0x3e, 0x32, 0xee,
39 0x7a, 0xed, 0x29, 0xb7, 0x21, 0x76, 0x9c, 0xe6, 0x4e, 0x43,
40 0xd5, 0x71, 0x33, 0xb0, 0x74, 0xd8, 0x39, 0xd5, 0x31, 0xed,
41 0x1f, 0x28, 0x51, 0x0a, 0xfb, 0x45, 0xac, 0xe1, 0x0a, 0x1f,
42 0x4b, 0x79, 0x4d, 0x6f },
43 { 12286, 12288, 12287, 5, 4, 12288, 12286, 12287, 2, 2,
44 2, 12288, 2, 12284, 1, 12288, 12288, 12288, 6, 12288,
45 0, 4, 1, 12285, 12286, 2, 12284, 12287, 1, 5,
46 5, 12286, 12288, 2, 12286, 0, 3, 1, 0, 2,
47 0, 0, 4, 12283, 12284, 4, 0, 12288, 3, 12288,
48 0, 4, 1, 12288, 12286, 0, 3, 1, 12286, 12287,
49 12285, 3, 2, 3, 12286, 0, 6, 6, 12288, 12284,
50 0, 12282, 1, 0, 4, 1, 0, 3, 2, 2,
51 3, 3, 2, 12288, 3, 1, 12287, 12285, 0, 12288,
52 0, 0, 12288, 12287, 12284, 12286, 0, 12288, 4, 4,
53 12288, 5, 12286, 2, 12288, 5, 1, 12283, 1, 12288,
54 1, 12288, 12287, 12285, 2, 2, 12285, 12284, 0, 12285,
55 12287, 0, 1, 0, 2, 12288, 12288, 12287, 0, 4,
56 12288, 12285, 12288, 0, 2, 1, 12287, 3, 1, 3,
57 5, 12286, 1, 0, 12286, 0, 4, 0, 12288, 1,
58 12288, 4, 5, 12283, 12288, 1, 3, 12283, 12286, 5,
59 1, 12286, 12287, 12286, 0, 12287, 12285, 1, 0, 0,
60 1, 3, 0, 0, 0, 12284, 12286, 2, 4, 12288,
61 6, 1, 2, 12288, 1, 12287, 12286, 12284, 12287, 1,
62 3, 12284, 0, 0, 6, 12286, 7, 5, 2, 3,
63 12285, 12287, 12285, 2, 3, 12283, 2, 12284, 12288, 3,
64 12288, 1, 4, 12287, 2, 12288, 12288, 1, 12286, 12284,
65 2, 1, 5, 12286, 0, 12288, 0, 0, 0, 12287,
66 1, 0, 3, 0, 0, 6, 2, 12283, 1, 3,
67 3, 12284, 3, 1, 12286, 2, 12288, 0, 6, 1,
68 1, 12285, 12287, 12288, 4, 2, 12288, 3, 12286, 12288,
69 12287, 3, 3, 2, 7, 4, 12287, 12286, 12287, 2,
70 2, 12287, 1, 12288, 1, 12287, 12283, 12287, 12288, 1,
71 12283, 0, 12286, 12288, 4, 12287, 12286, 12286, 2, 2,
72 12287, 5, 12288, 4, 0, 12287, 1, 3, 12286, 2,
73 1, 1, 12288, 12287, 5, 12288, 0, 0, 1, 0,
74 12286, 6, 2, 1, 2, 5, 12286, 6, 12286, 12288,
75 0, 12286, 3, 12283, 12288, 12284, 0, 7, 2, 6,
76 1, 12288, 12285, 12284, 1, 0, 0, 2, 12288, 12288,
77 12288, 3, 3, 1, 3, 12286, 4, 3, 12284, 4,
78 1, 12287, 12287, 12285, 0, 12287, 12287, 12287, 12286, 12288,
79 1, 12287, 1, 0, 12288, 2, 0, 4, 0, 12287,
80 12285, 12285, 5, 3, 12282, 0, 12287, 5, 12287, 1,
81 12283, 12288, 12288, 3, 1, 1, 3, 12288, 12283, 5,
82 12288, 12288, 5, 5, 1, 12286, 12286, 12288, 1, 2,
83 1, 3, 12287, 12288, 12284, 12287, 1, 12287, 0, 12286,
84 12285, 1, 12287, 12282, 12286, 12287, 0, 12285, 4, 2,
85 1, 12282, 0, 1, 12288, 12285, 12284, 12286, 12286, 12287,
86 12288, 1, 12288, 4, 12287, 4, 12287, 12287, 0, 1,
87 12287, 3, 1, 12286, 12286, 4, 6, 12288, 1, 12285,
88 12286, 12287, 0, 12287, 12287, 1, 12286, 5, 0, 2,
89 12283, 12284, 1, 12286, 0, 12287, 12286, 12288, 1, 4,
90 4, 12283, 2, 6, 1, 12288, 12286, 2, 7, 2,
91 1, 12288, 5, 12284, 12288, 12288, 1, 7, 3, 12283,
92 1, 12286, 2, 12288, 12287, 1, 12286, 1, 12286, 12288,
93 12287, 3, 2, 2, 0, 12284, 12287, 1, 1, 12284,
94 12286, 1, 2, 1, 0, 12285, 1, 0, 1, 2,
95 2, 4, 12288, 1, 12288, 5, 0, 12287, 12288, 2,
96 0, 12288, 12287, 0, 12288, 12288, 0, 0, 12285, 4,
97 2, 12288, 0, 2, 0, 12288, 1, 3, 12287, 12288,
98 12288, 12288, 12286, 0, 12285, 12286, 12287, 3, 0, 12286,
99 2, 1, 12285, 2, 12288, 0, 5, 0, 1, 12288,
100 12288, 4, 3, 3, 12286, 2, 12288, 4, 12288, 6,
101 2, 12286, 4, 12287, 2, 12287, 0, 12284, 12288, 0,
102 12286, 12288, 3, 4, 12286, 12288, 1, 3, 12286, 3,
103 4, 1, 1, 6, 3, 1, 1, 0, 12288, 4,
104 0, 12288, 0, 0, 0, 12288, 2, 4, 2, 12287,
105 0, 0, 3, 2, 3, 4, 0, 3, 2, 12288,
106 2, 4, 6, 12286, 12284, 12287, 1, 0, 0, 4,
107 1, 3, 12282, 1, 2, 2, 0, 3, 12282, 2,
108 12287, 2, 12288, 4, 12288, 3, 3, 12283, 12288, 12288,
109 12286, 12287, 5, 4, 3, 3, 12288, 12284, 2, 2,
110 0, 12288, 1, 3, 3, 4, 12284, 12288, 0, 1,
111 12284, 0, 12286, 12287, 0, 0, 12287, 0, 1, 6,
112 12288, 1, 12284, 12287, 12282, 12288, 4, 12287, 1, 12286,
113 1, 12286, 12286, 1, 4, 0, 12288, 1, 12288, 1,
114 12285, 3, 1, 0, 1, 0, 12288, 12287, 2, 2,
115 0, 12288, 3, 12284, 2, 12288, 12288, 12288, 12287, 3,
116 3, 0, 12286, 12286, 1, 2, 12286, 12287, 0, 1,
117 12288, 12287, 12287, 12288, 12288, 1, 9, 1, 12288, 12287,
118 2, 1, 1, 0, 12287, 12287, 2, 2, 12288, 12285,
119 1, 12287, 4, 0, 2, 1, 1, 3, 12284, 12286,
120 1, 2, 12288, 12287, 4, 1, 12285, 0, 1, 2,
121 12288, 1, 3, 0, 12286, 0, 12288, 12286, 12287, 12286,
122 1, 12284, 1, 2, 2, 12288, 0, 12288, 1, 12284,
123 2, 3, 12287, 1, 12285, 12288, 0, 1, 12284, 2,
124 12288, 12286, 12286, 3, 12288, 12282, 3, 12287, 12288, 12287,
125 4, 12287, 1, 2, 9, 12283, 12286, 12286, 0, 4,
126 12288, 12288, 4, 0, 1, 1, 2, 12284, 1, 1,
127 0, 12288, 1, 0, 12287, 1, 1, 5, 2, 1,
128 12288, 3, 12287, 5, 4, 1, 4, 12287, 12285, 3,
129 12286, 1, 3, 0, 12287, 0, 12286, 12287, 12287, 12287,
130 3, 2, 12286, 12284, 2, 12288, 1, 1, 12288, 3,
131 1, 3, 12284, 3, 12282, 12288, 3, 0, 2, 12288,
132 0, 5, 0, 2, 0, 12281, 12285, 4, 3, 4,
133 2, 12284, 0, 0, 2, 2, 12287, 12284, 2, 12286,
134 1, 12288, 1, 12286, 12286, 12287, 4, 0, 6, 3,
135 0, 3, 12288, 12288, 12288, 12287, 3, 1, 1, 1,
136 2, 12287, 12284, 3, 12286, 12280, 3, 12284, 12287, 12288,
137 5, 12288, 12284, 2, 12285, 4, 3, 12286, 6, 2,
138 1, 12287, 0, 1, 2, 12286, 1, 0, 12287, 0,
139 1, 1, 12286, 2, 12285, 0, 1, 12288, 0, 1,
140 12288, 1, 12288, 12287, 12287, 12285, 12282, 12288, 2, 12288,
141 2, 12284, 1, 12284, 12287, 12286, 12288, 0, 12288, 1,
142 12283, 12286, 5, 3, 0, 12286, 12286, 3, 1, 0,
143 1, 12288, 12288, 4, 1, 12286, 12287, 12285, 2, 0,
144 2, 12287, 1, 12285, 12288, 12286, 12288, 2, 2, 12285,
145 3, 12286, 12285, 12287 }
146 },
147 { 0x00, 0x01, /* polynomial e */
148 { 0x46, 0xf0, 0xf6, 0xef, 0xee, 0x15, 0xc8, 0xf1, 0xb1, 0x98,
149 0xcb, 0x49, 0xd9, 0x2b, 0x99, 0x08, 0x67, 0x90, 0x51, 0x59,
150 0x44, 0x0c, 0xc7, 0x23, 0x91, 0x6d, 0xc0, 0x01, 0x28, 0x26,
151 0x98, 0x10, 0x39, 0xce, 0x17, 0x66, 0xaa, 0x25, 0x42, 0xb0,
152 0x5d, 0xb3, 0xbd, 0x80, 0x9a, 0xb1, 0x42, 0x48, 0x9d, 0x5d,
153 0xbf, 0xe1, 0x27, 0x3e, 0x73, 0x99, 0x63, 0x7b, 0x4b, 0x32,
154 0x13, 0x76, 0x8a, 0xaa },
155 { 12283, 1, 12288, 4, 0, 12285, 5, 1, 1, 2,
156 3, 4, 12288, 0, 3, 1, 1, 0, 12286, 6,
157 1, 0, 1, 0, 4, 2, 12288, 3, 0, 5,
158 1, 5, 2, 12285, 4, 12288, 3, 2, 12288, 2,
159 12288, 12285, 12287, 6, 12282, 1, 12286, 7, 12287, 4,
160 2, 2, 12288, 12285, 0, 2, 0, 12288, 1, 12287,
161 12287, 2, 1, 2, 1, 12285, 12288, 12286, 1, 2,
162 12287, 12288, 12288, 1, 0, 12287, 0, 4, 2, 6,
163 12287, 12285, 12283, 12285, 5, 12283, 12286, 1, 12283, 2,
164 3, 12286, 12285, 2, 5, 12286, 3, 0, 3, 12286,
165 5, 12285, 12287, 12288, 1, 5, 3, 5, 1, 1,
166 1, 12288, 5, 0, 12288, 3, 2, 12288, 12285, 12288,
167 5, 6, 0, 2, 1, 12287, 12288, 12287, 3, 12284,
168 2, 0, 3, 0, 0, 12288, 0, 2, 2, 2,
169 0, 1, 2, 2, 0, 0, 12287, 12285, 0, 4,
170 1, 12283, 3, 5, 12288, 12286, 12287, 6, 2, 0,
171 0, 12287, 2, 2, 12288, 0, 2, 12288, 12287, 12288,
172 12288, 1, 12288, 1, 12288, 2, 4, 2, 1, 1,
173 0, 12287, 3, 2, 6, 2, 1, 12288, 12285, 6,
174 0, 1, 12284, 12287, 12287, 12286, 5, 4, 0, 5,
175 12287, 12286, 12288, 12286, 0, 3, 1, 12287, 12287, 12288,
176 12288, 12286, 1, 0, 3, 12287, 3, 1, 12283, 1,
177 12288, 5, 1, 4, 12286, 12287, 2, 0, 0, 0,
178 12281, 12286, 0, 8, 5, 0, 4, 0, 12287, 5,
179 1, 3, 2, 12286, 12286, 12288, 12285, 12285, 12287, 0,
180 12284, 12287, 1, 0, 2, 1, 12286, 12288, 2, 12285,
181 0, 0, 0, 1, 0, 6, 1, 12288, 12287, 12287,
182 0, 3, 12288, 12288, 12287, 0, 12287, 1, 3, 0,
183 0, 12286, 12286, 4, 4, 12287, 1, 3, 4, 12287,
184 12284, 2, 12288, 12286, 12283, 12285, 1, 3, 1, 12288,
185 0, 3, 3, 12284, 12285, 5, 3, 12288, 3, 4,
186 3, 1, 12288, 0, 12288, 1, 0, 0, 3, 0,
187 3, 2, 12287, 12288, 0, 12288, 0, 2, 12285, 4,
188 0, 12287, 12287, 1, 1, 1, 12287, 12285, 4, 12282,
189 3, 1, 1, 12288, 2, 4, 12285, 12286, 3, 1,
190 0, 12287, 12283, 12285, 2, 5, 1, 1, 12288, 12288,
191 0, 8, 3, 12287, 12285, 12287, 12286, 12284, 1, 12286,
192 1, 12288, 2, 3, 12288, 12288, 2, 12288, 12284, 12285,
193 0, 3, 12288, 12288, 2, 3, 7, 12287, 3, 3,
194 3, 12284, 0, 0, 1, 12283, 5, 0, 1, 12288,
195 3, 12286, 12287, 12286, 0, 0, 12287, 12283, 4, 12283,
196 0, 0, 3, 12285, 5, 12286, 12282, 12288, 1, 12287,
197 12288, 1, 5, 2, 12287, 2, 12288, 7, 12288, 3,
198 5, 1, 0, 12287, 1, 12287, 3, 2, 4, 2,
199 12287, 12286, 12288, 2, 5, 1, 12286, 4, 0, 2,
200 6, 12286, 2, 12286, 3, 12288, 5, 12285, 0, 2,
201 12287, 5, 12286, 12284, 7, 12285, 12286, 12284, 12287, 1,
202 12288, 12284, 12286, 2, 4, 2, 2, 12283, 12286, 2,
203 2, 12283, 1, 12286, 1, 0, 12284, 3, 0, 4,
204 1, 0, 4, 12288, 0, 12287, 12287, 12287, 12286, 12284,
205 12288, 3, 1, 12285, 0, 3, 8, 4, 2, 12288,
206 3, 12287, 12287, 2, 3, 12288, 12286, 2, 12286, 12288,
207 0, 1, 12287, 12285, 0, 12285, 12288, 12287, 1, 12287,
208 0, 12284, 0, 1, 1, 12285, 0, 0, 0, 12287,
209 12287, 3, 0, 4, 12288, 1, 12288, 12285, 12283, 0,
210 12286, 12286, 12285, 12285, 12287, 1, 0, 2, 3, 1,
211 2, 12286, 12288, 3, 12286, 12288, 12288, 6, 2, 2,
212 0, 12288, 2, 5, 12288, 0, 12284, 12282, 12286, 1,
213 12288, 12288, 12286, 12288, 3, 12286, 2, 0, 12283, 0,
214 4, 2, 12288, 0, 12286, 0, 4, 3, 12286, 12287,
215 4, 12288, 3, 2, 12283, 1, 1, 1, 3, 12286,
216 4, 0, 12288, 12285, 12287, 0, 0, 12286, 4, 0,
217 12286, 2, 12288, 12288, 12285, 12283, 5, 3, 12286, 12288,
218 4, 1, 12283, 0, 12288, 0, 12287, 12287, 0, 3,
219 12287, 12287, 2, 2, 3, 0, 1, 4, 12288, 3,
220 3, 0, 12284, 12285, 4, 12288, 1, 12287, 0, 1,
221 12283, 1, 12284, 12287, 12286, 12285, 0, 0, 3, 12285,
222 3, 1, 12288, 12287, 12284, 12282, 5, 3, 3, 2,
223 12285, 4, 12288, 0, 3, 12288, 4, 0, 12283, 12288,
224 2, 12285, 12288, 12282, 0, 2, 12285, 3, 1, 12284,
225 1, 5, 7, 12286, 5, 12285, 1, 2, 0, 4,
226 12283, 12287, 12286, 2, 12280, 12287, 12288, 2, 12285, 12286,
227 2, 1, 2, 1, 2, 2, 3, 3, 0, 0,
228 4, 2, 12288, 12286, 4, 0, 1, 12288, 2, 12287,
229 12288, 12288, 1, 3, 12283, 12288, 1, 12287, 1, 1,
230 3, 12288, 12288, 1, 2, 1, 1, 12283, 7, 12286,
231 12288, 1, 12288, 12287, 12284, 7, 2, 12285, 12286, 0,
232 0, 0, 2, 4, 12288, 0, 12284, 12285, 12286, 2,
233 12284, 2, 4, 6, 3, 12287, 12288, 12285, 1, 2,
234 12286, 0, 0, 12287, 12288, 0, 12286, 2, 1, 1,
235 1, 3, 1, 12285, 4, 0, 12287, 12288, 12287, 0,
236 12288, 12287, 12288, 12287, 12288, 12288, 0, 12287, 12284, 0,
237 12288, 12285, 3, 2, 4, 2, 12284, 3, 1, 3,
238 4, 12288, 12285, 12284, 12287, 1, 4, 0, 2, 12288,
239 4, 12288, 12287, 3, 1, 0, 0, 12284, 12287, 2,
240 4, 12287, 2, 12288, 0, 2, 2, 3, 12287, 12286,
241 8, 12286, 12285, 0, 12285, 2, 3, 5, 12287, 12288,
242 6, 12288, 12284, 0, 0, 3, 1, 2, 12284, 2,
243 1, 3, 2, 0, 0, 12288, 12287, 12288, 1, 12288,
244 4, 3, 12284, 1, 3, 12288, 12283, 12288, 1, 1,
245 2, 1, 1, 3, 1, 12288, 0, 12288, 2, 0,
246 0, 12284, 12283, 3, 12288, 0, 2, 12287, 0, 0,
247 12286, 12286, 0, 0, 2, 4, 12288, 1, 2, 3,
248 2, 12286, 12286, 1, 2, 4, 12288, 12288, 12284, 12287,
249 6, 2, 12288, 12286, 0, 0, 3, 12286, 12288, 12287,
250 12286, 12287, 3, 1, 12286, 0, 4, 3, 12286, 5,
251 2, 1, 12287, 12286, 4, 12287, 0, 5, 12288, 0,
252 12288, 2, 2, 1, 1, 0, 0, 12288, 12288, 12288,
253 0, 0, 12288, 12287, 5, 1, 12288, 1, 10, 1,
254 0, 0, 2, 2, 2, 0, 12288, 4, 2, 12283,
255 3, 1, 1, 12285, 2, 12285, 5, 7, 5, 12288,
256 0, 12287, 5, 1, 12288, 12286, 12287, 0, 0, 0,
257 12287, 1, 3, 12288 }
258 },
259 { 0x01, 0x00, /* polynomial s' */
260 { 0x3a, 0xeb, 0x52, 0x24, 0xec, 0xf8, 0x49, 0x92, 0x9b, 0x9d,
261 0x82, 0x8d, 0xb1, 0xce, 0xd4, 0xdd, 0x83, 0x20, 0x25, 0xe8,
262 0x01, 0x8b, 0x81, 0x60, 0xb8, 0x22, 0x84, 0xf3, 0xc9, 0x49,
263 0xaa, 0x5a, 0x8e, 0xca, 0x00, 0xbb, 0xb4, 0xa7, 0x3b, 0xda,
264 0xd1, 0x92, 0xb5, 0xc4, 0x2f, 0x73, 0xf2, 0xfd, 0x4e, 0x27,
265 0x36, 0x44, 0xc8, 0xb3, 0x61, 0x25, 0xa6, 0x4a, 0xdd, 0xeb,
266 0x00, 0x6c, 0x13, 0xa0 },
267 { 5, 4, 4, 12288, 12286, 1, 12287, 12288, 2, 12288,
268 12288, 12287, 2, 2, 12284, 12288, 12288, 3, 2, 3,
269 12287, 2, 2, 0, 0, 2, 5, 12285, 5, 12287,
270 2, 12282, 12286, 2, 1, 2, 1, 1, 12288, 12285,
271 12287, 12286, 2, 0, 0, 12285, 0, 0, 12287, 12286,
272 12285, 12286, 2, 12288, 12288, 0, 1, 2, 12286, 2,
273 1, 0, 0, 2, 1, 12288, 1, 12287, 1, 0,
274 0, 2, 12285, 2, 2, 12288, 12286, 3, 12287, 0,
275 1, 1, 0, 2, 12287, 2, 1, 2, 3, 0,
276 0, 1, 12288, 12288, 2, 12287, 12286, 12286, 6, 12288,
277 0, 0, 4, 0, 12286, 0, 4, 12288, 12288, 5,
278 12287, 12288, 12285, 2, 12285, 12288, 1, 0, 2, 12288,
279 12286, 1, 3, 12285, 2, 2, 1, 1, 12288, 12288,
280 12287, 1, 12288, 3, 0, 12285, 4, 12285, 12287, 2,
281 2, 12287, 12287, 12286, 12288, 12284, 2, 12286, 4, 1,
282 0, 12286, 12284, 3, 12286, 3, 12286, 3, 4, 1,
283 12288, 12282, 2, 2, 12284, 0, 12286, 12283, 3, 0,
284 4, 2, 4, 2, 12285, 10, 12288, 8, 3, 2,
285 2, 0, 1, 0, 0, 12286, 2, 12284, 4, 1,
286 12287, 12287, 1, 1, 12286, 1, 0, 12285, 12288, 12286,
287 12287, 2, 1, 12284, 12288, 12285, 12285, 3, 0, 1,
288 4, 4, 1, 0, 2, 1, 12288, 1, 12287, 0,
289 12286, 4, 2, 3, 3, 12285, 12288, 12288, 5, 2,
290 0, 4, 3, 12287, 12287, 5, 2, 3, 12284, 0,
291 8, 1, 1, 0, 5, 12288, 12288, 12288, 12286, 6,
292 3, 12288, 12286, 12287, 4, 12288, 2, 12288, 12284, 12287,
293 4, 12288, 0, 0, 3, 0, 4, 4, 12287, 0,
294 3, 0, 12285, 12287, 12288, 12288, 0, 0, 12287, 12288,
295 12286, 0, 0, 12285, 12288, 4, 12287, 1, 2, 12288,
296 12285, 5, 4, 12283, 2, 0, 12288, 2, 0, 0,
297 12286, 12284, 3, 3, 3, 12287, 1, 1, 0, 1,
298 3, 12288, 4, 4, 0, 2, 0, 1, 12286, 12284,
299 2, 2, 12287, 3, 2, 12288, 3, 12286, 2, 12286,
300 12288, 4, 3, 12288, 2, 12288, 2, 1, 12288, 12288,
301 7, 12288, 12288, 0, 12288, 1, 12284, 12288, 12288, 12287,
302 12287, 1, 12285, 12287, 12287, 1, 0, 2, 12286, 3,
303 12288, 12288, 12287, 3, 5, 0, 0, 12287, 2, 12287,
304 12288, 8, 12287, 1, 2, 12288, 12284, 3, 0, 12287,
305 12284, 3, 0, 2, 1, 3, 4, 12287, 12286, 12288,
306 12286, 0, 0, 12287, 12285, 0, 12286, 2, 1, 12287,
307 12288, 5, 12287, 12287, 12286, 2, 12283, 0, 0, 12286,
308 2, 12284, 5, 0, 1, 12287, 0, 3, 1, 12285,
309 12288, 0, 3, 12287, 2, 12286, 0, 1, 12288, 1,
310 12284, 12281, 12284, 12288, 12285, 2, 5, 4, 12286, 0,
311 12287, 12288, 12286, 12285, 3, 12282, 1, 12287, 2, 0,
312 6, 12288, 4, 12286, 3, 12288, 12286, 12284, 3, 1,
313 6, 3, 2, 1, 2, 1, 1, 12288, 12287, 1,
314 3, 3, 1, 0, 0, 12288, 3, 12284, 12285, 12284,
315 1, 3, 12286, 0, 1, 12285, 12287, 1, 12285, 2,
316 0, 1, 12287, 1, 4, 3, 1, 12287, 0, 5,
317 1, 12288, 2, 1, 1, 4, 3, 12286, 3, 3,
318 2, 12287, 3, 12286, 0, 12288, 12285, 2, 3, 12286,
319 0, 12287, 5, 4, 1, 1, 12287, 12288, 2, 0,
320 0, 0, 2, 0, 12286, 4, 12288, 12288, 12285, 12286,
321 2, 12288, 12288, 0, 12288, 12286, 12284, 12287, 1, 5,
322 0, 12285, 12287, 2, 4, 3, 12285, 12287, 12288, 0,
323 12288, 12287, 12286, 2, 12288, 12286, 12284, 1, 2, 12287,
324 4, 1, 4, 4, 12284, 2, 0, 12288, 3, 1,
325 0, 4, 1, 6, 0, 12286, 12288, 12287, 12287, 0,
326 12284, 12285, 2, 12286, 1, 0, 3, 12288, 1, 2,
327 12284, 12286, 12285, 12283, 12285, 0, 12285, 2, 0, 2,
328 1, 3, 1, 12286, 12288, 1, 4, 0, 0, 12287,
329 12287, 12286, 0, 1, 12286, 0, 2, 12288, 2, 12287,
330 0, 0, 12286, 12287, 4, 6, 12286, 0, 12288, 0,
331 0, 12287, 2, 3, 4, 1, 3, 12286, 4, 0,
332 12288, 12286, 12287, 12287, 12288, 4, 12285, 1, 12286, 12286,
333 2, 12288, 0, 0, 1, 5, 12285, 1, 12281, 3,
334 12281, 2, 3, 0, 12284, 12288, 5, 0, 0, 12288,
335 0, 0, 12288, 12286, 3, 12287, 0, 2, 12288, 0,
336 3, 12288, 12286, 0, 12286, 12287, 12284, 0, 12286, 1,
337 12287, 12282, 12287, 12288, 0, 5, 12288, 2, 1, 12288,
338 1, 12285, 5, 2, 12286, 12285, 12287, 0, 2, 12288,
339 1, 12288, 1, 12286, 0, 2, 12287, 12287, 6, 12286,
340 12288, 0, 12286, 4, 6, 12287, 12287, 2, 2, 12285,
341 1, 12288, 12285, 12286, 5, 12288, 1, 2, 1, 7,
342 12286, 5, 12288, 12287, 12286, 12284, 1, 2, 12287, 4,
343 1, 1, 0, 1, 2, 12285, 2, 12288, 12284, 1,
344 1, 12287, 12286, 12285, 12287, 1, 12287, 3, 1, 12286,
345 0, 12286, 3, 3, 12288, 2, 12288, 5, 12288, 1,
346 2, 0, 12287, 1, 12287, 7, 2, 3, 0, 12287,
347 2, 12284, 12284, 12281, 12286, 12285, 12287, 12287, 0, 12288,
348 3, 4, 3, 2, 3, 1, 12288, 12286, 0, 12288,
349 12286, 1, 12286, 6, 12287, 1, 6, 5, 3, 1,
350 12286, 2, 1, 3, 1, 12286, 12285, 3, 2, 0,
351 0, 12284, 1, 1, 3, 3, 1, 1, 12288, 0,
352 12284, 1, 12288, 0, 0, 12287, 0, 4, 12285, 0,
353 4, 12283, 1, 1, 0, 12285, 0, 12286, 0, 0,
354 1, 0, 12286, 0, 12288, 3, 4, 0, 2, 1,
355 12287, 2, 12288, 1, 0, 12288, 0, 12288, 6, 12288,
356 12287, 12286, 3, 12284, 0, 12288, 12284, 12286, 12287, 12288,
357 12288, 12288, 4, 0, 2, 6, 12286, 1, 4, 12288,
358 2, 1, 0, 5, 2, 1, 12285, 0, 0, 12285,
359 4, 12286, 5, 1, 3, 2, 12287, 2, 0, 2,
360 7, 12283, 12288, 12288, 3, 0, 3, 12288, 3, 12286,
361 12288, 12287, 12288, 3, 0, 2, 4, 1, 12284, 2,
362 12288, 12286, 12287, 1, 1, 12288, 0, 12288, 12283, 6,
363 2, 1, 12288, 3, 12287, 12288, 1, 1, 12285, 0,
364 12286, 12287, 12288, 1, 2, 12287, 0, 4, 0, 12286,
365 2, 1, 12288, 12285, 12287, 0, 2, 12287, 6, 2,
366 0, 12287, 12288, 2, 12288, 12284, 12288, 12285, 4, 1,
367 12288, 12284, 12287, 4, 12284, 1, 3, 12284, 12282, 0,
368 12286, 12287, 2, 12286, 3, 4, 2, 12288, 3, 3,
369 1, 3, 12287, 12283 }
370 },
371 { 0x01, 0x01, /* polynomial e' */
372 { 0x58, 0xd8, 0x6a, 0xcd, 0xe2, 0x79, 0x61, 0x98, 0xfd, 0xea,
373 0xcf, 0x2a, 0xc0, 0xfd, 0xf0, 0x72, 0x86, 0x32, 0xdc, 0xe9,
374 0xc6, 0x45, 0x81, 0x80, 0x67, 0x06, 0x72, 0x28, 0xa6, 0xfe,
375 0x41, 0x2b, 0x78, 0x88, 0x58, 0x6d, 0x58, 0x47, 0x3e, 0xb7,
376 0x46, 0x60, 0xd8, 0x2f, 0xa0, 0x83, 0xe4, 0xbc, 0x81, 0xdd,
377 0xc6, 0x29, 0x8b, 0xee, 0xf9, 0xec, 0x90, 0x39, 0x9d, 0x46,
378 0xbf, 0x2d, 0x7c, 0xdf },
379 { 12287, 3, 3, 1, 12285, 4, 1, 5, 12287, 12285,
380 12285, 12285, 1, 12288, 12287, 12288, 2, 3, 12283, 12288,
381 12285, 0, 0, 12286, 12287, 12288, 12288, 12288, 12288, 1,
382 12288, 2, 2, 5, 5, 0, 12287, 12286, 3, 3,
383 2, 2, 1, 0, 2, 12287, 12285, 3, 1, 3,
384 5, 2, 12287, 12287, 2, 0, 4, 2, 0, 0,
385 1, 5, 12288, 6, 4, 12287, 1, 0, 12283, 0,
386 1, 12286, 2, 0, 2, 1, 12284, 12282, 0, 6,
387 1, 2, 5, 12288, 6, 12288, 12284, 2, 1, 2,
388 12288, 12283, 12288, 3, 12288, 12288, 2, 12286, 12283, 1,
389 12285, 0, 0, 12286, 12288, 12286, 12288, 12286, 4, 0,
390 1, 12285, 3, 1, 2, 12285, 12287, 12284, 12287, 12285,
391 12286, 1, 12288, 3, 5, 5, 3, 12285, 12286, 12288,
392 0, 1, 12287, 12284, 2, 4, 12288, 12287, 0, 12288,
393 12288, 12285, 12288, 12284, 3, 0, 2, 0, 2, 0,
394 1, 1, 1, 12287, 1, 12284, 12285, 0, 12284, 1,
395 12284, 2, 12288, 5, 4, 1, 1, 12284, 1, 3,
396 2, 6, 3, 2, 3, 12284, 0, 0, 4, 2,
397 6, 2, 2, 2, 6, 12288, 0, 1, 12286, 1,
398 5, 1, 12283, 2, 0, 12284, 1, 12286, 4, 1,
399 2, 4, 6, 12288, 12288, 12284, 1, 0, 3, 12286,
400 1, 0, 3, 12288, 12287, 2, 2, 0, 12285, 12286,
401 0, 12288, 4, 2, 12282, 12287, 1, 12288, 12287, 12286,
402 12284, 1, 4, 2, 7, 12288, 12283, 12288, 5, 12288,
403 12288, 12287, 3, 2, 12287, 5, 12287, 12286, 12288, 12287,
404 0, 12282, 12288, 12288, 0, 3, 12287, 2, 12287, 12284,
405 6, 12285, 2, 3, 3, 12284, 2, 4, 12286, 5,
406 0, 2, 12287, 3, 0, 12284, 12286, 0, 2, 12286,
407 12287, 3, 1, 4, 1, 12286, 12288, 1, 2, 0,
408 12285, 12287, 2, 0, 0, 0, 3, 12286, 12287, 2,
409 0, 0, 0, 12286, 4, 1, 12287, 0, 0, 2,
410 5, 0, 12284, 1, 1, 12288, 2, 12286, 12288, 2,
411 2, 12282, 1, 12286, 4, 12286, 3, 12287, 12287, 12286,
412 5, 5, 0, 12288, 3, 12285, 1, 12287, 7, 12286,
413 2, 12287, 1, 12285, 2, 12287, 12288, 0, 4, 12281,
414 0, 12286, 3, 1, 12285, 2, 2, 12285, 5, 0,
415 12285, 2, 12288, 1, 3, 12287, 1, 12288, 1, 5,
416 12287, 1, 0, 3, 2, 12286, 12286, 12288, 3, 0,
417 12287, 12288, 0, 12286, 12285, 0, 12286, 12288, 3, 12287,
418 12288, 2, 6, 0, 2, 12285, 1, 1, 7, 7,
419 12284, 12284, 5, 0, 12288, 12288, 4, 3, 1, 2,
420 12287, 0, 12288, 12284, 2, 5, 1, 2, 0, 12288,
421 1, 12284, 2, 3, 0, 12287, 12285, 2, 12288, 12288,
422 7, 1, 12287, 1, 12286, 2, 3, 4, 12288, 12288,
423 12286, 12286, 3, 12288, 1, 12286, 12286, 0, 12283, 12288,
424 2, 0, 7, 2, 12287, 0, 0, 12286, 4, 1,
425 12288, 12288, 1, 2, 12287, 12282, 3, 5, 0, 12288,
426 12288, 12286, 12286, 12286, 4, 2, 0, 1, 12284, 3,
427 12283, 5, 12287, 2, 2, 12288, 1, 12284, 1, 0,
428 1, 3, 12288, 2, 12287, 1, 12286, 12288, 0, 12287,
429 12288, 2, 2, 12286, 0, 12287, 12288, 12284, 0, 2,
430 2, 2, 1, 3, 12285, 12285, 1, 12285, 2, 6,
431 2, 0, 12288, 0, 0, 3, 2, 12287, 1, 12286,
432 0, 12287, 0, 1, 12285, 12287, 6, 12288, 2, 0,
433 12286, 2, 4, 12288, 2, 5, 12285, 12286, 0, 12284,
434 12288, 3, 3, 3, 12287, 4, 2, 0, 12283, 2,
435 12287, 0, 1, 12287, 2, 12288, 12287, 3, 2, 7,
436 7, 1, 12287, 12288, 2, 6, 1, 3, 2, 0,
437 2, 2, 3, 12288, 3, 4, 2, 0, 5, 12285,
438 3, 12285, 3, 12285, 1, 1, 12287, 12285, 2, 12285,
439 5, 0, 7, 2, 12284, 0, 12285, 7, 1, 12288,
440 12288, 0, 12288, 12287, 5, 0, 2, 0, 2, 12286,
441 1, 12286, 0, 12286, 12285, 4, 12286, 2, 12288, 12287,
442 12287, 1, 12286, 12287, 12287, 12286, 12287, 12288, 6, 5,
443 2, 5, 12283, 12286, 12286, 12288, 1, 0, 3, 12286,
444 5, 0, 12287, 12288, 12288, 12287, 12286, 2, 1, 0,
445 1, 2, 3, 1, 12286, 2, 1, 6, 12288, 1,
446 12286, 1, 12288, 0, 1, 0, 12283, 0, 2, 12288,
447 3, 1, 12287, 12288, 4, 0, 3, 12286, 0, 1,
448 12283, 4, 1, 4, 12287, 5, 0, 12287, 12288, 3,
449 3, 12282, 1, 4, 2, 3, 0, 2, 6, 12282,
450 12285, 12288, 12287, 12288, 2, 12285, 1, 0, 12287, 12288,
451 12286, 0, 0, 4, 12288, 12287, 1, 0, 2, 5,
452 2, 12287, 1, 7, 12284, 0, 12287, 12286, 2, 1,
453 12287, 0, 1, 12284, 12287, 12287, 12285, 12285, 3, 12282,
454 12286, 1, 1, 12288, 12282, 12287, 1, 1, 2, 2,
455 3, 1, 12287, 5, 12282, 0, 0, 12287, 1, 3,
456 12288, 3, 12285, 12286, 2, 0, 12288, 12288, 5, 12285,
457 4, 12288, 12287, 0, 1, 4, 1, 2, 12288, 0,
458 2, 1, 12288, 4, 6, 12288, 1, 12287, 4, 1,
459 12285, 12288, 3, 0, 12288, 12285, 2, 0, 12286, 2,
460 1, 12288, 1, 12288, 12284, 3, 0, 2, 2, 12288,
461 12287, 12286, 4, 12288, 2, 0, 0, 3, 4, 0,
462 12288, 12282, 6, 2, 12283, 12287, 2, 6, 1, 2,
463 12288, 2, 12283, 3, 12287, 3, 4, 0, 0, 12285,
464 0, 12288, 12287, 12284, 12286, 3, 1, 12286, 2, 0,
465 12287, 12286, 12286, 12288, 5, 2, 12288, 12286, 0, 12287,
466 0, 3, 2, 12287, 12286, 0, 1, 12287, 2, 0,
467 12286, 5, 12285, 12288, 12288, 12288, 12286, 4, 1, 12285,
468 12284, 12288, 12286, 1, 1, 12287, 2, 12286, 3, 2,
469 12283, 12283, 4, 2, 12283, 5, 0, 1, 0, 5,
470 12287, 1, 1, 0, 3, 10, 12287, 3, 12288, 12288,
471 12287, 2, 2, 0, 4, 12288, 12283, 12288, 1, 12287,
472 3, 0, 0, 1, 12288, 12284, 0, 12286, 12287, 0,
473 12287, 2, 1, 7, 12288, 12287, 0, 4, 12287, 12286,
474 3, 4, 12287, 12288, 12285, 12287, 12288, 12285, 12286, 7,
475 1, 1, 12288, 3, 12287, 3, 1, 4, 2, 5,
476 12282, 3, 0, 12286, 12288, 0, 12285, 0, 2, 3,
477 0, 12286, 3, 2, 12285, 0, 0, 12287, 1, 0,
478 0, 6, 2, 12287, 12284, 7, 5, 0, 1, 6,
479 2, 4, 1, 12286, 12288, 2, 12287, 3, 4, 12283,
480 0, 12288, 2, 2, 12286, 0, 2, 2, 12288, 12285,
481 12287, 12285, 12288, 0 }
482 },
483 { 0x01, 0x02, /* polynomial e'' */
484 { 0x20, 0x37, 0x77, 0x8a, 0x9c, 0x19, 0xde, 0xf0, 0x65, 0x9e,
485 0x0f, 0xa5, 0xfc, 0x0e, 0x78, 0xfe, 0x55, 0x89, 0xc9, 0x88,
486 0x41, 0xa2, 0x5a, 0x1e, 0xa4, 0x66, 0xcd, 0x3a, 0x29, 0x42,
487 0xd1, 0x25, 0xf2, 0x84, 0xd7, 0xee, 0xd5, 0x53, 0x86, 0x5b,
488 0xa3, 0x93, 0x4e, 0xee, 0xc7, 0x5b, 0xe5, 0x52, 0x68, 0x19,
489 0xdf, 0x63, 0xfb, 0x91, 0x3d, 0xe9, 0x5d, 0xd6, 0xeb, 0x81,
490 0x3d, 0xac, 0xf1, 0xad },
491 { 12286, 12286, 1, 12287, 1, 12286, 12287, 12287, 12284, 1,
492 12287, 2, 12284, 0, 2, 12288, 0, 1, 0, 12285,
493 12288, 4, 2, 12287, 12282, 12288, 12285, 12288, 2, 12288,
494 6, 7, 12286, 12286, 1, 4, 12287, 12287, 3, 1,
495 3, 3, 2, 12285, 0, 1, 12288, 1, 1, 12287,
496 0, 0, 1, 0, 12287, 12283, 12283, 12288, 12287, 0,
497 0, 2, 12286, 3, 3, 0, 12286, 12282, 3, 6,
498 3, 3, 12285, 1, 1, 12288, 1, 0, 12288, 0,
499 12287, 4, 1, 0, 12285, 12288, 1, 1, 1, 3,
500 12286, 0, 12288, 0, 12287, 12287, 3, 5, 1, 12287,
501 12287, 0, 0, 0, 12283, 0, 0, 12288, 0, 12287,
502 12286, 12284, 12286, 0, 12286, 3, 5, 12287, 0, 12287,
503 1, 3, 2, 6, 1, 12287, 1, 1, 12285, 4,
504 12282, 12288, 12288, 3, 2, 12287, 3, 3, 12288, 12286,
505 2, 5, 12288, 12287, 12288, 3, 0, 12283, 3, 3,
506 1, 0, 12288, 2, 2, 12287, 12286, 4, 12287, 12288,
507 0, 0, 12286, 1, 4, 4, 12286, 12287, 4, 12288,
508 2, 1, 1, 12288, 12287, 3, 12287, 12286, 12285, 12288,
509 4, 1, 0, 12287, 3, 12286, 12287, 4, 0, 12287,
510 12286, 12287, 3, 1, 1, 12285, 12287, 0, 12285, 2,
511 5, 2, 12285, 3, 2, 12285, 12287, 2, 0, 12288,
512 2, 5, 2, 12283, 1, 1, 0, 12286, 12288, 3,
513 1, 12286, 12283, 0, 1, 2, 2, 1, 12287, 12287,
514 4, 4, 1, 0, 0, 12288, 12287, 12284, 12284, 7,
515 0, 12288, 5, 4, 12288, 12288, 1, 0, 1, 1,
516 2, 12288, 12288, 5, 1, 0, 12287, 3, 3, 0,
517 1, 12288, 12288, 3, 12285, 12288, 3, 5, 4, 1,
518 12285, 12285, 12288, 12285, 12288, 12285, 4, 1, 3, 12285,
519 4, 0, 12288, 12286, 5, 12287, 12285, 12288, 4, 12288,
520 0, 12287, 12286, 0, 12286, 12283, 0, 12287, 12284, 1,
521 12288, 12288, 3, 12286, 1, 2, 12286, 3, 1, 12285,
522 12286, 12285, 0, 12285, 12288, 0, 2, 12283, 0, 1,
523 2, 1, 2, 3, 3, 12285, 0, 0, 0, 12288,
524 12283, 4, 12286, 2, 1, 3, 3, 12284, 2, 4,
525 3, 12286, 12282, 12286, 0, 12286, 12287, 3, 12288, 12288,
526 2, 12287, 12286, 3, 0, 12286, 1, 1, 0, 12287,
527 2, 0, 0, 1, 12286, 1, 0, 12283, 0, 12288,
528 2, 5, 12288, 12287, 2, 1, 12288, 2, 2, 5,
529 2, 12286, 12286, 2, 12284, 12287, 0, 12284, 0, 12284,
530 12286, 12286, 12288, 12287, 12287, 2, 1, 12287, 12287, 1,
531 5, 0, 0, 12288, 2, 12285, 6, 2, 12288, 12288,
532 12286, 2, 12285, 0, 0, 0, 12288, 3, 12286, 1,
533 1, 0, 3, 0, 12286, 12288, 12287, 3, 2, 12287,
534 12288, 1, 12288, 12282, 2, 0, 12288, 12286, 12285, 12281,
535 4, 1, 7, 12283, 12287, 12288, 1, 6, 0, 12288,
536 5, 1, 1, 12286, 12286, 0, 12287, 12285, 12287, 1,
537 12288, 12286, 12286, 12288, 2, 12287, 12287, 12288, 12286, 12288,
538 12282, 12284, 12286, 0, 12285, 12285, 3, 12288, 12287, 12288,
539 2, 0, 2, 0, 12288, 12286, 3, 12288, 12286, 12287,
540 1, 1, 1, 0, 5, 5, 12285, 12288, 3, 12286,
541 1, 2, 12285, 1, 4, 12288, 1, 4, 1, 3,
542 4, 12286, 0, 7, 2, 12288, 2, 12287, 0, 2,
543 12283, 12286, 0, 12288, 12286, 4, 1, 12284, 7, 12285,
544 0, 12284, 12287, 0, 0, 3, 4, 12284, 0, 1,
545 0, 1, 12285, 1, 12286, 12284, 12287, 0, 7, 1,
546 4, 12282, 12288, 0, 2, 12285, 12288, 12287, 12287, 12283,
547 0, 1, 3, 12285, 12286, 3, 12288, 12288, 12284, 12286,
548 12288, 1, 0, 2, 12287, 0, 12286, 4, 12288, 0,
549 12284, 0, 0, 2, 12286, 0, 0, 12286, 12287, 1,
550 12288, 0, 12284, 1, 12288, 12288, 1, 1, 12282, 12284,
551 12288, 12285, 12285, 12288, 1, 12286, 2, 0, 0, 12284,
552 2, 12288, 0, 0, 12285, 0, 3, 0, 0, 12285,
553 12286, 5, 3, 12287, 5, 2, 12287, 0, 1, 12286,
554 12287, 1, 12286, 1, 12288, 0, 0, 12282, 5, 12282,
555 12287, 12288, 12287, 1, 0, 3, 4, 6, 1, 1,
556 12287, 12284, 12286, 12287, 12286, 2, 1, 12288, 3, 0,
557 3, 0, 12286, 1, 0, 12288, 1, 12284, 4, 0,
558 4, 12288, 1, 4, 1, 12286, 4, 0, 2, 1,
559 1, 4, 12287, 2, 1, 12288, 4, 3, 2, 12287,
560 0, 1, 12287, 1, 12285, 12286, 2, 2, 0, 12286,
561 12287, 0, 12288, 12285, 5, 12288, 0, 0, 12288, 3,
562 12288, 0, 4, 0, 12288, 12286, 12287, 0, 0, 2,
563 12283, 0, 12281, 1, 1, 3, 4, 2, 12284, 5,
564 12288, 2, 3, 4, 12287, 3, 12288, 12287, 12288, 2,
565 12286, 2, 0, 12286, 12286, 5, 12288, 2, 12288, 7,
566 12286, 12286, 4, 12288, 12288, 12288, 5, 12287, 7, 12286,
567 12282, 2, 12284, 0, 12288, 0, 2, 12283, 2, 5,
568 4, 1, 12288, 12283, 5, 12288, 12288, 0, 0, 0,
569 6, 1, 12286, 6, 4, 12287, 2, 12288, 12287, 12286,
570 4, 5, 0, 1, 2, 1, 4, 12286, 1, 2,
571 1, 1, 0, 12288, 12282, 1, 1, 3, 12284, 12288,
572 0, 12287, 1, 12286, 12288, 6, 1, 5, 12287, 12285,
573 2, 12288, 12288, 12284, 0, 12287, 2, 3, 5, 1,
574 12286, 1, 12287, 0, 12284, 1, 5, 12283, 1, 1,
575 12287, 12283, 12288, 0, 12287, 3, 0, 12288, 12286, 12287,
576 8, 0, 0, 12288, 1, 3, 2, 3, 12287, 9,
577 2, 3, 4, 12288, 3, 0, 12288, 12283, 0, 0,
578 2, 4, 12287, 2, 12287, 12286, 12287, 2, 12287, 2,
579 3, 1, 3, 1, 0, 1, 1, 5, 3, 12285,
580 1, 12281, 12287, 12286, 1, 4, 12287, 12286, 12285, 4,
581 2, 0, 12288, 12288, 12286, 12287, 12288, 1, 3, 4,
582 0, 1, 12285, 4, 3, 12284, 1, 12288, 12285, 12288,
583 0, 12281, 12288, 12285, 12285, 1, 12284, 12286, 12287, 0,
584 0, 12287, 1, 12282, 4, 4, 12288, 1, 4, 12286,
585 5, 4, 1, 5, 3, 1, 0, 6, 12288, 0,
586 12288, 2, 12286, 12287, 6, 0, 12288, 0, 12287, 1,
587 4, 0, 12282, 4, 1, 12286, 1, 12282, 3, 12285,
588 12283, 12286, 12288, 4, 12284, 12286, 12286, 0, 12286, 0,
589 0, 1, 12286, 1, 1, 4, 12284, 0, 3, 2,
590 12288, 1, 2, 12287, 2, 1, 12288, 0, 1, 2,
591 12286, 0, 6, 12285, 0, 1, 4, 0, 0, 3,
592 2, 12287, 12285, 7, 1, 3, 1, 0, 12286, 12288,
593 0, 12287, 1, 12286 }
594 }
595 };
596
597 START_TEST(test_newhope_noise_uniform)
598 {
599 newhope_noise_t *noise;
600 uint8_t seed_buf[seed_len], *uniform;
601 chunk_t seed = { seed_buf, seed_len };
602
603 memset(seed_buf, 0x00, seed_len - 1);
604 seed_buf[seed_len - 1] = noises[_i].key;
605
606 noise = newhope_noise_create(seed);
607 ck_assert(noise != NULL);
608 uniform = noise->get_uniform_bytes(noise, noises[_i].nonce, 64);
609 ck_assert(uniform != NULL);
610 ck_assert(memeq(uniform, noises[_i].uniform, 64));
611 free(uniform);
612 noise->destroy(noise);
613 }
614 END_TEST
615
616 START_TEST(test_newhope_noise_poly)
617 {
618 newhope_noise_t *noise;
619 uint8_t seed_buf[seed_len];
620 uint32_t *poly;
621 int i;
622 chunk_t seed = { seed_buf, seed_len };
623
624 memset(seed_buf, 0x00, seed_len - 1);
625 seed_buf[seed_len - 1] = noises[_i].key;
626
627 noise = newhope_noise_create(seed);
628 ck_assert(noise != NULL);
629 poly = noise->get_binomial_words(noise, noises[_i].nonce, n, q);
630 ck_assert(poly != NULL);
631 for (i = 0; i < n; i++)
632 {
633 ck_assert(poly[i] == noises[_i].poly[i]);
634 }
635 free(poly);
636 noise->destroy(noise);
637 }
638 END_TEST
639
640 static size_t seed_lengths[] = { 0, 1, 31, 33 };
641
642 START_TEST(test_newhope_noise_fail)
643 {
644 newhope_noise_t *noise;
645 chunk_t seed;
646
647 seed = chunk_alloc(seed_lengths[_i]);
648 memset(seed.ptr, 0x00, seed.len);
649
650 noise = newhope_noise_create(seed);
651 ck_assert(noise == NULL);
652 chunk_free(&seed);
653 }
654 END_TEST
655
656 Suite *newhope_noise_suite_create()
657 {
658 Suite *s;
659 TCase *tc;
660
661 s = suite_create("newhope_noise");
662
663 tc = tcase_create("noise_uniform");
664 tcase_add_loop_test(tc, test_newhope_noise_uniform, 0, countof(noises));
665 suite_add_tcase(s, tc);
666
667 tc = tcase_create("noise_poly");
668 tcase_add_loop_test(tc, test_newhope_noise_poly, 0, countof(noises));
669 suite_add_tcase(s, tc);
670
671 tc = tcase_create("noise_fail");
672 tcase_add_loop_test(tc, test_newhope_noise_fail, 0, countof(seed_lengths));
673 suite_add_tcase(s, tc);
674
675 return s;
676 }