1// This file was extracted from the TCG Published
2// Trusted Platform Module Library
3// Part 4: Supporting Routines
4// Family "2.0"
5// Level 00 Revision 01.16
6// October 30, 2014
7
8#include "TPM_Types.h"
9#include "CpriDataEcc.h"
10
11TPM2B_BYTE_VALUE(1);
12TPM2B_BYTE_VALUE(16);
13TPM2B_BYTE_VALUE(2);
14TPM2B_BYTE_VALUE(24);
15TPM2B_BYTE_VALUE(28);
16TPM2B_BYTE_VALUE(32);
17TPM2B_BYTE_VALUE(4);
18TPM2B_BYTE_VALUE(48);
19TPM2B_BYTE_VALUE(64);
20TPM2B_BYTE_VALUE(66);
21TPM2B_BYTE_VALUE(8);
22TPM2B_BYTE_VALUE(80);
23#if defined ECC_NIST_P192 && ECC_NIST_P192 == YES
24const TPM2B_24_BYTE_VALUE NIST_P192_p = { .t = {24,
25       {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
26        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
27        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}}};
28const TPM2B_24_BYTE_VALUE NIST_P192_a = { .t = {24,
29       {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
30        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
31        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC}}};
32const TPM2B_24_BYTE_VALUE NIST_P192_b = { .t = {24,
33       {0x64, 0x21, 0x05, 0x19, 0xE5, 0x9C, 0x80, 0xE7,
34        0x0F, 0xA7, 0xE9, 0xAB, 0x72, 0x24, 0x30, 0x49,
35        0xFE, 0xB8, 0xDE, 0xEC, 0xC1, 0x46, 0xB9, 0xB1}}};
36const TPM2B_24_BYTE_VALUE NIST_P192_gX = { .t = {24,
37       {0x18, 0x8D, 0xA8, 0x0E, 0xB0, 0x30, 0x90, 0xF6,
38        0x7C, 0xBF, 0x20, 0xEB, 0x43, 0xA1, 0x88, 0x00,
39        0xF4, 0xFF, 0x0A, 0xFD, 0x82, 0xFF, 0x10, 0x12}}};
40const TPM2B_24_BYTE_VALUE NIST_P192_gY = { .t = {24,
41       {0x07, 0x19, 0x2B, 0x95, 0xFFC, 0x8D, 0xA7, 0x86,
42        0x31, 0x01, 0x1ED, 0x6B, 0x24, 0xCD, 0xD5, 0x73,
43        0xF9, 0x77, 0xA1, 0x1E, 0x79, 0x48, 0x11}}};
44const TPM2B_24_BYTE_VALUE NIST_P192_n = { .t = {24,
45       {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
46        0xFF, 0xFF, 0xFF, 0xFF, 0x99, 0xDE, 0xF8, 0x36,
47        0x14, 0x6B, 0xC9, 0xB1, 0xB4, 0xD2, 0x28, 0x31}}};
48const TPM2B_1_BYTE_VALUE NIST_P192_h = { .t = {1,{1}}};
49const ECC_CURVE_DATA NIST_P192 = {&NIST_P192_p.b, &NIST_P192_a.b, &NIST_P192_b.b,
50                                  &NIST_P192_gX.b, &NIST_P192_gY.b, &NIST_P192_n.b,
51                                  &NIST_P192_h.b};
52#endif // ECC_NIST_P192
53#if defined ECC_NIST_P224 && ECC_NIST_P224 == YES
54const TPM2B_28_BYTE_VALUE NIST_P224_p = { .t = {28,
55       {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
56        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
57        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
58        0x00, 0x00, 0x00, 0x01}}};
59const TPM2B_28_BYTE_VALUE NIST_P224_a = { .t = {28,
60       {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
61        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
62        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
63        0xFF, 0xFF, 0xFF, 0xFE}}};
64const TPM2B_28_BYTE_VALUE NIST_P224_b = { .t = {28,
65       {0xB4, 0x05, 0x0A, 0x85, 0x0C, 0x04, 0xB3, 0xAB,
66        0xF5, 0x41, 0x32, 0x56, 0x50, 0x44, 0xB0, 0xB7,
67        0xD7, 0xBF, 0xD8, 0xBA, 0x27, 0x0B, 0x39, 0x43,
68        0x23, 0x55, 0xFF, 0xB4}}};
69const TPM2B_28_BYTE_VALUE NIST_P224_gX = { .t = {28,
70       {0xB7, 0x0E, 0x0C, 0xBD, 0x6B, 0xB4, 0xBF, 0x7F,
71        0x32, 0x13, 0x90, 0xB9, 0x4A, 0x03, 0xC1, 0xD3,
72        0x56, 0xC2, 0x11, 0x22, 0x34, 0x32, 0x80, 0xD6,
73        0x11, 0x5C, 0x1D, 0x21}}};
74const TPM2B_28_BYTE_VALUE NIST_P224_gY = { .t = {28,
75       {0xBD, 0x37, 0x63, 0x88, 0xB5, 0xF7, 0x23, 0xFB,
76        0x4C, 0x22, 0xDF, 0xE6, 0xCD, 0x43, 0x75, 0xA0,
77        0x5A, 0x07, 0x47, 0x64, 0x44, 0xD5, 0x81, 0x99,
78        0x85, 0x00, 0x7E, 0x34}}};
79const TPM2B_28_BYTE_VALUE NIST_P224_n = { .t = {28,
80       {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
81        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x16, 0xA2,
82        0xE0, 0xB8, 0xF0, 0x3E, 0x13, 0xDD, 0x29, 0x45,
83        0x5C, 0x5C, 0x2A, 0x3D}}};
84const TPM2B_1_BYTE_VALUE NIST_P224_h = { .t = {1,{1}}};
85const ECC_CURVE_DATA NIST_P224 = {&NIST_P224_p.b, &NIST_P224_a.b, &NIST_P224_b.b,
86                                  &NIST_P224_gX.b, &NIST_P224_gY.b, &NIST_P224_n.b,
87                                  &NIST_P224_h.b};
88#endif // ECC_NIST_P224
89#if defined ECC_NIST_P256 && ECC_NIST_P256 == YES
90const TPM2B_32_BYTE_VALUE NIST_P256_p = { .t = {32,
91       {0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x01,
92        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
93        0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
94        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}}};
95const TPM2B_32_BYTE_VALUE NIST_P256_a = { .t = {32,
96       {0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x01,
97        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
98        0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
99        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC}}};
100const TPM2B_32_BYTE_VALUE NIST_P256_b = { .t = {32,
101       {0x5A, 0xC6, 0x35, 0xD8, 0xAA, 0x3A, 0x93, 0xE7,
102        0xB3, 0xEB, 0xBD, 0x55, 0x76, 0x98, 0x86, 0xBC,
103        0x65, 0x1D, 0x06, 0xB0, 0xCC, 0x53, 0xB0, 0xF6,
104        0x3B, 0xCE, 0x3C, 0x3E, 0x27, 0xD2, 0x60, 0x4B}}};
105const TPM2B_32_BYTE_VALUE NIST_P256_gX = { .t = {32,
106       {0x6B, 0x17, 0xD1, 0xF2, 0xE1, 0x2C, 0x42, 0x47,
107        0xF8, 0xBC, 0xE6, 0xE5, 0x63, 0xA4, 0x40, 0xF2,
108        0x77, 0x03, 0x7D, 0x81, 0x2D, 0xEB, 0x33, 0xA0,
109        0xF4, 0xA1, 0x39, 0x45, 0xD8, 0x98, 0xC2, 0x96}}};
110const TPM2B_32_BYTE_VALUE NIST_P256_gY = { .t = {32,
111       {0x4F, 0xE3, 0x42, 0xE2, 0xFE, 0x1A, 0x7F, 0x9B,
112        0x8E, 0xE7, 0xEB, 0x4A, 0x7C, 0x0F, 0x9E, 0x16,
113        0x2B, 0xCE, 0x33, 0x57, 0x6B, 0x31, 0x5E, 0xCE,
114        0xCB, 0xB6, 0x40, 0x68, 0x37, 0xBF, 0x51, 0xF5}}};
115const TPM2B_32_BYTE_VALUE NIST_P256_n = { .t = {32,
116       {0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
117        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
118        0xBC, 0xE6, 0xFA, 0xAD, 0xA7, 0x17, 0x9E, 0x84,
119        0xF3, 0xB9, 0xCA, 0xC2, 0xFC, 0x63, 0x25, 0x51}}};
120const TPM2B_1_BYTE_VALUE NIST_P256_h = { .t = {1,{1}}};
121const ECC_CURVE_DATA NIST_P256 = {&NIST_P256_p.b, &NIST_P256_a.b, &NIST_P256_b.b,
122                                  &NIST_P256_gX.b, &NIST_P256_gY.b, &NIST_P256_n.b,
123                                  &NIST_P256_h.b};
124#endif // ECC_NIST_P256
125#if defined ECC_NIST_P384 && ECC_NIST_P384 == YES
126const TPM2B_48_BYTE_VALUE NIST_P384_p = { .t = {48,
127       {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
128        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
129        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
130        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
131        0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
132        0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF}}};
133const TPM2B_48_BYTE_VALUE NIST_P384_a = { .t = {48,
134       {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
135        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
136        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
137        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
138        0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
139        0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFC}}};
140const TPM2B_48_BYTE_VALUE NIST_P384_b = { .t = {48,
141       {0xB3, 0x31, 0x2F, 0xA7, 0xE2, 0x3E, 0xE7, 0xE4,
142        0x98, 0x8E, 0x05, 0x6B, 0xE3, 0xF8, 0x2D, 0x19,
143        0x18, 0x1D, 0x9C, 0x6E, 0xFE, 0x81, 0x41, 0x12,
144        0x03, 0x14, 0x08, 0x8F, 0x50, 0x13, 0x87, 0x5A,
145        0xC6, 0x56, 0x39, 0x8D, 0x8A, 0x2E, 0xD1, 0x9D,
146        0x2A, 0x85, 0xC8, 0xED, 0xD3, 0xEC, 0x2A, 0xEF}}};
147const TPM2B_48_BYTE_VALUE NIST_P384_gX = { .t = {48,
148       {0xAA, 0x87, 0xCA, 0x22, 0xBE, 0x8B, 0x05, 0x37,
149        0x8E, 0xB1, 0xC7, 0x1E, 0xF3, 0x20, 0xAD, 0x74,
150        0x6E, 0x1D, 0x3B, 0x62, 0x8B, 0xA7, 0x9B, 0x98,
151        0x59, 0xF7, 0x41, 0xE0, 0x82, 0x54, 0x2A, 0x38,
152        0x55, 0x02, 0xF2, 0x5D, 0xBF, 0x55, 0x29, 0x6C,
153        0x3A, 0x54, 0x5E, 0x38, 0x72, 0x76, 0x0A, 0xB7}}};
154const TPM2B_48_BYTE_VALUE NIST_P384_gY = { .t = {48,
155       {0x36, 0x17, 0xDE, 0x4A, 0x96, 0x26, 0x2C, 0x6F,
156        0x5D, 0x9E, 0x98, 0xBF, 0x92, 0x92, 0xDC, 0x29,
157        0xF8, 0xF4, 0x1D, 0xBD, 0x28, 0x9A, 0x14, 0x7C,
158        0xE9, 0xDA, 0x31, 0x13, 0xB5, 0xF0, 0xB8, 0xC0,
159        0x0A, 0x60, 0xB1, 0xCE, 0x1D, 0x7E, 0x81, 0x9D,
160        0x7A, 0x43, 0x1D, 0x7C, 0x90, 0xEA, 0x0E, 0x5F}}};
161const TPM2B_48_BYTE_VALUE NIST_P384_n = { .t = {48,
162       {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
163        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
164        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
165        0xC7, 0x63, 0x4D, 0x81, 0xF4, 0x37, 0x2D, 0xDF,
166        0x58, 0x1A, 0x0D, 0xB2, 0x48, 0xB0, 0xA7, 0x7A,
167        0xEC, 0xEC, 0x19, 0x6A, 0xCC, 0xC5, 0x29, 0x73}}};
168const TPM2B_1_BYTE_VALUE NIST_P384_h = { .t = {1,{1}}};
169const ECC_CURVE_DATA NIST_P384 = {&NIST_P384_p.b, &NIST_P384_a.b, &NIST_P384_b.b,
170                                 &NIST_P384_gX.b, &NIST_P384_gY.b, &NIST_P384_n.b,
171                                 &NIST_P384_h.b};
172#endif // ECC_NIST_P384
173#if defined ECC_NIST_P521 && ECC_NIST_P521 == YES
174const TPM2B_66_BYTE_VALUE NIST_P521_p = { .t = {66,
175       {0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
176        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
177        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
178        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
179        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
180        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
181        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
182        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
183        0xFF, 0xFF}}};
184const TPM2B_66_BYTE_VALUE NIST_P521_a = { .t = {66,
185       {0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
186        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
187        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
188        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
189        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
190        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
191        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
192        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
193        0xFF, 0xFC}}};
194const TPM2B_66_BYTE_VALUE NIST_P521_b = { .t = {66,
195       {0x00, 0x51, 0x95, 0x3E, 0xB9, 0x61, 0x8E, 0x1C,
196        0x9A, 0x1F, 0x92, 0x9A, 0x21, 0xA0, 0xB6, 0x85,
197        0x40, 0xEE, 0xA2, 0xDA, 0x72, 0x5B, 0x99, 0xB3,
198        0x15, 0xF3, 0xB8, 0xB4, 0x89, 0x91, 0x8E, 0xF1,
199        0x09, 0xE1, 0x56, 0x19, 0x39, 0x51, 0xEC, 0x7E,
200        0x93, 0x7B, 0x16, 0x52, 0xC0, 0xBD, 0x3B, 0xB1,
201        0xBF, 0x07, 0x35, 0x73, 0xDF, 0x88, 0x3D, 0x2C,
202        0x34, 0xF1, 0xEF, 0x45, 0x1F, 0xD4, 0x6B, 0x50,
203        0x3F, 0x00}}};
204const TPM2B_66_BYTE_VALUE NIST_P521_gX = { .t = {66,
205       {0x00, 0xC6, 0x85, 0x8E, 0x06, 0xB7, 0x04, 0x04,
206        0xE9, 0xCD, 0x9E, 0x3E, 0xCB, 0x66, 0x23, 0x95,
207        0xB4, 0x42, 0x9C, 0x64, 0x81, 0x39, 0x05, 0x3F,
208        0xB5, 0x21, 0xF8, 0x28, 0xAF, 0x60, 0x6B, 0x4D,
209        0x3D, 0xBA, 0xA1, 0x4B, 0x5E, 0x77, 0xEF, 0xE7,
210        0x59, 0x28, 0xFE, 0x1D, 0xC1, 0x27, 0xA2, 0xFF,
211        0xA8, 0xDE, 0x33, 0x48, 0xB3, 0xC1, 0x85, 0x6A,
212        0x42, 0x9B, 0xF9, 0x7E, 0x7E, 0x31, 0xC2, 0xE5,
213        0xBD, 0x66}}};
214const TPM2B_66_BYTE_VALUE NIST_P521_gY = { .t = {66,
215       {0x01, 0x18, 0x39, 0x29, 0x6A, 0x78, 0x9A, 0x3B,
216        0xC0, 0x04, 0x5C, 0x8A, 0x5F, 0xB4, 0x2C, 0x7D,
217        0x1B, 0xD9, 0x98, 0xF5, 0x44, 0x49, 0x57, 0x9B,
218        0x44, 0x68, 0x17, 0xAF, 0xBD, 0x17, 0x27, 0x3E,
219        0x66, 0x2C, 0x97, 0xEE, 0x72, 0x99, 0x5E, 0xF4,
220        0x26, 0x40, 0xC5, 0x50, 0xB9, 0x01, 0x3F, 0xAD,
221        0x07, 0x61, 0x35, 0x3C, 0x70, 0x86, 0xA2, 0x72,
222        0xC2, 0x40, 0x88, 0xBE, 0x94, 0x76, 0x9F, 0xD1,
223        0x66, 0x50}}};
224const TPM2B_66_BYTE_VALUE NIST_P521_n = { .t = {66,
225       {0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
226        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
227        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
228        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
229        0xFF, 0xFA, 0x51, 0x86, 0x87, 0x83, 0xBF, 0x2F,
230        0x96, 0x6B, 0x7F, 0xCC, 0x01, 0x48, 0xF7, 0x09,
231        0xA5, 0xD0, 0x3B, 0xB5, 0xC9, 0xB8, 0x89, 0x9C,
232        0x47, 0xAE, 0xBB, 0x6F, 0xB7, 0x1E, 0x91, 0x38,
233        0x64, 0x09}}};
234const TPM2B_1_BYTE_VALUE NIST_P521_h = { .t = {1,{1}}};
235const ECC_CURVE_DATA NIST_P521 = {&NIST_P521_p.b, &NIST_P521_a.b, &NIST_P521_b.b,
236                                 &NIST_P521_gX.b, &NIST_P521_gY.b, &NIST_P521_n.b,
237                                 &NIST_P521_h.b};
238#endif // ECC_NIST_P521
239#if defined ECC_BN_P256 && ECC_BN_P256 == YES
240const TPM2B_32_BYTE_VALUE BN_P256_p = { .t = {32,
241       {0xFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0XF0, 0XCD,
242        0X46, 0XE5, 0XF2, 0X5E, 0XEE, 0X71, 0XA4, 0X9F,
243        0X0C, 0XDC, 0X65, 0XFB, 0X12, 0X98, 0X0A, 0X82,
244        0XD3, 0X29, 0X2D, 0XDB, 0XAE, 0XD3, 0X30, 0X13}}};
245const TPM2B_1_BYTE_VALUE BN_P256_a = { .t = {1,{0}}};
246const TPM2B_1_BYTE_VALUE BN_P256_b = { .t = {1,{3}}};
247const TPM2B_1_BYTE_VALUE BN_P256_gX = { .t = {1,{1}}};
248const TPM2B_1_BYTE_VALUE BN_P256_gY = { .t = {1,{2}}};;
249const TPM2B_32_BYTE_VALUE BN_P256_n = { .t = {32,
250       {0xFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0XF0, 0XCD,
251        0X46, 0XE5, 0XF2, 0X5E, 0XEE, 0X71, 0XA4, 0X9E,
252        0X0C, 0XDC, 0X65, 0XFB, 0X12, 0X99, 0X92, 0X1A,
253        0XF6, 0X2D, 0X53, 0X6C, 0XD1, 0X0B, 0X50, 0X0D}}};
254const TPM2B_1_BYTE_VALUE BN_P256_h = { .t = {1,{1}}};
255const ECC_CURVE_DATA BN_P256 = {&BN_P256_p.b, &BN_P256_a.b, &BN_P256_b.b,
256                                 &BN_P256_gX.b, &BN_P256_gY.b, &BN_P256_n.b,
257                                 &BN_P256_h.b};
258#endif // ECC_BN_P256
259#if defined ECC_BN_P638 && ECC_BN_P638 == YES
260const TPM2B_80_BYTE_VALUE BN_P638_p = { .t = {80,
261       {0x23, 0xFF, 0xFF, 0xFD, 0xC0, 0x00, 0x00, 0x0D,
262        0x7F, 0xFF, 0xFF, 0xB8, 0x00, 0x00, 0x01, 0xD3,
263        0xFF, 0xFF, 0xF9, 0x42, 0xD0, 0x00, 0x16, 0x5E,
264        0x3F, 0xFF, 0x94, 0x87, 0x00, 0x00, 0xD5, 0x2F,
265        0xFF, 0xFD, 0xD0, 0xE0, 0x00, 0x08, 0xDE, 0x55,
266        0xC0, 0x00, 0x86, 0x52, 0x00, 0x21, 0xE5, 0x5B,
267        0xFF, 0xFF, 0xF5, 0x1F, 0xFF, 0xF4, 0xEB, 0x80,
268        0x00, 0x00, 0x00, 0x4C, 0x80, 0x01, 0x5A, 0xCD,
269        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEC, 0xE0,
270        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67}}};
271const TPM2B_1_BYTE_VALUE BN_P638_a = { .t = {1,{0}}};
272const TPM2B_2_BYTE_VALUE BN_P638_b = { .t = {2,{0x01,0x01}}};
273const TPM2B_80_BYTE_VALUE BN_P638_gX = { .t = {80,
274       {0x23, 0xFF, 0xFF, 0xFD, 0xC0, 0x00, 0x00, 0x0D,
275        0x7F, 0xFF, 0xFF, 0xB8, 0x00, 0x00, 0x01, 0xD3,
276        0xFF, 0xFF, 0xF9, 0x42, 0xD0, 0x00, 0x16, 0x5E,
277        0x3F, 0xFF, 0x94, 0x87, 0x00, 0x00, 0xD5, 0x2F,
278        0xFF, 0xFD, 0xD0, 0xE0, 0x00, 0x08, 0xDE, 0x55,
279        0xC0, 0x00, 0x86, 0x52, 0x00, 0x21, 0xE5, 0x5B,
280        0xFF, 0xFF, 0xF5, 0x1F, 0xFF, 0xF4, 0xEB, 0x80,
281        0x00, 0x00, 0x00, 0x4C, 0x80, 0x01, 0x5A, 0xCD,
282        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEC, 0xE0,
283        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66}}};
284const TPM2B_1_BYTE_VALUE BN_P638_gY = { .t = {1,{0x10}}};
285const TPM2B_80_BYTE_VALUE BN_P638_n = { .t = {80,
286       {0x23, 0xFF, 0xFF, 0xFD, 0xC0, 0x00, 0x00, 0x0D,
287        0x7F, 0xFF, 0xFF, 0xB8, 0x00, 0x00, 0x01, 0xD3,
288        0xFF, 0xFF, 0xF9, 0x42, 0xD0, 0x00, 0x16, 0x5E,
289        0x3F, 0xFF, 0x94, 0x87, 0x00, 0x00, 0xD5, 0x2F,
290        0xFF, 0xFD, 0xD0, 0xE0, 0x00, 0x08, 0xDE, 0x55,
291        0x60, 0x00, 0x86, 0x55, 0x00, 0x21, 0xE5, 0x55,
292        0xFF, 0xFF, 0xF5, 0x4F, 0xFF, 0xF4, 0xEA, 0xC0,
293        0x00, 0x00, 0x00, 0x49, 0x80, 0x01, 0x54, 0xD9,
294        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xED, 0xA0,
295        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61}}};
296const TPM2B_1_BYTE_VALUE BN_P638_h = { .t = {1,{1}}};
297const ECC_CURVE_DATA BN_P638 = {&BN_P638_p.b, &BN_P638_a.b, &BN_P638_b.b,
298                                 &BN_P638_gX.b, &BN_P638_gY.b, &BN_P638_n.b,
299                                 &BN_P638_h.b};
300#endif // ECC_BN_P638
301#if defined ECC_SM2_P256 && ECC_SM2_P256 == YES
302const TPM2B_32_BYTE_VALUE SM2_P256_p = { .t = {32,
303       {0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF,
304        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
305        0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
306        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}}};
307const TPM2B_32_BYTE_VALUE SM2_P256_a = { .t = {32,
308       {0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF,
309        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
310        0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
311        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC}}};
312const TPM2B_32_BYTE_VALUE SM2_P256_b = { .t = {32,
313       {0x28, 0xE9, 0xFA, 0x9E, 0x9D, 0x9F, 0x5E, 0x34,
314        0x4D, 0x5A, 0x9E, 0x4B, 0xCF, 0x65, 0x09, 0xA7,
315        0xF3, 0x97, 0x89, 0xF5, 0x15, 0xAB, 0x8F, 0x92,
316        0xDD, 0xBC, 0xBD, 0x41, 0x4D, 0x94, 0x0E, 0x93}}};
317const TPM2B_32_BYTE_VALUE SM2_P256_gX = { .t = {32,
318       {0x32, 0xC4, 0xAE, 0x2C, 0x1F, 0x19, 0x81, 0x19,
319        0x5F, 0x99, 0x04, 0x46, 0x6A, 0x39, 0xC9, 0x94,
320        0x8F, 0xE3, 0x0B, 0xBF, 0xF2, 0x66, 0x0B, 0xE1,
321        0x71, 0x5A, 0x45, 0x89, 0x33, 0x4C, 0x74, 0xC7}}};
322const TPM2B_32_BYTE_VALUE SM2_P256_gY = { .t = {32,
323       {0xBC, 0x37, 0x36, 0xA2, 0xF4, 0xF6, 0x77, 0x9C,
324        0x59, 0xBD, 0xCE, 0xE3, 0x6B, 0x69, 0x21, 0x53,
325        0xD0, 0xA9, 0x87, 0x7C, 0xC6, 0x2A, 0x47, 0x40,
326        0x02, 0xDF, 0x32, 0xE5, 0x21, 0x39, 0xF0, 0xA0}}};
327const TPM2B_32_BYTE_VALUE SM2_P256_n = { .t = {32,
328       {0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF,
329        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
330        0x72, 0x03, 0xDF, 0x6B, 0x21, 0xC6, 0x05, 0x2B,
331        0x53, 0xBB, 0xF4, 0x09, 0x39, 0xD5, 0x41, 0x23}}};
332const TPM2B_1_BYTE_VALUE SM2_P256_h = { .t = {1,{1}}};
333const ECC_CURVE_DATA SM2_P256 = {&SM2_P256_p.b, &SM2_P256_a.b, &SM2_P256_b.b,
334                                 &SM2_P256_gX.b, &SM2_P256_gY.b, &SM2_P256_n.b,
335                                  &SM2_P256_h.b};
336#endif // ECC_SM2_P256
337#define comma
338const ECC_CURVE    eccCurves[] = {
339#if defined ECC_NIST_P192 && ECC_NIST_P192 == YES
340   comma
341   {TPM_ECC_NIST_P192,
342   192,
343   {TPM_ALG_KDF1_SP800_56A,TPM_ALG_SHA256},
344   {TPM_ALG_NULL,TPM_ALG_NULL},
345   &NIST_P192}
346#   undef comma
347#   define comma ,
348#endif // ECC_NIST_P192
349#if defined ECC_NIST_P224 && ECC_NIST_P224 == YES
350   comma
351   {TPM_ECC_NIST_P224,
352   224,
353   {TPM_ALG_KDF1_SP800_56A,TPM_ALG_SHA256},
354   {TPM_ALG_NULL,TPM_ALG_NULL},
355   &NIST_P224}
356#   undef comma
357#   define comma ,
358#endif // ECC_NIST_P224
359#if defined ECC_NIST_P256 && ECC_NIST_P256 == YES
360   comma
361   {TPM_ECC_NIST_P256,
362   256,
363    {TPM_ALG_KDF1_SP800_56A,{{TPM_ALG_SHA256}}},
364    {TPM_ALG_NULL,{{TPM_ALG_NULL}}},
365   &NIST_P256}
366#   undef comma
367#   define comma ,
368#endif // ECC_NIST_P256
369#if defined ECC_NIST_P384 && ECC_NIST_P384 == YES && ALG_SHA384 == YES
370   comma
371   {TPM_ECC_NIST_P384,
372   384,
373    {TPM_ALG_KDF1_SP800_56A,{{TPM_ALG_SHA384}}},
374    {TPM_ALG_NULL,{{TPM_ALG_NULL}}},
375   &NIST_P384}
376#   undef comma
377#   define comma ,
378#endif // ECC_NIST_P384
379#if defined ECC_NIST_P521 && ECC_NIST_P521 == YES
380   comma
381   {TPM_ECC_NIST_P521,
382   521,
383   {TPM_ALG_KDF1_SP800_56A,TPM_ALG_SHA512},
384   {TPM_ALG_NULL,TPM_ALG_NULL},
385   &NIST_P521}
386#   undef comma
387#   define comma ,
388#endif // ECC_NIST_P521
389#if defined ECC_BN_P256 && ECC_BN_P256 == YES
390   comma
391   {TPM_ECC_BN_P256,
392   256,
393    {TPM_ALG_NULL,{{TPM_ALG_NULL}}},
394    {TPM_ALG_NULL,{{TPM_ALG_NULL}}},
395   &BN_P256}
396#   undef comma
397#   define comma ,
398#endif // ECC_BN_P256
399#if defined ECC_BN_P638 && ECC_BN_P638 == YES
400   comma
401   {TPM_ECC_BN_P638,
402   638,
403   {TPM_ALG_NULL,TPM_ALG_NULL},
404   {TPM_ALG_NULL,TPM_ALG_NULL},
405   &BN_P638}
406#   undef comma
407#   define comma ,
408#endif // ECC_BN_P638
409#if defined ECC_SM2_P256 && ECC_SM2_P256 == YES
410   comma
411   {TPM_ECC_SM2_P256,
412   256,
413   {TPM_ALG_KDF1_SP800_56A,TPM_ALG_SM3_256},
414   {TPM_ALG_NULL,TPM_ALG_NULL},
415   &SM2_P256}
416#   undef comma
417#   define comma ,
418#endif // ECC_SM2_P256
419};
420const UINT16    ECC_CURVE_COUNT = sizeof(eccCurves) / sizeof(ECC_CURVE);
421