#include <stdlib.h>
#include <stdio.h>
#include <include/ecctk-prototype.h>
#include <include/ecctk-ecc.h>
s2byte generate_keypair()
{
s4byte ret = -1;
#ifndef ECCTK_EVALUATION
s2byte curve = ECCTK_CURVE_SEC_PRIME_256;
#else
s2byte curve = ECCTK_CURVE_SEC_PRIME_160;
#endif
s1byte kprvfile[] = "private_key_file",
kpubfile[] = "public_key_file";
KPRV_CTX *kprv;
KPUB_CTX *kpub;
ret = InitializeEcctkAll();
if (ret != ECCTK_ECC_NO_ERROR)
{
fprintf(stderr, "InitializeEcctkAll failed (%d)\n", ret);
return EXIT_FAILURE;
}
kprv = GeneratePrivateKey(curve, "g-4!yAv2");
if (kprv == NULL)
{
FreeEcctkAll();
fprintf(stderr, "Generate private key failed\n");
return EXIT_FAILURE;
}
kpub = GeneratePublicKey(kprv, "g-4!yAv2");
if (kpub == NULL)
{
FreeEcctkAll();
KprvCtxFree(kprv);
fprintf(stderr, "Generate public key failed\n");
return EXIT_FAILURE;
}
ret = WriteFileKpubCtx(kpubfile, kpub);
if (ret != ECCTK_ECC_NO_ERROR)
{
fprintf(stderr, "Write public key on %s failed (Error : %ld)\n", kpubfile, ret);
FreeEcctkAll();
KpubCtxFree(kpub);
KprvCtxFree(kprv);
return EXIT_FAILURE;
}
ret = WriteFileKprvCtx(kprvfile, kprv);
if (ret != ECCTK_ECC_NO_ERROR)
{
fprintf(stderr, "Write private key on %s failed (%ld)\n", kprvfile, ret);
FreeEcctkAll();
KpubCtxFree(kpub);
KprvCtxFree(kprv);
return EXIT_FAILURE;
}
fprintf(stdout, "Generate key pair success\n");
KpubCtxFree(kpub);
KprvCtxFree(kprv);
FreeEcctkAll();
return EXIT_SUCCESS;
}