mirror of
https://github.com/openssl/openssl.git
synced 2025-01-30 14:01:55 +08:00
Fix EC_POINT_bn2point() for BN_zero()
EC_POINT_bn2point() rejected BIGNUMs with a zero value. This behavior indirectly caused failures when converting a point at infinity through EC_POINT_point2hex() and then back to a point with EC_POINT_hex2point(). With this change such BIGNUMs are treated like any other and exported to an octet buffer filled with zero. It is then EC_POINT_oct2point() (either the default implementation or the custom one in group->meth->oct2point) to determine if such encoding maps to a valid point (generally the point at infinity is encoded as 0x00). Fixes #10258 Reviewed-by: Matt Caswell <matt@openssl.org> (Merged from https://github.com/openssl/openssl/pull/10329)
This commit is contained in:
parent
a7372f5922
commit
d47c108756
@ -39,13 +39,13 @@ EC_POINT *EC_POINT_bn2point(const EC_GROUP *group,
|
|||||||
EC_POINT *ret;
|
EC_POINT *ret;
|
||||||
|
|
||||||
if ((buf_len = BN_num_bytes(bn)) == 0)
|
if ((buf_len = BN_num_bytes(bn)) == 0)
|
||||||
return NULL;
|
buf_len = 1;
|
||||||
if ((buf = OPENSSL_malloc(buf_len)) == NULL) {
|
if ((buf = OPENSSL_malloc(buf_len)) == NULL) {
|
||||||
ECerr(EC_F_EC_POINT_BN2POINT, ERR_R_MALLOC_FAILURE);
|
ECerr(EC_F_EC_POINT_BN2POINT, ERR_R_MALLOC_FAILURE);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!BN_bn2bin(bn, buf)) {
|
if (!BN_bn2binpad(bn, buf, buf_len)) {
|
||||||
OPENSSL_free(buf);
|
OPENSSL_free(buf);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user