'rand' application for creating pseudo-random files.
This commit is contained in:
parent
19c057da2e
commit
27b782732f
@ -38,7 +38,7 @@ E_EXE= verify asn1pars req dgst dh dhparam enc passwd gendh errstr \
|
|||||||
ca crl rsa dsa dsaparam \
|
ca crl rsa dsa dsaparam \
|
||||||
x509 genrsa gendsa s_server s_client speed \
|
x509 genrsa gendsa s_server s_client speed \
|
||||||
s_time version pkcs7 crl2pkcs7 sess_id ciphers nseq pkcs12 \
|
s_time version pkcs7 crl2pkcs7 sess_id ciphers nseq pkcs12 \
|
||||||
pkcs8 spkac smime
|
pkcs8 spkac smime rand
|
||||||
|
|
||||||
PROGS= $(PROGRAM).c
|
PROGS= $(PROGRAM).c
|
||||||
|
|
||||||
@ -54,18 +54,14 @@ E_OBJ= verify.o asn1pars.o req.o dgst.o dh.o dhparam.o enc.o passwd.o gendh.o er
|
|||||||
rsa.o dsa.o dsaparam.o \
|
rsa.o dsa.o dsaparam.o \
|
||||||
x509.o genrsa.o gendsa.o s_server.o s_client.o speed.o \
|
x509.o genrsa.o gendsa.o s_server.o s_client.o speed.o \
|
||||||
s_time.o $(A_OBJ) $(S_OBJ) $(RAND_OBJ) version.o sess_id.o \
|
s_time.o $(A_OBJ) $(S_OBJ) $(RAND_OBJ) version.o sess_id.o \
|
||||||
ciphers.o nseq.o pkcs12.o pkcs8.o spkac.o smime.o
|
ciphers.o nseq.o pkcs12.o pkcs8.o spkac.o smime.o rand.o
|
||||||
|
|
||||||
# pem_mail.o
|
|
||||||
|
|
||||||
E_SRC= verify.c asn1pars.c req.c dgst.c dh.c enc.c passwd.c gendh.c errstr.c ca.c \
|
E_SRC= verify.c asn1pars.c req.c dgst.c dh.c enc.c passwd.c gendh.c errstr.c ca.c \
|
||||||
pkcs7.c crl2p7.c crl.c \
|
pkcs7.c crl2p7.c crl.c \
|
||||||
rsa.c dsa.c dsaparam.c \
|
rsa.c dsa.c dsaparam.c \
|
||||||
x509.c genrsa.c gendsa.c s_server.c s_client.c speed.c \
|
x509.c genrsa.c gendsa.c s_server.c s_client.c speed.c \
|
||||||
s_time.c $(A_SRC) $(S_SRC) $(RAND_SRC) version.c sess_id.c \
|
s_time.c $(A_SRC) $(S_SRC) $(RAND_SRC) version.c sess_id.c \
|
||||||
ciphers.c nseq.c pkcs12.c pkcs8.c spkac.c smime.c
|
ciphers.c nseq.c pkcs12.c pkcs8.c spkac.c smime.c rand.c
|
||||||
|
|
||||||
# pem_mail.c
|
|
||||||
|
|
||||||
SRC=$(E_SRC)
|
SRC=$(E_SRC)
|
||||||
|
|
||||||
@ -537,6 +533,23 @@ pkcs8.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
|
|||||||
pkcs8.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
pkcs8.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
||||||
pkcs8.o: ../include/openssl/stack.h ../include/openssl/x509.h
|
pkcs8.o: ../include/openssl/stack.h ../include/openssl/x509.h
|
||||||
pkcs8.o: ../include/openssl/x509_vfy.h apps.h
|
pkcs8.o: ../include/openssl/x509_vfy.h apps.h
|
||||||
|
rand.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
|
rand.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
||||||
|
rand.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
||||||
|
rand.o: ../include/openssl/crypto.h ../include/openssl/des.h
|
||||||
|
rand.o: ../include/openssl/dh.h ../include/openssl/dsa.h
|
||||||
|
rand.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
|
||||||
|
rand.o: ../include/openssl/err.h ../include/openssl/evp.h
|
||||||
|
rand.o: ../include/openssl/idea.h ../include/openssl/md2.h
|
||||||
|
rand.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
|
||||||
|
rand.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
|
||||||
|
rand.o: ../include/openssl/opensslv.h ../include/openssl/pkcs7.h
|
||||||
|
rand.o: ../include/openssl/rand.h ../include/openssl/rc2.h
|
||||||
|
rand.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
|
||||||
|
rand.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
|
||||||
|
rand.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
||||||
|
rand.o: ../include/openssl/stack.h ../include/openssl/x509.h
|
||||||
|
rand.o: ../include/openssl/x509_vfy.h apps.h
|
||||||
req.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
req.o: ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
req.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
req.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
|
||||||
req.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
req.o: ../include/openssl/buffer.h ../include/openssl/cast.h
|
||||||
|
@ -164,7 +164,7 @@ long app_RAND_load_files(char *name)
|
|||||||
char *p,*n;
|
char *p,*n;
|
||||||
int last;
|
int last;
|
||||||
long tot=0;
|
long tot=0;
|
||||||
int egd;
|
int egd;
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
|
@ -33,6 +33,7 @@ extern int pkcs12_main(int argc,char *argv[]);
|
|||||||
extern int pkcs8_main(int argc,char *argv[]);
|
extern int pkcs8_main(int argc,char *argv[]);
|
||||||
extern int spkac_main(int argc,char *argv[]);
|
extern int spkac_main(int argc,char *argv[]);
|
||||||
extern int smime_main(int argc,char *argv[]);
|
extern int smime_main(int argc,char *argv[]);
|
||||||
|
extern int rand_main(int argc,char *argv[]);
|
||||||
|
|
||||||
#define FUNC_TYPE_GENERAL 1
|
#define FUNC_TYPE_GENERAL 1
|
||||||
#define FUNC_TYPE_MD 2
|
#define FUNC_TYPE_MD 2
|
||||||
@ -103,6 +104,7 @@ FUNCTION functions[] = {
|
|||||||
{FUNC_TYPE_GENERAL,"pkcs8",pkcs8_main},
|
{FUNC_TYPE_GENERAL,"pkcs8",pkcs8_main},
|
||||||
{FUNC_TYPE_GENERAL,"spkac",spkac_main},
|
{FUNC_TYPE_GENERAL,"spkac",spkac_main},
|
||||||
{FUNC_TYPE_GENERAL,"smime",smime_main},
|
{FUNC_TYPE_GENERAL,"smime",smime_main},
|
||||||
|
{FUNC_TYPE_GENERAL,"rand",rand_main},
|
||||||
{FUNC_TYPE_MD,"md2",dgst_main},
|
{FUNC_TYPE_MD,"md2",dgst_main},
|
||||||
{FUNC_TYPE_MD,"md5",dgst_main},
|
{FUNC_TYPE_MD,"md5",dgst_main},
|
||||||
{FUNC_TYPE_MD,"sha",dgst_main},
|
{FUNC_TYPE_MD,"sha",dgst_main},
|
||||||
|
139
apps/rand.c
Normal file
139
apps/rand.c
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
/* apps/rand.c */
|
||||||
|
|
||||||
|
#include "apps.h"
|
||||||
|
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include <openssl/bio.h>
|
||||||
|
#include <openssl/err.h>
|
||||||
|
#include <openssl/rand.h>
|
||||||
|
|
||||||
|
#undef PROG
|
||||||
|
#define PROG rand_main
|
||||||
|
|
||||||
|
/* -out file - write to file
|
||||||
|
* -rand file:file - PRNG seed files
|
||||||
|
* -base64 - encode output
|
||||||
|
* num - write 'num' bytes
|
||||||
|
*/
|
||||||
|
|
||||||
|
int MAIN(int, char **);
|
||||||
|
|
||||||
|
int MAIN(int argc, char **argv)
|
||||||
|
{
|
||||||
|
int i, r, ret = 1;
|
||||||
|
int badopt;
|
||||||
|
char *outfile = NULL;
|
||||||
|
char *inrand = NULL;
|
||||||
|
int base64 = 0;
|
||||||
|
BIO *out = NULL;
|
||||||
|
int num = -1;
|
||||||
|
|
||||||
|
apps_startup();
|
||||||
|
|
||||||
|
if (bio_err == NULL)
|
||||||
|
if ((bio_err = BIO_new(BIO_s_file())) != NULL)
|
||||||
|
BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT);
|
||||||
|
|
||||||
|
badopt = 0;
|
||||||
|
i = 0;
|
||||||
|
while (!badopt && argv[++i] != NULL)
|
||||||
|
{
|
||||||
|
if (strcmp(argv[i], "-out") == 0)
|
||||||
|
{
|
||||||
|
if ((argv[i+1] != NULL) && (outfile == NULL))
|
||||||
|
outfile = argv[++i];
|
||||||
|
else
|
||||||
|
badopt = 1;
|
||||||
|
}
|
||||||
|
else if (strcmp(argv[i], "-rand") == 0)
|
||||||
|
{
|
||||||
|
if ((argv[i+1] != NULL) && (inrand == NULL))
|
||||||
|
inrand = argv[++i];
|
||||||
|
else
|
||||||
|
badopt = 1;
|
||||||
|
}
|
||||||
|
else if (strcmp(argv[i], "-base64") == 0)
|
||||||
|
{
|
||||||
|
if (!base64)
|
||||||
|
base64 = 1;
|
||||||
|
else
|
||||||
|
badopt = 1;
|
||||||
|
}
|
||||||
|
else if (isdigit(argv[i][0]))
|
||||||
|
{
|
||||||
|
if (num < 0)
|
||||||
|
{
|
||||||
|
r = sscanf(argv[i], "%d", &num);
|
||||||
|
if (r == 0 || num < 0)
|
||||||
|
badopt = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
badopt = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
badopt = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (num < 0)
|
||||||
|
badopt = 1;
|
||||||
|
|
||||||
|
if (badopt)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "Usage: rand [options] num\n");
|
||||||
|
BIO_printf(bio_err, "where options are\n");
|
||||||
|
BIO_printf(bio_err, "-out file - write to file\n");
|
||||||
|
BIO_printf(bio_err, "-rand file:file:... - seed PRNG from files\n");
|
||||||
|
BIO_printf(bio_err, "-base64 - encode output\n");
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
app_RAND_load_file(NULL, bio_err, (inrand != NULL));
|
||||||
|
if (inrand != NULL)
|
||||||
|
BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
|
||||||
|
app_RAND_load_files(inrand));
|
||||||
|
|
||||||
|
out = BIO_new(BIO_s_file());
|
||||||
|
if (out == NULL)
|
||||||
|
goto err;
|
||||||
|
if (outfile != NULL)
|
||||||
|
r = BIO_write_filename(out, outfile);
|
||||||
|
else
|
||||||
|
r = BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT);
|
||||||
|
if (r <= 0)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
if (base64)
|
||||||
|
{
|
||||||
|
BIO *b64 = BIO_new(BIO_f_base64());
|
||||||
|
if (b64 == NULL)
|
||||||
|
goto err;
|
||||||
|
out = BIO_push(b64, out);
|
||||||
|
}
|
||||||
|
|
||||||
|
while (num > 0)
|
||||||
|
{
|
||||||
|
unsigned char buf[4096];
|
||||||
|
int chunk;
|
||||||
|
|
||||||
|
chunk = num;
|
||||||
|
if (chunk > sizeof buf)
|
||||||
|
chunk = sizeof buf;
|
||||||
|
r = RAND_bytes(buf, chunk);
|
||||||
|
if (r <= 0)
|
||||||
|
goto err;
|
||||||
|
BIO_write(out, buf, chunk);
|
||||||
|
num -= chunk;
|
||||||
|
}
|
||||||
|
BIO_flush(out);
|
||||||
|
|
||||||
|
app_RAND_write_file(NULL, bio_err);
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
err:
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
if (out)
|
||||||
|
BIO_free_all(out);
|
||||||
|
EXIT(ret);
|
||||||
|
}
|
@ -507,7 +507,7 @@ int BIO_set(BIO *a,BIO_METHOD *type);
|
|||||||
int BIO_free(BIO *a);
|
int BIO_free(BIO *a);
|
||||||
int BIO_read(BIO *b, void *data, int len);
|
int BIO_read(BIO *b, void *data, int len);
|
||||||
int BIO_gets(BIO *bp,char *buf, int size);
|
int BIO_gets(BIO *bp,char *buf, int size);
|
||||||
int BIO_write(BIO *b, const char *data, int len);
|
int BIO_write(BIO *b, const void *data, int len);
|
||||||
int BIO_puts(BIO *bp,const char *buf);
|
int BIO_puts(BIO *bp,const char *buf);
|
||||||
long BIO_ctrl(BIO *bp,int cmd,long larg,void *parg);
|
long BIO_ctrl(BIO *bp,int cmd,long larg,void *parg);
|
||||||
long BIO_callback_ctrl(BIO *bp,int cmd,void (*fp)());
|
long BIO_callback_ctrl(BIO *bp,int cmd,void (*fp)());
|
||||||
|
@ -169,7 +169,7 @@ int BIO_read(BIO *b, void *out, int outl)
|
|||||||
return(i);
|
return(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
int BIO_write(BIO *b, const char *in, int inl)
|
int BIO_write(BIO *b, const void *in, int inl)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
long (*cb)();
|
long (*cb)();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user