diff options
Diffstat (limited to 'libcmix-crypto/elgamal/gcrypt/gcrypt_elgamal.c')
| -rw-r--r-- | libcmix-crypto/elgamal/gcrypt/gcrypt_elgamal.c | 11 |
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; |
