diff options
Diffstat (limited to 'src/gen/order.c')
| -rw-r--r-- | src/gen/order.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/gen/order.c b/src/gen/order.c index 0bbac77..a9d22b2 100644 --- a/src/gen/order.c +++ b/src/gen/order.c @@ -66,6 +66,29 @@ GENERATOR(order_gen_cofactor) { return 1; } +GENERATOR(order_gen_smooth) { + HAS_ARG(args); + pari_ulong smooth_bound = *(pari_ulong *)args->args; + pari_sp ltop = avma; + GEN order = ellff_get_card(curve->curve); + + GEN factors = factor(order); + GEN primes = gel(factors, 1); + long uniqs = glength(primes); + + for (long i = 1; i <= uniqs; ++i) { + long blen = glength(binary_zv(gel(primes, i))); + if (blen > smooth_bound) { + avma = ltop; + return -4; + } + } + + curve->order = gerepilecopy(ltop, order); + obj_insert_shallow(curve->curve, 1, order); + return 1; +} + GENERATOR(order_gen_prime) { pari_sp ltop = avma; GEN order = ellsea(curve->curve, 1); |
