#ifndef _ECC256_H_ #define _ECC256_H_ #include "sgx_tcrypto.h" typedef void* ecc_state_handle_t; typedef void* sha_state_handle_t; #ifdef __cplusplus extern "C" { #endif int ecc256_open_context(ecc_state_handle_t* p_ecc_handle); void ecc256_close_context(ecc_state_handle_t ecc_handle); int ecc256_create_key_pair(sgx_ec256_private_t *p_private, sgx_ec256_public_t *p_public, ecc_state_handle_t ecc_handle); int ecc256_compute_shared_dhkey(const sgx_ec256_private_t *p_private_b, const sgx_ec256_public_t *p_public_ga, sgx_ec256_dh_shared_t *p_shared_key, ecc_state_handle_t ecc_handle); int cmac128(const sgx_cmac_128bit_key_t *p_key, const uint8_t *p_src, uint32_t src_len, sgx_cmac_128bit_tag_t *p_mac); int sha256_digest(const uint8_t *p_src, uint32_t src_len, sgx_sha256_hash_t *p_hash); int sha256_init(sha_state_handle_t* p_sha_handle); int sha256_update(const uint8_t *p_src, uint32_t src_len, sha_state_handle_t sha_handle); int sha256_finish(sha_state_handle_t sha_handle, sgx_sha256_hash_t *p_hash); void sha256_close(sha_state_handle_t sha_handle); int aes_gcm_encrypt(const sgx_aes_gcm_128bit_key_t *p_key, const uint8_t *p_src, uint32_t src_len, uint8_t *p_dst, const uint8_t *p_iv, uint32_t iv_len, const uint8_t *p_aad, uint32_t aad_len, sgx_aes_gcm_128bit_tag_t *p_out_mac); int aes_gcm_decrypt(const sgx_aes_gcm_128bit_key_t *p_key, const uint8_t *p_src, uint32_t src_len, uint8_t *p_dst, const uint8_t *p_iv, uint32_t iv_len, const uint8_t *p_aad, uint32_t aad_len, const sgx_aes_gcm_128bit_tag_t *p_in_mac); int ecdsa_sign(const uint8_t *p_data, uint32_t data_size, const sgx_ec256_private_t *p_private, sgx_ec256_signature_t *p_signature, ecc_state_handle_t ecc_handle); #ifdef __cplusplus } #endif #endif