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.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/libcmix-crypto/elgamal/gcrypt/gcrypt_elgamal.c b/libcmix-crypto/elgamal/gcrypt/gcrypt_elgamal.c
index 2f48a9e..6a03fb1 100644
--- a/libcmix-crypto/elgamal/gcrypt/gcrypt_elgamal.c
+++ b/libcmix-crypto/elgamal/gcrypt/gcrypt_elgamal.c
@@ -129,6 +129,18 @@ void* gcrypt_elgamal_array_to_element(char const* buffer, size_t len, bool secur
return mpi;
}
+void gcrypt_elgamal_get_pub_key_hash(char** buffer, size_t* len, GroupElement const pub) {
+ gcry_sexp_t pubkey;
+ gcry_error_t error;
+ size_t err_off;
+
+ error = gcry_sexp_build(&pubkey, &err_off, "(public-key (elg (p %M) (g %M) (y %M)))", p, g, (gcry_mpi_t) pub);
+ check(error);
+
+ *buffer = (char*) gcry_pk_get_keygrip(pubkey, NULL);
+ *len = 20;
+}
+
void* gcrypt_elgamal_get_group_element(bool secure) {
size_t parse_error_offset;
gcry_error_t error;
@@ -284,6 +296,7 @@ KeyPairDeleter elgamal_delete_keypair = &gcrypt_elgamal_delete_keypair;
ElementToArray elgamal_element_to_array = &gcrypt_elgamal_element_to_array;
BufferDeleter elgamal_free_buffer = &gcrypt_elgamal_free_buffer;
ArrayToElement elgamal_array_to_element = &gcrypt_elgamal_array_to_element;
+PubKeyHashGetter elgamal_get_pub_key_hash = &gcrypt_elgamal_get_pub_key_hash;
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;