aboutsummaryrefslogtreecommitdiff
path: root/libcmix-crypto/elgamal
diff options
context:
space:
mode:
authorDennis Brentjes <d.brentjes@gmail.com>2016-11-04 13:11:11 +0100
committerDennis Brentjes <d.brentjes@gmail.com>2016-11-04 13:11:11 +0100
commit58ead6a9a4a2a81f067ad698366bd32841346058 (patch)
tree72398158aa8a077b48a9116dbbff629d340208af /libcmix-crypto/elgamal
parent837d8336fb5323ff797cbcbce17a05a3838e051f (diff)
downloadcmix-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/elgamal')
-rw-r--r--libcmix-crypto/elgamal/elgamal.c1
-rw-r--r--libcmix-crypto/elgamal/elgamal.h2
-rw-r--r--libcmix-crypto/elgamal/gcrypt/gcrypt_elgamal.c11
-rw-r--r--libcmix-crypto/elgamal/null/null_elgamal.c42
4 files changed, 43 insertions, 13 deletions
diff --git a/libcmix-crypto/elgamal/elgamal.c b/libcmix-crypto/elgamal/elgamal.c
index e54f76d..dbfccb9 100644
--- a/libcmix-crypto/elgamal/elgamal.c
+++ b/libcmix-crypto/elgamal/elgamal.c
@@ -15,6 +15,7 @@ struct Api get_elgamal_implementation()
.free_group_element = elgamal_delete_group_element,
.get_key_exchange_value = elgamal_get_key_exchange_value,
.multiply = elgamal_multiply,
+ .get_decryption_share = elgamal_get_decryption_share,
.add_public_share = elgamal_add_public_share,
.derive_shared_key = elgamal_derive_shared_key,
.free_shared_key = elgamal_delete_shared_key,
diff --git a/libcmix-crypto/elgamal/elgamal.h b/libcmix-crypto/elgamal/elgamal.h
index 43ddca0..21bf58a 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 DecryptionShareGetter elgamal_get_decryption_share;
+
extern GroupElementArraySizeGetter elgamal_get_group_element_array_size;
extern PublicShareAdder elgamal_add_public_share;
diff --git a/libcmix-crypto/elgamal/gcrypt/gcrypt_elgamal.c b/libcmix-crypto/elgamal/gcrypt/gcrypt_elgamal.c
index c610556..1824ccc 100644
--- a/libcmix-crypto/elgamal/gcrypt/gcrypt_elgamal.c
+++ b/libcmix-crypto/elgamal/gcrypt/gcrypt_elgamal.c
@@ -152,6 +152,16 @@ GroupElement gcrypt_elgamal_multiply(GroupElement lh, GroupElement rh, bool secu
return ret;
}
+GroupElement gcrypt_elgamal_get_decryption_share(GroupElement r, GroupElement e) {
+ gcry_mpi_t inve = gcry_mpi_snew(0);
+ gcry_mpi_invm(inve, (gcry_mpi_t)e, p);
+
+ gcry_mpi_t d = gcry_mpi_snew(0);
+ gcry_mpi_powm(d, (gcry_mpi_t)r, inve, p);
+ gcry_mpi_release(inve);
+ return d;
+}
+
size_t gcrypt_elgamal_get_group_element_array_size() {
return 256u;
}
@@ -241,6 +251,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;
+DecryptionShareGetter elgamal_get_decryption_share = &gcrypt_elgamal_get_decryption_share;
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;
diff --git a/libcmix-crypto/elgamal/null/null_elgamal.c b/libcmix-crypto/elgamal/null/null_elgamal.c
index 17478e1..2b5c43b 100644
--- a/libcmix-crypto/elgamal/null/null_elgamal.c
+++ b/libcmix-crypto/elgamal/null/null_elgamal.c
@@ -1,30 +1,46 @@
-#include "api.h"
+#include "elgamal.h"
#include <stddef.h>
#include <stdbool.h>
-void elgamal_initialize(void) {}
+void null_elgamal_initialize(void) {}
-void elgamal_keypair_deleter(struct KeyPair p) {}
+void null_elgamal_keypair_deleter(struct KeyPair p) {}
-struct KeyPair elgamal_create_keypair() {
+struct KeyPair null_elgamal_create_keypair() {
return (struct KeyPair){
NULL,
NULL,
};
}
-void elgamal_get_key_array(char** buffer, size_t* len, void* pubkey) {}
+void null_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) {}
+void null_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, void const* pub_key, bool swap_pub_order) {
- return (struct SharedKey){
- NULL,
- };
+GroupElement null_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) {
+ return NULL;
}
-void elgamal_shared_key_deleter(struct SharedKey* s) {}
-
-void elgamal_deinitialize(void) {}
+void null_elgamal_shared_key_deleter(struct SharedKey* s) {}
+
+void null_elgamal_deinitialize(void) {}
+
+Initializer elgamal_initialize = &null_elgamal_initialize;
+KeyPairCreator elgamal_create_keypair = &null_elgamal_create_keypair;
+KeyPairDeleter elgamal_delete_keypair = NULL;//&null_elgamal_delete_keypair;
+ElementToArray elgamal_element_to_array = NULL;//&null_elgamal_element_to_array;
+BufferDeleter elgamal_free_buffer = NULL;//&null_elgamal_free_buffer;
+ArrayToElement elgamal_array_to_element = NULL;//&null_elgamal_array_to_element;
+GroupElementGetter elgamal_get_group_element = NULL;//&null_elgamal_get_group_element;
+GroupElementDeleter elgamal_delete_group_element = NULL;//&null_elgamal_delete_group_element;
+KeyExchangeValueGetter elgamal_get_key_exchange_value = NULL;//&null_elgamal_get_key_exchange_value;
+GroupElementMultiplier elgamal_multiply = NULL;//&null_elgamal_multiply;
+DecryptionShareGetter elgamal_get_decryption_share = NULL;//&null_elgamal_get_decryption_share;
+GroupElementArraySizeGetter elgamal_get_group_element_array_size = NULL;//&null_elgamal_get_group_element_array_size;
+PublicShareAdder elgamal_add_public_share = NULL;//&null_elgamal_add_public_share;
+SharedKeyDeriver elgamal_derive_shared_key = &null_elgamal_derive_shared_key;
+SharedKeyDeleter elgamal_delete_shared_key = NULL;//&null_elgamal_delete_shared_key;
+Encrypter elgamal_encrypt = NULL;//&null_elgamal_encrypt;
+Deinitializer elgamal_deinitialize = &null_elgamal_deinitialize; \ No newline at end of file