]>
git.ipfire.org Git - thirdparty/openssl.git/blob - apps/rand.c
2 * Copyright 1998-2018 The OpenSSL Project Authors. All Rights Reserved.
4 * Licensed under the Apache License 2.0 (the "License"). You may not use
5 * this file except in compliance with the License. You can obtain a copy
6 * in the file LICENSE in the source distribution or at
7 * https://www.openssl.org/source/license.html
17 #include <openssl/bio.h>
18 #include <openssl/err.h>
19 #include <openssl/rand.h>
21 typedef enum OPTION_choice
{
22 OPT_ERR
= -1, OPT_EOF
= 0, OPT_HELP
,
23 OPT_OUT
, OPT_ENGINE
, OPT_BASE64
, OPT_HEX
,
27 const OPTIONS rand_options
[] = {
28 {OPT_HELP_STR
, 1, '-', "Usage: %s [flags] num\n"},
29 {OPT_HELP_STR
, 1, '-', "Valid options are:\n"},
30 {"help", OPT_HELP
, '-', "Display this summary"},
31 {"out", OPT_OUT
, '>', "Output file"},
33 {"base64", OPT_BASE64
, '-', "Base64 encode output"},
34 {"hex", OPT_HEX
, '-', "Hex encode output"},
35 #ifndef OPENSSL_NO_ENGINE
36 {"engine", OPT_ENGINE
, 's', "Use engine, possibly a hardware device"},
41 int rand_main(int argc
, char **argv
)
45 char *outfile
= NULL
, *prog
;
47 int format
= FORMAT_BINARY
, i
, num
= -1, r
, ret
= 1;
49 prog
= opt_init(argc
, argv
, rand_options
);
50 while ((o
= opt_next()) != OPT_EOF
) {
55 BIO_printf(bio_err
, "%s: Use -help for summary.\n", prog
);
58 opt_help(rand_options
);
65 e
= setup_engine(opt_arg(), 0);
72 format
= FORMAT_BASE64
;
79 argc
= opt_num_rest();
82 if (!opt_int(argv
[0], &num
) || num
<= 0)
84 } else if (argc
> 0) {
85 BIO_printf(bio_err
, "Extra arguments given.\n");
89 out
= bio_open_default(outfile
, 'w', format
);
93 if (format
== FORMAT_BASE64
) {
94 BIO
*b64
= BIO_new(BIO_f_base64());
97 out
= BIO_push(b64
, out
);
101 unsigned char buf
[4096];
105 if (chunk
> (int)sizeof(buf
))
107 r
= RAND_bytes(buf
, chunk
);
110 if (format
!= FORMAT_TEXT
) {
111 if (BIO_write(out
, buf
, chunk
) != chunk
)
114 for (i
= 0; i
< chunk
; i
++)
115 if (BIO_printf(out
, "%02x", buf
[i
]) != 2)
120 if (format
== FORMAT_TEXT
)
122 if (BIO_flush(out
) <= 0)
129 ERR_print_errors(bio_err
);