提交 f47e5647 编写于 作者: D Dr. Stephen Henson

Fix signer option and support format SMIME.

Fix -signer option in smime utility to output signer certificates
when verifying.

Add support for format SMIME for -inform and -outform with cms and
smime utilities.

PR#4215
Reviewed-by: NViktor Dukhovni <viktor@openssl.org>
上级 3ec8a1cf
...@@ -410,6 +410,7 @@ typedef struct string_int_pair_st { ...@@ -410,6 +410,7 @@ typedef struct string_int_pair_st {
# define OPT_FMT_HTTP (1L << 9) # define OPT_FMT_HTTP (1L << 9)
# define OPT_FMT_PVK (1L << 10) # define OPT_FMT_PVK (1L << 10)
# define OPT_FMT_PDE (OPT_FMT_PEMDER | OPT_FMT_ENGINE) # define OPT_FMT_PDE (OPT_FMT_PEMDER | OPT_FMT_ENGINE)
# define OPT_FMT_PDS (OPT_FMT_PEMDER | OPT_FMT_SMIME)
# define OPT_FMT_ANY ( \ # define OPT_FMT_ANY ( \
OPT_FMT_PEMDER | OPT_FMT_PKCS12 | OPT_FMT_SMIME | \ OPT_FMT_PEMDER | OPT_FMT_PKCS12 | OPT_FMT_SMIME | \
OPT_FMT_ENGINE | OPT_FMT_MSBLOB | OPT_FMT_NETSCAPE | \ OPT_FMT_ENGINE | OPT_FMT_MSBLOB | OPT_FMT_NETSCAPE | \
......
...@@ -134,8 +134,8 @@ OPTIONS cms_options[] = { ...@@ -134,8 +134,8 @@ OPTIONS cms_options[] = {
" cert.pem... recipient certs for encryption\n"}, " cert.pem... recipient certs for encryption\n"},
{OPT_HELP_STR, 1, '-', "Valid options are:\n"}, {OPT_HELP_STR, 1, '-', "Valid options are:\n"},
{"help", OPT_HELP, '-', "Display this summary"}, {"help", OPT_HELP, '-', "Display this summary"},
{"inform", OPT_INFORM, 'F', "Input format SMIME (default), PEM or DER"}, {"inform", OPT_INFORM, 'c', "Input format SMIME (default), PEM or DER"},
{"outform", OPT_OUTFORM, 'F', {"outform", OPT_OUTFORM, 'c',
"Output format SMIME (default), PEM or DER"}, "Output format SMIME (default), PEM or DER"},
{"in", OPT_IN, '<', "Input file"}, {"in", OPT_IN, '<', "Input file"},
{"out", OPT_OUT, '>', "Output file"}, {"out", OPT_OUT, '>', "Output file"},
...@@ -278,11 +278,11 @@ int cms_main(int argc, char **argv) ...@@ -278,11 +278,11 @@ int cms_main(int argc, char **argv)
ret = 0; ret = 0;
goto end; goto end;
case OPT_INFORM: case OPT_INFORM:
if (!opt_format(opt_arg(), OPT_FMT_PEMDER, &informat)) if (!opt_format(opt_arg(), OPT_FMT_PDS, &informat))
goto opthelp; goto opthelp;
break; break;
case OPT_OUTFORM: case OPT_OUTFORM:
if (!opt_format(opt_arg(), OPT_FMT_PEMDER, &outformat)) if (!opt_format(opt_arg(), OPT_FMT_PDS, &outformat))
goto opthelp; goto opthelp;
break; break;
case OPT_OUT: case OPT_OUT:
......
...@@ -180,7 +180,7 @@ char *opt_init(int ac, char **av, const OPTIONS *o) ...@@ -180,7 +180,7 @@ char *opt_init(int ac, char **av, const OPTIONS *o)
switch (i) { switch (i) {
case 0: case '-': case '/': case '<': case '>': case 'E': case 'F': case 0: case '-': case '/': case '<': case '>': case 'E': case 'F':
case 'M': case 'U': case 'f': case 'l': case 'n': case 'p': case 's': case 'M': case 'U': case 'f': case 'l': case 'n': case 'p': case 's':
case 'u': case 'u': case 'c':
break; break;
default: default:
assert(0); assert(0);
...@@ -756,10 +756,12 @@ int opt_next(void) ...@@ -756,10 +756,12 @@ int opt_next(void)
return -1; return -1;
} }
break; break;
case 'c':
case 'E': case 'E':
case 'F': case 'F':
case 'f': case 'f':
if (opt_format(arg, if (opt_format(arg,
o->valtype == 'c' ? OPT_FMT_PDS :
o->valtype == 'E' ? OPT_FMT_PDE : o->valtype == 'E' ? OPT_FMT_PDE :
o->valtype == 'F' ? OPT_FMT_PEMDER o->valtype == 'F' ? OPT_FMT_PEMDER
: OPT_FMT_ANY, &ival)) : OPT_FMT_ANY, &ival))
......
...@@ -115,15 +115,15 @@ OPTIONS smime_options[] = { ...@@ -115,15 +115,15 @@ OPTIONS smime_options[] = {
{"noattr", OPT_NOATTR, '-', "Don't include any signed attributes"}, {"noattr", OPT_NOATTR, '-', "Don't include any signed attributes"},
{"binary", OPT_BINARY, '-', "Don't translate message to text"}, {"binary", OPT_BINARY, '-', "Don't translate message to text"},
{"certfile", OPT_CERTFILE, '<', "Other certificates file"}, {"certfile", OPT_CERTFILE, '<', "Other certificates file"},
{"signer", OPT_SIGNER, '<', "Signer certificate file"}, {"signer", OPT_SIGNER, 's', "Signer certificate file"},
{"recip", OPT_RECIP, '<', "Recipient certificate file for decryption"}, {"recip", OPT_RECIP, '<', "Recipient certificate file for decryption"},
{"in", OPT_IN, '<', "Input file"}, {"in", OPT_IN, '<', "Input file"},
{"inform", OPT_INFORM, 'F', "Input format SMIME (default), PEM or DER"}, {"inform", OPT_INFORM, 'c', "Input format SMIME (default), PEM or DER"},
{"inkey", OPT_INKEY, '<', {"inkey", OPT_INKEY, '<',
"Input private key (if not signer or recipient)"}, "Input private key (if not signer or recipient)"},
{"keyform", OPT_KEYFORM, 'f', "Input private key format (PEM or ENGINE)"}, {"keyform", OPT_KEYFORM, 'f', "Input private key format (PEM or ENGINE)"},
{"out", OPT_OUT, '>', "Output file"}, {"out", OPT_OUT, '>', "Output file"},
{"outform", OPT_OUTFORM, 'F', {"outform", OPT_OUTFORM, 'c',
"Output format SMIME (default), PEM or DER"}, "Output format SMIME (default), PEM or DER"},
{"content", OPT_CONTENT, '<', {"content", OPT_CONTENT, '<',
"Supply or override content for detached signature"}, "Supply or override content for detached signature"},
...@@ -200,14 +200,14 @@ int smime_main(int argc, char **argv) ...@@ -200,14 +200,14 @@ int smime_main(int argc, char **argv)
ret = 0; ret = 0;
goto end; goto end;
case OPT_INFORM: case OPT_INFORM:
if (!opt_format(opt_arg(), OPT_FMT_PEMDER, &informat)) if (!opt_format(opt_arg(), OPT_FMT_PDS, &informat))
goto opthelp; goto opthelp;
break; break;
case OPT_IN: case OPT_IN:
infile = opt_arg(); infile = opt_arg();
break; break;
case OPT_OUTFORM: case OPT_OUTFORM:
if (!opt_format(opt_arg(), OPT_FMT_PEMDER, &outformat)) if (!opt_format(opt_arg(), OPT_FMT_PDS, &outformat))
goto opthelp; goto opthelp;
break; break;
case OPT_OUT: case OPT_OUT:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册