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;
                    }
                }

Reply via email to