1*758e9fbaSOystein Eftevaag /* SPDX-License-Identifier: BSD-2-Clause */ 2*758e9fbaSOystein Eftevaag /******************************************************************************* 3*758e9fbaSOystein Eftevaag * Copyright 2018-2019, Fraunhofer SIT sponsored by Infineon Technologies AG 4*758e9fbaSOystein Eftevaag * All rights reserved. 5*758e9fbaSOystein Eftevaag ******************************************************************************/ 6*758e9fbaSOystein Eftevaag #ifndef FAPI_CRYPTO_H 7*758e9fbaSOystein Eftevaag #define FAPI_CRYPTO_H 8*758e9fbaSOystein Eftevaag 9*758e9fbaSOystein Eftevaag #include "fapi_int.h" 10*758e9fbaSOystein Eftevaag 11*758e9fbaSOystein Eftevaag TSS2_RC 12*758e9fbaSOystein Eftevaag ifapi_get_profile_sig_scheme( 13*758e9fbaSOystein Eftevaag const IFAPI_PROFILE *profile, 14*758e9fbaSOystein Eftevaag const TPMT_PUBLIC *tpmPublic, 15*758e9fbaSOystein Eftevaag TPMT_SIG_SCHEME *signatureScheme); 16*758e9fbaSOystein Eftevaag 17*758e9fbaSOystein Eftevaag TSS2_RC 18*758e9fbaSOystein Eftevaag ifapi_der_sig_to_tpm( 19*758e9fbaSOystein Eftevaag const TPMT_PUBLIC *tpmPublic, 20*758e9fbaSOystein Eftevaag const unsigned char *signature, 21*758e9fbaSOystein Eftevaag size_t signatureSize, 22*758e9fbaSOystein Eftevaag TPMI_ALG_HASH hashAlgorithm, 23*758e9fbaSOystein Eftevaag TPMT_SIGNATURE *tpmSignature); 24*758e9fbaSOystein Eftevaag 25*758e9fbaSOystein Eftevaag TSS2_RC 26*758e9fbaSOystein Eftevaag ifapi_tpm_ecc_sig_to_der( 27*758e9fbaSOystein Eftevaag const TPMT_SIGNATURE *tpmSignature, 28*758e9fbaSOystein Eftevaag uint8_t **signature, 29*758e9fbaSOystein Eftevaag size_t *signatureSize); 30*758e9fbaSOystein Eftevaag 31*758e9fbaSOystein Eftevaag TSS2_RC 32*758e9fbaSOystein Eftevaag ifapi_pub_pem_key_from_tpm( 33*758e9fbaSOystein Eftevaag const TPM2B_PUBLIC *tpmPublicKey, 34*758e9fbaSOystein Eftevaag char **pemKey, 35*758e9fbaSOystein Eftevaag int *pemKeySize); 36*758e9fbaSOystein Eftevaag 37*758e9fbaSOystein Eftevaag TSS2_RC 38*758e9fbaSOystein Eftevaag ifapi_verify_signature( 39*758e9fbaSOystein Eftevaag const IFAPI_OBJECT *keyObject, 40*758e9fbaSOystein Eftevaag const uint8_t *signature, 41*758e9fbaSOystein Eftevaag size_t signatureSize, 42*758e9fbaSOystein Eftevaag const uint8_t *digest, 43*758e9fbaSOystein Eftevaag size_t digestSize); 44*758e9fbaSOystein Eftevaag 45*758e9fbaSOystein Eftevaag TSS2_RC 46*758e9fbaSOystein Eftevaag ifapi_verify_signature_quote( 47*758e9fbaSOystein Eftevaag const IFAPI_OBJECT *keyObject, 48*758e9fbaSOystein Eftevaag const uint8_t *signature, 49*758e9fbaSOystein Eftevaag size_t signatureSize, 50*758e9fbaSOystein Eftevaag const uint8_t *digest, 51*758e9fbaSOystein Eftevaag size_t digestSize, 52*758e9fbaSOystein Eftevaag const TPMT_SIG_SCHEME *signatureScheme); 53*758e9fbaSOystein Eftevaag 54*758e9fbaSOystein Eftevaag 55*758e9fbaSOystein Eftevaag typedef struct _IFAPI_CRYPTO_CONTEXT IFAPI_CRYPTO_CONTEXT_BLOB; 56*758e9fbaSOystein Eftevaag 57*758e9fbaSOystein Eftevaag TSS2_RC 58*758e9fbaSOystein Eftevaag ifapi_crypto_hash_start( 59*758e9fbaSOystein Eftevaag IFAPI_CRYPTO_CONTEXT_BLOB **context, 60*758e9fbaSOystein Eftevaag TPM2_ALG_ID hashAlgorithm); 61*758e9fbaSOystein Eftevaag 62*758e9fbaSOystein Eftevaag TSS2_RC 63*758e9fbaSOystein Eftevaag ifapi_crypto_hash_update( 64*758e9fbaSOystein Eftevaag IFAPI_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 69*758e9fbaSOystein Eftevaag ifapi_crypto_hash_finish( 70*758e9fbaSOystein Eftevaag IFAPI_CRYPTO_CONTEXT_BLOB **context, 71*758e9fbaSOystein Eftevaag uint8_t *digest, 72*758e9fbaSOystein Eftevaag size_t *digestSize); 73*758e9fbaSOystein Eftevaag 74*758e9fbaSOystein Eftevaag void 75*758e9fbaSOystein Eftevaag ifapi_crypto_hash_abort( 76*758e9fbaSOystein Eftevaag IFAPI_CRYPTO_CONTEXT_BLOB **context); 77*758e9fbaSOystein Eftevaag 78*758e9fbaSOystein Eftevaag TSS2_RC 79*758e9fbaSOystein Eftevaag ifapi_cert_to_pem( 80*758e9fbaSOystein Eftevaag const uint8_t *certBuffer, 81*758e9fbaSOystein Eftevaag size_t certBufferSize, 82*758e9fbaSOystein Eftevaag char **pemCert, 83*758e9fbaSOystein Eftevaag TPM2_ALG_ID *certAlgorithmId, 84*758e9fbaSOystein Eftevaag TPM2B_PUBLIC *tpmPublic); 85*758e9fbaSOystein Eftevaag 86*758e9fbaSOystein Eftevaag size_t 87*758e9fbaSOystein Eftevaag ifapi_hash_get_digest_size( 88*758e9fbaSOystein Eftevaag TPM2_ALG_ID hashAlgorithm); 89*758e9fbaSOystein Eftevaag 90*758e9fbaSOystein Eftevaag TSS2_RC 91*758e9fbaSOystein Eftevaag ifapi_get_tpm2b_public_from_pem( 92*758e9fbaSOystein Eftevaag const char *pemKey, 93*758e9fbaSOystein Eftevaag TPM2B_PUBLIC *tpmPublic); 94*758e9fbaSOystein Eftevaag 95*758e9fbaSOystein Eftevaag TSS2_RC 96*758e9fbaSOystein Eftevaag ifapi_get_hash_alg_for_size( 97*758e9fbaSOystein Eftevaag uint16_t size, 98*758e9fbaSOystein Eftevaag TPMI_ALG_HASH *hashAlgorithm); 99*758e9fbaSOystein Eftevaag 100*758e9fbaSOystein Eftevaag TSS2_RC 101*758e9fbaSOystein Eftevaag ifapi_get_public_from_pem_cert( 102*758e9fbaSOystein Eftevaag const char* pem_cert, 103*758e9fbaSOystein Eftevaag TPM2B_PUBLIC *tpm_public); 104*758e9fbaSOystein Eftevaag 105*758e9fbaSOystein Eftevaag TSS2_RC 106*758e9fbaSOystein Eftevaag ifapi_initialize_sign_public( 107*758e9fbaSOystein Eftevaag TPM2_ALG_ID signatureAlgorithm, 108*758e9fbaSOystein Eftevaag TPM2B_PUBLIC *template); 109*758e9fbaSOystein Eftevaag 110*758e9fbaSOystein Eftevaag TPM2_ALG_ID 111*758e9fbaSOystein Eftevaag ifapi_get_signature_algorithm_from_pem( 112*758e9fbaSOystein Eftevaag const char *pemKey); 113*758e9fbaSOystein Eftevaag 114*758e9fbaSOystein Eftevaag TSS2_RC 115*758e9fbaSOystein Eftevaag ifapi_verify_ek_cert( 116*758e9fbaSOystein Eftevaag char* root_cert_pem, 117*758e9fbaSOystein Eftevaag char* intermed_cert_pem, 118*758e9fbaSOystein Eftevaag char* ek_cert_pem); 119*758e9fbaSOystein Eftevaag 120*758e9fbaSOystein Eftevaag TSS2_RC 121*758e9fbaSOystein Eftevaag ifapi_get_tpm_key_fingerprint( 122*758e9fbaSOystein Eftevaag const TPM2B_PUBLIC *tpmPublicKey, 123*758e9fbaSOystein Eftevaag TPMI_ALG_HASH hashAlg, 124*758e9fbaSOystein Eftevaag TPM2B_DIGEST *fingerprint); 125*758e9fbaSOystein Eftevaag 126*758e9fbaSOystein Eftevaag #endif /* FAPI_CRYPTO_H */ 127