mirror of
https://github.com/eosswedenorg/libantelope
synced 2026-06-17 03:50:04 +02:00
include/libeosio/ec.hpp: adding ec_generate_privkey() and ec_get_publickey()
This commit is contained in:
parent
4b8c1c7733
commit
171876bbfa
4 changed files with 214 additions and 0 deletions
|
|
@ -60,6 +60,67 @@ void ec_shutdown() {
|
|||
}
|
||||
}
|
||||
|
||||
int ec_generate_privkey(ec_privkey_t *priv) {
|
||||
|
||||
// Generate new private key.
|
||||
if (EC_KEY_generate_key(k) == 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (EC_KEY_priv2oct(k, priv->data(), EC_PRIVKEY_SIZE) == 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Calcualte a public key from a EC_KEY object.
|
||||
int calculate_pubkey(EC_KEY *ec_key, ec_pubkey_t *pub) {
|
||||
const BIGNUM* pk;
|
||||
const EC_GROUP *group;
|
||||
EC_POINT *point;
|
||||
int rc;
|
||||
|
||||
// Get the curve (group) number first.
|
||||
if ((group = EC_KEY_get0_group(ec_key)) == NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Then get the private key number
|
||||
if ((pk = EC_KEY_get0_private_key(ec_key)) == NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Create a new point.
|
||||
if ((point = EC_POINT_new(group)) == NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Multiply curve (group) and private key to get the public key.
|
||||
rc = EC_POINT_mul(group, point, pk, NULL, NULL, ctx);
|
||||
if (rc != 0) {
|
||||
// Encode public key
|
||||
rc = EC_POINT_point2oct(group, point, POINT_CONVERSION_COMPRESSED,
|
||||
pub->data(), EC_PUBKEY_SIZE, ctx);
|
||||
}
|
||||
|
||||
EC_POINT_free(point);
|
||||
return rc;
|
||||
}
|
||||
|
||||
int ec_get_publickey(const ec_privkey_t *priv, ec_pubkey_t* pub) {
|
||||
|
||||
const BIGNUM* n;
|
||||
const EC_GROUP *group;
|
||||
EC_POINT *point;
|
||||
|
||||
// Load private key
|
||||
if (EC_KEY_oct2priv(k, priv->data(), EC_PRIVKEY_SIZE) == 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return calculate_pubkey(k, pub) == 0 ? -1 : 0;
|
||||
}
|
||||
|
||||
int ec_generate_key(struct ec_keypair *pair) {
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue