• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
11 TPM2B_BYTE_VALUE(1);
12 TPM2B_BYTE_VALUE(16);
13 TPM2B_BYTE_VALUE(2);
14 TPM2B_BYTE_VALUE(24);
15 TPM2B_BYTE_VALUE(28);
16 TPM2B_BYTE_VALUE(32);
17 TPM2B_BYTE_VALUE(4);
18 TPM2B_BYTE_VALUE(48);
19 TPM2B_BYTE_VALUE(64);
20 TPM2B_BYTE_VALUE(66);
21 TPM2B_BYTE_VALUE(8);
22 TPM2B_BYTE_VALUE(80);
23 #if defined ECC_NIST_P192 && ECC_NIST_P192 == YES
24 const 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}}};
28 const 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}}};
32 const 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}}};
36 const 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}}};
40 const 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}}};
44 const 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}}};
48 const TPM2B_1_BYTE_VALUE NIST_P192_h = { .t = {1,{1}}};
49 const 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
54 const 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}}};
59 const 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}}};
64 const 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}}};
69 const 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}}};
74 const 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}}};
79 const 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}}};
84 const TPM2B_1_BYTE_VALUE NIST_P224_h = { .t = {1,{1}}};
85 const 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
90 const 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}}};
95 const 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}}};
100 const 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}}};
105 const 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}}};
110 const 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}}};
115 const 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}}};
120 const TPM2B_1_BYTE_VALUE NIST_P256_h = { .t = {1,{1}}};
121 const 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
126 const 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}}};
133 const 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}}};
140 const 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}}};
147 const 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}}};
154 const 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}}};
161 const 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}}};
168 const TPM2B_1_BYTE_VALUE NIST_P384_h = { .t = {1,{1}}};
169 const 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
174 const 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}}};
184 const 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}}};
194 const 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}}};
204 const 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}}};
214 const 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}}};
224 const 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}}};
234 const TPM2B_1_BYTE_VALUE NIST_P521_h = { .t = {1,{1}}};
235 const 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
240 const 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}}};
245 const TPM2B_1_BYTE_VALUE BN_P256_a = { .t = {1,{0}}};
246 const TPM2B_1_BYTE_VALUE BN_P256_b = { .t = {1,{3}}};
247 const TPM2B_1_BYTE_VALUE BN_P256_gX = { .t = {1,{1}}};
248 const TPM2B_1_BYTE_VALUE BN_P256_gY = { .t = {1,{2}}};;
249 const 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}}};
254 const TPM2B_1_BYTE_VALUE BN_P256_h = { .t = {1,{1}}};
255 const 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
260 const 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}}};
271 const TPM2B_1_BYTE_VALUE BN_P638_a = { .t = {1,{0}}};
272 const TPM2B_2_BYTE_VALUE BN_P638_b = { .t = {2,{0x01,0x01}}};
273 const 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}}};
284 const TPM2B_1_BYTE_VALUE BN_P638_gY = { .t = {1,{0x10}}};
285 const 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}}};
296 const TPM2B_1_BYTE_VALUE BN_P638_h = { .t = {1,{1}}};
297 const 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
302 const 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}}};
307 const 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}}};
312 const 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}}};
317 const 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}}};
322 const 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}}};
327 const 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}}};
332 const TPM2B_1_BYTE_VALUE SM2_P256_h = { .t = {1,{1}}};
333 const 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
338 const 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 };
420 const UINT16    ECC_CURVE_COUNT = sizeof(eccCurves) / sizeof(ECC_CURVE);
421