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 #ifndef _OSSL_CRYPTO_ENGINE_H 9 #define _OSSL_CRYPTO_ENGINE_H 10 #include <openssl/aes.h> 11 #include <openssl/evp.h> 12 #include <openssl/sha.h> 13 #include <openssl/ec.h> 14 #include <openssl/rand.h> 15 #include <openssl/bn.h> 16 #define CRYPTO_ENGINE 17 #include "CryptoEngine.h" 18 #include "CpriMisc_fp.h" 19 #define MAX_ECC_PARAMETER_BYTES 32 20 #define MAX_2B_BYTES MAX((MAX_RSA_KEY_BYTES * ALG_RSA), \ 21 MAX((MAX_ECC_PARAMETER_BYTES * ALG_ECC), \ 22 MAX_DIGEST_SIZE)) 23 #define assert2Bsize(a) pAssert((a).size <= sizeof((a).buffer)) 24 #ifdef TPM_ALG_RSA 25 # ifdef RSA_KEY_SIEVE 26 # include "RsaKeySieve.h" 27 # include "RsaKeySieve_fp.h" 28 # endif 29 # include "CpriRSA_fp.h" 30 #endif 31 32 #ifdef OPENSSL_IS_BORINGSSL 33 // libtpm2 reads internal EVP_MD state (e.g. ctx_size). The boringssl headers 34 // don't expose this type so define it here. 35 struct env_md_st { 36 /* type contains a NID identifing the digest function. (For example, 37 * NID_md5.) */ 38 int type; 39 40 /* md_size contains the size, in bytes, of the resulting digest. */ 41 unsigned md_size; 42 43 /* flags contains the OR of |EVP_MD_FLAG_*| values. */ 44 uint32_t flags; 45 46 /* init initialises the state in |ctx->md_data|. */ 47 void (*init)(EVP_MD_CTX *ctx); 48 49 /* update hashes |len| bytes of |data| into the state in |ctx->md_data|. */ 50 void (*update)(EVP_MD_CTX *ctx, const void *data, size_t count); 51 52 /* final completes the hash and writes |md_size| bytes of digest to |out|. */ 53 void (*final)(EVP_MD_CTX *ctx, uint8_t *out); 54 55 /* block_size contains the hash's native block size. */ 56 unsigned block_size; 57 58 /* ctx_size contains the size, in bytes, of the state of the hash function. */ 59 unsigned ctx_size; 60 }; 61 #endif 62 63 // 64 // This is a structure to hold the parameters for the version of KDFa() used by the CryptoEngine(). This 65 // structure allows the state to be passed between multiple functions that use the same pseudo-random 66 // sequence. 67 // 68 typedef struct { 69 CPRI_HASH_STATE iPadCtx; 70 CPRI_HASH_STATE oPadCtx; 71 TPM2B *extra; 72 UINT32 *outer; 73 TPM_ALG_ID hashAlg; 74 UINT16 keySizeInBits; 75 } KDFa_CONTEXT; 76 #endif // _OSSL_CRYPTO_ENGINE_H 77