Commit 5ecff87d authored by Rich Salz's avatar Rich Salz
Browse files

BN_pseudo_rand is really BN_rand



And BN_pseudo_rand_range is really BN_rand_range.
Document that we might deprecate those functions.

Reviewed-by: default avatarMatt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/3743)
parent 299c9cbb
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1511,7 +1511,7 @@ int rand_serial(BIGNUM *b, ASN1_INTEGER *ai)
    if (btmp == NULL)
        return 0;

    if (!BN_pseudo_rand(btmp, SERIAL_RAND_BITS, 0, 0))
    if (!BN_rand(btmp, SERIAL_RAND_BITS, 0, 0))
        goto error;
    if (ai && !BN_to_ASN1_INTEGER(btmp, ai))
        goto error;
+1 −1
Original line number Diff line number Diff line
@@ -216,7 +216,7 @@ int BN_is_prime_fasttest_ex(const BIGNUM *a, int checks, BN_CTX *ctx_passed,
        goto err;

    for (i = 0; i < checks; i++) {
        if (!BN_pseudo_rand_range(check, A1))
        if (!BN_rand_range(check, A1))
            goto err;
        if (!BN_add_word(check, 1))
            goto err;
+9 −16
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@
#include <openssl/rand.h>
#include <openssl/sha.h>

static int bnrand(int pseudorand, BIGNUM *rnd, int bits, int top, int bottom)
static int bnrand(int testing, BIGNUM *rnd, int bits, int top, int bottom)
{
    unsigned char *buf = NULL;
    int ret = 0, bit, bytes, mask;
@@ -46,7 +46,7 @@ static int bnrand(int pseudorand, BIGNUM *rnd, int bits, int top, int bottom)
    if (RAND_bytes(buf, bytes) <= 0)
        goto err;

    if (pseudorand == 2) {
    if (testing) {
        /*
         * generate patterns that are more likely to trigger BN library bugs
         */
@@ -98,21 +98,14 @@ int BN_rand(BIGNUM *rnd, int bits, int top, int bottom)
    return bnrand(0, rnd, bits, top, bottom);
}

int BN_pseudo_rand(BIGNUM *rnd, int bits, int top, int bottom)
{
    return bnrand(1, rnd, bits, top, bottom);
}

int BN_bntest_rand(BIGNUM *rnd, int bits, int top, int bottom)
{
    return bnrand(2, rnd, bits, top, bottom);
    return bnrand(1, rnd, bits, top, bottom);
}

/* random number r:  0 <= r < range */
static int bn_rand_range(int pseudo, BIGNUM *r, const BIGNUM *range)
int BN_rand_range(BIGNUM *r, const BIGNUM *range)
{
    int (*bn_rand) (BIGNUM *, int, int, int) =
        pseudo ? BN_pseudo_rand : BN_rand;
    int n;
    int count = 100;

@@ -133,7 +126,7 @@ static int bn_rand_range(int pseudo, BIGNUM *r, const BIGNUM *range)
         * than range
         */
        do {
            if (!bn_rand(r, n + 1, BN_RAND_TOP_ANY, BN_RAND_BOTTOM_ANY))
            if (!BN_rand(r, n + 1, BN_RAND_TOP_ANY, BN_RAND_BOTTOM_ANY))
                return 0;
            /*
             * If r < 3*range, use r := r MOD range (which is either r, r -
@@ -159,7 +152,7 @@ static int bn_rand_range(int pseudo, BIGNUM *r, const BIGNUM *range)
    } else {
        do {
            /* range = 11..._2  or  range = 101..._2 */
            if (!bn_rand(r, n, BN_RAND_TOP_ANY, BN_RAND_BOTTOM_ANY))
            if (!BN_rand(r, n, BN_RAND_TOP_ANY, BN_RAND_BOTTOM_ANY))
                return 0;

            if (!--count) {
@@ -174,14 +167,14 @@ static int bn_rand_range(int pseudo, BIGNUM *r, const BIGNUM *range)
    return 1;
}

int BN_rand_range(BIGNUM *r, const BIGNUM *range)
int BN_pseudo_rand(BIGNUM *rnd, int bits, int top, int bottom)
{
    return bn_rand_range(0, r, range);
    return BN_rand(rnd, bits, top, bottom);
}

int BN_pseudo_rand_range(BIGNUM *r, const BIGNUM *range)
{
    return bn_rand_range(1, r, range);
    return BN_rand_range(r, range);
}

/*
+1 −1
Original line number Diff line number Diff line
@@ -179,7 +179,7 @@ BIGNUM *BN_mod_sqrt(BIGNUM *in, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx)
            if (!BN_set_word(y, i))
                goto end;
        } else {
            if (!BN_pseudo_rand(y, BN_num_bits(p), 0, 0))
            if (!BN_rand(y, BN_num_bits(p), 0, 0))
                goto end;
            if (BN_ucmp(y, p) >= 0) {
                if (!(p->neg ? BN_add : BN_sub) (y, y, p))
+9 −7
Original line number Diff line number Diff line
@@ -34,15 +34,8 @@ If B<bottom> is B<BN_RAND_BOTTOM_ODD>, the number will be odd; if it
is B<BN_RAND_BOTTOM_ANY> it can be odd or even.
If B<bits> is 1 then B<top> cannot also be B<BN_RAND_FLG_TOPTWO>.

BN_pseudo_rand() does the same, but pseudo-random numbers generated by
this function are not necessarily unpredictable. They can be used for
non-cryptographic purposes and for certain purposes in cryptographic
protocols, but usually not for key generation etc.

BN_rand_range() generates a cryptographically strong pseudo-random
number B<rnd> in the range 0 E<lt>= B<rnd> E<lt> B<range>.
BN_pseudo_rand_range() does the same, but is based on BN_pseudo_rand(),
and hence numbers generated by it are not necessarily unpredictable.

The PRNG must be seeded prior to calling BN_rand() or BN_rand_range().

@@ -51,6 +44,15 @@ The PRNG must be seeded prior to calling BN_rand() or BN_rand_range().
The functions return 1 on success, 0 on error.
The error codes can be obtained by L<ERR_get_error(3)>.

=head1 HISTORY

Starting with OpenSSL release 1.1.0,
BN_pseudo_rand() has been identical to BN_rand()
and
BN_pseudo_rand_range() has been identical to BN_rand_range().
The "pseudo" functions should not be used and may be deprecated in
a future release.

=head1 SEE ALSO

L<ERR_get_error(3)>, L<RAND_add(3)>, L<RAND_bytes(3)>
Loading