aboutsummaryrefslogtreecommitdiff
path: root/libcmix-crypto/elgamal/gcrypt
diff options
context:
space:
mode:
Diffstat (limited to 'libcmix-crypto/elgamal/gcrypt')
-rw-r--r--libcmix-crypto/elgamal/gcrypt/gcrypt_elgamal.c11
1 files changed, 11 insertions, 0 deletions
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;