diff options
| author | J08nY | 2017-02-05 03:59:52 +0100 |
|---|---|---|
| committer | J08nY | 2017-02-05 03:59:52 +0100 |
| commit | 763fc80153c5e9287f1b0f0609b11fb4f50c90ab (patch) | |
| tree | 5cd6e7acc4512cca65bcc16a74f3b63879b2d3bc /src/curve.c | |
| parent | 3d9bf583ccc5eea61c5f78f52d1e2073daee924c (diff) | |
| download | ecgen-0.2.0.tar.gz ecgen-0.2.0.tar.zst ecgen-0.2.0.zip | |
Diffstat (limited to 'src/curve.c')
| -rw-r--r-- | src/curve.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/curve.c b/src/curve.c new file mode 100644 index 0000000..0d15ccf --- /dev/null +++ b/src/curve.c @@ -0,0 +1,35 @@ +/* + * ecgen, tool for generating Elliptic curve domain parameters + * Copyright (C) 2017 J08nY + */ +#include "curve.h" + +GEN curve_random(GEN field) { + pari_sp ltop = avma; + + GEN curve; + do { + GEN a = genrand(field); + GEN b = genrand(field); + + GEN v = gen_0; + switch (typ(field)) { + case t_INT: + v = gtovec0(gen_0, 2); + gel(v, 1) = a; + gel(v, 2) = b; + break; + case t_FFELT: + v = gtovec0(gen_0, 5); + gel(v, 1) = gen_1; + gel(v, 4) = a; + gel(v, 5) = b; + break; + default: + pari_err_TYPE("curve_random", field); + } + curve = ellinit(v, field, -1); + } while (gequal0(ell_get_disc(curve))); + + return gerepilecopy(ltop, curve); +} |
