api: New function gcry_get_config.
[libgcrypt.git] / tests / fipsrngdrv.c
index dfcea7c..d6023c7 100644 (file)
@@ -2,17 +2,17 @@
    Copyright (C) 2008 Free Software Foundation, Inc.
 
    This file is part of Libgcrypt.
-  
+
    Libgcrypt is free software; you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
    published by the Free Software Foundation; either version 2.1 of
    the License, or (at your option) any later version.
-  
+
    Libgcrypt is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.
-  
+
    You should have received a copy of the GNU Lesser General Public
    License along with this program; if not, see <http://www.gnu.org/licenses/>.
  */
@@ -89,13 +89,13 @@ hex2bin (const char *string, void *buffer, size_t length)
 
 
 static gcry_error_t
-init_external_test (void **r_context, 
+init_external_test (void **r_context,
                     unsigned int flags,
                     const void *key, size_t keylen,
                     const void *seed, size_t seedlen,
                     const void *dt, size_t dtlen)
 {
-  return gcry_control (58, 
+  return gcry_control (58,
                        r_context, flags,
                        key, keylen,
                        seed, seedlen,
@@ -111,7 +111,7 @@ run_external_test (void *context, void *buffer, size_t buflen)
 static void
 deinit_external_test (void *context)
 {
-  gcry_control (60, context);
+  xgcry_control (60, context);
 }
 
 
@@ -131,6 +131,7 @@ main (int argc, char **argv)
   int binary = 0;
   int loop = 0;
   int progress = 0;
+  int no_fips = 0;
   unsigned char key[16];
   unsigned char seed[16];
   unsigned char dt[16];
@@ -151,7 +152,7 @@ main (int argc, char **argv)
         }
       else if (!strcmp (*argv, "--help"))
         {
-          fputs ("usage: " PGM 
+          fputs ("usage: " PGM
                  " [--verbose] [--binary] [--loop] [--progress] KEY V DT\n",
                  stdout);
           exit (0);
@@ -161,6 +162,11 @@ main (int argc, char **argv)
           verbose++;
           argc--; argv++;
         }
+      else if (!strcmp (*argv, "--no-fips"))
+        {
+          no_fips++;
+          argc--; argv++;
+        }
       else if (!strcmp (*argv, "--binary"))
         {
           binary = 1;
@@ -176,8 +182,8 @@ main (int argc, char **argv)
           progress = 1;
           argc--; argv++;
         }
-    }          
-  
+    }
+
   if (!argc)
     {
       memcpy (key,  "1234567890123456", 16);
@@ -202,18 +208,21 @@ main (int argc, char **argv)
   if (verbose)
     fputs (PGM ": started\n", stderr);
 
-  gcry_control (GCRYCTL_SET_VERBOSITY, (int)verbose);
-  gcry_control (GCRYCTL_FORCE_FIPS_MODE, 0);
+  xgcry_control (GCRYCTL_SET_VERBOSITY, (int)verbose);
+  if (!no_fips)
+    xgcry_control (GCRYCTL_FORCE_FIPS_MODE, 0);
   if (!gcry_check_version ("1.4.3"))
     die ("version mismatch\n");
-  gcry_control (GCRYCTL_DISABLE_SECMEM, 0);
-  gcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0);
+  xgcry_control (GCRYCTL_DISABLE_SECMEM, 0);
+  xgcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0);
 
-  err = init_external_test (&context, 0, key, 16, seed, 16, dt, 16);
+  /* The flag value 1 disables the dup check, so that the RNG returns
+     all generated data.  */
+  err = init_external_test (&context, 1, key, 16, seed, 16, dt, 16);
   if (err)
     die ("init external test failed: %s\n", gpg_strerror (err));
 
-  do 
+  do
     {
       int writerr = 0;
 
@@ -260,4 +269,3 @@ main (int argc, char **argv)
 
   return 0;
 }
-