X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Futil%2Fcrypto_random.c;h=03f6c0e987f739b60a6ecd0b5fd49609edde0650;hb=502af2167f7c218366666ca4944bd7cc54b5b19a;hp=5928b96ea7bffacdfb2e99c1ef708c00752548c5;hpb=03af5a603b7cc53432249d5854cd412aa90dde0d;p=oweals%2Fgnunet.git diff --git a/src/util/crypto_random.c b/src/util/crypto_random.c index 5928b96ea..03f6c0e98 100644 --- a/src/util/crypto_random.c +++ b/src/util/crypto_random.c @@ -61,37 +61,37 @@ GNUNET_CRYPTO_random_u32 (enum GNUNET_CRYPTO_Quality mode, uint32_t i) GNUNET_assert (i > 0); switch (mode) - { - case GNUNET_CRYPTO_QUALITY_STRONG: - /* see http://lists.gnupg.org/pipermail/gcrypt-devel/2004-May/000613.html */ + { + case GNUNET_CRYPTO_QUALITY_STRONG: + /* see http://lists.gnupg.org/pipermail/gcrypt-devel/2004-May/000613.html */ #ifdef gcry_fast_random_poll - if ((invokeCount++ % 256) == 0) - gcry_fast_random_poll (); + if ((invokeCount++ % 256) == 0) + gcry_fast_random_poll (); #endif - ul = UINT32_MAX - (UINT32_MAX % i); - do - { - gcry_randomize ((unsigned char *) &ret, - sizeof (uint32_t), GCRY_STRONG_RANDOM); - } - while (ret >= ul); - return ret % i; - case GNUNET_CRYPTO_QUALITY_NONCE: - ul = UINT32_MAX - (UINT32_MAX % i); - do - { - gcry_create_nonce(&ret, sizeof(ret)); - } - while (ret >= ul); - return ret % i; - case GNUNET_CRYPTO_QUALITY_WEAK: - ret = i * weak_random (); - if (ret >= i) - ret = i - 1; - return ret; - default: - GNUNET_assert (0); + ul = UINT32_MAX - (UINT32_MAX % i); + do + { + gcry_randomize ((unsigned char *) &ret, + sizeof (uint32_t), GCRY_STRONG_RANDOM); + } + while (ret >= ul); + return ret % i; + case GNUNET_CRYPTO_QUALITY_NONCE: + ul = UINT32_MAX - (UINT32_MAX % i); + do + { + gcry_create_nonce (&ret, sizeof (ret)); } + while (ret >= ul); + return ret % i; + case GNUNET_CRYPTO_QUALITY_WEAK: + ret = i * weak_random (); + if (ret >= i) + ret = i - 1; + return ret; + default: + GNUNET_assert (0); + } return 0; } @@ -117,12 +117,12 @@ GNUNET_CRYPTO_random_permute (enum GNUNET_CRYPTO_Quality mode, unsigned int n) for (i = 0; i < n; i++) ret[i] = i; for (i = n - 1; i > 0; i--) - { - x = GNUNET_CRYPTO_random_u32 (mode, i+1); - tmp = ret[x]; - ret[x] = ret[i]; - ret[i] = tmp; - } + { + x = GNUNET_CRYPTO_random_u32 (mode, i + 1); + tmp = ret[x]; + ret[x] = ret[i]; + ret[i] = tmp; + } return ret; } @@ -142,33 +142,33 @@ GNUNET_CRYPTO_random_u64 (enum GNUNET_CRYPTO_Quality mode, uint64_t max) GNUNET_assert (max > 0); switch (mode) + { + case GNUNET_CRYPTO_QUALITY_STRONG: + ul = UINT64_MAX - (UINT64_MAX % max); + do { - case GNUNET_CRYPTO_QUALITY_STRONG: - ul = UINT64_MAX - (UINT64_MAX % max); - do - { - gcry_randomize ((unsigned char *) &ret, - sizeof (uint64_t), GCRY_STRONG_RANDOM); - } - while (ret >= ul); - return ret % max; - case GNUNET_CRYPTO_QUALITY_NONCE: - ul = UINT64_MAX - (UINT64_MAX % max); - do - { - gcry_create_nonce(&ret, sizeof(ret)); - } - while (ret >= ul); - - return ret % max; - case GNUNET_CRYPTO_QUALITY_WEAK: - ret = max * weak_random (); - if (ret >= max) - ret = max - 1; - return ret; - default: - GNUNET_assert (0); + gcry_randomize ((unsigned char *) &ret, + sizeof (uint64_t), GCRY_STRONG_RANDOM); } + while (ret >= ul); + return ret % max; + case GNUNET_CRYPTO_QUALITY_NONCE: + ul = UINT64_MAX - (UINT64_MAX % max); + do + { + gcry_create_nonce (&ret, sizeof (ret)); + } + while (ret >= ul); + + return ret % max; + case GNUNET_CRYPTO_QUALITY_WEAK: + ret = max * weak_random (); + if (ret >= max) + ret = max - 1; + return ret; + default: + GNUNET_assert (0); + } return 0; } @@ -205,33 +205,33 @@ entropy_generator (void *cls, if (0 != strcmp (what, "need_entropy")) return; if (current == total) + { + if (genproc != NULL) { - if (genproc != NULL) - { - if (0 != GNUNET_OS_process_kill (genproc, SIGTERM)) - GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "kill"); - GNUNET_break (GNUNET_OK == GNUNET_OS_process_wait (genproc)); - GNUNET_OS_process_close (genproc); - genproc = NULL; - } - return; - } - if (genproc != NULL) - { - ret = GNUNET_OS_process_status (genproc, &type, &code); - if (ret == GNUNET_NO) - return; /* still running */ - if (ret == GNUNET_SYSERR) - { - GNUNET_break (0); - return; - } if (0 != GNUNET_OS_process_kill (genproc, SIGTERM)) GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "kill"); GNUNET_break (GNUNET_OK == GNUNET_OS_process_wait (genproc)); GNUNET_OS_process_close (genproc); genproc = NULL; } + return; + } + if (genproc != NULL) + { + ret = GNUNET_OS_process_status (genproc, &type, &code); + if (ret == GNUNET_NO) + return; /* still running */ + if (ret == GNUNET_SYSERR) + { + GNUNET_break (0); + return; + } + if (0 != GNUNET_OS_process_kill (genproc, SIGTERM)) + GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "kill"); + GNUNET_break (GNUNET_OK == GNUNET_OS_process_wait (genproc)); + GNUNET_OS_process_close (genproc); + genproc = NULL; + } GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Starting `%s' process to generate entropy\n"), "find"); genproc = GNUNET_OS_start_process (NULL, NULL, "sh", @@ -246,11 +246,11 @@ static void killfind () { if (genproc != NULL) - { - GNUNET_OS_process_kill (genproc, SIGKILL); - GNUNET_OS_process_close (genproc); - genproc = NULL; - } + { + GNUNET_OS_process_kill (genproc, SIGKILL); + GNUNET_OS_process_close (genproc); + genproc = NULL; + } } @@ -258,19 +258,20 @@ void __attribute__ ((constructor)) GNUNET_CRYPTO_random_init () { gcry_control (GCRYCTL_DISABLE_SECMEM, 0); if (!gcry_check_version (GCRYPT_VERSION)) - { - fprintf (stderr, - _ - ("libgcrypt has not the expected version (version %s is required).\n"), - GCRYPT_VERSION); - abort (); - } + { + fprintf (stderr, + _ + ("libgcrypt has not the expected version (version %s is required).\n"), + GCRYPT_VERSION); + abort (); + } #ifdef gcry_fast_random_poll gcry_fast_random_poll (); #endif gcry_set_progress_handler (&entropy_generator, NULL); atexit (&killfind); - SRANDOM (time (NULL) ^ GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_NONCE, UINT32_MAX)); + SRANDOM (time (NULL) ^ + GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_NONCE, UINT32_MAX)); } @@ -282,4 +283,3 @@ void __attribute__ ((destructor)) GNUNET_CRYPTO_random_fini () /* end of crypto_random.c */ -