tpm2-tss 4.0.1
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#include <stddef.h>
10#include "tss2_tpm2_types.h"
11#include "tss2-sys/sysapi_util.h"
12#if defined(OSSL)
13#include "esys_crypto_ossl.h"
14#elif defined(MBED)
15#include "esys_crypto_mbed.h"
16#else
17#define _iesys_crypto_aes_decrypt NULL;
18#define _iesys_crypto_aes_encrypt NULL;
19#define _iesys_crypto_sm4_decrypt NULL;
20#define _iesys_crypto_sm4_encrypt NULL;
21#define _iesys_crypto_get_ecdh_point NULL;
22#define _iesys_crypto_hash_abort NULL;
23#define _iesys_crypto_hash_finish NULL;
24#define _iesys_crypto_hash_start NULL;
25#define _iesys_crypto_hash_update NULL;
26#define _iesys_crypto_hmac_abort NULL;
27#define _iesys_crypto_hmac_finish NULL;
28#define _iesys_crypto_hmac_start NULL;
29#define _iesys_crypto_hmac_update NULL;
30#define _iesys_crypto_init NULL;
31#define _iesys_crypto_get_random2b NULL;
32#define _iesys_crypto_rsa_pk_encrypt NULL;
33#endif
34
35#ifdef __cplusplus
36extern "C" {
37#endif
38
39#define AES_BLOCK_SIZE_IN_BYTES 16
40#define SM4_BLOCK_SIZE_IN_BYTES 16
41
42TSS2_RC iesys_crypto_hash_get_digest_size(TPM2_ALG_ID hashAlg, size_t *size);
43
44TSS2_RC iesys_crypto_pHash(
45 ESYS_CRYPTO_CALLBACKS *crypto_cb,
46 TPM2_ALG_ID alg,
47 const uint8_t rcBuffer[4],
48 const uint8_t ccBuffer[4],
49 const TPM2B_NAME *name1,
50 const TPM2B_NAME *name2,
51 const TPM2B_NAME *name3,
52 const uint8_t *pBuffer,
53 size_t pBuffer_size,
54 uint8_t *pHash,
55 size_t *pHash_size);
56
57#define iesys_crypto_cpHash(ectx, alg, ccBuffer, name1, name2, name3, \
58 cpBuffer, cpBuffer_size, cpHash, cpHash_size) \
59 iesys_crypto_pHash(ectx, alg, NULL, ccBuffer, name1, name2, name3, cpBuffer, \
60 cpBuffer_size, cpHash, cpHash_size)
61#define iesys_crypto_rpHash(ectx, alg, rcBuffer, ccBuffer, rpBuffer, rpBuffer_size, \
62 rpHash, rpHash_size) \
63 iesys_crypto_pHash(ectx, alg, rcBuffer, ccBuffer, NULL, NULL, NULL, rpBuffer, \
64 rpBuffer_size, rpHash, rpHash_size)
65
66TSS2_RC iesys_crypto_hmac_finish2b(
67 ESYS_CRYPTO_CALLBACKS *crypto_cb,
68 ESYS_CRYPTO_CONTEXT_BLOB ** context,
69 TPM2B *tpm2b);
70
71TSS2_RC iesys_crypto_hmac_update2b(
72 ESYS_CRYPTO_CALLBACKS *crypto_cb,
74 TPM2B *tpm2b);
75
76TSS2_RC iesys_crypto_hash_update2b(
77 ESYS_CRYPTO_CALLBACKS *crypto_cb,
79 TPM2B *tpm2b);
80
81TSS2_RC iesys_crypto_rsa_pk_encrypt(
82 ESYS_CRYPTO_CALLBACKS *crypto_cb,
83 TPM2B_PUBLIC * pub_tpm_key,
84 size_t in_size,
85 BYTE * in_buffer,
86 size_t max_out_size,
87 BYTE * out_buffer,
88 size_t * out_size,
89 const char *label);
90
91TSS2_RC iesys_crypto_hash_start(
92 ESYS_CRYPTO_CALLBACKS *crypto_cb,
94 TPM2_ALG_ID hashAlg);
95
96TSS2_RC iesys_crypto_hash_update(
97 ESYS_CRYPTO_CALLBACKS *crypto_cb,
99 const uint8_t *buffer,
100 size_t size);
101
102TSS2_RC iesys_crypto_hash_finish(
103 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(
109 ESYS_CRYPTO_CALLBACKS *crypto_cb,
110 ESYS_CRYPTO_CONTEXT_BLOB **context);
111
112TSS2_RC iesys_crypto_hmac_start(
113 ESYS_CRYPTO_CALLBACKS *crypto_cb,
114 ESYS_CRYPTO_CONTEXT_BLOB **context,
115 TPM2_ALG_ID hashAlg,
116 const uint8_t *key,
117 size_t size);
118
119TSS2_RC iesys_crypto_hmac_update(
120 ESYS_CRYPTO_CALLBACKS *crypto_cb,
121 ESYS_CRYPTO_CONTEXT_BLOB * context,
122 const uint8_t *buffer,
123 size_t size);
124
125TSS2_RC iesys_crypto_hmac_finish(
126 ESYS_CRYPTO_CALLBACKS *crypto_cb,
127 ESYS_CRYPTO_CONTEXT_BLOB **context,
128 uint8_t *buffer,
129 size_t * size);
130
131TSS2_RC iesys_crypto_hmac_abort(
132 ESYS_CRYPTO_CALLBACKS *crypto_cb,
133 ESYS_CRYPTO_CONTEXT_BLOB **context);
134
135TSS2_RC iesys_crypto_get_random2b(
136 ESYS_CRYPTO_CALLBACKS *crypto_cb,
137 TPM2B_NONCE *nonce,
138 size_t num_bytes);
139
140TSS2_RC iesys_crypto_get_ecdh_point(
141 ESYS_CRYPTO_CALLBACKS *crypto_cb,
142 TPM2B_PUBLIC *key,
143 size_t max_out_size,
144 TPM2B_ECC_PARAMETER *Z,
145 TPMS_ECC_POINT *Q,
146 BYTE * out_buffer,
147 size_t * out_size);
148
149 TSS2_RC iesys_crypto_aes_encrypt(
150 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_aes_decrypt(
160 ESYS_CRYPTO_CALLBACKS *crypto_cb,
161 uint8_t *key,
162 TPM2_ALG_ID tpm_sym_alg,
163 TPMI_AES_KEY_BITS key_bits,
164 TPM2_ALG_ID tpm_mode,
165 uint8_t *buffer,
166 size_t buffer_size,
167 uint8_t *iv);
168
169TSS2_RC iesys_crypto_sm4_encrypt(
170 ESYS_CRYPTO_CALLBACKS *crypto_cb,
171 uint8_t *key,
172 TPM2_ALG_ID tpm_sym_alg,
173 TPMI_SM4_KEY_BITS key_bits,
174 TPM2_ALG_ID tpm_mode,
175 uint8_t *buffer,
176 size_t buffer_size,
177 uint8_t *iv);
178
179TSS2_RC iesys_crypto_sm4_decrypt(
180 ESYS_CRYPTO_CALLBACKS *crypto_cb,
181 uint8_t *key,
182 TPM2_ALG_ID tpm_sym_alg,
183 TPMI_SM4_KEY_BITS key_bits,
184 TPM2_ALG_ID tpm_mode,
185 uint8_t *buffer,
186 size_t buffer_size,
187 uint8_t *iv);
188
189TSS2_RC iesys_crypto_authHmac(
190 ESYS_CRYPTO_CALLBACKS *crypto_cb,
191 TPM2_ALG_ID alg,
192 uint8_t *hmacKey,
193 size_t hmacKeySize,
194 const uint8_t *pHash,
195 size_t pHash_size,
196 const TPM2B_NONCE *nonceNewer,
197 const TPM2B_NONCE *nonceOlder,
198 const TPM2B_NONCE *nonceDecrypt,
199 const TPM2B_NONCE *nonceEncrypt,
200 TPMA_SESSION sessionAttributes,
201 TPM2B_AUTH *hmac);
202
203TSS2_RC iesys_crypto_KDFaHmac(
204 ESYS_CRYPTO_CALLBACKS *crypto_cb,
205 TPM2_ALG_ID alg,
206 uint8_t *hmacKey,
207 size_t hmacKeySize,
208 uint32_t counter,
209 const char *label,
210 TPM2B_NONCE *contextU,
211 TPM2B_NONCE *contextV,
212 uint32_t bitlength,
213 uint8_t *hmac,
214 size_t *hmacSize);
215
216TSS2_RC iesys_crypto_KDFa(
217 ESYS_CRYPTO_CALLBACKS *crypto_cb,
218 TPM2_ALG_ID hashAlg,
219 uint8_t *hmacKey,
220 size_t hmacKeySize,
221 const char *label,
222 TPM2B_NONCE *contextU,
223 TPM2B_NONCE *contextV,
224 uint32_t bitLength,
225 uint32_t *counterInOut,
226 BYTE *outKey,
227 BOOL use_digest_size);
228
229TSS2_RC iesys_xor_parameter_obfuscation(
230 ESYS_CRYPTO_CALLBACKS *cryto_cb,
231 TPM2_ALG_ID hash_alg,
232 uint8_t *key,
233 size_t key_size,
234 TPM2B_NONCE * contextU,
235 TPM2B_NONCE * contextV,
236 BYTE *data,
237 size_t data_size);
238
239TSS2_RC iesys_crypto_KDFe(
240 ESYS_CRYPTO_CALLBACKS *crypto_cb,
241 TPM2_ALG_ID hashAlg,
242 TPM2B_ECC_PARAMETER *Z,
243 const char *label,
244 TPM2B_ECC_PARAMETER *partyUInfo,
245 TPM2B_ECC_PARAMETER *partyVInfo,
246 UINT32 bit_size,
247 BYTE *key);
248
249TSS2_RC iesys_initialize_crypto_backend(
250 ESYS_CRYPTO_CALLBACKS *crypto_cb,
251 ESYS_CRYPTO_CALLBACKS *user_cb);
252
253#ifdef __cplusplus
254} /* extern "C" */
255#endif
256
257#endif /* ESYS_CRYPTO_H */
Definition tss2_esys.h:408
Definition esys_crypto_mbed.c:34