Removed the AC interface (gcry_ac_*)
[libgcrypt.git] / tests / register.c
index a973abe..4d8cebe 100644 (file)
@@ -1,5 +1,5 @@
 /* register.c - Test for registering of additional cipher modules.
- *     Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+ *     Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
  *
  * This file is part of Libgcrypt.
  *
@@ -18,6 +18,9 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
  */
 
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -27,6 +30,7 @@
 #include "../src/gcrypt.h"
 
 static int verbose;
+static int in_fips_mode;
 
 static void
 die (const char *format, ...)
@@ -42,6 +46,10 @@ die (const char *format, ...)
 gcry_err_code_t
 foo_setkey (void *c, const unsigned char *key, unsigned keylen)
 {
+  (void)c;
+  (void)key;
+  (void)keylen;
+
   return 0;
 }
 
@@ -52,6 +60,8 @@ foo_encrypt (void *c, unsigned char *outbuf, const unsigned char *inbuf)
 {
   int i;
 
+  (void)c;
+
   for (i = 0; i < FOO_BLOCKSIZE; i++)
     outbuf[i] = inbuf[i] ^ 0x42;
 }
@@ -61,13 +71,15 @@ foo_decrypt (void *c, unsigned char *outbuf, const unsigned char *inbuf)
 {
   int i;
 
+  (void)c;
+
   for (i = 0; i < FOO_BLOCKSIZE; i++)
     outbuf[i] = inbuf[i] ^ 0x42;
 }
 
 gcry_cipher_spec_t cipher_spec_foo =
   {
-    "FOO", NULL, 16, 0, 0,
+    "FOO", NULL, NULL, 16, 0, 0,
     foo_setkey, foo_encrypt, foo_decrypt,
     NULL, NULL,
   };
@@ -84,7 +96,7 @@ check_list (int algorithm)
   list = malloc (sizeof (int) * list_length);
   assert (list);
   err = gcry_cipher_list (list, &list_length);
-  
+
   for (i = 0; i < list_length && (! ret); i++)
     if (list[i] == algorithm)
       ret = 1;
@@ -103,10 +115,21 @@ check_run (void)
   int ret;
 
   err = gcry_cipher_register (&cipher_spec_foo, &algorithm, &module);
-  assert (! err);
+  if (in_fips_mode)
+    {
+      if (gpg_err_code (err) != GPG_ERR_NOT_SUPPORTED)
+        die ("register cipher failed in fips mode: %s\n", gpg_strerror (err));
+      return;
+    }
+  else
+    {
+      if (err)
+        die ("register cipher failed: %s\n", gpg_strerror (err));
+    }
 
   err = gcry_cipher_open (&h, algorithm, GCRY_CIPHER_MODE_CBC, 0);
-  assert (! err);
+  if (err)
+    die ("gcry_cipher_open failed: %s\n", gpg_strerror (err));
 
   err = gcry_cipher_encrypt (h,
                             (unsigned char *) encrypted, sizeof (encrypted),
@@ -152,8 +175,13 @@ main (int argc, char **argv)
   if (debug)
     gcry_control (GCRYCTL_SET_DEBUG_FLAGS, 1u , 0);
 
+  if ( gcry_control (GCRYCTL_FIPS_MODE_P, 0) )
+    in_fips_mode = 1;
+
   for (; i > 0; i--)
     check_run ();
-  
-  return 0;
+
+  /* In fips mode we let the Makefile skip this test because a PASS
+     would not make much sense with all egistering disabled. */
+  return in_fips_mode? 77:0;
 }