From 6d55dcba54ceaccc9d90ea7c2f1746524a6e81e3 Mon Sep 17 00:00:00 2001 From: Dennis Brentjes Date: Fri, 18 Nov 2016 12:47:35 +0100 Subject: Made permutation a responsibility of cmix in the precomputation phase. --- libcmix-crypto/elgamal/gcrypt/gcrypt_elgamal.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'libcmix-crypto/elgamal/gcrypt/gcrypt_elgamal.c') diff --git a/libcmix-crypto/elgamal/gcrypt/gcrypt_elgamal.c b/libcmix-crypto/elgamal/gcrypt/gcrypt_elgamal.c index 6a03fb1..e25ba72 100644 --- a/libcmix-crypto/elgamal/gcrypt/gcrypt_elgamal.c +++ b/libcmix-crypto/elgamal/gcrypt/gcrypt_elgamal.c @@ -284,6 +284,31 @@ GroupElement gcrypt_elgamal_invert(GroupElement const x) { return inv_x; } +unsigned int gcrypt_elgamal_get_uniform_int(unsigned int upper) { + unsigned int random_value; + + if(upper == 0) { + void* buffer = gcry_random_bytes_secure(nr_bytes, GCRY_STRONG_RANDOM); + + memcpy(&random_value, buffer, sizeof(unsigned int)); + + gcry_free(buffer); + return random_value; + } + + unsigned int lower = -upper % upper; + do { + void* buffer = gcry_random_bytes_secure(nr_bytes, GCRY_STRONG_RANDOM); + + memcpy(&random_value, buffer, sizeof(unsigned int)); + + if (random_value >= lower) + return random_value % upper; + + gcry_free(buffer); + } while(true); +} + void gcrypt_elgamal_deinitialize(void) { gcry_mpi_release(p); gcry_mpi_release(q); @@ -308,4 +333,5 @@ SharedKeyDeriver elgamal_derive_shared_key = &gcrypt_elgamal_derive_shared_key; SharedKeyDeleter elgamal_delete_shared_key = &gcrypt_elgamal_delete_shared_key; Encrypter elgamal_encrypt = &gcrypt_elgamal_encrypt; Inverter elgamal_invert = &gcrypt_elgamal_invert; +UniformIntGetter elgamal_get_uniform_int = &gcrypt_elgamal_get_uniform_int; Deinitializer elgamal_deinitialize = &gcrypt_elgamal_deinitialize; \ No newline at end of file -- cgit v1.2.3-70-g09d2