glitch in the license text detected by hyazinthe, thank you!
[oweals/gnunet.git] / src / util / test_crypto_random.c
1 /*
2      This file is part of GNUnet.
3      Copyright (C) 2009 GNUnet e.V.
4
5      GNUnet is free software: you can redistribute it and/or modify it
6      under the terms of the GNU Affero General Public License as published
7      by the Free Software Foundation, either version 3 of the License,
8      or (at your option) any later version.
9
10      GNUnet is distributed in the hope that it will be useful, but
11      WITHOUT ANY WARRANTY; without even the implied warranty of
12      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13      Affero General Public License for more details.
14
15 */
16
17 /**
18  * @file util/test_crypto_random.c
19  * @brief testcase for crypto_random.c
20  */
21 #include "platform.h"
22 #include "gnunet_util_lib.h"
23
24 static int
25 test (enum GNUNET_CRYPTO_Quality mode)
26 {
27
28   int buf[1024];
29   unsigned int *b2;
30   int i;
31   unsigned long long n;
32
33   for (i = 0; i < 1024; i++)
34     GNUNET_break (1024 > (buf[i] = GNUNET_CRYPTO_random_u32 (mode, 1024)));
35   for (i = 0; i < 10; i++)
36   {
37     b2 = GNUNET_CRYPTO_random_permute (mode, 1024);
38     if (0 == memcmp (b2, buf, sizeof (buf)))
39     {
40       FPRINTF (stderr, "%s",  "!");
41       GNUNET_free (b2);
42       continue;
43     }
44     GNUNET_free (b2);
45     break;
46   }
47   if (i == 10)
48     return 1;                   /* virtually impossible... */
49
50   for (n = 10; n < 1024LL * 1024LL * 1024LL; n *= 10)
51     GNUNET_break (n > GNUNET_CRYPTO_random_u64 (mode, n));
52   return 0;
53 }
54
55 int
56 main (int argc, char *argv[])
57 {
58   GNUNET_log_setup ("test-crypto-random", "WARNING", NULL);
59   if (0 != test (GNUNET_CRYPTO_QUALITY_WEAK))
60     return 1;
61   if (0 != test (GNUNET_CRYPTO_QUALITY_STRONG))
62     return 1;
63
64   return 0;
65 }