diff options
| author | Dennis Brentjes <d.brentjes@gmail.com> | 2016-10-27 09:25:53 +0200 |
|---|---|---|
| committer | Dennis Brentjes <d.brentjes@gmail.com> | 2016-10-27 09:25:53 +0200 |
| commit | 25db9ff8a4cfb4b98aeeaae360e8c718b9c5e20c (patch) | |
| tree | 079ea63fcc874506072a91b13d2612b510cf158e /libcmix-crypto | |
| parent | 9eaf47d5dfa56ca79ae903aabfc2cf52bdfb981e (diff) | |
| download | cmix-25db9ff8a4cfb4b98aeeaae360e8c718b9c5e20c.tar.gz cmix-25db9ff8a4cfb4b98aeeaae360e8c718b9c5e20c.tar.bz2 cmix-25db9ff8a4cfb4b98aeeaae360e8c718b9c5e20c.zip | |
Adds libgcrypt implementation for elgamal in multiplicative group.
Also adapts the API to both handle sodium and gcrypt libraries.
Diffstat (limited to 'libcmix-crypto')
| -rw-r--r-- | libcmix-crypto/CMakeLists.txt | 14 | ||||
| -rw-r--r-- | libcmix-crypto/api.h | 31 | ||||
| -rw-r--r-- | libcmix-crypto/curve25519/curve25519.c | 7 | ||||
| -rw-r--r-- | libcmix-crypto/curve25519/curve25519.h | 34 | ||||
| -rw-r--r-- | libcmix-crypto/curve25519/null/null_curve25519.c | 18 | ||||
| -rw-r--r-- | libcmix-crypto/curve25519/sodium/libsodium_curve25519.c | 47 | ||||
| -rw-r--r-- | libcmix-crypto/elgamal/elgamal.c | 7 | ||||
| -rw-r--r-- | libcmix-crypto/elgamal/elgamal.h | 36 | ||||
| -rw-r--r-- | libcmix-crypto/elgamal/gcrypt/CMakeLists.txt | 19 | ||||
| -rw-r--r-- | libcmix-crypto/elgamal/gcrypt/gcrypt_elgamal.c | 137 | ||||
| -rw-r--r-- | libcmix-crypto/elgamal/null/null_elgamal.c | 15 | ||||
| -rw-r--r-- | libcmix-crypto/keypair.h | 6 | ||||
| -rw-r--r-- | libcmix-crypto/sharedkey.h | 3 |
13 files changed, 316 insertions, 58 deletions
diff --git a/libcmix-crypto/CMakeLists.txt b/libcmix-crypto/CMakeLists.txt index 0986024..65b00ab 100644 --- a/libcmix-crypto/CMakeLists.txt +++ b/libcmix-crypto/CMakeLists.txt @@ -34,7 +34,13 @@ target_sources(cmix-crypto option(UseEC "Use curve25519 instead of RSA" ON) -target_link_libraries(cmix-crypto - INTERFACE curve25519-implementation - INTERFACE elgamal-implementation -)
\ No newline at end of file +if(UseEC) + target_link_libraries(cmix-crypto + INTERFACE curve25519-implementation + ) +else(UseEC) + target_link_libraries(cmix-crypto + INTERFACE elgamal-implementation + ) +endif(UseEC) + diff --git a/libcmix-crypto/api.h b/libcmix-crypto/api.h index c6f904f..5267f33 100644 --- a/libcmix-crypto/api.h +++ b/libcmix-crypto/api.h @@ -13,44 +13,65 @@ extern "C" { #include "keypair.h" #include "sharedkey.h" +typedef void(*Initializer)(void); + /*! * \brief Defines how a KeyPair create function should look like. * Used to store a pointer to function to a implementation. */ -typedef struct KeyPair (*KeyPairCreator)(); +typedef struct KeyPair (*KeyPairCreator)(void); /*! * \brief Defines how a KeyPair deleter function should look like. * Used to store a pointer to function to a implementation. */ -typedef void (*KeyPairDeleter)(struct KeyPair); +typedef void (*KeyPairDeleter)(struct KeyPair*); /*! * \brief Defines how a Derived Shared Key function should look like. * Used to store a pointer to function to a implementation. */ -typedef struct SharedKey (*SharedKeyDeriver)(struct KeyPair, unsigned char const*, bool); +typedef struct SharedKey (*SharedKeyDeriver)(struct KeyPair, void const*, bool); /*! * \brief Defines how a Derived Shared Key deleter function should look like. * Used to store a pointer to function to a implementation. */ -typedef void (*SharedKeyDeleter)(struct SharedKey); +typedef void (*SharedKeyDeleter)(struct SharedKey*); + +/*! + * \brief Defines how the crypto library deinitialization should look. + */ +typedef void(*Deinitializer)(void); + +/*! + * \brief PubKeyArrayGetter typedef + */ +typedef void(*KeyArrayGetter)(char**, size_t* size, void*); + +/*! + * \brief PublicShareAdder typedef + */ +typedef void(*PublicShareAdder)(char**, size_t*, char const*, size_t, void*); /*! * \brief The Api struct stores pointers to functions of a specific implementation. Like a Curve25519 specific one. */ struct Api { + Initializer initialize; ///< Function that will initialize the crypto library. KeyPairCreator create_key_pair; ///< Pointer to keypair creation function KeyPairDeleter free_key_pair; ///< Pointer to keypair deletor function + KeyArrayGetter get_key_array; ///< Get the array representation of a public key; + PublicShareAdder add_public_share; ///< Adds the public key stored in void* to the existing share. SharedKeyDeriver derive_shared_key; ///< Pointer to shared key derivation function SharedKeyDeleter free_shared_key; ///< Pointer to shared key deleter function + Deinitializer deinitialize; ///< Function that will deinitialize the crypto library. }; /*! * A Pointer to function typedef to facilitate multiple implementations. */ -typedef struct Api(*ImplementationGetter)(); +typedef struct Api(*ImplementationGetter)(void); /*! * \brief get_implementation The pointer to member function variable to implement when diff --git a/libcmix-crypto/curve25519/curve25519.c b/libcmix-crypto/curve25519/curve25519.c index 4d53ddf..c4fae8d 100644 --- a/libcmix-crypto/curve25519/curve25519.c +++ b/libcmix-crypto/curve25519/curve25519.c @@ -3,11 +3,16 @@ struct Api get_curve25519_implementation() { + curve25519_initialize(); return (struct Api) { + &curve25519_initialize, &curve25519_create_keypair, &curve25519_keypair_deleter, + &curve25519_get_key_array, + &curve25519_add_public_share, &curve25519_derive_shared_key, - &curve25519_shared_key_deleter + &curve25519_shared_key_deleter, + &curve25519_deinitialize }; } diff --git a/libcmix-crypto/curve25519/curve25519.h b/libcmix-crypto/curve25519/curve25519.h index fde317a..5d004cf 100644 --- a/libcmix-crypto/curve25519/curve25519.h +++ b/libcmix-crypto/curve25519/curve25519.h @@ -11,15 +11,38 @@ extern "C" { */ /*! + * \brief curve25519_initialize initilalize curve25519 library + */ +extern void curve25519_initialize(void); + +/*! * \brief curve25519_create_keypair * \return A curve25519 keypair. */ -extern struct KeyPair curve25519_create_keypair(); +extern struct KeyPair curve25519_create_keypair(void); + /*! * \brief curve25519_keypair_deleter * \param p The keypair to free. */ -extern void curve25519_keypair_deleter(struct KeyPair p); +extern void curve25519_keypair_deleter(struct KeyPair* p); + +/*! + * \brief curve25519_get_pubkey_array + * \param pubkey + * \param buffer + * \param len + */ +extern void curve25519_get_key_array(char** buffer, size_t* len, void* pubkey); + +/*! + * \brief curve25519_add_public_share + * \param buffer + * \param out_len + * \param share + * \param pubkey + */ +extern void curve25519_add_public_share(char** buffer, size_t* out_len, char const* share, size_t in_len, void* pubkey); /*! * \brief curve25519_derive_shared_key @@ -28,12 +51,15 @@ extern void curve25519_keypair_deleter(struct KeyPair p); * \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 curve25519_derive_shared_key(struct KeyPair pair, unsigned char const* pub_key, bool swap_pub_order); +extern struct SharedKey curve25519_derive_shared_key(struct KeyPair pair, void const* pub_key, bool swap_pub_order); + /*! * \brief curve25519_shared_key_deleter * \param s the Shared key to free. */ -extern void curve25519_shared_key_deleter(struct SharedKey s); +extern void curve25519_shared_key_deleter(struct SharedKey* s); + +extern void curve25519_deinitialize(void); /*! * \brief get_curve25519_implementation diff --git a/libcmix-crypto/curve25519/null/null_curve25519.c b/libcmix-crypto/curve25519/null/null_curve25519.c index 63280ec..33fb963 100644 --- a/libcmix-crypto/curve25519/null/null_curve25519.c +++ b/libcmix-crypto/curve25519/null/null_curve25519.c @@ -4,22 +4,28 @@ #include <stddef.h> #include <stdbool.h> -void curve25519_keypair_deleter(struct KeyPair p) {} +void curve25519_initialize(void){} -struct KeyPair curve25519_create_keypair() { +struct KeyPair curve25519_create_keypair(void) { return (struct KeyPair){ NULL, NULL, - 0, - 0 }; } -void curve25519_shared_key_deleter(struct SharedKey s) {} +void curve25519_keypair_deleter(struct KeyPair* p) {} + +void curve25519_get_key_array(char** buffer, size_t* len, void* key) {} + +void curve25519_add_public_share(char** buffer, size_t* len_out, char const* share, size_t in_len, void* pubkey) {} + +void curve25519_shared_key_deleter(struct SharedKey* s) {} + struct SharedKey curve25519_derive_shared_key(struct KeyPair pair, unsigned char const* pub_key, bool swap_pub_order) { return (struct SharedKey){ NULL, - 0 }; } + +void curve25519_deinitialize(void){}
\ No newline at end of file diff --git a/libcmix-crypto/curve25519/sodium/libsodium_curve25519.c b/libcmix-crypto/curve25519/sodium/libsodium_curve25519.c index e86ec09..06453c5 100644 --- a/libcmix-crypto/curve25519/sodium/libsodium_curve25519.c +++ b/libcmix-crypto/curve25519/sodium/libsodium_curve25519.c @@ -6,23 +6,21 @@ #include <stddef.h> #include <stdlib.h> -void init() { +void curve25519_initialize(void) { if(sodium_init() == -1) { exit(-1); } } -void curve25519_keypair_deleter(struct KeyPair p) { - sodium_free(p.sec); - free(p.pub); +void curve25519_keypair_deleter(struct KeyPair* p) { + sodium_free(p->sec); + free(p->pub); - p.sec = NULL; - p.pub = NULL; + p->sec = NULL; + p->pub = NULL; } -struct KeyPair curve25519_create_keypair() { - init(); - +struct KeyPair curve25519_create_keypair(void) { unsigned char* sec = (unsigned char*) sodium_malloc(crypto_box_SECRETKEYBYTES); unsigned char* pub = (unsigned char*) malloc(crypto_box_PUBLICKEYBYTES); @@ -32,38 +30,42 @@ struct KeyPair curve25519_create_keypair() { return (struct KeyPair){ sec, pub, - crypto_box_SECRETKEYBYTES, - crypto_box_PUBLICKEYBYTES }; } -void curve25519_shared_key_deleter(struct SharedKey s) { - sodium_free(s.shared); +void curve25519_shared_key_deleter(struct SharedKey* s) { + sodium_free(s->shared); + + s->shared = NULL; +} + +void curve25519_get_key_array(char** buffer, size_t* len, void* key) { - s.shared = NULL; } -struct SharedKey curve25519_derive_shared_key(struct KeyPair pair, unsigned char const* pub_key, bool swap_pub_order) { - init(); +void curve25519_add_public_share(char** buffer, size_t* out_len, char const* share, size_t in_len, void* pubkey) { +} + +struct SharedKey curve25519_derive_shared_key(struct KeyPair pair, void const* pub_key, bool swap_pub_order) { unsigned char* shared = (unsigned char*) sodium_malloc(crypto_generichash_BYTES); crypto_generichash_state h; unsigned char* scalarmult_q = (unsigned char*) sodium_malloc(crypto_scalarmult_BYTES); - if (crypto_scalarmult(scalarmult_q, pair.sec, pub_key) != 0) { + if (crypto_scalarmult(scalarmult_q, (unsigned char const*) pair.sec, (unsigned char const*) pub_key) != 0) { exit(-1); } crypto_generichash_init(&h, NULL, 0U, crypto_generichash_BYTES); crypto_generichash_update(&h, scalarmult_q, crypto_scalarmult_BYTES); if(swap_pub_order) { - crypto_generichash_update(&h, pub_key, crypto_box_PUBLICKEYBYTES); - crypto_generichash_update(&h, pair.pub, crypto_box_PUBLICKEYBYTES); + crypto_generichash_update(&h, (unsigned char const*) pub_key, crypto_box_PUBLICKEYBYTES); + crypto_generichash_update(&h, (unsigned char const*) pair.pub, crypto_box_PUBLICKEYBYTES); } else { - crypto_generichash_update(&h, pair.pub, crypto_box_PUBLICKEYBYTES); - crypto_generichash_update(&h, pub_key, crypto_box_PUBLICKEYBYTES); + crypto_generichash_update(&h, (unsigned char const*) pair.pub, crypto_box_PUBLICKEYBYTES); + crypto_generichash_update(&h, (unsigned char const*) pub_key, crypto_box_PUBLICKEYBYTES); } crypto_generichash_final(&h, shared, crypto_generichash_BYTES); @@ -71,7 +73,8 @@ struct SharedKey curve25519_derive_shared_key(struct KeyPair pair, unsigned char return (struct SharedKey){ shared, - crypto_generichash_BYTES }; } +void curve25519_deinitialize(void) {} + diff --git a/libcmix-crypto/elgamal/elgamal.c b/libcmix-crypto/elgamal/elgamal.c index d50126c..8d10789 100644 --- a/libcmix-crypto/elgamal/elgamal.c +++ b/libcmix-crypto/elgamal/elgamal.c @@ -2,11 +2,16 @@ struct Api get_elgamal_implementation() { + elgamal_initialize(); return (struct Api) { + &elgamal_initialize, &elgamal_create_keypair, &elgamal_keypair_deleter, + &elgamal_get_key_array, + &elgamal_add_public_share, &elgamal_derive_shared_key, - &elgamal_shared_key_deleter + &elgamal_shared_key_deleter, + &elgamal_deinitialize }; } diff --git a/libcmix-crypto/elgamal/elgamal.h b/libcmix-crypto/elgamal/elgamal.h index 826ea49..0662827 100644 --- a/libcmix-crypto/elgamal/elgamal.h +++ b/libcmix-crypto/elgamal/elgamal.h @@ -11,16 +11,39 @@ extern "C" { #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(); +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); +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 @@ -29,13 +52,18 @@ extern void elgamal_keypair_deleter(struct KeyPair p); * \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, unsigned char const* pub_key, bool swap_pub_order); +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); +extern void elgamal_shared_key_deleter(struct SharedKey* s); + +/*! + * \brief elgamal_deinitialize deinitializes the elgamal_library + */ +void elgamal_deinitialize(void); /*! * \brief get_elgamal_implementation diff --git a/libcmix-crypto/elgamal/gcrypt/CMakeLists.txt b/libcmix-crypto/elgamal/gcrypt/CMakeLists.txt new file mode 100644 index 0000000..826eee4 --- /dev/null +++ b/libcmix-crypto/elgamal/gcrypt/CMakeLists.txt @@ -0,0 +1,19 @@ +include(get_target_name) + +get_target_name(target_name) + +find_package(Gcrypt REQUIRED) + +add_library(${target_name} SHARED + gcrypt_elgamal.c +) + +target_compile_options(${target_name} + PRIVATE -std=c99 + PUBLIC ${Gcrypt_CFLAGS} +) + +target_link_libraries(${target_name} + PRIVATE elgamal-interface + PUBLIC ${Gcrypt_LIBRARIES} +) diff --git a/libcmix-crypto/elgamal/gcrypt/gcrypt_elgamal.c b/libcmix-crypto/elgamal/gcrypt/gcrypt_elgamal.c new file mode 100644 index 0000000..113fb95 --- /dev/null +++ b/libcmix-crypto/elgamal/gcrypt/gcrypt_elgamal.c @@ -0,0 +1,137 @@ + +#include "api.h" + +#include "gcrypt.h" + +#include <stddef.h> +#include <stdbool.h> + +static gcry_mpi_t p; +static gcry_mpi_t q; +static gcry_mpi_t g; + +void check(gcry_error_t error) { + if (error) { + fprintf (stderr, "Error: %s/%s\n", gcry_strsource (error), gcry_strerror (error)); + exit(1); + } +} + +void print_sexp(gcry_sexp_t exp) { + size_t required_size = gcry_sexp_sprint(exp, GCRYSEXP_FMT_ADVANCED, NULL, 0); //passing NULL as the buffer will return the size needed. + + char* str = (char *) malloc(sizeof(char)*required_size); + + gcry_sexp_sprint(exp, GCRYSEXP_FMT_ADVANCED, str, 2000); //So we ignore the size here. + + printf("size = %zu\n", required_size); + for(size_t i = 0; i < required_size; i++) + printf("%c", str[i]); + printf("\n"); + + free(str); +} + +void elgamal_initialize(void) { + if (!gcry_check_version (GCRYPT_VERSION)) { + fprintf(stderr, "libgcrypt version mismatch\n"); + exit(-1); + } + + gcry_control (GCRYCTL_SUSPEND_SECMEM_WARN); + gcry_control (GCRYCTL_INIT_SECMEM, 16384, 0); + gcry_control (GCRYCTL_RESUME_SECMEM_WARN); + gcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0); + + //leading as specified by libgcrypt + char p_hex[] = "0087A8E61DB4B6663CFFBBD19C651959998CEEF608660DD0F25D2CEED4435E3B00E00DF8F1D61957D4FAF7DF4561B2AA3016C3D91134096FAA3BF4296D830E9A7C209E0C6497517ABD5A8A9D306BCF67ED91F9E6725B4758C022E0B1EF4275BF7B6C5BFC11D45F9088B941F54EB1E59BB8BC39A0BF12307F5C4FDB70C581B23F76B63ACAE1CAA6B7902D52526735488A0EF13C6D9A51BFA4AB3AD8347796524D8EF6A167B5A41825D967E144E5140564251CCACB83E6B486F6B3CA3F7971506026C0B857F689962856DED4010ABD0BE621C3A3960A54E710C375F26375D7014103A4B54330C198AF126116D2276E11715F693877FAD7EF09CADB094AE91E1A1597"; + char q_hex[] = "008CF83642A709A097B447997640129DA299B1A47D1EB3750BA308B0FE64F5FBD3"; + char g_hex[] = "003FB32C9B73134D0B2E77506660EDBD484CA7B18F21EF205407F4793A1A0BA12510DBC15077BE463FFF4FED4AAC0BB555BE3A6C1B0C6B47B1BC3773BF7E8C6F62901228F8C28CBB18A55AE31341000A650196F931C77A57F2DDF463E5E9EC144B777DE62AAAB8A8628AC376D282D6ED3864E67982428EBC831D14348F6F2F9193B5045AF2767164E1DFC967C1FB3F2E55A4BD1BFFE83B9C80D052B985D182EA0ADB2A3B7313D3FE14C8484B1E052588B9B7D2BBD2DF016199ECD06E1557CD0915B3353BBB64E0EC377FD028370DF92B52C7891428CDC67EB6184B523D1DB246C32F63078490F00EF8D647D148D47954515E2327CFEF98C582664B4C0F6CC41659"; + + size_t nr_bytes_scanned; + gcry_error_t error; + + error = gcry_mpi_scan(&p, GCRYMPI_FMT_HEX, p_hex, 0, &nr_bytes_scanned); + check(error); + + error = gcry_mpi_scan(&q, GCRYMPI_FMT_HEX, q_hex, 0, &nr_bytes_scanned); + check(error); + + error = gcry_mpi_scan(&g, GCRYMPI_FMT_HEX, g_hex, 0, &nr_bytes_scanned); + check(error); +} + +struct KeyPair elgamal_create_keypair() { + + size_t parse_error_offset; + gcry_error_t error; + + void* bytes = gcry_random_bytes_secure(2048/8, GCRY_VERY_STRONG_RANDOM); + gcry_mpi_t x = gcry_mpi_snew(2048); + error = gcry_mpi_scan(&x, GCRYMPI_FMT_USG, bytes, 2048/8, &parse_error_offset); + check(error); + + gcry_mpi_t y = gcry_mpi_new(0); + gcry_mpi_powm(y, g, x, p); + + gcry_sexp_t priv_key; + error = gcry_sexp_build(&priv_key, &parse_error_offset, "(private-key (elg (p %M) (g %M) (y %M) (x %M)))", p, g, y, x); + check(error); + + error = gcry_pk_testkey(priv_key); + check(error); + + return (struct KeyPair){ + x, + y, + }; +} + +void elgamal_keypair_deleter(struct KeyPair* p) { + gcry_mpi_release((gcry_mpi_t) p->sec); + gcry_mpi_release((gcry_mpi_t) p->pub); + p->sec = NULL; + p->pub = NULL; +} + +void elgamal_get_key_array(unsigned char** buffer, size_t* len, void* pubkey) { + gcry_mpi_t mpi = (gcry_mpi_t) pubkey; + + gcry_error_t error; + + error = gcry_mpi_aprint(GCRYMPI_FMT_USG, buffer, len, mpi); + check(error); +} + +void elgamal_add_public_share(char** buffer, size_t* out_len, char const* share, size_t in_len, void* pubkey) { + + gcry_error_t error; + + gcry_mpi_t y = (gcry_mpi_t) pubkey; + + gcry_mpi_t mpi_share; + size_t parse_error_pos; + error = gcry_mpi_scan(&mpi_share, GCRYMPI_FMT_USG, share, in_len, &parse_error_pos); + check(error); + + gcry_mpi_t result = gcry_mpi_new(0); + gcry_mpi_mulm(result, mpi_share, y, p); + + error = gcry_mpi_aprint(GCRYMPI_FMT_USG, (unsigned char**) buffer, out_len, result); + check(error); +} + +void elgamal_shared_key_deleter(struct SharedKey* s) { + gcry_mpi_release((gcry_mpi_t) s->shared); + s->shared = NULL; +} + +struct SharedKey elgamal_derive_shared_key(struct KeyPair pair, void const* pub_key, bool swap_pub_order) { + + + return (struct SharedKey){ + NULL, + }; +} + +void elgamal_deinitialize(void) {} diff --git a/libcmix-crypto/elgamal/null/null_elgamal.c b/libcmix-crypto/elgamal/null/null_elgamal.c index 285e2fd..17478e1 100644 --- a/libcmix-crypto/elgamal/null/null_elgamal.c +++ b/libcmix-crypto/elgamal/null/null_elgamal.c @@ -4,22 +4,27 @@ #include <stddef.h> #include <stdbool.h> +void elgamal_initialize(void) {} + void elgamal_keypair_deleter(struct KeyPair p) {} struct KeyPair elgamal_create_keypair() { return (struct KeyPair){ NULL, NULL, - 0, - 0 }; } -void elgamal_shared_key_deleter(struct SharedKey s) {} +void elgamal_get_key_array(char** buffer, size_t* len, void* pubkey) {} + +void elgamal_add_public_share(char** buffer, size_t* out_len, char const* share, size_t in_len, void* pubkey) {} -struct SharedKey elgamal_derive_shared_key(struct KeyPair pair, unsigned char const* pub_key, bool swap_pub_order) { +struct SharedKey elgamal_derive_shared_key(struct KeyPair pair, void const* pub_key, bool swap_pub_order) { return (struct SharedKey){ NULL, - 0 }; } + +void elgamal_shared_key_deleter(struct SharedKey* s) {} + +void elgamal_deinitialize(void) {} diff --git a/libcmix-crypto/keypair.h b/libcmix-crypto/keypair.h index 838291d..3b6e0d1 100644 --- a/libcmix-crypto/keypair.h +++ b/libcmix-crypto/keypair.h @@ -17,10 +17,8 @@ extern "C" { * responsible for memory meanagement. See the Api struct for examples of this. */ struct KeyPair { - unsigned char* sec; ///< Private key - unsigned char* pub; ///< Public key - unsigned int sec_len; ///< Private key length - unsigned int pub_len; ///< Public key length + void* sec; ///< Private key + void* pub; ///< Public key }; diff --git a/libcmix-crypto/sharedkey.h b/libcmix-crypto/sharedkey.h index c37ae41..b89cb5b 100644 --- a/libcmix-crypto/sharedkey.h +++ b/libcmix-crypto/sharedkey.h @@ -14,8 +14,7 @@ extern "C" { * Stored the derived shared secret after for instance Diffie-Hellman. */ struct SharedKey { - unsigned char* shared; ///< The Shared key. - unsigned int shared_len; ///< The shared key length. + void* shared; ///< The Shared key. }; #ifdef __cplusplus |
