// This file was extracted from the TCG Published
// Trusted Platform Module Library
// Part 4: Supporting Routines
// Family "2.0"
// Level 00 Revision 01.16
// October 30, 2014
#ifndef _OSSL_CRYPTO_ENGINE_H
#define _OSSL_CRYPTO_ENGINE_H
#include <openssl/aes.h>
#include <openssl/evp.h>
#include <openssl/sha.h>
#include <openssl/ec.h>
#include <openssl/rand.h>
#include <openssl/bn.h>
#define CRYPTO_ENGINE
#include "CryptoEngine.h"
#include "CpriMisc_fp.h"
#define MAX_ECC_PARAMETER_BYTES 32
#define MAX_2B_BYTES MAX((MAX_RSA_KEY_BYTES * ALG_RSA), \
MAX((MAX_ECC_PARAMETER_BYTES * ALG_ECC), \
MAX_DIGEST_SIZE))
#define assert2Bsize(a) pAssert((a).size <= sizeof((a).buffer))
#ifdef TPM_ALG_RSA
# ifdef RSA_KEY_SIEVE
# include "RsaKeySieve.h"
# include "RsaKeySieve_fp.h"
# endif
# include "CpriRSA_fp.h"
#endif
#ifdef OPENSSL_IS_BORINGSSL
// libtpm2 reads internal EVP_MD state (e.g. ctx_size). The boringssl headers
// don't expose this type so define it here.
struct env_md_st {
/* type contains a NID identifing the digest function. (For example,
* NID_md5.) */
int type;
/* md_size contains the size, in bytes, of the resulting digest. */
unsigned md_size;
/* flags contains the OR of |EVP_MD_FLAG_*| values. */
uint32_t flags;
/* init initialises the state in |ctx->md_data|. */
void (*init)(EVP_MD_CTX *ctx);
/* update hashes |len| bytes of |data| into the state in |ctx->md_data|. */
void (*update)(EVP_MD_CTX *ctx, const void *data, size_t count);
/* final completes the hash and writes |md_size| bytes of digest to |out|. */
void (*final)(EVP_MD_CTX *ctx, uint8_t *out);
/* block_size contains the hash's native block size. */
unsigned block_size;
/* ctx_size contains the size, in bytes, of the state of the hash function. */
unsigned ctx_size;
};
#endif
//
// This is a structure to hold the parameters for the version of KDFa() used by the CryptoEngine(). This
// structure allows the state to be passed between multiple functions that use the same pseudo-random
// sequence.
//
typedef struct {
CPRI_HASH_STATE iPadCtx;
CPRI_HASH_STATE oPadCtx;
TPM2B *extra;
UINT32 *outer;
TPM_ALG_ID hashAlg;
UINT16 keySizeInBits;
} KDFa_CONTEXT;
#endif // _OSSL_CRYPTO_ENGINE_H