diff options
| author | Dennis Brentjes <d.brentjes@gmail.com> | 2016-11-04 13:11:11 +0100 |
|---|---|---|
| committer | Dennis Brentjes <d.brentjes@gmail.com> | 2016-11-04 13:11:11 +0100 |
| commit | 58ead6a9a4a2a81f067ad698366bd32841346058 (patch) | |
| tree | 72398158aa8a077b48a9116dbbff629d340208af /libcmix-crypto/curve25519 | |
| parent | 837d8336fb5323ff797cbcbce17a05a3838e051f (diff) | |
| download | cmix-58ead6a9a4a2a81f067ad698366bd32841346058.tar.gz cmix-58ead6a9a4a2a81f067ad698366bd32841346058.tar.bz2 cmix-58ead6a9a4a2a81f067ad698366bd32841346058.zip | |
Consolidated all the crypto apis and implemented the Precomputation Postprocessing step
Diffstat (limited to 'libcmix-crypto/curve25519')
| -rw-r--r-- | libcmix-crypto/curve25519/curve25519.c | 33 | ||||
| -rw-r--r-- | libcmix-crypto/curve25519/curve25519.h | 70 | ||||
| -rw-r--r-- | libcmix-crypto/curve25519/null/null_curve25519.c | 40 | ||||
| -rw-r--r-- | libcmix-crypto/curve25519/sodium/libsodium_curve25519.c | 35 |
4 files changed, 98 insertions, 80 deletions
diff --git a/libcmix-crypto/curve25519/curve25519.c b/libcmix-crypto/curve25519/curve25519.c index db77d9a..a963840 100644 --- a/libcmix-crypto/curve25519/curve25519.c +++ b/libcmix-crypto/curve25519/curve25519.c @@ -5,22 +5,23 @@ struct Api get_curve25519_implementation() { curve25519_initialize(); return (struct Api) { - &curve25519_initialize, - &curve25519_create_keypair, - &curve25519_keypair_deleter, - &curve25519_key_to_array, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - &curve25519_add_public_share, - &curve25519_derive_shared_key, - &curve25519_shared_key_deleter, - NULL, - &curve25519_deinitialize + .initialize = curve25519_initialize, + .create_keypair = curve25519_create_keypair, + .free_keypair = curve25519_delete_keypair, + .element_to_array = curve25519_element_to_array, + .free_buffer = curve25519_free_buffer, + .array_to_element = curve25519_array_to_element, + .get_group_element = curve25519_get_group_element, + .get_group_element_array_size = curve25519_get_group_element_array_size, + .free_group_element = curve25519_delete_group_element, + .get_key_exchange_value = curve25519_get_key_exchange_value, + .multiply = curve25519_multiply, + .get_decryption_share = curve25519_get_decryption_share, + .add_public_share = curve25519_add_public_share, + .derive_shared_key = curve25519_derive_shared_key, + .free_shared_key = curve25519_delete_shared_key, + .encrypt = curve25519_encrypt, + .deinitialize = curve25519_deinitialize }; } diff --git a/libcmix-crypto/curve25519/curve25519.h b/libcmix-crypto/curve25519/curve25519.h index 762e8db..5f30915 100644 --- a/libcmix-crypto/curve25519/curve25519.h +++ b/libcmix-crypto/curve25519/curve25519.h @@ -10,55 +10,39 @@ extern "C" { * \file */ -/*! - * \brief curve25519_initialize initilalize curve25519 library - */ -extern void curve25519_initialize(void); +extern Initializer curve25519_initialize; -/*! - * \brief curve25519_create_keypair - * \return A curve25519 keypair. - */ -extern struct KeyPair curve25519_create_keypair(void); +extern KeyPairCreator curve25519_create_keypair; -/*! - * \brief curve25519_keypair_deleter - * \param p The keypair to free. - */ -extern void curve25519_keypair_deleter(struct KeyPair* p); +extern KeyPairDeleter curve25519_delete_keypair; -/*! - * \brief curve25519_get_pubkey_array - * \param pubkey - * \param buffer - * \param len - */ -extern void curve25519_key_to_array(unsigned char** buffer, size_t* len, void* pubkey); +extern ElementToArray curve25519_element_to_array; -/*! - * \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); +extern BufferDeleter curve25519_free_buffer; -/*! - * \brief curve25519_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 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. - */ -extern void curve25519_shared_key_deleter(struct SharedKey* s); +extern ArrayToElement curve25519_array_to_element; + +extern GroupElementGetter curve25519_get_group_element; + +extern GroupElementDeleter curve25519_delete_group_element; + +extern KeyExchangeValueGetter curve25519_get_key_exchange_value; + +extern GroupElementMultiplier curve25519_multiply; + +extern DecryptionShareGetter curve25519_get_decryption_share; + +extern GroupElementArraySizeGetter curve25519_get_group_element_array_size; + +extern PublicShareAdder curve25519_add_public_share; + +extern SharedKeyDeriver curve25519_derive_shared_key; + +extern SharedKeyDeleter curve25519_delete_shared_key; + +extern Encrypter curve25519_encrypt; -extern void curve25519_deinitialize(void); +extern Deinitializer curve25519_deinitialize; /*! * \brief get_curve25519_implementation diff --git a/libcmix-crypto/curve25519/null/null_curve25519.c b/libcmix-crypto/curve25519/null/null_curve25519.c index 33fb963..d261791 100644 --- a/libcmix-crypto/curve25519/null/null_curve25519.c +++ b/libcmix-crypto/curve25519/null/null_curve25519.c @@ -1,31 +1,47 @@ -#include "api.h" +#include "curve25519.h" #include <stddef.h> #include <stdbool.h> -void curve25519_initialize(void){} +void null_curve25519_initialize(void){} -struct KeyPair curve25519_create_keypair(void) { +struct KeyPair null_curve25519_create_keypair(void) { return (struct KeyPair){ NULL, NULL, }; } -void curve25519_keypair_deleter(struct KeyPair* p) {} +void null_curve25519_delete_keypair(struct KeyPair* p) {} -void curve25519_get_key_array(char** buffer, size_t* len, void* key) {} +void null_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 null_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) {} +void null_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, - }; +GroupElement null_curve25519_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) { + return NULL; } -void curve25519_deinitialize(void){}
\ No newline at end of file +void null_curve25519_deinitialize(void){} + +Initializer curve25519_initialize = &null_curve25519_initialize; +KeyPairCreator curve25519_create_keypair = &null_curve25519_create_keypair; +KeyPairDeleter curve25519_delete_keypair = &null_curve25519_delete_keypair; +ElementToArray curve25519_element_to_array = NULL;//&null_curve25519_element_to_array; +BufferDeleter curve25519_free_buffer = NULL;//&null_curve25519_free_buffer; +ArrayToElement curve25519_array_to_element = NULL;//&null_curve25519_array_to_element; +GroupElementGetter curve25519_get_group_element = NULL;//&null_curve25519_get_group_element; +GroupElementDeleter curve25519_delete_group_element = NULL;//&null_curve25519_delete_group_element; +KeyExchangeValueGetter curve25519_get_key_exchange_value = NULL;//&null_curve25519_get_key_exchange_value; +GroupElementMultiplier curve25519_multiply = NULL;//&null_curve25519_multiply; +DecryptionShareGetter curve25519_get_decryption_share = NULL;//&null_curve25519_get_decryption_share; +GroupElementArraySizeGetter curve25519_get_group_element_array_size = NULL;//&null_curve25519_get_group_element_array_size; +PublicShareAdder curve25519_add_public_share = NULL;//&null_curve25519_add_public_share; +SharedKeyDeriver curve25519_derive_shared_key = &null_curve25519_derive_shared_key; +SharedKeyDeleter curve25519_delete_shared_key = NULL;//&null_curve25519_delete_shared_key; +Encrypter curve25519_encrypt = NULL;//&null_curve25519_encrypt; +Deinitializer curve25519_deinitialize = &null_curve25519_deinitialize; diff --git a/libcmix-crypto/curve25519/sodium/libsodium_curve25519.c b/libcmix-crypto/curve25519/sodium/libsodium_curve25519.c index 2405442..b4ae963 100644 --- a/libcmix-crypto/curve25519/sodium/libsodium_curve25519.c +++ b/libcmix-crypto/curve25519/sodium/libsodium_curve25519.c @@ -6,13 +6,13 @@ #include <stddef.h> #include <stdlib.h> -void curve25519_initialize(void) { +void sodium_curve25519_initialize(void) { if(sodium_init() == -1) { exit(-1); } } -void curve25519_keypair_deleter(struct KeyPair* p) { +void sodium_curve25519_delete_keypair(struct KeyPair* p) { sodium_free(p->sec); free(p->pub); @@ -20,7 +20,7 @@ void curve25519_keypair_deleter(struct KeyPair* p) { p->pub = NULL; } -struct KeyPair curve25519_create_keypair(void) { +struct KeyPair sodium_curve25519_create_keypair(void) { unsigned char* sec = (unsigned char*) sodium_malloc(crypto_box_SECRETKEYBYTES); unsigned char* pub = (unsigned char*) malloc(crypto_box_PUBLICKEYBYTES); @@ -33,21 +33,21 @@ struct KeyPair curve25519_create_keypair(void) { }; } -void curve25519_shared_key_deleter(struct SharedKey* s) { +void sodium_curve25519_shared_key_deleter(struct SharedKey* s) { sodium_free(s->shared); s->shared = NULL; } -void curve25519_key_to_array(unsigned char** buffer, size_t* len, void* key) { +void sodium_curve25519_key_to_array(unsigned char** buffer, size_t* len, void* key) { } -void curve25519_add_public_share(char** buffer, size_t* out_len, char const* share, size_t in_len, void* pubkey) { +void sodium_curve25519_add_public_share(char** buffer, size_t* out_len, char const* share, size_t in_len, void* pubkey) { } -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) { +GroupElement sodium_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; @@ -74,5 +74,22 @@ GroupElement curve25519_derive_shared_key(struct KeyPair pair, unsigned char con return shared; } -void curve25519_deinitialize(void) {} - +void sodium_curve25519_deinitialize(void) {} + +Initializer curve25519_initialize = &sodium_curve25519_initialize; +KeyPairCreator curve25519_create_keypair = &sodium_curve25519_create_keypair; +KeyPairDeleter curve25519_delete_keypair = &sodium_curve25519_delete_keypair; +ElementToArray curve25519_element_to_array = NULL;//&sodium_curve25519_element_to_array; +BufferDeleter curve25519_free_buffer = NULL;//&sodium_curve25519_free_buffer; +ArrayToElement curve25519_array_to_element = NULL;//&sodium_curve25519_array_to_element; +GroupElementGetter curve25519_get_group_element = NULL;//&sodium_curve25519_get_group_element; +GroupElementDeleter curve25519_delete_group_element = NULL;//&sodium_curve25519_delete_group_element; +KeyExchangeValueGetter curve25519_get_key_exchange_value = NULL;//&sodium_curve25519_get_key_exchange_value; +GroupElementMultiplier curve25519_multiply = NULL;//&sodium_curve25519_multiply; +DecryptionShareGetter curve25519_get_decryption_share = NULL;//&sodium_curve25519_get_decryption_share; +GroupElementArraySizeGetter curve25519_get_group_element_array_size = NULL;//&sodium_curve25519_get_group_element_array_size; +PublicShareAdder curve25519_add_public_share = NULL;//&sodium_curve25519_add_public_share; +SharedKeyDeriver curve25519_derive_shared_key = &sodium_curve25519_derive_shared_key; +SharedKeyDeleter curve25519_delete_shared_key = NULL;//&sodium_curve25519_delete_shared_key; +Encrypter curve25519_encrypt = NULL;//&sodium_curve25519_encrypt; +Deinitializer curve25519_deinitialize = &sodium_curve25519_deinitialize; |
