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