projects
/
oweals
/
openssl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Typo...
[oweals/openssl.git]
/
apps
/
genrsa.c
diff --git
a/apps/genrsa.c
b/apps/genrsa.c
index 5a58235e0c6b97d2e349f2a6619bd1c62a8c3976..4f62cfd04f3d1b654345e04a0fa0a3dc99123c58 100644
(file)
--- a/
apps/genrsa.c
+++ b/
apps/genrsa.c
@@
-56,6
+56,13
@@
* [including the GNU Public Licence.]
*/
* [including the GNU Public Licence.]
*/
+#include <openssl/opensslconf.h>
+/* Until the key-gen callbacks are modified to use newer prototypes, we allow
+ * deprecated functions for openssl-internal code */
+#ifdef OPENSSL_NO_DEPRECATED
+#undef OPENSSL_NO_DEPRECATED
+#endif
+
#ifndef OPENSSL_NO_RSA
#include <stdio.h>
#include <string.h>
#ifndef OPENSSL_NO_RSA
#include <stdio.h>
#include <string.h>
@@
-75,30
+82,42
@@
#undef PROG
#define PROG genrsa_main
#undef PROG
#define PROG genrsa_main
-static
void MS_CALLBACK genrsa_cb(int p, int n, void *arg
);
+static
int MS_CALLBACK genrsa_cb(int p, int n, BN_GENCB *cb
);
int MAIN(int, char **);
int MAIN(int argc, char **argv)
{
int MAIN(int, char **);
int MAIN(int argc, char **argv)
{
+ BN_GENCB cb;
+#ifndef OPENSSL_NO_ENGINE
ENGINE *e = NULL;
ENGINE *e = NULL;
+#endif
int ret=1;
int ret=1;
- RSA *rsa=NULL;
int i,num=DEFBITS;
long l;
const EVP_CIPHER *enc=NULL;
unsigned long f4=RSA_F4;
char *outfile=NULL;
char *passargout = NULL, *passout = NULL;
int i,num=DEFBITS;
long l;
const EVP_CIPHER *enc=NULL;
unsigned long f4=RSA_F4;
char *outfile=NULL;
char *passargout = NULL, *passout = NULL;
+#ifndef OPENSSL_NO_ENGINE
char *engine=NULL;
char *engine=NULL;
+#endif
char *inrand=NULL;
BIO *out=NULL;
char *inrand=NULL;
BIO *out=NULL;
+ BIGNUM *bn = BN_new();
+ RSA *rsa = RSA_new();
+
+ if(!bn || !rsa) goto err;
apps_startup();
apps_startup();
+ BN_GENCB_set(&cb, genrsa_cb, bio_err);
if (bio_err == NULL)
if ((bio_err=BIO_new(BIO_s_file())) != NULL)
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
if (bio_err == NULL)
if ((bio_err=BIO_new(BIO_s_file())) != NULL)
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
+
+ if (!load_config(bio_err, NULL))
+ goto err;
if ((out=BIO_new(BIO_s_file())) == NULL)
{
BIO_printf(bio_err,"unable to create BIO for output\n");
if ((out=BIO_new(BIO_s_file())) == NULL)
{
BIO_printf(bio_err,"unable to create BIO for output\n");
@@
-119,11
+138,13
@@
int MAIN(int argc, char **argv)
f4=3;
else if (strcmp(*argv,"-F4") == 0 || strcmp(*argv,"-f4") == 0)
f4=RSA_F4;
f4=3;
else if (strcmp(*argv,"-F4") == 0 || strcmp(*argv,"-f4") == 0)
f4=RSA_F4;
+#ifndef OPENSSL_NO_ENGINE
else if (strcmp(*argv,"-engine") == 0)
{
if (--argc < 1) goto bad;
engine= *(++argv);
}
else if (strcmp(*argv,"-engine") == 0)
{
if (--argc < 1) goto bad;
engine= *(++argv);
}
+#endif
else if (strcmp(*argv,"-rand") == 0)
{
if (--argc < 1) goto bad;
else if (strcmp(*argv,"-rand") == 0)
{
if (--argc < 1) goto bad;
@@
-174,7
+195,9
@@
bad:
BIO_printf(bio_err," -passout arg output file pass phrase source\n");
BIO_printf(bio_err," -f4 use F4 (0x10001) for the E value\n");
BIO_printf(bio_err," -3 use 3 for the E value\n");
BIO_printf(bio_err," -passout arg output file pass phrase source\n");
BIO_printf(bio_err," -f4 use F4 (0x10001) for the E value\n");
BIO_printf(bio_err," -3 use 3 for the E value\n");
+#ifndef OPENSSL_NO_ENGINE
BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n");
BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n");
+#endif
BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
BIO_printf(bio_err," load the file (or the files in the directory) into\n");
BIO_printf(bio_err," the random number generator\n");
BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
BIO_printf(bio_err," load the file (or the files in the directory) into\n");
BIO_printf(bio_err," the random number generator\n");
@@
-188,7
+211,9
@@
bad:
goto err;
}
goto err;
}
+#ifndef OPENSSL_NO_ENGINE
e = setup_engine(bio_err, engine, 0);
e = setup_engine(bio_err, engine, 0);
+#endif
if (outfile == NULL)
{
if (outfile == NULL)
{
@@
-220,12
+245,12
@@
bad:
BIO_printf(bio_err,"Generating RSA private key, %d bit long modulus\n",
num);
BIO_printf(bio_err,"Generating RSA private key, %d bit long modulus\n",
num);
- rsa=RSA_generate_key(num,f4,genrsa_cb,bio_err);
+
+ if(!BN_set_word(bn, f4) || !RSA_generate_key_ex(rsa, num, bn, &cb))
+ goto err;
app_RAND_write_file(NULL, bio_err);
app_RAND_write_file(NULL, bio_err);
- if (rsa == NULL) goto err;
-
/* We need to do the following for when the base number size is <
* long, esp windows 3.1 :-(. */
l=0L;
/* We need to do the following for when the base number size is <
* long, esp windows 3.1 :-(. */
l=0L;
@@
-249,16
+274,17
@@
bad:
ret=0;
err:
ret=0;
err:
- if (rsa != NULL) RSA_free(rsa);
- if (out != NULL) BIO_free_all(out);
+ if (bn) BN_free(bn);
+ if (rsa) RSA_free(rsa);
+ if (out) BIO_free_all(out);
if(passout) OPENSSL_free(passout);
if (ret != 0)
ERR_print_errors(bio_err);
apps_shutdown();
if(passout) OPENSSL_free(passout);
if (ret != 0)
ERR_print_errors(bio_err);
apps_shutdown();
- EXIT(ret);
+
OPENSSL_
EXIT(ret);
}
}
-static
void MS_CALLBACK genrsa_cb(int p, int n, void *arg
)
+static
int MS_CALLBACK genrsa_cb(int p, int n, BN_GENCB *cb
)
{
char c='*';
{
char c='*';
@@
-266,11
+292,12
@@
static void MS_CALLBACK genrsa_cb(int p, int n, void *arg)
if (p == 1) c='+';
if (p == 2) c='*';
if (p == 3) c='\n';
if (p == 1) c='+';
if (p == 2) c='*';
if (p == 3) c='\n';
- BIO_write(
(BIO *)
arg,&c,1);
- (void)BIO_flush(
(BIO *)
arg);
+ BIO_write(
cb->
arg,&c,1);
+ (void)BIO_flush(
cb->
arg);
#ifdef LINT
p=n;
#endif
#ifdef LINT
p=n;
#endif
+ return 1;
}
#else /* !OPENSSL_NO_RSA */
}
#else /* !OPENSSL_NO_RSA */