blob: 77a0005e84af8aed30d876bff89c01e1d0761d6e [file] [log] [blame]
Vadim Bendebury56797522015-05-20 10:32:25 -07001// 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
Vadim Bendebury0a050712015-05-29 11:35:04 -07008#include "TPM_Types.h"
9#include "CpriDataEcc.h"
10
Vadim Bendebury56797522015-05-20 10:32:25 -070011TPM2B_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
Vadim Bendebury0a050712015-05-29 11:35:04 -070024const TPM2B_24_BYTE_VALUE NIST_P192_p = { .t = {24,
Vadim Bendebury56797522015-05-20 10:32:25 -070025 {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
26 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
Vadim Bendebury0a050712015-05-29 11:35:04 -070027 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}}};
28const TPM2B_24_BYTE_VALUE NIST_P192_a = { .t = {24,
Vadim Bendebury56797522015-05-20 10:32:25 -070029 {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
30 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
Vadim Bendebury0a050712015-05-29 11:35:04 -070031 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC}}};
32const TPM2B_24_BYTE_VALUE NIST_P192_b = { .t = {24,
Vadim Bendebury56797522015-05-20 10:32:25 -070033 {0x64, 0x21, 0x05, 0x19, 0xE5, 0x9C, 0x80, 0xE7,
34 0x0F, 0xA7, 0xE9, 0xAB, 0x72, 0x24, 0x30, 0x49,
Vadim Bendebury0a050712015-05-29 11:35:04 -070035 0xFE, 0xB8, 0xDE, 0xEC, 0xC1, 0x46, 0xB9, 0xB1}}};
36const TPM2B_24_BYTE_VALUE NIST_P192_gX = { .t = {24,
Vadim Bendebury56797522015-05-20 10:32:25 -070037 {0x18, 0x8D, 0xA8, 0x0E, 0xB0, 0x30, 0x90, 0xF6,
38 0x7C, 0xBF, 0x20, 0xEB, 0x43, 0xA1, 0x88, 0x00,
Vadim Bendebury0a050712015-05-29 11:35:04 -070039 0xF4, 0xFF, 0x0A, 0xFD, 0x82, 0xFF, 0x10, 0x12}}};
40const TPM2B_24_BYTE_VALUE NIST_P192_gY = { .t = {24,
Vadim Bendebury56797522015-05-20 10:32:25 -070041 {0x07, 0x19, 0x2B, 0x95, 0xFFC, 0x8D, 0xA7, 0x86,
42 0x31, 0x01, 0x1ED, 0x6B, 0x24, 0xCD, 0xD5, 0x73,
Vadim Bendebury0a050712015-05-29 11:35:04 -070043 0xF9, 0x77, 0xA1, 0x1E, 0x79, 0x48, 0x11}}};
44const TPM2B_24_BYTE_VALUE NIST_P192_n = { .t = {24,
Vadim Bendebury56797522015-05-20 10:32:25 -070045 {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
46 0xFF, 0xFF, 0xFF, 0xFF, 0x99, 0xDE, 0xF8, 0x36,
Vadim Bendebury0a050712015-05-29 11:35:04 -070047 0x14, 0x6B, 0xC9, 0xB1, 0xB4, 0xD2, 0x28, 0x31}}};
48const TPM2B_1_BYTE_VALUE NIST_P192_h = { .t = {1,{1}}};
Vadim Bendebury56797522015-05-20 10:32:25 -070049const 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
Vadim Bendebury0a050712015-05-29 11:35:04 -070054const TPM2B_28_BYTE_VALUE NIST_P224_p = { .t = {28,
Vadim Bendebury56797522015-05-20 10:32:25 -070055 {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,
Vadim Bendebury0a050712015-05-29 11:35:04 -070058 0x00, 0x00, 0x00, 0x01}}};
59const TPM2B_28_BYTE_VALUE NIST_P224_a = { .t = {28,
Vadim Bendebury56797522015-05-20 10:32:25 -070060 {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,
Vadim Bendebury0a050712015-05-29 11:35:04 -070063 0xFF, 0xFF, 0xFF, 0xFE}}};
64const TPM2B_28_BYTE_VALUE NIST_P224_b = { .t = {28,
Vadim Bendebury56797522015-05-20 10:32:25 -070065 {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,
Vadim Bendebury0a050712015-05-29 11:35:04 -070068 0x23, 0x55, 0xFF, 0xB4}}};
69const TPM2B_28_BYTE_VALUE NIST_P224_gX = { .t = {28,
Vadim Bendebury56797522015-05-20 10:32:25 -070070 {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,
Vadim Bendebury0a050712015-05-29 11:35:04 -070073 0x11, 0x5C, 0x1D, 0x21}}};
74const TPM2B_28_BYTE_VALUE NIST_P224_gY = { .t = {28,
Vadim Bendebury56797522015-05-20 10:32:25 -070075 {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,
Vadim Bendebury0a050712015-05-29 11:35:04 -070078 0x85, 0x00, 0x7E, 0x34}}};
79const TPM2B_28_BYTE_VALUE NIST_P224_n = { .t = {28,
Vadim Bendebury56797522015-05-20 10:32:25 -070080 {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,
Vadim Bendebury0a050712015-05-29 11:35:04 -070083 0x5C, 0x5C, 0x2A, 0x3D}}};
84const TPM2B_1_BYTE_VALUE NIST_P224_h = { .t = {1,{1}}};
Vadim Bendebury56797522015-05-20 10:32:25 -070085const 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
Vadim Bendebury0a050712015-05-29 11:35:04 -070090const TPM2B_32_BYTE_VALUE NIST_P256_p = { .t = {32,
Vadim Bendebury56797522015-05-20 10:32:25 -070091 {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,
Vadim Bendebury0a050712015-05-29 11:35:04 -070094 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}}};
95const TPM2B_32_BYTE_VALUE NIST_P256_a = { .t = {32,
Vadim Bendebury56797522015-05-20 10:32:25 -070096 {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,
Vadim Bendebury0a050712015-05-29 11:35:04 -070099 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC}}};
100const TPM2B_32_BYTE_VALUE NIST_P256_b = { .t = {32,
Vadim Bendebury56797522015-05-20 10:32:25 -0700101 {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,
Vadim Bendebury0a050712015-05-29 11:35:04 -0700104 0x3B, 0xCE, 0x3C, 0x3E, 0x27, 0xD2, 0x60, 0x4B}}};
105const TPM2B_32_BYTE_VALUE NIST_P256_gX = { .t = {32,
Vadim Bendebury56797522015-05-20 10:32:25 -0700106 {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,
Vadim Bendebury0a050712015-05-29 11:35:04 -0700109 0xF4, 0xA1, 0x39, 0x45, 0xD8, 0x98, 0xC2, 0x96}}};
110const TPM2B_32_BYTE_VALUE NIST_P256_gY = { .t = {32,
Vadim Bendebury56797522015-05-20 10:32:25 -0700111 {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,
Vadim Bendebury0a050712015-05-29 11:35:04 -0700114 0xCB, 0xB6, 0x40, 0x68, 0x37, 0xBF, 0x51, 0xF5}}};
115const TPM2B_32_BYTE_VALUE NIST_P256_n = { .t = {32,
Vadim Bendebury56797522015-05-20 10:32:25 -0700116 {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,
Vadim Bendebury0a050712015-05-29 11:35:04 -0700119 0xF3, 0xB9, 0xCA, 0xC2, 0xFC, 0x63, 0x25, 0x51}}};
120const TPM2B_1_BYTE_VALUE NIST_P256_h = { .t = {1,{1}}};
Vadim Bendebury56797522015-05-20 10:32:25 -0700121const 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
Vadim Bendebury0a050712015-05-29 11:35:04 -0700126const TPM2B_48_BYTE_VALUE NIST_P384_p = { .t = {48,
Vadim Bendebury56797522015-05-20 10:32:25 -0700127 {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,
Vadim Bendebury0a050712015-05-29 11:35:04 -0700132 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF}}};
133const TPM2B_48_BYTE_VALUE NIST_P384_a = { .t = {48,
Vadim Bendebury56797522015-05-20 10:32:25 -0700134 {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,
Vadim Bendebury0a050712015-05-29 11:35:04 -0700139 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFC}}};
140const TPM2B_48_BYTE_VALUE NIST_P384_b = { .t = {48,
Vadim Bendebury56797522015-05-20 10:32:25 -0700141 {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,
Vadim Bendebury0a050712015-05-29 11:35:04 -0700146 0x2A, 0x85, 0xC8, 0xED, 0xD3, 0xEC, 0x2A, 0xEF}}};
147const TPM2B_48_BYTE_VALUE NIST_P384_gX = { .t = {48,
Vadim Bendebury56797522015-05-20 10:32:25 -0700148 {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,
Vadim Bendebury0a050712015-05-29 11:35:04 -0700153 0x3A, 0x54, 0x5E, 0x38, 0x72, 0x76, 0x0A, 0xB7}}};
154const TPM2B_48_BYTE_VALUE NIST_P384_gY = { .t = {48,
Vadim Bendebury56797522015-05-20 10:32:25 -0700155 {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,
Vadim Bendebury0a050712015-05-29 11:35:04 -0700160 0x7A, 0x43, 0x1D, 0x7C, 0x90, 0xEA, 0x0E, 0x5F}}};
161const TPM2B_48_BYTE_VALUE NIST_P384_n = { .t = {48,
Vadim Bendebury56797522015-05-20 10:32:25 -0700162 {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,
Vadim Bendebury0a050712015-05-29 11:35:04 -0700167 0xEC, 0xEC, 0x19, 0x6A, 0xCC, 0xC5, 0x29, 0x73}}};
168const TPM2B_1_BYTE_VALUE NIST_P384_h = { .t = {1,{1}}};
Vadim Bendebury56797522015-05-20 10:32:25 -0700169const 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
Vadim Bendebury0a050712015-05-29 11:35:04 -0700174const TPM2B_66_BYTE_VALUE NIST_P521_p = { .t = {66,
Vadim Bendebury56797522015-05-20 10:32:25 -0700175 {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,
Vadim Bendebury0a050712015-05-29 11:35:04 -0700183 0xFF, 0xFF}}};
184const TPM2B_66_BYTE_VALUE NIST_P521_a = { .t = {66,
Vadim Bendebury56797522015-05-20 10:32:25 -0700185 {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,
Vadim Bendebury0a050712015-05-29 11:35:04 -0700193 0xFF, 0xFC}}};
194const TPM2B_66_BYTE_VALUE NIST_P521_b = { .t = {66,
Vadim Bendebury56797522015-05-20 10:32:25 -0700195 {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,
Vadim Bendebury0a050712015-05-29 11:35:04 -0700203 0x3F, 0x00}}};
204const TPM2B_66_BYTE_VALUE NIST_P521_gX = { .t = {66,
Vadim Bendebury56797522015-05-20 10:32:25 -0700205 {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,
Vadim Bendebury0a050712015-05-29 11:35:04 -0700213 0xBD, 0x66}}};
214const TPM2B_66_BYTE_VALUE NIST_P521_gY = { .t = {66,
Vadim Bendebury56797522015-05-20 10:32:25 -0700215 {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,
Vadim Bendebury0a050712015-05-29 11:35:04 -0700223 0x66, 0x50}}};
224const TPM2B_66_BYTE_VALUE NIST_P521_n = { .t = {66,
Vadim Bendebury56797522015-05-20 10:32:25 -0700225 {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,
Vadim Bendebury0a050712015-05-29 11:35:04 -0700233 0x64, 0x09}}};
234const TPM2B_1_BYTE_VALUE NIST_P521_h = { .t = {1,{1}}};
Vadim Bendebury56797522015-05-20 10:32:25 -0700235const 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
Vadim Bendebury0a050712015-05-29 11:35:04 -0700240const TPM2B_32_BYTE_VALUE BN_P256_p = { .t = {32,
Vadim Bendebury56797522015-05-20 10:32:25 -0700241 {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,
Vadim Bendebury0a050712015-05-29 11:35:04 -0700244 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,
Vadim Bendebury56797522015-05-20 10:32:25 -0700250 {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,
Vadim Bendebury0a050712015-05-29 11:35:04 -0700253 0XF6, 0X2D, 0X53, 0X6C, 0XD1, 0X0B, 0X50, 0X0D}}};
254const TPM2B_1_BYTE_VALUE BN_P256_h = { .t = {1,{1}}};
Vadim Bendebury56797522015-05-20 10:32:25 -0700255const 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
Vadim Bendebury0a050712015-05-29 11:35:04 -0700260const TPM2B_80_BYTE_VALUE BN_P638_p = { .t = {80,
Vadim Bendebury56797522015-05-20 10:32:25 -0700261 {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,
Vadim Bendebury0a050712015-05-29 11:35:04 -0700270 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,
Vadim Bendebury56797522015-05-20 10:32:25 -0700274 {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,
Vadim Bendebury0a050712015-05-29 11:35:04 -0700283 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,
Vadim Bendebury56797522015-05-20 10:32:25 -0700286 {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,
Vadim Bendebury0a050712015-05-29 11:35:04 -0700295 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61}}};
296const TPM2B_1_BYTE_VALUE BN_P638_h = { .t = {1,{1}}};
Vadim Bendebury56797522015-05-20 10:32:25 -0700297const 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
Vadim Bendebury0a050712015-05-29 11:35:04 -0700302const TPM2B_32_BYTE_VALUE SM2_P256_p = { .t = {32,
Vadim Bendebury56797522015-05-20 10:32:25 -0700303 {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,
Vadim Bendebury0a050712015-05-29 11:35:04 -0700306 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}}};
307const TPM2B_32_BYTE_VALUE SM2_P256_a = { .t = {32,
Vadim Bendebury56797522015-05-20 10:32:25 -0700308 {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,
Vadim Bendebury0a050712015-05-29 11:35:04 -0700311 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC}}};
312const TPM2B_32_BYTE_VALUE SM2_P256_b = { .t = {32,
Vadim Bendebury56797522015-05-20 10:32:25 -0700313 {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,
Vadim Bendebury0a050712015-05-29 11:35:04 -0700316 0xDD, 0xBC, 0xBD, 0x41, 0x4D, 0x94, 0x0E, 0x93}}};
317const TPM2B_32_BYTE_VALUE SM2_P256_gX = { .t = {32,
Vadim Bendebury56797522015-05-20 10:32:25 -0700318 {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,
Vadim Bendebury0a050712015-05-29 11:35:04 -0700321 0x71, 0x5A, 0x45, 0x89, 0x33, 0x4C, 0x74, 0xC7}}};
322const TPM2B_32_BYTE_VALUE SM2_P256_gY = { .t = {32,
Vadim Bendebury56797522015-05-20 10:32:25 -0700323 {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,
Vadim Bendebury0a050712015-05-29 11:35:04 -0700326 0x02, 0xDF, 0x32, 0xE5, 0x21, 0x39, 0xF0, 0xA0}}};
327const TPM2B_32_BYTE_VALUE SM2_P256_n = { .t = {32,
Vadim Bendebury56797522015-05-20 10:32:25 -0700328 {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,
Vadim Bendebury0a050712015-05-29 11:35:04 -0700331 0x53, 0xBB, 0xF4, 0x09, 0x39, 0xD5, 0x41, 0x23}}};
332const TPM2B_1_BYTE_VALUE SM2_P256_h = { .t = {1,{1}}};
Vadim Bendebury56797522015-05-20 10:32:25 -0700333const 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,
Vadim Bendebury0a050712015-05-29 11:35:04 -0700363 {TPM_ALG_KDF1_SP800_56A,{{TPM_ALG_SHA256}}},
364 {TPM_ALG_NULL,{{TPM_ALG_NULL}}},
Vadim Bendebury56797522015-05-20 10:32:25 -0700365 &NIST_P256}
366# undef comma
367# define comma ,
368#endif // ECC_NIST_P256
369#if defined ECC_NIST_P384 && ECC_NIST_P384 == YES
370 comma
371 {TPM_ECC_NIST_P384,
372 384,
Vadim Bendebury0a050712015-05-29 11:35:04 -0700373 {TPM_ALG_KDF1_SP800_56A,{{TPM_ALG_SHA384}}},
374 {TPM_ALG_NULL,{{TPM_ALG_NULL}}},
Vadim Bendebury56797522015-05-20 10:32:25 -0700375 &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,
Vadim Bendebury0a050712015-05-29 11:35:04 -0700393 {TPM_ALG_NULL,{{TPM_ALG_NULL}}},
394 {TPM_ALG_NULL,{{TPM_ALG_NULL}}},
Vadim Bendebury56797522015-05-20 10:32:25 -0700395 &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);