#include <stdlib.h>
#include <stdio.h>
#include <include/ecctk-prototype.h>
#include <include/ecctk-hash.h>
#include <include/ecctk-ecc.h>
s2byte sign_stream()
{
s4byte ret = -1;
s2byte algo = ECCTK_ECC_ALGO_ECDSA;
s2byte hash_algo = ECCTK_HASH_ALGO_SHA160;
s1byte kprvfile[] = "private_key_file",
signfile[] = "signature_file";
u1byte in[] = "Elliptic Curve Cryptographic ToolKit";
s4byte in_size = sizeof(in);
KPRV_CTX *kprv;
SIGN_CTX *sign;
kprv = ReadFileKprvCtx(kprvfile);
if (kprv == NULL)
{
fprintf(stderr, "Read private key on %s failed\n", kprvfile);
return EXIT_FAILURE;
}
ret = InitializeEcctkAll();
if (ret != ECCTK_ECC_NO_ERROR)
{
fprintf(stderr, "InitializeEcctkAll failed (%d)\n", ret);
return EXIT_FAILURE;
}
switch (algo)
{
case ECCTK_ECC_ALGO_ECDSA:
sign = SignStreamEcdsa(in, in_size, hash_algo, kprv, "mypassword");
break;
case ECCTK_ECC_ALGO_ECNR:
sign = SignStreamEcnr(in, in_size, hash_algo, kprv, "mypassword");
break;
default:
sign = NULL;
break;
}
if (sign == NULL)
{
fprintf(stderr, "Sign stream failed\n");
FreeEcctkAll();
KprvCtxFree(kprv);
return EXIT_FAILURE;
}
ret = WriteFileSignCtx(signfile, sign);
if (ret != ECCTK_ECC_NO_ERROR)
{
fprintf(stderr, "Write signature context on file %s failed (Error : %ld)\n", signfile, ret);
FreeEcctkAll();
KprvCtxFree(kprv);
SignCtxFree(sign);
return EXIT_FAILURE;
}
KprvCtxFree(kprv);
SignCtxFree(sign);
FreeEcctkAll();
fprintf(stdout, "Sign stream success\n");
return EXIT_SUCCESS;
}