1/* apps/pkeyparam.c */
| |
2/*
| 1/*
|
3 * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project 4 * 2006 5 */ 6/* ==================================================================== 7 * Copyright (c) 2006 The OpenSSL Project. All rights reserved.
| 2 * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved.
|
8 *
| 3 *
|
9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions 11 * are met: 12 * 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 16 * 2. Redistributions in binary form must reproduce the above copyright 17 * notice, this list of conditions and the following disclaimer in 18 * the documentation and/or other materials provided with the 19 * distribution. 20 * 21 * 3. All advertising materials mentioning features or use of this 22 * software must display the following acknowledgment: 23 * "This product includes software developed by the OpenSSL Project 24 * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" 25 * 26 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to 27 * endorse or promote products derived from this software without 28 * prior written permission. For written permission, please contact 29 * licensing@OpenSSL.org. 30 * 31 * 5. Products derived from this software may not be called "OpenSSL" 32 * nor may "OpenSSL" appear in their names without prior written 33 * permission of the OpenSSL Project. 34 * 35 * 6. Redistributions of any form whatsoever must retain the following 36 * acknowledgment: 37 * "This product includes software developed by the OpenSSL Project 38 * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" 39 * 40 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY 41 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 42 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 43 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR 44 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 45 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 46 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 47 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 49 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 50 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 51 * OF THE POSSIBILITY OF SUCH DAMAGE. 52 * ==================================================================== 53 * 54 * This product includes cryptographic software written by Eric Young 55 * (eay@cryptsoft.com). This product includes software written by Tim 56 * Hudson (tjh@cryptsoft.com). 57 *
| 4 * Licensed under the OpenSSL license (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
|
58 */
| 8 */
|
| 9
|
59#include <stdio.h> 60#include <string.h> 61#include "apps.h" 62#include <openssl/pem.h> 63#include <openssl/err.h> 64#include <openssl/evp.h> 65
| 10#include <stdio.h> 11#include <string.h> 12#include "apps.h" 13#include <openssl/pem.h> 14#include <openssl/err.h> 15#include <openssl/evp.h> 16
|
66#define PROG pkeyparam_main
| 17typedef enum OPTION_choice { 18 OPT_ERR = -1, OPT_EOF = 0, OPT_HELP, 19 OPT_IN, OPT_OUT, OPT_TEXT, OPT_NOOUT, OPT_ENGINE 20} OPTION_CHOICE;
|
67
| 21
|
68int MAIN(int, char **);
| 22OPTIONS pkeyparam_options[] = { 23 {"help", OPT_HELP, '-', "Display this summary"}, 24 {"in", OPT_IN, '<', "Input file"}, 25 {"out", OPT_OUT, '>', "Output file"}, 26 {"text", OPT_TEXT, '-', "Print parameters as text"}, 27 {"noout", OPT_NOOUT, '-', "Don't output encoded parameters"}, 28#ifndef OPENSSL_NO_ENGINE 29 {"engine", OPT_ENGINE, 's', "Use engine, possibly a hardware device"}, 30#endif 31 {NULL} 32};
|
69
| 33
|
70int MAIN(int argc, char **argv)
| 34int pkeyparam_main(int argc, char **argv)
|
71{
| 35{
|
72 char **args, *infile = NULL, *outfile = NULL;
| 36 ENGINE *e = NULL;
|
73 BIO *in = NULL, *out = NULL;
| 37 BIO *in = NULL, *out = NULL;
|
74 int text = 0, noout = 0;
| |
75 EVP_PKEY *pkey = NULL;
| 38 EVP_PKEY *pkey = NULL;
|
76 int badarg = 0; 77 char *engine = NULL; 78 ENGINE *e = NULL; 79 int ret = 1;
| 39 int text = 0, noout = 0, ret = 1; 40 OPTION_CHOICE o; 41 char *infile = NULL, *outfile = NULL, *prog;
|
80
| 42
|
81 if (bio_err == NULL) 82 bio_err = BIO_new_fp(stderr, BIO_NOCLOSE); 83 84 if (!load_config(bio_err, NULL)) 85 goto end; 86 87 ERR_load_crypto_strings(); 88 OpenSSL_add_all_algorithms(); 89 args = argv + 1; 90 while (!badarg && *args && *args[0] == '-') { 91 if (!strcmp(*args, "-in")) { 92 if (args[1]) { 93 args++; 94 infile = *args; 95 } else 96 badarg = 1; 97 } else if (!strcmp(*args, "-out")) { 98 if (args[1]) { 99 args++; 100 outfile = *args; 101 } else 102 badarg = 1; 103 } 104#ifndef OPENSSL_NO_ENGINE 105 else if (strcmp(*args, "-engine") == 0) { 106 if (!args[1]) 107 goto bad; 108 engine = *(++args); 109 } 110#endif 111 112 else if (strcmp(*args, "-text") == 0)
| 43 prog = opt_init(argc, argv, pkeyparam_options); 44 while ((o = opt_next()) != OPT_EOF) { 45 switch (o) { 46 case OPT_EOF: 47 case OPT_ERR: 48 opthelp: 49 BIO_printf(bio_err, "%s: Use -help for summary.\n", prog); 50 goto end; 51 case OPT_HELP: 52 opt_help(pkeyparam_options); 53 ret = 0; 54 goto end; 55 case OPT_IN: 56 infile = opt_arg(); 57 break; 58 case OPT_OUT: 59 outfile = opt_arg(); 60 break; 61 case OPT_ENGINE: 62 e = setup_engine(opt_arg(), 0); 63 break; 64 case OPT_TEXT:
|
113 text = 1;
| 65 text = 1;
|
114 else if (strcmp(*args, "-noout") == 0)
| 66 break; 67 case OPT_NOOUT:
|
115 noout = 1;
| 68 noout = 1;
|
116 args++; 117 } 118 119 if (badarg) { 120#ifndef OPENSSL_NO_ENGINE 121 bad: 122#endif 123 BIO_printf(bio_err, "Usage pkeyparam [options]\n"); 124 BIO_printf(bio_err, "where options are\n"); 125 BIO_printf(bio_err, "-in file input file\n"); 126 BIO_printf(bio_err, "-out file output file\n"); 127 BIO_printf(bio_err, "-text print parameters as text\n"); 128 BIO_printf(bio_err, 129 "-noout don't output encoded parameters\n"); 130#ifndef OPENSSL_NO_ENGINE 131 BIO_printf(bio_err, 132 "-engine e use engine e, possibly a hardware device.\n"); 133#endif 134 return 1; 135 } 136 e = setup_engine(bio_err, engine, 0); 137 138 if (infile) { 139 if (!(in = BIO_new_file(infile, "r"))) { 140 BIO_printf(bio_err, "Can't open input file %s\n", infile); 141 goto end;
| 69 break;
|
142 }
| 70 }
|
143 } else 144 in = BIO_new_fp(stdin, BIO_NOCLOSE); 145 146 if (outfile) { 147 if (!(out = BIO_new_file(outfile, "w"))) { 148 BIO_printf(bio_err, "Can't open output file %s\n", outfile); 149 goto end; 150 } 151 } else { 152 out = BIO_new_fp(stdout, BIO_NOCLOSE); 153#ifdef OPENSSL_SYS_VMS 154 { 155 BIO *tmpbio = BIO_new(BIO_f_linebuffer()); 156 out = BIO_push(tmpbio, out); 157 } 158#endif
| |
159 }
| 71 }
|
| 72 argc = opt_num_rest(); 73 if (argc != 0) 74 goto opthelp;
|
160
| 75
|
| 76 in = bio_open_default(infile, 'r', FORMAT_PEM); 77 if (in == NULL) 78 goto end; 79 out = bio_open_default(outfile, 'w', FORMAT_PEM); 80 if (out == NULL) 81 goto end;
|
161 pkey = PEM_read_bio_Parameters(in, NULL); 162 if (!pkey) { 163 BIO_printf(bio_err, "Error reading parameters\n"); 164 ERR_print_errors(bio_err); 165 goto end; 166 } 167 168 if (!noout)
--- 15 unchanged lines hidden --- | 82 pkey = PEM_read_bio_Parameters(in, NULL); 83 if (!pkey) { 84 BIO_printf(bio_err, "Error reading parameters\n"); 85 ERR_print_errors(bio_err); 86 goto end; 87 } 88 89 if (!noout)
--- 15 unchanged lines hidden --- |