You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
115 lines
4.8 KiB
115 lines
4.8 KiB
/* Microsoft Reference Implementation for TPM 2.0
|
|
*
|
|
* The copyright in this software is being made available under the BSD License,
|
|
* included below. This software may be subject to other third party and
|
|
* contributor rights, including patent rights, and no such rights are granted
|
|
* under this license.
|
|
*
|
|
* Copyright (c) Microsoft Corporation
|
|
*
|
|
* All rights reserved.
|
|
*
|
|
* BSD License
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without modification,
|
|
* are permitted provided that the following conditions are met:
|
|
*
|
|
* Redistributions of source code must retain the above copyright notice, this list
|
|
* of conditions and the following disclaimer.
|
|
*
|
|
* Redistributions in binary form must reproduce the above copyright notice, this
|
|
* list of conditions and the following disclaimer in the documentation and/or
|
|
* other materials provided with the distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ""AS IS""
|
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
//** Introduction
|
|
// This file contains the structure definitions used for ECC in the OpenSSL
|
|
// version of the code. These definitions would change, based on the library.
|
|
// The ECC-related structures that cross the TPM interface are defined
|
|
// in TpmTypes.h
|
|
//
|
|
|
|
#ifndef MATH_LIB_DEFINED
|
|
#define MATH_LIB_DEFINED
|
|
|
|
#define MATH_LIB_OSSL
|
|
|
|
#include <openssl/evp.h>
|
|
#include <openssl/ec.h>
|
|
|
|
#define SYMMETRIC_ALIGNMENT RADIX_BYTES
|
|
|
|
#include <openssl/bn.h>
|
|
|
|
//** Macros and Defines
|
|
|
|
// Make sure that the library is using the correct size for a crypt word
|
|
#if defined THIRTY_TWO_BIT && (RADIX_BITS != 32) \
|
|
|| ((defined SIXTY_FOUR_BIT_LONG || defined SIXTY_FOUR_BIT) \
|
|
&& (RADIX_BITS != 64))
|
|
# error Ossl library is using different radix
|
|
#endif
|
|
|
|
// Allocate a local BIGNUM value. For the allocation, a bigNum structure is created
|
|
// as is a local BIGNUM. The bigNum is initialized and then the BIGNUM is
|
|
// set to reference the local value.
|
|
#define BIG_VAR(name, bits) \
|
|
BN_VAR(name##Bn, (bits)); \
|
|
BIGNUM _##name; \
|
|
BIGNUM *name = BigInitialized(&_##name, \
|
|
BnInit(name##Bn, \
|
|
BYTES_TO_CRYPT_WORDS(sizeof(_##name##Bn.d))))
|
|
|
|
// Allocate a BIGNUM and initialize with the values in a bigNum initializer
|
|
#define BIG_INITIALIZED(name, initializer) \
|
|
BIGNUM _##name; \
|
|
BIGNUM *name = BigInitialized(&_##name, initializer)
|
|
|
|
|
|
typedef struct
|
|
{
|
|
const ECC_CURVE_DATA *C; // the TPM curve values
|
|
EC_GROUP *G; // group parameters
|
|
BN_CTX *CTX; // the context for the math (this might not be
|
|
// the context in which the curve was created>;
|
|
} OSSL_CURVE_DATA;
|
|
|
|
typedef OSSL_CURVE_DATA *bigCurve;
|
|
|
|
#define AccessCurveData(E) ((E)->C)
|
|
|
|
|
|
#include "TpmToOsslSupport_fp.h"
|
|
|
|
// Start and end a context within which the OpenSSL memory management works
|
|
#define OSSL_ENTER() BN_CTX *CTX = OsslContextEnter()
|
|
#define OSSL_LEAVE() OsslContextLeave(CTX)
|
|
|
|
// Start and end a context that spans multiple ECC functions. This is used so that
|
|
// the group for the curve can persist across multiple frames.
|
|
#define CURVE_INITIALIZED(name, initializer) \
|
|
OSSL_CURVE_DATA _##name; \
|
|
bigCurve name = BnCurveInitialize(&_##name, initializer)
|
|
#define CURVE_FREE(name) BnCurveFree(name)
|
|
|
|
// Start and end a local stack frame within the context of the curve frame
|
|
#define ECC_ENTER() BN_CTX *CTX = OsslPushContext(E->CTX)
|
|
#define ECC_LEAVE() OsslPopContext(CTX)
|
|
|
|
#define BN_NEW() BnNewVariable(CTX)
|
|
|
|
// This definition would change if there were something to report
|
|
#define MathLibSimulationEnd()
|
|
|
|
#endif // MATH_LIB_DEFINED
|