diff options
| author | J08nY | 2018-06-30 16:21:12 +0200 |
|---|---|---|
| committer | J08nY | 2018-06-30 16:21:12 +0200 |
| commit | 3e4c87f12d13cd0a2d139cf8a149874634972afa (patch) | |
| tree | 2f842fbea93e9aecfc539e40c1c1dea1aba228be /src/gen | |
| parent | e5066a307b62b7b64c91add8131d94aef3cfcf42 (diff) | |
| download | ecgen-3e4c87f12d13cd0a2d139cf8a149874634972afa.tar.gz ecgen-3e4c87f12d13cd0a2d139cf8a149874634972afa.tar.zst ecgen-3e4c87f12d13cd0a2d139cf8a149874634972afa.zip | |
Implement computation of curve metadata(j-invariant, disc, frobenius, cm disc).
Diffstat (limited to 'src/gen')
| -rw-r--r-- | src/gen/metadata.c | 38 | ||||
| -rw-r--r-- | src/gen/metadata.h | 19 |
2 files changed, 57 insertions, 0 deletions
diff --git a/src/gen/metadata.c b/src/gen/metadata.c new file mode 100644 index 0000000..512c30c --- /dev/null +++ b/src/gen/metadata.c @@ -0,0 +1,38 @@ +/* + * ecgen, tool for generating Elliptic curve domain parameters + * Copyright (C) 2017-2018 J08nY + */ +#include "gens.h" +#include "field.h" +#include "metadata.h" + +GENERATOR(metadata_gen) { + GEN j = field_elementi(ell_get_j(curve->curve)); + GEN disc = field_elementi(ell_get_disc(curve->curve)); + GEN embedding_degree; + GEN q; + if (typ(curve->field) == t_INT) { + embedding_degree = gens_get_embedding(curve->field, curve->order); + q = curve->field; + } else if (typ(curve->field) == t_FFELT){ + embedding_degree = NULL; + q = int2n(degree(FF_mod(curve->field))); + } else { + return -7; + } + GEN frobenius = negi(subii(curve->order, addis(q, 1))); + GEN cm_disc; + if (typ(curve->field) == t_INT) { + cm_disc = core(subii(mulis(q, 4), sqri(frobenius))); + } else if (typ(curve->field) == t_FFELT){ + cm_disc = NULL; + } else { + return -7; + } + curve->meta.j_invariant = j; + curve->meta.discriminant = disc; + curve->meta.embedding_degree = embedding_degree; + curve->meta.frobenius_trace = frobenius; + curve->meta.cm_discriminant = cm_disc; + return 1; +} diff --git a/src/gen/metadata.h b/src/gen/metadata.h new file mode 100644 index 0000000..914828c --- /dev/null +++ b/src/gen/metadata.h @@ -0,0 +1,19 @@ +/* + * ecgen, tool for generating Elliptic curve domain parameters + * Copyright (C) 2017-2018 J08nY + */ +#ifndef ECGEN_GEN_METADATA_H +#define ECGEN_GEN_METADATA_H + +#include "misc/types.h" + +/** + * @brief + * @param curve + * @param args + * @param state + * @return + */ +GENERATOR(metadata_gen); + +#endif //ECGEN_GEN_METADATA_H |
