1 /*************************************************************************** 2 * Copyright (c) 2024 Microsoft Corporation 3 * 4 * This program and the accompanying materials are made available under the 5 * terms of the MIT License which is available at 6 * https://opensource.org/licenses/MIT. 7 * 8 * SPDX-License-Identifier: MIT 9 **************************************************************************/ 10 11 12 /**************************************************************************/ 13 /**************************************************************************/ 14 /** */ 15 /** NetX Crypto Component */ 16 /** */ 17 /** Elliptical Curve Cryptography */ 18 /** */ 19 /**************************************************************************/ 20 /**************************************************************************/ 21 22 23 #include "nx_crypto_ec.h" 24 static NX_CRYPTO_CONST HN_UBASE secp224r1_fixed_points_data[][28 >> HN_SIZE_SHIFT] = 25 { 26 27 /* 2G.x */ 28 { 29 HN_ULONG_TO_UBASE(0x666EBBE9), HN_ULONG_TO_UBASE(0x5EFD9675), 30 HN_ULONG_TO_UBASE(0x664D40CE), HN_ULONG_TO_UBASE(0x2A43BCA7), 31 HN_ULONG_TO_UBASE(0x42DF8D8A), HN_ULONG_TO_UBASE(0xF99BC522), 32 HN_ULONG_TO_UBASE(0x1F49BBB0) 33 }, 34 35 /* 2G.y */ 36 { 37 HN_ULONG_TO_UBASE(0x92DC9C43), HN_ULONG_TO_UBASE(0x6229E0B8), 38 HN_ULONG_TO_UBASE(0x608436E6), HN_ULONG_TO_UBASE(0x10D0ECE8), 39 HN_ULONG_TO_UBASE(0x858F1853), HN_ULONG_TO_UBASE(0xB8D321DC), 40 HN_ULONG_TO_UBASE(0x9812DD4E) 41 }, 42 43 /* 3G.x */ 44 { 45 HN_ULONG_TO_UBASE(0x8D5D8EB8), HN_ULONG_TO_UBASE(0xF16D3E67), 46 HN_ULONG_TO_UBASE(0xED1CB362), HN_ULONG_TO_UBASE(0x8A3F559E), 47 HN_ULONG_TO_UBASE(0xE9A3BBCE), HN_ULONG_TO_UBASE(0xC2A74816), 48 HN_ULONG_TO_UBASE(0xEEDCCCD8) 49 }, 50 51 /* 3G.y */ 52 { 53 HN_ULONG_TO_UBASE(0xED50266D), HN_ULONG_TO_UBASE(0xDFF19F90), 54 HN_ULONG_TO_UBASE(0xB4BF65F9), HN_ULONG_TO_UBASE(0xAFECABF2), 55 HN_ULONG_TO_UBASE(0x3865468F), HN_ULONG_TO_UBASE(0x910A1731), 56 HN_ULONG_TO_UBASE(0x5CB379BA) 57 }, 58 59 /* 4G.x */ 60 { 61 HN_ULONG_TO_UBASE(0x6CAB26E3), HN_ULONG_TO_UBASE(0xA0064196), 62 HN_ULONG_TO_UBASE(0x2991FAB0), HN_ULONG_TO_UBASE(0x3A0B91FB), 63 HN_ULONG_TO_UBASE(0xEC27A4E1), HN_ULONG_TO_UBASE(0x5F8EBEEF), 64 HN_ULONG_TO_UBASE(0x0499AA8A) 65 }, 66 67 /* 4G.y */ 68 { 69 HN_ULONG_TO_UBASE(0x7766AF5D), HN_ULONG_TO_UBASE(0x50751040), 70 HN_ULONG_TO_UBASE(0x29610D54), HN_ULONG_TO_UBASE(0xF70684D9), 71 HN_ULONG_TO_UBASE(0xD77AAE82), HN_ULONG_TO_UBASE(0x338C5B81), 72 HN_ULONG_TO_UBASE(0x6916F6D4) 73 }, 74 75 /* 5G.x */ 76 { 77 HN_ULONG_TO_UBASE(0x3B1F15C6), HN_ULONG_TO_UBASE(0xD4EA95AC), 78 HN_ULONG_TO_UBASE(0x00905E82), HN_ULONG_TO_UBASE(0xC8B10860), 79 HN_ULONG_TO_UBASE(0x323AE4D1), HN_ULONG_TO_UBASE(0x7685A3DD), 80 HN_ULONG_TO_UBASE(0x932B56BE) 81 }, 82 83 /* 5G.y */ 84 { 85 HN_ULONG_TO_UBASE(0xEA25DBBF), HN_ULONG_TO_UBASE(0xF09EF93D), 86 HN_ULONG_TO_UBASE(0x5960F390), HN_ULONG_TO_UBASE(0xA8A74166), 87 HN_ULONG_TO_UBASE(0xEC76DBE2), HN_ULONG_TO_UBASE(0x19062AFD), 88 HN_ULONG_TO_UBASE(0x523E80F0) 89 }, 90 91 /* 6G.x */ 92 { 93 HN_ULONG_TO_UBASE(0x26732C73), HN_ULONG_TO_UBASE(0x0F822FDD), 94 HN_ULONG_TO_UBASE(0x83531B5D), HN_ULONG_TO_UBASE(0x1BA4A01C), 95 HN_ULONG_TO_UBASE(0x3F37347C), HN_ULONG_TO_UBASE(0x84725C36), 96 HN_ULONG_TO_UBASE(0xC391B45C) 97 }, 98 99 /* 6G.y */ 100 { 101 HN_ULONG_TO_UBASE(0xB2D6AD24), HN_ULONG_TO_UBASE(0xECBBD5E1), 102 HN_ULONG_TO_UBASE(0xCDE19DFA), HN_ULONG_TO_UBASE(0x2A7FDDFB), 103 HN_ULONG_TO_UBASE(0x93DA7E22), HN_ULONG_TO_UBASE(0xEDE244C3), 104 HN_ULONG_TO_UBASE(0x1EFB7890) 105 }, 106 107 /* 7G.x */ 108 { 109 HN_ULONG_TO_UBASE(0xCA217DA1), HN_ULONG_TO_UBASE(0xBB4C9E90), 110 HN_ULONG_TO_UBASE(0xECA79159), HN_ULONG_TO_UBASE(0x8B7CD11B), 111 HN_ULONG_TO_UBASE(0x8D33C2C9), HN_ULONG_TO_UBASE(0x09F849FF), 112 HN_ULONG_TO_UBASE(0x2610B394) 113 }, 114 115 /* 7G.y */ 116 { 117 HN_ULONG_TO_UBASE(0x2AC64DA0), HN_ULONG_TO_UBASE(0xFB44D135), 118 HN_ULONG_TO_UBASE(0x7B2C46B4), HN_ULONG_TO_UBASE(0x3C89CDBB), 119 HN_ULONG_TO_UBASE(0x6C079B75), HN_ULONG_TO_UBASE(0x20B11296), 120 HN_ULONG_TO_UBASE(0xFE67E4E8) 121 }, 122 123 /* 8G.x */ 124 { 125 HN_ULONG_TO_UBASE(0x2DF5312D), HN_ULONG_TO_UBASE(0x6EE28CAE), 126 HN_ULONG_TO_UBASE(0x61D16F5C), HN_ULONG_TO_UBASE(0x7C4CC71B), 127 HN_ULONG_TO_UBASE(0xB7619A3E), HN_ULONG_TO_UBASE(0x899B4779), 128 HN_ULONG_TO_UBASE(0x05C73240) 129 }, 130 131 /* 8G.y */ 132 { 133 HN_ULONG_TO_UBASE(0x82C73E3A), HN_ULONG_TO_UBASE(0xDA9F7F63), 134 HN_ULONG_TO_UBASE(0x5165C56B), HN_ULONG_TO_UBASE(0xFD561861), 135 HN_ULONG_TO_UBASE(0x1FAB2116), HN_ULONG_TO_UBASE(0xB0839464), 136 HN_ULONG_TO_UBASE(0x72855882) 137 }, 138 139 /* 9G.x */ 140 { 141 HN_ULONG_TO_UBASE(0x2F161C09), HN_ULONG_TO_UBASE(0xB5046918), 142 HN_ULONG_TO_UBASE(0x8CA8D00F), HN_ULONG_TO_UBASE(0xA3E074A9), 143 HN_ULONG_TO_UBASE(0x9DA93489), HN_ULONG_TO_UBASE(0xFB0C1DB8), 144 HN_ULONG_TO_UBASE(0x41C98768) 145 }, 146 147 /* 9G.y */ 148 { 149 HN_ULONG_TO_UBASE(0xFB32DA81), HN_ULONG_TO_UBASE(0x55E5EA05), 150 HN_ULONG_TO_UBASE(0x9FFBCA68), HN_ULONG_TO_UBASE(0x59E63DCE), 151 HN_ULONG_TO_UBASE(0xFE2D3FBF), HN_ULONG_TO_UBASE(0x8738A71C), 152 HN_ULONG_TO_UBASE(0x0E5E0340) 153 }, 154 155 /* 10G.x */ 156 { 157 HN_ULONG_TO_UBASE(0x2333E87F), HN_ULONG_TO_UBASE(0xF6DAB22B), 158 HN_ULONG_TO_UBASE(0x137A5DD2), HN_ULONG_TO_UBASE(0xBEB84430), 159 HN_ULONG_TO_UBASE(0x3AB9F738), HN_ULONG_TO_UBASE(0xC34F24E0), 160 HN_ULONG_TO_UBASE(0xCB0C5D0D) 161 }, 162 163 /* 10G.y */ 164 { 165 HN_ULONG_TO_UBASE(0xF0C8FDA5), HN_ULONG_TO_UBASE(0x44764A7D), 166 HN_ULONG_TO_UBASE(0xA5C3FA20), HN_ULONG_TO_UBASE(0xBE50185B), 167 HN_ULONG_TO_UBASE(0x81D688BC), HN_ULONG_TO_UBASE(0x89388192), 168 HN_ULONG_TO_UBASE(0xC40331DF) 169 }, 170 171 /* 11G.x */ 172 { 173 HN_ULONG_TO_UBASE(0x796F0F60), HN_ULONG_TO_UBASE(0xA3B89530), 174 HN_ULONG_TO_UBASE(0x2BD26909), HN_ULONG_TO_UBASE(0x84DAADE9), 175 HN_ULONG_TO_UBASE(0x0C83FB48), HN_ULONG_TO_UBASE(0xA5A9841A), 176 HN_ULONG_TO_UBASE(0x1765BF22) 177 }, 178 179 /* 11G.y */ 180 { 181 HN_ULONG_TO_UBASE(0xE75DB09E), HN_ULONG_TO_UBASE(0x6F772A9E), 182 HN_ULONG_TO_UBASE(0x6C67CEC1), HN_ULONG_TO_UBASE(0x4E2F23BC), 183 HN_ULONG_TO_UBASE(0x1EDBA8B1), HN_ULONG_TO_UBASE(0x6113694C), 184 HN_ULONG_TO_UBASE(0xE2A215D9) 185 }, 186 187 /* 12G.x */ 188 { 189 HN_ULONG_TO_UBASE(0x9FB5EFB3), HN_ULONG_TO_UBASE(0x52571E50), 190 HN_ULONG_TO_UBASE(0x86964105), HN_ULONG_TO_UBASE(0x74FEADE8), 191 HN_ULONG_TO_UBASE(0xAE85FADA), HN_ULONG_TO_UBASE(0x3BBDE3C8), 192 HN_ULONG_TO_UBASE(0x6C7E4BE8) 193 }, 194 195 /* 12G.y */ 196 { 197 HN_ULONG_TO_UBASE(0x160F4652), HN_ULONG_TO_UBASE(0x39FF9F51), 198 HN_ULONG_TO_UBASE(0xE2495A65), HN_ULONG_TO_UBASE(0x82F4B47C), 199 HN_ULONG_TO_UBASE(0x946C53B5), HN_ULONG_TO_UBASE(0xEE9A60A2), 200 HN_ULONG_TO_UBASE(0x286D2DB3) 201 }, 202 203 /* 13G.x */ 204 { 205 HN_ULONG_TO_UBASE(0x081A44AF), HN_ULONG_TO_UBASE(0x6C40BBD5), 206 HN_ULONG_TO_UBASE(0x183B1392), HN_ULONG_TO_UBASE(0xF6D00995), 207 HN_ULONG_TO_UBASE(0xEFBA6F47), HN_ULONG_TO_UBASE(0xCC0057BC), 208 HN_ULONG_TO_UBASE(0x215619E9) 209 }, 210 211 /* 13G.y */ 212 { 213 HN_ULONG_TO_UBASE(0x3B0DF45E), HN_ULONG_TO_UBASE(0x6F8BC94D), 214 HN_ULONG_TO_UBASE(0x54A3694F), HN_ULONG_TO_UBASE(0xE8B5F11C), 215 HN_ULONG_TO_UBASE(0x31B93CDF), HN_ULONG_TO_UBASE(0x982DB986), 216 HN_ULONG_TO_UBASE(0xE7E3F4B0) 217 }, 218 219 /* 14G.x */ 220 { 221 HN_ULONG_TO_UBASE(0xAB3E1C7B), HN_ULONG_TO_UBASE(0xD8B17048), 222 HN_ULONG_TO_UBASE(0xF36FF8A1), HN_ULONG_TO_UBASE(0xD2C6AC38), 223 HN_ULONG_TO_UBASE(0x29819435), HN_ULONG_TO_UBASE(0x4C07E91C), 224 HN_ULONG_TO_UBASE(0xC813132F) 225 }, 226 227 /* 14G.y */ 228 { 229 HN_ULONG_TO_UBASE(0x5503B11F), HN_ULONG_TO_UBASE(0xEA289142), 230 HN_ULONG_TO_UBASE(0x1030579F), HN_ULONG_TO_UBASE(0x96740878), 231 HN_ULONG_TO_UBASE(0x426BA5CC), HN_ULONG_TO_UBASE(0x8562BCF5), 232 HN_ULONG_TO_UBASE(0x1E28EBF1) 233 }, 234 235 /* 15G.x */ 236 { 237 HN_ULONG_TO_UBASE(0x7CC864EB), HN_ULONG_TO_UBASE(0x4C9F3199), 238 HN_ULONG_TO_UBASE(0x91D28B5E), HN_ULONG_TO_UBASE(0xA97306CD), 239 HN_ULONG_TO_UBASE(0x17036691), HN_ULONG_TO_UBASE(0x497C58FF), 240 HN_ULONG_TO_UBASE(0xF1AEF351) 241 }, 242 243 /* 15G.y */ 244 { 245 HN_ULONG_TO_UBASE(0x600564FF), HN_ULONG_TO_UBASE(0xDBDD1F2D), 246 HN_ULONG_TO_UBASE(0x073B1402), HN_ULONG_TO_UBASE(0xD693DEAD), 247 HN_ULONG_TO_UBASE(0xA684435B), HN_ULONG_TO_UBASE(0x96255874), 248 HN_ULONG_TO_UBASE(0xEEA7471F) 249 } 250 }; 251 static NX_CRYPTO_CONST HN_UBASE secp224r1_fixed_points_2e_data[][28 >> HN_SIZE_SHIFT] = 252 { 253 254 /* 2^e * 1G.x */ 255 { 256 HN_ULONG_TO_UBASE(0x6DDDF554), HN_ULONG_TO_UBASE(0x2D966526), 257 HN_ULONG_TO_UBASE(0xD78B60EF), HN_ULONG_TO_UBASE(0xA4179613), 258 HN_ULONG_TO_UBASE(0x27A34CDB), HN_ULONG_TO_UBASE(0x6AFC31CE), 259 HN_ULONG_TO_UBASE(0xD35AB74D) 260 }, 261 262 /* 2^e * 1G.y */ 263 { 264 HN_ULONG_TO_UBASE(0x22DEB15E), HN_ULONG_TO_UBASE(0xAB85CCDD), 265 HN_ULONG_TO_UBASE(0xE5783A6A), HN_ULONG_TO_UBASE(0x93C62137), 266 HN_ULONG_TO_UBASE(0x41CFFD8C), HN_ULONG_TO_UBASE(0xE90F2DA1), 267 HN_ULONG_TO_UBASE(0x355A1830) 268 }, 269 270 /* 2^e * 2G.x */ 271 { 272 HN_ULONG_TO_UBASE(0xADAADE65), HN_ULONG_TO_UBASE(0x3C1A494E), 273 HN_ULONG_TO_UBASE(0x4DA77FE5), HN_ULONG_TO_UBASE(0xEC86D6DA), 274 HN_ULONG_TO_UBASE(0x992996AB), HN_ULONG_TO_UBASE(0x6090E3E7), 275 HN_ULONG_TO_UBASE(0x65C3553C) 276 }, 277 278 /* 2^e * 2G.y */ 279 { 280 HN_ULONG_TO_UBASE(0x1FB09346), HN_ULONG_TO_UBASE(0xAFFA610B), 281 HN_ULONG_TO_UBASE(0x540B8A4A), HN_ULONG_TO_UBASE(0xCBABF1C6), 282 HN_ULONG_TO_UBASE(0x1A13CCD3), HN_ULONG_TO_UBASE(0x18C28AC5), 283 HN_ULONG_TO_UBASE(0x02995B1B) 284 }, 285 286 /* 2^e * 3G.x */ 287 { 288 HN_ULONG_TO_UBASE(0x8E7295EF), HN_ULONG_TO_UBASE(0x04787456), 289 HN_ULONG_TO_UBASE(0x19FBE38D), HN_ULONG_TO_UBASE(0x0D9A86B4), 290 HN_ULONG_TO_UBASE(0x0690A755), HN_ULONG_TO_UBASE(0xBEAC33DC), 291 HN_ULONG_TO_UBASE(0xD3966A44) 292 }, 293 294 /* 2^e * 3G.y */ 295 { 296 HN_ULONG_TO_UBASE(0xEC29132F), HN_ULONG_TO_UBASE(0xF32B7280), 297 HN_ULONG_TO_UBASE(0x3B6A032D), HN_ULONG_TO_UBASE(0x1200BEAA), 298 HN_ULONG_TO_UBASE(0x7DD88AE4), HN_ULONG_TO_UBASE(0xE3A100DC), 299 HN_ULONG_TO_UBASE(0xD25E2513) 300 }, 301 302 /* 2^e * 4G.x */ 303 { 304 HN_ULONG_TO_UBASE(0xEB2EFAFD), HN_ULONG_TO_UBASE(0x90924857), 305 HN_ULONG_TO_UBASE(0xCE412231), HN_ULONG_TO_UBASE(0x53FCAC2B), 306 HN_ULONG_TO_UBASE(0xDAA14455), HN_ULONG_TO_UBASE(0x3562D58E), 307 HN_ULONG_TO_UBASE(0x825800FD) 308 }, 309 310 /* 2^e * 4G.y */ 311 { 312 HN_ULONG_TO_UBASE(0x8EA96621), HN_ULONG_TO_UBASE(0x8D8D7914), 313 HN_ULONG_TO_UBASE(0x1C3DD9ED), HN_ULONG_TO_UBASE(0x16B523A0), 314 HN_ULONG_TO_UBASE(0x8B219F94), HN_ULONG_TO_UBASE(0x77DAEAAF), 315 HN_ULONG_TO_UBASE(0xD8DB0CC2) 316 }, 317 318 /* 2^e * 5G.x */ 319 { 320 HN_ULONG_TO_UBASE(0xB1A700F0), HN_ULONG_TO_UBASE(0x9176A9C3), 321 HN_ULONG_TO_UBASE(0xD29BC7E6), HN_ULONG_TO_UBASE(0x0327E9AC), 322 HN_ULONG_TO_UBASE(0x212D1A6B), HN_ULONG_TO_UBASE(0xE154BE69), 323 HN_ULONG_TO_UBASE(0x6322E97F) 324 }, 325 326 /* 2^e * 5G.y */ 327 { 328 HN_ULONG_TO_UBASE(0x465D62AA), HN_ULONG_TO_UBASE(0x05469FC5), 329 HN_ULONG_TO_UBASE(0xED18883B), HN_ULONG_TO_UBASE(0x2B888D41), 330 HN_ULONG_TO_UBASE(0x8EAE66C5), HN_ULONG_TO_UBASE(0x25BE511F), 331 HN_ULONG_TO_UBASE(0xE4FCBE93) 332 }, 333 334 /* 2^e * 6G.x */ 335 { 336 HN_ULONG_TO_UBASE(0x583CAC16), HN_ULONG_TO_UBASE(0x3A825FDF), 337 HN_ULONG_TO_UBASE(0x857C7B02), HN_ULONG_TO_UBASE(0x0165020B), 338 HN_ULONG_TO_UBASE(0x3C17744B), HN_ULONG_TO_UBASE(0xDAF2F168), 339 HN_ULONG_TO_UBASE(0x14FFD0A2) 340 }, 341 342 /* 2^e * 6G.y */ 343 { 344 HN_ULONG_TO_UBASE(0x184218F9), HN_ULONG_TO_UBASE(0xD4323B36), 345 HN_ULONG_TO_UBASE(0xEC4E3B47), HN_ULONG_TO_UBASE(0x1ACF4944), 346 HN_ULONG_TO_UBASE(0x5B308084), HN_ULONG_TO_UBASE(0x1A28BBC1), 347 HN_ULONG_TO_UBASE(0x0BCED4B0) 348 }, 349 350 /* 2^e * 7G.x */ 351 { 352 HN_ULONG_TO_UBASE(0x230DF5C4), HN_ULONG_TO_UBASE(0xA892AC22), 353 HN_ULONG_TO_UBASE(0x3B4063ED), HN_ULONG_TO_UBASE(0x0C9352F3), 354 HN_ULONG_TO_UBASE(0x3F19870C), HN_ULONG_TO_UBASE(0xA65233CB), 355 HN_ULONG_TO_UBASE(0x40064F2B) 356 }, 357 358 /* 2^e * 7G.y */ 359 { 360 HN_ULONG_TO_UBASE(0x924F8992), HN_ULONG_TO_UBASE(0x17FE16F0), 361 HN_ULONG_TO_UBASE(0xA25AF5B5), HN_ULONG_TO_UBASE(0x23A6012D), 362 HN_ULONG_TO_UBASE(0x57BB24F7), HN_ULONG_TO_UBASE(0x760DEF1A), 363 HN_ULONG_TO_UBASE(0x06F8BC76) 364 }, 365 366 /* 2^e * 8G.x */ 367 { 368 HN_ULONG_TO_UBASE(0xF7817CB9), HN_ULONG_TO_UBASE(0x784A7084), 369 HN_ULONG_TO_UBASE(0x0738EE9A), HN_ULONG_TO_UBASE(0xC326BCAB), 370 HN_ULONG_TO_UBASE(0xC11E11D9), HN_ULONG_TO_UBASE(0x0F1AAE3E), 371 HN_ULONG_TO_UBASE(0xDC0FE90E) 372 }, 373 374 /* 2^e * 8G.y */ 375 { 376 HN_ULONG_TO_UBASE(0xA5F98390), HN_ULONG_TO_UBASE(0x74CF639E), 377 HN_ULONG_TO_UBASE(0x0AA22FFB), HN_ULONG_TO_UBASE(0x47B75C35), 378 HN_ULONG_TO_UBASE(0xFAE98A40), HN_ULONG_TO_UBASE(0x17FC459A), 379 HN_ULONG_TO_UBASE(0x956EC2D6) 380 }, 381 382 /* 2^e * 9G.x */ 383 { 384 HN_ULONG_TO_UBASE(0x48C1BE6A), HN_ULONG_TO_UBASE(0x624306D6), 385 HN_ULONG_TO_UBASE(0xCD8BC9A4), HN_ULONG_TO_UBASE(0x2F2E9247), 386 HN_ULONG_TO_UBASE(0x595E377D), HN_ULONG_TO_UBASE(0xF1A52EF5), 387 HN_ULONG_TO_UBASE(0xBD1C3CAF) 388 }, 389 390 /* 2^e * 9G.y */ 391 { 392 HN_ULONG_TO_UBASE(0x472409D0), HN_ULONG_TO_UBASE(0x73045E14), 393 HN_ULONG_TO_UBASE(0xE17078F7), HN_ULONG_TO_UBASE(0x4F7D29F3), 394 HN_ULONG_TO_UBASE(0x5A602B2D), HN_ULONG_TO_UBASE(0x5CDFBB74), 395 HN_ULONG_TO_UBASE(0x19183768) 396 }, 397 398 /* 2^e * 10G.x */ 399 { 400 HN_ULONG_TO_UBASE(0x54A8CB79), HN_ULONG_TO_UBASE(0x265B6EE2), 401 HN_ULONG_TO_UBASE(0x433F5E70), HN_ULONG_TO_UBASE(0xDEF44953), 402 HN_ULONG_TO_UBASE(0x1FAEB1D1), HN_ULONG_TO_UBASE(0x5C09DEE2), 403 HN_ULONG_TO_UBASE(0xC4C22578) 404 }, 405 406 /* 2^e * 10G.y */ 407 { 408 HN_ULONG_TO_UBASE(0xBBA1E518), HN_ULONG_TO_UBASE(0xB8307CE7), 409 HN_ULONG_TO_UBASE(0x25B1036D), HN_ULONG_TO_UBASE(0x9E8F31B1), 410 HN_ULONG_TO_UBASE(0xE9186883), HN_ULONG_TO_UBASE(0x33B9F347), 411 HN_ULONG_TO_UBASE(0xC765866E) 412 }, 413 414 /* 2^e * 11G.x */ 415 { 416 HN_ULONG_TO_UBASE(0x24F96906), HN_ULONG_TO_UBASE(0x933BFECE), 417 HN_ULONG_TO_UBASE(0xDA641E50), HN_ULONG_TO_UBASE(0xDB264794), 418 HN_ULONG_TO_UBASE(0x5DF64F95), HN_ULONG_TO_UBASE(0x714B05DE), 419 HN_ULONG_TO_UBASE(0x297ECD89) 420 }, 421 422 /* 2^e * 11G.y */ 423 { 424 HN_ULONG_TO_UBASE(0xEBB2C3AA), HN_ULONG_TO_UBASE(0xD5701BD3), 425 HN_ULONG_TO_UBASE(0xB4F53CB1), HN_ULONG_TO_UBASE(0xAF167073), 426 HN_ULONG_TO_UBASE(0xC5665658), HN_ULONG_TO_UBASE(0x66FE5813), 427 HN_ULONG_TO_UBASE(0x9895089D) 428 }, 429 430 /* 2^e * 12G.x */ 431 { 432 HN_ULONG_TO_UBASE(0xF78C4790), HN_ULONG_TO_UBASE(0x2E0FEF05), 433 HN_ULONG_TO_UBASE(0x3633B05D), HN_ULONG_TO_UBASE(0x1C942D77), 434 HN_ULONG_TO_UBASE(0x229C3A95), HN_ULONG_TO_UBASE(0x4911BB94), 435 HN_ULONG_TO_UBASE(0xBBBD70DF) 436 }, 437 438 /* 2^e * 12G.y */ 439 { 440 HN_ULONG_TO_UBASE(0x3D2C1168), HN_ULONG_TO_UBASE(0x73B2C696), 441 HN_ULONG_TO_UBASE(0x47A72B0D), HN_ULONG_TO_UBASE(0x4080105F), 442 HN_ULONG_TO_UBASE(0xDF611161), HN_ULONG_TO_UBASE(0x9E67B09F), 443 HN_ULONG_TO_UBASE(0x7B7E94B3) 444 }, 445 446 /* 2^e * 13G.x */ 447 { 448 HN_ULONG_TO_UBASE(0x6EFBE2B3), HN_ULONG_TO_UBASE(0x9DAD1A7D), 449 HN_ULONG_TO_UBASE(0x482C0DA6), HN_ULONG_TO_UBASE(0x8345F012), 450 HN_ULONG_TO_UBASE(0x3BDF1243), HN_ULONG_TO_UBASE(0x7AA4D96B), 451 HN_ULONG_TO_UBASE(0x40D7558D) 452 }, 453 454 /* 2^e * 13G.y */ 455 { 456 HN_ULONG_TO_UBASE(0xFB5C6D3D), HN_ULONG_TO_UBASE(0x388A09FF), 457 HN_ULONG_TO_UBASE(0x6E5D9FFD), HN_ULONG_TO_UBASE(0x9B1C9A35), 458 HN_ULONG_TO_UBASE(0x73F15F4F), HN_ULONG_TO_UBASE(0x63C3EA59), 459 HN_ULONG_TO_UBASE(0xDCD5F59F) 460 }, 461 462 /* 2^e * 14G.x */ 463 { 464 HN_ULONG_TO_UBASE(0x4C5CA7AB), HN_ULONG_TO_UBASE(0x37ACF39F), 465 HN_ULONG_TO_UBASE(0x71CC5FD7), HN_ULONG_TO_UBASE(0x11844C80), 466 HN_ULONG_TO_UBASE(0x4E3602CD), HN_ULONG_TO_UBASE(0xC9ABBAC6), 467 HN_ULONG_TO_UBASE(0x0ACD4644) 468 }, 469 470 /* 2^e * 14G.y */ 471 { 472 HN_ULONG_TO_UBASE(0x36D8BF6E), HN_ULONG_TO_UBASE(0x2A6C011A), 473 HN_ULONG_TO_UBASE(0x87BA24E3), HN_ULONG_TO_UBASE(0xFAD8FECD), 474 HN_ULONG_TO_UBASE(0xF6F56574), HN_ULONG_TO_UBASE(0xED940519), 475 HN_ULONG_TO_UBASE(0x050B204C) 476 }, 477 478 /* 2^e * 15G.x */ 479 { 480 HN_ULONG_TO_UBASE(0xAE7D9A96), HN_ULONG_TO_UBASE(0x0AED4F1C), 481 HN_ULONG_TO_UBASE(0xF7AD94C4), HN_ULONG_TO_UBASE(0xEF9B5CEE), 482 HN_ULONG_TO_UBASE(0x8E4A3BF3), HN_ULONG_TO_UBASE(0xC3B55E77), 483 HN_ULONG_TO_UBASE(0x7405783D) 484 }, 485 486 /* 2^e * 15G.y */ 487 { 488 HN_ULONG_TO_UBASE(0x61B6E8C6), HN_ULONG_TO_UBASE(0x8B32477C), 489 HN_ULONG_TO_UBASE(0x97570F01), HN_ULONG_TO_UBASE(0x95D1B46A), 490 HN_ULONG_TO_UBASE(0x176D0A7E), HN_ULONG_TO_UBASE(0x4C7D0E91), 491 HN_ULONG_TO_UBASE(0x3DF90FBC) 492 } 493 }; 494 static NX_CRYPTO_CONST NX_CRYPTO_EC_POINT secp224r1_fixed_points_array[] = 495 { 496 497 /* 2G */ 498 { 499 NX_CRYPTO_EC_POINT_AFFINE, 500 { 501 (HN_UBASE *)&secp224r1_fixed_points_data[0], 502 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 503 }, 504 { 505 (HN_UBASE *)&secp224r1_fixed_points_data[1], 506 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 507 }, 508 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 509 }, 510 511 /* 3G */ 512 { 513 NX_CRYPTO_EC_POINT_AFFINE, 514 { 515 (HN_UBASE *)&secp224r1_fixed_points_data[2], 516 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 517 }, 518 { 519 (HN_UBASE *)&secp224r1_fixed_points_data[3], 520 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 521 }, 522 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 523 }, 524 525 /* 4G */ 526 { 527 NX_CRYPTO_EC_POINT_AFFINE, 528 { 529 (HN_UBASE *)&secp224r1_fixed_points_data[4], 530 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 531 }, 532 { 533 (HN_UBASE *)&secp224r1_fixed_points_data[5], 534 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 535 }, 536 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 537 }, 538 539 /* 5G */ 540 { 541 NX_CRYPTO_EC_POINT_AFFINE, 542 { 543 (HN_UBASE *)&secp224r1_fixed_points_data[6], 544 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 545 }, 546 { 547 (HN_UBASE *)&secp224r1_fixed_points_data[7], 548 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 549 }, 550 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 551 }, 552 553 /* 6G */ 554 { 555 NX_CRYPTO_EC_POINT_AFFINE, 556 { 557 (HN_UBASE *)&secp224r1_fixed_points_data[8], 558 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 559 }, 560 { 561 (HN_UBASE *)&secp224r1_fixed_points_data[9], 562 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 563 }, 564 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 565 }, 566 567 /* 7G */ 568 { 569 NX_CRYPTO_EC_POINT_AFFINE, 570 { 571 (HN_UBASE *)&secp224r1_fixed_points_data[10], 572 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 573 }, 574 { 575 (HN_UBASE *)&secp224r1_fixed_points_data[11], 576 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 577 }, 578 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 579 }, 580 581 /* 8G */ 582 { 583 NX_CRYPTO_EC_POINT_AFFINE, 584 { 585 (HN_UBASE *)&secp224r1_fixed_points_data[12], 586 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 587 }, 588 { 589 (HN_UBASE *)&secp224r1_fixed_points_data[13], 590 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 591 }, 592 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 593 }, 594 595 /* 9G */ 596 { 597 NX_CRYPTO_EC_POINT_AFFINE, 598 { 599 (HN_UBASE *)&secp224r1_fixed_points_data[14], 600 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 601 }, 602 { 603 (HN_UBASE *)&secp224r1_fixed_points_data[15], 604 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 605 }, 606 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 607 }, 608 609 /* 10G */ 610 { 611 NX_CRYPTO_EC_POINT_AFFINE, 612 { 613 (HN_UBASE *)&secp224r1_fixed_points_data[16], 614 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 615 }, 616 { 617 (HN_UBASE *)&secp224r1_fixed_points_data[17], 618 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 619 }, 620 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 621 }, 622 623 /* 11G */ 624 { 625 NX_CRYPTO_EC_POINT_AFFINE, 626 { 627 (HN_UBASE *)&secp224r1_fixed_points_data[18], 628 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 629 }, 630 { 631 (HN_UBASE *)&secp224r1_fixed_points_data[19], 632 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 633 }, 634 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 635 }, 636 637 /* 12G */ 638 { 639 NX_CRYPTO_EC_POINT_AFFINE, 640 { 641 (HN_UBASE *)&secp224r1_fixed_points_data[20], 642 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 643 }, 644 { 645 (HN_UBASE *)&secp224r1_fixed_points_data[21], 646 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 647 }, 648 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 649 }, 650 651 /* 13G */ 652 { 653 NX_CRYPTO_EC_POINT_AFFINE, 654 { 655 (HN_UBASE *)&secp224r1_fixed_points_data[22], 656 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 657 }, 658 { 659 (HN_UBASE *)&secp224r1_fixed_points_data[23], 660 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 661 }, 662 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 663 }, 664 665 /* 14G */ 666 { 667 NX_CRYPTO_EC_POINT_AFFINE, 668 { 669 (HN_UBASE *)&secp224r1_fixed_points_data[24], 670 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 671 }, 672 { 673 (HN_UBASE *)&secp224r1_fixed_points_data[25], 674 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 675 }, 676 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 677 }, 678 679 /* 15G */ 680 { 681 NX_CRYPTO_EC_POINT_AFFINE, 682 { 683 (HN_UBASE *)&secp224r1_fixed_points_data[26], 684 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 685 }, 686 { 687 (HN_UBASE *)&secp224r1_fixed_points_data[27], 688 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 689 }, 690 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 691 } 692 }; 693 static NX_CRYPTO_CONST NX_CRYPTO_EC_POINT secp224r1_fixed_points_2e_array[] = 694 { 695 696 /* 2^e * 1G */ 697 { 698 NX_CRYPTO_EC_POINT_AFFINE, 699 { 700 (HN_UBASE *)&secp224r1_fixed_points_2e_data[0], 701 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 702 }, 703 { 704 (HN_UBASE *)&secp224r1_fixed_points_2e_data[1], 705 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 706 }, 707 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 708 }, 709 710 /* 2^e * 2G */ 711 { 712 NX_CRYPTO_EC_POINT_AFFINE, 713 { 714 (HN_UBASE *)&secp224r1_fixed_points_2e_data[2], 715 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 716 }, 717 { 718 (HN_UBASE *)&secp224r1_fixed_points_2e_data[3], 719 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 720 }, 721 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 722 }, 723 724 /* 2^e * 3G */ 725 { 726 NX_CRYPTO_EC_POINT_AFFINE, 727 { 728 (HN_UBASE *)&secp224r1_fixed_points_2e_data[4], 729 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 730 }, 731 { 732 (HN_UBASE *)&secp224r1_fixed_points_2e_data[5], 733 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 734 }, 735 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 736 }, 737 738 /* 2^e * 4G */ 739 { 740 NX_CRYPTO_EC_POINT_AFFINE, 741 { 742 (HN_UBASE *)&secp224r1_fixed_points_2e_data[6], 743 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 744 }, 745 { 746 (HN_UBASE *)&secp224r1_fixed_points_2e_data[7], 747 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 748 }, 749 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 750 }, 751 752 /* 2^e * 5G */ 753 { 754 NX_CRYPTO_EC_POINT_AFFINE, 755 { 756 (HN_UBASE *)&secp224r1_fixed_points_2e_data[8], 757 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 758 }, 759 { 760 (HN_UBASE *)&secp224r1_fixed_points_2e_data[9], 761 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 762 }, 763 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 764 }, 765 766 /* 2^e * 6G */ 767 { 768 NX_CRYPTO_EC_POINT_AFFINE, 769 { 770 (HN_UBASE *)&secp224r1_fixed_points_2e_data[10], 771 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 772 }, 773 { 774 (HN_UBASE *)&secp224r1_fixed_points_2e_data[11], 775 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 776 }, 777 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 778 }, 779 780 /* 2^e * 7G */ 781 { 782 NX_CRYPTO_EC_POINT_AFFINE, 783 { 784 (HN_UBASE *)&secp224r1_fixed_points_2e_data[12], 785 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 786 }, 787 { 788 (HN_UBASE *)&secp224r1_fixed_points_2e_data[13], 789 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 790 }, 791 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 792 }, 793 794 /* 2^e * 8G */ 795 { 796 NX_CRYPTO_EC_POINT_AFFINE, 797 { 798 (HN_UBASE *)&secp224r1_fixed_points_2e_data[14], 799 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 800 }, 801 { 802 (HN_UBASE *)&secp224r1_fixed_points_2e_data[15], 803 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 804 }, 805 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 806 }, 807 808 /* 2^e * 9G */ 809 { 810 NX_CRYPTO_EC_POINT_AFFINE, 811 { 812 (HN_UBASE *)&secp224r1_fixed_points_2e_data[16], 813 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 814 }, 815 { 816 (HN_UBASE *)&secp224r1_fixed_points_2e_data[17], 817 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 818 }, 819 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 820 }, 821 822 /* 2^e * 10G */ 823 { 824 NX_CRYPTO_EC_POINT_AFFINE, 825 { 826 (HN_UBASE *)&secp224r1_fixed_points_2e_data[18], 827 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 828 }, 829 { 830 (HN_UBASE *)&secp224r1_fixed_points_2e_data[19], 831 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 832 }, 833 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 834 }, 835 836 /* 2^e * 11G */ 837 { 838 NX_CRYPTO_EC_POINT_AFFINE, 839 { 840 (HN_UBASE *)&secp224r1_fixed_points_2e_data[20], 841 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 842 }, 843 { 844 (HN_UBASE *)&secp224r1_fixed_points_2e_data[21], 845 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 846 }, 847 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 848 }, 849 850 /* 2^e * 12G */ 851 { 852 NX_CRYPTO_EC_POINT_AFFINE, 853 { 854 (HN_UBASE *)&secp224r1_fixed_points_2e_data[22], 855 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 856 }, 857 { 858 (HN_UBASE *)&secp224r1_fixed_points_2e_data[23], 859 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 860 }, 861 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 862 }, 863 864 /* 2^e * 13G */ 865 { 866 NX_CRYPTO_EC_POINT_AFFINE, 867 { 868 (HN_UBASE *)&secp224r1_fixed_points_2e_data[24], 869 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 870 }, 871 { 872 (HN_UBASE *)&secp224r1_fixed_points_2e_data[25], 873 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 874 }, 875 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 876 }, 877 878 /* 2^e * 14G */ 879 { 880 NX_CRYPTO_EC_POINT_AFFINE, 881 { 882 (HN_UBASE *)&secp224r1_fixed_points_2e_data[26], 883 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 884 }, 885 { 886 (HN_UBASE *)&secp224r1_fixed_points_2e_data[27], 887 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 888 }, 889 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 890 }, 891 892 /* 2^e * 15G */ 893 { 894 NX_CRYPTO_EC_POINT_AFFINE, 895 { 896 (HN_UBASE *)&secp224r1_fixed_points_2e_data[28], 897 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 898 }, 899 { 900 (HN_UBASE *)&secp224r1_fixed_points_2e_data[29], 901 28 >> HN_SIZE_SHIFT, 28, (UINT)NX_CRYPTO_FALSE 902 }, 903 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 904 } 905 }; 906 907 908 NX_CRYPTO_CONST NX_CRYPTO_EC_FIXED_POINTS _nx_crypto_ec_secp224r1_fixed_points = 909 { 910 4u, 224u, 56u, 28u, 911 (NX_CRYPTO_EC_POINT *)secp224r1_fixed_points_array, 912 (NX_CRYPTO_EC_POINT *)secp224r1_fixed_points_2e_array 913 }; 914 915