summaryrefslogtreecommitdiff
path: root/static/freebsd/man1/openssl-pkeyutl.1
diff options
context:
space:
mode:
Diffstat (limited to 'static/freebsd/man1/openssl-pkeyutl.1')
-rw-r--r--static/freebsd/man1/openssl-pkeyutl.1740
1 files changed, 740 insertions, 0 deletions
diff --git a/static/freebsd/man1/openssl-pkeyutl.1 b/static/freebsd/man1/openssl-pkeyutl.1
new file mode 100644
index 00000000..251304ae
--- /dev/null
+++ b/static/freebsd/man1/openssl-pkeyutl.1
@@ -0,0 +1,740 @@
+.\" -*- mode: troff; coding: utf-8 -*-
+.\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
+.ie n \{\
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{\
+. if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{\
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\"
+.\" Required to disable full justification in groff 1.23.0.
+.if n .ds AD l
+.\" ========================================================================
+.\"
+.IX Title "OPENSSL-PKEYUTL 1ossl"
+.TH OPENSSL-PKEYUTL 1ossl 2026-04-07 3.5.6 OpenSSL
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH NAME
+openssl\-pkeyutl \- asymmetric key command
+.SH SYNOPSIS
+.IX Header "SYNOPSIS"
+\&\fBopenssl\fR \fBpkeyutl\fR
+[\fB\-help\fR]
+[\fB\-in\fR \fIfile\fR]
+[\fB\-rawin\fR]
+[\fB\-digest\fR \fIalgorithm\fR]
+[\fB\-out\fR \fIfile\fR]
+[\fB\-secret\fR \fIfile\fR]
+[\fB\-sigfile\fR \fIfile\fR]
+[\fB\-inkey\fR \fIfilename\fR|\fIuri\fR]
+[\fB\-keyform\fR \fBDER\fR|\fBPEM\fR|\fBP12\fR|\fBENGINE\fR]
+[\fB\-passin\fR \fIarg\fR]
+[\fB\-pubin\fR]
+[\fB\-certin\fR]
+[\fB\-rev\fR]
+[\fB\-sign\fR]
+[\fB\-verify\fR]
+[\fB\-verifyrecover\fR]
+[\fB\-encrypt\fR]
+[\fB\-decrypt\fR]
+[\fB\-derive\fR]
+[\fB\-peerkey\fR \fIfile\fR]
+[\fB\-peerform\fR \fBDER\fR|\fBPEM\fR|\fBP12\fR|\fBENGINE\fR]
+[\fB\-encap\fR]
+[\fB\-decap\fR]
+[\fB\-kdf\fR \fIalgorithm\fR]
+[\fB\-kdflen\fR \fIlength\fR]
+[\fB\-kemop\fR \fImode\fR]
+[\fB\-pkeyopt\fR \fIopt\fR:\fIvalue\fR]
+[\fB\-pkeyopt_passin\fR \fIopt\fR[:\fIpassarg\fR]]
+[\fB\-hexdump\fR]
+[\fB\-asn1parse\fR]
+[\fB\-engine\fR \fIid\fR]
+[\fB\-engine_impl\fR]
+[\fB\-rand\fR \fIfiles\fR]
+[\fB\-writerand\fR \fIfile\fR]
+[\fB\-provider\fR \fIname\fR]
+[\fB\-provider\-path\fR \fIpath\fR]
+[\fB\-provparam\fR \fI[name:]key=value\fR]
+[\fB\-propquery\fR \fIpropq\fR]
+[\fB\-config\fR \fIconfigfile\fR]
+.SH DESCRIPTION
+.IX Header "DESCRIPTION"
+This command can be used to perform low\-level operations
+on asymmetric (public or private) keys using any supported algorithm.
+.PP
+By default the signing operation (see \fB\-sign\fR option) is assumed.
+.SH OPTIONS
+.IX Header "OPTIONS"
+.IP \fB\-help\fR 4
+.IX Item "-help"
+Print out a usage message.
+.IP "\fB\-in\fR \fIfilename\fR" 4
+.IX Item "-in filename"
+This specifies the input filename to read data from or standard input
+if this option is not specified.
+.IP \fB\-rawin\fR 4
+.IX Item "-rawin"
+This indicates that the signature or verification input data is raw data,
+which is not hashed by any message digest algorithm.
+Except with EdDSA,
+the user can specify a digest algorithm by using the \fB\-digest\fR option.
+For signature algorithms like RSA, DSA and ECDSA,
+the default digest algorithm is SHA256. For SM2, it is SM3.
+.Sp
+This option can only be used with \fB\-sign\fR and \fB\-verify\fR.
+For EdDSA (the Ed25519 and Ed448 algorithms) this option
+is implied since OpenSSL 3.5, and required in earlier versions.
+.Sp
+The \fB\-digest\fR option implies \fB\-rawin\fR since OpenSSL 3.5.
+.IP "\fB\-digest\fR \fIalgorithm\fR" 4
+.IX Item "-digest algorithm"
+This option can only be used with \fB\-sign\fR and \fB\-verify\fR.
+It specifies the digest algorithm that 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 preprocessing the input through
+a pluggable hash function before signing (for instance, EdDSA). If this option
+is omitted but the signature algorithm requires one and the \fB\-rawin\fR option
+is given, a default value will be used (see \fB\-rawin\fR for details).
+If this option is present, then the \fB\-rawin\fR option
+is implied since OpenSSL 3.5, and required in earlier versions.
+.Sp
+At this time, HashEdDSA (the ph or "prehash" variant of EdDSA) is not supported,
+so the \fB\-digest\fR option cannot be used with EdDSA.
+.IP "\fB\-out\fR \fIfilename\fR" 4
+.IX Item "-out filename"
+Specifies the output filename to write to or standard output by default.
+.IP "\fB\-secret\fR \fIfilename\fR" 4
+.IX Item "-secret filename"
+Specifies the shared\-secret output filename for when performing encapsulation
+via the \fB\-encap\fR option or decapsulation via the \fB\-decap\fR option.
+The \fB\-encap\fR option also produces a separate (public) ciphertext output which
+is by default written to standard output, but being \fIbinary\fR non\-text data,
+is typically also redirected to a file selected via the \fI\-out\fR option.
+.IP "\fB\-sigfile\fR \fIfile\fR" 4
+.IX Item "-sigfile file"
+Signature file, required and allowed for \fB\-verify\fR operations only.
+.IP "\fB\-inkey\fR \fIfilename\fR|\fIuri\fR" 4
+.IX Item "-inkey filename|uri"
+The input key, by default it should be a private key.
+.IP "\fB\-keyform\fR \fBDER\fR|\fBPEM\fR|\fBP12\fR|\fBENGINE\fR" 4
+.IX Item "-keyform DER|PEM|P12|ENGINE"
+The key format; unspecified by default.
+See \fBopenssl\-format\-options\fR\|(1) for details.
+.IP "\fB\-passin\fR \fIarg\fR" 4
+.IX Item "-passin arg"
+The input key password source. For more information about the format of \fIarg\fR
+see \fBopenssl\-passphrase\-options\fR\|(1).
+.IP \fB\-pubin\fR 4
+.IX Item "-pubin"
+By default a private key is read from the key input.
+With this option a public key is read instead.
+If the input contains no public key but a private key, its public part is used.
+.IP \fB\-certin\fR 4
+.IX Item "-certin"
+The input is a certificate containing a public key.
+.IP \fB\-rev\fR 4
+.IX Item "-rev"
+Reverse the order of the input buffer. This is useful for some libraries
+(such as CryptoAPI) which represent the buffer in little\-endian format.
+This cannot be used in conjunction with \fB\-rawin\fR.
+.IP \fB\-sign\fR 4
+.IX Item "-sign"
+Sign the input data and output the signed result. This requires a private key.
+Using a message digest operation along with this is recommended,
+when applicable, see the \fB\-rawin\fR and \fB\-digest\fR options for details.
+Otherwise, the input data given with the \fB\-in\fR option is assumed to already
+be a digest, but this may then require an additional \fB\-pkeyopt\fR \f(CW\*(C`digest:\*(C'\fR\fImd\fR
+in some cases (e.g., RSA with the default PKCS#1 padding mode).
+Even for other algorithms like ECDSA, where the additional \fB\-pkeyopt\fR option
+does not affect signature output, it is recommended, as it enables
+checking that the input length is consistent with the intended digest.
+.IP \fB\-verify\fR 4
+.IX Item "-verify"
+Verify the input data against the signature given with the \fB\-sigfile\fR option
+and indicate if the verification succeeded or failed.
+The input data given with the \fB\-in\fR option is assumed to be a hash value
+unless the \fB\-rawin\fR option is specified or implied.
+With raw data, when a digest algorithm is applicable, though it may be inferred
+from the signature or take a default value, it should also be specified.
+.IP \fB\-verifyrecover\fR 4
+.IX Item "-verifyrecover"
+Verify the given signature and output the recovered data (signature payload).
+For example, in case of RSA PKCS#1 the recovered data is the \fBEMSA\-PKCS\-v1_5\fR
+DER encoding of the digest algorithm OID and value as specified in
+RFC8017 Section 9.2 <https://datatracker.ietf.org/doc/html/rfc8017#section-9.2>.
+.Sp
+Note that here the input given with the \fB\-in\fR option is not a signature input
+(as with the \fB\-sign\fR and \fB\-verify\fR options) but a signature output value,
+typically produced using the \fB\-sign\fR option.
+.Sp
+This option is available only for use with RSA keys.
+.IP \fB\-encrypt\fR 4
+.IX Item "-encrypt"
+Encrypt the input data using a public key.
+.IP \fB\-decrypt\fR 4
+.IX Item "-decrypt"
+Decrypt the input data using a private key.
+.IP \fB\-derive\fR 4
+.IX Item "-derive"
+Derive a shared secret using own private (EC)DH key and peer key.
+.IP "\fB\-peerkey\fR \fIfile\fR" 4
+.IX Item "-peerkey file"
+File containing the peer public or private (EC)DH key
+to use with the key derivation (agreement) operation.
+Its type must match the type of the own private key given with \fB\-inkey\fR.
+.IP "\fB\-peerform\fR \fBDER\fR|\fBPEM\fR|\fBP12\fR|\fBENGINE\fR" 4
+.IX Item "-peerform DER|PEM|P12|ENGINE"
+The peer key format; unspecified by default.
+See \fBopenssl\-format\-options\fR\|(1) for details.
+.IP \fB\-encap\fR 4
+.IX Item "-encap"
+Use a Key Encapsulation Mechanism (\fBKEM\fR) to \fBencapsulate\fR a shared\-secret to
+a peer\*(Aqs \fBpublic\fR key.
+The encapsulated result (or ciphertext, non\-text binary data) is written to
+standard output by default, or else to the file specified with \fI\-out\fR.
+The \fI\-secret\fR option must also be provided to specify the output file for the
+derived shared\-secret value generated in the encapsulation process.
+Encapsulation is supported with a number of public key algorithms, currently:
+ML\-KEM,
+X25519,
+X448,
+and
+EC.
+The ECX and EC algorithms use the
+RFC9180 <https://www.rfc-editor.org/rfc/rfc9180> DHKEM construction.
+Encapsulation is also supported with RSA keys via the
+\&\fBRSASVE\fR construction.
+.Sp
+At the API level, encapsulation and decapsulation are also supported for a few
+hybrid ECDHE (no DHKEM) plus \fBML\-KEM\fR algorithms, but these are intended
+primarily for use with TLS and should not be used standalone.
+There are in any case no standard public and private key formats for the hybrid
+algorithms, so it is not possible to provide the required key material.
+.IP \fB\-decap\fR 4
+.IX Item "-decap"
+Decode an encapsulated secret, with the use of a \fB\-private\fR key, to derive the
+same shared\-secret as that obtained when the secret was encapsulated to the
+corresponding public key.
+The encapsulated secret is by default read from the standard input, or else
+from the file specified with \fB\-in\fR.
+The derived shared\-secret is written to the file specified with the \fB\-secret\fR
+option, which \fImust\fR also be provided.
+Decapsulation is supported with a number of public key algorithms, currently:
+ML\-KEM,
+X25519,
+X448,
+and
+EC.
+The ECX and EC algorithms use the
+RFC9180 <https://www.rfc-editor.org/rfc/rfc9180> DHKEM construction.
+Decapsulation is also supported with RSA keys via the
+\&\fBRSASVE\fR construction.
+.IP "\fB\-kemop\fR \fImode\fR" 4
+.IX Item "-kemop mode"
+This option is used with the \fI\-encap\fR/\fI\-decap\fR commands and specifies the KEM
+\&\fImode\fR specific for the key algorithm when there is no default way to
+encapsulate and decapsulate shared secrets with the chosen key type.
+All the supported algorithms presently support only their default \fImode\fR, and
+this option, though available, is not required.
+.IP "\fB\-kdf\fR \fIalgorithm\fR" 4
+.IX Item "-kdf algorithm"
+Use key derivation function \fIalgorithm\fR. The supported algorithms are
+at present \fBTLS1\-PRF\fR and \fBHKDF\fR.
+Note: additional parameters and the KDF output length will normally have to be
+set for this to work.
+See \fBEVP_PKEY_CTX_set_hkdf_md\fR\|(3) and \fBEVP_PKEY_CTX_set_tls1_prf_md\fR\|(3)
+for the supported string parameters of each algorithm.
+.IP "\fB\-kdflen\fR \fIlength\fR" 4
+.IX Item "-kdflen length"
+Set the output length for KDF.
+.IP "\fB\-pkeyopt\fR \fIopt\fR:\fIvalue\fR" 4
+.IX Item "-pkeyopt opt:value"
+Public key options specified as opt:value. See NOTES below for more details.
+.IP "\fB\-pkeyopt_passin\fR \fIopt\fR[:\fIpassarg\fR]" 4
+.IX Item "-pkeyopt_passin opt[:passarg]"
+Allows reading a public key option \fIopt\fR from stdin or a password source.
+If only \fIopt\fR is specified, the user will be prompted to enter a password on
+stdin. Alternatively, \fIpassarg\fR can be specified which can be any value
+supported by \fBopenssl\-passphrase\-options\fR\|(1).
+.IP \fB\-hexdump\fR 4
+.IX Item "-hexdump"
+hex dump the output data.
+.IP \fB\-asn1parse\fR 4
+.IX Item "-asn1parse"
+Parse the ASN.1 output data to check its DER encoding and print any errors.
+When combined with the \fB\-verifyrecover\fR option, this may be useful in case
+an ASN.1 DER\-encoded structure had been signed directly (without hashing it)
+and when checking a signature in PKCS#1 v1.5 format, which has a DER encoding.
+.IP "\fB\-engine\fR \fIid\fR" 4
+.IX Item "-engine id"
+See "Engine Options" in \fBopenssl\fR\|(1).
+This option is deprecated.
+.IP \fB\-engine_impl\fR 4
+.IX Item "-engine_impl"
+When used with the \fB\-engine\fR option, it specifies to also use
+engine \fIid\fR for crypto operations.
+.IP "\fB\-rand\fR \fIfiles\fR, \fB\-writerand\fR \fIfile\fR" 4
+.IX Item "-rand files, -writerand file"
+See "Random State Options" in \fBopenssl\fR\|(1) for details.
+.IP "\fB\-provider\fR \fIname\fR" 4
+.IX Item "-provider name"
+.PD 0
+.IP "\fB\-provider\-path\fR \fIpath\fR" 4
+.IX Item "-provider-path path"
+.IP "\fB\-provparam\fR \fI[name:]key=value\fR" 4
+.IX Item "-provparam [name:]key=value"
+.IP "\fB\-propquery\fR \fIpropq\fR" 4
+.IX Item "-propquery propq"
+.PD
+See "Provider Options" in \fBopenssl\fR\|(1), \fBprovider\fR\|(7), and \fBproperty\fR\|(7).
+.IP "\fB\-config\fR \fIconfigfile\fR" 4
+.IX Item "-config configfile"
+See "Configuration Option" in \fBopenssl\fR\|(1).
+.SH NOTES
+.IX Header "NOTES"
+The operations and options supported vary according to the key algorithm
+and its implementation. The OpenSSL operations and options are indicated below.
+.PP
+Unless otherwise mentioned, the \fB\-pkeyopt\fR option supports
+for all public\-key types the \f(CW\*(C`digest:\*(C'\fR\fIalg\fR argument,
+which specifies the digest in use for the signing and verification operations.
+The value \fIalg\fR should represent a digest name as used in the
+\&\fBEVP_get_digestbyname()\fR function for example \fBsha256\fR. This value is not used to
+hash the input data. It is used (by some algorithms) for sanity\-checking the
+lengths of data passed in and for creating the structures that make up the
+signature (e.g., \fBDigestInfo\fR in RSASSA PKCS#1 v1.5 signatures).
+.PP
+For instance,
+if the value of the \fB\-pkeyopt\fR option \f(CW\*(C`digest\*(C'\fR argument is \fBsha256\fR,
+the signature or verification input should be the 32 bytes long binary value
+of the SHA256 hash function output.
+.PP
+Unless \fB\-rawin\fR is used or implied, this command does not hash the input data
+but 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
+sensible lengths of input data differ. With RSA the signed data cannot be longer
+than the key modulus. In case of ECDSA and DSA the data should not 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
+output size \fBEVP_MAX_MD_SIZE\fR, which currently is 64 bytes.
+.SH "RSA ALGORITHM"
+.IX Header "RSA ALGORITHM"
+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
+\&\fBpkeyopt\fR values are supported:
+.IP \fBrsa_padding_mode:\fR\fImode\fR 4
+.IX Item "rsa_padding_mode:mode"
+This sets the RSA padding mode. Acceptable values for \fImode\fR are \fBpkcs1\fR for
+PKCS#1 padding, \fBnone\fR for no padding, \fBoaep\fR
+for \fBOAEP\fR mode, \fBx931\fR for X9.31 mode and \fBpss\fR for PSS.
+.Sp
+In PKCS#1 padding, if the message digest is not set, then the supplied data is
+signed or verified directly instead of using a \fBDigestInfo\fR structure. If a
+digest is set, then the \fBDigestInfo\fR structure is used and its length
+must correspond to the digest type.
+.Sp
+Note, for \fBpkcs1\fR padding, as a protection against the Bleichenbacher attack,
+the decryption will not fail in case of padding check failures. Use \fBnone\fR
+and manual inspection of the decrypted message to verify if the decrypted
+value has correct PKCS#1 v1.5 padding.
+.Sp
+For \fBoaep\fR mode only encryption and decryption is supported.
+.Sp
+For \fBx931\fR 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.
+.Sp
+For \fBpss\fR mode only sign and verify are supported and the digest type must be
+specified.
+.IP \fBrsa_pss_saltlen:\fR\fIlen\fR 4
+.IX Item "rsa_pss_saltlen:len"
+For \fBpss\fR mode only this option specifies the salt length. Three special
+values are supported: \fBdigest\fR sets the salt length to the digest length,
+\&\fBmax\fR sets the salt length to the maximum permissible value. When verifying
+\&\fBauto\fR causes the salt length to be automatically determined based on the
+\&\fBPSS\fR block structure.
+.IP \fBrsa_mgf1_md:\fR\fIdigest\fR 4
+.IX Item "rsa_mgf1_md:digest"
+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.
+.IP \fBrsa_oaep_md:\fR\fIdigest\fR 4
+.IX Item "rsa_oaep_md:digest"
+Sets the digest used for the OAEP hash function. If not explicitly set then
+SHA256 is used.
+.IP \fBrsa_pkcs1_implicit_rejection:\fR\fIflag\fR 4
+.IX Item "rsa_pkcs1_implicit_rejection:flag"
+Disables (when set to 0) or enables (when set to 1) the use of implicit
+rejection with PKCS#1 v1.5 decryption. When enabled (the default), as a
+protection against Bleichenbacher attack, the library will generate a
+deterministic random plaintext that it will return to the caller in case
+of padding check failure.
+When disabled, it\*(Aqs the callers\*(Aq responsibility to handle the returned
+errors in a side\-channel free manner.
+.SH "RSA\-PSS ALGORITHM"
+.IX Header "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
+additional \fB\-pkeyopt\fR values are supported:
+.IP "\fBrsa_padding_mode:\fR\fImode\fR, \fBrsa_pss_saltlen:\fR\fIlen\fR, \fBrsa_mgf1_md:\fR\fIdigest\fR" 4
+.IX Item "rsa_padding_mode:mode, rsa_pss_saltlen:len, rsa_mgf1_md:digest"
+These have the same meaning as the \fBRSA\fR algorithm with some additional
+restrictions. The padding mode can only be set to \fBpss\fR which is the
+default value.
+.Sp
+If the key has parameter restrictions then 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.
+.SH "DSA ALGORITHM"
+.IX Header "DSA ALGORITHM"
+The DSA algorithm supports signing and verification operations only. Currently
+there are no additional \fB\-pkeyopt\fR options other than \fBdigest\fR. The SHA256
+digest is assumed by default.
+.SH "DH ALGORITHM"
+.IX Header "DH ALGORITHM"
+The DH algorithm only supports the derivation operation and no additional
+\&\fB\-pkeyopt\fR options.
+.SH "EC ALGORITHM"
+.IX Header "EC ALGORITHM"
+The EC algorithm supports sign, verify and derive operations. The sign and
+verify operations use ECDSA and derive uses ECDH. SHA256 is assumed by default
+for the \fB\-pkeyopt\fR \fBdigest\fR option.
+.SH "X25519 AND X448 ALGORITHMS"
+.IX Header "X25519 AND X448 ALGORITHMS"
+The X25519 and X448 algorithms support key derivation only. Currently there are
+no additional options.
+.SS "SLH\-DSA ALGORITHMS"
+.IX Subsection "SLH-DSA ALGORITHMS"
+The SLH\-DSA algorithms (SLH\-DSA\-SHA2\-128s, SLH\-DSA\-SHA2\-128f, SLH\-DSA\-SHA2\-192s, SLH\-DSA\-SHA2\-192f, SLH\-DSA\-SHA2\-256s, SLH\-DSA\-SHA2\-256f) are post\-quantum signature algorithms. When using SLH\-DSA with pkeyutl, the following options are available:
+.IP \fB\-sign\fR 4
+.IX Item "-sign"
+Sign the input data using an SLH\-DSA private key. For example:
+.Sp
+.Vb 1
+\& $ openssl pkeyutl \-sign \-in file.txt \-inkey slhdsa.pem \-out sig
+.Ve
+.IP \fB\-verify\fR 4
+.IX Item "-verify"
+Verify the signature using an SLH\-DSA public key. For example:
+.Sp
+.Vb 1
+\& $ openssl pkeyutl \-verify \-in file.txt \-inkey slhdsa.pem \-sigfile sig
+.Ve
+.PP
+See \fBEVP_PKEY\-SLH\-DSA\fR\|(7) and \fBEVP_SIGNATURE\-SLH\-DSA\fR\|(7) for additional details about the SLH\-DSA algorithm and its implementation.
+.SH "ML\-DSA\-44, ML\-DSA\-65 AND ML\-DSA\-87 ALGORITHMS"
+.IX Header "ML-DSA-44, ML-DSA-65 AND ML-DSA-87 ALGORITHMS"
+The ML\-DSA algorithms are post\-quantum signature algorithms that support signing and verification of "raw" messages.
+No preliminary hashing is performed. When using ML\-DSA with pkeyutl, the following options are available:
+.IP \fB\-sign\fR 4
+.IX Item "-sign"
+Sign the input data using an ML\-DSA private key. For example:
+.Sp
+.Vb 1
+\& $ openssl pkeyutl \-sign \-in file.txt \-inkey mldsa65.pem \-out sig
+.Ve
+.IP \fB\-verify\fR 4
+.IX Item "-verify"
+Verify the signature using an ML\-DSA public key. For example:
+.Sp
+.Vb 1
+\& $ openssl pkeyutl \-verify \-in file.txt \-inkey mldsa65.pem \-sigfile sig
+.Ve
+.IP "\fB\-pkeyopt\fR \fIopt\fR:\fIvalue\fR" 4
+.IX Item "-pkeyopt opt:value"
+Additional options for ML\-DSA signing and verification:
+.RS 4
+.IP \fBmessage\-encoding\fR:\fIvalue\fR 4
+.IX Item "message-encoding:value"
+Specifies the message encoding mode used for signing. This controls how the input message is processed before signing. Valid values are described in \fBEVP_SIGNATURE\-ML\-DSA\fR\|(7). For example:
+.Sp
+.Vb 1
+\& $ openssl pkeyutl \-sign \-in file.txt \-inkey mldsa65.pem \-out sig \-pkeyopt message\-encoding:1
+.Ve
+.IP \fBtest\-entropy\fR:\fIvalue\fR 4
+.IX Item "test-entropy:value"
+Specifies a test entropy value for deterministic signing. For example:
+.Sp
+.Vb 1
+\& $ openssl pkeyutl \-sign \-in file.txt \-inkey mldsa65.pem \-out sig \-pkeyopt test\-entropy:abcdefghijklmnopqrstuvwxyz012345
+.Ve
+.IP \fBhextest\-entropy\fR:\fIvalue\fR 4
+.IX Item "hextest-entropy:value"
+Specifies a test entropy value in hex format. For example:
+.Sp
+.Vb 1
+\& $ openssl pkeyutl \-sign \-in file.txt \-inkey mldsa65.pem \-out sig \-pkeyopt hextest\-entropy:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+.Ve
+.IP \fBdeterministic\fR:\fIvalue\fR 4
+.IX Item "deterministic:value"
+Enables deterministic signing. For example:
+.Sp
+.Vb 1
+\& $ openssl pkeyutl \-sign \-in file.txt \-inkey mldsa65.pem \-out sig \-pkeyopt deterministic:1
+.Ve
+.IP \fBmu\fR:\fIvalue\fR 4
+.IX Item "mu:value"
+Specifies the mu parameter. For example:
+.Sp
+.Vb 2
+\& $ echo \-n "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" >file.txt
+\& $ openssl pkeyutl \-sign \-in file.txt \-inkey mldsa65.pem \-out sig \-pkeyopt mu:1
+.Ve
+.RE
+.RS 4
+.RE
+.IP \fBcontext\-string\fR:\fIstring\fR 4
+.IX Item "context-string:string"
+Specifies a context string for both signing and verification operations. The context string must be the same for verification to succeed. For example:
+.Sp
+.Vb 2
+\& $ openssl pkeyutl \-sign \-in file.txt \-inkey mldsa65.pem \-out sig \-pkeyopt context\-string:mycontext
+\& $ openssl pkeyutl \-verify \-in file.txt \-inkey mldsa65.pem \-sigfile sig \-pkeyopt context\-string:mycontext
+.Ve
+.IP \fBhexcontext\-string\fR:\fIstring\fR 4
+.IX Item "hexcontext-string:string"
+Specifies a context string in hex format, allowing binary control values. For example:
+.Sp
+.Vb 1
+\& $ openssl pkeyutl \-sign \-in file.txt \-inkey mldsa65.pem \-out sig \-pkeyopt hexcontext\-string:6d79636f6e74657874
+.Ve
+.PP
+The signing operation supports a \fBdeterministic\fR:\fIbool\fR option,
+with \fIbool\fR set to \f(CW1\fR if a deterministic signature is to be generated
+with a fixed all zero random input.
+By default, or if the \fIbool\fR is \f(CW0\fR a random entropy value is used.
+A deterministic result can also be obtained by specifying an explicit
+entropy value via the \fBhextest\-entropy\fR:\fIvalue\fR parameter.
+Deterministic \fBML\-DSA\fR signing should only be used in tests.
+.PP
+See \fBEVP_SIGNATURE\-ML\-DSA\fR\|(7) for additional details about the ML\-DSA algorithms and their implementation.
+.SH "ML\-KEM\-512, ML\-KEM\-768 AND ML\-KEM\-1024 ALGORITHMS"
+.IX Header "ML-KEM-512, ML-KEM-768 AND ML-KEM-1024 ALGORITHMS"
+The ML\-KEM algorithms support encapsulation and decapsulation only.
+The encapsulation operation supports a \fBhexikme\fR:\fIentropy\fR option,
+with \fIentropy\fR the 64 hexadecimal digit encoding of a 32\-byte value.
+This should only be used in tests, known or leaked values of the option may
+compromise the generated shared secret.
+.PP
+See \fBEVP_KEM\-ML\-KEM\fR\|(7) for additional detail.
+.SH "ED25519 AND ED448 ALGORITHMS"
+.IX Header "ED25519 AND ED448 ALGORITHMS"
+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
+without hashing them first. OpenSSL only supports
+"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.
+.SH SM2
+.IX Header "SM2"
+The SM2 algorithm supports sign, verify, encrypt and decrypt operations. For
+the sign and verify operations, SM2 requires an Distinguishing ID string to
+be passed in. The following \fB\-pkeyopt\fR value is supported:
+.IP \fBdistid:\fR\fIstring\fR 4
+.IX Item "distid:string"
+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.
+.IP \fBhexdistid:\fR\fIhex_string\fR 4
+.IX Item "hexdistid:hex_string"
+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.
+.SH EXAMPLES
+.IX Header "EXAMPLES"
+Sign some data using a private key:
+.PP
+.Vb 1
+\& openssl pkeyutl \-sign \-in file \-inkey key.pem \-out sig
+.Ve
+.PP
+Recover the signed data (e.g. if an RSA key is used):
+.PP
+.Vb 1
+\& openssl pkeyutl \-verifyrecover \-in sig \-inkey key.pem
+.Ve
+.PP
+Verify the signature (e.g. a DSA key):
+.PP
+.Vb 1
+\& openssl pkeyutl \-verify \-in file \-sigfile sig \-inkey key.pem
+.Ve
+.PP
+Sign data using a message digest value (this is currently only valid for RSA):
+.PP
+.Vb 1
+\& openssl pkeyutl \-sign \-in file \-inkey key.pem \-out sig \-pkeyopt digest:sha256
+.Ve
+.PP
+Derive a shared secret value:
+.PP
+.Vb 1
+\& openssl pkeyutl \-derive \-inkey key.pem \-peerkey pubkey.pem \-out secret
+.Ve
+.PP
+Hexdump 48 bytes of TLS1 PRF using digest \fBSHA256\fR and shared secret and
+seed consisting of the single byte 0xFF:
+.PP
+.Vb 2
+\& openssl pkeyutl \-kdf TLS1\-PRF \-kdflen 48 \-pkeyopt md:SHA256 \e
+\& \-pkeyopt hexsecret:ff \-pkeyopt hexseed:ff \-hexdump
+.Ve
+.PP
+Derive a key using \fBscrypt\fR where the password is read from command line:
+.PP
+.Vb 2
+\& openssl pkeyutl \-kdf scrypt \-kdflen 16 \-pkeyopt_passin pass \e
+\& \-pkeyopt hexsalt:aabbcc \-pkeyopt N:16384 \-pkeyopt r:8 \-pkeyopt p:1
+.Ve
+.PP
+Derive using the same algorithm, but read key from environment variable MYPASS:
+.PP
+.Vb 2
+\& openssl pkeyutl \-kdf scrypt \-kdflen 16 \-pkeyopt_passin pass:env:MYPASS \e
+\& \-pkeyopt hexsalt:aabbcc \-pkeyopt N:16384 \-pkeyopt r:8 \-pkeyopt p:1
+.Ve
+.PP
+Sign some data using an \fBSM2\fR\|(7) private key and a specific ID:
+.PP
+.Vb 2
+\& openssl pkeyutl \-sign \-in file \-inkey sm2.key \-out sig \-rawin \-digest sm3 \e
+\& \-pkeyopt distid:someid
+.Ve
+.PP
+Verify some data using an \fBSM2\fR\|(7) certificate and a specific ID:
+.PP
+.Vb 2
+\& openssl pkeyutl \-verify \-certin \-in file \-inkey sm2.cert \-sigfile sig \e
+\& \-rawin \-digest sm3 \-pkeyopt distid:someid
+.Ve
+.PP
+Decrypt some data using a private key with OAEP padding using SHA256:
+.PP
+.Vb 2
+\& openssl pkeyutl \-decrypt \-in file \-inkey key.pem \-out secret \e
+\& \-pkeyopt rsa_padding_mode:oaep \-pkeyopt rsa_oaep_md:sha256
+.Ve
+.PP
+Create an ML\-DSA key pair and sign data with a specific context string:
+.PP
+.Vb 2
+\& $ openssl genpkey \-algorithm ML\-DSA\-65 \-out mldsa65.pem
+\& $ openssl pkeyutl \-sign \-in file.txt \-inkey mldsa65.pem \-out sig \-pkeyopt context\-string:example
+.Ve
+.PP
+Verify a signature using ML\-DSA with the same context string:
+.PP
+.Vb 1
+\& $ openssl pkeyutl \-verify \-in file.txt \-inkey mldsa65.pem \-sigfile sig \-pkeyopt context\-string:example
+.Ve
+.PP
+Generate an ML\-KEM key pair and use it for encapsulation:
+.PP
+.Vb 3
+\& $ openssl genpkey \-algorithm ML\-KEM\-768 \-out mlkem768.pem
+\& $ openssl pkey \-in mlkem768.pem \-pubout \-out mlkem768_pub.pem
+\& $ openssl pkeyutl \-encap \-inkey mlkem768_pub.pem \-pubin \-out ciphertext \-secret shared_secret.bin
+.Ve
+.PP
+Decapsulate a shared secret using an ML\-KEM private key:
+.PP
+.Vb 1
+\& $ openssl pkeyutl \-decap \-inkey mlkem768.pem \-in ciphertext \-secret decapsulated_secret.bin
+.Ve
+.PP
+Create an SLH\-DSA key pair and sign data:
+.PP
+.Vb 2
+\& $ openssl genpkey \-algorithm SLH\-DSA\-SHA2\-128s \-out slh\-dsa.pem
+\& $ openssl pkeyutl \-sign \-in file.txt \-inkey slh\-dsa.pem \-out sig
+.Ve
+.PP
+Verify a signature using SLH\-DSA:
+.PP
+.Vb 1
+\& $ openssl pkeyutl \-verify \-in file.txt \-inkey slh\-dsa.pem \-sigfile sig
+.Ve
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fBopenssl\fR\|(1),
+\&\fBopenssl\-genpkey\fR\|(1),
+\&\fBopenssl\-pkey\fR\|(1),
+\&\fBopenssl\-rsautl\fR\|(1)
+\&\fBopenssl\-dgst\fR\|(1),
+\&\fBopenssl\-rsa\fR\|(1),
+\&\fBopenssl\-genrsa\fR\|(1),
+\&\fBopenssl\-kdf\fR\|(1)
+\&\fBEVP_PKEY_CTX_set_hkdf_md\fR\|(3),
+\&\fBEVP_PKEY_CTX_set_tls1_prf_md\fR\|(3),
+.SH HISTORY
+.IX Header "HISTORY"
+Since OpenSSL 3.5,
+the \fB\-digest\fR option implies \fB\-rawin\fR, and these two options are
+no longer required when signing or verifying with an Ed25519 or Ed448 key.
+.PP
+Also since OpenSSL 3.5, the \fB\-kemop\fR option is no longer required for any of
+the supported algorithms, the only supported \fBmode\fR is now the default.
+.PP
+The \fB\-engine\fR option was deprecated in OpenSSL 3.0.
+.SH COPYRIGHT
+.IX Header "COPYRIGHT"
+Copyright 2006\-2026 The OpenSSL Project Authors. All Rights Reserved.
+.PP
+Licensed under the Apache License 2.0 (the "License"). You may not use
+this file except in compliance with the License. You can obtain a copy
+in the file LICENSE in the source distribution or at
+<https://www.openssl.org/source/license.html>.