Al Smith wrote:
>
> on linux 2.2[.9] with egcs-1.1.2 and libc.5.4.46, the bignum test fails.
> with "./Configure no-asm linux-elf", test/bntest results in the attached
> output, which ends with "Left shift test failed!" the next test (exptest)
> appears to be caught in a loop and doesn't actually produce any output at
> all.
Gak! For future reference, the last few lines of a BN test will usually
do! Anyway, I can't reproduce this ... could you apply this patch and
try again?
> C64F43042AEACA6E5836805BE8C99B045D4836C2FD16C964F0 * 2 -
>18C9E860855D594DCB06D00B7D1933608BA906D85FA2D92C9E0
> Left shift test failed!
Cheers,
Ben.
--
http://www.apache-ssl.org/ben.html
"My grandfather once told me that there are two kinds of people: those
who work and those who take the credit. He told me to try to be in the
first group; there was less competition there."
- Indira Gandhi
Index: crypto/bn/bntest.c
===================================================================
RCS file: /e/openssl/cvs/openssl/crypto/bn/bntest.c,v
retrieving revision 1.8
diff -u -r1.8 bntest.c
--- crypto/bn/bntest.c 1999/05/21 11:16:17 1.8
+++ crypto/bn/bntest.c 1999/05/25 14:48:19
@@ -75,7 +75,7 @@
int test_add(BIO *bp);
int test_sub(BIO *bp);
int test_lshift1(BIO *bp);
-int test_lshift(BIO *bp,BN_CTX *ctx);
+int test_lshift(BIO *bp,BN_CTX *ctx,BIGNUM *a_);
int test_rshift1(BIO *bp);
int test_rshift(BIO *bp,BN_CTX *ctx);
int test_div(BIO *bp,BN_CTX *ctx);
@@ -95,6 +95,9 @@
#include "bss_file.c"
#endif
+static unsigned char lst1[]="\xC6\x4F\x43\x04\x2A\xEA\xCA\x6E\x58\x36\x80\x5B\xE8\xC9"
+"\x9B\x04\x5D\x48\x36\xC2\xFD\x16\xC9\x64\xF0";
+
int main(int argc, char *argv[])
{
BN_CTX *ctx;
@@ -152,8 +155,13 @@
if (!test_lshift1(out)) goto err;
fflush(stdout);
+ fprintf(stderr,"test BN_lshift (fixed)\n");
+ if (!test_lshift(out,ctx,BN_bin2bn(lst1,sizeof(lst1)-1,NULL)))
+ goto err;
+ fflush(stdout);
+
fprintf(stderr,"test BN_lshift\n");
- if (!test_lshift(out,ctx)) goto err;
+ if (!test_lshift(out,ctx,NULL)) goto err;
fflush(stdout);
fprintf(stderr,"test BN_rshift1\n");
@@ -815,19 +823,24 @@
return(1);
}
-int test_lshift(BIO *bp,BN_CTX *ctx)
+int test_lshift(BIO *bp,BN_CTX *ctx,BIGNUM *a_)
{
BIGNUM *a,*b,*c,*d;
int i;
- a=BN_new();
b=BN_new();
c=BN_new();
d=BN_new();
BN_one(c);
- BN_rand(a,200,0,0); /**/
- a->neg=rand_neg();
+ if(a_)
+ a=a_;
+ else
+ {
+ a=BN_new();
+ BN_rand(a,200,0,0); /**/
+ a->neg=rand_neg();
+ }
for (i=0; i<70; i++)
{
BN_lshift(b,a,i+1);
@@ -849,6 +862,15 @@
if(!BN_is_zero(d))
{
BIO_puts(bp,"Left shift test failed!\n");
+ BIO_puts(bp,"a=");
+ BN_print(bp,a);
+ BIO_puts(bp,"\nb=");
+ BN_print(bp,b);
+ BIO_puts(bp,"\nc=");
+ BN_print(bp,c);
+ BIO_puts(bp,"\nd=");
+ BN_print(bp,d);
+ BIO_puts(bp,"\n");
return 0;
}
}