common: Speedup closing fds before an exec.
[gnupg.git] / common / t-openpgp-oid.c
index 79e5a70..afb6ebe 100644 (file)
   } while(0)
 
 
+#define BADOID "1.3.6.1.4.1.11591.2.12242973"
+
+
+static int verbose;
+
+
+
 static void
 test_openpgp_oid_from_str (void)
 {
@@ -108,6 +115,12 @@ test_openpgp_oid_to_str (void)
     { "1.3.132.0.35",
       { 5, 0x2B, 0x81, 0x04, 0x00, 0x23 }},
 
+    { BADOID,
+      { 9, 0x80, 0x02, 0x70, 0x50, 0x25, 0x46, 0xfd, 0x0c, 0xc0 }},
+
+    { BADOID,
+      { 1, 0x80 }},
+
     { NULL }};
   gcry_mpi_t a;
   int idx;
@@ -175,15 +188,51 @@ test_openpgp_oid_is_ed25519 (void)
 }
 
 
+static void
+test_openpgp_enum_curves (void)
+{
+  int iter = 0;
+  const char *name;
+  int p256 = 0;
+  int p384 = 0;
+  int p521 = 0;
+
+  while ((name = openpgp_enum_curves (&iter)))
+    {
+      if (verbose)
+        printf ("curve: %s\n", name);
+      if (!strcmp (name, "nistp256"))
+        p256++;
+      else if (!strcmp (name, "nistp384"))
+        p384++;
+      else if (!strcmp (name, "nistp521"))
+        p521++;
+    }
+
+  if (p256 != 1 || p384 != 1 || p521 != 1)
+    {
+      /* We can only check the basic RFC-6637 requirements.  */
+      fputs ("standard ECC curve missing\n", stderr);
+      exit (1);
+    }
+}
+
+
 int
 main (int argc, char **argv)
 {
-  (void)argc;
-  (void)argv;
+  if (argc)
+    { argc--; argv++; }
+  if (argc && !strcmp (argv[0], "--verbose"))
+    {
+      verbose = 1;
+      argc--; argv++;
+    }
 
   test_openpgp_oid_from_str ();
   test_openpgp_oid_to_str ();
   test_openpgp_oid_is_ed25519 ();
+  test_openpgp_enum_curves ();
 
   return 0;
 }