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