1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <stddef.h>
6 #include <stdint.h>
7 #include <stdio.h>
8 #include <string.h>
9
10 #include "crypto/p224.h"
11
12 #include "base/macros.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14
15 namespace crypto {
16
17 using p224::Point;
18
19 // kBasePointExternal is the P224 base point in external representation.
20 static const uint8_t kBasePointExternal[56] = {
21 0xb7, 0x0e, 0x0c, 0xbd, 0x6b, 0xb4, 0xbf, 0x7f, 0x32, 0x13, 0x90, 0xb9,
22 0x4a, 0x03, 0xc1, 0xd3, 0x56, 0xc2, 0x11, 0x22, 0x34, 0x32, 0x80, 0xd6,
23 0x11, 0x5c, 0x1d, 0x21, 0xbd, 0x37, 0x63, 0x88, 0xb5, 0xf7, 0x23, 0xfb,
24 0x4c, 0x22, 0xdf, 0xe6, 0xcd, 0x43, 0x75, 0xa0, 0x5a, 0x07, 0x47, 0x64,
25 0x44, 0xd5, 0x81, 0x99, 0x85, 0x00, 0x7e, 0x34,
26 };
27
28 // TestVector represents a test of scalar multiplication of the base point.
29 // |scalar| is a big-endian scalar and |affine| is the external representation
30 // of g*scalar.
31 struct TestVector {
32 uint8_t scalar[28];
33 uint8_t affine[28 * 2];
34 };
35
36 static const int kNumNISTTestVectors = 52;
37
38 // kNISTTestVectors are the NIST test vectors for P224.
39 static const TestVector kNISTTestVectors[kNumNISTTestVectors] = {
40 {
41 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
42 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
43 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
44 0x00, 0x00, 0x00, 0x01},
45 {0xb7, 0x0e, 0x0c, 0xbd, 0x6b, 0xb4, 0xbf, 0x7f,
46 0x32, 0x13, 0x90, 0xb9, 0x4a, 0x03, 0xc1, 0xd3,
47 0x56, 0xc2, 0x11, 0x22, 0x34, 0x32, 0x80, 0xd6,
48 0x11, 0x5c, 0x1d, 0x21, 0xbd, 0x37, 0x63, 0x88,
49 0xb5, 0xf7, 0x23, 0xfb, 0x4c, 0x22, 0xdf, 0xe6,
50 0xcd, 0x43, 0x75, 0xa0, 0x5a, 0x07, 0x47, 0x64,
51 0x44, 0xd5, 0x81, 0x99, 0x85, 0x00, 0x7e, 0x34
52 },
53 },
54 {
55 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
56 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
57 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
58 0x00, 0x00, 0x00, 0x02, },
59
60 {0x70, 0x6a, 0x46, 0xdc, 0x76, 0xdc, 0xb7, 0x67,
61 0x98, 0xe6, 0x0e, 0x6d, 0x89, 0x47, 0x47, 0x88,
62 0xd1, 0x6d, 0xc1, 0x80, 0x32, 0xd2, 0x68, 0xfd,
63 0x1a, 0x70, 0x4f, 0xa6, 0x1c, 0x2b, 0x76, 0xa7,
64 0xbc, 0x25, 0xe7, 0x70, 0x2a, 0x70, 0x4f, 0xa9,
65 0x86, 0x89, 0x28, 0x49, 0xfc, 0xa6, 0x29, 0x48,
66 0x7a, 0xcf, 0x37, 0x09, 0xd2, 0xe4, 0xe8, 0xbb,
67 },
68 },
69 {
70 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
71 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
72 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
73 0x00, 0x00, 0x00, 0x03, },
74 {0xdf, 0x1b, 0x1d, 0x66, 0xa5, 0x51, 0xd0, 0xd3,
75 0x1e, 0xff, 0x82, 0x25, 0x58, 0xb9, 0xd2, 0xcc,
76 0x75, 0xc2, 0x18, 0x02, 0x79, 0xfe, 0x0d, 0x08,
77 0xfd, 0x89, 0x6d, 0x04, 0xa3, 0xf7, 0xf0, 0x3c,
78 0xad, 0xd0, 0xbe, 0x44, 0x4c, 0x0a, 0xa5, 0x68,
79 0x30, 0x13, 0x0d, 0xdf, 0x77, 0xd3, 0x17, 0x34,
80 0x4e, 0x1a, 0xf3, 0x59, 0x19, 0x81, 0xa9, 0x25,
81 },
82 },
83 {
84 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
85 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
86 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
87 0x00, 0x00, 0x00, 0x04, },
88 {0xae, 0x99, 0xfe, 0xeb, 0xb5, 0xd2, 0x69, 0x45,
89 0xb5, 0x48, 0x92, 0x09, 0x2a, 0x8a, 0xee, 0x02,
90 0x91, 0x29, 0x30, 0xfa, 0x41, 0xcd, 0x11, 0x4e,
91 0x40, 0x44, 0x73, 0x01, 0x04, 0x82, 0x58, 0x0a,
92 0x0e, 0xc5, 0xbc, 0x47, 0xe8, 0x8b, 0xc8, 0xc3,
93 0x78, 0x63, 0x2c, 0xd1, 0x96, 0xcb, 0x3f, 0xa0,
94 0x58, 0xa7, 0x11, 0x4e, 0xb0, 0x30, 0x54, 0xc9,
95 },
96 },
97 {
98 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
99 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
100 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
101 0x00, 0x00, 0x00, 0x05, },
102 {0x31, 0xc4, 0x9a, 0xe7, 0x5b, 0xce, 0x78, 0x07,
103 0xcd, 0xff, 0x22, 0x05, 0x5d, 0x94, 0xee, 0x90,
104 0x21, 0xfe, 0xdb, 0xb5, 0xab, 0x51, 0xc5, 0x75,
105 0x26, 0xf0, 0x11, 0xaa, 0x27, 0xe8, 0xbf, 0xf1,
106 0x74, 0x56, 0x35, 0xec, 0x5b, 0xa0, 0xc9, 0xf1,
107 0xc2, 0xed, 0xe1, 0x54, 0x14, 0xc6, 0x50, 0x7d,
108 0x29, 0xff, 0xe3, 0x7e, 0x79, 0x0a, 0x07, 0x9b,
109 },
110 },
111 {
112 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
113 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
114 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
115 0x00, 0x00, 0x00, 0x06, },
116 {0x1f, 0x24, 0x83, 0xf8, 0x25, 0x72, 0x25, 0x1f,
117 0xca, 0x97, 0x5f, 0xea, 0x40, 0xdb, 0x82, 0x1d,
118 0xf8, 0xad, 0x82, 0xa3, 0xc0, 0x02, 0xee, 0x6c,
119 0x57, 0x11, 0x24, 0x08, 0x89, 0xfa, 0xf0, 0xcc,
120 0xb7, 0x50, 0xd9, 0x9b, 0x55, 0x3c, 0x57, 0x4f,
121 0xad, 0x7e, 0xcf, 0xb0, 0x43, 0x85, 0x86, 0xeb,
122 0x39, 0x52, 0xaf, 0x5b, 0x4b, 0x15, 0x3c, 0x7e,
123 },
124 },
125 {
126 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
127 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
128 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
129 0x00, 0x00, 0x00, 0x07, },
130 {0xdb, 0x2f, 0x6b, 0xe6, 0x30, 0xe2, 0x46, 0xa5,
131 0xcf, 0x7d, 0x99, 0xb8, 0x51, 0x94, 0xb1, 0x23,
132 0xd4, 0x87, 0xe2, 0xd4, 0x66, 0xb9, 0x4b, 0x24,
133 0xa0, 0x3c, 0x3e, 0x28, 0x0f, 0x3a, 0x30, 0x08,
134 0x54, 0x97, 0xf2, 0xf6, 0x11, 0xee, 0x25, 0x17,
135 0xb1, 0x63, 0xef, 0x8c, 0x53, 0xb7, 0x15, 0xd1,
136 0x8b, 0xb4, 0xe4, 0x80, 0x8d, 0x02, 0xb9, 0x63,
137 },
138 },
139 {
140 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
141 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
142 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
143 0x00, 0x00, 0x00, 0x08, },
144 {0x85, 0x8e, 0x6f, 0x9c, 0xc6, 0xc1, 0x2c, 0x31,
145 0xf5, 0xdf, 0x12, 0x4a, 0xa7, 0x77, 0x67, 0xb0,
146 0x5c, 0x8b, 0xc0, 0x21, 0xbd, 0x68, 0x3d, 0x2b,
147 0x55, 0x57, 0x15, 0x50, 0x04, 0x6d, 0xcd, 0x3e,
148 0xa5, 0xc4, 0x38, 0x98, 0xc5, 0xc5, 0xfc, 0x4f,
149 0xda, 0xc7, 0xdb, 0x39, 0xc2, 0xf0, 0x2e, 0xbe,
150 0xe4, 0xe3, 0x54, 0x1d, 0x1e, 0x78, 0x04, 0x7a,
151 },
152 },
153 {
154 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
155 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
156 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
157 0x00, 0x00, 0x00, 0x09, },
158 {0x2f, 0xdc, 0xcc, 0xfe, 0xe7, 0x20, 0xa7, 0x7e,
159 0xf6, 0xcb, 0x3b, 0xfb, 0xb4, 0x47, 0xf9, 0x38,
160 0x31, 0x17, 0xe3, 0xda, 0xa4, 0xa0, 0x7e, 0x36,
161 0xed, 0x15, 0xf7, 0x8d, 0x37, 0x17, 0x32, 0xe4,
162 0xf4, 0x1b, 0xf4, 0xf7, 0x88, 0x30, 0x35, 0xe6,
163 0xa7, 0x9f, 0xce, 0xdc, 0x0e, 0x19, 0x6e, 0xb0,
164 0x7b, 0x48, 0x17, 0x16, 0x97, 0x51, 0x74, 0x63,
165 },
166 },
167 {
168 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
169 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
170 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
171 0x00, 0x00, 0x00, 0x0a, },
172 {0xae, 0xa9, 0xe1, 0x7a, 0x30, 0x65, 0x17, 0xeb,
173 0x89, 0x15, 0x2a, 0xa7, 0x09, 0x6d, 0x2c, 0x38,
174 0x1e, 0xc8, 0x13, 0xc5, 0x1a, 0xa8, 0x80, 0xe7,
175 0xbe, 0xe2, 0xc0, 0xfd, 0x39, 0xbb, 0x30, 0xea,
176 0xb3, 0x37, 0xe0, 0xa5, 0x21, 0xb6, 0xcb, 0xa1,
177 0xab, 0xe4, 0xb2, 0xb3, 0xa3, 0xe5, 0x24, 0xc1,
178 0x4a, 0x3f, 0xe3, 0xeb, 0x11, 0x6b, 0x65, 0x5f,
179 },
180 },
181 {
182 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
183 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
184 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
185 0x00, 0x00, 0x00, 0x0b, },
186 {0xef, 0x53, 0xb6, 0x29, 0x4a, 0xca, 0x43, 0x1f,
187 0x0f, 0x3c, 0x22, 0xdc, 0x82, 0xeb, 0x90, 0x50,
188 0x32, 0x4f, 0x1d, 0x88, 0xd3, 0x77, 0xe7, 0x16,
189 0x44, 0x8e, 0x50, 0x7c, 0x20, 0xb5, 0x10, 0x00,
190 0x40, 0x92, 0xe9, 0x66, 0x36, 0xcf, 0xb7, 0xe3,
191 0x2e, 0xfd, 0xed, 0x82, 0x65, 0xc2, 0x66, 0xdf,
192 0xb7, 0x54, 0xfa, 0x6d, 0x64, 0x91, 0xa6, 0xda,
193 },
194 },
195 {
196 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
197 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
198 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
199 0x00, 0x00, 0x00, 0x0c, },
200 {0x6e, 0x31, 0xee, 0x1d, 0xc1, 0x37, 0xf8, 0x1b,
201 0x05, 0x67, 0x52, 0xe4, 0xde, 0xab, 0x14, 0x43,
202 0xa4, 0x81, 0x03, 0x3e, 0x9b, 0x4c, 0x93, 0xa3,
203 0x04, 0x4f, 0x4f, 0x7a, 0x20, 0x7d, 0xdd, 0xf0,
204 0x38, 0x5b, 0xfd, 0xea, 0xb6, 0xe9, 0xac, 0xda,
205 0x8d, 0xa0, 0x6b, 0x3b, 0xbe, 0xf2, 0x24, 0xa9,
206 0x3a, 0xb1, 0xe9, 0xe0, 0x36, 0x10, 0x9d, 0x13,
207 },
208 },
209 {
210 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
211 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
212 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
213 0x00, 0x00, 0x00, 0x0d, },
214 {0x34, 0xe8, 0xe1, 0x7a, 0x43, 0x0e, 0x43, 0x28,
215 0x97, 0x93, 0xc3, 0x83, 0xfa, 0xc9, 0x77, 0x42,
216 0x47, 0xb4, 0x0e, 0x9e, 0xbd, 0x33, 0x66, 0x98,
217 0x1f, 0xcf, 0xae, 0xca, 0x25, 0x28, 0x19, 0xf7,
218 0x1c, 0x7f, 0xb7, 0xfb, 0xcb, 0x15, 0x9b, 0xe3,
219 0x37, 0xd3, 0x7d, 0x33, 0x36, 0xd7, 0xfe, 0xb9,
220 0x63, 0x72, 0x4f, 0xdf, 0xb0, 0xec, 0xb7, 0x67,
221 },
222 },
223 {
224 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
225 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
226 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
227 0x00, 0x00, 0x00, 0x0e, },
228 {0xa5, 0x36, 0x40, 0xc8, 0x3d, 0xc2, 0x08, 0x60,
229 0x3d, 0xed, 0x83, 0xe4, 0xec, 0xf7, 0x58, 0xf2,
230 0x4c, 0x35, 0x7d, 0x7c, 0xf4, 0x80, 0x88, 0xb2,
231 0xce, 0x01, 0xe9, 0xfa, 0xd5, 0x81, 0x4c, 0xd7,
232 0x24, 0x19, 0x9c, 0x4a, 0x5b, 0x97, 0x4a, 0x43,
233 0x68, 0x5f, 0xbf, 0x5b, 0x8b, 0xac, 0x69, 0x45,
234 0x9c, 0x94, 0x69, 0xbc, 0x8f, 0x23, 0xcc, 0xaf,
235 },
236 },
237 {
238 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
239 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
240 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
241 0x00, 0x00, 0x00, 0x0f, },
242 {0xba, 0xa4, 0xd8, 0x63, 0x55, 0x11, 0xa7, 0xd2,
243 0x88, 0xae, 0xbe, 0xed, 0xd1, 0x2c, 0xe5, 0x29,
244 0xff, 0x10, 0x2c, 0x91, 0xf9, 0x7f, 0x86, 0x7e,
245 0x21, 0x91, 0x6b, 0xf9, 0x97, 0x9a, 0x5f, 0x47,
246 0x59, 0xf8, 0x0f, 0x4f, 0xb4, 0xec, 0x2e, 0x34,
247 0xf5, 0x56, 0x6d, 0x59, 0x56, 0x80, 0xa1, 0x17,
248 0x35, 0xe7, 0xb6, 0x10, 0x46, 0x12, 0x79, 0x89,
249 },
250 },
251 {
252 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
253 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
254 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
255 0x00, 0x00, 0x00, 0x10, },
256 {0x0b, 0x6e, 0xc4, 0xfe, 0x17, 0x77, 0x38, 0x24,
257 0x04, 0xef, 0x67, 0x99, 0x97, 0xba, 0x8d, 0x1c,
258 0xc5, 0xcd, 0x8e, 0x85, 0x34, 0x92, 0x59, 0xf5,
259 0x90, 0xc4, 0xc6, 0x6d, 0x33, 0x99, 0xd4, 0x64,
260 0x34, 0x59, 0x06, 0xb1, 0x1b, 0x00, 0xe3, 0x63,
261 0xef, 0x42, 0x92, 0x21, 0xf2, 0xec, 0x72, 0x0d,
262 0x2f, 0x66, 0x5d, 0x7d, 0xea, 0xd5, 0xb4, 0x82,
263 },
264 },
265 {
266 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
267 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
268 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
269 0x00, 0x00, 0x00, 0x11, },
270 {0xb8, 0x35, 0x7c, 0x3a, 0x6c, 0xee, 0xf2, 0x88,
271 0x31, 0x0e, 0x17, 0xb8, 0xbf, 0xef, 0xf9, 0x20,
272 0x08, 0x46, 0xca, 0x8c, 0x19, 0x42, 0x49, 0x7c,
273 0x48, 0x44, 0x03, 0xbc, 0xff, 0x14, 0x9e, 0xfa,
274 0x66, 0x06, 0xa6, 0xbd, 0x20, 0xef, 0x7d, 0x1b,
275 0x06, 0xbd, 0x92, 0xf6, 0x90, 0x46, 0x39, 0xdc,
276 0xe5, 0x17, 0x4d, 0xb6, 0xcc, 0x55, 0x4a, 0x26,
277 },
278 },
279 {
280 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
281 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
282 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
283 0x00, 0x00, 0x00, 0x12, },
284 {0xc9, 0xff, 0x61, 0xb0, 0x40, 0x87, 0x4c, 0x05,
285 0x68, 0x47, 0x92, 0x16, 0x82, 0x4a, 0x15, 0xea,
286 0xb1, 0xa8, 0x38, 0xa7, 0x97, 0xd1, 0x89, 0x74,
287 0x62, 0x26, 0xe4, 0xcc, 0xea, 0x98, 0xd6, 0x0e,
288 0x5f, 0xfc, 0x9b, 0x8f, 0xcf, 0x99, 0x9f, 0xab,
289 0x1d, 0xf7, 0xe7, 0xef, 0x70, 0x84, 0xf2, 0x0d,
290 0xdb, 0x61, 0xbb, 0x04, 0x5a, 0x6c, 0xe0, 0x02,
291 },
292 },
293 {
294 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
295 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
296 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
297 0x00, 0x00, 0x00, 0x13, },
298 {0xa1, 0xe8, 0x1c, 0x04, 0xf3, 0x0c, 0xe2, 0x01,
299 0xc7, 0xc9, 0xac, 0xe7, 0x85, 0xed, 0x44, 0xcc,
300 0x33, 0xb4, 0x55, 0xa0, 0x22, 0xf2, 0xac, 0xdb,
301 0xc6, 0xca, 0xe8, 0x3c, 0xdc, 0xf1, 0xf6, 0xc3,
302 0xdb, 0x09, 0xc7, 0x0a, 0xcc, 0x25, 0x39, 0x1d,
303 0x49, 0x2f, 0xe2, 0x5b, 0x4a, 0x18, 0x0b, 0xab,
304 0xd6, 0xce, 0xa3, 0x56, 0xc0, 0x47, 0x19, 0xcd,
305 },
306 },
307 {
308 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
309 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
310 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
311 0x00, 0x00, 0x00, 0x14, },
312 {0xfc, 0xc7, 0xf2, 0xb4, 0x5d, 0xf1, 0xcd, 0x5a,
313 0x3c, 0x0c, 0x07, 0x31, 0xca, 0x47, 0xa8, 0xaf,
314 0x75, 0xcf, 0xb0, 0x34, 0x7e, 0x83, 0x54, 0xee,
315 0xfe, 0x78, 0x24, 0x55, 0x0d, 0x5d, 0x71, 0x10,
316 0x27, 0x4c, 0xba, 0x7c, 0xde, 0xe9, 0x0e, 0x1a,
317 0x8b, 0x0d, 0x39, 0x4c, 0x37, 0x6a, 0x55, 0x73,
318 0xdb, 0x6b, 0xe0, 0xbf, 0x27, 0x47, 0xf5, 0x30,
319 },
320 },
321 {
322 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
323 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
324 0x00, 0x00, 0x00, 0x00, 0x01, 0x8e, 0xbb, 0xb9,
325 0x5e, 0xed, 0x0e, 0x13, },
326 {0x61, 0xf0, 0x77, 0xc6, 0xf6, 0x2e, 0xd8, 0x02,
327 0xda, 0xd7, 0xc2, 0xf3, 0x8f, 0x5c, 0x67, 0xf2,
328 0xcc, 0x45, 0x36, 0x01, 0xe6, 0x1b, 0xd0, 0x76,
329 0xbb, 0x46, 0x17, 0x9e, 0x22, 0x72, 0xf9, 0xe9,
330 0xf5, 0x93, 0x3e, 0x70, 0x38, 0x8e, 0xe6, 0x52,
331 0x51, 0x34, 0x43, 0xb5, 0xe2, 0x89, 0xdd, 0x13,
332 0x5d, 0xcc, 0x0d, 0x02, 0x99, 0xb2, 0x25, 0xe4,
333 },
334 },
335 {
336 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
337 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x9d, 0x89,
338 0x3d, 0x4c, 0xdd, 0x74, 0x72, 0x46, 0xcd, 0xca,
339 0x43, 0x59, 0x0e, 0x13, },
340 {0x02, 0x98, 0x95, 0xf0, 0xaf, 0x49, 0x6b, 0xfc,
341 0x62, 0xb6, 0xef, 0x8d, 0x8a, 0x65, 0xc8, 0x8c,
342 0x61, 0x39, 0x49, 0xb0, 0x36, 0x68, 0xaa, 0xb4,
343 0xf0, 0x42, 0x9e, 0x35, 0x3e, 0xa6, 0xe5, 0x3f,
344 0x9a, 0x84, 0x1f, 0x20, 0x19, 0xec, 0x24, 0xbd,
345 0xe1, 0xa7, 0x56, 0x77, 0xaa, 0x9b, 0x59, 0x02,
346 0xe6, 0x10, 0x81, 0xc0, 0x10, 0x64, 0xde, 0x93,
347 },
348 },
349 {
350 {0x41, 0xff, 0xc1, 0xff, 0xff, 0xfe, 0x01, 0xff,
351 0xfc, 0x00, 0x03, 0xff, 0xfe, 0x00, 0x07, 0xc0,
352 0x01, 0xff, 0xf0, 0x00, 0x03, 0xff, 0xf0, 0x7f,
353 0xfe, 0x00, 0x07, 0xc0, },
354 {0xab, 0x68, 0x99, 0x30, 0xbc, 0xae, 0x4a, 0x4a,
355 0xa5, 0xf5, 0xcb, 0x08, 0x5e, 0x82, 0x3e, 0x8a,
356 0xe3, 0x0f, 0xd3, 0x65, 0xeb, 0x1d, 0xa4, 0xab,
357 0xa9, 0xcf, 0x03, 0x79, 0x33, 0x45, 0xa1, 0x21,
358 0xbb, 0xd2, 0x33, 0x54, 0x8a, 0xf0, 0xd2, 0x10,
359 0x65, 0x4e, 0xb4, 0x0b, 0xab, 0x78, 0x8a, 0x03,
360 0x66, 0x64, 0x19, 0xbe, 0x6f, 0xbd, 0x34, 0xe7,
361 },
362 },
363 {
364 {0x7f, 0xff, 0xff, 0xc0, 0x3f, 0xff, 0xc0, 0x03,
365 0xff, 0xff, 0xfc, 0x00, 0x7f, 0xff, 0x00, 0x00,
366 0x00, 0x00, 0x07, 0x00, 0x00, 0x10, 0x00, 0x00,
367 0x00, 0x0e, 0x00, 0xff, },
368 {0xbd, 0xb6, 0xa8, 0x81, 0x7c, 0x1f, 0x89, 0xda,
369 0x1c, 0x2f, 0x3d, 0xd8, 0xe9, 0x7f, 0xeb, 0x44,
370 0x94, 0xf2, 0xed, 0x30, 0x2a, 0x4c, 0xe2, 0xbc,
371 0x7f, 0x5f, 0x40, 0x25, 0x4c, 0x70, 0x20, 0xd5,
372 0x7c, 0x00, 0x41, 0x18, 0x89, 0x46, 0x2d, 0x77,
373 0xa5, 0x43, 0x8b, 0xb4, 0xe9, 0x7d, 0x17, 0x77,
374 0x00, 0xbf, 0x72, 0x43, 0xa0, 0x7f, 0x16, 0x80,
375 },
376 },
377 {
378 {0x7f, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00,
379 0xff, 0xff, 0xf0, 0x1f, 0xff, 0xf8, 0xff, 0xff,
380 0xc0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00,
381 0x00, 0x0f, 0xff, 0xff, },
382 {0xd5, 0x8b, 0x61, 0xaa, 0x41, 0xc3, 0x2d, 0xd5,
383 0xeb, 0xa4, 0x62, 0x64, 0x7d, 0xba, 0x75, 0xc5,
384 0xd6, 0x7c, 0x83, 0x60, 0x6c, 0x0a, 0xf2, 0xbd,
385 0x92, 0x84, 0x46, 0xa9, 0xd2, 0x4b, 0xa6, 0xa8,
386 0x37, 0xbe, 0x04, 0x60, 0xdd, 0x10, 0x7a, 0xe7,
387 0x77, 0x25, 0x69, 0x6d, 0x21, 0x14, 0x46, 0xc5,
388 0x60, 0x9b, 0x45, 0x95, 0x97, 0x6b, 0x16, 0xbd,
389 },
390 },
391 {
392 {0x7f, 0xff, 0xff, 0xc0, 0x00, 0xff, 0xfe, 0x3f,
393 0xff, 0xfc, 0x10, 0x00, 0x00, 0x20, 0x00, 0x3f,
394 0xff, 0xff, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00,
395 0x3f, 0xff, 0xff, 0xff, },
396 {0xdc, 0x9f, 0xa7, 0x79, 0x78, 0xa0, 0x05, 0x51,
397 0x09, 0x80, 0xe9, 0x29, 0xa1, 0x48, 0x5f, 0x63,
398 0x71, 0x6d, 0xf6, 0x95, 0xd7, 0xa0, 0xc1, 0x8b,
399 0xb5, 0x18, 0xdf, 0x03, 0xed, 0xe2, 0xb0, 0x16,
400 0xf2, 0xdd, 0xff, 0xc2, 0xa8, 0xc0, 0x15, 0xb1,
401 0x34, 0x92, 0x82, 0x75, 0xce, 0x09, 0xe5, 0x66,
402 0x1b, 0x7a, 0xb1, 0x4c, 0xe0, 0xd1, 0xd4, 0x03,
403 },
404 },
405 {
406 {0x70, 0x01, 0xf0, 0x00, 0x1c, 0x00, 0x01, 0xc0,
407 0x00, 0x00, 0x1f, 0xff, 0xff, 0xfc, 0x00, 0x00,
408 0x1f, 0xff, 0xff, 0xf8, 0x00, 0x0f, 0xc0, 0x00,
409 0x00, 0x01, 0xfc, 0x00, },
410 {0x49, 0x9d, 0x8b, 0x28, 0x29, 0xcf, 0xb8, 0x79,
411 0xc9, 0x01, 0xf7, 0xd8, 0x5d, 0x35, 0x70, 0x45,
412 0xed, 0xab, 0x55, 0x02, 0x88, 0x24, 0xd0, 0xf0,
413 0x5b, 0xa2, 0x79, 0xba, 0xbf, 0x92, 0x95, 0x37,
414 0xb0, 0x6e, 0x40, 0x15, 0x91, 0x96, 0x39, 0xd9,
415 0x4f, 0x57, 0x83, 0x8f, 0xa3, 0x3f, 0xc3, 0xd9,
416 0x52, 0x59, 0x8d, 0xcd, 0xbb, 0x44, 0xd6, 0x38,
417 },
418 },
419 {
420 {0x00, 0x00, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00,
421 0x00, 0xff, 0xf0, 0x30, 0x00, 0x1f, 0x00, 0x00,
422 0xff, 0xff, 0xf0, 0x00, 0x00, 0x38, 0x00, 0x00,
423 0x00, 0x00, 0x00, 0x02, },
424 {0x82, 0x46, 0xc9, 0x99, 0x13, 0x71, 0x86, 0x63,
425 0x2c, 0x5f, 0x9e, 0xdd, 0xf3, 0xb1, 0xb0, 0xe1,
426 0x76, 0x4c, 0x5e, 0x8b, 0xd0, 0xe0, 0xd8, 0xa5,
427 0x54, 0xb9, 0xcb, 0x77, 0xe8, 0x0e, 0xd8, 0x66,
428 0x0b, 0xc1, 0xcb, 0x17, 0xac, 0x7d, 0x84, 0x5b,
429 0xe4, 0x0a, 0x7a, 0x02, 0x2d, 0x33, 0x06, 0xf1,
430 0x16, 0xae, 0x9f, 0x81, 0xfe, 0xa6, 0x59, 0x47,
431 },
432 },
433 {
434 {0x7f, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
435 0x07, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
436 0x00, 0x00, 0xff, 0xfe, 0x08, 0x00, 0x00, 0x1f,
437 0xf0, 0x00, 0x1f, 0xff, },
438 {0x66, 0x70, 0xc2, 0x0a, 0xfc, 0xce, 0xae, 0xa6,
439 0x72, 0xc9, 0x7f, 0x75, 0xe2, 0xe9, 0xdd, 0x5c,
440 0x84, 0x60, 0xe5, 0x4b, 0xb3, 0x85, 0x38, 0xeb,
441 0xb4, 0xbd, 0x30, 0xeb, 0xf2, 0x80, 0xd8, 0x00,
442 0x8d, 0x07, 0xa4, 0xca, 0xf5, 0x42, 0x71, 0xf9,
443 0x93, 0x52, 0x7d, 0x46, 0xff, 0x3f, 0xf4, 0x6f,
444 0xd1, 0x19, 0x0a, 0x3f, 0x1f, 0xaa, 0x4f, 0x74,
445 },
446 },
447 {
448 {0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff,
449 0xff, 0xc0, 0x00, 0x07, 0xff, 0xff, 0xe0, 0xff,
450 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0xff,
451 0xff, 0xff, 0xff, 0xff, },
452 {0x00, 0x0e, 0xca, 0x93, 0x42, 0x47, 0x42, 0x5c,
453 0xfd, 0x94, 0x9b, 0x79, 0x5c, 0xb5, 0xce, 0x1e,
454 0xff, 0x40, 0x15, 0x50, 0x38, 0x6e, 0x28, 0xd1,
455 0xa4, 0xc5, 0xa8, 0xeb, 0xd4, 0xc0, 0x10, 0x40,
456 0xdb, 0xa1, 0x96, 0x28, 0x93, 0x1b, 0xc8, 0x85,
457 0x53, 0x70, 0x31, 0x7c, 0x72, 0x2c, 0xbd, 0x9c,
458 0xa6, 0x15, 0x69, 0x85, 0xf1, 0xc2, 0xe9, 0xce,
459 },
460 },
461 {
462 {0x7f, 0xff, 0xfc, 0x03, 0xff, 0x80, 0x7f, 0xff,
463 0xe0, 0x00, 0x1f, 0xff, 0xff, 0x80, 0x0f, 0xff,
464 0x80, 0x00, 0x01, 0xff, 0xff, 0x00, 0x01, 0xff,
465 0xff, 0xfe, 0x00, 0x1f, },
466 {0xef, 0x35, 0x3b, 0xf5, 0xc7, 0x3c, 0xd5, 0x51,
467 0xb9, 0x6d, 0x59, 0x6f, 0xbc, 0x9a, 0x67, 0xf1,
468 0x6d, 0x61, 0xdd, 0x9f, 0xe5, 0x6a, 0xf1, 0x9d,
469 0xe1, 0xfb, 0xa9, 0xcd, 0x21, 0x77, 0x1b, 0x9c,
470 0xdc, 0xe3, 0xe8, 0x43, 0x0c, 0x09, 0xb3, 0x83,
471 0x8b, 0xe7, 0x0b, 0x48, 0xc2, 0x1e, 0x15, 0xbc,
472 0x09, 0xee, 0x1f, 0x2d, 0x79, 0x45, 0xb9, 0x1f,
473 },
474 },
475 {
476 {0x00, 0x00, 0x00, 0x07, 0xff, 0xc0, 0x7f, 0xff,
477 0xff, 0xff, 0x01, 0xff, 0xfe, 0x03, 0xff, 0xfe,
478 0x40, 0x00, 0x38, 0x00, 0x07, 0xe0, 0x00, 0x3f,
479 0xfe, 0x00, 0x00, 0x00, },
480 {0x40, 0x36, 0x05, 0x2a, 0x30, 0x91, 0xeb, 0x48,
481 0x10, 0x46, 0xad, 0x32, 0x89, 0xc9, 0x5d, 0x3a,
482 0xc9, 0x05, 0xca, 0x00, 0x23, 0xde, 0x2c, 0x03,
483 0xec, 0xd4, 0x51, 0xcf, 0xd7, 0x68, 0x16, 0x5a,
484 0x38, 0xa2, 0xb9, 0x6f, 0x81, 0x25, 0x86, 0xa9,
485 0xd5, 0x9d, 0x41, 0x36, 0x03, 0x5d, 0x9c, 0x85,
486 0x3a, 0x5b, 0xf2, 0xe1, 0xc8, 0x6a, 0x49, 0x93,
487 },
488 },
489 {
490 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
491 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0xa2,
492 0xe0, 0xb8, 0xf0, 0x3e, 0x13, 0xdd, 0x29, 0x45,
493 0x5c, 0x5c, 0x2a, 0x29, },
494 {0xfc, 0xc7, 0xf2, 0xb4, 0x5d, 0xf1, 0xcd, 0x5a,
495 0x3c, 0x0c, 0x07, 0x31, 0xca, 0x47, 0xa8, 0xaf,
496 0x75, 0xcf, 0xb0, 0x34, 0x7e, 0x83, 0x54, 0xee,
497 0xfe, 0x78, 0x24, 0x55, 0xf2, 0xa2, 0x8e, 0xef,
498 0xd8, 0xb3, 0x45, 0x83, 0x21, 0x16, 0xf1, 0xe5,
499 0x74, 0xf2, 0xc6, 0xb2, 0xc8, 0x95, 0xaa, 0x8c,
500 0x24, 0x94, 0x1f, 0x40, 0xd8, 0xb8, 0x0a, 0xd1,
501 },
502 },
503 {
504 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
505 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0xa2,
506 0xe0, 0xb8, 0xf0, 0x3e, 0x13, 0xdd, 0x29, 0x45,
507 0x5c, 0x5c, 0x2a, 0x2a, },
508 {0xa1, 0xe8, 0x1c, 0x04, 0xf3, 0x0c, 0xe2, 0x01,
509 0xc7, 0xc9, 0xac, 0xe7, 0x85, 0xed, 0x44, 0xcc,
510 0x33, 0xb4, 0x55, 0xa0, 0x22, 0xf2, 0xac, 0xdb,
511 0xc6, 0xca, 0xe8, 0x3c, 0x23, 0x0e, 0x09, 0x3c,
512 0x24, 0xf6, 0x38, 0xf5, 0x33, 0xda, 0xc6, 0xe2,
513 0xb6, 0xd0, 0x1d, 0xa3, 0xb5, 0xe7, 0xf4, 0x54,
514 0x29, 0x31, 0x5c, 0xa9, 0x3f, 0xb8, 0xe6, 0x34,
515 },
516 },
517 {
518 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
519 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0xa2,
520 0xe0, 0xb8, 0xf0, 0x3e, 0x13, 0xdd, 0x29, 0x45,
521 0x5c, 0x5c, 0x2a, 0x2b, },
522 {0xc9, 0xff, 0x61, 0xb0, 0x40, 0x87, 0x4c, 0x05,
523 0x68, 0x47, 0x92, 0x16, 0x82, 0x4a, 0x15, 0xea,
524 0xb1, 0xa8, 0x38, 0xa7, 0x97, 0xd1, 0x89, 0x74,
525 0x62, 0x26, 0xe4, 0xcc, 0x15, 0x67, 0x29, 0xf1,
526 0xa0, 0x03, 0x64, 0x70, 0x30, 0x66, 0x60, 0x54,
527 0xe2, 0x08, 0x18, 0x0f, 0x8f, 0x7b, 0x0d, 0xf2,
528 0x24, 0x9e, 0x44, 0xfb, 0xa5, 0x93, 0x1f, 0xff,
529 },
530 },
531 {
532 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
533 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0xa2,
534 0xe0, 0xb8, 0xf0, 0x3e, 0x13, 0xdd, 0x29, 0x45,
535 0x5c, 0x5c, 0x2a, 0x2c, },
536 {0xb8, 0x35, 0x7c, 0x3a, 0x6c, 0xee, 0xf2, 0x88,
537 0x31, 0x0e, 0x17, 0xb8, 0xbf, 0xef, 0xf9, 0x20,
538 0x08, 0x46, 0xca, 0x8c, 0x19, 0x42, 0x49, 0x7c,
539 0x48, 0x44, 0x03, 0xbc, 0x00, 0xeb, 0x61, 0x05,
540 0x99, 0xf9, 0x59, 0x42, 0xdf, 0x10, 0x82, 0xe4,
541 0xf9, 0x42, 0x6d, 0x08, 0x6f, 0xb9, 0xc6, 0x23,
542 0x1a, 0xe8, 0xb2, 0x49, 0x33, 0xaa, 0xb5, 0xdb,
543 },
544 },
545 {
546 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
547 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0xa2,
548 0xe0, 0xb8, 0xf0, 0x3e, 0x13, 0xdd, 0x29, 0x45,
549 0x5c, 0x5c, 0x2a, 0x2d, },
550 {0x0b, 0x6e, 0xc4, 0xfe, 0x17, 0x77, 0x38, 0x24,
551 0x04, 0xef, 0x67, 0x99, 0x97, 0xba, 0x8d, 0x1c,
552 0xc5, 0xcd, 0x8e, 0x85, 0x34, 0x92, 0x59, 0xf5,
553 0x90, 0xc4, 0xc6, 0x6d, 0xcc, 0x66, 0x2b, 0x9b,
554 0xcb, 0xa6, 0xf9, 0x4e, 0xe4, 0xff, 0x1c, 0x9c,
555 0x10, 0xbd, 0x6d, 0xdd, 0x0d, 0x13, 0x8d, 0xf2,
556 0xd0, 0x99, 0xa2, 0x82, 0x15, 0x2a, 0x4b, 0x7f,
557 },
558 },
559 {
560 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
561 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0xa2,
562 0xe0, 0xb8, 0xf0, 0x3e, 0x13, 0xdd, 0x29, 0x45,
563 0x5c, 0x5c, 0x2a, 0x2e, },
564 {0xba, 0xa4, 0xd8, 0x63, 0x55, 0x11, 0xa7, 0xd2,
565 0x88, 0xae, 0xbe, 0xed, 0xd1, 0x2c, 0xe5, 0x29,
566 0xff, 0x10, 0x2c, 0x91, 0xf9, 0x7f, 0x86, 0x7e,
567 0x21, 0x91, 0x6b, 0xf9, 0x68, 0x65, 0xa0, 0xb8,
568 0xa6, 0x07, 0xf0, 0xb0, 0x4b, 0x13, 0xd1, 0xcb,
569 0x0a, 0xa9, 0x92, 0xa5, 0xa9, 0x7f, 0x5e, 0xe8,
570 0xca, 0x18, 0x49, 0xef, 0xb9, 0xed, 0x86, 0x78,
571 },
572 },
573 {
574 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
575 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0xa2,
576 0xe0, 0xb8, 0xf0, 0x3e, 0x13, 0xdd, 0x29, 0x45,
577 0x5c, 0x5c, 0x2a, 0x2f, },
578 {0xa5, 0x36, 0x40, 0xc8, 0x3d, 0xc2, 0x08, 0x60,
579 0x3d, 0xed, 0x83, 0xe4, 0xec, 0xf7, 0x58, 0xf2,
580 0x4c, 0x35, 0x7d, 0x7c, 0xf4, 0x80, 0x88, 0xb2,
581 0xce, 0x01, 0xe9, 0xfa, 0x2a, 0x7e, 0xb3, 0x28,
582 0xdb, 0xe6, 0x63, 0xb5, 0xa4, 0x68, 0xb5, 0xbc,
583 0x97, 0xa0, 0x40, 0xa3, 0x74, 0x53, 0x96, 0xba,
584 0x63, 0x6b, 0x96, 0x43, 0x70, 0xdc, 0x33, 0x52,
585 },
586 },
587 {
588 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
589 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0xa2,
590 0xe0, 0xb8, 0xf0, 0x3e, 0x13, 0xdd, 0x29, 0x45,
591 0x5c, 0x5c, 0x2a, 0x30, },
592 {0x34, 0xe8, 0xe1, 0x7a, 0x43, 0x0e, 0x43, 0x28,
593 0x97, 0x93, 0xc3, 0x83, 0xfa, 0xc9, 0x77, 0x42,
594 0x47, 0xb4, 0x0e, 0x9e, 0xbd, 0x33, 0x66, 0x98,
595 0x1f, 0xcf, 0xae, 0xca, 0xda, 0xd7, 0xe6, 0x08,
596 0xe3, 0x80, 0x48, 0x04, 0x34, 0xea, 0x64, 0x1c,
597 0xc8, 0x2c, 0x82, 0xcb, 0xc9, 0x28, 0x01, 0x46,
598 0x9c, 0x8d, 0xb0, 0x20, 0x4f, 0x13, 0x48, 0x9a,
599 },
600 },
601 {
602 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
603 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0xa2,
604 0xe0, 0xb8, 0xf0, 0x3e, 0x13, 0xdd, 0x29, 0x45,
605 0x5c, 0x5c, 0x2a, 0x31, },
606 {0x6e, 0x31, 0xee, 0x1d, 0xc1, 0x37, 0xf8, 0x1b,
607 0x05, 0x67, 0x52, 0xe4, 0xde, 0xab, 0x14, 0x43,
608 0xa4, 0x81, 0x03, 0x3e, 0x9b, 0x4c, 0x93, 0xa3,
609 0x04, 0x4f, 0x4f, 0x7a, 0xdf, 0x82, 0x22, 0x0f,
610 0xc7, 0xa4, 0x02, 0x15, 0x49, 0x16, 0x53, 0x25,
611 0x72, 0x5f, 0x94, 0xc3, 0x41, 0x0d, 0xdb, 0x56,
612 0xc5, 0x4e, 0x16, 0x1f, 0xc9, 0xef, 0x62, 0xee,
613 },
614 },
615 {
616 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
617 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0xa2,
618 0xe0, 0xb8, 0xf0, 0x3e, 0x13, 0xdd, 0x29, 0x45,
619 0x5c, 0x5c, 0x2a, 0x32, },
620 {0xef, 0x53, 0xb6, 0x29, 0x4a, 0xca, 0x43, 0x1f,
621 0x0f, 0x3c, 0x22, 0xdc, 0x82, 0xeb, 0x90, 0x50,
622 0x32, 0x4f, 0x1d, 0x88, 0xd3, 0x77, 0xe7, 0x16,
623 0x44, 0x8e, 0x50, 0x7c, 0xdf, 0x4a, 0xef, 0xff,
624 0xbf, 0x6d, 0x16, 0x99, 0xc9, 0x30, 0x48, 0x1c,
625 0xd1, 0x02, 0x12, 0x7c, 0x9a, 0x3d, 0x99, 0x20,
626 0x48, 0xab, 0x05, 0x92, 0x9b, 0x6e, 0x59, 0x27,
627 },
628 },
629 {
630 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
631 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0xa2,
632 0xe0, 0xb8, 0xf0, 0x3e, 0x13, 0xdd, 0x29, 0x45,
633 0x5c, 0x5c, 0x2a, 0x33, },
634 {0xae, 0xa9, 0xe1, 0x7a, 0x30, 0x65, 0x17, 0xeb,
635 0x89, 0x15, 0x2a, 0xa7, 0x09, 0x6d, 0x2c, 0x38,
636 0x1e, 0xc8, 0x13, 0xc5, 0x1a, 0xa8, 0x80, 0xe7,
637 0xbe, 0xe2, 0xc0, 0xfd, 0xc6, 0x44, 0xcf, 0x15,
638 0x4c, 0xc8, 0x1f, 0x5a, 0xde, 0x49, 0x34, 0x5e,
639 0x54, 0x1b, 0x4d, 0x4b, 0x5c, 0x1a, 0xdb, 0x3e,
640 0xb5, 0xc0, 0x1c, 0x14, 0xee, 0x94, 0x9a, 0xa2,
641 },
642 },
643 {
644 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
645 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0xa2,
646 0xe0, 0xb8, 0xf0, 0x3e, 0x13, 0xdd, 0x29, 0x45,
647 0x5c, 0x5c, 0x2a, 0x34, },
648 {0x2f, 0xdc, 0xcc, 0xfe, 0xe7, 0x20, 0xa7, 0x7e,
649 0xf6, 0xcb, 0x3b, 0xfb, 0xb4, 0x47, 0xf9, 0x38,
650 0x31, 0x17, 0xe3, 0xda, 0xa4, 0xa0, 0x7e, 0x36,
651 0xed, 0x15, 0xf7, 0x8d, 0xc8, 0xe8, 0xcd, 0x1b,
652 0x0b, 0xe4, 0x0b, 0x08, 0x77, 0xcf, 0xca, 0x19,
653 0x58, 0x60, 0x31, 0x22, 0xf1, 0xe6, 0x91, 0x4f,
654 0x84, 0xb7, 0xe8, 0xe9, 0x68, 0xae, 0x8b, 0x9e,
655 },
656 },
657 {
658 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
659 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0xa2,
660 0xe0, 0xb8, 0xf0, 0x3e, 0x13, 0xdd, 0x29, 0x45,
661 0x5c, 0x5c, 0x2a, 0x35, },
662 {0x85, 0x8e, 0x6f, 0x9c, 0xc6, 0xc1, 0x2c, 0x31,
663 0xf5, 0xdf, 0x12, 0x4a, 0xa7, 0x77, 0x67, 0xb0,
664 0x5c, 0x8b, 0xc0, 0x21, 0xbd, 0x68, 0x3d, 0x2b,
665 0x55, 0x57, 0x15, 0x50, 0xfb, 0x92, 0x32, 0xc1,
666 0x5a, 0x3b, 0xc7, 0x67, 0x3a, 0x3a, 0x03, 0xb0,
667 0x25, 0x38, 0x24, 0xc5, 0x3d, 0x0f, 0xd1, 0x41,
668 0x1b, 0x1c, 0xab, 0xe2, 0xe1, 0x87, 0xfb, 0x87,
669 },
670 },
671 {
672 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
673 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0xa2,
674 0xe0, 0xb8, 0xf0, 0x3e, 0x13, 0xdd, 0x29, 0x45,
675 0x5c, 0x5c, 0x2a, 0x36, },
676 {0xdb, 0x2f, 0x6b, 0xe6, 0x30, 0xe2, 0x46, 0xa5,
677 0xcf, 0x7d, 0x99, 0xb8, 0x51, 0x94, 0xb1, 0x23,
678 0xd4, 0x87, 0xe2, 0xd4, 0x66, 0xb9, 0x4b, 0x24,
679 0xa0, 0x3c, 0x3e, 0x28, 0xf0, 0xc5, 0xcf, 0xf7,
680 0xab, 0x68, 0x0d, 0x09, 0xee, 0x11, 0xda, 0xe8,
681 0x4e, 0x9c, 0x10, 0x72, 0xac, 0x48, 0xea, 0x2e,
682 0x74, 0x4b, 0x1b, 0x7f, 0x72, 0xfd, 0x46, 0x9e,
683 },
684 },
685 {
686 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
687 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0xa2,
688 0xe0, 0xb8, 0xf0, 0x3e, 0x13, 0xdd, 0x29, 0x45,
689 0x5c, 0x5c, 0x2a, 0x37, },
690 {0x1f, 0x24, 0x83, 0xf8, 0x25, 0x72, 0x25, 0x1f,
691 0xca, 0x97, 0x5f, 0xea, 0x40, 0xdb, 0x82, 0x1d,
692 0xf8, 0xad, 0x82, 0xa3, 0xc0, 0x02, 0xee, 0x6c,
693 0x57, 0x11, 0x24, 0x08, 0x76, 0x05, 0x0f, 0x33,
694 0x48, 0xaf, 0x26, 0x64, 0xaa, 0xc3, 0xa8, 0xb0,
695 0x52, 0x81, 0x30, 0x4e, 0xbc, 0x7a, 0x79, 0x14,
696 0xc6, 0xad, 0x50, 0xa4, 0xb4, 0xea, 0xc3, 0x83,
697 },
698 },
699 {
700 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
701 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0xa2,
702 0xe0, 0xb8, 0xf0, 0x3e, 0x13, 0xdd, 0x29, 0x45,
703 0x5c, 0x5c, 0x2a, 0x38, },
704 {0x31, 0xc4, 0x9a, 0xe7, 0x5b, 0xce, 0x78, 0x07,
705 0xcd, 0xff, 0x22, 0x05, 0x5d, 0x94, 0xee, 0x90,
706 0x21, 0xfe, 0xdb, 0xb5, 0xab, 0x51, 0xc5, 0x75,
707 0x26, 0xf0, 0x11, 0xaa, 0xd8, 0x17, 0x40, 0x0e,
708 0x8b, 0xa9, 0xca, 0x13, 0xa4, 0x5f, 0x36, 0x0e,
709 0x3d, 0x12, 0x1e, 0xaa, 0xeb, 0x39, 0xaf, 0x82,
710 0xd6, 0x00, 0x1c, 0x81, 0x86, 0xf5, 0xf8, 0x66,
711 },
712 },
713 {
714 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
715 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0xa2,
716 0xe0, 0xb8, 0xf0, 0x3e, 0x13, 0xdd, 0x29, 0x45,
717 0x5c, 0x5c, 0x2a, 0x39, },
718 {0xae, 0x99, 0xfe, 0xeb, 0xb5, 0xd2, 0x69, 0x45,
719 0xb5, 0x48, 0x92, 0x09, 0x2a, 0x8a, 0xee, 0x02,
720 0x91, 0x29, 0x30, 0xfa, 0x41, 0xcd, 0x11, 0x4e,
721 0x40, 0x44, 0x73, 0x01, 0xfb, 0x7d, 0xa7, 0xf5,
722 0xf1, 0x3a, 0x43, 0xb8, 0x17, 0x74, 0x37, 0x3c,
723 0x87, 0x9c, 0xd3, 0x2d, 0x69, 0x34, 0xc0, 0x5f,
724 0xa7, 0x58, 0xee, 0xb1, 0x4f, 0xcf, 0xab, 0x38,
725 },
726 },
727 {
728 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
729 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0xa2,
730 0xe0, 0xb8, 0xf0, 0x3e, 0x13, 0xdd, 0x29, 0x45,
731 0x5c, 0x5c, 0x2a, 0x3a, },
732 {0xdf, 0x1b, 0x1d, 0x66, 0xa5, 0x51, 0xd0, 0xd3,
733 0x1e, 0xff, 0x82, 0x25, 0x58, 0xb9, 0xd2, 0xcc,
734 0x75, 0xc2, 0x18, 0x02, 0x79, 0xfe, 0x0d, 0x08,
735 0xfd, 0x89, 0x6d, 0x04, 0x5c, 0x08, 0x0f, 0xc3,
736 0x52, 0x2f, 0x41, 0xbb, 0xb3, 0xf5, 0x5a, 0x97,
737 0xcf, 0xec, 0xf2, 0x1f, 0x88, 0x2c, 0xe8, 0xcb,
738 0xb1, 0xe5, 0x0c, 0xa6, 0xe6, 0x7e, 0x56, 0xdc,
739 },
740 },
741 {
742 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
743 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0xa2,
744 0xe0, 0xb8, 0xf0, 0x3e, 0x13, 0xdd, 0x29, 0x45,
745 0x5c, 0x5c, 0x2a, 0x3b, },
746 {0x70, 0x6a, 0x46, 0xdc, 0x76, 0xdc, 0xb7, 0x67,
747 0x98, 0xe6, 0x0e, 0x6d, 0x89, 0x47, 0x47, 0x88,
748 0xd1, 0x6d, 0xc1, 0x80, 0x32, 0xd2, 0x68, 0xfd,
749 0x1a, 0x70, 0x4f, 0xa6, 0xe3, 0xd4, 0x89, 0x58,
750 0x43, 0xda, 0x18, 0x8f, 0xd5, 0x8f, 0xb0, 0x56,
751 0x79, 0x76, 0xd7, 0xb5, 0x03, 0x59, 0xd6, 0xb7,
752 0x85, 0x30, 0xc8, 0xf6, 0x2d, 0x1b, 0x17, 0x46,
753 },
754 },
755 {
756 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
757 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0xa2,
758 0xe0, 0xb8, 0xf0, 0x3e, 0x13, 0xdd, 0x29, 0x45,
759 0x5c, 0x5c, 0x2a, 0x3c, },
760 {0xb7, 0x0e, 0x0c, 0xbd, 0x6b, 0xb4, 0xbf, 0x7f,
761 0x32, 0x13, 0x90, 0xb9, 0x4a, 0x03, 0xc1, 0xd3,
762 0x56, 0xc2, 0x11, 0x22, 0x34, 0x32, 0x80, 0xd6,
763 0x11, 0x5c, 0x1d, 0x21, 0x42, 0xc8, 0x9c, 0x77,
764 0x4a, 0x08, 0xdc, 0x04, 0xb3, 0xdd, 0x20, 0x19,
765 0x32, 0xbc, 0x8a, 0x5e, 0xa5, 0xf8, 0xb8, 0x9b,
766 0xbb, 0x2a, 0x7e, 0x66, 0x7a, 0xff, 0x81, 0xcd,
767 },
768 },
769 };
770
TEST(P224,ExternalToInternalAndBack)771 TEST(P224, ExternalToInternalAndBack) {
772 Point point;
773
774 EXPECT_TRUE(point.SetFromString(base::StringPiece(
775 reinterpret_cast<const char *>(kBasePointExternal),
776 sizeof(kBasePointExternal))));
777
778 const std::string external = point.ToString();
779
780 ASSERT_EQ(external.size(), 56u);
781 EXPECT_EQ(0, memcmp(external.data(), kBasePointExternal,
782 sizeof(kBasePointExternal)));
783 }
784
TEST(P224,ScalarBaseMult)785 TEST(P224, ScalarBaseMult) {
786 Point point;
787
788 for (size_t i = 0; i < arraysize(kNISTTestVectors); i++) {
789 p224::ScalarBaseMult(kNISTTestVectors[i].scalar, &point);
790 const std::string external = point.ToString();
791 ASSERT_EQ(external.size(), 56u);
792 EXPECT_EQ(0, memcmp(external.data(), kNISTTestVectors[i].affine,
793 external.size()));
794 }
795 }
796
TEST(P224,Addition)797 TEST(P224, Addition) {
798 Point a, b, minus_b, sum, a_again;
799
800 ASSERT_TRUE(a.SetFromString(base::StringPiece(
801 reinterpret_cast<const char *>(kNISTTestVectors[10].affine), 56)));
802 ASSERT_TRUE(b.SetFromString(base::StringPiece(
803 reinterpret_cast<const char *>(kNISTTestVectors[11].affine), 56)));
804
805 p224::Negate(b, &minus_b);
806 p224::Add(a, b, &sum);
807 EXPECT_NE(0, memcmp(&sum, &a, sizeof(sum)));
808 p224::Add(minus_b, sum, &a_again);
809 EXPECT_EQ(a_again.ToString(), a.ToString());
810 }
811
TEST(P224,Infinity)812 TEST(P224, Infinity) {
813 char zeros[56];
814 memset(zeros, 0, sizeof(zeros));
815
816 // Test that x^0 = ∞.
817 Point a;
818 p224::ScalarBaseMult(reinterpret_cast<const uint8_t*>(zeros), &a);
819 EXPECT_EQ(0, memcmp(zeros, a.ToString().data(), sizeof(zeros)));
820
821 // We shouldn't allow ∞ to be imported.
822 EXPECT_FALSE(a.SetFromString(std::string(zeros, sizeof(zeros))));
823 }
824
825 } // namespace crypto
826