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_H 7*758e9fbaSOystein Eftevaag #define ESYS_CRYPTO_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 #ifdef OSSL 13*758e9fbaSOystein Eftevaag #include "esys_crypto_ossl.h" 14*758e9fbaSOystein Eftevaag #elif defined (BSSL) 15*758e9fbaSOystein Eftevaag #include "esys_crypto_bssl.h" 16*758e9fbaSOystein Eftevaag #else 17*758e9fbaSOystein Eftevaag #include "esys_crypto_gcrypt.h" 18*758e9fbaSOystein Eftevaag #endif 19*758e9fbaSOystein Eftevaag 20*758e9fbaSOystein Eftevaag #ifdef __cplusplus 21*758e9fbaSOystein Eftevaag extern "C" { 22*758e9fbaSOystein Eftevaag #endif 23*758e9fbaSOystein Eftevaag 24*758e9fbaSOystein Eftevaag #define AES_BLOCK_SIZE_IN_BYTES 16 25*758e9fbaSOystein Eftevaag 26*758e9fbaSOystein Eftevaag TSS2_RC iesys_crypto_hash_get_digest_size(TPM2_ALG_ID hashAlg, size_t *size); 27*758e9fbaSOystein Eftevaag 28*758e9fbaSOystein Eftevaag TSS2_RC iesys_crypto_pHash( 29*758e9fbaSOystein Eftevaag TPM2_ALG_ID alg, 30*758e9fbaSOystein Eftevaag const uint8_t rcBuffer[4], 31*758e9fbaSOystein Eftevaag const uint8_t ccBuffer[4], 32*758e9fbaSOystein Eftevaag const TPM2B_NAME *name1, 33*758e9fbaSOystein Eftevaag const TPM2B_NAME *name2, 34*758e9fbaSOystein Eftevaag const TPM2B_NAME *name3, 35*758e9fbaSOystein Eftevaag const uint8_t *pBuffer, 36*758e9fbaSOystein Eftevaag size_t pBuffer_size, 37*758e9fbaSOystein Eftevaag uint8_t *pHash, 38*758e9fbaSOystein Eftevaag size_t *pHash_size); 39*758e9fbaSOystein Eftevaag 40*758e9fbaSOystein Eftevaag #define iesys_crypto_cpHash(alg, ccBuffer, name1, name2, name3, \ 41*758e9fbaSOystein Eftevaag cpBuffer, cpBuffer_size, cpHash, cpHash_size) \ 42*758e9fbaSOystein Eftevaag iesys_crypto_pHash(alg, NULL, ccBuffer, name1, name2, name3, cpBuffer, \ 43*758e9fbaSOystein Eftevaag cpBuffer_size, cpHash, cpHash_size) 44*758e9fbaSOystein Eftevaag #define iesys_crypto_rpHash(alg, rcBuffer, ccBuffer, rpBuffer, rpBuffer_size, \ 45*758e9fbaSOystein Eftevaag rpHash, rpHash_size) \ 46*758e9fbaSOystein Eftevaag iesys_crypto_pHash(alg, rcBuffer, ccBuffer, NULL, NULL, NULL, rpBuffer, \ 47*758e9fbaSOystein Eftevaag rpBuffer_size, rpHash, rpHash_size) 48*758e9fbaSOystein Eftevaag 49*758e9fbaSOystein Eftevaag 50*758e9fbaSOystein Eftevaag TSS2_RC iesys_crypto_authHmac( 51*758e9fbaSOystein Eftevaag TPM2_ALG_ID alg, 52*758e9fbaSOystein Eftevaag uint8_t *hmacKey, 53*758e9fbaSOystein Eftevaag size_t hmacKeySize, 54*758e9fbaSOystein Eftevaag const uint8_t *pHash, 55*758e9fbaSOystein Eftevaag size_t pHash_size, 56*758e9fbaSOystein Eftevaag const TPM2B_NONCE *nonceNewer, 57*758e9fbaSOystein Eftevaag const TPM2B_NONCE *nonceOlder, 58*758e9fbaSOystein Eftevaag const TPM2B_NONCE *nonceDecrypt, 59*758e9fbaSOystein Eftevaag const TPM2B_NONCE *nonceEncrypt, 60*758e9fbaSOystein Eftevaag TPMA_SESSION sessionAttributes, 61*758e9fbaSOystein Eftevaag TPM2B_AUTH *hmac); 62*758e9fbaSOystein Eftevaag 63*758e9fbaSOystein Eftevaag TSS2_RC iesys_crypto_KDFaHmac( 64*758e9fbaSOystein Eftevaag TPM2_ALG_ID alg, 65*758e9fbaSOystein Eftevaag uint8_t *hmacKey, 66*758e9fbaSOystein Eftevaag size_t hmacKeySize, 67*758e9fbaSOystein Eftevaag uint32_t counter, 68*758e9fbaSOystein Eftevaag const char *label, 69*758e9fbaSOystein Eftevaag TPM2B_NONCE *contextU, 70*758e9fbaSOystein Eftevaag TPM2B_NONCE *contextV, 71*758e9fbaSOystein Eftevaag uint32_t bitlength, 72*758e9fbaSOystein Eftevaag uint8_t *hmac, 73*758e9fbaSOystein Eftevaag size_t *hmacSize); 74*758e9fbaSOystein Eftevaag 75*758e9fbaSOystein Eftevaag TSS2_RC iesys_crypto_KDFa( 76*758e9fbaSOystein Eftevaag TPM2_ALG_ID hashAlg, 77*758e9fbaSOystein Eftevaag uint8_t *hmacKey, 78*758e9fbaSOystein Eftevaag size_t hmacKeySize, 79*758e9fbaSOystein Eftevaag const char *label, 80*758e9fbaSOystein Eftevaag TPM2B_NONCE *contextU, 81*758e9fbaSOystein Eftevaag TPM2B_NONCE *contextV, 82*758e9fbaSOystein Eftevaag uint32_t bitLength, 83*758e9fbaSOystein Eftevaag uint32_t *counterInOut, 84*758e9fbaSOystein Eftevaag BYTE *outKey, 85*758e9fbaSOystein Eftevaag BOOL use_digest_size); 86*758e9fbaSOystein Eftevaag 87*758e9fbaSOystein Eftevaag TSS2_RC iesys_xor_parameter_obfuscation( 88*758e9fbaSOystein Eftevaag TPM2_ALG_ID hash_alg, 89*758e9fbaSOystein Eftevaag uint8_t *key, 90*758e9fbaSOystein Eftevaag size_t key_size, 91*758e9fbaSOystein Eftevaag TPM2B_NONCE * contextU, 92*758e9fbaSOystein Eftevaag TPM2B_NONCE * contextV, 93*758e9fbaSOystein Eftevaag BYTE *data, 94*758e9fbaSOystein Eftevaag size_t data_size); 95*758e9fbaSOystein Eftevaag 96*758e9fbaSOystein Eftevaag TSS2_RC iesys_crypto_KDFe( 97*758e9fbaSOystein Eftevaag TPM2_ALG_ID hashAlg, 98*758e9fbaSOystein Eftevaag TPM2B_ECC_PARAMETER *Z, 99*758e9fbaSOystein Eftevaag const char *label, 100*758e9fbaSOystein Eftevaag TPM2B_ECC_PARAMETER *partyUInfo, 101*758e9fbaSOystein Eftevaag TPM2B_ECC_PARAMETER *partyVInfo, 102*758e9fbaSOystein Eftevaag UINT32 bit_size, 103*758e9fbaSOystein Eftevaag BYTE *key); 104*758e9fbaSOystein Eftevaag 105*758e9fbaSOystein Eftevaag TSS2_RC iesys_initialize_crypto(); 106*758e9fbaSOystein Eftevaag 107*758e9fbaSOystein Eftevaag #ifdef __cplusplus 108*758e9fbaSOystein Eftevaag } /* extern "C" */ 109*758e9fbaSOystein Eftevaag #endif 110*758e9fbaSOystein Eftevaag 111*758e9fbaSOystein Eftevaag #endif /* ESYS_CRYPTO_H */ 112