Add EC_KEY_key2buf for OpenSSL compatibility

Change-Id: If45ef3a9bb757bd0c7f592f40ececaf4aa2f607d
Reviewed-on: https://boringssl-review.googlesource.com/c/33824
Reviewed-by: Adam Langley <agl@google.com>
Commit-Queue: Adam Langley <agl@google.com>
This commit is contained in:
Jeremy Apthorp 2018-12-19 14:46:14 -08:00 committed by CQ bot account: commit-bot@chromium.org
parent 43e636a2e4
commit 7177c1d29f
2 changed files with 33 additions and 0 deletions

View File

@ -394,6 +394,33 @@ err:
return ok;
}
size_t EC_KEY_key2buf(EC_KEY *key, point_conversion_form_t form,
unsigned char **out_buf, BN_CTX *ctx) {
if (key == NULL || key->pub_key == NULL || key->group == NULL) {
return 0;
}
const size_t len =
EC_POINT_point2oct(key->group, key->pub_key, form, NULL, 0, ctx);
if (len == 0) {
return 0;
}
uint8_t *buf = OPENSSL_malloc(len);
if (buf == NULL) {
return 0;
}
if (EC_POINT_point2oct(key->group, key->pub_key, form, buf, len, ctx) !=
len) {
OPENSSL_free(buf);
return 0;
}
*out_buf = buf;
return len;
}
int EC_KEY_generate_key(EC_KEY *key) {
if (key == NULL || key->group == NULL) {
OPENSSL_PUT_ERROR(EC, ERR_R_PASSED_NULL_PARAMETER);

View File

@ -177,6 +177,12 @@ OPENSSL_EXPORT int EC_KEY_set_public_key_affine_coordinates(EC_KEY *key,
BIGNUM *x,
BIGNUM *y);
// EC_KEY_key2buf encodes the public key in |key| to an allocated octet string
// and sets |*out_buf| to point to it. It returns the length of the encoded
// octet string or zero if an error occurred.
OPENSSL_EXPORT size_t EC_KEY_key2buf(EC_KEY *key, point_conversion_form_t form,
unsigned char **out_buf, BN_CTX *ctx);
// Key generation.