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 #include "nx_crypto_ec.h" 23 static NX_CRYPTO_CONST HN_UBASE secp192r1_fixed_points_data[][24 >> HN_SIZE_SHIFT] = 24 { 25 26 /* 2G.x */ 27 { 28 HN_ULONG_TO_UBASE(0x57B5F01D), HN_ULONG_TO_UBASE(0xF7451A72), 29 HN_ULONG_TO_UBASE(0x1C31929A), HN_ULONG_TO_UBASE(0xB37D3FCE), 30 HN_ULONG_TO_UBASE(0xC600C45C), HN_ULONG_TO_UBASE(0x2B6CACB0) 31 }, 32 33 /* 2G.y */ 34 { 35 HN_ULONG_TO_UBASE(0x47A577B6), HN_ULONG_TO_UBASE(0x08242B45), 36 HN_ULONG_TO_UBASE(0x14505643), HN_ULONG_TO_UBASE(0x294C91BF), 37 HN_ULONG_TO_UBASE(0x4DF109DD), HN_ULONG_TO_UBASE(0xE065AFCC) 38 }, 39 40 /* 3G.x */ 41 { 42 HN_ULONG_TO_UBASE(0x7C24135D), HN_ULONG_TO_UBASE(0xECB18291), 43 HN_ULONG_TO_UBASE(0x2C6CFE0D), HN_ULONG_TO_UBASE(0x90281ACC), 44 HN_ULONG_TO_UBASE(0xC1D40CC7), HN_ULONG_TO_UBASE(0x7265D85B) 45 }, 46 47 /* 3G.y */ 48 { 49 HN_ULONG_TO_UBASE(0xBAD94BD4), HN_ULONG_TO_UBASE(0xD1CCC399), 50 HN_ULONG_TO_UBASE(0x3D4F4115), HN_ULONG_TO_UBASE(0xB5410ABE), 51 HN_ULONG_TO_UBASE(0xE7AD058E), HN_ULONG_TO_UBASE(0xA747B7BB) 52 }, 53 54 /* 4G.x */ 55 { 56 HN_ULONG_TO_UBASE(0xEB97690A), HN_ULONG_TO_UBASE(0xDCB416E0), 57 HN_ULONG_TO_UBASE(0xD31D3E88), HN_ULONG_TO_UBASE(0x7CD89B6E), 58 HN_ULONG_TO_UBASE(0xEAAF5750), HN_ULONG_TO_UBASE(0xF4D5251B) 59 }, 60 61 /* 4G.y */ 62 { 63 HN_ULONG_TO_UBASE(0xE685E484), HN_ULONG_TO_UBASE(0xAF4FE3DE), 64 HN_ULONG_TO_UBASE(0x2914DD60), HN_ULONG_TO_UBASE(0x7B0738A1), 65 HN_ULONG_TO_UBASE(0xF8D8086D), HN_ULONG_TO_UBASE(0x93A49E0A) 66 }, 67 68 /* 5G.x */ 69 { 70 HN_ULONG_TO_UBASE(0x63A15DF0), HN_ULONG_TO_UBASE(0x85F39A75), 71 HN_ULONG_TO_UBASE(0x7D59C96F), HN_ULONG_TO_UBASE(0xF56DAC48), 72 HN_ULONG_TO_UBASE(0xE743AB91), HN_ULONG_TO_UBASE(0xA05414DD) 73 }, 74 75 /* 5G.y */ 76 { 77 HN_ULONG_TO_UBASE(0x7D75E2FE), HN_ULONG_TO_UBASE(0xED11279C), 78 HN_ULONG_TO_UBASE(0xDD3780CE), HN_ULONG_TO_UBASE(0x52499912), 79 HN_ULONG_TO_UBASE(0x14EA5C3B), HN_ULONG_TO_UBASE(0x55D891C6) 80 }, 81 82 /* 6G.x */ 83 { 84 HN_ULONG_TO_UBASE(0xD322681C), HN_ULONG_TO_UBASE(0xDC75BF3F), 85 HN_ULONG_TO_UBASE(0x34CA0295), HN_ULONG_TO_UBASE(0x6F11267C), 86 HN_ULONG_TO_UBASE(0xA1FF18DC), HN_ULONG_TO_UBASE(0xD0415D7F) 87 }, 88 89 /* 6G.y */ 90 { 91 HN_ULONG_TO_UBASE(0xFB9C3DB7), HN_ULONG_TO_UBASE(0x3A2AF705), 92 HN_ULONG_TO_UBASE(0xDBB5197B), HN_ULONG_TO_UBASE(0x9597E09B), 93 HN_ULONG_TO_UBASE(0x560CBBA9), HN_ULONG_TO_UBASE(0x6E2162E5) 94 }, 95 96 /* 7G.x */ 97 { 98 HN_ULONG_TO_UBASE(0x77F3F88B), HN_ULONG_TO_UBASE(0xC9C6A9B3), 99 HN_ULONG_TO_UBASE(0x1E64859F), HN_ULONG_TO_UBASE(0x673FD86D), 100 HN_ULONG_TO_UBASE(0x6E9F6CF1), HN_ULONG_TO_UBASE(0x8EA2B9DB) 101 }, 102 103 /* 7G.y */ 104 { 105 HN_ULONG_TO_UBASE(0xE0A0052F), HN_ULONG_TO_UBASE(0xF48FE5DE), 106 HN_ULONG_TO_UBASE(0x2ABEDD5C), HN_ULONG_TO_UBASE(0x7E78EA0A), 107 HN_ULONG_TO_UBASE(0xAFCA5583), HN_ULONG_TO_UBASE(0x38F59B56) 108 }, 109 110 /* 8G.x */ 111 { 112 HN_ULONG_TO_UBASE(0xBFE7D0FE), HN_ULONG_TO_UBASE(0x94CCEE34), 113 HN_ULONG_TO_UBASE(0xEF999054), HN_ULONG_TO_UBASE(0x8AEB7640), 114 HN_ULONG_TO_UBASE(0xEC46F6C0), HN_ULONG_TO_UBASE(0xF357F34A) 115 }, 116 117 /* 8G.y */ 118 { 119 HN_ULONG_TO_UBASE(0x15141FCE), HN_ULONG_TO_UBASE(0x04CC78E2), 120 HN_ULONG_TO_UBASE(0xD0BDD150), HN_ULONG_TO_UBASE(0xDC220529), 121 HN_ULONG_TO_UBASE(0x967F9AC7), HN_ULONG_TO_UBASE(0x3DE0E1CE) 122 }, 123 124 /* 9G.x */ 125 { 126 HN_ULONG_TO_UBASE(0x04BA3AAE), HN_ULONG_TO_UBASE(0x68520373), 127 HN_ULONG_TO_UBASE(0xBDE031DB), HN_ULONG_TO_UBASE(0x49607803), 128 HN_ULONG_TO_UBASE(0x82DB9023), HN_ULONG_TO_UBASE(0x8911E847) 129 }, 130 131 /* 9G.y */ 132 { 133 HN_ULONG_TO_UBASE(0x5287EDCF), HN_ULONG_TO_UBASE(0xED56DC39), 134 HN_ULONG_TO_UBASE(0xE648DD09), HN_ULONG_TO_UBASE(0x95F640DC), 135 HN_ULONG_TO_UBASE(0xDB2DE02B), HN_ULONG_TO_UBASE(0x15BDD6CF) 136 }, 137 138 /* 10G.x */ 139 { 140 HN_ULONG_TO_UBASE(0xC93BC173), HN_ULONG_TO_UBASE(0xF921D37D), 141 HN_ULONG_TO_UBASE(0x68416D1F), HN_ULONG_TO_UBASE(0x5B478BA1), 142 HN_ULONG_TO_UBASE(0xAE09F12D), HN_ULONG_TO_UBASE(0x5D1AAE40) 143 }, 144 145 /* 10G.y */ 146 { 147 HN_ULONG_TO_UBASE(0x3AD110C0), HN_ULONG_TO_UBASE(0x6401E81B), 148 HN_ULONG_TO_UBASE(0x5ED83DC3), HN_ULONG_TO_UBASE(0x32788DB8), 149 HN_ULONG_TO_UBASE(0x808AE8F8), HN_ULONG_TO_UBASE(0x1E7C5765) 150 }, 151 152 /* 11G.x */ 153 { 154 HN_ULONG_TO_UBASE(0xCF233623), HN_ULONG_TO_UBASE(0xA8E49EDC), 155 HN_ULONG_TO_UBASE(0x54661A7B), HN_ULONG_TO_UBASE(0xB509F0FC), 156 HN_ULONG_TO_UBASE(0x1A67D2D4), HN_ULONG_TO_UBASE(0x9B379BCD) 157 }, 158 159 /* 11G.y */ 160 { 161 HN_ULONG_TO_UBASE(0x4741649E), HN_ULONG_TO_UBASE(0x8FFC4B9A), 162 HN_ULONG_TO_UBASE(0xE4F6B09E), HN_ULONG_TO_UBASE(0xEC28DBE4), 163 HN_ULONG_TO_UBASE(0xCFBDACBD), HN_ULONG_TO_UBASE(0xA8204FE0) 164 }, 165 166 /* 12G.x */ 167 { 168 HN_ULONG_TO_UBASE(0x250B8857), HN_ULONG_TO_UBASE(0xBCA5231C), 169 HN_ULONG_TO_UBASE(0x86F05B35), HN_ULONG_TO_UBASE(0x1623A88F), 170 HN_ULONG_TO_UBASE(0x6FE1D2AE), HN_ULONG_TO_UBASE(0xD2D6B452) 171 }, 172 173 /* 12G.y */ 174 { 175 HN_ULONG_TO_UBASE(0x806F27B2), HN_ULONG_TO_UBASE(0x277D3765), 176 HN_ULONG_TO_UBASE(0x453872D5), HN_ULONG_TO_UBASE(0xB03727EF), 177 HN_ULONG_TO_UBASE(0xCA59599C), HN_ULONG_TO_UBASE(0xC8F9F5DD) 178 }, 179 180 /* 13G.x */ 181 { 182 HN_ULONG_TO_UBASE(0x37AC02B2), HN_ULONG_TO_UBASE(0xBDBD95EE), 183 HN_ULONG_TO_UBASE(0x36CDF07B), HN_ULONG_TO_UBASE(0x0109B514), 184 HN_ULONG_TO_UBASE(0xFDCCFC0B), HN_ULONG_TO_UBASE(0x122A98EE) 185 }, 186 187 /* 13G.y */ 188 { 189 HN_ULONG_TO_UBASE(0xF68871F7), HN_ULONG_TO_UBASE(0xEAD7B061), 190 HN_ULONG_TO_UBASE(0xB0A86AA5), HN_ULONG_TO_UBASE(0xBC68F73B), 191 HN_ULONG_TO_UBASE(0xD19486A6), HN_ULONG_TO_UBASE(0x25FE3BF0) 192 }, 193 194 /* 14G.x */ 195 { 196 HN_ULONG_TO_UBASE(0x93487CAD), HN_ULONG_TO_UBASE(0x03FC9D91), 197 HN_ULONG_TO_UBASE(0xBE44BC3E), HN_ULONG_TO_UBASE(0x9A7A4878), 198 HN_ULONG_TO_UBASE(0x50A9133D), HN_ULONG_TO_UBASE(0x94EF90DB) 199 }, 200 201 /* 14G.y */ 202 { 203 HN_ULONG_TO_UBASE(0xB22E7227), HN_ULONG_TO_UBASE(0x9E4BE663), 204 HN_ULONG_TO_UBASE(0xF7B51234), HN_ULONG_TO_UBASE(0x712DB99C), 205 HN_ULONG_TO_UBASE(0x6722EA87), HN_ULONG_TO_UBASE(0xAEE4182A) 206 }, 207 208 /* 15G.x */ 209 { 210 HN_ULONG_TO_UBASE(0x4E246A62), HN_ULONG_TO_UBASE(0x466E24C1), 211 HN_ULONG_TO_UBASE(0x1A5DDDF7), HN_ULONG_TO_UBASE(0xBA5B47AA), 212 HN_ULONG_TO_UBASE(0xB76ECAC6), HN_ULONG_TO_UBASE(0xC70B48A3) 213 }, 214 215 /* 15G.y */ 216 { 217 HN_ULONG_TO_UBASE(0xAF11FCDE), HN_ULONG_TO_UBASE(0x32B355E1), 218 HN_ULONG_TO_UBASE(0x6E177D11), HN_ULONG_TO_UBASE(0x5D79D5D5), 219 HN_ULONG_TO_UBASE(0xB07ECDED), HN_ULONG_TO_UBASE(0x4494DDAB) 220 } 221 }; 222 static NX_CRYPTO_CONST HN_UBASE secp192r1_fixed_points_2e_data[][24 >> HN_SIZE_SHIFT] = 223 { 224 225 /* 2^e * 1G.x */ 226 { 227 HN_ULONG_TO_UBASE(0x44BB5883), HN_ULONG_TO_UBASE(0x43E29DEE), 228 HN_ULONG_TO_UBASE(0x60B4F224), HN_ULONG_TO_UBASE(0x99C69288), 229 HN_ULONG_TO_UBASE(0xA0AF9296), HN_ULONG_TO_UBASE(0xC657D599) 230 }, 231 232 /* 2^e * 1G.y */ 233 { 234 HN_ULONG_TO_UBASE(0xC1C7B573), HN_ULONG_TO_UBASE(0x983289F2), 235 HN_ULONG_TO_UBASE(0x9A4B323D), HN_ULONG_TO_UBASE(0x8BDB577B), 236 HN_ULONG_TO_UBASE(0x42F42E75), HN_ULONG_TO_UBASE(0x460DAB0F) 237 }, 238 239 /* 2^e * 2G.x */ 240 { 241 HN_ULONG_TO_UBASE(0x2D7E1827), HN_ULONG_TO_UBASE(0x4516CAE4), 242 HN_ULONG_TO_UBASE(0x590267C8), HN_ULONG_TO_UBASE(0xE9ACCF64), 243 HN_ULONG_TO_UBASE(0xB5AD4207), HN_ULONG_TO_UBASE(0xE7897F12) 244 }, 245 246 /* 2^e * 2G.y */ 247 { 248 HN_ULONG_TO_UBASE(0xBE19E9D6), HN_ULONG_TO_UBASE(0x1EF20C93), 249 HN_ULONG_TO_UBASE(0xD7F7C011), HN_ULONG_TO_UBASE(0x7C5D3FCB), 250 HN_ULONG_TO_UBASE(0x9BA0DF2B), HN_ULONG_TO_UBASE(0x68B64D8B) 251 }, 252 253 /* 2^e * 3G.x */ 254 { 255 HN_ULONG_TO_UBASE(0x930ED817), HN_ULONG_TO_UBASE(0x787C0783), 256 HN_ULONG_TO_UBASE(0xB42B708E), HN_ULONG_TO_UBASE(0xC3C56CFC), 257 HN_ULONG_TO_UBASE(0x1C56846C), HN_ULONG_TO_UBASE(0xD522ABD8) 258 }, 259 260 /* 2^e * 3G.y */ 261 { 262 HN_ULONG_TO_UBASE(0xE35398F7), HN_ULONG_TO_UBASE(0x064452EE), 263 HN_ULONG_TO_UBASE(0x29E400EC), HN_ULONG_TO_UBASE(0xEF936452), 264 HN_ULONG_TO_UBASE(0x6D70CBB0), HN_ULONG_TO_UBASE(0x8FF8A03F) 265 }, 266 267 /* 2^e * 4G.x */ 268 { 269 HN_ULONG_TO_UBASE(0x26984CEF), HN_ULONG_TO_UBASE(0x2C537FA4), 270 HN_ULONG_TO_UBASE(0x911E7D81), HN_ULONG_TO_UBASE(0xAAFA4F23), 271 HN_ULONG_TO_UBASE(0x75E3554B), HN_ULONG_TO_UBASE(0x028D15E2) 272 }, 273 274 /* 2^e * 4G.y */ 275 { 276 HN_ULONG_TO_UBASE(0x99913442), HN_ULONG_TO_UBASE(0x4A23A729), 277 HN_ULONG_TO_UBASE(0x6CF3E242), HN_ULONG_TO_UBASE(0x0EBA886E), 278 HN_ULONG_TO_UBASE(0x9C451670), HN_ULONG_TO_UBASE(0x6FC74BCF) 279 }, 280 281 /* 2^e * 5G.x */ 282 { 283 HN_ULONG_TO_UBASE(0xF2406FA6), HN_ULONG_TO_UBASE(0x508E7692), 284 HN_ULONG_TO_UBASE(0x027DD7D4), HN_ULONG_TO_UBASE(0xC52BF70D), 285 HN_ULONG_TO_UBASE(0x5F1EFC4E), HN_ULONG_TO_UBASE(0x6B4A073F) 286 }, 287 288 /* 2^e * 5G.y */ 289 { 290 HN_ULONG_TO_UBASE(0xFD894650), HN_ULONG_TO_UBASE(0xC910CC89), 291 HN_ULONG_TO_UBASE(0x2F982605), HN_ULONG_TO_UBASE(0x1CD5520D), 292 HN_ULONG_TO_UBASE(0x9926A466), HN_ULONG_TO_UBASE(0x0CDEADEB) 293 }, 294 295 /* 2^e * 6G.x */ 296 { 297 HN_ULONG_TO_UBASE(0x15DFAAA5), HN_ULONG_TO_UBASE(0x401102B6), 298 HN_ULONG_TO_UBASE(0xE3E453F3), HN_ULONG_TO_UBASE(0xEEA15E1C), 299 HN_ULONG_TO_UBASE(0xD15E69CC), HN_ULONG_TO_UBASE(0x8BF49642) 300 }, 301 302 /* 2^e * 6G.y */ 303 { 304 HN_ULONG_TO_UBASE(0x9B3EBEDD), HN_ULONG_TO_UBASE(0x955C2C62), 305 HN_ULONG_TO_UBASE(0xC7C9017E), HN_ULONG_TO_UBASE(0xABA0DED2), 306 HN_ULONG_TO_UBASE(0x6F999205), HN_ULONG_TO_UBASE(0x957C2689) 307 }, 308 309 /* 2^e * 7G.x */ 310 { 311 HN_ULONG_TO_UBASE(0xED0A68AB), HN_ULONG_TO_UBASE(0x3F394D59), 312 HN_ULONG_TO_UBASE(0x871DE2C7), HN_ULONG_TO_UBASE(0x921125DB), 313 HN_ULONG_TO_UBASE(0xA64524B1), HN_ULONG_TO_UBASE(0xBA68427E) 314 }, 315 316 /* 2^e * 7G.y */ 317 { 318 HN_ULONG_TO_UBASE(0xF1B72362), HN_ULONG_TO_UBASE(0x5FE500A8), 319 HN_ULONG_TO_UBASE(0x019F0084), HN_ULONG_TO_UBASE(0x47DB28B7), 320 HN_ULONG_TO_UBASE(0x6F936172), HN_ULONG_TO_UBASE(0x97A78F13) 321 }, 322 323 /* 2^e * 8G.x */ 324 { 325 HN_ULONG_TO_UBASE(0xCBDF060C), HN_ULONG_TO_UBASE(0x15B007FF), 326 HN_ULONG_TO_UBASE(0x6541F6F4), HN_ULONG_TO_UBASE(0x3B20E563), 327 HN_ULONG_TO_UBASE(0x0C56D3C6), HN_ULONG_TO_UBASE(0x920F9A3C) 328 }, 329 330 /* 2^e * 8G.y */ 331 { 332 HN_ULONG_TO_UBASE(0x0D0028D3), HN_ULONG_TO_UBASE(0xDD7B77D0), 333 HN_ULONG_TO_UBASE(0x5192D915), HN_ULONG_TO_UBASE(0xCEE00DDA), 334 HN_ULONG_TO_UBASE(0x81F6B3B6), HN_ULONG_TO_UBASE(0xCD7902F7) 335 }, 336 337 /* 2^e * 9G.x */ 338 { 339 HN_ULONG_TO_UBASE(0x360628CD), HN_ULONG_TO_UBASE(0x81C8FF32), 340 HN_ULONG_TO_UBASE(0x1A3704A7), HN_ULONG_TO_UBASE(0xCDF22E64), 341 HN_ULONG_TO_UBASE(0xB83BF30D), HN_ULONG_TO_UBASE(0xFF915D40) 342 }, 343 344 /* 2^e * 9G.y */ 345 { 346 HN_ULONG_TO_UBASE(0x55876906), HN_ULONG_TO_UBASE(0xCFA29C4A), 347 HN_ULONG_TO_UBASE(0x7E66ACA2), HN_ULONG_TO_UBASE(0xF8DC5DF3), 348 HN_ULONG_TO_UBASE(0x10846EA4), HN_ULONG_TO_UBASE(0xD489FC2D) 349 }, 350 351 /* 2^e * 10G.x */ 352 { 353 HN_ULONG_TO_UBASE(0x660237B3), HN_ULONG_TO_UBASE(0x9DAB3F5F), 354 HN_ULONG_TO_UBASE(0xA7C43E04), HN_ULONG_TO_UBASE(0xFFF8E01D), 355 HN_ULONG_TO_UBASE(0xB60C1C4D), HN_ULONG_TO_UBASE(0xC432F4F1) 356 }, 357 358 /* 2^e * 10G.y */ 359 { 360 HN_ULONG_TO_UBASE(0xF065C804), HN_ULONG_TO_UBASE(0x07288012), 361 HN_ULONG_TO_UBASE(0xBF214D87), HN_ULONG_TO_UBASE(0x0AABB920), 362 HN_ULONG_TO_UBASE(0xB3B811E0), HN_ULONG_TO_UBASE(0x27EB5A71) 363 }, 364 365 /* 2^e * 11G.x */ 366 { 367 HN_ULONG_TO_UBASE(0x0C0F37E2), HN_ULONG_TO_UBASE(0x355701B7), 368 HN_ULONG_TO_UBASE(0x23289564), HN_ULONG_TO_UBASE(0xBAEBE73F), 369 HN_ULONG_TO_UBASE(0xB1631987), HN_ULONG_TO_UBASE(0xBC898ABF) 370 }, 371 372 /* 2^e * 11G.y */ 373 { 374 HN_ULONG_TO_UBASE(0x73037073), HN_ULONG_TO_UBASE(0x57453BA7), 375 HN_ULONG_TO_UBASE(0x13E2013F), HN_ULONG_TO_UBASE(0x44DA9223), 376 HN_ULONG_TO_UBASE(0x85DDF1D4), HN_ULONG_TO_UBASE(0xADD1BC83) 377 }, 378 379 /* 2^e * 12G.x */ 380 { 381 HN_ULONG_TO_UBASE(0x73A5BC11), HN_ULONG_TO_UBASE(0x158A8A8B), 382 HN_ULONG_TO_UBASE(0xF78E7F80), HN_ULONG_TO_UBASE(0x8DCF5CFE), 383 HN_ULONG_TO_UBASE(0x45E1F467), HN_ULONG_TO_UBASE(0xCF523028) 384 }, 385 386 /* 2^e * 12G.y */ 387 { 388 HN_ULONG_TO_UBASE(0x10966C87), HN_ULONG_TO_UBASE(0xB3D06D8A), 389 HN_ULONG_TO_UBASE(0xC2569071), HN_ULONG_TO_UBASE(0x8D0FAFA5), 390 HN_ULONG_TO_UBASE(0x7D227D75), HN_ULONG_TO_UBASE(0x89521916) 391 }, 392 393 /* 2^e * 13G.x */ 394 { 395 HN_ULONG_TO_UBASE(0xFB55FB12), HN_ULONG_TO_UBASE(0x659091CD), 396 HN_ULONG_TO_UBASE(0x3E2EA468), HN_ULONG_TO_UBASE(0x50A85BEC), 397 HN_ULONG_TO_UBASE(0x5801DFF4), HN_ULONG_TO_UBASE(0xECF1469E) 398 }, 399 400 /* 2^e * 13G.y */ 401 { 402 HN_ULONG_TO_UBASE(0x6294C83B), HN_ULONG_TO_UBASE(0xAEE2EE4D), 403 HN_ULONG_TO_UBASE(0x910958E4), HN_ULONG_TO_UBASE(0x568D1C50), 404 HN_ULONG_TO_UBASE(0x565BA314), HN_ULONG_TO_UBASE(0x87FEF198) 405 }, 406 407 /* 2^e * 14G.x */ 408 { 409 HN_ULONG_TO_UBASE(0x29230F47), HN_ULONG_TO_UBASE(0x3B1DCF03), 410 HN_ULONG_TO_UBASE(0xD4971DEF), HN_ULONG_TO_UBASE(0x20E1E1AD), 411 HN_ULONG_TO_UBASE(0xA6069364), HN_ULONG_TO_UBASE(0xBF863D0F) 412 }, 413 414 /* 2^e * 14G.y */ 415 { 416 HN_ULONG_TO_UBASE(0x74CCAE45), HN_ULONG_TO_UBASE(0x4187A9DF), 417 HN_ULONG_TO_UBASE(0x62E227BE), HN_ULONG_TO_UBASE(0x60CD8E2B), 418 HN_ULONG_TO_UBASE(0x47C3405E), HN_ULONG_TO_UBASE(0xA6043F75) 419 }, 420 421 /* 2^e * 15G.x */ 422 { 423 HN_ULONG_TO_UBASE(0x6E761455), HN_ULONG_TO_UBASE(0x40423BC2), 424 HN_ULONG_TO_UBASE(0x023E182D), HN_ULONG_TO_UBASE(0x575E0245), 425 HN_ULONG_TO_UBASE(0x7ACABD8A), HN_ULONG_TO_UBASE(0xA346AB39) 426 }, 427 428 /* 2^e * 15G.y */ 429 { 430 HN_ULONG_TO_UBASE(0x1C5A3750), HN_ULONG_TO_UBASE(0x688A166C), 431 HN_ULONG_TO_UBASE(0x5780BE48), HN_ULONG_TO_UBASE(0xAB3E9AC3), 432 HN_ULONG_TO_UBASE(0xAC72B5F3), HN_ULONG_TO_UBASE(0x2A1FAD07) 433 } 434 }; 435 static NX_CRYPTO_CONST NX_CRYPTO_EC_POINT secp192r1_fixed_points_array[] = 436 { 437 438 /* 2G */ 439 { 440 NX_CRYPTO_EC_POINT_AFFINE, 441 { 442 (HN_UBASE *)&secp192r1_fixed_points_data[0], 443 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 444 }, 445 { 446 (HN_UBASE *)&secp192r1_fixed_points_data[1], 447 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 448 }, 449 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 450 }, 451 452 /* 3G */ 453 { 454 NX_CRYPTO_EC_POINT_AFFINE, 455 { 456 (HN_UBASE *)&secp192r1_fixed_points_data[2], 457 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 458 }, 459 { 460 (HN_UBASE *)&secp192r1_fixed_points_data[3], 461 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 462 }, 463 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 464 }, 465 466 /* 4G */ 467 { 468 NX_CRYPTO_EC_POINT_AFFINE, 469 { 470 (HN_UBASE *)&secp192r1_fixed_points_data[4], 471 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 472 }, 473 { 474 (HN_UBASE *)&secp192r1_fixed_points_data[5], 475 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 476 }, 477 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 478 }, 479 480 /* 5G */ 481 { 482 NX_CRYPTO_EC_POINT_AFFINE, 483 { 484 (HN_UBASE *)&secp192r1_fixed_points_data[6], 485 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 486 }, 487 { 488 (HN_UBASE *)&secp192r1_fixed_points_data[7], 489 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 490 }, 491 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 492 }, 493 494 /* 6G */ 495 { 496 NX_CRYPTO_EC_POINT_AFFINE, 497 { 498 (HN_UBASE *)&secp192r1_fixed_points_data[8], 499 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 500 }, 501 { 502 (HN_UBASE *)&secp192r1_fixed_points_data[9], 503 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 504 }, 505 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 506 }, 507 508 /* 7G */ 509 { 510 NX_CRYPTO_EC_POINT_AFFINE, 511 { 512 (HN_UBASE *)&secp192r1_fixed_points_data[10], 513 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 514 }, 515 { 516 (HN_UBASE *)&secp192r1_fixed_points_data[11], 517 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 518 }, 519 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 520 }, 521 522 /* 8G */ 523 { 524 NX_CRYPTO_EC_POINT_AFFINE, 525 { 526 (HN_UBASE *)&secp192r1_fixed_points_data[12], 527 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 528 }, 529 { 530 (HN_UBASE *)&secp192r1_fixed_points_data[13], 531 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 532 }, 533 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 534 }, 535 536 /* 9G */ 537 { 538 NX_CRYPTO_EC_POINT_AFFINE, 539 { 540 (HN_UBASE *)&secp192r1_fixed_points_data[14], 541 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 542 }, 543 { 544 (HN_UBASE *)&secp192r1_fixed_points_data[15], 545 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 546 }, 547 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 548 }, 549 550 /* 10G */ 551 { 552 NX_CRYPTO_EC_POINT_AFFINE, 553 { 554 (HN_UBASE *)&secp192r1_fixed_points_data[16], 555 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 556 }, 557 { 558 (HN_UBASE *)&secp192r1_fixed_points_data[17], 559 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 560 }, 561 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 562 }, 563 564 /* 11G */ 565 { 566 NX_CRYPTO_EC_POINT_AFFINE, 567 { 568 (HN_UBASE *)&secp192r1_fixed_points_data[18], 569 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 570 }, 571 { 572 (HN_UBASE *)&secp192r1_fixed_points_data[19], 573 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 574 }, 575 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 576 }, 577 578 /* 12G */ 579 { 580 NX_CRYPTO_EC_POINT_AFFINE, 581 { 582 (HN_UBASE *)&secp192r1_fixed_points_data[20], 583 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 584 }, 585 { 586 (HN_UBASE *)&secp192r1_fixed_points_data[21], 587 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 588 }, 589 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 590 }, 591 592 /* 13G */ 593 { 594 NX_CRYPTO_EC_POINT_AFFINE, 595 { 596 (HN_UBASE *)&secp192r1_fixed_points_data[22], 597 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 598 }, 599 { 600 (HN_UBASE *)&secp192r1_fixed_points_data[23], 601 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 602 }, 603 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 604 }, 605 606 /* 14G */ 607 { 608 NX_CRYPTO_EC_POINT_AFFINE, 609 { 610 (HN_UBASE *)&secp192r1_fixed_points_data[24], 611 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 612 }, 613 { 614 (HN_UBASE *)&secp192r1_fixed_points_data[25], 615 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 616 }, 617 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 618 }, 619 620 /* 15G */ 621 { 622 NX_CRYPTO_EC_POINT_AFFINE, 623 { 624 (HN_UBASE *)&secp192r1_fixed_points_data[26], 625 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 626 }, 627 { 628 (HN_UBASE *)&secp192r1_fixed_points_data[27], 629 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 630 }, 631 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 632 } 633 }; 634 static NX_CRYPTO_CONST NX_CRYPTO_EC_POINT secp192r1_fixed_points_2e_array[] = 635 { 636 637 /* 2^e * 1G */ 638 { 639 NX_CRYPTO_EC_POINT_AFFINE, 640 { 641 (HN_UBASE *)&secp192r1_fixed_points_2e_data[0], 642 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 643 }, 644 { 645 (HN_UBASE *)&secp192r1_fixed_points_2e_data[1], 646 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 647 }, 648 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 649 }, 650 651 /* 2^e * 2G */ 652 { 653 NX_CRYPTO_EC_POINT_AFFINE, 654 { 655 (HN_UBASE *)&secp192r1_fixed_points_2e_data[2], 656 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 657 }, 658 { 659 (HN_UBASE *)&secp192r1_fixed_points_2e_data[3], 660 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 661 }, 662 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 663 }, 664 665 /* 2^e * 3G */ 666 { 667 NX_CRYPTO_EC_POINT_AFFINE, 668 { 669 (HN_UBASE *)&secp192r1_fixed_points_2e_data[4], 670 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 671 }, 672 { 673 (HN_UBASE *)&secp192r1_fixed_points_2e_data[5], 674 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 675 }, 676 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 677 }, 678 679 /* 2^e * 4G */ 680 { 681 NX_CRYPTO_EC_POINT_AFFINE, 682 { 683 (HN_UBASE *)&secp192r1_fixed_points_2e_data[6], 684 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 685 }, 686 { 687 (HN_UBASE *)&secp192r1_fixed_points_2e_data[7], 688 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 689 }, 690 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 691 }, 692 693 /* 2^e * 5G */ 694 { 695 NX_CRYPTO_EC_POINT_AFFINE, 696 { 697 (HN_UBASE *)&secp192r1_fixed_points_2e_data[8], 698 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 699 }, 700 { 701 (HN_UBASE *)&secp192r1_fixed_points_2e_data[9], 702 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 703 }, 704 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 705 }, 706 707 /* 2^e * 6G */ 708 { 709 NX_CRYPTO_EC_POINT_AFFINE, 710 { 711 (HN_UBASE *)&secp192r1_fixed_points_2e_data[10], 712 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 713 }, 714 { 715 (HN_UBASE *)&secp192r1_fixed_points_2e_data[11], 716 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 717 }, 718 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 719 }, 720 721 /* 2^e * 7G */ 722 { 723 NX_CRYPTO_EC_POINT_AFFINE, 724 { 725 (HN_UBASE *)&secp192r1_fixed_points_2e_data[12], 726 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 727 }, 728 { 729 (HN_UBASE *)&secp192r1_fixed_points_2e_data[13], 730 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 731 }, 732 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 733 }, 734 735 /* 2^e * 8G */ 736 { 737 NX_CRYPTO_EC_POINT_AFFINE, 738 { 739 (HN_UBASE *)&secp192r1_fixed_points_2e_data[14], 740 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 741 }, 742 { 743 (HN_UBASE *)&secp192r1_fixed_points_2e_data[15], 744 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 745 }, 746 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 747 }, 748 749 /* 2^e * 9G */ 750 { 751 NX_CRYPTO_EC_POINT_AFFINE, 752 { 753 (HN_UBASE *)&secp192r1_fixed_points_2e_data[16], 754 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 755 }, 756 { 757 (HN_UBASE *)&secp192r1_fixed_points_2e_data[17], 758 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 759 }, 760 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 761 }, 762 763 /* 2^e * 10G */ 764 { 765 NX_CRYPTO_EC_POINT_AFFINE, 766 { 767 (HN_UBASE *)&secp192r1_fixed_points_2e_data[18], 768 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 769 }, 770 { 771 (HN_UBASE *)&secp192r1_fixed_points_2e_data[19], 772 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 773 }, 774 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 775 }, 776 777 /* 2^e * 11G */ 778 { 779 NX_CRYPTO_EC_POINT_AFFINE, 780 { 781 (HN_UBASE *)&secp192r1_fixed_points_2e_data[20], 782 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 783 }, 784 { 785 (HN_UBASE *)&secp192r1_fixed_points_2e_data[21], 786 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 787 }, 788 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 789 }, 790 791 /* 2^e * 12G */ 792 { 793 NX_CRYPTO_EC_POINT_AFFINE, 794 { 795 (HN_UBASE *)&secp192r1_fixed_points_2e_data[22], 796 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 797 }, 798 { 799 (HN_UBASE *)&secp192r1_fixed_points_2e_data[23], 800 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 801 }, 802 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 803 }, 804 805 /* 2^e * 13G */ 806 { 807 NX_CRYPTO_EC_POINT_AFFINE, 808 { 809 (HN_UBASE *)&secp192r1_fixed_points_2e_data[24], 810 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 811 }, 812 { 813 (HN_UBASE *)&secp192r1_fixed_points_2e_data[25], 814 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 815 }, 816 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 817 }, 818 819 /* 2^e * 14G */ 820 { 821 NX_CRYPTO_EC_POINT_AFFINE, 822 { 823 (HN_UBASE *)&secp192r1_fixed_points_2e_data[26], 824 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 825 }, 826 { 827 (HN_UBASE *)&secp192r1_fixed_points_2e_data[27], 828 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 829 }, 830 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 831 }, 832 833 /* 2^e * 15G */ 834 { 835 NX_CRYPTO_EC_POINT_AFFINE, 836 { 837 (HN_UBASE *)&secp192r1_fixed_points_2e_data[28], 838 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 839 }, 840 { 841 (HN_UBASE *)&secp192r1_fixed_points_2e_data[29], 842 24 >> HN_SIZE_SHIFT, 24, (UINT)NX_CRYPTO_FALSE 843 }, 844 {(HN_UBASE *)NX_CRYPTO_NULL, 0u, 0u, 0u} 845 } 846 }; 847 848 849 NX_CRYPTO_CONST NX_CRYPTO_EC_FIXED_POINTS _nx_crypto_ec_secp192r1_fixed_points = 850 { 851 4u, 196u, 49u, 25u, 852 (NX_CRYPTO_EC_POINT *)secp192r1_fixed_points_array, 853 (NX_CRYPTO_EC_POINT *)secp192r1_fixed_points_2e_array 854 }; 855 856