tpm2-tss 4.2.0
TPM Software stack 2.0 TCG spec compliant implementation
esys_crypto_ossl.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_OSSL_H
7#define ESYS_CRYPTO_OSSL_H
8
9#ifdef HAVE_CONFIG_H
10#include "config.h" // for HAVE_EVP_SM4_CFB
11#endif
12
13#include <stddef.h> // for NULL, size_t
14#include <stdint.h> // for uint8_t
15
16#include "tss2_common.h" // for TSS2_RC, BYTE
17#include "tss2_esys.h" // for ESYS_CRYPTO_CONTEXT_BLOB
18#include "tss2_tpm2_types.h" // for TPM2_ALG_ID, TPM2B_PUBLIC, TPMI_AES_KEY...
19
20#ifdef __cplusplus
21extern "C" {
22#endif
23
24#define OSSL_FREE(S, TYPE) \
25 if ((S) != NULL) { \
26 TYPE##_free((void *)(S)); \
27 (S) = NULL; \
28 }
29
30TSS2_RC
31iesys_cryptossl_hash_start(ESYS_CRYPTO_CONTEXT_BLOB **context, TPM2_ALG_ID hashAlg, void *userdata);
32
33TSS2_RC iesys_cryptossl_hash_update(ESYS_CRYPTO_CONTEXT_BLOB *context,
34 const uint8_t *buffer,
35 size_t size,
36 void *userdata);
37
38TSS2_RC iesys_cryptossl_hash_finish(ESYS_CRYPTO_CONTEXT_BLOB **context,
39 uint8_t *buffer,
40 size_t *size,
41 void *userdata);
42
43void iesys_cryptossl_hash_abort(ESYS_CRYPTO_CONTEXT_BLOB **context, void *userdata);
44
45#define iesys_crypto_rsa_pk_encrypt_internal iesys_cryptossl_pk_encrypt
46#define iesys_crypto_hash_start_internal iesys_cryptossl_hash_start
47#define iesys_crypto_hash_update_internal iesys_cryptossl_hash_update
48#define iesys_crypto_hash_finish_internal iesys_cryptossl_hash_finish
49#define iesys_crypto_hash_abort_internal iesys_cryptossl_hash_abort
50
51TSS2_RC iesys_cryptossl_hmac_start(ESYS_CRYPTO_CONTEXT_BLOB **context,
52 TPM2_ALG_ID hmacAlg,
53 const uint8_t *key,
54 size_t size,
55 void *userdata);
56
57TSS2_RC iesys_cryptossl_hmac_update(ESYS_CRYPTO_CONTEXT_BLOB *context,
58 const uint8_t *buffer,
59 size_t size,
60 void *userdata);
61
62TSS2_RC iesys_cryptossl_hmac_finish(ESYS_CRYPTO_CONTEXT_BLOB **context,
63 uint8_t *buffer,
64 size_t *size,
65 void *userdata);
66
67void iesys_cryptossl_hmac_abort(ESYS_CRYPTO_CONTEXT_BLOB **context, void *userdata);
68
69#define iesys_crypto_hmac_start_internal iesys_cryptossl_hmac_start
70#define iesys_crypto_hmac_start2b_internal iesys_cryptossl_hmac_start2b
71#define iesys_crypto_hmac_update_internal iesys_cryptossl_hmac_update
72#define iesys_crypto_hmac_update2b_internal iesys_cryptossl_hmac_update2b
73#define iesys_crypto_hmac_finish_internal iesys_cryptossl_hmac_finish
74#define iesys_crypto_hmac_finish2b_internal iesys_cryptossl_hmac_finish2b
75#define iesys_crypto_hmac_abort_internal iesys_cryptossl_hmac_abort
76
77TSS2_RC iesys_cryptossl_random2b(TPM2B_NONCE *nonce, size_t num_bytes, void *userdata);
78
79TSS2_RC iesys_cryptossl_pk_encrypt(TPM2B_PUBLIC *key,
80 size_t in_size,
81 BYTE *in_buffer,
82 size_t max_out_size,
83 BYTE *out_buffer,
84 size_t *out_size,
85 const char *label,
86 void *userdata);
87
88TSS2_RC iesys_cryptossl_sym_aes_encrypt(uint8_t *key,
89 TPM2_ALG_ID tpm_sym_alg,
90 TPMI_AES_KEY_BITS key_bits,
91 TPM2_ALG_ID tpm_mode,
92 uint8_t *dst,
93 size_t dst_size,
94 uint8_t *iv,
95 void *userdata);
96
97TSS2_RC iesys_cryptossl_sym_aes_decrypt(uint8_t *key,
98 TPM2_ALG_ID tpm_sym_alg,
99 TPMI_AES_KEY_BITS key_bits,
100 TPM2_ALG_ID tpm_mode,
101 uint8_t *dst,
102 size_t dst_size,
103 uint8_t *iv,
104 void *userdata);
105
106#if HAVE_EVP_SM4_CFB && !defined(OPENSSL_NO_SM4)
107TSS2_RC iesys_cryptossl_sym_sm4_encrypt(uint8_t *key,
108 TPM2_ALG_ID tpm_sym_alg,
109 TPMI_SM4_KEY_BITS key_bits,
110 TPM2_ALG_ID tpm_mode,
111 uint8_t *dst,
112 size_t dst_size,
113 uint8_t *iv,
114 void *userdata);
115
116TSS2_RC iesys_cryptossl_sym_sm4_decrypt(uint8_t *key,
117 TPM2_ALG_ID tpm_sym_alg,
118 TPMI_SM4_KEY_BITS key_bits,
119 TPM2_ALG_ID tpm_mode,
120 uint8_t *dst,
121 size_t dst_size,
122 uint8_t *iv,
123 void *userdata);
124#endif
125
126TSS2_RC iesys_cryptossl_get_ecdh_point(TPM2B_PUBLIC *key,
127 size_t max_out_size,
128 TPM2B_ECC_PARAMETER *Z,
129 TPMS_ECC_POINT *Q,
130 BYTE *out_buffer,
131 size_t *out_size,
132 void *userdata);
133
134#define iesys_crypto_get_random2b_internal iesys_cryptossl_random2b
135#define iesys_crypto_get_ecdh_point_internal iesys_cryptossl_get_ecdh_point
136#define iesys_crypto_aes_encrypt_internal iesys_cryptossl_sym_aes_encrypt
137#define iesys_crypto_aes_decrypt_internal iesys_cryptossl_sym_aes_decrypt
138#if HAVE_EVP_SM4_CFB && !defined(OPENSSL_NO_SM4)
139#define iesys_crypto_sm4_encrypt_internal iesys_cryptossl_sym_sm4_encrypt
140#define iesys_crypto_sm4_decrypt_internal iesys_cryptossl_sym_sm4_decrypt
141#else
142#define iesys_crypto_sm4_encrypt_internal NULL
143#define iesys_crypto_sm4_decrypt_internal NULL
144#endif
145
146TSS2_RC iesys_cryptossl_init(void *userdata);
147
148#define iesys_crypto_init_internal iesys_cryptossl_init
149
150#ifdef __cplusplus
151} /* extern "C" */
152#endif
153
154#endif /* ESYS_CRYPTO_OSSL_H */
Definition esys_crypto_mbed.c:32