File drbg_test-reseeding.patch of Package libgcrypt.2574

diff -Nurp libgcrypt-1.6.1-orig//tests/drbg_test.c libgcrypt-1.6.1/tests/drbg_test.c
--- libgcrypt-1.6.1-orig//tests/drbg_test.c	2015-04-28 12:06:24.640128000 +0200
+++ libgcrypt-1.6.1/tests/drbg_test.c	2015-04-28 12:12:24.589770000 +0200
@@ -117,6 +117,12 @@ struct gcry_drbg_test_vector
 				    this value does not apply and the memcmp
 				    in drbg_cavs_test does not apply either*/
 	size_t expectedlen;	/* length of expected random value */
+
+	unsigned char *entropyreseed;
+	size_t entropyreseed_len;
+	unsigned char *addtl_reseed;
+	size_t addtl_reseed_len;
+
 };
 
 struct gcry_drbg_test_vector drbg_test_pr[] = {
@@ -924,6 +930,66 @@ struct gcry_drbg_test_vector drbg_test_n
 		"\x80\x08\xae\xe8\xe9\x69\x40\xc5\x08\x73\xc7\x9f" "\x8e\xcf\xe0\x02",
 		.perslen = 16,
 	},
+	{
+		.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 = 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,
+	},
 };
 
 struct drbg_flags
@@ -1122,9 +1188,11 @@ static void usage(void)
 	fprintf(stderr, "\t-y\t1st Entropy PR string in HEX\n");
 	fprintf(stderr, "\t-z\t2nd Entropy PR string in HEX\n");
 	fprintf(stderr, "\t-c\t1st Additional intput string in HEX\n");
-	fprintf(stderr, "\t-c\t2nd Additional intput string in HEX\n");
+	fprintf(stderr, "\t-d\t2nd Additional intput string in HEX\n");
 	fprintf(stderr, "\t-p\tPersonalization string in HEX\n");
 	fprintf(stderr, "\t-l\tLength of requested random string in bytes\n");
+	fprintf(stderr, "\t-r\tReseed Entropy input string in HEX\n");
+	fprintf(stderr, "\t-a\tAdditional Reseed Entropy input string in HEX\n");
 	exit(1);
 }
 
@@ -1162,9 +1230,11 @@ main (int argc, char **argv)
 			{"addtlb", 1, 0, 0},
 			{"pers", 1, 0, 0},
 			{"len", 1, 0, 0},
+			{"entropyreseed", 1, 0, 0},
+			{"addtl_reseed", 1, 0, 0},
 			{0, 0, 0, 0}
 		};
-		c = getopt_long(argc, argv, "bgf:e:y:z:c:d:p:l:", opts, &opt_index);
+		c = getopt_long(argc, argv, "bgf:e:y:z:c:d:p:l:r:a:", opts, &opt_index);
 		if(-1 == c)
 			break;
 		switch(c)
@@ -1199,6 +1269,12 @@ main (int argc, char **argv)
 			case 'l':
 				exttest.expectedlen = atoi(optarg);
 				break;
+			case 'r':
+				hex2bin_m(optarg, &exttest.entropyreseed, &exttest.entropyreseed_len);
+				break;
+			case 'a':
+				hex2bin_m(optarg, &exttest.addtl_reseed, &exttest.addtl_reseed_len);
+				break;
 			default:
 				usage();
 		}