summaryrefslogtreecommitdiff
path: root/programs/random/gen_entropy.c
diff options
context:
space:
mode:
authorTom Rini <trini@konsulko.com>2024-10-08 13:56:50 -0600
committerTom Rini <trini@konsulko.com>2024-10-08 13:56:50 -0600
commit0344c602eadc0802776b65ff90f0a02c856cf53c (patch)
tree236a705740939b84ff37d68ae650061dd14c3449 /programs/random/gen_entropy.c
Squashed 'lib/mbedtls/external/mbedtls/' content from commit 2ca6c285a0dd
git-subtree-dir: lib/mbedtls/external/mbedtls git-subtree-split: 2ca6c285a0dd3f33982dd57299012dacab1ff206
Diffstat (limited to 'programs/random/gen_entropy.c')
-rw-r--r--programs/random/gen_entropy.c75
1 files changed, 75 insertions, 0 deletions
diff --git a/programs/random/gen_entropy.c b/programs/random/gen_entropy.c
new file mode 100644
index 00000000000..887b2c9883c
--- /dev/null
+++ b/programs/random/gen_entropy.c
@@ -0,0 +1,75 @@
+/**
+ * \brief Use and generate multiple entropies calls into a file
+ *
+ * Copyright The Mbed TLS Contributors
+ * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
+ */
+
+#include "mbedtls/build_info.h"
+
+#include "mbedtls/platform.h"
+
+#if defined(MBEDTLS_ENTROPY_C) && defined(MBEDTLS_FS_IO)
+#include "mbedtls/entropy.h"
+
+#include <stdio.h>
+#endif
+
+#if !defined(MBEDTLS_ENTROPY_C) || !defined(MBEDTLS_FS_IO)
+int main(void)
+{
+ mbedtls_printf("MBEDTLS_ENTROPY_C and/or MBEDTLS_FS_IO not defined.\n");
+ mbedtls_exit(0);
+}
+#else
+
+
+int main(int argc, char *argv[])
+{
+ FILE *f;
+ int i, k, ret = 1;
+ int exit_code = MBEDTLS_EXIT_FAILURE;
+ mbedtls_entropy_context entropy;
+ unsigned char buf[MBEDTLS_ENTROPY_BLOCK_SIZE];
+
+ if (argc < 2) {
+ mbedtls_fprintf(stderr, "usage: %s <output filename>\n", argv[0]);
+ mbedtls_exit(exit_code);
+ }
+
+ if ((f = fopen(argv[1], "wb+")) == NULL) {
+ mbedtls_printf("failed to open '%s' for writing.\n", argv[1]);
+ mbedtls_exit(exit_code);
+ }
+
+ mbedtls_entropy_init(&entropy);
+
+ for (i = 0, k = 768; i < k; i++) {
+ ret = mbedtls_entropy_func(&entropy, buf, sizeof(buf));
+ if (ret != 0) {
+ mbedtls_printf(" failed\n ! mbedtls_entropy_func returned -%04X\n",
+ (unsigned int) ret);
+ goto cleanup;
+ }
+
+ fwrite(buf, 1, sizeof(buf), f);
+
+ mbedtls_printf("Generating %ldkb of data in file '%s'... %04.1f" \
+ "%% done\r",
+ (long) (sizeof(buf) * k / 1024),
+ argv[1],
+ (100 * (float) (i + 1)) / k);
+ fflush(stdout);
+ }
+
+ exit_code = MBEDTLS_EXIT_SUCCESS;
+
+cleanup:
+ mbedtls_printf("\n");
+
+ fclose(f);
+ mbedtls_entropy_free(&entropy);
+
+ mbedtls_exit(exit_code);
+}
+#endif /* MBEDTLS_ENTROPY_C */