diff options
Diffstat (limited to 'libcmix-crypto')
| -rw-r--r-- | libcmix-crypto/api.h | 14 | ||||
| -rw-r--r-- | libcmix-crypto/curve25519/curve25519.c | 1 | ||||
| -rw-r--r-- | libcmix-crypto/curve25519/curve25519.h | 2 | ||||
| -rw-r--r-- | libcmix-crypto/curve25519/sodium/libsodium_curve25519.c | 6 | ||||
| -rw-r--r-- | libcmix-crypto/elgamal/elgamal.c | 31 | ||||
| -rw-r--r-- | libcmix-crypto/elgamal/elgamal.h | 2 | ||||
| -rw-r--r-- | libcmix-crypto/elgamal/gcrypt/gcrypt_elgamal.c | 17 |
7 files changed, 41 insertions, 32 deletions
diff --git a/libcmix-crypto/api.h b/libcmix-crypto/api.h index 8c40d23..6d701d7 100644 --- a/libcmix-crypto/api.h +++ b/libcmix-crypto/api.h @@ -32,7 +32,7 @@ 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*, size_t, unsigned char const*, size_t, GroupElement, bool); +typedef GroupElement (*SharedKeyDeriver)(struct KeyPair, unsigned char const*, size_t, unsigned char const*, size_t, GroupElement, bool); /*! * \brief Defines how a Derived Shared Key deleter function should look like. @@ -63,7 +63,7 @@ typedef GroupElement(*ArrayToElement)(char const*, size_t size, bool); /*! * \brief PublicShareAdder typedef */ -typedef void(*PublicShareAdder)(char**, size_t*, char const*, size_t, GroupElement); +typedef void(*PublicShareAdder)(GroupElement*, char const*, size_t, GroupElement); /*! * @@ -83,6 +83,11 @@ typedef GroupElement(*GroupElementMultiplier)(GroupElement, GroupElement, bool); /*! * */ +typedef size_t(*GroupElementArraySizeGetter)(); + +/*! + * + */ typedef void(*GroupElementDeleter)(GroupElement); /*! @@ -95,12 +100,13 @@ typedef void (*Encrypter)(GroupElement*, GroupElement*, GroupElement, GroupEleme */ 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 + KeyPairCreator create_keypair; ///< Pointer to keypair creation function + KeyPairDeleter free_keypair; ///< Pointer to keypair deletor function ElementToArray element_to_array; ///< Get the array representation of a public key BufferDeleter free_buffer; ///< frees library allocated buffers. ArrayToElement array_to_element; ///< The the GroupElement representation of this array; GroupElementGetter get_group_element; ///< get group element + GroupElementArraySizeGetter get_group_element_array_size; ///< Return the size required to store a groupelement in an array; GroupElementDeleter free_group_element; ///< frees a base type of the cryptolibrary. KeyExchangeValueGetter get_key_exchange_value; ///< get generator *op* group element. GroupElementMultiplier multiply; ///< Multiplies two groupelements modulo group. diff --git a/libcmix-crypto/curve25519/curve25519.c b/libcmix-crypto/curve25519/curve25519.c index 6eaaafc..db77d9a 100644 --- a/libcmix-crypto/curve25519/curve25519.c +++ b/libcmix-crypto/curve25519/curve25519.c @@ -15,6 +15,7 @@ struct Api get_curve25519_implementation() NULL, NULL, NULL, + NULL, &curve25519_add_public_share, &curve25519_derive_shared_key, &curve25519_shared_key_deleter, diff --git a/libcmix-crypto/curve25519/curve25519.h b/libcmix-crypto/curve25519/curve25519.h index 9b65d4e..762e8db 100644 --- a/libcmix-crypto/curve25519/curve25519.h +++ b/libcmix-crypto/curve25519/curve25519.h @@ -51,7 +51,7 @@ extern void curve25519_add_public_share(char** buffer, size_t* out_len, char con * \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* other_pub, size_t pub_len, unsigned char const* value, size_t value_len, void* priv_value, bool swap_pub_order); +extern GroupElement curve25519_derive_shared_key(struct KeyPair pair, unsigned char const* other_pub, size_t pub_len, unsigned char const* value, size_t value_len, void* priv_value, bool swap_pub_order); /*! * \brief curve25519_shared_key_deleter * \param s the Shared key to free. diff --git a/libcmix-crypto/curve25519/sodium/libsodium_curve25519.c b/libcmix-crypto/curve25519/sodium/libsodium_curve25519.c index 6c3fe13..2405442 100644 --- a/libcmix-crypto/curve25519/sodium/libsodium_curve25519.c +++ b/libcmix-crypto/curve25519/sodium/libsodium_curve25519.c @@ -47,7 +47,7 @@ void curve25519_add_public_share(char** buffer, size_t* out_len, char const* sha } -struct SharedKey curve25519_derive_shared_key(struct KeyPair pair, unsigned char const* other_pub, size_t pub_len, unsigned char const* value, size_t value_len, void* priv_value, bool swap_pub_order) { +GroupElement curve25519_derive_shared_key(struct KeyPair pair, unsigned char const* other_pub, size_t pub_len, unsigned char const* value, size_t value_len, void* priv_value, bool swap_pub_order) { unsigned char* shared = (unsigned char*) sodium_malloc(crypto_generichash_BYTES); crypto_generichash_state h; @@ -71,9 +71,7 @@ struct SharedKey curve25519_derive_shared_key(struct KeyPair pair, unsigned char sodium_free(scalarmult_q); - return (struct SharedKey){ - shared, - }; + return shared; } void curve25519_deinitialize(void) {} diff --git a/libcmix-crypto/elgamal/elgamal.c b/libcmix-crypto/elgamal/elgamal.c index 336d974..e54f76d 100644 --- a/libcmix-crypto/elgamal/elgamal.c +++ b/libcmix-crypto/elgamal/elgamal.c @@ -4,21 +4,22 @@ struct Api get_elgamal_implementation() { elgamal_initialize(); return (struct Api) { - elgamal_initialize, - elgamal_create_keypair, - elgamal_delete_keypair, - elgamal_element_to_array, - elgamal_free_buffer, - elgamal_array_to_element, - elgamal_get_group_element, - elgamal_delete_group_element, - elgamal_get_key_exchange_value, - elgamal_multiply, - elgamal_add_public_share, - elgamal_derive_shared_key, - elgamal_delete_shared_key, - elgamal_encrypt, - elgamal_deinitialize + .initialize = elgamal_initialize, + .create_keypair = elgamal_create_keypair, + .free_keypair = elgamal_delete_keypair, + .element_to_array = elgamal_element_to_array, + .free_buffer = elgamal_free_buffer, + .array_to_element = elgamal_array_to_element, + .get_group_element = elgamal_get_group_element, + .get_group_element_array_size = elgamal_get_group_element_array_size, + .free_group_element = elgamal_delete_group_element, + .get_key_exchange_value = elgamal_get_key_exchange_value, + .multiply = elgamal_multiply, + .add_public_share = elgamal_add_public_share, + .derive_shared_key = elgamal_derive_shared_key, + .free_shared_key = elgamal_delete_shared_key, + .encrypt = elgamal_encrypt, + .deinitialize = elgamal_deinitialize }; } diff --git a/libcmix-crypto/elgamal/elgamal.h b/libcmix-crypto/elgamal/elgamal.h index 71046c5..43ddca0 100644 --- a/libcmix-crypto/elgamal/elgamal.h +++ b/libcmix-crypto/elgamal/elgamal.h @@ -30,6 +30,8 @@ extern KeyExchangeValueGetter elgamal_get_key_exchange_value; extern GroupElementMultiplier elgamal_multiply; +extern GroupElementArraySizeGetter elgamal_get_group_element_array_size; + extern PublicShareAdder elgamal_add_public_share; extern SharedKeyDeriver elgamal_derive_shared_key; diff --git a/libcmix-crypto/elgamal/gcrypt/gcrypt_elgamal.c b/libcmix-crypto/elgamal/gcrypt/gcrypt_elgamal.c index a0512dd..c610556 100644 --- a/libcmix-crypto/elgamal/gcrypt/gcrypt_elgamal.c +++ b/libcmix-crypto/elgamal/gcrypt/gcrypt_elgamal.c @@ -152,11 +152,15 @@ GroupElement gcrypt_elgamal_multiply(GroupElement lh, GroupElement rh, bool secu return ret; } +size_t gcrypt_elgamal_get_group_element_array_size() { + return 256u; +} + void gcrypt_elgamal_delete_group_element(void* el) { gcry_mpi_release((gcry_mpi_t) el); } -void gcrypt_elgamal_add_public_share(char** buffer, size_t* out_len, char const* share, size_t in_len, void* pubkey) { +void gcrypt_elgamal_add_public_share(GroupElement* el, char const* share, size_t in_len, void* pubkey) { gcry_error_t error; size_t parse_error_pos; @@ -170,14 +174,12 @@ void gcrypt_elgamal_add_public_share(char** buffer, size_t* out_len, char const* 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); + *el = result; gcry_mpi_release(mpi_share); - gcry_mpi_release(result); } -struct SharedKey gcrypt_elgamal_derive_shared_key(struct KeyPair keypair, unsigned char const* other_pub, size_t pub_len, unsigned char const* value, size_t value_len, void* priv_value, bool swap) { +GroupElement gcrypt_elgamal_derive_shared_key(struct KeyPair keypair, unsigned char const* other_pub, size_t pub_len, unsigned char const* value, size_t value_len, void* priv_value, bool swap) { gcry_error_t error; size_t parse_error_pos; @@ -192,9 +194,7 @@ struct SharedKey gcrypt_elgamal_derive_shared_key(struct KeyPair keypair, unsign gcry_mpi_release(ga); - return (struct SharedKey){ - gab - }; + return gab; } void gcrypt_elgamal_delete_shared_key(struct SharedKey* s) { @@ -241,6 +241,7 @@ GroupElementGetter elgamal_get_group_element = &gcrypt_elgamal_get_group_element GroupElementDeleter elgamal_delete_group_element = &gcrypt_elgamal_delete_group_element; KeyExchangeValueGetter elgamal_get_key_exchange_value = &gcrypt_elgamal_get_key_exchange_value; GroupElementMultiplier elgamal_multiply = &gcrypt_elgamal_multiply; +GroupElementArraySizeGetter elgamal_get_group_element_array_size = &gcrypt_elgamal_get_group_element_array_size; PublicShareAdder elgamal_add_public_share = &gcrypt_elgamal_add_public_share; SharedKeyDeriver elgamal_derive_shared_key = &gcrypt_elgamal_derive_shared_key; SharedKeyDeleter elgamal_delete_shared_key = &gcrypt_elgamal_delete_shared_key; |
