Skip to content

Instantly share code, notes, and snippets.

@devendranaga
Created February 14, 2019 06:11
Show Gist options
  • Save devendranaga/cfbe5b807ea80eccc926eb0fddfb4ab3 to your computer and use it in GitHub Desktop.
Save devendranaga/cfbe5b807ea80eccc926eb0fddfb4ab3 to your computer and use it in GitHub Desktop.
int sign(uint8_t *msg, size_t msglen, std::string sha_alg)
{
if (!evp_sign_key || !privatekey) {
std::cerr << "invalid sign key or private key is not loaded" << std::endl;
return -1;
}
const EVP_MD *md;
// mark the sha alg to use
if (sha_alg == "sha256") {
md = EVP_sha256();
} else if (sha_alg == "sha1") {
md = EVP_sha1();
} else {
return -1;
}
int ret;
EVP_MD_CTX *mdctx = EVP_MD_CTX_create();
ret = EVP_DigestSignInit(mdctx, NULL, md, NULL, evp_sign_key);
if (ret != 1) {
ERR_print_errors_fp(stderr);
return -1;
}
ret = EVP_DigestSignUpdate(mdctx, msg, msglen);
if (ret != 1) {
ERR_print_errors_fp(stderr);
return -1;
}
ret = EVP_DigestSignFinal(mdctx, signature, &signature_len);
if (ret != 1) {
ERR_print_errors_fp(stderr);
return -1;
}
EVP_MD_CTX_destroy(mdctx);
std::cout << "signature generated : " << signature_len << " bytes" << std::endl;
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment