mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-07-31 11:17:29 +02:00
Handle case where bits is 0 properly.
This commit is contained in:
22
src/ssl.c
22
src/ssl.c
@ -54566,13 +54566,16 @@ int wolfSSL_BN_rand(WOLFSSL_BIGNUM* bn, int bits, int top, int bottom)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (ret == WOLFSSL_SUCCESS) {
|
if (ret == WOLFSSL_SUCCESS) {
|
||||||
|
if (len == 0) {
|
||||||
|
mp_zero((mp_int*)bn->internal);
|
||||||
|
}
|
||||||
|
else {
|
||||||
buff = (byte*)XMALLOC(len, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
buff = (byte*)XMALLOC(len, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
if (buff == NULL) {
|
if (buff == NULL) {
|
||||||
WOLFSSL_MSG("Failed to allocate buffer.");
|
WOLFSSL_MSG("Failed to allocate buffer.");
|
||||||
XFREE(buff, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
XFREE(buff, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
ret = WOLFSSL_FAILURE;
|
ret = WOLFSSL_FAILURE;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (ret == WOLFSSL_SUCCESS && initGlobalRNG == 0 &&
|
if (ret == WOLFSSL_SUCCESS && initGlobalRNG == 0 &&
|
||||||
wolfSSL_RAND_Init() != WOLFSSL_SUCCESS) {
|
wolfSSL_RAND_Init() != WOLFSSL_SUCCESS) {
|
||||||
@ -54580,12 +54583,14 @@ int wolfSSL_BN_rand(WOLFSSL_BIGNUM* bn, int bits, int top, int bottom)
|
|||||||
ret = WOLFSSL_FAILURE;
|
ret = WOLFSSL_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret == WOLFSSL_SUCCESS && wc_RNG_GenerateBlock(rng, buff, len) != 0) {
|
if (ret == WOLFSSL_SUCCESS &&
|
||||||
|
wc_RNG_GenerateBlock(rng, buff, len) != 0) {
|
||||||
WOLFSSL_MSG("wc_RNG_GenerateBlock failed");
|
WOLFSSL_MSG("wc_RNG_GenerateBlock failed");
|
||||||
ret = WOLFSSL_FAILURE;
|
ret = WOLFSSL_FAILURE;
|
||||||
}
|
}
|
||||||
if (ret == WOLFSSL_SUCCESS &&
|
if (ret == WOLFSSL_SUCCESS &&
|
||||||
mp_read_unsigned_bin((mp_int*)bn->internal,buff,len) != MP_OKAY) {
|
mp_read_unsigned_bin((mp_int*)bn->internal,buff,len)
|
||||||
|
!= MP_OKAY) {
|
||||||
WOLFSSL_MSG("mp_read_unsigned_bin failed");
|
WOLFSSL_MSG("mp_read_unsigned_bin failed");
|
||||||
ret = WOLFSSL_FAILURE;
|
ret = WOLFSSL_FAILURE;
|
||||||
}
|
}
|
||||||
@ -54594,14 +54599,17 @@ int wolfSSL_BN_rand(WOLFSSL_BIGNUM* bn, int bits, int top, int bottom)
|
|||||||
mp_rshb((mp_int*)bn->internal, 8 - (bits % 8));
|
mp_rshb((mp_int*)bn->internal, 8 - (bits % 8));
|
||||||
|
|
||||||
if (top == 0) {
|
if (top == 0) {
|
||||||
if (mp_set_bit((mp_int*)bn->internal, bits - 1) != MP_OKAY) {
|
if (mp_set_bit((mp_int*)bn->internal, bits - 1)
|
||||||
|
!= MP_OKAY) {
|
||||||
WOLFSSL_MSG("Failed to set top bit");
|
WOLFSSL_MSG("Failed to set top bit");
|
||||||
ret = WOLFSSL_FAILURE;
|
ret = WOLFSSL_FAILURE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (top > 0) {
|
else if (top > 0) {
|
||||||
if (mp_set_bit((mp_int*)bn->internal, bits - 1) != MP_OKAY ||
|
if (mp_set_bit((mp_int*)bn->internal, bits - 1)
|
||||||
mp_set_bit((mp_int*)bn->internal, bits - 2) != MP_OKAY) {
|
!= MP_OKAY ||
|
||||||
|
mp_set_bit((mp_int*)bn->internal, bits - 2)
|
||||||
|
!= MP_OKAY) {
|
||||||
WOLFSSL_MSG("Failed to set top 2 bits");
|
WOLFSSL_MSG("Failed to set top 2 bits");
|
||||||
ret = WOLFSSL_FAILURE;
|
ret = WOLFSSL_FAILURE;
|
||||||
}
|
}
|
||||||
@ -54616,6 +54624,8 @@ int wolfSSL_BN_rand(WOLFSSL_BIGNUM* bn, int bits, int top, int bottom)
|
|||||||
if (buff != NULL) {
|
if (buff != NULL) {
|
||||||
XFREE(buff, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
XFREE(buff, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
WOLFSSL_LEAVE("wolfSSL_BN_rand", ret);
|
WOLFSSL_LEAVE("wolfSSL_BN_rand", ret);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user