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 | |
| 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')
| -rw-r--r-- | libcmix-crypto/elgamal/elgamal.c | 1 | ||||
| -rw-r--r-- | libcmix-crypto/elgamal/elgamal.h | 2 | ||||
| -rw-r--r-- | libcmix-crypto/elgamal/gcrypt/gcrypt_elgamal.c | 26 |
3 files changed, 29 insertions, 0 deletions
diff --git a/libcmix-crypto/elgamal/elgamal.c b/libcmix-crypto/elgamal/elgamal.c index 7eea0f3..8f26a3c 100644 --- a/libcmix-crypto/elgamal/elgamal.c +++ b/libcmix-crypto/elgamal/elgamal.c @@ -22,6 +22,7 @@ struct Api get_elgamal_implementation() .free_shared_key = elgamal_delete_shared_key, .encrypt = elgamal_encrypt, .invert = elgamal_invert, + .get_uniform_int = elgamal_get_uniform_int, .deinitialize = elgamal_deinitialize }; } diff --git a/libcmix-crypto/elgamal/elgamal.h b/libcmix-crypto/elgamal/elgamal.h index 1054e3e..f937899 100644 --- a/libcmix-crypto/elgamal/elgamal.h +++ b/libcmix-crypto/elgamal/elgamal.h @@ -46,6 +46,8 @@ extern Encrypter elgamal_encrypt; extern Inverter elgamal_invert; +extern UniformIntGetter elgamal_get_uniform_int; + extern Deinitializer elgamal_deinitialize; /*! 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 |
