summaryrefslogtreecommitdiff
path: root/src/usr.bin/openssl/pkcs8.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr.bin/openssl/pkcs8.c')
-rw-r--r--src/usr.bin/openssl/pkcs8.c92
1 files changed, 46 insertions, 46 deletions
diff --git a/src/usr.bin/openssl/pkcs8.c b/src/usr.bin/openssl/pkcs8.c
index ea12230006..d78202e03f 100644
--- a/src/usr.bin/openssl/pkcs8.c
+++ b/src/usr.bin/openssl/pkcs8.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: pkcs8.c,v 1.15 2022/11/11 17:07:39 joshua Exp $ */ 1/* $OpenBSD: pkcs8.c,v 1.16 2023/03/06 14:32:06 tb Exp $ */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 1999-2004. 3 * project 1999-2004.
4 */ 4 */
@@ -79,12 +79,12 @@ static struct {
79 char *passargout; 79 char *passargout;
80 int pbe_nid; 80 int pbe_nid;
81 int topk8; 81 int topk8;
82} pkcs8_config; 82} cfg;
83 83
84static int 84static int
85pkcs8_opt_v1(char *arg) 85pkcs8_opt_v1(char *arg)
86{ 86{
87 if ((pkcs8_config.pbe_nid = OBJ_txt2nid(arg)) == NID_undef) { 87 if ((cfg.pbe_nid = OBJ_txt2nid(arg)) == NID_undef) {
88 fprintf(stderr, "Unknown PBE algorithm '%s'\n", arg); 88 fprintf(stderr, "Unknown PBE algorithm '%s'\n", arg);
89 return (1); 89 return (1);
90 } 90 }
@@ -95,7 +95,7 @@ pkcs8_opt_v1(char *arg)
95static int 95static int
96pkcs8_opt_v2(char *arg) 96pkcs8_opt_v2(char *arg)
97{ 97{
98 if ((pkcs8_config.cipher = EVP_get_cipherbyname(arg)) == NULL) { 98 if ((cfg.cipher = EVP_get_cipherbyname(arg)) == NULL) {
99 fprintf(stderr, "Unknown cipher '%s'\n", arg); 99 fprintf(stderr, "Unknown cipher '%s'\n", arg);
100 return (1); 100 return (1);
101 } 101 }
@@ -109,62 +109,62 @@ static const struct option pkcs8_options[] = {
109 .argname = "file", 109 .argname = "file",
110 .desc = "Input file (default stdin)", 110 .desc = "Input file (default stdin)",
111 .type = OPTION_ARG, 111 .type = OPTION_ARG,
112 .opt.arg = &pkcs8_config.infile, 112 .opt.arg = &cfg.infile,
113 }, 113 },
114 { 114 {
115 .name = "inform", 115 .name = "inform",
116 .argname = "der | pem", 116 .argname = "der | pem",
117 .desc = "Input format (default PEM)", 117 .desc = "Input format (default PEM)",
118 .type = OPTION_ARG_FORMAT, 118 .type = OPTION_ARG_FORMAT,
119 .opt.value = &pkcs8_config.informat, 119 .opt.value = &cfg.informat,
120 }, 120 },
121 { 121 {
122 .name = "nocrypt", 122 .name = "nocrypt",
123 .desc = "Use or expect unencrypted private key", 123 .desc = "Use or expect unencrypted private key",
124 .type = OPTION_FLAG, 124 .type = OPTION_FLAG,
125 .opt.flag = &pkcs8_config.nocrypt, 125 .opt.flag = &cfg.nocrypt,
126 }, 126 },
127 { 127 {
128 .name = "noiter", 128 .name = "noiter",
129 .desc = "Use 1 as iteration count", 129 .desc = "Use 1 as iteration count",
130 .type = OPTION_VALUE, 130 .type = OPTION_VALUE,
131 .value = 1, 131 .value = 1,
132 .opt.value = &pkcs8_config.iter, 132 .opt.value = &cfg.iter,
133 }, 133 },
134 { 134 {
135 .name = "out", 135 .name = "out",
136 .argname = "file", 136 .argname = "file",
137 .desc = "Output file (default stdout)", 137 .desc = "Output file (default stdout)",
138 .type = OPTION_ARG, 138 .type = OPTION_ARG,
139 .opt.arg = &pkcs8_config.outfile, 139 .opt.arg = &cfg.outfile,
140 }, 140 },
141 { 141 {
142 .name = "outform", 142 .name = "outform",
143 .argname = "der | pem", 143 .argname = "der | pem",
144 .desc = "Output format (default PEM)", 144 .desc = "Output format (default PEM)",
145 .type = OPTION_ARG_FORMAT, 145 .type = OPTION_ARG_FORMAT,
146 .opt.value = &pkcs8_config.outformat, 146 .opt.value = &cfg.outformat,
147 }, 147 },
148 { 148 {
149 .name = "passin", 149 .name = "passin",
150 .argname = "source", 150 .argname = "source",
151 .desc = "Input file passphrase source", 151 .desc = "Input file passphrase source",
152 .type = OPTION_ARG, 152 .type = OPTION_ARG,
153 .opt.arg = &pkcs8_config.passargin, 153 .opt.arg = &cfg.passargin,
154 }, 154 },
155 { 155 {
156 .name = "passout", 156 .name = "passout",
157 .argname = "source", 157 .argname = "source",
158 .desc = "Output file passphrase source", 158 .desc = "Output file passphrase source",
159 .type = OPTION_ARG, 159 .type = OPTION_ARG,
160 .opt.arg = &pkcs8_config.passargout, 160 .opt.arg = &cfg.passargout,
161 }, 161 },
162 { 162 {
163 .name = "topk8", 163 .name = "topk8",
164 .desc = "Read traditional format key and write PKCS#8 format" 164 .desc = "Read traditional format key and write PKCS#8 format"
165 " key", 165 " key",
166 .type = OPTION_FLAG, 166 .type = OPTION_FLAG,
167 .opt.flag = &pkcs8_config.topk8, 167 .opt.flag = &cfg.topk8,
168 }, 168 },
169 { 169 {
170 .name = "v1", 170 .name = "v1",
@@ -208,48 +208,48 @@ pkcs8_main(int argc, char **argv)
208 exit(1); 208 exit(1);
209 } 209 }
210 210
211 memset(&pkcs8_config, 0, sizeof(pkcs8_config)); 211 memset(&cfg, 0, sizeof(cfg));
212 212
213 pkcs8_config.iter = PKCS12_DEFAULT_ITER; 213 cfg.iter = PKCS12_DEFAULT_ITER;
214 pkcs8_config.informat = FORMAT_PEM; 214 cfg.informat = FORMAT_PEM;
215 pkcs8_config.outformat = FORMAT_PEM; 215 cfg.outformat = FORMAT_PEM;
216 pkcs8_config.pbe_nid = -1; 216 cfg.pbe_nid = -1;
217 217
218 if (options_parse(argc, argv, pkcs8_options, NULL, NULL) != 0) { 218 if (options_parse(argc, argv, pkcs8_options, NULL, NULL) != 0) {
219 pkcs8_usage(); 219 pkcs8_usage();
220 return (1); 220 return (1);
221 } 221 }
222 222
223 if (!app_passwd(bio_err, pkcs8_config.passargin, 223 if (!app_passwd(bio_err, cfg.passargin,
224 pkcs8_config.passargout, &passin, &passout)) { 224 cfg.passargout, &passin, &passout)) {
225 BIO_printf(bio_err, "Error getting passwords\n"); 225 BIO_printf(bio_err, "Error getting passwords\n");
226 goto end; 226 goto end;
227 } 227 }
228 if ((pkcs8_config.pbe_nid == -1) && !pkcs8_config.cipher) 228 if ((cfg.pbe_nid == -1) && !cfg.cipher)
229 pkcs8_config.pbe_nid = NID_pbeWithMD5AndDES_CBC; 229 cfg.pbe_nid = NID_pbeWithMD5AndDES_CBC;
230 230
231 if (pkcs8_config.infile) { 231 if (cfg.infile) {
232 if (!(in = BIO_new_file(pkcs8_config.infile, "rb"))) { 232 if (!(in = BIO_new_file(cfg.infile, "rb"))) {
233 BIO_printf(bio_err, 233 BIO_printf(bio_err,
234 "Can't open input file '%s'\n", 234 "Can't open input file '%s'\n",
235 pkcs8_config.infile); 235 cfg.infile);
236 goto end; 236 goto end;
237 } 237 }
238 } else 238 } else
239 in = BIO_new_fp(stdin, BIO_NOCLOSE); 239 in = BIO_new_fp(stdin, BIO_NOCLOSE);
240 240
241 if (pkcs8_config.outfile) { 241 if (cfg.outfile) {
242 if (!(out = BIO_new_file(pkcs8_config.outfile, "wb"))) { 242 if (!(out = BIO_new_file(cfg.outfile, "wb"))) {
243 BIO_printf(bio_err, "Can't open output file '%s'\n", 243 BIO_printf(bio_err, "Can't open output file '%s'\n",
244 pkcs8_config.outfile); 244 cfg.outfile);
245 goto end; 245 goto end;
246 } 246 }
247 } else { 247 } else {
248 out = BIO_new_fp(stdout, BIO_NOCLOSE); 248 out = BIO_new_fp(stdout, BIO_NOCLOSE);
249 } 249 }
250 if (pkcs8_config.topk8) { 250 if (cfg.topk8) {
251 pkey = load_key(bio_err, pkcs8_config.infile, 251 pkey = load_key(bio_err, cfg.infile,
252 pkcs8_config.informat, 1, passin, "key"); 252 cfg.informat, 1, passin, "key");
253 if (!pkey) 253 if (!pkey)
254 goto end; 254 goto end;
255 if (!(p8inf = EVP_PKEY2PKCS8(pkey))) { 255 if (!(p8inf = EVP_PKEY2PKCS8(pkey))) {
@@ -257,10 +257,10 @@ pkcs8_main(int argc, char **argv)
257 ERR_print_errors(bio_err); 257 ERR_print_errors(bio_err);
258 goto end; 258 goto end;
259 } 259 }
260 if (pkcs8_config.nocrypt) { 260 if (cfg.nocrypt) {
261 if (pkcs8_config.outformat == FORMAT_PEM) 261 if (cfg.outformat == FORMAT_PEM)
262 PEM_write_bio_PKCS8_PRIV_KEY_INFO(out, p8inf); 262 PEM_write_bio_PKCS8_PRIV_KEY_INFO(out, p8inf);
263 else if (pkcs8_config.outformat == FORMAT_ASN1) 263 else if (cfg.outformat == FORMAT_ASN1)
264 i2d_PKCS8_PRIV_KEY_INFO_bio(out, p8inf); 264 i2d_PKCS8_PRIV_KEY_INFO_bio(out, p8inf);
265 else { 265 else {
266 BIO_printf(bio_err, 266 BIO_printf(bio_err,
@@ -276,16 +276,16 @@ pkcs8_main(int argc, char **argv)
276 "Enter Encryption Password:", 1)) 276 "Enter Encryption Password:", 1))
277 goto end; 277 goto end;
278 } 278 }
279 if (!(p8 = PKCS8_encrypt(pkcs8_config.pbe_nid, 279 if (!(p8 = PKCS8_encrypt(cfg.pbe_nid,
280 pkcs8_config.cipher, p8pass, strlen(p8pass), 280 cfg.cipher, p8pass, strlen(p8pass),
281 NULL, 0, pkcs8_config.iter, p8inf))) { 281 NULL, 0, cfg.iter, p8inf))) {
282 BIO_printf(bio_err, "Error encrypting key\n"); 282 BIO_printf(bio_err, "Error encrypting key\n");
283 ERR_print_errors(bio_err); 283 ERR_print_errors(bio_err);
284 goto end; 284 goto end;
285 } 285 }
286 if (pkcs8_config.outformat == FORMAT_PEM) 286 if (cfg.outformat == FORMAT_PEM)
287 PEM_write_bio_PKCS8(out, p8); 287 PEM_write_bio_PKCS8(out, p8);
288 else if (pkcs8_config.outformat == FORMAT_ASN1) 288 else if (cfg.outformat == FORMAT_ASN1)
289 i2d_PKCS8_bio(out, p8); 289 i2d_PKCS8_bio(out, p8);
290 else { 290 else {
291 BIO_printf(bio_err, 291 BIO_printf(bio_err,
@@ -297,20 +297,20 @@ pkcs8_main(int argc, char **argv)
297 ret = 0; 297 ret = 0;
298 goto end; 298 goto end;
299 } 299 }
300 if (pkcs8_config.nocrypt) { 300 if (cfg.nocrypt) {
301 if (pkcs8_config.informat == FORMAT_PEM) 301 if (cfg.informat == FORMAT_PEM)
302 p8inf = PEM_read_bio_PKCS8_PRIV_KEY_INFO(in, NULL, 302 p8inf = PEM_read_bio_PKCS8_PRIV_KEY_INFO(in, NULL,
303 NULL, NULL); 303 NULL, NULL);
304 else if (pkcs8_config.informat == FORMAT_ASN1) 304 else if (cfg.informat == FORMAT_ASN1)
305 p8inf = d2i_PKCS8_PRIV_KEY_INFO_bio(in, NULL); 305 p8inf = d2i_PKCS8_PRIV_KEY_INFO_bio(in, NULL);
306 else { 306 else {
307 BIO_printf(bio_err, "Bad format specified for key\n"); 307 BIO_printf(bio_err, "Bad format specified for key\n");
308 goto end; 308 goto end;
309 } 309 }
310 } else { 310 } else {
311 if (pkcs8_config.informat == FORMAT_PEM) 311 if (cfg.informat == FORMAT_PEM)
312 p8 = PEM_read_bio_PKCS8(in, NULL, NULL, NULL); 312 p8 = PEM_read_bio_PKCS8(in, NULL, NULL, NULL);
313 else if (pkcs8_config.informat == FORMAT_ASN1) 313 else if (cfg.informat == FORMAT_ASN1)
314 p8 = d2i_PKCS8_bio(in, NULL); 314 p8 = d2i_PKCS8_bio(in, NULL);
315 else { 315 else {
316 BIO_printf(bio_err, "Bad format specified for key\n"); 316 BIO_printf(bio_err, "Bad format specified for key\n");
@@ -342,10 +342,10 @@ pkcs8_main(int argc, char **argv)
342 ERR_print_errors(bio_err); 342 ERR_print_errors(bio_err);
343 goto end; 343 goto end;
344 } 344 }
345 if (pkcs8_config.outformat == FORMAT_PEM) 345 if (cfg.outformat == FORMAT_PEM)
346 PEM_write_bio_PrivateKey(out, pkey, NULL, NULL, 0, NULL, 346 PEM_write_bio_PrivateKey(out, pkey, NULL, NULL, 0, NULL,
347 passout); 347 passout);
348 else if (pkcs8_config.outformat == FORMAT_ASN1) 348 else if (cfg.outformat == FORMAT_ASN1)
349 i2d_PrivateKey_bio(out, pkey); 349 i2d_PrivateKey_bio(out, pkey);
350 else { 350 else {
351 BIO_printf(bio_err, "Bad format specified for key\n"); 351 BIO_printf(bio_err, "Bad format specified for key\n");