diff options
Diffstat (limited to 'src/random.c')
| -rw-r--r-- | src/random.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/random.c b/src/random.c new file mode 100644 index 0000000..eaa1a7c --- /dev/null +++ b/src/random.c @@ -0,0 +1,34 @@ +/* + * ecgen, tool for generating Elliptic curve domain parameters + * Copyright (C) 2017 J08nY + */ +#include "random.h" + +GEN random_prime(long bits) { + pari_sp ltop = avma; + + GEN range = gtovec0(gen_0, 2); + gel(range, 1) = powis(gen_2, bits - 1); + gel(range, 2) = powis(gen_2, bits); + + GEN p; + { + pari_sp btop = avma; + do { + p = randomprime(range); + if (gc_needed(btop, 1)) p = gerepilecopy(btop, p); + } while (!isprime(p)); + } + + return gerepilecopy(ltop, p); +} + +GEN random_int(long bits) { + pari_sp ltop = avma; + + GEN range = gtovec0(gen_0, 2); + gel(range, 1) = powis(gen_2, bits - 1); + gel(range, 2) = powis(gen_2, bits); + + return gerepilecopy(ltop, genrand(range)); +}
\ No newline at end of file |
