aboutsummaryrefslogtreecommitdiff
path: root/src/cm/cm.c
blob: a29e36852f269f60a3a49e1c62cb2e9779de05e6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/*
 * ecgen, tool for generating Elliptic curve domain parameters
 * Copyright (C) 2017-2018 J08nY
 */
#include "cm.h"
#include "cm_any.h"
#include "cm_prime.h"
#include "io/output.h"
#include "obj/curve.h"
#include "p1363.h"

int cm_do() {
	debug_log_start("Starting Complex Multiplication method");

	int result = 0;
	GEN order = strtoi(cfg->cm_order);
	curve_t *curve = NULL;

	if (gequal0(order)) {
		fprintf(err, "Order requested not a number: %s\n", cfg->cm_order);
		result = 1;
	} else if (isprime(order)) {
		debug_log("Starting prime order curve generation");
		curve = cm_prime_curve(order);
	} else {
		debug_log("Starting composite order curve generation");
		curve = cm_any_curve(order);
	}

	if (curve) {
		output_o_begin();
		output_o(curve);
		output_o_end();

		curve_free(&curve);
	} else {
		result = 1;
	}

	debug_log_start("Finished Complex Multiplication method");
	return result;
}