diff options
| author | Dennis Brentjes <d.brentjes@gmail.com> | 2016-11-18 12:47:35 +0100 |
|---|---|---|
| committer | Dennis Brentjes <d.brentjes@gmail.com> | 2016-11-18 12:47:35 +0100 |
| commit | 6d55dcba54ceaccc9d90ea7c2f1746524a6e81e3 (patch) | |
| tree | 264bcf206535d41cdfec7c0a659c861ea0bd5f31 /libcmix-crypto/elgamal/gcrypt/gcrypt_elgamal.c | |
| parent | d9e011488b9d7af4683e6640216e78871a06a5ec (diff) | |
| download | cmix-6d55dcba54ceaccc9d90ea7c2f1746524a6e81e3.tar.gz cmix-6d55dcba54ceaccc9d90ea7c2f1746524a6e81e3.tar.bz2 cmix-6d55dcba54ceaccc9d90ea7c2f1746524a6e81e3.zip | |
Made permutation a responsibility of cmix in the precomputation phase.
Diffstat (limited to 'libcmix-crypto/elgamal/gcrypt/gcrypt_elgamal.c')
| -rw-r--r-- | libcmix-crypto/elgamal/gcrypt/gcrypt_elgamal.c | 26 |
1 files changed, 26 insertions, 0 deletions
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 |
