xref: /aosp_15_r20/external/tpm2-tss/src/tss2-esys/esys_crypto.h (revision 758e9fba6fc9adbf15340f70c73baee7b168b1c9)
1*758e9fbaSOystein Eftevaag /* SPDX-License-Identifier: BSD-2-Clause */
2*758e9fbaSOystein Eftevaag /*******************************************************************************
3*758e9fbaSOystein Eftevaag  * Copyright 2017-2018, Fraunhofer SIT sponsored by Infineon Technologies AG
4*758e9fbaSOystein Eftevaag  * All rights reserved.
5*758e9fbaSOystein Eftevaag  ******************************************************************************/
6*758e9fbaSOystein Eftevaag #ifndef ESYS_CRYPTO_H
7*758e9fbaSOystein Eftevaag #define ESYS_CRYPTO_H
8*758e9fbaSOystein Eftevaag 
9*758e9fbaSOystein Eftevaag #include <stddef.h>
10*758e9fbaSOystein Eftevaag #include "tss2_tpm2_types.h"
11*758e9fbaSOystein Eftevaag #include "tss2-sys/sysapi_util.h"
12*758e9fbaSOystein Eftevaag #ifdef OSSL
13*758e9fbaSOystein Eftevaag #include "esys_crypto_ossl.h"
14*758e9fbaSOystein Eftevaag #elif defined (BSSL)
15*758e9fbaSOystein Eftevaag #include "esys_crypto_bssl.h"
16*758e9fbaSOystein Eftevaag #else
17*758e9fbaSOystein Eftevaag #include "esys_crypto_gcrypt.h"
18*758e9fbaSOystein Eftevaag #endif
19*758e9fbaSOystein Eftevaag 
20*758e9fbaSOystein Eftevaag #ifdef __cplusplus
21*758e9fbaSOystein Eftevaag extern "C" {
22*758e9fbaSOystein Eftevaag #endif
23*758e9fbaSOystein Eftevaag 
24*758e9fbaSOystein Eftevaag #define AES_BLOCK_SIZE_IN_BYTES 16
25*758e9fbaSOystein Eftevaag 
26*758e9fbaSOystein Eftevaag TSS2_RC iesys_crypto_hash_get_digest_size(TPM2_ALG_ID hashAlg, size_t *size);
27*758e9fbaSOystein Eftevaag 
28*758e9fbaSOystein Eftevaag TSS2_RC iesys_crypto_pHash(
29*758e9fbaSOystein Eftevaag     TPM2_ALG_ID alg,
30*758e9fbaSOystein Eftevaag     const uint8_t rcBuffer[4],
31*758e9fbaSOystein Eftevaag     const uint8_t ccBuffer[4],
32*758e9fbaSOystein Eftevaag     const TPM2B_NAME *name1,
33*758e9fbaSOystein Eftevaag     const TPM2B_NAME *name2,
34*758e9fbaSOystein Eftevaag     const TPM2B_NAME *name3,
35*758e9fbaSOystein Eftevaag     const uint8_t *pBuffer,
36*758e9fbaSOystein Eftevaag     size_t pBuffer_size,
37*758e9fbaSOystein Eftevaag     uint8_t *pHash,
38*758e9fbaSOystein Eftevaag     size_t *pHash_size);
39*758e9fbaSOystein Eftevaag 
40*758e9fbaSOystein Eftevaag #define iesys_crypto_cpHash(alg, ccBuffer, name1, name2, name3, \
41*758e9fbaSOystein Eftevaag                             cpBuffer, cpBuffer_size, cpHash, cpHash_size) \
42*758e9fbaSOystein Eftevaag         iesys_crypto_pHash(alg, NULL, ccBuffer, name1, name2, name3, cpBuffer, \
43*758e9fbaSOystein Eftevaag                            cpBuffer_size, cpHash, cpHash_size)
44*758e9fbaSOystein Eftevaag #define iesys_crypto_rpHash(alg, rcBuffer, ccBuffer, rpBuffer, rpBuffer_size, \
45*758e9fbaSOystein Eftevaag                             rpHash, rpHash_size)                        \
46*758e9fbaSOystein Eftevaag         iesys_crypto_pHash(alg, rcBuffer, ccBuffer, NULL, NULL, NULL, rpBuffer, \
47*758e9fbaSOystein Eftevaag                            rpBuffer_size, rpHash, rpHash_size)
48*758e9fbaSOystein Eftevaag 
49*758e9fbaSOystein Eftevaag 
50*758e9fbaSOystein Eftevaag TSS2_RC iesys_crypto_authHmac(
51*758e9fbaSOystein Eftevaag     TPM2_ALG_ID alg,
52*758e9fbaSOystein Eftevaag     uint8_t *hmacKey,
53*758e9fbaSOystein Eftevaag     size_t hmacKeySize,
54*758e9fbaSOystein Eftevaag     const uint8_t *pHash,
55*758e9fbaSOystein Eftevaag     size_t pHash_size,
56*758e9fbaSOystein Eftevaag     const TPM2B_NONCE *nonceNewer,
57*758e9fbaSOystein Eftevaag     const TPM2B_NONCE *nonceOlder,
58*758e9fbaSOystein Eftevaag     const TPM2B_NONCE *nonceDecrypt,
59*758e9fbaSOystein Eftevaag     const TPM2B_NONCE *nonceEncrypt,
60*758e9fbaSOystein Eftevaag     TPMA_SESSION sessionAttributes,
61*758e9fbaSOystein Eftevaag     TPM2B_AUTH *hmac);
62*758e9fbaSOystein Eftevaag 
63*758e9fbaSOystein Eftevaag TSS2_RC iesys_crypto_KDFaHmac(
64*758e9fbaSOystein Eftevaag     TPM2_ALG_ID alg,
65*758e9fbaSOystein Eftevaag     uint8_t *hmacKey,
66*758e9fbaSOystein Eftevaag     size_t hmacKeySize,
67*758e9fbaSOystein Eftevaag     uint32_t counter,
68*758e9fbaSOystein Eftevaag     const char *label,
69*758e9fbaSOystein Eftevaag     TPM2B_NONCE *contextU,
70*758e9fbaSOystein Eftevaag     TPM2B_NONCE *contextV,
71*758e9fbaSOystein Eftevaag     uint32_t bitlength,
72*758e9fbaSOystein Eftevaag     uint8_t *hmac,
73*758e9fbaSOystein Eftevaag     size_t *hmacSize);
74*758e9fbaSOystein Eftevaag 
75*758e9fbaSOystein Eftevaag TSS2_RC iesys_crypto_KDFa(
76*758e9fbaSOystein Eftevaag     TPM2_ALG_ID hashAlg,
77*758e9fbaSOystein Eftevaag     uint8_t *hmacKey,
78*758e9fbaSOystein Eftevaag     size_t hmacKeySize,
79*758e9fbaSOystein Eftevaag     const char *label,
80*758e9fbaSOystein Eftevaag     TPM2B_NONCE *contextU,
81*758e9fbaSOystein Eftevaag     TPM2B_NONCE *contextV,
82*758e9fbaSOystein Eftevaag     uint32_t bitLength,
83*758e9fbaSOystein Eftevaag     uint32_t *counterInOut,
84*758e9fbaSOystein Eftevaag     BYTE *outKey,
85*758e9fbaSOystein Eftevaag     BOOL use_digest_size);
86*758e9fbaSOystein Eftevaag 
87*758e9fbaSOystein Eftevaag TSS2_RC iesys_xor_parameter_obfuscation(
88*758e9fbaSOystein Eftevaag     TPM2_ALG_ID hash_alg,
89*758e9fbaSOystein Eftevaag     uint8_t *key,
90*758e9fbaSOystein Eftevaag     size_t key_size,
91*758e9fbaSOystein Eftevaag     TPM2B_NONCE * contextU,
92*758e9fbaSOystein Eftevaag     TPM2B_NONCE * contextV,
93*758e9fbaSOystein Eftevaag     BYTE *data,
94*758e9fbaSOystein Eftevaag     size_t data_size);
95*758e9fbaSOystein Eftevaag 
96*758e9fbaSOystein Eftevaag TSS2_RC iesys_crypto_KDFe(
97*758e9fbaSOystein Eftevaag     TPM2_ALG_ID hashAlg,
98*758e9fbaSOystein Eftevaag     TPM2B_ECC_PARAMETER *Z,
99*758e9fbaSOystein Eftevaag     const char *label,
100*758e9fbaSOystein Eftevaag     TPM2B_ECC_PARAMETER *partyUInfo,
101*758e9fbaSOystein Eftevaag     TPM2B_ECC_PARAMETER *partyVInfo,
102*758e9fbaSOystein Eftevaag     UINT32 bit_size,
103*758e9fbaSOystein Eftevaag     BYTE *key);
104*758e9fbaSOystein Eftevaag 
105*758e9fbaSOystein Eftevaag TSS2_RC iesys_initialize_crypto();
106*758e9fbaSOystein Eftevaag 
107*758e9fbaSOystein Eftevaag #ifdef __cplusplus
108*758e9fbaSOystein Eftevaag } /* extern "C" */
109*758e9fbaSOystein Eftevaag #endif
110*758e9fbaSOystein Eftevaag 
111*758e9fbaSOystein Eftevaag #endif /* ESYS_CRYPTO_H */
112