From 87b857b6bf3f1d96f106d8f65c0d89d1c5a283ec Mon Sep 17 00:00:00 2001 From: Nils Larsch Date: Mon, 25 Jul 2005 22:55:48 +0000 Subject: [PATCH] fix BN_mod_word and give a more reasonable return value if an error occurred --- crypto/bn/bn_word.c | 7 +++++-- doc/crypto/BN_add_word.pod | 10 +++++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/crypto/bn/bn_word.c b/crypto/bn/bn_word.c index bc5905fef4..ee7b87c45c 100644 --- a/crypto/bn/bn_word.c +++ b/crypto/bn/bn_word.c @@ -69,6 +69,9 @@ BN_ULONG BN_mod_word(const BIGNUM *a, BN_ULONG w) #endif int i; + if (w == 0) + return (BN_ULONG)-1; + bn_check_top(a); w&=BN_MASK2; for (i=a->top-1; i>=0; i--) @@ -94,7 +97,7 @@ BN_ULONG BN_div_word(BIGNUM *a, BN_ULONG w) if (!w) /* actually this an error (division by zero) */ - return 0; + return (BN_ULONG)-1; if (a->top == 0) return 0; @@ -102,7 +105,7 @@ BN_ULONG BN_div_word(BIGNUM *a, BN_ULONG w) j = BN_BITS2 - BN_num_bits_word(w); w <<= j; if (!BN_lshift(a, a, j)) - return 0; + return (BN_ULONG)-1; for (i=a->top-1; i>=0; i--) { diff --git a/doc/crypto/BN_add_word.pod b/doc/crypto/BN_add_word.pod index 94244adea4..70667d2893 100644 --- a/doc/crypto/BN_add_word.pod +++ b/doc/crypto/BN_add_word.pod @@ -29,11 +29,11 @@ BN_add_word() adds B to B (C). BN_sub_word() subtracts B from B (C). -BN_mul_word() multiplies B and B (C). +BN_mul_word() multiplies B and B (C). BN_div_word() divides B by B (C) and returns the remainder. -BN_mod_word() returns the remainder of B divided by B (C). +BN_mod_word() returns the remainder of B divided by B (C). For BN_div_word() and BN_mod_word(), B must not be 0. @@ -42,7 +42,8 @@ For BN_div_word() and BN_mod_word(), B must not be 0. BN_add_word(), BN_sub_word() and BN_mul_word() return 1 for success, 0 on error. The error codes can be obtained by L. -BN_mod_word() and BN_div_word() return B%B. +BN_mod_word() and BN_div_word() return B%B on success and +B<(BN_ULONG)-1> if an error occurred. =head1 SEE ALSO @@ -54,4 +55,7 @@ BN_add_word() and BN_mod_word() are available in all versions of SSLeay and OpenSSL. BN_div_word() was added in SSLeay 0.8, and BN_sub_word() and BN_mul_word() in SSLeay 0.9.0. +Before 0.9.8a the return value for BN_div_word() and BN_mod_word() +in case of an error was 0. + =cut -- 2.25.1