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_OSSL_H 7*758e9fbaSOystein Eftevaag #define ESYS_CRYPTO_OSSL_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 #define OSSL_FREE(S,TYPE) if((S) != NULL) {TYPE##_free((void*) (S)); (S)=NULL;} 18*758e9fbaSOystein Eftevaag 19*758e9fbaSOystein Eftevaag typedef struct _IESYS_CRYPTO_CONTEXT IESYS_CRYPTO_CONTEXT_BLOB; 20*758e9fbaSOystein Eftevaag 21*758e9fbaSOystein Eftevaag TSS2_RC iesys_cryptossl_hash_start( 22*758e9fbaSOystein Eftevaag IESYS_CRYPTO_CONTEXT_BLOB **context, 23*758e9fbaSOystein Eftevaag TPM2_ALG_ID hashAlg); 24*758e9fbaSOystein Eftevaag 25*758e9fbaSOystein Eftevaag TSS2_RC iesys_cryptossl_hash_update( 26*758e9fbaSOystein Eftevaag IESYS_CRYPTO_CONTEXT_BLOB *context, 27*758e9fbaSOystein Eftevaag const uint8_t *buffer, size_t size); 28*758e9fbaSOystein Eftevaag 29*758e9fbaSOystein Eftevaag TSS2_RC iesys_cryptossl_hash_update2b( 30*758e9fbaSOystein Eftevaag IESYS_CRYPTO_CONTEXT_BLOB *context, 31*758e9fbaSOystein Eftevaag TPM2B *b); 32*758e9fbaSOystein Eftevaag 33*758e9fbaSOystein Eftevaag TSS2_RC iesys_cryptossl_hash_finish( 34*758e9fbaSOystein Eftevaag IESYS_CRYPTO_CONTEXT_BLOB **context, 35*758e9fbaSOystein Eftevaag uint8_t *buffer, 36*758e9fbaSOystein Eftevaag size_t *size); 37*758e9fbaSOystein Eftevaag 38*758e9fbaSOystein Eftevaag TSS2_RC iesys_cryptossl_hash_finish2b( 39*758e9fbaSOystein Eftevaag IESYS_CRYPTO_CONTEXT_BLOB **context, 40*758e9fbaSOystein Eftevaag TPM2B *b); 41*758e9fbaSOystein Eftevaag 42*758e9fbaSOystein Eftevaag void iesys_cryptossl_hash_abort(IESYS_CRYPTO_CONTEXT_BLOB **context); 43*758e9fbaSOystein Eftevaag 44*758e9fbaSOystein Eftevaag #define iesys_crypto_pk_encrypt iesys_cryptossl_pk_encrypt 45*758e9fbaSOystein Eftevaag #define iesys_crypto_hash_start iesys_cryptossl_hash_start 46*758e9fbaSOystein Eftevaag #define iesys_crypto_hash_update iesys_cryptossl_hash_update 47*758e9fbaSOystein Eftevaag #define iesys_crypto_hash_update2b iesys_cryptossl_hash_update2b 48*758e9fbaSOystein Eftevaag #define iesys_crypto_hash_finish iesys_cryptossl_hash_finish 49*758e9fbaSOystein Eftevaag #define iesys_crypto_hash_finish2b iesys_cryptossl_hash_finish2b 50*758e9fbaSOystein Eftevaag #define iesys_crypto_hash_abort iesys_cryptossl_hash_abort 51*758e9fbaSOystein Eftevaag 52*758e9fbaSOystein Eftevaag TSS2_RC iesys_cryptossl_hmac_start( 53*758e9fbaSOystein Eftevaag IESYS_CRYPTO_CONTEXT_BLOB **context, 54*758e9fbaSOystein Eftevaag TPM2_ALG_ID hmacAlg, 55*758e9fbaSOystein Eftevaag const uint8_t *key, 56*758e9fbaSOystein Eftevaag size_t size); 57*758e9fbaSOystein Eftevaag 58*758e9fbaSOystein Eftevaag TSS2_RC iesys_cryptossl_hmac_start2b( 59*758e9fbaSOystein Eftevaag IESYS_CRYPTO_CONTEXT_BLOB **context, 60*758e9fbaSOystein Eftevaag TPM2_ALG_ID hmacAlg, 61*758e9fbaSOystein Eftevaag TPM2B *b); 62*758e9fbaSOystein Eftevaag 63*758e9fbaSOystein Eftevaag TSS2_RC iesys_cryptossl_hmac_update( 64*758e9fbaSOystein Eftevaag IESYS_CRYPTO_CONTEXT_BLOB *context, 65*758e9fbaSOystein Eftevaag const uint8_t *buffer, 66*758e9fbaSOystein Eftevaag size_t size); 67*758e9fbaSOystein Eftevaag 68*758e9fbaSOystein Eftevaag TSS2_RC iesys_cryptossl_hmac_update2b( 69*758e9fbaSOystein Eftevaag IESYS_CRYPTO_CONTEXT_BLOB *context, 70*758e9fbaSOystein Eftevaag TPM2B *b); 71*758e9fbaSOystein Eftevaag 72*758e9fbaSOystein Eftevaag TSS2_RC iesys_cryptossl_hmac_finish( 73*758e9fbaSOystein Eftevaag IESYS_CRYPTO_CONTEXT_BLOB **context, 74*758e9fbaSOystein Eftevaag uint8_t *buffer, 75*758e9fbaSOystein Eftevaag size_t *size); 76*758e9fbaSOystein Eftevaag 77*758e9fbaSOystein Eftevaag TSS2_RC iesys_cryptossl_hmac_finish2b( 78*758e9fbaSOystein Eftevaag IESYS_CRYPTO_CONTEXT_BLOB **context, 79*758e9fbaSOystein Eftevaag TPM2B *b); 80*758e9fbaSOystein Eftevaag 81*758e9fbaSOystein Eftevaag void iesys_cryptossl_hmac_abort(IESYS_CRYPTO_CONTEXT_BLOB **context); 82*758e9fbaSOystein Eftevaag 83*758e9fbaSOystein Eftevaag #define iesys_crypto_hmac_start iesys_cryptossl_hmac_start 84*758e9fbaSOystein Eftevaag #define iesys_crypto_hmac_start2b iesys_cryptossl_hmac_start2b 85*758e9fbaSOystein Eftevaag #define iesys_crypto_hmac_update iesys_cryptossl_hmac_update 86*758e9fbaSOystein Eftevaag #define iesys_crypto_hmac_update2b iesys_cryptossl_hmac_update2b 87*758e9fbaSOystein Eftevaag #define iesys_crypto_hmac_finish iesys_cryptossl_hmac_finish 88*758e9fbaSOystein Eftevaag #define iesys_crypto_hmac_finish2b iesys_cryptossl_hmac_finish2b 89*758e9fbaSOystein Eftevaag #define iesys_crypto_hmac_abort iesys_cryptossl_hmac_abort 90*758e9fbaSOystein Eftevaag 91*758e9fbaSOystein Eftevaag TSS2_RC iesys_cryptossl_random2b(TPM2B_NONCE *nonce, size_t num_bytes); 92*758e9fbaSOystein Eftevaag 93*758e9fbaSOystein Eftevaag TSS2_RC iesys_cryptossl_pk_encrypt( 94*758e9fbaSOystein Eftevaag TPM2B_PUBLIC *key, 95*758e9fbaSOystein Eftevaag size_t in_size, 96*758e9fbaSOystein Eftevaag BYTE *in_buffer, 97*758e9fbaSOystein Eftevaag size_t max_out_size, 98*758e9fbaSOystein Eftevaag BYTE *out_buffer, 99*758e9fbaSOystein Eftevaag size_t *out_size, 100*758e9fbaSOystein Eftevaag const char *label); 101*758e9fbaSOystein Eftevaag 102*758e9fbaSOystein Eftevaag 103*758e9fbaSOystein Eftevaag TSS2_RC iesys_cryptossl_sym_aes_encrypt( 104*758e9fbaSOystein Eftevaag uint8_t *key, 105*758e9fbaSOystein Eftevaag TPM2_ALG_ID tpm_sym_alg, 106*758e9fbaSOystein Eftevaag TPMI_AES_KEY_BITS key_bits, 107*758e9fbaSOystein Eftevaag TPM2_ALG_ID tpm_mode, 108*758e9fbaSOystein Eftevaag size_t blk_len, 109*758e9fbaSOystein Eftevaag uint8_t *dst, 110*758e9fbaSOystein Eftevaag size_t dst_size, 111*758e9fbaSOystein Eftevaag uint8_t *iv); 112*758e9fbaSOystein Eftevaag 113*758e9fbaSOystein Eftevaag TSS2_RC iesys_cryptossl_sym_aes_decrypt( 114*758e9fbaSOystein Eftevaag uint8_t *key, 115*758e9fbaSOystein Eftevaag TPM2_ALG_ID tpm_sym_alg, 116*758e9fbaSOystein Eftevaag TPMI_AES_KEY_BITS key_bits, 117*758e9fbaSOystein Eftevaag TPM2_ALG_ID tpm_mode, 118*758e9fbaSOystein Eftevaag size_t blk_len, 119*758e9fbaSOystein Eftevaag uint8_t *dst, 120*758e9fbaSOystein Eftevaag size_t dst_size, 121*758e9fbaSOystein Eftevaag uint8_t *iv); 122*758e9fbaSOystein Eftevaag 123*758e9fbaSOystein Eftevaag TSS2_RC iesys_cryptossl_get_ecdh_point( 124*758e9fbaSOystein Eftevaag TPM2B_PUBLIC *key, 125*758e9fbaSOystein Eftevaag size_t max_out_size, 126*758e9fbaSOystein Eftevaag TPM2B_ECC_PARAMETER *Z, 127*758e9fbaSOystein Eftevaag TPMS_ECC_POINT *Q, 128*758e9fbaSOystein Eftevaag BYTE * out_buffer, 129*758e9fbaSOystein Eftevaag size_t * out_size); 130*758e9fbaSOystein Eftevaag 131*758e9fbaSOystein Eftevaag #define iesys_crypto_random2b iesys_cryptossl_random2b 132*758e9fbaSOystein Eftevaag #define iesys_crypto_get_ecdh_point iesys_cryptossl_get_ecdh_point 133*758e9fbaSOystein Eftevaag #define iesys_crypto_sym_aes_encrypt iesys_cryptossl_sym_aes_encrypt 134*758e9fbaSOystein Eftevaag #define iesys_crypto_sym_aes_decrypt iesys_cryptossl_sym_aes_decrypt 135*758e9fbaSOystein Eftevaag 136*758e9fbaSOystein Eftevaag TSS2_RC iesys_cryptossl_init(); 137*758e9fbaSOystein Eftevaag 138*758e9fbaSOystein Eftevaag #define iesys_crypto_init iesys_cryptossl_init 139*758e9fbaSOystein Eftevaag 140*758e9fbaSOystein Eftevaag #ifdef __cplusplus 141*758e9fbaSOystein Eftevaag } /* extern "C" */ 142*758e9fbaSOystein Eftevaag #endif 143*758e9fbaSOystein Eftevaag 144*758e9fbaSOystein Eftevaag #endif /* ESYS_CRYPTO_OSSL_H */ 145