tpm2-tss  3.2.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
36 extern "C" {
37 #endif
38 
39 #define AES_BLOCK_SIZE_IN_BYTES 16
40 #define SM4_BLOCK_SIZE_IN_BYTES 16
41 
42 TSS2_RC iesys_crypto_hash_get_digest_size(TPM2_ALG_ID hashAlg, size_t *size);
43 
44 TSS2_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 
66 TSS2_RC iesys_crypto_hmac_finish2b(
67  ESYS_CRYPTO_CALLBACKS *crypto_cb,
68  ESYS_CRYPTO_CONTEXT_BLOB ** context,
69  TPM2B *tpm2b);
70 
71 TSS2_RC iesys_crypto_hmac_update2b(
72  ESYS_CRYPTO_CALLBACKS *crypto_cb,
73  ESYS_CRYPTO_CONTEXT_BLOB * context,
74  TPM2B *tpm2b);
75 
76 TSS2_RC iesys_crypto_hash_update2b(
77  ESYS_CRYPTO_CALLBACKS *crypto_cb,
78  ESYS_CRYPTO_CONTEXT_BLOB * context,
79  TPM2B *tpm2b);
80 
81 TSS2_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 
91 TSS2_RC iesys_crypto_hash_start(
92  ESYS_CRYPTO_CALLBACKS *crypto_cb,
93  ESYS_CRYPTO_CONTEXT_BLOB **context,
94  TPM2_ALG_ID hashAlg);
95 
96 TSS2_RC iesys_crypto_hash_update(
97  ESYS_CRYPTO_CALLBACKS *crypto_cb,
98  ESYS_CRYPTO_CONTEXT_BLOB *context,
99  const uint8_t *buffer,
100  size_t size);
101 
102 TSS2_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 
108 TSS2_RC iesys_crypto_hash_abort(
109  ESYS_CRYPTO_CALLBACKS *crypto_cb,
110  ESYS_CRYPTO_CONTEXT_BLOB **context);
111 
112 TSS2_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 
119 TSS2_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 
125 TSS2_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 
131 TSS2_RC iesys_crypto_hmac_abort(
132  ESYS_CRYPTO_CALLBACKS *crypto_cb,
133  ESYS_CRYPTO_CONTEXT_BLOB **context);
134 
135 TSS2_RC iesys_crypto_get_random2b(
136  ESYS_CRYPTO_CALLBACKS *crypto_cb,
137  TPM2B_NONCE *nonce,
138  size_t num_bytes);
139 
140 TSS2_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 
159 TSS2_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 
169 TSS2_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 
179 TSS2_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 
189 TSS2_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 
203 TSS2_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 
216 TSS2_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 
229 TSS2_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 
239 TSS2_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 
249 TSS2_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 */
TSS2_RC iesys_crypto_hash_get_digest_size(TPM2_ALG_ID hashAlg, size_t *size)
Definition: esys_crypto.c:32
Definition: tss2_esys.h:408
Definition: esys_crypto_mbed.c:34