]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
In rng_fork test all random generators.
authorNikos Mavrogiannopoulos <nmav@redhat.com>
Mon, 18 Nov 2013 09:23:26 +0000 (10:23 +0100)
committerNikos Mavrogiannopoulos <nmav@redhat.com>
Wed, 27 Nov 2013 10:41:43 +0000 (11:41 +0100)
tests/rng-fork.c

index 42fc4dbbcb0fdfd608201c2f6d9a7fecd03dd76d..5e7a8d38dee7dcafdd0c135f567ed81ef82b6f68 100644 (file)
@@ -25,6 +25,7 @@
 #endif
 
 #include <stdio.h>
+#include <stdlib.h>
 #include <unistd.h>
 #include <sys/types.h>
 #if !defined(_WIN32)
@@ -54,47 +55,53 @@ void doit(void)
        pid_t pid;
        int ret;
        FILE *fp;
+       unsigned i;
 
        global_init();
-       pid = fork();
-       if (pid == 0) {
-               fp = fopen(FILENAME, "w");
-               if (fp == NULL)
-                       fail("cannot open file");
-
-               gnutls_rnd(GNUTLS_RND_NONCE, buf1, sizeof(buf1));
-               if (debug)
-                       dump("buf1", buf1, sizeof(buf1));
-
-               fwrite(buf1, 1, sizeof(buf1), fp);
-               fclose(fp);
-       } else {
-               /* daddy */
-               gnutls_rnd(GNUTLS_RND_NONCE, buf2, sizeof(buf2));
-               if (debug)
-                       dump("buf2", buf2, sizeof(buf2));
-               waitpid(pid, NULL, 0);
-
-               fp = fopen(FILENAME, "r");
-               if (fp == NULL)
-                       fail("cannot open file");
-
-               ret = fread(buf1, 1, sizeof(buf1), fp);
-
-               fclose(fp);
-               remove(FILENAME);
-
-               if (ret != sizeof(buf1)) {
-                       fail("error testing the random generator.\n");
-                       return;
-               }
 
-               if (memcmp(buf1, buf2, sizeof(buf1)) == 0) {
-                       fail("error in the random generator. Produces same valus after fork()\n");
-                       return;
+       for (i = GNUTLS_RND_NONCE; i <= GNUTLS_RND_KEY; i++) {
+               pid = fork();
+               if (pid == 0) {
+                       fp = fopen(FILENAME, "w");
+                       if (fp == NULL)
+                               fail("cannot open file");
+
+                       gnutls_rnd(i, buf1, sizeof(buf1));
+                       if (debug)
+                               dump("buf1", buf1, sizeof(buf1));
+
+                       fwrite(buf1, 1, sizeof(buf1), fp);
+                       fclose(fp);
+                       gnutls_global_deinit();
+                       exit(0);
+               } else {
+                       /* daddy */
+                       gnutls_rnd(i, buf2, sizeof(buf2));
+                       if (debug)
+                               dump("buf2", buf2, sizeof(buf2));
+                       waitpid(pid, NULL, 0);
+
+                       fp = fopen(FILENAME, "r");
+                       if (fp == NULL)
+                               fail("cannot open file");
+
+                       ret = fread(buf1, 1, sizeof(buf1), fp);
+
+                       fclose(fp);
+                       remove(FILENAME);
+
+                       if (ret != sizeof(buf1)) {
+                               fail("error testing the random generator (%u).\n", i);
+                               return;
+                       }
+
+                       if (memcmp(buf1, buf2, sizeof(buf1)) == 0) {
+                               fail("error in the random generator (%u). Produces same valus after fork()\n", i);
+                               return;
+                       }
+                       if (debug)
+                               success("success\n");
                }
-               if (debug)
-                       success("success\n");
        }
 
        gnutls_global_deinit();