libcurve/src/curvecli.c

82 lines
1.8 KiB
C

#include <stdio.h>
#include <curve.h>
#include <sys/time.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <rand.h>
#include <lsag.h>
#include <mpztools.h>
char curvename[32];
void test_lsag(int ringsize)
{
curve_t secp256k1;
curve_create_from_name("secp256k1", secp256k1);
mpz_t privKeys[ringsize];
ec_point_t pubKeys[ringsize];
for (int i=0; i<ringsize; i++)
{
mpz_init( privKeys[i] );
mpz_random_mod( privKeys[i], secp256k1->n );
curve_point_init( pubKeys[i] );
curve_point_mul( pubKeys[i], secp256k1->G, privKeys[i], secp256k1 );
}
printf("LSAG: created ring of %i keys:\n", ringsize);
for (int i=0; i<ringsize; i++)
{
printf("#%06d ", i);
printf("%s -> ", mpz_to_string(privKeys[i], 16));
printf("%s / ", mpz_to_string(pubKeys[i]->x, 16));
printf("%s\n", mpz_to_string(pubKeys[i]->y, 16));
}
char *message = "Hallo Welt!";
int msglen = strlen(message);
mpz_cleanup( C0 );
ec_point_t_cleanup( Y );
mpz_field_cleanup( S, ringsize );
printf("LSAG: signing ring of %i keys:\n", ringsize);
for (int i=0; i<ringsize; i++)
{
printf("signing #%i\n",i );
lsag_sign(message, msglen, privKeys[i], pubKeys, ringsize, secp256k1, C0, Y, S);
printf("verifying #%i\n", i );
int verified = lsag_verify( message, msglen, pubKeys, ringsize, secp256k1, C0, Y, S);
printf("verfication: %i\n", verified);
}
for (int i=0; i<ringsize; i++)
{
mpz_clear( privKeys[i] );
curve_point_clear( pubKeys[i] );
}
curve_destroy( secp256k1 );
}
int main(int argc, char *argv[])
{
test_lsag(10);
test_lsag(100);
test_lsag(1000);
}