projects
/
openssl.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
be8a280
)
Let BN_rand_range() abort with an error after 100 iterations
author
Bodo Möller
<bodo@openssl.org>
Fri, 2 Aug 2002 15:02:03 +0000
(15:02 +0000)
committer
Bodo Möller
<bodo@openssl.org>
Fri, 2 Aug 2002 15:02:03 +0000
(15:02 +0000)
without success.
CHANGES
patch
|
blob
|
history
crypto/bn/bn_rand.c
patch
|
blob
|
history
diff --git
a/CHANGES
b/CHANGES
index 26c84b059622e47e227d2830a8529a86251afcfb..3067dc6389005beae8755d3eec486dc22f9b6544 100644
(file)
--- a/
CHANGES
+++ b/
CHANGES
@@
-4,6
+4,10
@@
Changes between 0.9.7 and 0.9.8 [xx XXX 2002]
Changes between 0.9.7 and 0.9.8 [xx XXX 2002]
+ *) Let BN_rand_range() abort with an error after 100 iterations
+ without success (which indicates a broken PRNG).
+ [Bodo Moeller]
+
*) Change BN_mod_sqrt() so that it verifies that the input value
is really the square of the return value. (Previously,
BN_mod_sqrt would show GIGO behaviour.)
*) Change BN_mod_sqrt() so that it verifies that the input value
is really the square of the return value. (Previously,
BN_mod_sqrt would show GIGO behaviour.)
diff --git
a/crypto/bn/bn_rand.c
b/crypto/bn/bn_rand.c
index 9e08ccd22e78fca5cb4795cc35d3a6ab39429c19..e6705f7025bd82e039a7a261f45d1b76820fce15 100644
(file)
--- a/
crypto/bn/bn_rand.c
+++ b/
crypto/bn/bn_rand.c
@@
-230,6
+230,7
@@
static int bn_rand_range(int pseudo, BIGNUM *r, BIGNUM *range)
{
int (*bn_rand)(BIGNUM *, int, int, int) = pseudo ? BN_pseudo_rand : BN_rand;
int n;
{
int (*bn_rand)(BIGNUM *, int, int, int) = pseudo ? BN_pseudo_rand : BN_rand;
int n;
+ int count = 100;
if (range->neg || BN_is_zero(range))
{
if (range->neg || BN_is_zero(range))
{
@@
-263,6
+264,13
@@
static int bn_rand_range(int pseudo, BIGNUM *r, BIGNUM *range)
if (BN_cmp(r, range) >= 0)
if (!BN_sub(r, r, range)) return 0;
}
if (BN_cmp(r, range) >= 0)
if (!BN_sub(r, r, range)) return 0;
}
+
+ if (!--count)
+ {
+ BNerr(BN_F_BN_RAND_RANGE, BN_R_TOO_MANY_ITERATIONS);
+ return 0;
+ }
+
}
while (BN_cmp(r, range) >= 0);
}
}
while (BN_cmp(r, range) >= 0);
}
@@
-272,6
+280,12
@@
static int bn_rand_range(int pseudo, BIGNUM *r, BIGNUM *range)
{
/* range = 11..._2 or range = 101..._2 */
if (!bn_rand(r, n, -1, 0)) return 0;
{
/* range = 11..._2 or range = 101..._2 */
if (!bn_rand(r, n, -1, 0)) return 0;
+
+ if (!--count)
+ {
+ BNerr(BN_F_BN_RAND_RANGE, BN_R_TOO_MANY_ITERATIONS);
+ return 0;
+ }
}
while (BN_cmp(r, range) >= 0);
}
}
while (BN_cmp(r, range) >= 0);
}