libcurve/src/curves.c

53 lines
1.4 KiB
C

#include <curve.h>
#include <string.h>
#include <stdio.h>
struct named_curve
{
char *name;
char *p;
char *a,*b,*n;
int h;
char *gx,*gy;
};
struct named_curve named_curves[] = {
{
"secp256k1",
"00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F",
"00",
"07",
"00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141",
1,
"79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798",
"483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8"
},
};
int named_curves_count = sizeof(named_curves) / sizeof(struct named_curve);
int32_t curve_create_from_name(char *curve_name, curve_t curve)
{
for (int i=0; i<named_curves_count; i++)
{
if (!strcmp(curve_name, named_curves[i].name))
{
mpz_t p,a,b,n,gx,gy;
mpz_init_set_str(p, named_curves[i].p, 16);
mpz_init_set_str(a, named_curves[i].a, 16);
mpz_init_set_str(b, named_curves[i].b, 16);
mpz_init_set_str(n, named_curves[i].n, 16);
mpz_init_set_str(gx, named_curves[i].gx, 16);
mpz_init_set_str(gy, named_curves[i].gy, 16);
int success = curve_create(curve, p, a, b, n, named_curves[i].h, gx, gy);
mpz_clears(p, a, b, n, gx, gy, NULL);
return success;
}
}
return -1;
}