1*758e9fbaSOystein Eftevaag /* SPDX-License-Identifier: BSD-2-Clause */ 2*758e9fbaSOystein Eftevaag /******************************************************************************* 3*758e9fbaSOystein Eftevaag * Copyright 2017-2018, Fraunhofer SIT sponsored by Infineon Technologies AG 4*758e9fbaSOystein Eftevaag * All rights reserved. 5*758e9fbaSOystein Eftevaag ******************************************************************************/ 6*758e9fbaSOystein Eftevaag #ifndef ESYS_CRYPTO_GCRYPT_H 7*758e9fbaSOystein Eftevaag #define ESYS_CRYPTO_GCRYPT_H 8*758e9fbaSOystein Eftevaag 9*758e9fbaSOystein Eftevaag #include <stddef.h> 10*758e9fbaSOystein Eftevaag #include "tss2_tpm2_types.h" 11*758e9fbaSOystein Eftevaag #include "tss2-sys/sysapi_util.h" 12*758e9fbaSOystein Eftevaag 13*758e9fbaSOystein Eftevaag #ifdef __cplusplus 14*758e9fbaSOystein Eftevaag extern "C" { 15*758e9fbaSOystein Eftevaag #endif 16*758e9fbaSOystein Eftevaag 17*758e9fbaSOystein Eftevaag typedef struct _IESYS_CRYPTO_CONTEXT IESYS_CRYPTO_CONTEXT_BLOB; 18*758e9fbaSOystein Eftevaag 19*758e9fbaSOystein Eftevaag TSS2_RC iesys_cryptogcry_hash_start( 20*758e9fbaSOystein Eftevaag IESYS_CRYPTO_CONTEXT_BLOB **context, 21*758e9fbaSOystein Eftevaag TPM2_ALG_ID hashAlg); 22*758e9fbaSOystein Eftevaag 23*758e9fbaSOystein Eftevaag TSS2_RC iesys_cryptogcry_hash_update( 24*758e9fbaSOystein Eftevaag IESYS_CRYPTO_CONTEXT_BLOB *context, 25*758e9fbaSOystein Eftevaag const uint8_t *buffer, size_t size); 26*758e9fbaSOystein Eftevaag 27*758e9fbaSOystein Eftevaag TSS2_RC iesys_cryptogcry_hash_update2b( 28*758e9fbaSOystein Eftevaag IESYS_CRYPTO_CONTEXT_BLOB *context, 29*758e9fbaSOystein Eftevaag TPM2B *b); 30*758e9fbaSOystein Eftevaag 31*758e9fbaSOystein Eftevaag TSS2_RC iesys_cryptogcry_hash_finish( 32*758e9fbaSOystein Eftevaag IESYS_CRYPTO_CONTEXT_BLOB **context, 33*758e9fbaSOystein Eftevaag uint8_t *buffer, 34*758e9fbaSOystein Eftevaag size_t *size); 35*758e9fbaSOystein Eftevaag 36*758e9fbaSOystein Eftevaag TSS2_RC iesys_cryptogcry_hash_finish2b( 37*758e9fbaSOystein Eftevaag IESYS_CRYPTO_CONTEXT_BLOB **context, 38*758e9fbaSOystein Eftevaag TPM2B *b); 39*758e9fbaSOystein Eftevaag 40*758e9fbaSOystein Eftevaag void iesys_cryptogcry_hash_abort(IESYS_CRYPTO_CONTEXT_BLOB **context); 41*758e9fbaSOystein Eftevaag 42*758e9fbaSOystein Eftevaag #define iesys_crypto_hash_start iesys_cryptogcry_hash_start 43*758e9fbaSOystein Eftevaag #define iesys_crypto_hash_update iesys_cryptogcry_hash_update 44*758e9fbaSOystein Eftevaag #define iesys_crypto_hash_update2b iesys_cryptogcry_hash_update2b 45*758e9fbaSOystein Eftevaag #define iesys_crypto_hash_finish iesys_cryptogcry_hash_finish 46*758e9fbaSOystein Eftevaag #define iesys_crypto_hash_finish2b iesys_cryptogcry_hash_finish2b 47*758e9fbaSOystein Eftevaag #define iesys_crypto_hash_abort iesys_cryptogcry_hash_abort 48*758e9fbaSOystein Eftevaag 49*758e9fbaSOystein Eftevaag TSS2_RC iesys_cryptogcry_hmac_start( 50*758e9fbaSOystein Eftevaag IESYS_CRYPTO_CONTEXT_BLOB **context, 51*758e9fbaSOystein Eftevaag TPM2_ALG_ID hmacAlg, 52*758e9fbaSOystein Eftevaag const uint8_t *key, 53*758e9fbaSOystein Eftevaag size_t size); 54*758e9fbaSOystein Eftevaag 55*758e9fbaSOystein Eftevaag TSS2_RC iesys_cryptogcry_hmac_start2b( 56*758e9fbaSOystein Eftevaag IESYS_CRYPTO_CONTEXT_BLOB **context, 57*758e9fbaSOystein Eftevaag TPM2_ALG_ID hmacAlg, 58*758e9fbaSOystein Eftevaag TPM2B *b); 59*758e9fbaSOystein Eftevaag 60*758e9fbaSOystein Eftevaag TSS2_RC iesys_cryptogcry_hmac_update( 61*758e9fbaSOystein Eftevaag IESYS_CRYPTO_CONTEXT_BLOB *context, 62*758e9fbaSOystein Eftevaag const uint8_t *buffer, 63*758e9fbaSOystein Eftevaag size_t size); 64*758e9fbaSOystein Eftevaag 65*758e9fbaSOystein Eftevaag TSS2_RC iesys_cryptogcry_hmac_update2b( 66*758e9fbaSOystein Eftevaag IESYS_CRYPTO_CONTEXT_BLOB *context, 67*758e9fbaSOystein Eftevaag TPM2B *b); 68*758e9fbaSOystein Eftevaag 69*758e9fbaSOystein Eftevaag TSS2_RC iesys_cryptogcry_hmac_finish( 70*758e9fbaSOystein Eftevaag IESYS_CRYPTO_CONTEXT_BLOB **context, 71*758e9fbaSOystein Eftevaag uint8_t *buffer, 72*758e9fbaSOystein Eftevaag size_t *size); 73*758e9fbaSOystein Eftevaag 74*758e9fbaSOystein Eftevaag TSS2_RC iesys_cryptogcry_hmac_finish2b( 75*758e9fbaSOystein Eftevaag IESYS_CRYPTO_CONTEXT_BLOB **context, 76*758e9fbaSOystein Eftevaag TPM2B *b); 77*758e9fbaSOystein Eftevaag 78*758e9fbaSOystein Eftevaag void iesys_cryptogcry_hmac_abort(IESYS_CRYPTO_CONTEXT_BLOB **context); 79*758e9fbaSOystein Eftevaag 80*758e9fbaSOystein Eftevaag #define iesys_crypto_hmac_start iesys_cryptogcry_hmac_start 81*758e9fbaSOystein Eftevaag #define iesys_crypto_hmac_start2b iesys_cryptogcry_hmac_start2b 82*758e9fbaSOystein Eftevaag #define iesys_crypto_hmac_update iesys_cryptogcry_hmac_update 83*758e9fbaSOystein Eftevaag #define iesys_crypto_hmac_update2b iesys_cryptogcry_hmac_update2b 84*758e9fbaSOystein Eftevaag #define iesys_crypto_hmac_finish iesys_cryptogcry_hmac_finish 85*758e9fbaSOystein Eftevaag #define iesys_crypto_hmac_finish2b iesys_cryptogcry_hmac_finish2b 86*758e9fbaSOystein Eftevaag #define iesys_crypto_hmac_abort iesys_cryptogcry_hmac_abort 87*758e9fbaSOystein Eftevaag 88*758e9fbaSOystein Eftevaag TSS2_RC iesys_cryptogcry_random2b(TPM2B_NONCE *nonce, size_t num_bytes); 89*758e9fbaSOystein Eftevaag #define iesys_crypto_random2b iesys_cryptogcry_random2b 90*758e9fbaSOystein Eftevaag 91*758e9fbaSOystein Eftevaag TSS2_RC iesys_cryptogcry_pk_encrypt( 92*758e9fbaSOystein Eftevaag TPM2B_PUBLIC *key, 93*758e9fbaSOystein Eftevaag size_t in_size, 94*758e9fbaSOystein Eftevaag BYTE *in_buffer, 95*758e9fbaSOystein Eftevaag size_t max_out_size, 96*758e9fbaSOystein Eftevaag BYTE *out_buffer, 97*758e9fbaSOystein Eftevaag size_t *out_size, 98*758e9fbaSOystein Eftevaag const char *label); 99*758e9fbaSOystein Eftevaag 100*758e9fbaSOystein Eftevaag #define iesys_crypto_pk_encrypt iesys_cryptogcry_pk_encrypt 101*758e9fbaSOystein Eftevaag 102*758e9fbaSOystein Eftevaag TSS2_RC iesys_cryptogcry_sym_aes_encrypt( 103*758e9fbaSOystein Eftevaag uint8_t *key, 104*758e9fbaSOystein Eftevaag TPM2_ALG_ID tpm_sym_alg, 105*758e9fbaSOystein Eftevaag TPMI_AES_KEY_BITS key_bits, 106*758e9fbaSOystein Eftevaag TPM2_ALG_ID tpm_mode, 107*758e9fbaSOystein Eftevaag size_t blk_len, 108*758e9fbaSOystein Eftevaag uint8_t *dst, 109*758e9fbaSOystein Eftevaag size_t dst_size, 110*758e9fbaSOystein Eftevaag uint8_t *iv); 111*758e9fbaSOystein Eftevaag 112*758e9fbaSOystein Eftevaag TSS2_RC iesys_cryptogcry_sym_aes_decrypt( 113*758e9fbaSOystein Eftevaag uint8_t *key, 114*758e9fbaSOystein Eftevaag TPM2_ALG_ID tpm_sym_alg, 115*758e9fbaSOystein Eftevaag TPMI_AES_KEY_BITS key_bits, 116*758e9fbaSOystein Eftevaag TPM2_ALG_ID tpm_mode, 117*758e9fbaSOystein Eftevaag size_t blk_len, 118*758e9fbaSOystein Eftevaag uint8_t *dst, 119*758e9fbaSOystein Eftevaag size_t dst_size, 120*758e9fbaSOystein Eftevaag uint8_t *iv); 121*758e9fbaSOystein Eftevaag 122*758e9fbaSOystein Eftevaag TSS2_RC iesys_cryptogcry_get_ecdh_point( 123*758e9fbaSOystein Eftevaag TPM2B_PUBLIC *key, 124*758e9fbaSOystein Eftevaag size_t max_out_size, 125*758e9fbaSOystein Eftevaag TPM2B_ECC_PARAMETER *Z, 126*758e9fbaSOystein Eftevaag TPMS_ECC_POINT *Q, 127*758e9fbaSOystein Eftevaag BYTE * out_buffer, 128*758e9fbaSOystein Eftevaag size_t * out_size); 129*758e9fbaSOystein Eftevaag 130*758e9fbaSOystein Eftevaag #define iesys_crypto_get_ecdh_point iesys_cryptogcry_get_ecdh_point 131*758e9fbaSOystein Eftevaag #define iesys_crypto_sym_aes_encrypt iesys_cryptogcry_sym_aes_encrypt 132*758e9fbaSOystein Eftevaag #define iesys_crypto_sym_aes_decrypt iesys_cryptogcry_sym_aes_decrypt 133*758e9fbaSOystein Eftevaag 134*758e9fbaSOystein Eftevaag TSS2_RC iesys_cryptogcry_init(); 135*758e9fbaSOystein Eftevaag 136*758e9fbaSOystein Eftevaag #define iesys_crypto_init iesys_cryptogcry_init 137*758e9fbaSOystein Eftevaag 138*758e9fbaSOystein Eftevaag #endif /* ESYS_CRYPTO_GCRYPT_H */ 139*758e9fbaSOystein Eftevaag 140*758e9fbaSOystein Eftevaag #ifdef __cplusplus 141*758e9fbaSOystein Eftevaag } /* extern "C" */ 142*758e9fbaSOystein Eftevaag #endif 143