| 
									
										
										
										
											2006-07-08 08:47:04 +08:00
										 |  |  | =pod | 
					
						
							| 
									
										
										
										
											2019-10-31 11:35:08 +08:00
										 |  |  | {- OpenSSL::safe::output_do_not_edit_headers(); -} | 
					
						
							| 
									
										
										
										
											2019-10-13 05:45:56 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-07-08 08:47:04 +08:00
										 |  |  | =head1 NAME | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-19 00:52:12 +08:00
										 |  |  | openssl-pkeyutl - public key algorithm command | 
					
						
							| 
									
										
										
										
											2006-07-08 08:47:04 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 SYNOPSIS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | B<openssl> B<pkeyutl> | 
					
						
							| 
									
										
										
										
											2016-02-06 00:58:45 +08:00
										 |  |  | [B<-help>] | 
					
						
							| 
									
										
										
										
											2019-09-26 03:20:11 +08:00
										 |  |  | [B<-in> I<file>] | 
					
						
							| 
									
										
										
										
											2019-01-16 16:16:28 +08:00
										 |  |  | [B<-rawin>] | 
					
						
							| 
									
										
										
										
											2019-09-26 03:20:11 +08:00
										 |  |  | [B<-digest> I<algorithm>] | 
					
						
							|  |  |  | [B<-out> I<file>] | 
					
						
							|  |  |  | [B<-sigfile> I<file>] | 
					
						
							|  |  |  | [B<-inkey> I<file>] | 
					
						
							| 
									
										
										
										
											2020-05-06 19:51:50 +08:00
										 |  |  | [B<-keyform> B<DER>|B<PEM>|B<P12>|B<ENGINE>] | 
					
						
							| 
									
										
										
										
											2019-09-26 03:20:11 +08:00
										 |  |  | [B<-passin> I<arg>] | 
					
						
							|  |  |  | [B<-peerkey> I<file>] | 
					
						
							| 
									
										
										
										
											2020-05-06 19:51:50 +08:00
										 |  |  | [B<-peerform> B<DER>|B<PEM>|B<P12>|B<ENGINE>] | 
					
						
							| 
									
										
										
										
											2006-07-08 08:47:04 +08:00
										 |  |  | [B<-pubin>] | 
					
						
							|  |  |  | [B<-certin>] | 
					
						
							|  |  |  | [B<-rev>] | 
					
						
							|  |  |  | [B<-sign>] | 
					
						
							|  |  |  | [B<-verify>] | 
					
						
							|  |  |  | [B<-verifyrecover>] | 
					
						
							|  |  |  | [B<-encrypt>] | 
					
						
							|  |  |  | [B<-decrypt>] | 
					
						
							|  |  |  | [B<-derive>] | 
					
						
							| 
									
										
										
										
											2019-09-26 03:20:11 +08:00
										 |  |  | [B<-kdf> I<algorithm>] | 
					
						
							|  |  |  | [B<-kdflen> I<length>] | 
					
						
							| 
									
										
										
										
											2019-10-02 00:16:29 +08:00
										 |  |  | [B<-pkeyopt> I<opt>:I<value>] | 
					
						
							|  |  |  | [B<-pkeyopt_passin> I<opt>[:I<passarg>]] | 
					
						
							| 
									
										
										
										
											2006-07-08 08:47:04 +08:00
										 |  |  | [B<-hexdump>] | 
					
						
							|  |  |  | [B<-asn1parse>] | 
					
						
							| 
									
										
										
										
											2019-10-13 05:45:56 +08:00
										 |  |  | {- $OpenSSL::safe::opt_engine_synopsis -} | 
					
						
							| 
									
										
										
										
											2016-02-08 12:14:12 +08:00
										 |  |  | [B<-engine_impl>] | 
					
						
							| 
									
										
										
										
											2019-10-13 05:45:56 +08:00
										 |  |  | {- $OpenSSL::safe::opt_r_synopsis -} | 
					
						
							| 
									
										
										
										
											2020-02-25 12:29:30 +08:00
										 |  |  | {- $OpenSSL::safe::opt_provider_synopsis -} | 
					
						
							| 
									
										
										
										
											2020-07-23 15:40:40 +08:00
										 |  |  | {- $OpenSSL::safe::opt_config_synopsis -} | 
					
						
							| 
									
										
										
										
											2006-07-08 08:47:04 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-11 23:52:12 +08:00
										 |  |  | =for openssl ifdef engine engine_impl | 
					
						
							| 
									
										
										
										
											2019-09-23 07:49:25 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-07-08 08:47:04 +08:00
										 |  |  | =head1 DESCRIPTION | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-30 03:13:07 +08:00
										 |  |  | This command can be used to perform low-level public key | 
					
						
							| 
									
										
										
											
												Command docs: fix up command references
