blob: 3c5f3cb733137fe7796e10f149ff908e31189831 [file] [log] [blame]
Vadim Bendebury56797522015-05-20 10:32:25 -07001// 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>
Vadim Bendebury56797522015-05-20 10:32:25 -070016#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
Darren Krahn929ede72015-12-15 13:22:06 -080031
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.
35struct 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
Vadim Bendebury56797522015-05-20 10:32:25 -070063//
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//
68typedef 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