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