1*5c591343SA. Cody Schuffelen /* Microsoft Reference Implementation for TPM 2.0 2*5c591343SA. Cody Schuffelen * 3*5c591343SA. Cody Schuffelen * The copyright in this software is being made available under the BSD License, 4*5c591343SA. Cody Schuffelen * included below. This software may be subject to other third party and 5*5c591343SA. Cody Schuffelen * contributor rights, including patent rights, and no such rights are granted 6*5c591343SA. Cody Schuffelen * under this license. 7*5c591343SA. Cody Schuffelen * 8*5c591343SA. Cody Schuffelen * Copyright (c) Microsoft Corporation 9*5c591343SA. Cody Schuffelen * 10*5c591343SA. Cody Schuffelen * All rights reserved. 11*5c591343SA. Cody Schuffelen * 12*5c591343SA. Cody Schuffelen * BSD License 13*5c591343SA. Cody Schuffelen * 14*5c591343SA. Cody Schuffelen * Redistribution and use in source and binary forms, with or without modification, 15*5c591343SA. Cody Schuffelen * are permitted provided that the following conditions are met: 16*5c591343SA. Cody Schuffelen * 17*5c591343SA. Cody Schuffelen * Redistributions of source code must retain the above copyright notice, this list 18*5c591343SA. Cody Schuffelen * of conditions and the following disclaimer. 19*5c591343SA. Cody Schuffelen * 20*5c591343SA. Cody Schuffelen * Redistributions in binary form must reproduce the above copyright notice, this 21*5c591343SA. Cody Schuffelen * list of conditions and the following disclaimer in the documentation and/or 22*5c591343SA. Cody Schuffelen * other materials provided with the distribution. 23*5c591343SA. Cody Schuffelen * 24*5c591343SA. Cody Schuffelen * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ""AS IS"" 25*5c591343SA. Cody Schuffelen * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 26*5c591343SA. Cody Schuffelen * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 27*5c591343SA. Cody Schuffelen * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR 28*5c591343SA. Cody Schuffelen * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 29*5c591343SA. Cody Schuffelen * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 30*5c591343SA. Cody Schuffelen * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 31*5c591343SA. Cody Schuffelen * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 32*5c591343SA. Cody Schuffelen * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 33*5c591343SA. Cody Schuffelen * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 34*5c591343SA. Cody Schuffelen */ 35*5c591343SA. Cody Schuffelen //** Introduction 36*5c591343SA. Cody Schuffelen // This file contains structure definitions used for ECC. The 37*5c591343SA. Cody Schuffelen // structures in this file are only used internally. The ECC-related structures 38*5c591343SA. Cody Schuffelen // that cross the TPM interface are defined in TpmTypes.h 39*5c591343SA. Cody Schuffelen // 40*5c591343SA. Cody Schuffelen 41*5c591343SA. Cody Schuffelen #ifndef _CRYPT_ECC_H 42*5c591343SA. Cody Schuffelen #define _CRYPT_ECC_H 43*5c591343SA. Cody Schuffelen 44*5c591343SA. Cody Schuffelen //** Structures 45*5c591343SA. Cody Schuffelen 46*5c591343SA. Cody Schuffelen typedef struct ECC_CURVE 47*5c591343SA. Cody Schuffelen { 48*5c591343SA. Cody Schuffelen const TPM_ECC_CURVE curveId; 49*5c591343SA. Cody Schuffelen const UINT16 keySizeBits; 50*5c591343SA. Cody Schuffelen const TPMT_KDF_SCHEME kdf; 51*5c591343SA. Cody Schuffelen const TPMT_ECC_SCHEME sign; 52*5c591343SA. Cody Schuffelen const ECC_CURVE_DATA *curveData; // the address of the curve data 53*5c591343SA. Cody Schuffelen const BYTE *OID; 54*5c591343SA. Cody Schuffelen } ECC_CURVE; 55*5c591343SA. Cody Schuffelen 56*5c591343SA. Cody Schuffelen //*** Macros 57*5c591343SA. Cody Schuffelen 58*5c591343SA. Cody Schuffelen // This macro is used to instance an ECC_CURVE_DATA structure for the curve. This 59*5c591343SA. Cody Schuffelen // structure is referenced by the ECC_CURVE structure 60*5c591343SA. Cody Schuffelen #define CURVE_DATA_DEF(CURVE) \ 61*5c591343SA. Cody Schuffelen const ECC_CURVE_DATA CURVE = { \ 62*5c591343SA. Cody Schuffelen (bigNum)&CURVE##_p_DATA, (bigNum)&CURVE##_n_DATA, (bigNum)&CURVE##_h_DATA, \ 63*5c591343SA. Cody Schuffelen (bigNum)&CURVE##_a_DATA, (bigNum)&CURVE##_b_DATA, \ 64*5c591343SA. Cody Schuffelen {(bigNum)&CURVE##_gX_DATA, (bigNum)&CURVE##_gY_DATA, (bigNum)&BN_ONE} }; 65*5c591343SA. Cody Schuffelen 66*5c591343SA. Cody Schuffelen 67*5c591343SA. Cody Schuffelen extern const ECC_CURVE eccCurves[ECC_CURVE_COUNT]; 68*5c591343SA. Cody Schuffelen 69*5c591343SA. Cody Schuffelen #define CURVE_DEF(CURVE) \ 70*5c591343SA. Cody Schuffelen { \ 71*5c591343SA. Cody Schuffelen TPM_ECC_##CURVE, \ 72*5c591343SA. Cody Schuffelen CURVE##_KEY_SIZE, \ 73*5c591343SA. Cody Schuffelen CURVE##_KDF, \ 74*5c591343SA. Cody Schuffelen CURVE##_SIGN, \ 75*5c591343SA. Cody Schuffelen &##CURVE, \ 76*5c591343SA. Cody Schuffelen OID_ECC_##CURVE \ 77*5c591343SA. Cody Schuffelen } 78*5c591343SA. Cody Schuffelen 79*5c591343SA. Cody Schuffelen #define CURVE_NAME(N) 80*5c591343SA. Cody Schuffelen 81*5c591343SA. Cody Schuffelen 82*5c591343SA. Cody Schuffelen 83*5c591343SA. Cody Schuffelen #endif 84