#include <stdlib.h>
#include <stdio.h>
#include <include/ecctk-prototype.h>
#include <include/ecctk-hash.h>
#include <include/ecctk-ecc.h>
s2byte encrypt_stream_asym()
{
u2byte ret;
s2byte algo = ECCTK_ECC_ALGO_PSEC3;
#ifndef ECCTK_EVALUATION
s2byte hash_algo = ECCTK_HASH_ALGO_SHA256,
#else
s2byte hash_algo = ECCTK_HASH_ALGO_SHA160,
#endif
hmac_algo = ECCTK_HASH_HMAC_ALGO_MD5;
s1byte kpubfile[] = "public_key_file",
cipherfile[]= "cipher_file";
u1byte in[] = "Elliptic Curve Cryptographic ToolKit",
*out;
s4byte outsize;
KPUB_CTX *kpub;
ECC_CIPHER_CTX *cipher;
kpub = ReadFileKpubCtx(kpubfile);
if (kpub == NULL)
{
fprintf(stderr, "Read public key on %s failed\n", kpubfile);
return EXIT_FAILURE;
}
cipher = ReadFileEccCipherCtx(cipherfile);
if (cipher == NULL)
{
fprintf(stderr, "Read cipher on %s failed\n", cipherfile);
KpubCtxFree(kpub);
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_ECIES:
out = EncryptStreamEcies(in, sizeof(in), &outsize, hmac_algo, kpub, cipher);
break;
case ECCTK_ECC_ALGO_PSEC3:
out = EncryptStreamPsec3(in, sizeof(in), &outsize, hash_algo, kpub, cipher);
break;
default:
out = NULL;
break;
}
if (out == NULL)
fprintf(stderr, "Encrypt stream failed\n");
else
fprintf(stdout, "Encrypt stream success, result stream size = %ld\n", outsize);
free(out);
KpubCtxFree(kpub);
EccCipherCtxFree(cipher);
FreeEcctkAll();
return EXIT_SUCCESS;
}