random: Make the DRBG C-90 clean and use a flag string.
authorWerner Koch <wk@gnupg.org>
Fri, 19 Feb 2016 10:44:57 +0000 (11:44 +0100)
committerWerner Koch <wk@gnupg.org>
Fri, 19 Feb 2016 13:35:34 +0000 (14:35 +0100)
* random/random.h (struct gcry_drbg_test_vector): Rename "flags" to
"flagstr" and turn it into a string.
* random/random-drbg.c (drbg_test_pr, drbg_test_nopr): Replace use of
designated initializers.  Use a string for the flags.
(gcry_rngdrbg_cavs_test): Parse the flag string into a flag value.
(drbg_healthcheck_sanity): Ditto.
--

Libgcrypt needs to be build-able on C-90 only systems and thus we
can't use C-99 designated initializers.  Because we have removed the
flag macros from the API we should not use them in the CAVS test code
either.  Thus they are replaced by the flag string which also tests
the flag string parser.

Signed-off-by: Werner Koch <wk@gnupg.org>
random/random-drbg.c
random/random.h

index 1623d77..f45a0c9 100644 (file)
@@ -2019,271 +2019,310 @@ _gcry_rngdrbg_randomize (void *buffer, size_t length,
  */
 struct gcry_drbg_test_vector drbg_test_pr[] = {
   {
-   .flags = (DRBG_PR_HASHSHA256),
-   .entropy = (unsigned char *)
-   "\x5d\xf2\x14\xbc\xf6\xb5\x4e\x0b\xf0\x0d\x6f\x2d"
-   "\xe2\x01\x66\x7b\xd0\xa4\x73\xa4\x21\xdd\xb0\xc0"
-   "\x51\x79\x09\xf4\xea\xa9\x08\xfa\xa6\x67\xe0\xe1"
-   "\xd1\x88\xa8\xad\xee\x69\x74\xb3\x55\x06\x9b\xf6",
-   .entropylen = 48,
-   .entpra = (unsigned char *)
-   "\xef\x48\x06\xa2\xc2\x45\xf1\x44\xfa\x34\x2c\xeb"
-   "\x8d\x78\x3c\x09\x8f\x34\x72\x20\xf2\xe7\xfd\x13"
-   "\x76\x0a\xf6\xdc\x3c\xf5\xc0\x15",
-   .entprb = (unsigned char *)
-   "\x4b\xbe\xe5\x24\xed\x6a\x2d\x0c\xdb\x73\x5e\x09"
-   "\xf9\xad\x67\x7c\x51\x47\x8b\x6b\x30\x2a\xc6\xde"
-   "\x76\xaa\x55\x04\x8b\x0a\x72\x95",
-   .entprlen = 32,
-   .expected = (unsigned char *)
-   "\x3b\x14\x71\x99\xa1\xda\xa0\x42\xe6\xc8\x85\x32"
-   "\x70\x20\x32\x53\x9a\xbe\xd1\x1e\x15\xef\xfb\x4c"
-   "\x25\x6e\x19\x3a\xf0\xb9\xcb\xde\xf0\x3b\xc6\x18"
-   "\x4d\x85\x5a\x9b\xf1\xe3\xc2\x23\x03\x93\x08\xdb"
-   "\xa7\x07\x4b\x33\x78\x40\x4d\xeb\x24\xf5\x6e\x81"
-   "\x4a\x1b\x6e\xa3\x94\x52\x43\xb0\xaf\x2e\x21\xf4"
-   "\x42\x46\x8e\x90\xed\x34\x21\x75\xea\xda\x67\xb6"
-   "\xe4\xf6\xff\xc6\x31\x6c\x9a\x5a\xdb\xb3\x97\x13"
-   "\x09\xd3\x20\x98\x33\x2d\x6d\xd7\xb5\x6a\xa8\xa9"
-   "\x9a\x5b\xd6\x87\x52\xa1\x89\x2b\x4b\x9c\x64\x60"
-   "\x50\x47\xa3\x63\x81\x16\xaf\x19",
-   .expectedlen = 128,
-   .addtla = (unsigned char *)
-   "\xbe\x13\xdb\x2a\xe9\xa8\xfe\x09\x97\xe1\xce\x5d"
-   "\xe8\xbb\xc0\x7c\x4f\xcb\x62\x19\x3f\x0f\xd2\xad"
-   "\xa9\xd0\x1d\x59\x02\xc4\xff\x70",
-   .addtlb = (unsigned char *)
-   "\x6f\x96\x13\xe2\xa7\xf5\x6c\xfe\xdf\x66\xe3\x31"
-   "\x63\x76\xbf\x20\x27\x06\x49\xf1\xf3\x01\x77\x41"
-   "\x9f\xeb\xe4\x38\xfe\x67\x00\xcd",
-   .addtllen = 32,
-   .pers = NULL,
-   .perslen = 0,
-   },
+    /* .flags = */ "sha256 pr" /* DRBG_PR_HASHSHA256 */,
+    /* .entropy = */ (unsigned char *)
+    "\x5d\xf2\x14\xbc\xf6\xb5\x4e\x0b\xf0\x0d\x6f\x2d"
+    "\xe2\x01\x66\x7b\xd0\xa4\x73\xa4\x21\xdd\xb0\xc0"
+    "\x51\x79\x09\xf4\xea\xa9\x08\xfa\xa6\x67\xe0\xe1"
+    "\xd1\x88\xa8\xad\xee\x69\x74\xb3\x55\x06\x9b\xf6",
+    /* .entropylen = */ 48,
+    /* .entpra = */ (unsigned char *)
+    "\xef\x48\x06\xa2\xc2\x45\xf1\x44\xfa\x34\x2c\xeb"
+    "\x8d\x78\x3c\x09\x8f\x34\x72\x20\xf2\xe7\xfd\x13"
+    "\x76\x0a\xf6\xdc\x3c\xf5\xc0\x15",
+    /* .entprb = */ (unsigned char *)
+    "\x4b\xbe\xe5\x24\xed\x6a\x2d\x0c\xdb\x73\x5e\x09"
+    "\xf9\xad\x67\x7c\x51\x47\x8b\x6b\x30\x2a\xc6\xde"
+    "\x76\xaa\x55\x04\x8b\x0a\x72\x95",
+    /* .entprlen = */ 32,
+    /* .addtla = */ (unsigned char *)
+    "\xbe\x13\xdb\x2a\xe9\xa8\xfe\x09\x97\xe1\xce\x5d"
+    "\xe8\xbb\xc0\x7c\x4f\xcb\x62\x19\x3f\x0f\xd2\xad"
+    "\xa9\xd0\x1d\x59\x02\xc4\xff\x70",
+    /* .addtlb = */ (unsigned char *)
+    "\x6f\x96\x13\xe2\xa7\xf5\x6c\xfe\xdf\x66\xe3\x31"
+    "\x63\x76\xbf\x20\x27\x06\x49\xf1\xf3\x01\x77\x41"
+    "\x9f\xeb\xe4\x38\xfe\x67\x00\xcd",
+    /* .addtllen = */ 32,
+    /* .pers = */ NULL,
+    /* .perslen = */ 0,
+    /* .expected = */ (unsigned char *)
+    "\x3b\x14\x71\x99\xa1\xda\xa0\x42\xe6\xc8\x85\x32"
+    "\x70\x20\x32\x53\x9a\xbe\xd1\x1e\x15\xef\xfb\x4c"
+    "\x25\x6e\x19\x3a\xf0\xb9\xcb\xde\xf0\x3b\xc6\x18"
+    "\x4d\x85\x5a\x9b\xf1\xe3\xc2\x23\x03\x93\x08\xdb"
+    "\xa7\x07\x4b\x33\x78\x40\x4d\xeb\x24\xf5\x6e\x81"
+    "\x4a\x1b\x6e\xa3\x94\x52\x43\xb0\xaf\x2e\x21\xf4"
+    "\x42\x46\x8e\x90\xed\x34\x21\x75\xea\xda\x67\xb6"
+    "\xe4\xf6\xff\xc6\x31\x6c\x9a\x5a\xdb\xb3\x97\x13"
+    "\x09\xd3\x20\x98\x33\x2d\x6d\xd7\xb5\x6a\xa8\xa9"
+    "\x9a\x5b\xd6\x87\x52\xa1\x89\x2b\x4b\x9c\x64\x60"
+    "\x50\x47\xa3\x63\x81\x16\xaf\x19",
+    /* .expectedlen = */ 128,
+    /* .entropyreseed = */ NULL,
+    /* .entropyreseed_len = */ 0,
+    /* .addtl_reseed = */ NULL,
+    /* .addtl_reseed_len = */ 0
+  },
   {
-   .flags = (DRBG_PR_HMACSHA256),
-   .entropy = (unsigned char *)
-   "\x13\x54\x96\xfc\x1b\x7d\x28\xf3\x18\xc9\xa7\x89"
-   "\xb6\xb3\xc8\x72\xac\x00\xd4\x59\x36\x25\x05\xaf"
-   "\xa5\xdb\x96\xcb\x3c\x58\x46\x87\xa5\xaa\xbf\x20"
-   "\x3b\xfe\x23\x0e\xd1\xc7\x41\x0f\x3f\xc9\xb3\x67",
-   .entropylen = 48,
-   .entpra = (unsigned char *)
-   "\xe2\xbd\xb7\x48\x08\x06\xf3\xe1\x93\x3c\xac\x79"
-   "\xa7\x2b\x11\xda\xe3\x2e\xe1\x91\xa5\x02\x19\x57"
-   "\x20\x28\xad\xf2\x60\xd7\xcd\x45",
-   .entprb = (unsigned char *)
-   "\x8b\xd4\x69\xfc\xff\x59\x95\x95\xc6\x51\xde\x71"
-   "\x68\x5f\xfc\xf9\x4a\xab\xec\x5a\xcb\xbe\xd3\x66"
-   "\x1f\xfa\x74\xd3\xac\xa6\x74\x60",
-   .entprlen = 32,
-   .expected = (unsigned char *)
-   "\x1f\x9e\xaf\xe4\xd2\x46\xb7\x47\x41\x4c\x65\x99"
-   "\x01\xe9\x3b\xbb\x83\x0c\x0a\xb0\xc1\x3a\xe2\xb3"
-   "\x31\x4e\xeb\x93\x73\xee\x0b\x26\xc2\x63\xa5\x75"
-   "\x45\x99\xd4\x5c\x9f\xa1\xd4\x45\x87\x6b\x20\x61"
-   "\x40\xea\x78\xa5\x32\xdf\x9e\x66\x17\xaf\xb1\x88"
-   "\x9e\x2e\x23\xdd\xc1\xda\x13\x97\x88\xa5\xb6\x5e"
-   "\x90\x14\x4e\xef\x13\xab\x5c\xd9\x2c\x97\x9e\x7c"
-   "\xd7\xf8\xce\xea\x81\xf5\xcd\x71\x15\x49\x44\xce"
-   "\x83\xb6\x05\xfb\x7d\x30\xb5\x57\x2c\x31\x4f\xfc"
-   "\xfe\x80\xb6\xc0\x13\x0c\x5b\x9b\x2e\x8f\x3d\xfc"
-   "\xc2\xa3\x0c\x11\x1b\x80\x5f\xf3",
-   .expectedlen = 128,
-   .addtla = NULL,
-   .addtlb = NULL,
-   .addtllen = 0,
-   .pers = (unsigned char *)
-   "\x64\xb6\xfc\x60\xbc\x61\x76\x23\x6d\x3f\x4a\x0f"
-   "\xe1\xb4\xd5\x20\x9e\x70\xdd\x03\x53\x6d\xbf\xce"
-   "\xcd\x56\x80\xbc\xb8\x15\xc8\xaa",
-   .perslen = 32,
-   },
+    /* flags = */ "hmac sha256 pr" /* DRBG_PR_HMACSHA256 */,
+    /* .entropy = */ (unsigned char *)
+    "\x13\x54\x96\xfc\x1b\x7d\x28\xf3\x18\xc9\xa7\x89"
+    "\xb6\xb3\xc8\x72\xac\x00\xd4\x59\x36\x25\x05\xaf"
+    "\xa5\xdb\x96\xcb\x3c\x58\x46\x87\xa5\xaa\xbf\x20"
+    "\x3b\xfe\x23\x0e\xd1\xc7\x41\x0f\x3f\xc9\xb3\x67",
+    /* .entropylen = */ 48,
+    /* .entpra = */ (unsigned char *)
+    "\xe2\xbd\xb7\x48\x08\x06\xf3\xe1\x93\x3c\xac\x79"
+    "\xa7\x2b\x11\xda\xe3\x2e\xe1\x91\xa5\x02\x19\x57"
+    "\x20\x28\xad\xf2\x60\xd7\xcd\x45",
+    /* .entprb = */ (unsigned char *)
+    "\x8b\xd4\x69\xfc\xff\x59\x95\x95\xc6\x51\xde\x71"
+    "\x68\x5f\xfc\xf9\x4a\xab\xec\x5a\xcb\xbe\xd3\x66"
+    "\x1f\xfa\x74\xd3\xac\xa6\x74\x60",
+    /* .entprlen = */ 32,
+    /* .addtla = */ NULL,
+    /* .addtlb = */ NULL,
+    /* .addtllen = */ 0,
+    /* .pers = */ (unsigned char *)
+    "\x64\xb6\xfc\x60\xbc\x61\x76\x23\x6d\x3f\x4a\x0f"
+    "\xe1\xb4\xd5\x20\x9e\x70\xdd\x03\x53\x6d\xbf\xce"
+    "\xcd\x56\x80\xbc\xb8\x15\xc8\xaa",
+    /* .perslen = */ 32,
+    /* .expected = */ (unsigned char *)
+    "\x1f\x9e\xaf\xe4\xd2\x46\xb7\x47\x41\x4c\x65\x99"
+    "\x01\xe9\x3b\xbb\x83\x0c\x0a\xb0\xc1\x3a\xe2\xb3"
+    "\x31\x4e\xeb\x93\x73\xee\x0b\x26\xc2\x63\xa5\x75"
+    "\x45\x99\xd4\x5c\x9f\xa1\xd4\x45\x87\x6b\x20\x61"
+    "\x40\xea\x78\xa5\x32\xdf\x9e\x66\x17\xaf\xb1\x88"
+    "\x9e\x2e\x23\xdd\xc1\xda\x13\x97\x88\xa5\xb6\x5e"
+    "\x90\x14\x4e\xef\x13\xab\x5c\xd9\x2c\x97\x9e\x7c"
+    "\xd7\xf8\xce\xea\x81\xf5\xcd\x71\x15\x49\x44\xce"
+    "\x83\xb6\x05\xfb\x7d\x30\xb5\x57\x2c\x31\x4f\xfc"
+    "\xfe\x80\xb6\xc0\x13\x0c\x5b\x9b\x2e\x8f\x3d\xfc"
+    "\xc2\xa3\x0c\x11\x1b\x80\x5f\xf3",
+    /* .expectedlen = */ 128,
+    /* .entropyreseed = */ NULL,
+    /* .entropyreseed_len = */ 0,
+    /* .addtl_reseed = */ NULL,
+    /* .addtl_reseed_len = */ 0
+  },
   {
-   .flags = (DRBG_PR_CTRAES128),
-   .entropy = (unsigned char *)
-   "\x92\x89\x8f\x31\xfa\x1c\xff\x6d\x18\x2f\x26\x06"
-   "\x43\xdf\xf8\x18\xc2\xa4\xd9\x72\xc3\xb9\xb6\x97",
-   .entropylen = 24,
-   .entpra = (unsigned char *)
-   "\x20\x72\x8a\x06\xf8\x6f\x8d\xd4\x41\xe2\x72\xb7"
-   "\xc4\x2c\xe8\x10",
-   .entprb = (unsigned char *)
-   "\x3d\xb0\xf0\x94\xf3\x05\x50\x33\x17\x86\x3e\x22"
-   "\x08\xf7\xa5\x01",
-   .entprlen = 16,
-   .expected = (unsigned char *)
-   "\x5a\x35\x39\x87\x0f\x4d\x22\xa4\x09\x24\xee\x71"
-   "\xc9\x6f\xac\x72\x0a\xd6\xf0\x88\x82\xd0\x83\x28"
-   "\x73\xec\x3f\x93\xd8\xab\x45\x23\xf0\x7e\xac\x45"
-   "\x14\x5e\x93\x9f\xb1\xd6\x76\x43\x3d\xb6\xe8\x08"
-   "\x88\xf6\xda\x89\x08\x77\x42\xfe\x1a\xf4\x3f\xc4"
-   "\x23\xc5\x1f\x68",
-   .expectedlen = 64,
-   .addtla = (unsigned char *)
-   "\x1a\x40\xfa\xe3\xcc\x6c\x7c\xa0\xf8\xda\xba\x59"
-   "\x23\x6d\xad\x1d",
-   .addtlb = (unsigned char *)
-   "\x9f\x72\x76\x6c\xc7\x46\xe5\xed\x2e\x53\x20\x12"
-   "\xbc\x59\x31\x8c",
-   .addtllen = 16,
-   .pers = (unsigned char *)
-   "\xea\x65\xee\x60\x26\x4e\x7e\xb6\x0e\x82\x68\xc4"
-   "\x37\x3c\x5c\x0b",
-   .perslen = 16,
-   },
+    /* .flags = */ "aes sym128 pr", /* DRBG_PR_CTRAES128 */
+    /* .entropy = */ (unsigned char *)
+    "\x92\x89\x8f\x31\xfa\x1c\xff\x6d\x18\x2f\x26\x06"
+    "\x43\xdf\xf8\x18\xc2\xa4\xd9\x72\xc3\xb9\xb6\x97",
+    /* .entropylen = */ 24,
+    /* .entpra = */ (unsigned char *)
+    "\x20\x72\x8a\x06\xf8\x6f\x8d\xd4\x41\xe2\x72\xb7"
+    "\xc4\x2c\xe8\x10",
+    /* .entprb = */ (unsigned char *)
+    "\x3d\xb0\xf0\x94\xf3\x05\x50\x33\x17\x86\x3e\x22"
+    "\x08\xf7\xa5\x01",
+    /* .entprlen = */ 16,
+    /* .addtla = */ (unsigned char *)
+    "\x1a\x40\xfa\xe3\xcc\x6c\x7c\xa0\xf8\xda\xba\x59"
+    "\x23\x6d\xad\x1d",
+    /* .addtlb = */ (unsigned char *)
+    "\x9f\x72\x76\x6c\xc7\x46\xe5\xed\x2e\x53\x20\x12"
+    "\xbc\x59\x31\x8c",
+    /* .addtllen = */ 16,
+    /* .pers = */ (unsigned char *)
+    "\xea\x65\xee\x60\x26\x4e\x7e\xb6\x0e\x82\x68\xc4"
+    "\x37\x3c\x5c\x0b",
+    /* .perslen = */ 16,
+    /* .expected = */ (unsigned char *)
+    "\x5a\x35\x39\x87\x0f\x4d\x22\xa4\x09\x24\xee\x71"
+    "\xc9\x6f\xac\x72\x0a\xd6\xf0\x88\x82\xd0\x83\x28"
+    "\x73\xec\x3f\x93\xd8\xab\x45\x23\xf0\x7e\xac\x45"
+    "\x14\x5e\x93\x9f\xb1\xd6\x76\x43\x3d\xb6\xe8\x08"
+    "\x88\xf6\xda\x89\x08\x77\x42\xfe\x1a\xf4\x3f\xc4"
+    "\x23\xc5\x1f\x68",
+    /* .expectedlen = */ 64,
+    /* .entropyreseed = */ NULL,
+    /* .entropyreseed_len = */ 0,
+    /* .addtl_reseed = */ NULL,
+    /* .addtl_reseed_len = */ 0
+   }
 };
 
 struct gcry_drbg_test_vector drbg_test_nopr[] = {
   {
-   .flags = DRBG_NOPR_HASHSHA256,
-   .entropy = (unsigned char *)
-   "\x73\xd3\xfb\xa3\x94\x5f\x2b\x5f\xb9\x8f\xf6\x9c"
-   "\x8a\x93\x17\xae\x19\xc3\x4c\xc3\xd6\xca\xa3\x2d"
-   "\x16\xfc\x42\xd2\x2d\xd5\x6f\x56\xcc\x1d\x30\xff"
-   "\x9e\x06\x3e\x09\xce\x58\xe6\x9a\x35\xb3\xa6\x56",
-   .entropylen = 48,
-   .expected = (unsigned char *)
-   "\x71\x7b\x93\x46\x1a\x40\xaa\x35\xa4\xaa\xc5\xe7"
-   "\x6d\x5b\x5b\x8a\xa0\xdf\x39\x7d\xae\x71\x58\x5b"
-   "\x3c\x7c\xb4\xf0\x89\xfa\x4a\x8c\xa9\x5c\x54\xc0"
-   "\x40\xdf\xbc\xce\x26\x81\x34\xf8\xba\x7d\x1c\xe8"
-   "\xad\x21\xe0\x74\xcf\x48\x84\x30\x1f\xa1\xd5\x4f"
-   "\x81\x42\x2f\xf4\xdb\x0b\x23\xf8\x73\x27\xb8\x1d"
-   "\x42\xf8\x44\x58\xd8\x5b\x29\x27\x0a\xf8\x69\x59"
-   "\xb5\x78\x44\xeb\x9e\xe0\x68\x6f\x42\x9a\xb0\x5b"
-   "\xe0\x4e\xcb\x6a\xaa\xe2\xd2\xd5\x33\x25\x3e\xe0"
-   "\x6c\xc7\x6a\x07\xa5\x03\x83\x9f\xe2\x8b\xd1\x1c"
-   "\x70\xa8\x07\x59\x97\xeb\xf6\xbe",
-   .expectedlen = 128,
-   .addtla = (unsigned char *)
-   "\xf4\xd5\x98\x3d\xa8\xfc\xfa\x37\xb7\x54\x67\x73"
-   "\xc7\xc3\xdd\x47\x34\x71\x02\x5d\xc1\xa0\xd3\x10"
-   "\xc1\x8b\xbd\xf5\x66\x34\x6f\xdd",
-   .addtlb = (unsigned char *)
-   "\xf7\x9e\x6a\x56\x0e\x73\xe9\xd9\x7a\xd1\x69\xe0"
-   "\x6f\x8c\x55\x1c\x44\xd1\xce\x6f\x28\xcc\xa4\x4d"
-   "\xa8\xc0\x85\xd1\x5a\x0c\x59\x40",
-   .addtllen = 32,
-   .pers = NULL,
-   .perslen = 0,
-   },
+    /* .flags = */ "sha256" /* DRBG_NOPR_HASHSHA256 */,
+    /* .entropy = */ (unsigned char *)
+    "\x73\xd3\xfb\xa3\x94\x5f\x2b\x5f\xb9\x8f\xf6\x9c"
+    "\x8a\x93\x17\xae\x19\xc3\x4c\xc3\xd6\xca\xa3\x2d"
+    "\x16\xfc\x42\xd2\x2d\xd5\x6f\x56\xcc\x1d\x30\xff"
+    "\x9e\x06\x3e\x09\xce\x58\xe6\x9a\x35\xb3\xa6\x56",
+    /* .entropylen = */ 48,
+    /* .entpra = */ NULL,
+    /* .entprb = */ NULL,
+    /* .entprlen = */ 0,
+    /* .addtla = */ (unsigned char *)
+    "\xf4\xd5\x98\x3d\xa8\xfc\xfa\x37\xb7\x54\x67\x73"
+    "\xc7\xc3\xdd\x47\x34\x71\x02\x5d\xc1\xa0\xd3\x10"
+    "\xc1\x8b\xbd\xf5\x66\x34\x6f\xdd",
+    /* .addtlb = */ (unsigned char *)
+    "\xf7\x9e\x6a\x56\x0e\x73\xe9\xd9\x7a\xd1\x69\xe0"
+    "\x6f\x8c\x55\x1c\x44\xd1\xce\x6f\x28\xcc\xa4\x4d"
+    "\xa8\xc0\x85\xd1\x5a\x0c\x59\x40",
+    /* .addtllen = */ 32,
+    /* .pers = */ NULL,
+    /* .perslen = */ 0,
+    /* .expected = */ (unsigned char *)
+    "\x71\x7b\x93\x46\x1a\x40\xaa\x35\xa4\xaa\xc5\xe7"
+    "\x6d\x5b\x5b\x8a\xa0\xdf\x39\x7d\xae\x71\x58\x5b"
+    "\x3c\x7c\xb4\xf0\x89\xfa\x4a\x8c\xa9\x5c\x54\xc0"
+    "\x40\xdf\xbc\xce\x26\x81\x34\xf8\xba\x7d\x1c\xe8"
+    "\xad\x21\xe0\x74\xcf\x48\x84\x30\x1f\xa1\xd5\x4f"
+    "\x81\x42\x2f\xf4\xdb\x0b\x23\xf8\x73\x27\xb8\x1d"
+    "\x42\xf8\x44\x58\xd8\x5b\x29\x27\x0a\xf8\x69\x59"
+    "\xb5\x78\x44\xeb\x9e\xe0\x68\x6f\x42\x9a\xb0\x5b"
+    "\xe0\x4e\xcb\x6a\xaa\xe2\xd2\xd5\x33\x25\x3e\xe0"
+    "\x6c\xc7\x6a\x07\xa5\x03\x83\x9f\xe2\x8b\xd1\x1c"
+    "\x70\xa8\x07\x59\x97\xeb\xf6\xbe",
+    /* .expectedlen = */ 128,
+    /* .entropyreseed = */ NULL,
+    /* .entropyreseed_len = */ 0,
+    /* .addtl_reseed = */ NULL,
+    /* .addtl_reseed_len = */ 0
+  },
   {
-   .flags = DRBG_NOPR_HMACSHA256,
-   .entropy = (unsigned char *)
-   "\x8d\xf0\x13\xb4\xd1\x03\x52\x30\x73\x91\x7d\xdf"
-   "\x6a\x86\x97\x93\x05\x9e\x99\x43\xfc\x86\x54\x54"
-   "\x9e\x7a\xb2\x2f\x7c\x29\xf1\x22\xda\x26\x25\xaf"
-   "\x2d\xdd\x4a\xbc\xce\x3c\xf4\xfa\x46\x59\xd8\x4e",
-   .entropylen = 48,
-   .expected = (unsigned char *)
-   "\xb9\x1c\xba\x4c\xc8\x4f\xa2\x5d\xf8\x61\x0b\x81"
-   "\xb6\x41\x40\x27\x68\xa2\x09\x72\x34\x93\x2e\x37"
-   "\xd5\x90\xb1\x15\x4c\xbd\x23\xf9\x74\x52\xe3\x10"
-   "\xe2\x91\xc4\x51\x46\x14\x7f\x0d\xa2\xd8\x17\x61"
-   "\xfe\x90\xfb\xa6\x4f\x94\x41\x9c\x0f\x66\x2b\x28"
-   "\xc1\xed\x94\xda\x48\x7b\xb7\xe7\x3e\xec\x79\x8f"
-   "\xbc\xf9\x81\xb7\x91\xd1\xbe\x4f\x17\x7a\x89\x07"
-   "\xaa\x3c\x40\x16\x43\xa5\xb6\x2b\x87\xb8\x9d\x66"
-   "\xb3\xa6\x0e\x40\xd4\xa8\xe4\xe9\xd8\x2a\xf6\xd2"
-   "\x70\x0e\x6f\x53\x5c\xdb\x51\xf7\x5c\x32\x17\x29"
-   "\x10\x37\x41\x03\x0c\xcc\x3a\x56",
-   .expectedlen = 128,
-   .addtla = NULL,
-   .addtlb = NULL,
-   .addtllen = 0,
-   .pers = (unsigned char *)
-   "\xb5\x71\xe6\x6d\x7c\x33\x8b\xc0\x7b\x76\xad\x37"
-   "\x57\xbb\x2f\x94\x52\xbf\x7e\x07\x43\x7a\xe8\x58"
-   "\x1c\xe7\xbc\x7c\x3a\xc6\x51\xa9",
-   .perslen = 32,
-   },
+    /* .flags = */ "hmac sha256" /* DRBG_NOPR_HMACSHA256 */,
+    /* .entropy = */ (unsigned char *)
+    "\x8d\xf0\x13\xb4\xd1\x03\x52\x30\x73\x91\x7d\xdf"
+    "\x6a\x86\x97\x93\x05\x9e\x99\x43\xfc\x86\x54\x54"
+    "\x9e\x7a\xb2\x2f\x7c\x29\xf1\x22\xda\x26\x25\xaf"
+    "\x2d\xdd\x4a\xbc\xce\x3c\xf4\xfa\x46\x59\xd8\x4e",
+    /* .entropylen = */ 48,
+    /* .entpra = */ NULL,
+    /* .entprb = */ NULL,
+    /* .entprlen = */ 0,
+    /* .addtla = */ NULL,
+    /* .addtlb = */ NULL,
+    /* .addtllen = */ 0,
+    /* .pers = */ (unsigned char *)
+    "\xb5\x71\xe6\x6d\x7c\x33\x8b\xc0\x7b\x76\xad\x37"
+    "\x57\xbb\x2f\x94\x52\xbf\x7e\x07\x43\x7a\xe8\x58"
+    "\x1c\xe7\xbc\x7c\x3a\xc6\x51\xa9",
+    /* .perslen = */ 32,
+    /* .expected = */ (unsigned char *)
+    "\xb9\x1c\xba\x4c\xc8\x4f\xa2\x5d\xf8\x61\x0b\x81"
+    "\xb6\x41\x40\x27\x68\xa2\x09\x72\x34\x93\x2e\x37"
+    "\xd5\x90\xb1\x15\x4c\xbd\x23\xf9\x74\x52\xe3\x10"
+    "\xe2\x91\xc4\x51\x46\x14\x7f\x0d\xa2\xd8\x17\x61"
+    "\xfe\x90\xfb\xa6\x4f\x94\x41\x9c\x0f\x66\x2b\x28"
+    "\xc1\xed\x94\xda\x48\x7b\xb7\xe7\x3e\xec\x79\x8f"
+    "\xbc\xf9\x81\xb7\x91\xd1\xbe\x4f\x17\x7a\x89\x07"
+    "\xaa\x3c\x40\x16\x43\xa5\xb6\x2b\x87\xb8\x9d\x66"
+    "\xb3\xa6\x0e\x40\xd4\xa8\xe4\xe9\xd8\x2a\xf6\xd2"
+    "\x70\x0e\x6f\x53\x5c\xdb\x51\xf7\x5c\x32\x17\x29"
+    "\x10\x37\x41\x03\x0c\xcc\x3a\x56",
+    /* .expectedlen = */ 128,
+    /* .entropyreseed = */ NULL,
+    /* .entropyreseed_len = */ 0,
+    /* .addtl_reseed = */ NULL,
+    /* .addtl_reseed_len = */ 0
+  },
   {
-   .flags = DRBG_NOPR_CTRAES128,
-   .entropy = (unsigned char *)
-   "\xc0\x70\x1f\x92\x50\x75\x8f\xcd\xf2\xbe\x73\x98"
-   "\x80\xdb\x66\xeb\x14\x68\xb4\xa5\x87\x9c\x2d\xa6",
-   .entropylen = 24,
-   .expected = (unsigned char *)
-   "\x97\xc0\xc0\xe5\xa0\xcc\xf2\x4f\x33\x63\x48\x8a"
-   "\xdb\x13\x0a\x35\x89\xbf\x80\x65\x62\xee\x13\x95"
-   "\x7c\x33\xd3\x7d\xf4\x07\x77\x7a\x2b\x65\x0b\x5f"
-   "\x45\x5c\x13\xf1\x90\x77\x7f\xc5\x04\x3f\xcc\x1a"
-   "\x38\xf8\xcd\x1b\xbb\xd5\x57\xd1\x4a\x4c\x2e\x8a"
-   "\x2b\x49\x1e\x5c",
-   .expectedlen = 64,
-   .addtla = (unsigned char *)
-   "\xf9\x01\xf8\x16\x7a\x1d\xff\xde\x8e\x3c\x83\xe2"
-   "\x44\x85\xe7\xfe",
-   .addtlb = (unsigned char *)
-   "\x17\x1c\x09\x38\xc2\x38\x9f\x97\x87\x60\x55\xb4"
-   "\x82\x16\x62\x7f",
-   .addtllen = 16,
-   .pers = (unsigned char *)
-   "\x80\x08\xae\xe8\xe9\x69\x40\xc5\x08\x73\xc7\x9f"
-   "\x8e\xcf\xe0\x02",
-   .perslen = 16,
-   },
+    /* .flags = */ "aes sym128" /* DRBG_NOPR_CTRAES128 */,
+    /* .entropy = */ (unsigned char *)
+    "\xc0\x70\x1f\x92\x50\x75\x8f\xcd\xf2\xbe\x73\x98"
+    "\x80\xdb\x66\xeb\x14\x68\xb4\xa5\x87\x9c\x2d\xa6",
+    /* .entropylen = */ 24,
+    /* .entpra = */ NULL,
+    /* .entprb = */ NULL,
+    /* .entprlen = */ 0,
+    /* .addtla = */ (unsigned char *)
+    "\xf9\x01\xf8\x16\x7a\x1d\xff\xde\x8e\x3c\x83\xe2"
+    "\x44\x85\xe7\xfe",
+    /* .addtlb = */ (unsigned char *)
+    "\x17\x1c\x09\x38\xc2\x38\x9f\x97\x87\x60\x55\xb4"
+    "\x82\x16\x62\x7f",
+    /* .addtllen = */ 16,
+    /* .pers = */ (unsigned char *)
+    "\x80\x08\xae\xe8\xe9\x69\x40\xc5\x08\x73\xc7\x9f"
+    "\x8e\xcf\xe0\x02",
+    /* .perslen = */ 16,
+    /* .expected = */ (unsigned char *)
+    "\x97\xc0\xc0\xe5\xa0\xcc\xf2\x4f\x33\x63\x48\x8a"
+    "\xdb\x13\x0a\x35\x89\xbf\x80\x65\x62\xee\x13\x95"
+    "\x7c\x33\xd3\x7d\xf4\x07\x77\x7a\x2b\x65\x0b\x5f"
+    "\x45\x5c\x13\xf1\x90\x77\x7f\xc5\x04\x3f\xcc\x1a"
+    "\x38\xf8\xcd\x1b\xbb\xd5\x57\xd1\x4a\x4c\x2e\x8a"
+    "\x2b\x49\x1e\x5c",
+    /* .expectedlen = */ 64,
+    /* .entropyreseed = */ NULL,
+    /* .entropyreseed_len = */ 0,
+    /* .addtl_reseed = */ NULL,
+    /* .addtl_reseed_len = */ 0
+  },
   {
-   .flags = DRBG_NOPR_HASHSHA1,
-   .entropy = (unsigned char *)
-   "\x16\x10\xb8\x28\xcc\xd2\x7d\xe0\x8c\xee\xa0\x32"
-   "\xa2\x0e\x92\x08\x49\x2c\xf1\x70\x92\x42\xf6\xb5",
-   .entropylen = 24,
-   .expected = (unsigned char *)
-   "\x56\xf3\x3d\x4f\xdb\xb9\xa5\xb6\x4d\x26\x23\x44"
-   "\x97\xe9\xdc\xb8\x77\x98\xc6\x8d\x08\xf7\xc4\x11"
-   "\x99\xd4\xbd\xdf\x97\xeb\xbf\x6c\xb5\x55\x0e\x5d"
-   "\x14\x9f\xf4\xd5\xbd\x0f\x05\xf2\x5a\x69\x88\xc1"
-   "\x74\x36\x39\x62\x27\x18\x4a\xf8\x4a\x56\x43\x35"
-   "\x65\x8e\x2f\x85\x72\xbe\xa3\x33\xee\xe2\xab\xff"
-   "\x22\xff\xa6\xde\x3e\x22\xac\xa2",
-   .expectedlen = 80,
-   .addtla = NULL,
-   .addtlb = NULL,
-   .addtllen = 0,
-   .pers = NULL,
-   .perslen = 0,
-   .entropyreseed = (unsigned char *)
-   "\x72\xd2\x8c\x90\x8e\xda\xf9\xa4\xd1\xe5\x26\xd8"
-   "\xf2\xde\xd5\x44",
-   .entropyreseed_len = 16,
-   .addtl_reseed = NULL,
-   .addtl_reseed_len = 0,
-   },
+    /* .flags = */ "sha1" /* DRBG_NOPR_HASHSHA1 */,
+    /* .entropy = */ (unsigned char *)
+    "\x16\x10\xb8\x28\xcc\xd2\x7d\xe0\x8c\xee\xa0\x32"
+    "\xa2\x0e\x92\x08\x49\x2c\xf1\x70\x92\x42\xf6\xb5",
+    /* .entropylen = */ 24,
+    /* .entpra = */ NULL,
+    /* .entprb = */ NULL,
+    /* .entprlen = */ 0,
+    /* .addtla = */ NULL,
+    /* .addtlb = */ NULL,
+    /* .addtllen = */ 0,
+    /* .pers = */ NULL,
+    /* .perslen = */ 0,
+    /* .expected = */ (unsigned char *)
+    "\x56\xf3\x3d\x4f\xdb\xb9\xa5\xb6\x4d\x26\x23\x44"
+    "\x97\xe9\xdc\xb8\x77\x98\xc6\x8d\x08\xf7\xc4\x11"
+    "\x99\xd4\xbd\xdf\x97\xeb\xbf\x6c\xb5\x55\x0e\x5d"
+    "\x14\x9f\xf4\xd5\xbd\x0f\x05\xf2\x5a\x69\x88\xc1"
+    "\x74\x36\x39\x62\x27\x18\x4a\xf8\x4a\x56\x43\x35"
+    "\x65\x8e\x2f\x85\x72\xbe\xa3\x33\xee\xe2\xab\xff"
+    "\x22\xff\xa6\xde\x3e\x22\xac\xa2",
+    /* .expectedlen = */ 80,
+    /* .entropyreseed = */ (unsigned char *)
+    "\x72\xd2\x8c\x90\x8e\xda\xf9\xa4\xd1\xe5\x26\xd8"
+    "\xf2\xde\xd5\x44",
+    /* .entropyreseed_len = */ 16,
+    /* .addtl_reseed = */ NULL,
+    /* .addtl_reseed_len = */ 0
+  },
   {
-   .flags = DRBG_NOPR_HASHSHA1,
-   .entropy = (unsigned char *)
-   "\xd9\xba\xb5\xce\xdc\xa9\x6f\x61\x78\xd6\x45\x09"
-   "\xa0\xdf\xdc\x5e\xda\xd8\x98\x94\x14\x45\x0e\x01",
-   .entropylen = 24,
-   .expected = (unsigned char *)
-   "\xc4\x8b\x89\xf9\xda\x3f\x74\x82\x45\x55\x5d\x5d"
-   "\x03\x3b\x69\x3d\xd7\x1a\x4d\xf5\x69\x02\x05\xce"
-   "\xfc\xd7\x20\x11\x3c\xc2\x4e\x09\x89\x36\xff\x5e"
-   "\x77\xb5\x41\x53\x58\x70\xb3\x39\x46\x8c\xdd\x8d"
-   "\x6f\xaf\x8c\x56\x16\x3a\x70\x0a\x75\xb2\x3e\x59"
-   "\x9b\x5a\xec\xf1\x6f\x3b\xaf\x6d\x5f\x24\x19\x97"
-   "\x1f\x24\xf4\x46\x72\x0f\xea\xbe",
-   .expectedlen = 80,
-   .addtla = (unsigned char *)
-   "\x04\xfa\x28\x95\xaa\x5a\x6f\x8c\x57\x43\x34\x3b"
-   "\x80\x5e\x5e\xa4",
-   .addtlb = (unsigned char *)
-   "\xdf\x5d\xc4\x59\xdf\xf0\x2a\xa2\xf0\x52\xd7\x21"
-   "\xec\x60\x72\x30",
-   .addtllen = 16,
-   .pers = NULL,
-   .perslen = 0,
-   .entropyreseed = (unsigned char *)
-   "\xc6\xba\xd0\x74\xc5\x90\x67\x86\xf5\xe1\xf3\x20"
-   "\x99\xf5\xb4\x91",
-   .entropyreseed_len = 16,
-   .addtl_reseed = (unsigned char *)
-   "\x3e\x6b\xf4\x6f\x4d\xaa\x38\x25\xd7\x19\x4e\x69"
-   "\x4e\x77\x52\xf7",
-   .addtl_reseed_len = 16,
-   },
+    /* .flags = */ "sha1" /* DRBG_NOPR_HASHSHA1 */,
+    /* .entropy = */ (unsigned char *)
+    "\xd9\xba\xb5\xce\xdc\xa9\x6f\x61\x78\xd6\x45\x09"
+    "\xa0\xdf\xdc\x5e\xda\xd8\x98\x94\x14\x45\x0e\x01",
+    /* .entropylen = */ 24,
+    /* .entpra = */ NULL,
+    /* .entprb = */ NULL,
+    /* .entprlen = */ 0,
+    /* .addtla = */ (unsigned char *)
+    "\x04\xfa\x28\x95\xaa\x5a\x6f\x8c\x57\x43\x34\x3b"
+    "\x80\x5e\x5e\xa4",
+    /* .addtlb = */ (unsigned char *)
+    "\xdf\x5d\xc4\x59\xdf\xf0\x2a\xa2\xf0\x52\xd7\x21"
+    "\xec\x60\x72\x30",
+    /* .addtllen = */ 16,
+    /* .pers = */ NULL,
+    /* .perslen = */ 0,
+    /* .expected = */ (unsigned char *)
+    "\xc4\x8b\x89\xf9\xda\x3f\x74\x82\x45\x55\x5d\x5d"
+    "\x03\x3b\x69\x3d\xd7\x1a\x4d\xf5\x69\x02\x05\xce"
+    "\xfc\xd7\x20\x11\x3c\xc2\x4e\x09\x89\x36\xff\x5e"
+    "\x77\xb5\x41\x53\x58\x70\xb3\x39\x46\x8c\xdd\x8d"
+    "\x6f\xaf\x8c\x56\x16\x3a\x70\x0a\x75\xb2\x3e\x59"
+    "\x9b\x5a\xec\xf1\x6f\x3b\xaf\x6d\x5f\x24\x19\x97"
+    "\x1f\x24\xf4\x46\x72\x0f\xea\xbe",
+    /* .expectedlen = */ 80,
+    /* .entropyreseed = */ (unsigned char *)
+    "\xc6\xba\xd0\x74\xc5\x90\x67\x86\xf5\xe1\xf3\x20"
+    "\x99\xf5\xb4\x91",
+    /* .entropyreseed_len = */ 16,
+    /* .addtl_reseed = */ (unsigned char *)
+    "\x3e\x6b\xf4\x6f\x4d\xaa\x38\x25\xd7\x19\x4e\x69"
+    "\x4e\x77\x52\xf7",
+    /* .addtl_reseed_len = */ 16
+  }
 };
 
 
