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