tpm2-tss 4.2.0
TPM Software stack 2.0 TCG spec compliant implementation
esys_crypto.h
1/* SPDX-License-Identifier: BSD-2-Clause */
2/*******************************************************************************
3 * Copyright 2017-2018, Fraunhofer SIT sponsored by Infineon Technologies AG
4 * All rights reserved.
5 ******************************************************************************/
6#ifndef ESYS_CRYPTO_H
7#define ESYS_CRYPTO_H
8
9#ifdef HAVE_CONFIG_H
10#include "config.h" // for OSSL
11#endif
12
13#include <stddef.h> // for size_t, NULL
14#include <stdint.h> // for uint8_t, uint32_t
15
16#include "tss2_common.h" // for TSS2_RC, BYTE, BOOL, UINT32
17#include "tss2_esys.h" // for ESYS_CRYPTO_CALLBACKS, ESYS_CRYPTO_CONT...
18#include "tss2_tpm2_types.h" // for TPM2_ALG_ID, TPM2B_NONCE, TPM2B_ECC_PAR...
19#include "util/tpm2b.h" // for TPM2B
20#if defined(OSSL)
21#include "esys_crypto_ossl.h"
22#elif defined(MBED)
23#include "esys_crypto_mbed.h"
24#else
25#define iesys_crypto_aes_decrypt_internal NULL;
26#define iesys_crypto_aes_encrypt_internal NULL;
27#define iesys_crypto_sm4_decrypt_internal NULL;
28#define iesys_crypto_sm4_encrypt_internal NULL;
29#define iesys_crypto_get_ecdh_point_internal NULL;
30#define iesys_crypto_hash_abort_internal NULL;
31#define iesys_crypto_hash_finish_internal NULL;
32#define iesys_crypto_hash_start_internal NULL;
33#define iesys_crypto_hash_update_internal NULL;
34#define iesys_crypto_hmac_abort_internal NULL;
35#define iesys_crypto_hmac_finish_internal NULL;
36#define iesys_crypto_hmac_start_internal NULL;
37#define iesys_crypto_hmac_update_internal NULL;
38#define iesys_crypto_init_internal NULL;
39#define iesys_crypto_get_random2b_internal NULL;
40#define iesys_crypto_rsa_pk_encrypt_internal NULL;
41#endif
42
43#ifdef __cplusplus
44extern "C" {
45#endif
46
47#define AES_BLOCK_SIZE_IN_BYTES 16
48#define SM4_BLOCK_SIZE_IN_BYTES 16
49
50TSS2_RC iesys_crypto_hash_get_digest_size(TPM2_ALG_ID hashAlg, size_t *size);
51
52TSS2_RC iesys_crypto_pHash(ESYS_CRYPTO_CALLBACKS *crypto_cb,
53 TPM2_ALG_ID alg,
54 const uint8_t rcBuffer[4],
55 const uint8_t ccBuffer[4],
56 const TPM2B_NAME *name1,
57 const TPM2B_NAME *name2,
58 const TPM2B_NAME *name3,
59 const uint8_t *pBuffer,
60 size_t pBuffer_size,
61 uint8_t *pHash,
62 size_t *pHash_size);
63
64#define iesys_crypto_cpHash(ectx, alg, ccBuffer, name1, name2, name3, cpBuffer, cpBuffer_size, \
65 cpHash, cpHash_size) \
66 iesys_crypto_pHash(ectx, alg, NULL, ccBuffer, name1, name2, name3, cpBuffer, cpBuffer_size, \
67 cpHash, cpHash_size)
68#define iesys_crypto_rpHash(ectx, alg, rcBuffer, ccBuffer, rpBuffer, rpBuffer_size, rpHash, \
69 rpHash_size) \
70 iesys_crypto_pHash(ectx, alg, rcBuffer, ccBuffer, NULL, NULL, NULL, rpBuffer, rpBuffer_size, \
71 rpHash, rpHash_size)
72
73TSS2_RC iesys_crypto_hmac_finish2b(ESYS_CRYPTO_CALLBACKS *crypto_cb,
75 TPM2B *tpm2b);
76
77TSS2_RC iesys_crypto_hmac_update2b(ESYS_CRYPTO_CALLBACKS *crypto_cb,
79 TPM2B *tpm2b);
80
81TSS2_RC iesys_crypto_hash_update2b(ESYS_CRYPTO_CALLBACKS *crypto_cb,
83 TPM2B *tpm2b);
84
85TSS2_RC iesys_crypto_rsa_pk_encrypt(ESYS_CRYPTO_CALLBACKS *crypto_cb,
86 TPM2B_PUBLIC *pub_tpm_key,
87 size_t in_size,
88 BYTE *in_buffer,
89 size_t max_out_size,
90 BYTE *out_buffer,
91 size_t *out_size,
92 const char *label);
93
94TSS2_RC iesys_crypto_hash_start(ESYS_CRYPTO_CALLBACKS *crypto_cb,
96 TPM2_ALG_ID hashAlg);
97
98TSS2_RC iesys_crypto_hash_update(ESYS_CRYPTO_CALLBACKS *crypto_cb,
100 const uint8_t *buffer,
101 size_t size);
102
103TSS2_RC iesys_crypto_hash_finish(ESYS_CRYPTO_CALLBACKS *crypto_cb,
104 ESYS_CRYPTO_CONTEXT_BLOB **context,
105 uint8_t *buffer,
106 size_t *size);
107
108TSS2_RC iesys_crypto_hash_abort(ESYS_CRYPTO_CALLBACKS *crypto_cb,
109 ESYS_CRYPTO_CONTEXT_BLOB **context);
110
111TSS2_RC iesys_crypto_hmac_start(ESYS_CRYPTO_CALLBACKS *crypto_cb,
112 ESYS_CRYPTO_CONTEXT_BLOB **context,
113 TPM2_ALG_ID hashAlg,
114 const uint8_t *key,
115 size_t size);
116
117TSS2_RC iesys_crypto_hmac_update(ESYS_CRYPTO_CALLBACKS *crypto_cb,
119 const uint8_t *buffer,
120 size_t size);
121
122TSS2_RC iesys_crypto_hmac_finish(ESYS_CRYPTO_CALLBACKS *crypto_cb,
123 ESYS_CRYPTO_CONTEXT_BLOB **context,
124 uint8_t *buffer,
125 size_t *size);
126
127TSS2_RC iesys_crypto_hmac_abort(ESYS_CRYPTO_CALLBACKS *crypto_cb,
128 ESYS_CRYPTO_CONTEXT_BLOB **context);
129
130TSS2_RC
131iesys_crypto_get_random2b(ESYS_CRYPTO_CALLBACKS *crypto_cb, TPM2B_NONCE *nonce, size_t num_bytes);
132
133TSS2_RC iesys_crypto_get_ecdh_point(ESYS_CRYPTO_CALLBACKS *crypto_cb,
134 TPM2B_PUBLIC *key,
135 size_t max_out_size,
136 TPM2B_ECC_PARAMETER *Z,
137 TPMS_ECC_POINT *Q,
138 BYTE *out_buffer,
139 size_t *out_size);
140
141TSS2_RC iesys_crypto_aes_encrypt(ESYS_CRYPTO_CALLBACKS *crypto_cb,
142 uint8_t *key,
143 TPM2_ALG_ID tpm_sym_alg,
144 TPMI_AES_KEY_BITS key_bits,
145 TPM2_ALG_ID tpm_mode,
146 uint8_t *buffer,
147 size_t buffer_size,
148 uint8_t *iv);
149
150TSS2_RC iesys_crypto_aes_decrypt(ESYS_CRYPTO_CALLBACKS *crypto_cb,
151 uint8_t *key,
152 TPM2_ALG_ID tpm_sym_alg,
153 TPMI_AES_KEY_BITS key_bits,
154 TPM2_ALG_ID tpm_mode,
155 uint8_t *buffer,
156 size_t buffer_size,
157 uint8_t *iv);
158
159TSS2_RC iesys_crypto_sm4_encrypt(ESYS_CRYPTO_CALLBACKS *crypto_cb,
160 uint8_t *key,
161 TPM2_ALG_ID tpm_sym_alg,
162 TPMI_SM4_KEY_BITS key_bits,
163 TPM2_ALG_ID tpm_mode,
164 uint8_t *buffer,
165 size_t buffer_size,
166 uint8_t *iv);
167
168TSS2_RC iesys_crypto_sm4_decrypt(ESYS_CRYPTO_CALLBACKS *crypto_cb,
169 uint8_t *key,
170 TPM2_ALG_ID tpm_sym_alg,
171 TPMI_SM4_KEY_BITS key_bits,
172 TPM2_ALG_ID tpm_mode,
173 uint8_t *buffer,
174 size_t buffer_size,
175 uint8_t *iv);
176
177TSS2_RC iesys_crypto_authHmac(ESYS_CRYPTO_CALLBACKS *crypto_cb,
178 TPM2_ALG_ID alg,
179 uint8_t *hmacKey,
180 size_t hmacKeySize,
181 const uint8_t *pHash,
182 size_t pHash_size,
183 const TPM2B_NONCE *nonceNewer,
184 const TPM2B_NONCE *nonceOlder,
185 const TPM2B_NONCE *nonceDecrypt,
186 const TPM2B_NONCE *nonceEncrypt,
187 TPMA_SESSION sessionAttributes,
188 TPM2B_AUTH *hmac);
189
190TSS2_RC iesys_crypto_KDFaHmac(ESYS_CRYPTO_CALLBACKS *crypto_cb,
191 TPM2_ALG_ID alg,
192 uint8_t *hmacKey,
193 size_t hmacKeySize,
194 uint32_t counter,
195 const char *label,
196 TPM2B_NONCE *contextU,
197 TPM2B_NONCE *contextV,
198 uint32_t bitlength,
199 uint8_t *hmac,
200 size_t *hmacSize);
201
202TSS2_RC iesys_crypto_KDFa(ESYS_CRYPTO_CALLBACKS *crypto_cb,
203 TPM2_ALG_ID hashAlg,
204 uint8_t *hmacKey,
205 size_t hmacKeySize,
206 const char *label,
207 TPM2B_NONCE *contextU,
208 TPM2B_NONCE *contextV,
209 uint32_t bitLength,
210 uint32_t *counterInOut,
211 BYTE *outKey,
212 BOOL use_digest_size);
213
214TSS2_RC iesys_xor_parameter_obfuscation(ESYS_CRYPTO_CALLBACKS *cryto_cb,
215 TPM2_ALG_ID hash_alg,
216 uint8_t *key,
217 size_t key_size,
218 TPM2B_NONCE *contextU,
219 TPM2B_NONCE *contextV,
220 BYTE *data,
221 size_t data_size);
222
223TSS2_RC iesys_crypto_KDFe(ESYS_CRYPTO_CALLBACKS *crypto_cb,
224 TPM2_ALG_ID hashAlg,
225 TPM2B_ECC_PARAMETER *Z,
226 const char *label,
227 TPM2B_ECC_PARAMETER *partyUInfo,
228 TPM2B_ECC_PARAMETER *partyVInfo,
229 UINT32 bit_size,
230 BYTE *key);
231
232TSS2_RC iesys_initialize_crypto_backend(ESYS_CRYPTO_CALLBACKS *crypto_cb,
233 ESYS_CRYPTO_CALLBACKS *user_cb);
234
235#ifdef __cplusplus
236} /* extern "C" */
237#endif
238
239#endif /* ESYS_CRYPTO_H */
TSS2_RC iesys_crypto_hash_get_digest_size(TPM2_ALG_ID hashAlg, size_t *size)
Definition esys_crypto.c:32
Definition tss2_esys.h:384
Definition esys_crypto_mbed.c:32