Almost all OpenSSL commands are in reality 'openssl cmd', so make sure
they are refered to like that and not just as the sub-command.
Self-references are avoided as much as is possible, and replaced with
"this command".  In some cases, we even avoid that with a slight
rewrite of the sentence or paragrah they were in.  However, in the few
cases where a self-reference is still admissible, they are done in
bold, i.e. openssl-speed.pod references itself like this:
    B<openssl speed>
References to other commands are done as manual links, i.e. CA.pl.pod
references 'openssl req' like this: L<openssl-req(1)>
Some commands are examples rather than references; we enclose those in
C<>.
While we are it, we abolish "utility", replacing it with "command", or
remove it entirely in some cases.
Reviewed-by: Tomas Mraz <tmraz@fedoraproject.org>
(Merged from https://github.com/openssl/openssl/pull/10065)
											
										 
											2019-10-02 01:43:36 +08:00
										 |  |  | operations using any supported algorithm. | 
					
						
							| 
									
										
										
										
											2006-07-08 08:47:04 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-13 00:14:40 +08:00
										 |  |  | =head1 OPTIONS | 
					
						
							| 
									
										
										
										
											2006-07-08 08:47:04 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =over 4 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-06 00:58:45 +08:00
										 |  |  | =item B<-help> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Print out a usage message. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-26 03:20:11 +08:00
										 |  |  | =item B<-in> I<filename> | 
					
						
							| 
									
										
										
										
											2006-07-08 08:47:04 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | This specifies the input filename to read data from or standard input | 
					
						
							|  |  |  | if this option is not specified. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-16 16:16:28 +08:00
										 |  |  | =item B<-rawin> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This indicates that the input data is raw data, which is not hashed by any | 
					
						
							|  |  |  | message digest algorithm. The user can specify a digest algorithm by using | 
					
						
							|  |  |  | the B<-digest> option. This option can only be used with B<-sign> and | 
					
						
							| 
									
										
										
										
											2019-03-07 18:37:34 +08:00
										 |  |  | B<-verify> and must be used with the Ed25519 and Ed448 algorithms. | 
					
						
							| 
									
										
										
										
											2019-01-16 16:16:28 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-26 03:20:11 +08:00
										 |  |  | =item B<-digest> I<algorithm> | 
					
						
							| 
									
										
										
										
											2019-01-16 16:16:28 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | This specifies the digest algorithm which is used to hash the input data before | 
					
						
							|  |  |  | signing or verifying it with the input key. This option could be omitted if the | 
					
						
							|  |  |  | signature algorithm does not require one (for instance, EdDSA). If this option | 
					
						
							|  |  |  | is omitted but the signature algorithm requires one, a default value will be | 
					
						
							|  |  |  | used. For signature algorithms like RSA, DSA and ECDSA, SHA-256 will be the | 
					
						
							|  |  |  | default digest algorithm. For SM2, it will be SM3. If this option is present, | 
					
						
							| 
									
										
										
											
												Command docs: fix up command references
Almost all OpenSSL commands are in reality 'openssl cmd', so make sure
they are refered to like that and not just as the sub-command.
Self-references are avoided as much as is possible, and replaced with
"this command".  In some cases, we even avoid that with a slight
rewrite of the sentence or paragrah they were in.  However, in the few
cases where a self-reference is still admissible, they are done in
bold, i.e. openssl-speed.pod references itself like this:
    B<openssl speed>
References to other commands are done as manual links, i.e. CA.pl.pod
references 'openssl req' like this: L<openssl-req(1)>
Some commands are examples rather than references; we enclose those in
C<>.
While we are it, we abolish "utility", replacing it with "command", or
remove it entirely in some cases.
Reviewed-by: Tomas Mraz <tmraz@fedoraproject.org>
(Merged from https://github.com/openssl/openssl/pull/10065)
											
										 
											2019-10-02 01:43:36 +08:00
										 |  |  | then the B<-rawin> option must be also specified. | 
					
						
							| 
									
										
										
										
											2019-01-16 16:16:28 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-26 03:20:11 +08:00
										 |  |  | =item B<-out> I<filename> | 
					
						
							| 
									
										
										
										
											2006-07-08 08:47:04 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-30 05:38:30 +08:00
										 |  |  | Specifies the output filename to write to or standard output by | 
					
						
							| 
									
										
										
										
											2006-07-08 08:47:04 +08:00
										 |  |  | default. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-26 03:20:11 +08:00
										 |  |  | =item B<-sigfile> I<file> | 
					
						
							| 
									
										
										
										
											2016-02-08 12:14:12 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-02 00:16:29 +08:00
										 |  |  | Signature file, required for B<-verify> operations only | 
					
						
							| 
									
										
										
										
											2016-02-08 12:14:12 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-26 03:20:11 +08:00
										 |  |  | =item B<-inkey> I<file> | 
					
						
							| 
									
										
										
										
											2006-07-08 08:47:04 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-30 05:38:30 +08:00
										 |  |  | The input key file, by default it should be a private key. | 
					
						
							| 
									
										
										
										
											2006-07-08 08:47:04 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-06 19:51:50 +08:00
										 |  |  | =item B<-keyform> B<DER>|B<PEM>|B<P12>|B<ENGINE> | 
					
						
							| 
									
										
										
										
											2006-07-08 08:47:04 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-10 09:48:33 +08:00
										 |  |  | The key format; the default is B<PEM>. | 
					
						
							| 
									
										
										
										
											2020-05-06 19:51:50 +08:00
										 |  |  | The only value with effect is B<ENGINE>; all others have become obsolete. | 
					
						
							| 
									
										
										
										
											2019-10-10 09:48:33 +08:00
										 |  |  | See L<openssl(1)/Format Options> for details. | 
					
						
							| 
									
										
										
										
											2009-04-15 23:27:03 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-26 03:20:11 +08:00
										 |  |  | =item B<-passin> I<arg> | 
					
						
							| 
									
										
										
										
											2009-04-15 23:27:03 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-02 00:16:29 +08:00
										 |  |  | The input key password source. For more information about the format of I<arg> | 
					
						
							| 
									
										
										
										
											2019-10-09 01:10:04 +08:00
										 |  |  | see L<openssl(1)/Pass Phrase Options>. | 
					
						
							| 
									
										
										
										
											2009-04-15 23:27:03 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-26 03:20:11 +08:00
										 |  |  | =item B<-peerkey> I<file> | 
					
						
							| 
									
										
										
										
											2006-07-08 08:47:04 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-30 05:38:30 +08:00
										 |  |  | The peer key file, used by key derivation (agreement) operations. | 
					
						
							| 
									
										
										
										
											2006-07-08 08:47:04 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-06 19:51:50 +08:00
										 |  |  | =item B<-peerform> B<DER>|B<PEM>|B<P12>|B<ENGINE> | 
					
						
							| 
									
										
										
										
											2006-07-08 08:47:04 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-10 09:48:33 +08:00
										 |  |  | The peer key format; the default is B<PEM>. | 
					
						
							| 
									
										
										
										
											2020-05-06 19:51:50 +08:00
										 |  |  | The only value with effect is B<ENGINE>; all others have become obsolete. | 
					
						
							| 
									
										
										
										
											2019-10-10 09:48:33 +08:00
										 |  |  | See L<openssl(1)/Format Options> for details. | 
					
						
							| 
									
										
										
										
											2006-07-08 08:47:04 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =item B<-pubin> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-30 05:38:30 +08:00
										 |  |  | The input file is a public key. | 
					
						
							| 
									
										
										
										
											2006-07-08 08:47:04 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =item B<-certin> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-30 05:38:30 +08:00
										 |  |  | The input is a certificate containing a public key. | 
					
						
							| 
									
										
										
										
											2006-07-08 08:47:04 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-07-08 18:01:33 +08:00
										 |  |  | =item B<-rev> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-30 05:38:30 +08:00
										 |  |  | Reverse the order of the input buffer. This is useful for some libraries | 
					
						
							| 
									
										
										
										
											2006-07-08 18:01:33 +08:00
										 |  |  | (such as CryptoAPI) which represent the buffer in little endian format. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-07-08 08:47:04 +08:00
										 |  |  | =item B<-sign> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-17 19:53:07 +08:00
										 |  |  | Sign the input data (which must be a hash) and output the signed result. This | 
					
						
							|  |  |  | requires a private key. | 
					
						
							| 
									
										
										
										
											2006-07-08 08:47:04 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =item B<-verify> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-17 19:53:07 +08:00
										 |  |  | Verify the input data (which must be a hash) against the signature file and | 
					
						
							|  |  |  | indicate if the verification succeeded or failed. | 
					
						
							| 
									
										
										
										
											2006-07-08 08:47:04 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =item B<-verifyrecover> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-17 19:53:07 +08:00
										 |  |  | Verify the input data (which must be a hash) and output the recovered data. | 
					
						
							| 
									
										
										
										
											2006-07-08 08:47:04 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =item B<-encrypt> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-30 05:38:30 +08:00
										 |  |  | Encrypt the input data using a public key. | 
					
						
							| 
									
										
										
										
											2006-07-08 08:47:04 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =item B<-decrypt> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-30 05:38:30 +08:00
										 |  |  | Decrypt the input data using a private key. | 
					
						
							| 
									
										
										
										
											2006-07-08 08:47:04 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =item B<-derive> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-30 05:38:30 +08:00
										 |  |  | Derive a shared secret using the peer key. | 
					
						
							| 
									
										
										
										
											2006-07-08 08:47:04 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-26 03:20:11 +08:00
										 |  |  | =item B<-kdf> I<algorithm> | 
					
						
							| 
									
										
										
										
											2016-03-02 00:29:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-02 00:16:29 +08:00
										 |  |  | Use key derivation function I<algorithm>.  The supported algorithms are | 
					
						
							| 
									
										
										
										
											2016-03-04 12:30:42 +08:00
										 |  |  | at present B<TLS1-PRF> and B<HKDF>. | 
					
						
							| 
									
										
										
										
											2016-06-08 05:03:15 +08:00
										 |  |  | Note: additional parameters and the KDF output length will normally have to be | 
					
						
							| 
									
										
										
										
											2016-11-11 16:33:47 +08:00
										 |  |  | set for this to work. | 
					
						
							|  |  |  | See L<EVP_PKEY_CTX_set_hkdf_md(3)> and L<EVP_PKEY_CTX_set_tls1_prf_md(3)> | 
					
						
							| 
									
										
										
										
											2016-03-04 12:30:42 +08:00
										 |  |  | for the supported string parameters of each algorithm. | 
					
						
							| 
									
										
										
										
											2016-03-02 00:29:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-26 03:20:11 +08:00
										 |  |  | =item B<-kdflen> I<length> | 
					
						
							| 
									
										
										
										
											2016-03-02 00:29:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-04 12:30:42 +08:00
										 |  |  | Set the output length for KDF. | 
					
						
							| 
									
										
										
										
											2016-03-02 00:29:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-02 00:16:29 +08:00
										 |  |  | =item B<-pkeyopt> I<opt>:I<value> | 
					
						
							| 
									
										
										
										
											2016-02-08 12:14:12 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Public key options specified as opt:value. See NOTES below for more details. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-02 00:16:29 +08:00
										 |  |  | =item B<-pkeyopt_passin> I<opt>[:I<passarg>] | 
					
						
							| 
									
										
										
										
											2018-03-21 03:06:13 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-02 00:16:29 +08:00
										 |  |  | Allows reading a public key option I<opt> from stdin or a password source. | 
					
						
							|  |  |  | If only I<opt> is specified, the user will be prompted to enter a password on | 
					
						
							|  |  |  | stdin.  Alternatively, I<passarg> can be specified which can be any value | 
					
						
							| 
									
										
										
										
											2019-10-02 02:06:22 +08:00
										 |  |  | supported by L<openssl(1)/Pass phrase options>. | 
					
						
							| 
									
										
										
										
											2018-03-21 03:06:13 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-07-08 08:47:04 +08:00
										 |  |  | =item B<-hexdump> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | hex dump the output data. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =item B<-asn1parse> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-30 05:38:30 +08:00
										 |  |  | Parse the ASN.1 output data, this is useful when combined with the | 
					
						
							| 
									
										
										
										
											2006-07-08 08:47:04 +08:00
										 |  |  | B<-verifyrecover> option when an ASN1 structure is signed. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-13 05:45:56 +08:00
										 |  |  | {- $OpenSSL::safe::opt_engine_item -} | 
					
						
							| 
									
										
										
										
											2016-02-08 12:14:12 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =item B<-engine_impl> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | When used with the B<-engine> option, it specifies to also use | 
					
						
							| 
									
										
										
										
											2019-10-02 00:16:29 +08:00
										 |  |  | engine I<id> for crypto operations. | 
					
						
							| 
									
										
										
										
											2016-02-08 12:14:12 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-13 05:45:56 +08:00
										 |  |  | {- $OpenSSL::safe::opt_r_item -} | 
					
						
							| 
									
										
										
										
											2020-02-25 12:29:30 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | {- $OpenSSL::safe::opt_provider_item -} | 
					
						
							| 
									
										
										
										
											2019-10-13 05:45:56 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-23 15:40:40 +08:00
										 |  |  | {- $OpenSSL::safe::opt_config_item -} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-07-08 08:47:04 +08:00
										 |  |  | =back | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =head1 NOTES | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The operations and options supported vary according to the key algorithm | 
					
						
							|  |  |  | and its implementation. The OpenSSL operations and options are indicated below. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-02 00:16:29 +08:00
										 |  |  | Unless otherwise mentioned all algorithms support the B<digest:>I<alg> option | 
					
						
							| 
									
										
										
										
											2006-07-08 18:01:33 +08:00
										 |  |  | which specifies the digest in use for sign, verify and verifyrecover operations. | 
					
						
							| 
									
										
										
										
											2019-10-02 00:16:29 +08:00
										 |  |  | The value I<alg> should represent a digest name as used in the | 
					
						
							| 
									
										
										
										
											2018-05-17 19:53:07 +08:00
										 |  |  | EVP_get_digestbyname() function for example B<sha1>. This value is not used to | 
					
						
							|  |  |  | hash the input data. It is used (by some algorithms) for sanity-checking the | 
					
						
							| 
									
										
										
											
												Command docs: fix up command references
Almost all OpenSSL commands are in reality 'openssl cmd', so make sure
they are refered to like that and not just as the sub-command.
Self-references are avoided as much as is possible, and replaced with
"this command".  In some cases, we even avoid that with a slight
rewrite of the sentence or paragrah they were in.  However, in the few
cases where a self-reference is still admissible, they are done in
bold, i.e. openssl-speed.pod references itself like this:
    B<openssl speed>
References to other commands are done as manual links, i.e. CA.pl.pod
references 'openssl req' like this: L<openssl-req(1)>
Some commands are examples rather than references; we enclose those in
C<>.
While we are it, we abolish "utility", replacing it with "command", or
remove it entirely in some cases.
Reviewed-by: Tomas Mraz <tmraz@fedoraproject.org>
(Merged from https://github.com/openssl/openssl/pull/10065)
											
										 
											2019-10-02 01:43:36 +08:00
										 |  |  | lengths of data passed in and for creating the structures that make up the | 
					
						
							|  |  |  | signature (e.g. B<DigestInfo> in RSASSA PKCS#1 v1.5 signatures). | 
					
						
							| 
									
										
										
										
											2018-05-17 19:53:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
											
												Command docs: fix up command references
Almost all OpenSSL commands are in reality 'openssl cmd', so make sure
they are refered to like that and not just as the sub-command.
Self-references are avoided as much as is possible, and replaced with
"this command".  In some cases, we even avoid that with a slight
rewrite of the sentence or paragrah they were in.  However, in the few
cases where a self-reference is still admissible, they are done in
bold, i.e. openssl-speed.pod references itself like this:
    B<openssl speed>
References to other commands are done as manual links, i.e. CA.pl.pod
references 'openssl req' like this: L<openssl-req(1)>
Some commands are examples rather than references; we enclose those in
C<>.
While we are it, we abolish "utility", replacing it with "command", or
remove it entirely in some cases.
Reviewed-by: Tomas Mraz <tmraz@fedoraproject.org>
(Merged from https://github.com/openssl/openssl/pull/10065)
											
										 
											2019-10-02 01:43:36 +08:00
										 |  |  | This command does not hash the input data (except where -rawin is used) but | 
					
						
							| 
									
										
										
										
											2019-03-07 18:37:34 +08:00
										 |  |  | rather it will use the data directly as input to the signature algorithm. | 
					
						
							|  |  |  | Depending on the key type, signature type, and mode of padding, the maximum | 
					
						
							|  |  |  | acceptable lengths of input data differ. The signed data can't be longer than | 
					
						
							|  |  |  | the key modulus with RSA. In case of ECDSA and DSA the data shouldn't be longer | 
					
						
							|  |  |  | than the field size, otherwise it will be silently truncated to the field size. | 
					
						
							|  |  |  | In any event the input size must not be larger than the largest supported digest | 
					
						
							|  |  |  | size. | 
					
						
							| 
									
										
										
										
											2018-05-17 19:53:07 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | In other words, if the value of digest is B<sha1> the input should be the 20 | 
					
						
							|  |  |  | bytes long binary encoding of the SHA-1 hash function output. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-07-08 08:47:04 +08:00
										 |  |  | =head1 RSA ALGORITHM | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-07 11:17:15 +08:00
										 |  |  | The RSA algorithm generally supports the encrypt, decrypt, sign, | 
					
						
							|  |  |  | verify and verifyrecover operations. However, some padding modes | 
					
						
							|  |  |  | support only a subset of these operations. The following additional | 
					
						
							|  |  |  | B<pkeyopt> values are supported: | 
					
						
							| 
									
										
										
										
											2006-07-08 08:47:04 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-07-08 18:01:33 +08:00
										 |  |  | =over 4 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-02 00:16:29 +08:00
										 |  |  | =item B<rsa_padding_mode:>I<mode> | 
					
						
							| 
									
										
										
										
											2006-07-08 18:01:33 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-02 00:16:29 +08:00
										 |  |  | This sets the RSA padding mode. Acceptable values for I<mode> are B<pkcs1> for | 
					
						
							| 
									
										
										
										
											2006-07-08 18:01:33 +08:00
										 |  |  | PKCS#1 padding, B<sslv23> for SSLv23 padding, B<none> for no padding, B<oaep> | 
					
						
							|  |  |  | for B<OAEP> mode, B<x931> for X9.31 mode and B<pss> for PSS. | 
					
						
							| 
									
										
										
										
											2006-07-08 08:47:04 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-20 20:11:46 +08:00
										 |  |  | In PKCS#1 padding if the message digest is not set then the supplied data is | 
					
						
							| 
									
										
										
										
											2006-07-08 18:01:33 +08:00
										 |  |  | signed or verified directly instead of using a B<DigestInfo> structure. If a | 
					
						
							|  |  |  | digest is set then the a B<DigestInfo> structure is used and its the length | 
					
						
							|  |  |  | must correspond to the digest type. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-02 00:49:20 +08:00
										 |  |  | For B<oaep> mode only encryption and decryption is supported. | 
					
						
							| 
									
										
										
										
											2006-07-08 18:01:33 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | For B<x931> if the digest type is set it is used to format the block data | 
					
						
							|  |  |  | otherwise the first byte is used to specify the X9.31 digest ID. Sign, | 
					
						
							|  |  |  | verify and verifyrecover are can be performed in this mode. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | For B<pss> mode only sign and verify are supported and the digest type must be | 
					
						
							|  |  |  | specified. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-02 00:16:29 +08:00
										 |  |  | =item B<rsa_pss_saltlen:>I<len> | 
					
						
							| 
									
										
										
										
											2006-07-08 18:01:33 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-18 01:51:24 +08:00
										 |  |  | For B<pss> mode only this option specifies the salt length. Three special | 
					
						
							| 
									
										
										
										
											2019-10-02 00:16:29 +08:00
										 |  |  | values are supported: B<digest> sets the salt length to the digest length, | 
					
						
							|  |  |  | B<max> sets the salt length to the maximum permissible value. When verifying | 
					
						
							|  |  |  | B<auto> causes the salt length to be automatically determined based on the | 
					
						
							| 
									
										
										
										
											2017-01-18 01:51:24 +08:00
										 |  |  | B<PSS> block structure. | 
					
						
							| 
									
										
										
										
											2006-07-08 18:01:33 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-02 00:16:29 +08:00
										 |  |  | =item B<rsa_mgf1_md:>I<digest> | 
					
						
							| 
									
										
										
										
											2017-01-04 22:06:44 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | For PSS and OAEP padding sets the MGF1 digest. If the MGF1 digest is not | 
					
						
							|  |  |  | explicitly set in PSS mode then the signing digest is used. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =back | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =head1 RSA-PSS ALGORITHM | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The RSA-PSS algorithm is a restricted version of the RSA algorithm which only | 
					
						
							|  |  |  | supports the sign and verify operations with PSS padding. The following | 
					
						
							| 
									
										
										
										
											2019-10-02 00:16:29 +08:00
										 |  |  | additional B<-pkeyopt> values are supported: | 
					
						
							| 
									
										
										
										
											2017-01-04 22:06:44 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =over 4 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-02 00:16:29 +08:00
										 |  |  | =item B<rsa_padding_mode:>I<mode>, B<rsa_pss_saltlen:>I<len>, | 
					
						
							|  |  |  | B<rsa_mgf1_md:>I<digest> | 
					
						
							| 
									
										
										
										
											2017-01-04 22:06:44 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | These have the same meaning as the B<RSA> algorithm with some additional | 
					
						
							|  |  |  | restrictions. The padding mode can only be set to B<pss> which is the | 
					
						
							|  |  |  | default value. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If the key has parameter restrictions than the digest, MGF1 | 
					
						
							|  |  |  | digest and salt length are set to the values specified in the parameters. | 
					
						
							|  |  |  | The digest and MG cannot be changed and the salt length cannot be set to a | 
					
						
							|  |  |  | value less than the minimum restriction. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-07-08 18:01:33 +08:00
										 |  |  | =back | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =head1 DSA ALGORITHM | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The DSA algorithm supports signing and verification operations only. Currently | 
					
						
							| 
									
										
										
										
											2019-03-07 22:02:56 +08:00
										 |  |  | there are no additional B<-pkeyopt> options other than B<digest>. The SHA1 | 
					
						
							|  |  |  | digest is assumed by default. | 
					
						
							| 
									
										
										
										
											2006-07-08 18:01:33 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 DH ALGORITHM | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The DH algorithm only supports the derivation operation and no additional | 
					
						
							| 
									
										
										
										
											2019-03-07 22:02:56 +08:00
										 |  |  | B<-pkeyopt> options. | 
					
						
							| 
									
										
										
										
											2006-07-08 18:01:33 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 EC ALGORITHM | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The EC algorithm supports sign, verify and derive operations. The sign and | 
					
						
							| 
									
										
										
										
											2019-03-07 22:02:56 +08:00
										 |  |  | verify operations use ECDSA and derive uses ECDH. SHA1 is assumed by default for | 
					
						
							|  |  |  | the B<-pkeyopt> B<digest> option. | 
					
						
							| 
									
										
										
										
											2006-07-08 08:47:04 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-16 20:34:16 +08:00
										 |  |  | =head1 X25519 AND X448 ALGORITHMS | 
					
						
							| 
									
										
										
										
											2016-08-13 00:27:11 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-28 01:28:48 +08:00
										 |  |  | The X25519 and X448 algorithms support key derivation only. Currently there are | 
					
						
							|  |  |  | no additional options. | 
					
						
							| 
									
										
										
										
											2016-08-13 00:27:11 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-16 20:34:16 +08:00
										 |  |  | =head1 ED25519 AND ED448 ALGORITHMS | 
					
						
							| 
									
										
										
										
											2019-03-07 18:37:34 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | These algorithms only support signing and verifying. OpenSSL only implements the | 
					
						
							|  |  |  | "pure" variants of these algorithms so raw data can be passed directly to them | 
					
						
							| 
									
										
										
										
											2019-10-02 00:16:29 +08:00
										 |  |  | without hashing them first. The option B<-rawin> must be used with these | 
					
						
							|  |  |  | algorithms with no B<-digest> specified. Additionally OpenSSL only supports | 
					
						
							| 
									
										
										
										
											2019-03-07 18:37:34 +08:00
										 |  |  | "oneshot" operation with these algorithms. This means that the entire file to | 
					
						
							|  |  |  | be signed/verified must be read into memory before processing it. Signing or | 
					
						
							|  |  |  | Verifying very large files should be avoided. Additionally the size of the file | 
					
						
							|  |  |  | must be known for this to work. If the size of the file cannot be determined | 
					
						
							|  |  |  | (for example if the input is stdin) then the sign or verify operation will fail. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-16 16:16:28 +08:00
										 |  |  | =head1 SM2 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The SM2 algorithm supports sign, verify, encrypt and decrypt operations. For | 
					
						
							| 
									
										
										
										
											2020-03-11 06:08:59 +08:00
										 |  |  | the sign and verify operations, SM2 requires an Distinguishing ID string to | 
					
						
							|  |  |  | be passed in. The following B<-pkeyopt> value is supported: | 
					
						
							| 
									
										
										
										
											2019-01-16 16:16:28 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =over 4 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-11 06:08:59 +08:00
										 |  |  | =item B<distid:>I<string> | 
					
						
							| 
									
										
										
										
											2019-01-16 16:16:28 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | This sets the ID string used in SM2 sign or verify operations. While verifying | 
					
						
							|  |  |  | an SM2 signature, the ID string must be the same one used when signing the data. | 
					
						
							|  |  |  | Otherwise the verification will fail. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-11 06:08:59 +08:00
										 |  |  | =item B<hexdistid:>I<hex_string> | 
					
						
							| 
									
										
										
										
											2019-07-30 23:05:44 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | This sets the ID string used in SM2 sign or verify operations. While verifying | 
					
						
							|  |  |  | an SM2 signature, the ID string must be the same one used when signing the data. | 
					
						
							|  |  |  | Otherwise the verification will fail. The ID string provided with this option | 
					
						
							|  |  |  | should be a valid hexadecimal value. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-16 16:16:28 +08:00
										 |  |  | =back | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-07-08 08:47:04 +08:00
										 |  |  | =head1 EXAMPLES | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Sign some data using a private key: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  openssl pkeyutl -sign -in file -inkey key.pem -out sig | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Recover the signed data (e.g. if an RSA key is used): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  openssl pkeyutl -verifyrecover -in sig -inkey key.pem | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Verify the signature (e.g. a DSA key): | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-07-08 08:50:25 +08:00
										 |  |  |  openssl pkeyutl -verify -in file -sigfile sig -inkey key.pem | 
					
						
							| 
									
										
										
										
											2006-07-08 08:47:04 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-07-08 18:01:33 +08:00
										 |  |  | Sign data using a message digest value (this is currently only valid for RSA): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  openssl pkeyutl -sign -in file -inkey key.pem -out sig -pkeyopt digest:sha256 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Derive a shared secret value: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  openssl pkeyutl -derive -inkey key.pem -peerkey pubkey.pem -out secret | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-02 00:29:47 +08:00
										 |  |  | Hexdump 48 bytes of TLS1 PRF using digest B<SHA256> and shared secret and | 
					
						
							| 
									
										
										
										
											2016-03-05 14:13:58 +08:00
										 |  |  | seed consisting of the single byte 0xFF: | 
					
						
							| 
									
										
										
										
											2016-03-02 00:29:47 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |  openssl pkeyutl -kdf TLS1-PRF -kdflen 48 -pkeyopt md:SHA256 \ | 
					
						
							|  |  |  |     -pkeyopt hexsecret:ff -pkeyopt hexseed:ff -hexdump | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-21 03:06:13 +08:00
										 |  |  | Derive a key using B<scrypt> where the password is read from command line: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  openssl pkeyutl -kdf scrypt -kdflen 16 -pkeyopt_passin pass \ | 
					
						
							|  |  |  |     -pkeyopt hexsalt:aabbcc -pkeyopt N:16384 -pkeyopt r:8 -pkeyopt p:1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Derive using the same algorithm, but read key from environment variable MYPASS: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  openssl pkeyutl -kdf scrypt -kdflen 16 -pkeyopt_passin pass:env:MYPASS \ | 
					
						
							|  |  |  |     -pkeyopt hexsalt:aabbcc -pkeyopt N:16384 -pkeyopt r:8 -pkeyopt p:1 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-16 16:16:28 +08:00
										 |  |  | Sign some data using an L<SM2(7)> private key and a specific ID: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  openssl pkeyutl -sign -in file -inkey sm2.key -out sig -rawin -digest sm3 \ | 
					
						
							| 
									
										
										
										
											2020-03-11 06:08:59 +08:00
										 |  |  |     -pkeyopt distid:someid | 
					
						
							| 
									
										
										
										
											2019-01-16 16:16:28 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Verify some data using an L<SM2(7)> certificate and a specific ID: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  openssl pkeyutl -verify -certin -in file -inkey sm2.cert -sigfile sig \ | 
					
						
							| 
									
										
										
										
											2020-03-11 06:08:59 +08:00
										 |  |  |     -rawin -digest sm3 -pkeyopt distid:someid | 
					
						
							| 
									
										
										
										
											2019-01-16 16:16:28 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-07-08 08:47:04 +08:00
										 |  |  | =head1 SEE ALSO | 
					
						
							| 
									
										
										
										
											2006-07-08 08:50:25 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-22 07:04:41 +08:00
										 |  |  | L<openssl(1)>, | 
					
						
							|  |  |  | L<openssl-genpkey(1)>, | 
					
						
							|  |  |  | L<openssl-pkey(1)>, | 
					
						
							|  |  |  | L<openssl-rsautl(1)> | 
					
						
							|  |  |  | L<openssl-dgst(1)>, | 
					
						
							|  |  |  | L<openssl-rsa(1)>, | 
					
						
							|  |  |  | L<openssl-genrsa(1)>, | 
					
						
							|  |  |  | L<openssl-kdf(1)> | 
					
						
							|  |  |  | L<EVP_PKEY_CTX_set_hkdf_md(3)>, | 
					
						
							|  |  |  | L<EVP_PKEY_CTX_set_tls1_prf_md(3)>, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-06 19:51:50 +08:00
										 |  |  | =head1 HISTORY | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | All B<-keyform> values except B<ENGINE> have become obsolete in OpenSSL 3.0.0 | 
					
						
							|  |  |  | and have no effect. | 
					
						
							| 
									
										
										
										
											2016-05-18 22:16:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-25 09:27:51 +08:00
										 |  |  | The B<-engine> option was deprecated in OpenSSL 3.0. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-18 23:44:05 +08:00
										 |  |  | =head1 COPYRIGHT | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-04-23 20:55:52 +08:00
										 |  |  | Copyright 2006-2020 The OpenSSL Project Authors. All Rights Reserved. | 
					
						
							| 
									
										
										
										
											2016-05-18 23:44:05 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-06 21:04:11 +08:00
										 |  |  | Licensed under the Apache License 2.0 (the "License").  You may not use | 
					
						
							| 
									
										
										
										
											2016-05-18 23:44:05 +08:00
										 |  |  | this file except in compliance with the License.  You can obtain a copy | 
					
						
							|  |  |  | in the file LICENSE in the source distribution or at | 
					
						
							|  |  |  | L<https://www.openssl.org/source/license.html>. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =cut |