Tolerate a SEQUENCE in DN components.
[openssl.git] / crypto / dsa / dsatest.c
index 940d97d0e6c286333df8733579498cd2911a6164..912317bb443c62c9753367e6e0b9c19313a94183 100644 (file)
@@ -74,9 +74,7 @@
 #include <openssl/rand.h>
 #include <openssl/bio.h>
 #include <openssl/err.h>
-#ifndef OPENSSL_NO_ENGINE
-#include <openssl/engine.h>
-#endif
+#include <openssl/bn.h>
 
 #ifdef OPENSSL_NO_DSA
 int main(int argc, char *argv[])
@@ -93,7 +91,7 @@ int main(int argc, char *argv[])
 #define MS_CALLBACK
 #endif
 
-static void MS_CALLBACK dsa_cb(int p, int n, void *arg);
+static int MS_CALLBACK dsa_cb(int p, int n, BN_GENCB *arg);
 
 /* seed, out_p, out_q, out_g are taken from the updated Appendix 5 to
  * FIPS PUB 186 and also appear in Appendix 5 to FIPS PIB 186-1 */
@@ -138,6 +136,7 @@ static BIO *bio_err=NULL;
 
 int main(int argc, char **argv)
        {
+       BN_GENCB cb;
        DSA *dsa=NULL;
        int counter,ret=0,i,j;
        unsigned char buf[256];
@@ -157,7 +156,10 @@ int main(int argc, char **argv)
 
        BIO_printf(bio_err,"test generation of DSA parameters\n");
 
-       dsa=DSA_generate_parameters(512,seed,20,&counter,&h,dsa_cb,bio_err);
+       BN_GENCB_set(&cb, dsa_cb, bio_err);
+       if(((dsa = DSA_new()) == NULL) || !DSA_generate_parameters_ex(dsa, 512,
+                               seed, 20, &counter, &h, &cb))
+               goto end;
 
        BIO_printf(bio_err,"seed\n");
        for (i=0; i<20; i+=4)
@@ -165,7 +167,7 @@ int main(int argc, char **argv)
                BIO_printf(bio_err,"%02X%02X%02X%02X ",
                        seed[i],seed[i+1],seed[i+2],seed[i+3]);
                }
-       BIO_printf(bio_err,"\ncounter=%d h=%d\n",counter,h);
+       BIO_printf(bio_err,"\ncounter=%d h=%ld\n",counter,h);
                
        if (dsa == NULL) goto end;
        DSA_print(bio_err,dsa,0);
@@ -203,10 +205,19 @@ int main(int argc, char **argv)
                BIO_printf(bio_err,"g value is wrong\n");
                goto end;
                }
+
+       dsa->flags |= DSA_FLAG_NO_EXP_CONSTTIME;
        DSA_generate_key(dsa);
        DSA_sign(0, str1, 20, sig, &siglen, dsa);
        if (DSA_verify(0, str1, 20, sig, siglen, dsa) == 1)
                ret=1;
+
+       dsa->flags &= ~DSA_FLAG_NO_EXP_CONSTTIME;
+       DSA_generate_key(dsa);
+       DSA_sign(0, str1, 20, sig, &siglen, dsa);
+       if (DSA_verify(0, str1, 20, sig, siglen, dsa) == 1)
+               ret=1;
+
 end:
        if (!ret)
                ERR_print_errors(bio_err);
@@ -220,17 +231,14 @@ end:
                BIO_free(bio_err);
                bio_err = NULL;
                }
+#ifdef OPENSSL_SYS_NETWARE
+    if (!ret) printf("ERROR\n");
+#endif
        EXIT(!ret);
        return(0);
        }
 
-static int cb_exit(int ec)
-       {
-       EXIT(ec);
-       return(0);              /* To keep some compilers quiet */
-       }
-
-static void MS_CALLBACK dsa_cb(int p, int n, void *arg)
+static int MS_CALLBACK dsa_cb(int p, int n, BN_GENCB *arg)
        {
        char c='*';
        static int ok=0,num=0;
@@ -239,13 +247,14 @@ static void MS_CALLBACK dsa_cb(int p, int n, void *arg)
        if (p == 1) c='+';
        if (p == 2) { c='*'; ok++; }
        if (p == 3) c='\n';
-       BIO_write(arg,&c,1);
-       (void)BIO_flush(arg);
+       BIO_write(arg->arg,&c,1);
+       (void)BIO_flush(arg->arg);
 
        if (!ok && (p == 0) && (num > 1))
                {
                BIO_printf((BIO *)arg,"error in dsatest\n");
-               cb_exit(1);
+               return 0;
                }
+       return 1;
        }
 #endif