#pragma once /*! * \file */ #ifdef __cplusplus extern "C" { #endif #include "api.h" /*! * \brief elgamal_initialize initializes the elgamal library */ extern void elgamal_initialize(void); /*! * \brief elgamal_create_keypair * \return The new keypair */ extern struct KeyPair elgamal_create_keypair(void); /*! * \brief elgamal_keypair_deleter * \param p the keypair to be freed */ extern void elgamal_keypair_deleter(struct KeyPair* p); /*! * \brief elgamal_get_pubkey_array * \param buffer * \param len * \param pubkey */ extern void elgamal_get_key_array(char** buffer, size_t* len, void* pubkey); /*! * \brief elgamal_add_public_share * \param buffer * \param in_len * \param share * \param in_len * \param pubkey */ void elgamal_add_public_share(char** buffer, size_t* out_len, char const* share, size_t in_len, void* pubkey); /*! * \brief elgamal_derive_shared_key * \param pair Our keypair. * \param pub_key The public key of the other party. * \param swap_pub_order Should we swap the order in which we feed the public keys to the hash function. * \return A Shared key */ extern struct SharedKey elgamal_derive_shared_key(struct KeyPair pair, void const* pub_key, bool swap_pub_order); /*! * \brief elgamal_shared_key_deleter * \param s The shared key to be freed. */ extern void elgamal_shared_key_deleter(struct SharedKey* s); /*! * \brief elgamal_deinitialize deinitializes the elgamal_library */ void elgamal_deinitialize(void); /*! * \brief get_elgamal_implementation * \return */ struct Api get_elgamal_implementation(); #ifdef __cplusplus } #endif