diff options
Diffstat (limited to 'test_crypto.c')
-rw-r--r-- | test_crypto.c | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/test_crypto.c b/test_crypto.c new file mode 100644 index 0000000..67894eb --- /dev/null +++ b/test_crypto.c @@ -0,0 +1,59 @@ + +#include "brandt.h" +#include "crypto.h" +#include "test.h" + +int +test_brandt_ec_keypair_create () +{ + gcry_mpi_t skey; + gcry_mpi_t x1 = gcry_mpi_new(0); + gcry_mpi_t x2 = gcry_mpi_new(0); + gcry_mpi_t y1 = gcry_mpi_new(0); + gcry_mpi_t y2 = gcry_mpi_new(0); + gcry_mpi_point_t pkey1; + gcry_mpi_point_t pkey2 = gcry_mpi_point_new(0); + + brandt_ec_keypair_create (&pkey1, &skey); + check(skey, "no sec key created"); + check(pkey1, "no pub key created"); + check(pkey2, "could not init pkey2"); + check(x1, "could not init x1"); + check(x2, "could not init x2"); + check(y1, "could not init y1"); + check(y2, "could not init y2"); + + gcry_mpi_ec_mul(pkey2, skey, ec_gen, ec_ctx); + check(!gcry_mpi_ec_get_affine(x1, y1, pkey1, ec_ctx), "could not get affine coords for pkey1"); + check(!gcry_mpi_ec_get_affine(x2, y2, pkey2, ec_ctx), "could not get affine coords for pkey1"); + check(!gcry_mpi_cmp(x1, x2), "x component does not match"); + check(!gcry_mpi_cmp(y1, y2), "y component does not match"); + + gcry_mpi_release(skey); + gcry_mpi_release(x1); + gcry_mpi_release(x2); + gcry_mpi_release(y1); + gcry_mpi_release(y2); + gcry_mpi_point_release(pkey1); + gcry_mpi_point_release(pkey2); +} + +int +main (int argc, char *argv[]) +{ + int repeat = 100; + int i; + + BRANDT_init(); + + for (i = 0; i < repeat; i++) + { + run(test_brandt_ec_keypair_create); + } + + if (!ret) + { + fputs("All tests passed", stderr); + } + return ret; +} |