summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib/libssl/src/apps/gendh.c185
-rw-r--r--src/lib/libssl/src/apps/gendsa.c237
-rw-r--r--src/lib/libssl/src/apps/genpkey.c252
-rw-r--r--src/lib/libssl/src/apps/genrsa.c287
4 files changed, 459 insertions, 502 deletions
diff --git a/src/lib/libssl/src/apps/gendh.c b/src/lib/libssl/src/apps/gendh.c
index c80fc0c21c..00c31cf40d 100644
--- a/src/lib/libssl/src/apps/gendh.c
+++ b/src/lib/libssl/src/apps/gendh.c
@@ -6,21 +6,21 @@
6 * This package is an SSL implementation written 6 * This package is an SSL implementation written
7 * by Eric Young (eay@cryptsoft.com). 7 * by Eric Young (eay@cryptsoft.com).
8 * The implementation was written so as to conform with Netscapes SSL. 8 * The implementation was written so as to conform with Netscapes SSL.
9 * 9 *
10 * This library is free for commercial and non-commercial use as long as 10 * This library is free for commercial and non-commercial use as long as
11 * the following conditions are aheared to. The following conditions 11 * the following conditions are aheared to. The following conditions
12 * apply to all code found in this distribution, be it the RC4, RSA, 12 * apply to all code found in this distribution, be it the RC4, RSA,
13 * lhash, DES, etc., code; not just the SSL code. The SSL documentation 13 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
14 * included with this distribution is covered by the same copyright terms 14 * included with this distribution is covered by the same copyright terms
15 * except that the holder is Tim Hudson (tjh@cryptsoft.com). 15 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
16 * 16 *
17 * Copyright remains Eric Young's, and as such any Copyright notices in 17 * Copyright remains Eric Young's, and as such any Copyright notices in
18 * the code are not to be removed. 18 * the code are not to be removed.
19 * If this package is used in a product, Eric Young should be given attribution 19 * If this package is used in a product, Eric Young should be given attribution
20 * as the author of the parts of the library used. 20 * as the author of the parts of the library used.
21 * This can be in the form of a textual message at program startup or 21 * This can be in the form of a textual message at program startup or
22 * in documentation (online or textual) provided with the package. 22 * in documentation (online or textual) provided with the package.
23 * 23 *
24 * Redistribution and use in source and binary forms, with or without 24 * Redistribution and use in source and binary forms, with or without
25 * modification, are permitted provided that the following conditions 25 * modification, are permitted provided that the following conditions
26 * are met: 26 * are met:
@@ -35,10 +35,10 @@
35 * Eric Young (eay@cryptsoft.com)" 35 * Eric Young (eay@cryptsoft.com)"
36 * The word 'cryptographic' can be left out if the rouines from the library 36 * The word 'cryptographic' can be left out if the rouines from the library
37 * being used are not cryptographic related :-). 37 * being used are not cryptographic related :-).
38 * 4. If you include any Windows specific code (or a derivative thereof) from 38 * 4. If you include any Windows specific code (or a derivative thereof) from
39 * the apps directory (application code) you must include an acknowledgement: 39 * the apps directory (application code) you must include an acknowledgement:
40 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 40 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
41 * 41 *
42 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 42 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
43 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 43 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
44 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 44 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -50,7 +50,7 @@
50 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 50 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
51 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 51 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
52 * SUCH DAMAGE. 52 * SUCH DAMAGE.
53 * 53 *
54 * The licence and distribution terms for any publically available version or 54 * The licence and distribution terms for any publically available version or
55 * derivative of this code cannot be changed. i.e. this code cannot simply be 55 * derivative of this code cannot be changed. i.e. this code cannot simply be
56 * copied and put under another distribution licence 56 * copied and put under another distribution licence
@@ -86,150 +86,149 @@ static int dh_cb(int p, int n, BN_GENCB *cb);
86 86
87int MAIN(int, char **); 87int MAIN(int, char **);
88 88
89int MAIN(int argc, char **argv) 89int
90 { 90MAIN(int argc, char **argv)
91{
91 BN_GENCB cb; 92 BN_GENCB cb;
92 DH *dh=NULL; 93 DH *dh = NULL;
93 int ret=1,num=DEFBITS; 94 int ret = 1, num = DEFBITS;
94 int g=2; 95 int g = 2;
95 char *outfile=NULL; 96 char *outfile = NULL;
96 char *inrand=NULL; 97 char *inrand = NULL;
97#ifndef OPENSSL_NO_ENGINE 98#ifndef OPENSSL_NO_ENGINE
98 char *engine=NULL; 99 char *engine = NULL;
99#endif 100#endif
100 BIO *out=NULL; 101 BIO *out = NULL;
101 102
102 apps_startup(); 103 apps_startup();
103 104
104 BN_GENCB_set(&cb, dh_cb, bio_err); 105 BN_GENCB_set(&cb, dh_cb, bio_err);
105 if (bio_err == NULL) 106 if (bio_err == NULL)
106 if ((bio_err=BIO_new(BIO_s_file())) != NULL) 107 if ((bio_err = BIO_new(BIO_s_file())) != NULL)
107 BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); 108 BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT);
108 109
109 if (!load_config(bio_err, NULL)) 110 if (!load_config(bio_err, NULL))
110 goto end; 111 goto end;
111 112
112 argv++; 113 argv++;
113 argc--; 114 argc--;
114 for (;;) 115 for (;;) {
115 { 116 if (argc <= 0)
116 if (argc <= 0) break; 117 break;
117 if (strcmp(*argv,"-out") == 0) 118 if (strcmp(*argv, "-out") == 0) {
118 { 119 if (--argc < 1)
119 if (--argc < 1) goto bad; 120 goto bad;
120 outfile= *(++argv); 121 outfile= *(++argv);
121 } 122 } else if (strcmp(*argv, "-2") == 0)
122 else if (strcmp(*argv,"-2") == 0) 123 g = 2;
123 g=2;
124 /* else if (strcmp(*argv,"-3") == 0) 124 /* else if (strcmp(*argv,"-3") == 0)
125 g=3; */ 125 g=3; */
126 else if (strcmp(*argv,"-5") == 0) 126 else if (strcmp(*argv, "-5") == 0)
127 g=5; 127 g = 5;
128#ifndef OPENSSL_NO_ENGINE 128#ifndef OPENSSL_NO_ENGINE
129 else if (strcmp(*argv,"-engine") == 0) 129 else if (strcmp(*argv, "-engine") == 0) {
130 { 130 if (--argc < 1)
131 if (--argc < 1) goto bad; 131 goto bad;
132 engine= *(++argv); 132 engine= *(++argv);
133 } 133 }
134#endif 134#endif
135 else if (strcmp(*argv,"-rand") == 0) 135 else if (strcmp(*argv, "-rand") == 0) {
136 { 136 if (--argc < 1)
137 if (--argc < 1) goto bad; 137 goto bad;
138 inrand= *(++argv); 138 inrand= *(++argv);
139 } 139 } else
140 else
141 break; 140 break;
142 argv++; 141 argv++;
143 argc--; 142 argc--;
144 } 143 }
145 if ((argc >= 1) && ((sscanf(*argv,"%d",&num) == 0) || (num < 0))) 144 if ((argc >= 1) && ((sscanf(*argv, "%d",&num) == 0) || (num < 0))) {
146 {
147bad: 145bad:
148 BIO_printf(bio_err,"usage: gendh [args] [numbits]\n"); 146 BIO_printf(bio_err, "usage: gendh [args] [numbits]\n");
149 BIO_printf(bio_err," -out file - output the key to 'file\n"); 147 BIO_printf(bio_err, " -out file - output the key to 'file\n");
150 BIO_printf(bio_err," -2 - use 2 as the generator value\n"); 148 BIO_printf(bio_err, " -2 - use 2 as the generator value\n");
151 /* BIO_printf(bio_err," -3 - use 3 as the generator value\n"); */ 149 /* BIO_printf(bio_err," -3 - use 3 as the generator value\n"); */
152 BIO_printf(bio_err," -5 - use 5 as the generator value\n"); 150 BIO_printf(bio_err, " -5 - use 5 as the generator value\n");
153#ifndef OPENSSL_NO_ENGINE 151#ifndef OPENSSL_NO_ENGINE
154 BIO_printf(bio_err," -engine e - use engine e, possibly a hardware device.\n"); 152 BIO_printf(bio_err, " -engine e - use engine e, possibly a hardware device.\n");
155#endif 153#endif
156 BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR); 154 BIO_printf(bio_err, " -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
157 BIO_printf(bio_err," - load the file (or the files in the directory) into\n"); 155 BIO_printf(bio_err, " - load the file (or the files in the directory) into\n");
158 BIO_printf(bio_err," the random number generator\n"); 156 BIO_printf(bio_err, " the random number generator\n");
159 goto end; 157 goto end;
160 } 158 }
161 159
162#ifndef OPENSSL_NO_ENGINE 160#ifndef OPENSSL_NO_ENGINE
163 setup_engine(bio_err, engine, 0); 161 setup_engine(bio_err, engine, 0);
164#endif 162#endif
165 163
166 out=BIO_new(BIO_s_file()); 164 out = BIO_new(BIO_s_file());
167 if (out == NULL) 165 if (out == NULL) {
168 {
169 ERR_print_errors(bio_err); 166 ERR_print_errors(bio_err);
170 goto end; 167 goto end;
171 } 168 }
172 169
173 if (outfile == NULL) 170 if (outfile == NULL) {
174 { 171 BIO_set_fp(out, stdout, BIO_NOCLOSE);
175 BIO_set_fp(out,stdout,BIO_NOCLOSE); 172 } else {
176 } 173 if (BIO_write_filename(out, outfile) <= 0) {
177 else
178 {
179 if (BIO_write_filename(out,outfile) <= 0)
180 {
181 perror(outfile); 174 perror(outfile);
182 goto end; 175 goto end;
183 }
184 } 176 }
177 }
185 178
186 if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL) 179 if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL) {
187 { 180 BIO_printf(bio_err, "warning, not much extra random data, consider using the -rand option\n");
188 BIO_printf(bio_err,"warning, not much extra random data, consider using the -rand option\n"); 181 }
189 }
190 if (inrand != NULL) 182 if (inrand != NULL)
191 BIO_printf(bio_err,"%ld semi-random bytes loaded\n", 183 BIO_printf(bio_err, "%ld semi-random bytes loaded\n",
192 app_RAND_load_files(inrand)); 184 app_RAND_load_files(inrand));
193 185
194 BIO_printf(bio_err,"Generating DH parameters, %d bit long safe prime, generator %d\n",num,g); 186 BIO_printf(bio_err, "Generating DH parameters, %d bit long safe prime, generator %d\n",num,g);
195 BIO_printf(bio_err,"This is going to take a long time\n"); 187 BIO_printf(bio_err, "This is going to take a long time\n");
196 188
197 if(((dh = DH_new()) == NULL) || !DH_generate_parameters_ex(dh, num, g, &cb)) 189 if (((dh = DH_new()) == NULL) || !DH_generate_parameters_ex(dh, num, g, &cb))
198 goto end; 190 goto end;
199 191
200 app_RAND_write_file(NULL, bio_err); 192 app_RAND_write_file(NULL, bio_err);
201 193
202 if (!PEM_write_bio_DHparams(out,dh)) 194 if (!PEM_write_bio_DHparams(out, dh))
203 goto end; 195 goto end;
204 ret=0; 196 ret = 0;
205end: 197end:
206 if (ret != 0) 198 if (ret != 0)
207 ERR_print_errors(bio_err); 199 ERR_print_errors(bio_err);
208 if (out != NULL) BIO_free_all(out); 200 if (out != NULL)
209 if (dh != NULL) DH_free(dh); 201 BIO_free_all(out);
202 if (dh != NULL)
203 DH_free(dh);
210 apps_shutdown(); 204 apps_shutdown();
211 OPENSSL_EXIT(ret); 205 OPENSSL_EXIT(ret);
212 } 206}
213 207
214static int dh_cb(int p, int n, BN_GENCB *cb) 208static int
215 { 209dh_cb(int p, int n, BN_GENCB *cb)
216 char c='*'; 210{
217 211 char c = '*';
218 if (p == 0) c='.'; 212
219 if (p == 1) c='+'; 213 if (p == 0)
220 if (p == 2) c='*'; 214 c = '.';
221 if (p == 3) c='\n'; 215 if (p == 1)
222 BIO_write(cb->arg,&c,1); 216 c = '+';
217 if (p == 2)
218 c = '*';
219 if (p == 3)
220 c = '\n';
221 BIO_write(cb->arg, &c, 1);
223 (void)BIO_flush(cb->arg); 222 (void)BIO_flush(cb->arg);
224#ifdef LINT 223#ifdef LINT
225 p=n; 224 p = n;
226#endif 225#endif
227 return 1; 226 return 1;
228 } 227}
229#else /* !OPENSSL_NO_DH */ 228#else /* !OPENSSL_NO_DH */
230 229
231# if PEDANTIC 230# if PEDANTIC
232static void *dummy=&dummy; 231static void *dummy = &dummy;
233# endif 232# endif
234 233
235#endif 234#endif
diff --git a/src/lib/libssl/src/apps/gendsa.c b/src/lib/libssl/src/apps/gendsa.c
index 5c9ec7d24b..17dbd9d6d3 100644
--- a/src/lib/libssl/src/apps/gendsa.c
+++ b/src/lib/libssl/src/apps/gendsa.c
@@ -5,21 +5,21 @@
5 * This package is an SSL implementation written 5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com). 6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL. 7 * The implementation was written so as to conform with Netscapes SSL.
8 * 8 *
9 * This library is free for commercial and non-commercial use as long as 9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions 10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA, 11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation 12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13 * included with this distribution is covered by the same copyright terms 13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com). 14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 * 15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in 16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed. 17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution 18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used. 19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or 20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package. 21 * in documentation (online or textual) provided with the package.
22 * 22 *
23 * Redistribution and use in source and binary forms, with or without 23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions 24 * modification, are permitted provided that the following conditions
25 * are met: 25 * are met:
@@ -34,10 +34,10 @@
34 * Eric Young (eay@cryptsoft.com)" 34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library 35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-). 36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from 37 * 4. If you include any Windows specific code (or a derivative thereof) from
38 * the apps directory (application code) you must include an acknowledgement: 38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 * 40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -49,7 +49,7 @@
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE. 51 * SUCH DAMAGE.
52 * 52 *
53 * The licence and distribution terms for any publically available version or 53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed. i.e. this code cannot simply be 54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence 55 * copied and put under another distribution licence
@@ -76,204 +76,199 @@
76 76
77int MAIN(int, char **); 77int MAIN(int, char **);
78 78
79int MAIN(int argc, char **argv) 79int
80 { 80MAIN(int argc, char **argv)
81 DSA *dsa=NULL; 81{
82 int ret=1; 82 DSA *dsa = NULL;
83 char *outfile=NULL; 83 int ret = 1;
84 char *inrand=NULL,*dsaparams=NULL; 84 char *outfile = NULL;
85 char *inrand = NULL, *dsaparams = NULL;
85 char *passargout = NULL, *passout = NULL; 86 char *passargout = NULL, *passout = NULL;
86 BIO *out=NULL,*in=NULL; 87 BIO *out = NULL, *in = NULL;
87 const EVP_CIPHER *enc=NULL; 88 const EVP_CIPHER *enc = NULL;
88#ifndef OPENSSL_NO_ENGINE 89#ifndef OPENSSL_NO_ENGINE
89 char *engine=NULL; 90 char *engine = NULL;
90#endif 91#endif
91 92
92 apps_startup(); 93 apps_startup();
93 94
94 if (bio_err == NULL) 95 if (bio_err == NULL)
95 if ((bio_err=BIO_new(BIO_s_file())) != NULL) 96 if ((bio_err = BIO_new(BIO_s_file())) != NULL)
96 BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); 97 BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT);
97 98
98 if (!load_config(bio_err, NULL)) 99 if (!load_config(bio_err, NULL))
99 goto end; 100 goto end;
100 101
101 argv++; 102 argv++;
102 argc--; 103 argc--;
103 for (;;) 104 for (;;) {
104 { 105 if (argc <= 0)
105 if (argc <= 0) break; 106 break;
106 if (strcmp(*argv,"-out") == 0) 107 if (strcmp(*argv, "-out") == 0) {
107 { 108 if (--argc < 1)
108 if (--argc < 1) goto bad; 109 goto bad;
109 outfile= *(++argv); 110 outfile= *(++argv);
110 } 111 } else if (strcmp(*argv, "-passout") == 0) {
111 else if (strcmp(*argv,"-passout") == 0) 112 if (--argc < 1)
112 { 113 goto bad;
113 if (--argc < 1) goto bad;
114 passargout= *(++argv); 114 passargout= *(++argv);
115 } 115 }
116#ifndef OPENSSL_NO_ENGINE 116#ifndef OPENSSL_NO_ENGINE
117 else if (strcmp(*argv,"-engine") == 0) 117 else if (strcmp(*argv, "-engine") == 0) {
118 { 118 if (--argc < 1)
119 if (--argc < 1) goto bad; 119 goto bad;
120 engine= *(++argv); 120 engine= *(++argv);
121 } 121 }
122#endif 122#endif
123 else if (strcmp(*argv,"-rand") == 0) 123 else if (strcmp(*argv, "-rand") == 0) {
124 { 124 if (--argc < 1)
125 if (--argc < 1) goto bad; 125 goto bad;
126 inrand= *(++argv); 126 inrand= *(++argv);
127 } 127 } else if (strcmp(*argv, "-") == 0)
128 else if (strcmp(*argv,"-") == 0)
129 goto bad; 128 goto bad;
130#ifndef OPENSSL_NO_DES 129#ifndef OPENSSL_NO_DES
131 else if (strcmp(*argv,"-des") == 0) 130 else if (strcmp(*argv, "-des") == 0)
132 enc=EVP_des_cbc(); 131 enc = EVP_des_cbc();
133 else if (strcmp(*argv,"-des3") == 0) 132 else if (strcmp(*argv, "-des3") == 0)
134 enc=EVP_des_ede3_cbc(); 133 enc = EVP_des_ede3_cbc();
135#endif 134#endif
136#ifndef OPENSSL_NO_IDEA 135#ifndef OPENSSL_NO_IDEA
137 else if (strcmp(*argv,"-idea") == 0) 136 else if (strcmp(*argv, "-idea") == 0)
138 enc=EVP_idea_cbc(); 137 enc = EVP_idea_cbc();
139#endif 138#endif
140#ifndef OPENSSL_NO_SEED 139#ifndef OPENSSL_NO_SEED
141 else if (strcmp(*argv,"-seed") == 0) 140 else if (strcmp(*argv, "-seed") == 0)
142 enc=EVP_seed_cbc(); 141 enc = EVP_seed_cbc();
143#endif 142#endif
144#ifndef OPENSSL_NO_AES 143#ifndef OPENSSL_NO_AES
145 else if (strcmp(*argv,"-aes128") == 0) 144 else if (strcmp(*argv, "-aes128") == 0)
146 enc=EVP_aes_128_cbc(); 145 enc = EVP_aes_128_cbc();
147 else if (strcmp(*argv,"-aes192") == 0) 146 else if (strcmp(*argv, "-aes192") == 0)
148 enc=EVP_aes_192_cbc(); 147 enc = EVP_aes_192_cbc();
149 else if (strcmp(*argv,"-aes256") == 0) 148 else if (strcmp(*argv, "-aes256") == 0)
150 enc=EVP_aes_256_cbc(); 149 enc = EVP_aes_256_cbc();
151#endif 150#endif
152#ifndef OPENSSL_NO_CAMELLIA 151#ifndef OPENSSL_NO_CAMELLIA
153 else if (strcmp(*argv,"-camellia128") == 0) 152 else if (strcmp(*argv, "-camellia128") == 0)
154 enc=EVP_camellia_128_cbc(); 153 enc = EVP_camellia_128_cbc();
155 else if (strcmp(*argv,"-camellia192") == 0) 154 else if (strcmp(*argv, "-camellia192") == 0)
156 enc=EVP_camellia_192_cbc(); 155 enc = EVP_camellia_192_cbc();
157 else if (strcmp(*argv,"-camellia256") == 0) 156 else if (strcmp(*argv, "-camellia256") == 0)
158 enc=EVP_camellia_256_cbc(); 157 enc = EVP_camellia_256_cbc();
159#endif 158#endif
160 else if (**argv != '-' && dsaparams == NULL) 159 else if (**argv != '-' && dsaparams == NULL) {
161 {
162 dsaparams = *argv; 160 dsaparams = *argv;
163 } 161 } else
164 else
165 goto bad; 162 goto bad;
166 argv++; 163 argv++;
167 argc--; 164 argc--;
168 } 165 }
169 166
170 if (dsaparams == NULL) 167 if (dsaparams == NULL) {
171 {
172bad: 168bad:
173 BIO_printf(bio_err,"usage: gendsa [args] dsaparam-file\n"); 169 BIO_printf(bio_err, "usage: gendsa [args] dsaparam-file\n");
174 BIO_printf(bio_err," -out file - output the key to 'file'\n"); 170 BIO_printf(bio_err, " -out file - output the key to 'file'\n");
175#ifndef OPENSSL_NO_DES 171#ifndef OPENSSL_NO_DES
176 BIO_printf(bio_err," -des - encrypt the generated key with DES in cbc mode\n"); 172 BIO_printf(bio_err, " -des - encrypt the generated key with DES in cbc mode\n");
177 BIO_printf(bio_err," -des3 - encrypt the generated key with DES in ede cbc mode (168 bit key)\n"); 173 BIO_printf(bio_err, " -des3 - encrypt the generated key with DES in ede cbc mode (168 bit key)\n");
178#endif 174#endif
179#ifndef OPENSSL_NO_IDEA 175#ifndef OPENSSL_NO_IDEA
180 BIO_printf(bio_err," -idea - encrypt the generated key with IDEA in cbc mode\n"); 176 BIO_printf(bio_err, " -idea - encrypt the generated key with IDEA in cbc mode\n");
181#endif 177#endif
182#ifndef OPENSSL_NO_SEED 178#ifndef OPENSSL_NO_SEED
183 BIO_printf(bio_err," -seed\n"); 179 BIO_printf(bio_err, " -seed\n");
184 BIO_printf(bio_err," encrypt PEM output with cbc seed\n"); 180 BIO_printf(bio_err, " encrypt PEM output with cbc seed\n");
185#endif 181#endif
186#ifndef OPENSSL_NO_AES 182#ifndef OPENSSL_NO_AES
187 BIO_printf(bio_err," -aes128, -aes192, -aes256\n"); 183 BIO_printf(bio_err, " -aes128, -aes192, -aes256\n");
188 BIO_printf(bio_err," encrypt PEM output with cbc aes\n"); 184 BIO_printf(bio_err, " encrypt PEM output with cbc aes\n");
189#endif 185#endif
190#ifndef OPENSSL_NO_CAMELLIA 186#ifndef OPENSSL_NO_CAMELLIA
191 BIO_printf(bio_err," -camellia128, -camellia192, -camellia256\n"); 187 BIO_printf(bio_err, " -camellia128, -camellia192, -camellia256\n");
192 BIO_printf(bio_err," encrypt PEM output with cbc camellia\n"); 188 BIO_printf(bio_err, " encrypt PEM output with cbc camellia\n");
193#endif 189#endif
194#ifndef OPENSSL_NO_ENGINE 190#ifndef OPENSSL_NO_ENGINE
195 BIO_printf(bio_err," -engine e - use engine e, possibly a hardware device.\n"); 191 BIO_printf(bio_err, " -engine e - use engine e, possibly a hardware device.\n");
196#endif 192#endif
197 BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR); 193 BIO_printf(bio_err, " -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
198 BIO_printf(bio_err," - load the file (or the files in the directory) into\n"); 194 BIO_printf(bio_err, " - load the file (or the files in the directory) into\n");
199 BIO_printf(bio_err," the random number generator\n"); 195 BIO_printf(bio_err, " the random number generator\n");
200 BIO_printf(bio_err," dsaparam-file\n"); 196 BIO_printf(bio_err, " dsaparam-file\n");
201 BIO_printf(bio_err," - a DSA parameter file as generated by the dsaparam command\n"); 197 BIO_printf(bio_err, " - a DSA parameter file as generated by the dsaparam command\n");
202 goto end; 198 goto end;
203 } 199 }
204 200
205#ifndef OPENSSL_NO_ENGINE 201#ifndef OPENSSL_NO_ENGINE
206 setup_engine(bio_err, engine, 0); 202 setup_engine(bio_err, engine, 0);
207#endif 203#endif
208 204
209 if(!app_passwd(bio_err, NULL, passargout, NULL, &passout)) { 205 if (!app_passwd(bio_err, NULL, passargout, NULL, &passout)) {
210 BIO_printf(bio_err, "Error getting password\n"); 206 BIO_printf(bio_err, "Error getting password\n");
211 goto end; 207 goto end;
212 } 208 }
213 209
214 210
215 in=BIO_new(BIO_s_file()); 211 in = BIO_new(BIO_s_file());
216 if (!(BIO_read_filename(in,dsaparams))) 212 if (!(BIO_read_filename(in, dsaparams))) {
217 {
218 perror(dsaparams); 213 perror(dsaparams);
219 goto end; 214 goto end;
220 } 215 }
221 216
222 if ((dsa=PEM_read_bio_DSAparams(in,NULL,NULL,NULL)) == NULL) 217 if ((dsa = PEM_read_bio_DSAparams(in, NULL, NULL, NULL)) == NULL) {
223 { 218 BIO_printf(bio_err, "unable to load DSA parameter file\n");
224 BIO_printf(bio_err,"unable to load DSA parameter file\n");
225 goto end; 219 goto end;
226 } 220 }
227 BIO_free(in); 221 BIO_free(in);
228 in = NULL; 222 in = NULL;
229
230 out=BIO_new(BIO_s_file());
231 if (out == NULL) goto end;
232 223
233 if (outfile == NULL) 224 out = BIO_new(BIO_s_file());
234 { 225 if (out == NULL)
235 BIO_set_fp(out,stdout,BIO_NOCLOSE); 226 goto end;
236 } 227
237 else 228 if (outfile == NULL) {
238 { 229 BIO_set_fp(out, stdout, BIO_NOCLOSE);
239 if (BIO_write_filename(out,outfile) <= 0) 230 } else {
240 { 231 if (BIO_write_filename(out, outfile) <= 0) {
241 perror(outfile); 232 perror(outfile);
242 goto end; 233 goto end;
243 }
244 } 234 }
235 }
245 236
246 if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL) 237 if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL) {
247 { 238 BIO_printf(bio_err, "warning, not much extra random data, consider using the -rand option\n");
248 BIO_printf(bio_err,"warning, not much extra random data, consider using the -rand option\n"); 239 }
249 }
250 if (inrand != NULL) 240 if (inrand != NULL)
251 BIO_printf(bio_err,"%ld semi-random bytes loaded\n", 241 BIO_printf(bio_err, "%ld semi-random bytes loaded\n",
252 app_RAND_load_files(inrand)); 242 app_RAND_load_files(inrand));
253 243
254 BIO_printf(bio_err,"Generating DSA key, %d bits\n", 244 BIO_printf(bio_err, "Generating DSA key, %d bits\n",
255 BN_num_bits(dsa->p)); 245 BN_num_bits(dsa->p));
256 if (!DSA_generate_key(dsa)) goto end; 246 if (!DSA_generate_key(dsa))
247 goto end;
257 248
258 app_RAND_write_file(NULL, bio_err); 249 app_RAND_write_file(NULL, bio_err);
259 250
260 if (!PEM_write_bio_DSAPrivateKey(out,dsa,enc,NULL,0,NULL, passout)) 251 if (!PEM_write_bio_DSAPrivateKey(out, dsa, enc, NULL, 0, NULL, passout))
261 goto end; 252 goto end;
262 ret=0; 253 ret = 0;
263end: 254end:
264 if (ret != 0) 255 if (ret != 0)
265 ERR_print_errors(bio_err); 256 ERR_print_errors(bio_err);
266 if (in != NULL) BIO_free(in); 257 if (in != NULL)
267 if (out != NULL) BIO_free_all(out); 258 BIO_free(in);
268 if (dsa != NULL) DSA_free(dsa); 259 if (out != NULL)
269 if(passout) free(passout); 260 BIO_free_all(out);
261 if (dsa != NULL)
262 DSA_free(dsa);
263 if (passout)
264 free(passout);
270 apps_shutdown(); 265 apps_shutdown();
271 OPENSSL_EXIT(ret); 266 OPENSSL_EXIT(ret);
272 } 267}
273#else /* !OPENSSL_NO_DSA */ 268#else /* !OPENSSL_NO_DSA */
274 269
275# if PEDANTIC 270# if PEDANTIC
276static void *dummy=&dummy; 271static void *dummy = &dummy;
277# endif 272# endif
278 273
279#endif 274#endif
diff --git a/src/lib/libssl/src/apps/genpkey.c b/src/lib/libssl/src/apps/genpkey.c
index f6b23ac5a6..de375a571b 100644
--- a/src/lib/libssl/src/apps/genpkey.c
+++ b/src/lib/libssl/src/apps/genpkey.c
@@ -10,7 +10,7 @@
10 * are met: 10 * are met:
11 * 11 *
12 * 1. Redistributions of source code must retain the above copyright 12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer. 13 * notice, this list of conditions and the following disclaimer.
14 * 14 *
15 * 2. Redistributions in binary form must reproduce the above copyright 15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in 16 * notice, this list of conditions and the following disclaimer in
@@ -65,16 +65,17 @@
65#include <openssl/engine.h> 65#include <openssl/engine.h>
66#endif 66#endif
67 67
68static int init_keygen_file(BIO *err, EVP_PKEY_CTX **pctx, 68static int init_keygen_file(BIO *err, EVP_PKEY_CTX **pctx, const char *file,
69 const char *file, ENGINE *e); 69 ENGINE *e);
70static int genpkey_cb(EVP_PKEY_CTX *ctx); 70static int genpkey_cb(EVP_PKEY_CTX *ctx);
71 71
72#define PROG genpkey_main 72#define PROG genpkey_main
73 73
74int MAIN(int, char **); 74int MAIN(int, char **);
75 75
76int MAIN(int argc, char **argv) 76int
77 { 77MAIN(int argc, char **argv)
78{
78 ENGINE *e = NULL; 79 ENGINE *e = NULL;
79 char **args, *outfile = NULL; 80 char **args, *outfile = NULL;
80 char *passarg = NULL; 81 char *passarg = NULL;
@@ -82,7 +83,7 @@ int MAIN(int argc, char **argv)
82 const EVP_CIPHER *cipher = NULL; 83 const EVP_CIPHER *cipher = NULL;
83 int outformat; 84 int outformat;
84 int text = 0; 85 int text = 0;
85 EVP_PKEY *pkey=NULL; 86 EVP_PKEY *pkey = NULL;
86 EVP_PKEY_CTX *ctx = NULL; 87 EVP_PKEY_CTX *ctx = NULL;
87 char *pass = NULL; 88 char *pass = NULL;
88 int badarg = 0; 89 int badarg = 0;
@@ -91,42 +92,36 @@ int MAIN(int argc, char **argv)
91 int do_param = 0; 92 int do_param = 0;
92 93
93 if (bio_err == NULL) 94 if (bio_err == NULL)
94 bio_err = BIO_new_fp (stderr, BIO_NOCLOSE); 95 bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
95 96
96 if (!load_config(bio_err, NULL)) 97 if (!load_config(bio_err, NULL))
97 goto end; 98 goto end;
98 99
99 outformat=FORMAT_PEM; 100 outformat = FORMAT_PEM;
100 101
101 ERR_load_crypto_strings(); 102 ERR_load_crypto_strings();
102 OpenSSL_add_all_algorithms(); 103 OpenSSL_add_all_algorithms();
103 args = argv + 1; 104 args = argv + 1;
104 while (!badarg && *args && *args[0] == '-') 105 while (!badarg && *args && *args[0] == '-') {
105 { 106 if (!strcmp(*args, "-outform")) {
106 if (!strcmp(*args,"-outform")) 107 if (args[1]) {
107 {
108 if (args[1])
109 {
110 args++; 108 args++;
111 outformat=str2fmt(*args); 109 outformat = str2fmt(*args);
112 } 110 } else
113 else badarg = 1; 111 badarg = 1;
114 } 112 } else if (!strcmp(*args, "-pass")) {
115 else if (!strcmp(*args,"-pass")) 113 if (!args[1])
116 { 114 goto bad;
117 if (!args[1]) goto bad;
118 passarg= *(++args); 115 passarg= *(++args);
119 } 116 }
120#ifndef OPENSSL_NO_ENGINE 117#ifndef OPENSSL_NO_ENGINE
121 else if (strcmp(*args,"-engine") == 0) 118 else if (strcmp(*args, "-engine") == 0) {
122 {
123 if (!args[1]) 119 if (!args[1])
124 goto bad; 120 goto bad;
125 e = setup_engine(bio_err, *(++args), 0); 121 e = setup_engine(bio_err, *(++args), 0);
126 } 122 }
127#endif 123#endif
128 else if (!strcmp (*args, "-paramfile")) 124 else if (!strcmp (*args, "-paramfile")) {
129 {
130 if (!args[1]) 125 if (!args[1])
131 goto bad; 126 goto bad;
132 args++; 127 args++;
@@ -134,68 +129,52 @@ int MAIN(int argc, char **argv)
134 goto bad; 129 goto bad;
135 if (!init_keygen_file(bio_err, &ctx, *args, e)) 130 if (!init_keygen_file(bio_err, &ctx, *args, e))
136 goto end; 131 goto end;
137 } 132 } else if (!strcmp (*args, "-out")) {
138 else if (!strcmp (*args, "-out")) 133 if (args[1]) {
139 {
140 if (args[1])
141 {
142 args++; 134 args++;
143 outfile = *args; 135 outfile = *args;
144 } 136 } else
145 else badarg = 1; 137 badarg = 1;
146 } 138 } else if (strcmp(*args, "-algorithm") == 0) {
147 else if (strcmp(*args,"-algorithm") == 0)
148 {
149 if (!args[1]) 139 if (!args[1])
150 goto bad; 140 goto bad;
151 if (!init_gen_str(bio_err, &ctx, *(++args),e, do_param)) 141 if (!init_gen_str(bio_err, &ctx, *(++args), e, do_param))
152 goto end; 142 goto end;
153 } 143 } else if (strcmp(*args, "-pkeyopt") == 0) {
154 else if (strcmp(*args,"-pkeyopt") == 0)
155 {
156 if (!args[1]) 144 if (!args[1])
157 goto bad; 145 goto bad;
158 if (!ctx) 146 if (!ctx) {
159 {
160 BIO_puts(bio_err, "No keytype specified\n"); 147 BIO_puts(bio_err, "No keytype specified\n");
161 goto bad; 148 goto bad;
162 } 149 } else if (pkey_ctrl_string(ctx, *(++args)) <= 0) {
163 else if (pkey_ctrl_string(ctx, *(++args)) <= 0)
164 {
165 BIO_puts(bio_err, "parameter setting error\n"); 150 BIO_puts(bio_err, "parameter setting error\n");
166 ERR_print_errors(bio_err); 151 ERR_print_errors(bio_err);
167 goto end; 152 goto end;
168 }
169 } 153 }
170 else if (strcmp(*args,"-genparam") == 0) 154 } else if (strcmp(*args, "-genparam") == 0) {
171 {
172 if (ctx) 155 if (ctx)
173 goto bad; 156 goto bad;
174 do_param = 1; 157 do_param = 1;
175 } 158 } else if (strcmp(*args, "-text") == 0)
176 else if (strcmp(*args,"-text") == 0) 159 text = 1;
177 text=1; 160 else {
178 else
179 {
180 cipher = EVP_get_cipherbyname(*args + 1); 161 cipher = EVP_get_cipherbyname(*args + 1);
181 if (!cipher) 162 if (!cipher) {
182 {
183 BIO_printf(bio_err, "Unknown cipher %s\n", 163 BIO_printf(bio_err, "Unknown cipher %s\n",
184 *args + 1); 164 *args + 1);
185 badarg = 1; 165 badarg = 1;
186 } 166 }
187 if (do_param == 1) 167 if (do_param == 1)
188 badarg = 1; 168 badarg = 1;
189 }
190 args++;
191 } 169 }
170 args++;
171 }
192 172
193 if (!ctx) 173 if (!ctx)
194 badarg = 1; 174 badarg = 1;
195 175
196 if (badarg) 176 if (badarg) {
197 { 177bad:
198 bad:
199 BIO_printf(bio_err, "Usage: genpkey [options]\n"); 178 BIO_printf(bio_err, "Usage: genpkey [options]\n");
200 BIO_printf(bio_err, "where options may be\n"); 179 BIO_printf(bio_err, "where options may be\n");
201 BIO_printf(bio_err, "-out file output file\n"); 180 BIO_printf(bio_err, "-out file output file\n");
@@ -208,91 +187,77 @@ int MAIN(int argc, char **argv)
208 BIO_printf(bio_err, "-paramfile file parameters file\n"); 187 BIO_printf(bio_err, "-paramfile file parameters file\n");
209 BIO_printf(bio_err, "-algorithm alg the public key algorithm\n"); 188 BIO_printf(bio_err, "-algorithm alg the public key algorithm\n");
210 BIO_printf(bio_err, "-pkeyopt opt:value set the public key algorithm option <opt>\n" 189 BIO_printf(bio_err, "-pkeyopt opt:value set the public key algorithm option <opt>\n"
211 " to value <value>\n"); 190 " to value <value>\n");
212 BIO_printf(bio_err, "-genparam generate parameters, not key\n"); 191 BIO_printf(bio_err, "-genparam generate parameters, not key\n");
213 BIO_printf(bio_err, "-text print the in text\n"); 192 BIO_printf(bio_err, "-text print the in text\n");
214 BIO_printf(bio_err, "NB: options order may be important! See the manual page.\n"); 193 BIO_printf(bio_err, "NB: options order may be important! See the manual page.\n");
215 goto end; 194 goto end;
216 } 195 }
217 196
218 if (!app_passwd(bio_err, passarg, NULL, &pass, NULL)) 197 if (!app_passwd(bio_err, passarg, NULL, &pass, NULL)) {
219 {
220 BIO_puts(bio_err, "Error getting password\n"); 198 BIO_puts(bio_err, "Error getting password\n");
221 goto end; 199 goto end;
222 } 200 }
223 201
224 if (outfile) 202 if (outfile) {
225 { 203 if (!(out = BIO_new_file (outfile, "wb"))) {
226 if (!(out = BIO_new_file (outfile, "wb")))
227 {
228 BIO_printf(bio_err, 204 BIO_printf(bio_err,
229 "Can't open output file %s\n", outfile); 205 "Can't open output file %s\n", outfile);
230 goto end; 206 goto end;
231 }
232 } 207 }
233 else 208 } else {
234 {
235 out = BIO_new_fp (stdout, BIO_NOCLOSE); 209 out = BIO_new_fp (stdout, BIO_NOCLOSE);
236 } 210 }
237 211
238 EVP_PKEY_CTX_set_cb(ctx, genpkey_cb); 212 EVP_PKEY_CTX_set_cb(ctx, genpkey_cb);
239 EVP_PKEY_CTX_set_app_data(ctx, bio_err); 213 EVP_PKEY_CTX_set_app_data(ctx, bio_err);
240 214
241 if (do_param) 215 if (do_param) {
242 { 216 if (EVP_PKEY_paramgen(ctx, &pkey) <= 0) {
243 if (EVP_PKEY_paramgen(ctx, &pkey) <= 0)
244 {
245 BIO_puts(bio_err, "Error generating parameters\n"); 217 BIO_puts(bio_err, "Error generating parameters\n");
246 ERR_print_errors(bio_err); 218 ERR_print_errors(bio_err);
247 goto end; 219 goto end;
248 }
249 } 220 }
250 else 221 } else {
251 { 222 if (EVP_PKEY_keygen(ctx, &pkey) <= 0) {
252 if (EVP_PKEY_keygen(ctx, &pkey) <= 0)
253 {
254 BIO_puts(bio_err, "Error generating key\n"); 223 BIO_puts(bio_err, "Error generating key\n");
255 ERR_print_errors(bio_err); 224 ERR_print_errors(bio_err);
256 goto end; 225 goto end;
257 }
258 } 226 }
227 }
259 228
260 if (do_param) 229 if (do_param)
261 rv = PEM_write_bio_Parameters(out, pkey); 230 rv = PEM_write_bio_Parameters(out, pkey);
262 else if (outformat == FORMAT_PEM) 231 else if (outformat == FORMAT_PEM)
263 rv = PEM_write_bio_PrivateKey(out, pkey, cipher, NULL, 0, 232 rv = PEM_write_bio_PrivateKey(out, pkey, cipher, NULL, 0,
264 NULL, pass); 233 NULL, pass);
265 else if (outformat == FORMAT_ASN1) 234 else if (outformat == FORMAT_ASN1)
266 rv = i2d_PrivateKey_bio(out, pkey); 235 rv = i2d_PrivateKey_bio(out, pkey);
267 else 236 else {
268 {
269 BIO_printf(bio_err, "Bad format specified for key\n"); 237 BIO_printf(bio_err, "Bad format specified for key\n");
270 goto end; 238 goto end;
271 } 239 }
272 240
273 if (rv <= 0) 241 if (rv <= 0) {
274 {
275 BIO_puts(bio_err, "Error writing key\n"); 242 BIO_puts(bio_err, "Error writing key\n");
276 ERR_print_errors(bio_err); 243 ERR_print_errors(bio_err);
277 } 244 }
278 245
279 if (text) 246 if (text) {
280 {
281 if (do_param) 247 if (do_param)
282 rv = EVP_PKEY_print_params(out, pkey, 0, NULL); 248 rv = EVP_PKEY_print_params(out, pkey, 0, NULL);
283 else 249 else
284 rv = EVP_PKEY_print_private(out, pkey, 0, NULL); 250 rv = EVP_PKEY_print_private(out, pkey, 0, NULL);
285 251
286 if (rv <= 0) 252 if (rv <= 0) {
287 {
288 BIO_puts(bio_err, "Error printing key\n"); 253 BIO_puts(bio_err, "Error printing key\n");
289 ERR_print_errors(bio_err); 254 ERR_print_errors(bio_err);
290 }
291 } 255 }
256 }
292 257
293 ret = 0; 258 ret = 0;
294 259
295 end: 260end:
296 if (pkey) 261 if (pkey)
297 EVP_PKEY_free(pkey); 262 EVP_PKEY_free(pkey);
298 if (ctx) 263 if (ctx)
@@ -304,35 +269,33 @@ int MAIN(int argc, char **argv)
304 free(pass); 269 free(pass);
305 270
306 return ret; 271 return ret;
307 } 272}
308 273
309static int init_keygen_file(BIO *err, EVP_PKEY_CTX **pctx, 274static int
310 const char *file, ENGINE *e) 275init_keygen_file(BIO *err, EVP_PKEY_CTX **pctx,
311 { 276 const char *file, ENGINE *e)
277{
312 BIO *pbio; 278 BIO *pbio;
313 EVP_PKEY *pkey = NULL; 279 EVP_PKEY *pkey = NULL;
314 EVP_PKEY_CTX *ctx = NULL; 280 EVP_PKEY_CTX *ctx = NULL;
315 if (*pctx) 281 if (*pctx) {
316 {
317 BIO_puts(err, "Parameters already set!\n"); 282 BIO_puts(err, "Parameters already set!\n");
318 return 0; 283 return 0;
319 } 284 }
320 285
321 pbio = BIO_new_file(file, "r"); 286 pbio = BIO_new_file(file, "r");
322 if (!pbio) 287 if (!pbio) {
323 {
324 BIO_printf(err, "Can't open parameter file %s\n", file); 288 BIO_printf(err, "Can't open parameter file %s\n", file);
325 return 0; 289 return 0;
326 } 290 }
327 291
328 pkey = PEM_read_bio_Parameters(pbio, NULL); 292 pkey = PEM_read_bio_Parameters(pbio, NULL);
329 BIO_free(pbio); 293 BIO_free(pbio);
330 294
331 if (!pkey) 295 if (!pkey) {
332 {
333 BIO_printf(bio_err, "Error reading parameter file %s\n", file); 296 BIO_printf(bio_err, "Error reading parameter file %s\n", file);
334 return 0; 297 return 0;
335 } 298 }
336 299
337 ctx = EVP_PKEY_CTX_new(pkey, e); 300 ctx = EVP_PKEY_CTX_new(pkey, e);
338 if (!ctx) 301 if (!ctx)
@@ -343,7 +306,7 @@ static int init_keygen_file(BIO *err, EVP_PKEY_CTX **pctx,
343 *pctx = ctx; 306 *pctx = ctx;
344 return 1; 307 return 1;
345 308
346 err: 309err:
347 BIO_puts(err, "Error initializing context\n"); 310 BIO_puts(err, "Error initializing context\n");
348 ERR_print_errors(err); 311 ERR_print_errors(err);
349 if (ctx) 312 if (ctx)
@@ -352,21 +315,21 @@ static int init_keygen_file(BIO *err, EVP_PKEY_CTX **pctx,
352 EVP_PKEY_free(pkey); 315 EVP_PKEY_free(pkey);
353 return 0; 316 return 0;
354 317
355 } 318}
356 319
357int init_gen_str(BIO *err, EVP_PKEY_CTX **pctx, 320int
358 const char *algname, ENGINE *e, int do_param) 321init_gen_str(BIO *err, EVP_PKEY_CTX **pctx,
359 { 322 const char *algname, ENGINE *e, int do_param)
323{
360 EVP_PKEY_CTX *ctx = NULL; 324 EVP_PKEY_CTX *ctx = NULL;
361 const EVP_PKEY_ASN1_METHOD *ameth; 325 const EVP_PKEY_ASN1_METHOD *ameth;
362 ENGINE *tmpeng = NULL; 326 ENGINE *tmpeng = NULL;
363 int pkey_id; 327 int pkey_id;
364 328
365 if (*pctx) 329 if (*pctx) {
366 {
367 BIO_puts(err, "Algorithm already set!\n"); 330 BIO_puts(err, "Algorithm already set!\n");
368 return 0; 331 return 0;
369 } 332 }
370 333
371 ameth = EVP_PKEY_asn1_find_str(&tmpeng, algname, -1); 334 ameth = EVP_PKEY_asn1_find_str(&tmpeng, algname, -1);
372 335
@@ -375,11 +338,10 @@ int init_gen_str(BIO *err, EVP_PKEY_CTX **pctx,
375 ameth = ENGINE_get_pkey_asn1_meth_str(e, algname, -1); 338 ameth = ENGINE_get_pkey_asn1_meth_str(e, algname, -1);
376#endif 339#endif
377 340
378 if (!ameth) 341 if (!ameth) {
379 {
380 BIO_printf(bio_err, "Algorithm %s not found\n", algname); 342 BIO_printf(bio_err, "Algorithm %s not found\n", algname);
381 return 0; 343 return 0;
382 } 344 }
383 345
384 ERR_clear_error(); 346 ERR_clear_error();
385 347
@@ -392,43 +354,45 @@ int init_gen_str(BIO *err, EVP_PKEY_CTX **pctx,
392 354
393 if (!ctx) 355 if (!ctx)
394 goto err; 356 goto err;
395 if (do_param) 357 if (do_param) {
396 {
397 if (EVP_PKEY_paramgen_init(ctx) <= 0) 358 if (EVP_PKEY_paramgen_init(ctx) <= 0)
398 goto err; 359 goto err;
399 } 360 } else {
400 else
401 {
402 if (EVP_PKEY_keygen_init(ctx) <= 0) 361 if (EVP_PKEY_keygen_init(ctx) <= 0)
403 goto err; 362 goto err;
404 } 363 }
405 364
406 *pctx = ctx; 365 *pctx = ctx;
407 return 1; 366 return 1;
408 367
409 err: 368err:
410 BIO_printf(err, "Error initializing %s context\n", algname); 369 BIO_printf(err, "Error initializing %s context\n", algname);
411 ERR_print_errors(err); 370 ERR_print_errors(err);
412 if (ctx) 371 if (ctx)
413 EVP_PKEY_CTX_free(ctx); 372 EVP_PKEY_CTX_free(ctx);
414 return 0; 373 return 0;
415 374
416 } 375}
417 376
418static int genpkey_cb(EVP_PKEY_CTX *ctx) 377static int
419 { 378genpkey_cb(EVP_PKEY_CTX *ctx)
420 char c='*'; 379{
380 char c = '*';
421 BIO *b = EVP_PKEY_CTX_get_app_data(ctx); 381 BIO *b = EVP_PKEY_CTX_get_app_data(ctx);
422 int p; 382 int p;
423 p = EVP_PKEY_CTX_get_keygen_info(ctx, 0); 383 p = EVP_PKEY_CTX_get_keygen_info(ctx, 0);
424 if (p == 0) c='.'; 384 if (p == 0)
425 if (p == 1) c='+'; 385 c = '.';
426 if (p == 2) c='*'; 386 if (p == 1)
427 if (p == 3) c='\n'; 387 c = '+';
428 BIO_write(b,&c,1); 388 if (p == 2)
389 c = '*';
390 if (p == 3)
391 c = '\n';
392 BIO_write(b, &c, 1);
429 (void)BIO_flush(b); 393 (void)BIO_flush(b);
430#ifdef LINT 394#ifdef LINT
431 p=n; 395 p = n;
432#endif 396#endif
433 return 1; 397 return 1;
434 } 398}
diff --git a/src/lib/libssl/src/apps/genrsa.c b/src/lib/libssl/src/apps/genrsa.c
index 1be17d9ac6..65e136a8d2 100644
--- a/src/lib/libssl/src/apps/genrsa.c
+++ b/src/lib/libssl/src/apps/genrsa.c
@@ -5,21 +5,21 @@
5 * This package is an SSL implementation written 5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com). 6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL. 7 * The implementation was written so as to conform with Netscapes SSL.
8 * 8 *
9 * This library is free for commercial and non-commercial use as long as 9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions 10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA, 11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation 12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13 * included with this distribution is covered by the same copyright terms 13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com). 14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 * 15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in 16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed. 17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution 18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used. 19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or 20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package. 21 * in documentation (online or textual) provided with the package.
22 * 22 *
23 * Redistribution and use in source and binary forms, with or without 23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions 24 * modification, are permitted provided that the following conditions
25 * are met: 25 * are met:
@@ -34,10 +34,10 @@
34 * Eric Young (eay@cryptsoft.com)" 34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library 35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-). 36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from 37 * 4. If you include any Windows specific code (or a derivative thereof) from
38 * the apps directory (application code) you must include an acknowledgement: 38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 * 40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -49,7 +49,7 @@
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE. 51 * SUCH DAMAGE.
52 * 52 *
53 * The licence and distribution terms for any publically available version or 53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed. i.e. this code cannot simply be 54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence 55 * copied and put under another distribution licence
@@ -86,179 +86,171 @@ static int genrsa_cb(int p, int n, BN_GENCB *cb);
86 86
87int MAIN(int, char **); 87int MAIN(int, char **);
88 88
89int MAIN(int argc, char **argv) 89int
90 { 90MAIN(int argc, char **argv)
91{
91 BN_GENCB cb; 92 BN_GENCB cb;
92#ifndef OPENSSL_NO_ENGINE 93#ifndef OPENSSL_NO_ENGINE
93 ENGINE *e = NULL; 94 ENGINE *e = NULL;
94#endif 95#endif
95 int ret=1; 96 int ret = 1;
96 int i,num=DEFBITS; 97 int i, num = DEFBITS;
97 long l; 98 long l;
98 const EVP_CIPHER *enc=NULL; 99 const EVP_CIPHER *enc = NULL;
99 unsigned long f4=RSA_F4; 100 unsigned long f4 = RSA_F4;
100 char *outfile=NULL; 101 char *outfile = NULL;
101 char *passargout = NULL, *passout = NULL; 102 char *passargout = NULL, *passout = NULL;
102#ifndef OPENSSL_NO_ENGINE 103#ifndef OPENSSL_NO_ENGINE
103 char *engine=NULL; 104 char *engine = NULL;
104#endif 105#endif
105 char *inrand=NULL; 106 char *inrand = NULL;
106 BIO *out=NULL; 107 BIO *out = NULL;
107 BIGNUM *bn = BN_new(); 108 BIGNUM *bn = BN_new();
108 RSA *rsa = NULL; 109 RSA *rsa = NULL;
109 110
110 if(!bn) goto err; 111 if (!bn) goto err;
111 112
112 apps_startup(); 113 apps_startup();
113 BN_GENCB_set(&cb, genrsa_cb, bio_err); 114 BN_GENCB_set(&cb, genrsa_cb, bio_err);
114 115
115 if (bio_err == NULL) 116 if (bio_err == NULL)
116 if ((bio_err=BIO_new(BIO_s_file())) != NULL) 117 if ((bio_err = BIO_new(BIO_s_file())) != NULL)
117 BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); 118 BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT);
118 119
119 if (!load_config(bio_err, NULL)) 120 if (!load_config(bio_err, NULL))
120 goto err; 121 goto err;
121 if ((out=BIO_new(BIO_s_file())) == NULL) 122 if ((out = BIO_new(BIO_s_file())) == NULL) {
122 { 123 BIO_printf(bio_err, "unable to create BIO for output\n");
123 BIO_printf(bio_err,"unable to create BIO for output\n");
124 goto err; 124 goto err;
125 } 125 }
126 126
127 argv++; 127 argv++;
128 argc--; 128 argc--;
129 for (;;) 129 for (;;) {
130 { 130 if (argc <= 0)
131 if (argc <= 0) break; 131 break;
132 if (strcmp(*argv,"-out") == 0) 132 if (strcmp(*argv, "-out") == 0) {
133 { 133 if (--argc < 1)
134 if (--argc < 1) goto bad; 134 goto bad;
135 outfile= *(++argv); 135 outfile= *(++argv);
136 } 136 } else if (strcmp(*argv, "-3") == 0)
137 else if (strcmp(*argv,"-3") == 0) 137 f4 = 3;
138 f4=3; 138 else if (strcmp(*argv, "-F4") == 0 || strcmp(*argv,"-f4") == 0)
139 else if (strcmp(*argv,"-F4") == 0 || strcmp(*argv,"-f4") == 0) 139 f4 = RSA_F4;
140 f4=RSA_F4;
141#ifndef OPENSSL_NO_ENGINE 140#ifndef OPENSSL_NO_ENGINE
142 else if (strcmp(*argv,"-engine") == 0) 141 else if (strcmp(*argv, "-engine") == 0) {
143 { 142 if (--argc < 1)
144 if (--argc < 1) goto bad; 143 goto bad;
145 engine= *(++argv); 144 engine= *(++argv);
146 } 145 }
147#endif 146#endif
148 else if (strcmp(*argv,"-rand") == 0) 147 else if (strcmp(*argv, "-rand") == 0) {
149 { 148 if (--argc < 1)
150 if (--argc < 1) goto bad; 149 goto bad;
151 inrand= *(++argv); 150 inrand= *(++argv);
152 } 151 }
153#ifndef OPENSSL_NO_DES 152#ifndef OPENSSL_NO_DES
154 else if (strcmp(*argv,"-des") == 0) 153 else if (strcmp(*argv, "-des") == 0)
155 enc=EVP_des_cbc(); 154 enc = EVP_des_cbc();
156 else if (strcmp(*argv,"-des3") == 0) 155 else if (strcmp(*argv, "-des3") == 0)
157 enc=EVP_des_ede3_cbc(); 156 enc = EVP_des_ede3_cbc();
158#endif 157#endif
159#ifndef OPENSSL_NO_IDEA 158#ifndef OPENSSL_NO_IDEA
160 else if (strcmp(*argv,"-idea") == 0) 159 else if (strcmp(*argv, "-idea") == 0)
161 enc=EVP_idea_cbc(); 160 enc = EVP_idea_cbc();
162#endif 161#endif
163#ifndef OPENSSL_NO_SEED 162#ifndef OPENSSL_NO_SEED
164 else if (strcmp(*argv,"-seed") == 0) 163 else if (strcmp(*argv, "-seed") == 0)
165 enc=EVP_seed_cbc(); 164 enc = EVP_seed_cbc();
166#endif 165#endif
167#ifndef OPENSSL_NO_AES 166#ifndef OPENSSL_NO_AES
168 else if (strcmp(*argv,"-aes128") == 0) 167 else if (strcmp(*argv, "-aes128") == 0)
169 enc=EVP_aes_128_cbc(); 168 enc = EVP_aes_128_cbc();
170 else if (strcmp(*argv,"-aes192") == 0) 169 else if (strcmp(*argv, "-aes192") == 0)
171 enc=EVP_aes_192_cbc(); 170 enc = EVP_aes_192_cbc();
172 else if (strcmp(*argv,"-aes256") == 0) 171 else if (strcmp(*argv, "-aes256") == 0)
173 enc=EVP_aes_256_cbc(); 172 enc = EVP_aes_256_cbc();
174#endif 173#endif
175#ifndef OPENSSL_NO_CAMELLIA 174#ifndef OPENSSL_NO_CAMELLIA
176 else if (strcmp(*argv,"-camellia128") == 0) 175 else if (strcmp(*argv, "-camellia128") == 0)
177 enc=EVP_camellia_128_cbc(); 176 enc = EVP_camellia_128_cbc();
178 else if (strcmp(*argv,"-camellia192") == 0) 177 else if (strcmp(*argv, "-camellia192") == 0)
179 enc=EVP_camellia_192_cbc(); 178 enc = EVP_camellia_192_cbc();
180 else if (strcmp(*argv,"-camellia256") == 0) 179 else if (strcmp(*argv, "-camellia256") == 0)
181 enc=EVP_camellia_256_cbc(); 180 enc = EVP_camellia_256_cbc();
182#endif 181#endif
183 else if (strcmp(*argv,"-passout") == 0) 182 else if (strcmp(*argv, "-passout") == 0) {
184 { 183 if (--argc < 1)
185 if (--argc < 1) goto bad; 184 goto bad;
186 passargout= *(++argv); 185 passargout= *(++argv);
187 } 186 } else
188 else
189 break; 187 break;
190 argv++; 188 argv++;
191 argc--; 189 argc--;
192 } 190 }
193 if ((argc >= 1) && ((sscanf(*argv,"%d",&num) == 0) || (num < 0))) 191 if ((argc >= 1) && ((sscanf(*argv, "%d",&num) == 0) || (num < 0))) {
194 {
195bad: 192bad:
196 BIO_printf(bio_err,"usage: genrsa [args] [numbits]\n"); 193 BIO_printf(bio_err, "usage: genrsa [args] [numbits]\n");
197 BIO_printf(bio_err," -des encrypt the generated key with DES in cbc mode\n"); 194 BIO_printf(bio_err, " -des encrypt the generated key with DES in cbc mode\n");
198 BIO_printf(bio_err," -des3 encrypt the generated key with DES in ede cbc mode (168 bit key)\n"); 195 BIO_printf(bio_err, " -des3 encrypt the generated key with DES in ede cbc mode (168 bit key)\n");
199#ifndef OPENSSL_NO_IDEA 196#ifndef OPENSSL_NO_IDEA
200 BIO_printf(bio_err," -idea encrypt the generated key with IDEA in cbc mode\n"); 197 BIO_printf(bio_err, " -idea encrypt the generated key with IDEA in cbc mode\n");
201#endif 198#endif
202#ifndef OPENSSL_NO_SEED 199#ifndef OPENSSL_NO_SEED
203 BIO_printf(bio_err," -seed\n"); 200 BIO_printf(bio_err, " -seed\n");
204 BIO_printf(bio_err," encrypt PEM output with cbc seed\n"); 201 BIO_printf(bio_err, " encrypt PEM output with cbc seed\n");
205#endif 202#endif
206#ifndef OPENSSL_NO_AES 203#ifndef OPENSSL_NO_AES
207 BIO_printf(bio_err," -aes128, -aes192, -aes256\n"); 204 BIO_printf(bio_err, " -aes128, -aes192, -aes256\n");
208 BIO_printf(bio_err," encrypt PEM output with cbc aes\n"); 205 BIO_printf(bio_err, " encrypt PEM output with cbc aes\n");
209#endif 206#endif
210#ifndef OPENSSL_NO_CAMELLIA 207#ifndef OPENSSL_NO_CAMELLIA
211 BIO_printf(bio_err," -camellia128, -camellia192, -camellia256\n"); 208 BIO_printf(bio_err, " -camellia128, -camellia192, -camellia256\n");
212 BIO_printf(bio_err," encrypt PEM output with cbc camellia\n"); 209 BIO_printf(bio_err, " encrypt PEM output with cbc camellia\n");
213#endif 210#endif
214 BIO_printf(bio_err," -out file output the key to 'file\n"); 211 BIO_printf(bio_err, " -out file output the key to 'file\n");
215 BIO_printf(bio_err," -passout arg output file pass phrase source\n"); 212 BIO_printf(bio_err, " -passout arg output file pass phrase source\n");
216 BIO_printf(bio_err," -f4 use F4 (0x10001) for the E value\n"); 213 BIO_printf(bio_err, " -f4 use F4 (0x10001) for the E value\n");
217 BIO_printf(bio_err," -3 use 3 for the E value\n"); 214 BIO_printf(bio_err, " -3 use 3 for the E value\n");
218#ifndef OPENSSL_NO_ENGINE 215#ifndef OPENSSL_NO_ENGINE
219 BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n"); 216 BIO_printf(bio_err, " -engine e use engine e, possibly a hardware device.\n");
220#endif 217#endif
221 BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR); 218 BIO_printf(bio_err, " -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
222 BIO_printf(bio_err," load the file (or the files in the directory) into\n"); 219 BIO_printf(bio_err, " load the file (or the files in the directory) into\n");
223 BIO_printf(bio_err," the random number generator\n"); 220 BIO_printf(bio_err, " the random number generator\n");
224 goto err; 221 goto err;
225 } 222 }
226 223
227 ERR_load_crypto_strings(); 224 ERR_load_crypto_strings();
228 225
229 if(!app_passwd(bio_err, NULL, passargout, NULL, &passout)) { 226 if (!app_passwd(bio_err, NULL, passargout, NULL, &passout)) {
230 BIO_printf(bio_err, "Error getting password\n"); 227 BIO_printf(bio_err, "Error getting password\n");
231 goto err; 228 goto err;
232 } 229 }
233 230
234#ifndef OPENSSL_NO_ENGINE 231#ifndef OPENSSL_NO_ENGINE
235 e = setup_engine(bio_err, engine, 0); 232 e = setup_engine(bio_err, engine, 0);
236#endif 233#endif
237 234
238 if (outfile == NULL) 235 if (outfile == NULL) {
239 { 236 BIO_set_fp(out, stdout, BIO_NOCLOSE);
240 BIO_set_fp(out,stdout,BIO_NOCLOSE); 237 } else {
241 } 238 if (BIO_write_filename(out, outfile) <= 0) {
242 else
243 {
244 if (BIO_write_filename(out,outfile) <= 0)
245 {
246 perror(outfile); 239 perror(outfile);
247 goto err; 240 goto err;
248 }
249 } 241 }
242 }
250 243
251 if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL 244 if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL &&
252 && !RAND_status()) 245 !RAND_status()) {
253 { 246 BIO_printf(bio_err, "warning, not much extra random data, consider using the -rand option\n");
254 BIO_printf(bio_err,"warning, not much extra random data, consider using the -rand option\n"); 247 }
255 }
256 if (inrand != NULL) 248 if (inrand != NULL)
257 BIO_printf(bio_err,"%ld semi-random bytes loaded\n", 249 BIO_printf(bio_err, "%ld semi-random bytes loaded\n",
258 app_RAND_load_files(inrand)); 250 app_RAND_load_files(inrand));
259 251
260 BIO_printf(bio_err,"Generating RSA private key, %d bit long modulus\n", 252 BIO_printf(bio_err, "Generating RSA private key, %d bit long modulus\n",
261 num); 253 num);
262#ifdef OPENSSL_NO_ENGINE 254#ifdef OPENSSL_NO_ENGINE
263 rsa = RSA_new(); 255 rsa = RSA_new();
264#else 256#else
@@ -267,63 +259,70 @@ bad:
267 if (!rsa) 259 if (!rsa)
268 goto err; 260 goto err;
269 261
270 if(!BN_set_word(bn, f4) || !RSA_generate_key_ex(rsa, num, bn, &cb)) 262 if (!BN_set_word(bn, f4) || !RSA_generate_key_ex(rsa, num, bn, &cb))
271 goto err; 263 goto err;
272 264
273 app_RAND_write_file(NULL, bio_err); 265 app_RAND_write_file(NULL, bio_err);
274 266
275 /* We need to do the following for when the base number size is < 267 /* We need to do the following for when the base number size is <
276 * long, esp windows 3.1 :-(. */ 268 * long, esp windows 3.1 :-(. */
277 l=0L; 269 l = 0L;
278 for (i=0; i<rsa->e->top; i++) 270 for (i = 0; i < rsa->e->top; i++) {
279 {
280#ifndef SIXTY_FOUR_BIT 271#ifndef SIXTY_FOUR_BIT
281 l<<=BN_BITS4; 272 l<<=BN_BITS4;
282 l<<=BN_BITS4; 273 l<<=BN_BITS4;
283#endif 274#endif
284 l+=rsa->e->d[i]; 275 l += rsa->e->d[i];
285 } 276 }
286 BIO_printf(bio_err,"e is %ld (0x%lX)\n",l,l); 277 BIO_printf(bio_err, "e is %ld (0x%lX)\n",l,l);
287 { 278 {
288 PW_CB_DATA cb_data; 279 PW_CB_DATA cb_data;
289 cb_data.password = passout; 280 cb_data.password = passout;
290 cb_data.prompt_info = outfile; 281 cb_data.prompt_info = outfile;
291 if (!PEM_write_bio_RSAPrivateKey(out,rsa,enc,NULL,0, 282 if (!PEM_write_bio_RSAPrivateKey(out, rsa, enc, NULL, 0,
292 (pem_password_cb *)password_callback,&cb_data)) 283 (pem_password_cb *)password_callback, &cb_data))
293 goto err; 284 goto err;
294 } 285 }
295 286
296 ret=0; 287 ret = 0;
297err: 288err:
298 if (bn) BN_free(bn); 289 if (bn)
299 if (rsa) RSA_free(rsa); 290 BN_free(bn);
300 if (out) BIO_free_all(out); 291 if (rsa)
301 if(passout) free(passout); 292 RSA_free(rsa);
302 if (ret != 0) 293 if (out)
303 ERR_print_errors(bio_err); 294 BIO_free_all(out);
295 if (passout) free(passout);
296 if (ret != 0)
297 ERR_print_errors(bio_err);
304 apps_shutdown(); 298 apps_shutdown();
305 OPENSSL_EXIT(ret); 299 OPENSSL_EXIT(ret);
306 } 300}
307 301
308static int genrsa_cb(int p, int n, BN_GENCB *cb) 302static int
309 { 303genrsa_cb(int p, int n, BN_GENCB *cb)
310 char c='*'; 304{
305 char c = '*';
311 306
312 if (p == 0) c='.'; 307 if (p == 0)
313 if (p == 1) c='+'; 308 c = '.';
314 if (p == 2) c='*'; 309 if (p == 1)
315 if (p == 3) c='\n'; 310 c = '+';
316 BIO_write(cb->arg,&c,1); 311 if (p == 2)
312 c = '*';
313 if (p == 3)
314 c = '\n';
315 BIO_write(cb->arg, &c, 1);
317 (void)BIO_flush(cb->arg); 316 (void)BIO_flush(cb->arg);
318#ifdef LINT 317#ifdef LINT
319 p=n; 318 p = n;
320#endif 319#endif
321 return 1; 320 return 1;
322 } 321}
323#else /* !OPENSSL_NO_RSA */ 322#else /* !OPENSSL_NO_RSA */
324 323
325# if PEDANTIC 324# if PEDANTIC
326static void *dummy=&dummy; 325static void *dummy = &dummy;
327# endif 326# endif
328 327
329#endif 328#endif