Home | History | Annotate | Download | only in tpm2
      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