OPENSSL_SYS_WIN32 is important so util/mkdef.pl can detect it
[oweals/openssl.git] / crypto / bn / bntest.c
index 9f308b75a9e6a3a53a73ac2ef1742ef22f03e086..8158a67374ded65bc3ec3c9b21d8a8310fef1578 100644 (file)
@@ -60,7 +60,7 @@
 #include <stdlib.h>
 #include <string.h>
 
-#include "openssl/e_os.h"
+#include "e_os.h"
 
 #include <openssl/bio.h>
 #include <openssl/bn.h>
@@ -68,7 +68,7 @@
 #include <openssl/x509.h>
 #include <openssl/err.h>
 
-#ifdef WINDOWS
+#ifdef OPENSSL_SYS_WINDOWS
 #include "../bio/bss_file.c"
 #endif
 
@@ -96,7 +96,7 @@ int test_sqrt(BIO *bp,BN_CTX *ctx);
 int rand_neg(void);
 static int results=0;
 
-#ifdef NO_STDIO
+#ifdef OPENSSL_NO_STDIO
 #define APPS_WIN16
 #include "bss_file.c"
 #endif
@@ -485,9 +485,11 @@ int test_mul(BIO *bp)
        {
        BIGNUM a,b,c,d,e;
        int i;
-       BN_CTX ctx;
+       BN_CTX *ctx;
 
-       BN_CTX_init(&ctx);
+       ctx = BN_CTX_new();
+       if (ctx == NULL) exit(1);
+       
        BN_init(&a);
        BN_init(&b);
        BN_init(&c);
@@ -505,7 +507,7 @@ int test_mul(BIO *bp)
                        BN_bntest_rand(&b,i-num1,0,0);
                a.neg=rand_neg();
                b.neg=rand_neg();
-               BN_mul(&c,&a,&b,&ctx);
+               BN_mul(&c,&a,&b,ctx);
                if (bp != NULL)
                        {
                        if (!results)
@@ -518,7 +520,7 @@ int test_mul(BIO *bp)
                        BN_print(bp,&c);
                        BIO_puts(bp,"\n");
                        }
-               BN_div(&d,&e,&c,&a,&ctx);
+               BN_div(&d,&e,&c,&a,ctx);
                BN_sub(&d,&d,&b);
                if(!BN_is_zero(&d) || !BN_is_zero(&e))
                    {
@@ -531,7 +533,7 @@ int test_mul(BIO *bp)
        BN_free(&c);
        BN_free(&d);
        BN_free(&e);
-       BN_CTX_free(&ctx);
+       BN_CTX_free(ctx);
        return(1);
        }
 
@@ -921,11 +923,10 @@ int test_kron(BIO *bp, BN_CTX *ctx)
                if (!BN_sub_word(t, 1)) goto err;
                if (!BN_rshift1(t, t)) goto err;
                /* r := a^t mod b */
-               /* FIXME: Using BN_mod_exp (Montgomery variant) leads to
-                * incorrect results if  b  is negative ("Legendre symbol
-                * computation failed").
-                * We want computations to be carried out modulo |b|. */
-               if (!BN_mod_exp_simple(r, a, t, b, ctx)) goto err;
+               b->neg=0;
+               
+               if (!BN_mod_exp_recp(r, a, t, b, ctx)) goto err;
+               b->neg=1;
 
                if (BN_is_word(r, 1))
                        legendre = 1;
@@ -934,7 +935,7 @@ int test_kron(BIO *bp, BN_CTX *ctx)
                else
                        {
                        if (!BN_add_word(r, 1)) goto err;
-                       if (0 != BN_cmp(r, b))
+                       if (0 != BN_ucmp(r, b))
                                {
                                fprintf(stderr, "Legendre symbol computation failed\n");
                                goto err;
@@ -1220,7 +1221,7 @@ int test_rshift1(BIO *bp)
                        }
                BN_sub(c,a,b);
                BN_sub(c,c,b);
-               if(!BN_is_zero(c) && !BN_is_one(c))
+               if(!BN_is_zero(c) && !BN_abs_is_word(c, 1))
                    {
                    fprintf(stderr,"Right shift one test failed!\n");
                    return 0;