@@ -2307,8 +2346,13 @@ gcry_rngdrbg_cavs_test (struct gcry_drbg_test_vector *test, unsigned char *buf)
   drbg_string_t addtl, pers, testentropy;
   int coreref = 0;
   int pr = 0;
+  u32 flags;
 
-  ret = drbg_algo_available (test->flags, &coreref);
+  ret = parse_flag_string (test->flagstr, &flags);
+  if (ret)
+    goto outbuf;
+
+  ret = drbg_algo_available (flags, &coreref);
   if (ret)
     goto outbuf;
 
@@ -2319,7 +2363,7 @@ gcry_rngdrbg_cavs_test (struct gcry_drbg_test_vector *test, unsigned char *buf)
       goto outbuf;
     }
 
-  if (test->flags & DRBG_PREDICTION_RESIST)
+  if ((flags & DRBG_PREDICTION_RESIST))
     pr = 1;
 
   test_data.testentropy = &testentropy;
@@ -2403,15 +2447,21 @@ drbg_healthcheck_sanity (struct gcry_drbg_test_vector *test)
   int coreref = 0;
   unsigned char *buf = NULL;
   size_t max_addtllen, max_request_bytes;
+  u32 flags;
 
   /* only perform test in FIPS mode */
   if (0 == fips_mode ())
     return 0;
 
-  buf = xcalloc_secure (1, test->expectedlen);
+  ret = parse_flag_string (test->flagstr, &flags);
+  if (ret)
+    return ret;
+  ret = GPG_ERR_GENERAL; /* Fixme: Improve handling of RET.  */
+
+  buf = xtrycalloc_secure (1, test->expectedlen);
   if (!buf)
-    return GPG_ERR_ENOMEM;
-  tmpret = drbg_algo_available (test->flags, &coreref);
+    return gpg_err_code_from_syserror ();
+  tmpret = drbg_algo_available (flags, &coreref);
   if (tmpret)
     goto outbuf;
   drbg = xtrycalloc_secure (1, sizeof *drbg);
index 5dbdf95..ee05cfe 100644 (file)
@@ -60,7 +60,7 @@ gpg_err_code_t _gcry_rngdrbg_reinit (const char *flagstr,
 /* private interfaces for testing of DRBG */
 struct gcry_drbg_test_vector
 {
-  u32 flags;
+  const char *flagstr;
   unsigned char *entropy;
   size_t entropylen;
   unsigned char *entpra;