Skip to content

Instantly share code, notes, and snippets.

@devendranaga
Created February 14, 2019 05:46
Show Gist options
  • Save devendranaga/4f4c7a08f0783a52e9c661f3d4196050 to your computer and use it in GitHub Desktop.
Save devendranaga/4f4c7a08f0783a52e9c661f3d4196050 to your computer and use it in GitHub Desktop.
int generate_keys(std::string pubkeyfile, std::string privkeyfile, std::string curve_name)
{
EC_KEY *keygen;
int nid = to_nid(curve_name);
if (nid == -1) {
return -1;
}
// get curve name
keygen = EC_KEY_new_by_curve_name(nid);
if (!keygen) {
ERR_print_errors_fp(stderr);
return -1;
}
int ret;
// run the key generation .. we aren't doing the curve parameters
ret = EC_KEY_generate_key(keygen);
if (ret != 1) {
ERR_print_errors_fp(stderr);
return -1;
}
ret = EC_KEY_check_key(keygen);
if (ret != 1) {
ERR_print_errors_fp(stderr);
return -1;
}
// wirte the keys
FILE *fp;
fp = fopen(pubkeyfile.c_str(), "w");
if (!fp) {
return -1;
}
PEM_write_EC_PUBKEY(fp, keygen);
fclose(fp);
fp = fopen(privkeyfile.c_str(), "w");
if (!fp) {
return -1;
}
PEM_write_ECPrivateKey(fp, keygen, NULL, NULL, 0, NULL, NULL);
fclose(fp);
EC_KEY_free(keygen);
std::cout << "keygen success" << std::endl;
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment