Local adjustments for OpenSSL-1.0.1j.
authorSascha Wildner <saw@online.de>
Wed, 22 Oct 2014 17:41:56 +0000 (19:41 +0200)
committerSascha Wildner <saw@online.de>
Wed, 22 Oct 2014 17:41:56 +0000 (19:41 +0200)
16 files changed:
Makefile_upgrade.inc
crypto/openssl/crypto/constant_time_locl.h
secure/lib/libcrypto/Makefile.man
secure/lib/libcrypto/man/BIO_s_accept.3
secure/lib/libcrypto/man/CMS_add1_signer.3 [new file with mode: 0644]
secure/lib/libcrypto/man/EVP_DigestInit.3
secure/lib/libcrypto/man/EVP_DigestVerifyInit.3
secure/lib/libcrypto/man/EVP_EncryptInit.3
secure/lib/libcrypto/man/EVP_PKEY_set1_RSA.3
secure/lib/libcrypto/man/EVP_PKEY_sign.3
secure/lib/libcrypto/opensslconf-i386.h
secure/lib/libcrypto/opensslconf-x86_64.h
secure/lib/libssl/man/SSL_CTX_set_tmp_dh_callback.3
secure/usr.bin/openssl/Makefile.man
secure/usr.bin/openssl/man/c_rehash.1 [copied from secure/lib/libcrypto/man/EVP_PKEY_sign.3 with 56% similarity]
secure/usr.bin/openssl/man/dgst.1

index e4b20b9..08ba875 100644 (file)
@@ -2640,6 +2640,8 @@ TO_REMOVE+=/usr/share/man/man4/ed.4.gz
 TO_REMOVE+=/usr/share/zoneinfo/Asia/Chongqing
 TO_REMOVE+=/usr/share/zoneinfo/Asia/Harbin
 TO_REMOVE+=/usr/share/zoneinfo/Asia/Kashgar
+TO_REMOVE+=/usr/share/openssl/man/cat3/CMS_sign_add1_signer.3.gz
+TO_REMOVE+=/usr/share/openssl/man/man3/CMS_sign_add1_signer.3.gz
 
 .if ${MACHINE_ARCH} == "x86_64"
 TO_REMOVE+=/usr/sbin/stlstats
index c048393..7b339a7 100644 (file)
@@ -204,7 +204,7 @@ static inline unsigned char constant_time_select_8(unsigned char mask,
        return (unsigned char)(constant_time_select(mask, a, b));
        }
 
-inline int constant_time_select_int(unsigned int mask, int a, int b)
+static inline int constant_time_select_int(unsigned int mask, int a, int b)
        {
        return (int)(constant_time_select(mask, (unsigned)(a), (unsigned)(b)));
        }
index 5a8a07e..562991e 100644 (file)
@@ -238,6 +238,8 @@ MLINKS+= CMS_add0_cert.3 CMS_add0_crl.3
 MLINKS+= CMS_add0_cert.3 CMS_get1_crls.3
 MAN+= CMS_add1_recipient_cert.3
 MLINKS+= CMS_add1_recipient_cert.3 CMS_add0_recipient_key.3
+MAN+= CMS_add1_signer.3
+MLINKS+= CMS_add1_signer.3 CMS_SignerInfo_sign.3
 MAN+= CMS_compress.3
 MAN+= CMS_decrypt.3
 MAN+= CMS_encrypt.3
@@ -263,8 +265,6 @@ MLINKS+= CMS_get1_ReceiptRequest.3 CMS_ReceiptRequest_create0.3
 MLINKS+= CMS_get1_ReceiptRequest.3 CMS_add1_ReceiptRequest.3
 MLINKS+= CMS_get1_ReceiptRequest.3 CMS_ReceiptRequest_get0_values.3
 MAN+= CMS_sign.3
-MAN+= CMS_sign_add1_signer.3
-MLINKS+= CMS_sign_add1_signer.3 CMS_SignerInfo_sign.3
 MAN+= CMS_sign_receipt.3
 MAN+= CMS_uncompress.3
 MAN+= CMS_verify.3
index 82821df..038c8df 100644 (file)
@@ -187,8 +187,8 @@ the accept socket. See \fIBIO_s_fd\fR\|(3)
 \&\fIBIO_set_accept_port()\fR uses the string \fBname\fR to set the accept
 port. The port is represented as a string of the form \*(L"host:port\*(R",
 where \*(L"host\*(R" is the interface to use and \*(L"port\*(R" is the port.
-Either or both values can be \*(L"*\*(R" which is interpreted as meaning
-any interface or port respectively. \*(L"port\*(R" has the same syntax
+The host can be can be \*(L"*\*(R" which is interpreted as meaning
+any interface; \*(L"port\*(R" has the same syntax
 as the port specified in \fIBIO_set_conn_port()\fR for connect BIOs,
 that is it can be a numerical port string or a string to lookup
 using \fIgetservbyname()\fR and a string table.
diff --git a/secure/lib/libcrypto/man/CMS_add1_signer.3 b/secure/lib/libcrypto/man/CMS_add1_signer.3
new file mode 100644 (file)
index 0000000..53bbb04
--- /dev/null
@@ -0,0 +1,224 @@
+.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.20)
+.\"
+.\" 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
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+'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 turned on, 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.
+.ie \nF \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    nr % 0
+.    rr F
+.\}
+.el \{\
+.    de IX
+..
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "CMS_add1_signer 3"
+.TH CMS_add1_signer 3 "2014-06-05" "1.0.1h" "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"
+.Vb 1
+\& CMS_add1_signer, CMS_SignerInfo_sign \- add a signer to a CMS_ContentInfo signed data structure.
+.Ve
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+.Vb 1
+\& #include <openssl/cms.h>
+\&
+\& CMS_SignerInfo *CMS_add1_signer(CMS_ContentInfo *cms, X509 *signcert, EVP_PKEY *pkey, const EVP_MD *md, unsigned int flags);
+\&
+\& int CMS_SignerInfo_sign(CMS_SignerInfo *si);
+.Ve
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\fICMS_add1_signer()\fR adds a signer with certificate \fBsigncert\fR and private
+key \fBpkey\fR using message digest \fBmd\fR to CMS_ContentInfo SignedData
+structure \fBcms\fR.
+.PP
+The CMS_ContentInfo structure should be obtained from an initial call to
+\&\fICMS_sign()\fR with the flag \fB\s-1CMS_PARTIAL\s0\fR set or in the case or re-signing a
+valid CMS_ContentInfo SignedData structure.
+.PP
+If the \fBmd\fR parameter is \fB\s-1NULL\s0\fR then the default digest for the public
+key algorithm will be used.
+.PP
+Unless the \fB\s-1CMS_REUSE_DIGEST\s0\fR flag is set the returned CMS_ContentInfo
+structure is not complete and must be finalized either by streaming (if
+applicable) or a call to \fICMS_final()\fR.
+.PP
+The \fICMS_SignerInfo_sign()\fR function will explicitly sign a CMS_SignerInfo
+structure, its main use is when \fB\s-1CMS_REUSE_DIGEST\s0\fR and \fB\s-1CMS_PARTIAL\s0\fR flags
+are both set.
+.SH "NOTES"
+.IX Header "NOTES"
+The main purpose of \fICMS_add1_signer()\fR is to provide finer control
+over a \s-1CMS\s0 signed data structure where the simpler \fICMS_sign()\fR function defaults
+are not appropriate. For example if multiple signers or non default digest
+algorithms are needed. New attributes can also be added using the returned
+CMS_SignerInfo structure and the \s-1CMS\s0 attribute utility functions or the
+\&\s-1CMS\s0 signed receipt request functions.
+.PP
+Any of the following flags (ored together) can be passed in the \fBflags\fR
+parameter.
+.PP
+If \fB\s-1CMS_REUSE_DIGEST\s0\fR is set then an attempt is made to copy the content
+digest value from the CMS_ContentInfo structure: to add a signer to an existing
+structure.  An error occurs if a matching digest value cannot be found to copy.
+The returned CMS_ContentInfo structure will be valid and finalized when this
+flag is set.
+.PP
+If \fB\s-1CMS_PARTIAL\s0\fR is set in addition to \fB\s-1CMS_REUSE_DIGEST\s0\fR then the 
+CMS_SignerInfo structure will not be finalized so additional attributes
+can be added. In this case an explicit call to \fICMS_SignerInfo_sign()\fR is
+needed to finalize it.
+.PP
+If \fB\s-1CMS_NOCERTS\s0\fR is set the signer's certificate will not be included in the
+CMS_ContentInfo structure, the signer's certificate must still be supplied in
+the \fBsigncert\fR parameter though. This can reduce the size of the signature if
+the signers certificate can be obtained by other means: for example a
+previously signed message.
+.PP
+The SignedData structure includes several \s-1CMS\s0 signedAttributes including the
+signing time, the \s-1CMS\s0 content type and the supported list of ciphers in an
+SMIMECapabilities attribute. If \fB\s-1CMS_NOATTR\s0\fR is set then no signedAttributes
+will be used. If \fB\s-1CMS_NOSMIMECAP\s0\fR is set then just the SMIMECapabilities are
+omitted.
+.PP
+OpenSSL will by default identify signing certificates using issuer name
+and serial number. If \fB\s-1CMS_USE_KEYID\s0\fR is set it will use the subject key
+identifier value instead. An error occurs if the signing certificate does not
+have a subject key identifier extension.
+.PP
+If present the SMIMECapabilities attribute indicates support for the following
+algorithms in preference order: 256 bit \s-1AES\s0, Gost R3411\-94, Gost 28147\-89, 192
+bit \s-1AES\s0, 128 bit \s-1AES\s0, triple \s-1DES\s0, 128 bit \s-1RC2\s0, 64 bit \s-1RC2\s0, \s-1DES\s0 and 40 bit \s-1RC2\s0.
+If any of these algorithms is not available then it will not be included: for example the \s-1GOST\s0 algorithms will not be included if the \s-1GOST\s0 \s-1ENGINE\s0 is
+not loaded.
+.PP
+\&\fICMS_add1_signer()\fR returns an internal pointer to the CMS_SignerInfo
+structure just added, this can be used to set additional attributes 
+before it is finalized.
+.SH "RETURN VALUES"
+.IX Header "RETURN VALUES"
+\&\fICMS_add1_signer()\fR returns an internal pointer to the CMS_SignerInfo
+structure just added or \s-1NULL\s0 if an error occurs.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIERR_get_error\fR\|(3), \fICMS_sign\fR\|(3),
+\&\fICMS_final\fR\|(3),
+.SH "HISTORY"
+.IX Header "HISTORY"
+\&\fICMS_add1_signer()\fR was added to OpenSSL 0.9.8
index 7a7c8ca..52b5a10 100644 (file)
@@ -154,13 +154,13 @@ EVP digest routines
 \& int EVP_MD_CTX_cleanup(EVP_MD_CTX *ctx);
 \& void EVP_MD_CTX_destroy(EVP_MD_CTX *ctx);
 \&
-\& int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out,const EVP_MD_CTX *in);  
+\& int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out,const EVP_MD_CTX *in);
 \&
 \& int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type);
 \& int EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md,
 \&        unsigned int *s);
 \&
-\& int EVP_MD_CTX_copy(EVP_MD_CTX *out,EVP_MD_CTX *in);  
+\& int EVP_MD_CTX_copy(EVP_MD_CTX *out,EVP_MD_CTX *in);
 \&
 \& #define EVP_MAX_MD_SIZE 64     /* SHA512 */
 \&
@@ -267,7 +267,7 @@ structures for the \s-1MD2\s0, \s-1MD5\s0, \s-1SHA\s0, \s-1SHA1\s0, \s-1SHA224\s
 and \s-1RIPEMD160\s0 digest algorithms respectively.
 .PP
 \&\fIEVP_dss()\fR and \fIEVP_dss1()\fR return \fB\s-1EVP_MD\s0\fR structures for \s-1SHA\s0 and \s-1SHA1\s0 digest
-algorithms but using \s-1DSS\s0 (\s-1DSA\s0) for the signature algorithm. Note: there is 
+algorithms but using \s-1DSS\s0 (\s-1DSA\s0) for the signature algorithm. Note: there is
 no need to use these pseudo-digests in OpenSSL 1.0.0 and later, they are
 however retained for compatibility.
 .PP
@@ -303,15 +303,15 @@ The \fB\s-1EVP\s0\fR interface to message digests should almost always be used i
 preference to the low level interfaces. This is because the code then becomes
 transparent to the digest used and much more flexible.
 .PP
-New applications should use the \s-1SHA2\s0 digest algorithms such as \s-1SHA256\s0. 
+New applications should use the \s-1SHA2\s0 digest algorithms such as \s-1SHA256\s0.
 The other digest algorithms are still in common use.
 .PP
 For most applications the \fBimpl\fR parameter to \fIEVP_DigestInit_ex()\fR will be
 set to \s-1NULL\s0 to use the default digest implementation.
 .PP
-The functions \fIEVP_DigestInit()\fR, \fIEVP_DigestFinal()\fR and \fIEVP_MD_CTX_copy()\fR are 
+The functions \fIEVP_DigestInit()\fR, \fIEVP_DigestFinal()\fR and \fIEVP_MD_CTX_copy()\fR are
 obsolete but are retained to maintain compatibility with existing code. New
-applications should use \fIEVP_DigestInit_ex()\fR, \fIEVP_DigestFinal_ex()\fR and 
+applications should use \fIEVP_DigestInit_ex()\fR, \fIEVP_DigestFinal_ex()\fR and
 \&\fIEVP_MD_CTX_copy_ex()\fR because they can efficiently reuse a digest context
 instead of initializing and cleaning it up on each call and allow non default
 implementations of digests to be specified.
@@ -374,15 +374,19 @@ digest name passed on the command line.
 \& EVP_MD_CTX_destroy(mdctx);
 \&
 \& printf("Digest is: ");
-\& for(i = 0; i < md_len; i++) printf("%02x", md_value[i]);
+\& for(i = 0; i < md_len; i++)
+\&        printf("%02x", md_value[i]);
 \& printf("\en");
+\&
+\& /* Call this once before exit. */
+\& EVP_cleanup();
+\& exit(0);
 \& }
 .Ve
 .SH "SEE ALSO"
 .IX Header "SEE ALSO"
-\&\fIevp\fR\|(3), \fIhmac\fR\|(3), \fImd2\fR\|(3),
-\&\fImd5\fR\|(3), \fImdc2\fR\|(3), \fIripemd\fR\|(3),
-\&\fIsha\fR\|(3), \fIdgst\fR\|(1)
+\&\fIdgst\fR\|(1),
+\&\fIevp\fR\|(3)
 .SH "HISTORY"
 .IX Header "HISTORY"
 \&\fIEVP_DigestInit()\fR, \fIEVP_DigestUpdate()\fR and \fIEVP_DigestFinal()\fR are
@@ -397,7 +401,7 @@ and \fIEVP_DigestFinal_ex()\fR were added in OpenSSL 0.9.7.
 changed to return truely const \s-1EVP_MD\s0 * in OpenSSL 0.9.7.
 .PP
 The link between digests and signing algorithms was fixed in OpenSSL 1.0 and
-later, so now \fIEVP_sha1()\fR can be used with \s-1RSA\s0 and \s-1DSA\s0, there is no need to
+later, so now \fIEVP_sha1()\fR can be used with \s-1RSA\s0 and \s-1DSA\s0; there is no need to
 use \fIEVP_dss1()\fR any more.
 .PP
 OpenSSL 1.0 and later does not include the \s-1MD2\s0 digest algorithm in the
index 3710ef1..779423c 100644 (file)
@@ -165,7 +165,7 @@ or a negative value for failure. In particular a return value of \-2 indicates
 the operation is not supported by the public key algorithm.
 .PP
 Unlike other functions the return value 0 from \fIEVP_DigestVerifyFinal()\fR only
-indicates that the signature did not not verify successfully (that is tbs did
+indicates that the signature did not verify successfully (that is tbs did
 not match the original data or the signature was of invalid form) it is not an
 indication of a more serious error.
 .PP
@@ -185,7 +185,7 @@ For some key types and parameters the random number generator must be seeded
 or the operation will fail.
 .PP
 The call to \fIEVP_DigestVerifyFinal()\fR internally finalizes a copy of the digest
-context. This means that calls to \fIEVP_VerifyUpdate()\fR and \fIEVP_VerifyFinal()\fR can
+context. This means that \fIEVP_VerifyUpdate()\fR and \fIEVP_VerifyFinal()\fR can
 be called later to digest and verify additional data.
 .PP
 Since only a copy of the digest context is ever finalized the context must
index cad7a37..a3e0976 100644 (file)
@@ -493,37 +493,9 @@ The \s-1ASN1\s0 code is incomplete (and sometimes inaccurate) it has only been t
 for certain common S/MIME ciphers (\s-1RC2\s0, \s-1DES\s0, triple \s-1DES\s0) in \s-1CBC\s0 mode.
 .SH "EXAMPLES"
 .IX Header "EXAMPLES"
-Get the number of rounds used in \s-1RC5:\s0
+Encrypt a string using \s-1IDEA:\s0
 .PP
-.Vb 2
-\& int nrounds;
-\& EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GET_RC5_ROUNDS, 0, &nrounds);
-.Ve
-.PP
-Get the \s-1RC2\s0 effective key length:
-.PP
-.Vb 2
-\& int key_bits;
-\& EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GET_RC2_KEY_BITS, 0, &key_bits);
-.Ve
-.PP
-Set the number of rounds used in \s-1RC5:\s0
-.PP
-.Vb 2
-\& int nrounds;
-\& EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_SET_RC5_ROUNDS, nrounds, NULL);
-.Ve
-.PP
-Set the effective key length used in \s-1RC2:\s0
-.PP
-.Vb 2
-\& int key_bits;
-\& EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_SET_RC2_KEY_BITS, key_bits, NULL);
-.Ve
-.PP
-Encrypt a string using blowfish:
-.PP
-.Vb 10
+.Vb 12
 \& int do_crypt(char *outfile)
 \&        {
 \&        unsigned char outbuf[1024];
@@ -536,8 +508,9 @@ Encrypt a string using blowfish:
 \&        char intext[] = "Some Crypto Text";
 \&        EVP_CIPHER_CTX ctx;
 \&        FILE *out;
+\&
 \&        EVP_CIPHER_CTX_init(&ctx);
-\&        EVP_EncryptInit_ex(&ctx, EVP_bf_cbc(), NULL, key, iv);
+\&        EVP_EncryptInit_ex(&ctx, EVP_idea_cbc(), NULL, key, iv);
 \&
 \&        if(!EVP_EncryptUpdate(&ctx, outbuf, &outlen, intext, strlen(intext)))
 \&                {
@@ -567,31 +540,37 @@ Encrypt a string using blowfish:
 .Ve
 .PP
 The ciphertext from the above example can be decrypted using the \fBopenssl\fR
-utility with the command line:
+utility with the command line (shown on two lines for clarity):
 .PP
-.Vb 1
-\& S<openssl bf \-in cipher.bin \-K 000102030405060708090A0B0C0D0E0F \-iv 0102030405060708 \-d>
+.Vb 2
+\& openssl idea \-d <filename
+\&          \-K 000102030405060708090A0B0C0D0E0F \-iv 0102030405060708
 .Ve
 .PP
-General encryption, decryption function example using \s-1FILE\s0 I/O and \s-1RC2\s0 with an
-80 bit key:
+General encryption and decryption function example using \s-1FILE\s0 I/O and \s-1AES128\s0
+with a 128\-bit key:
 .PP
-.Vb 10
+.Vb 11
 \& int do_crypt(FILE *in, FILE *out, int do_encrypt)
 \&        {
 \&        /* Allow enough space in output buffer for additional block */
-\&        inbuf[1024], outbuf[1024 + EVP_MAX_BLOCK_LENGTH];
+\&        unsigned char inbuf[1024], outbuf[1024 + EVP_MAX_BLOCK_LENGTH];
 \&        int inlen, outlen;
+\&        EVP_CIPHER_CTX ctx;
 \&        /* Bogus key and IV: we\*(Aqd normally set these from
 \&         * another source.
 \&         */
-\&        unsigned char key[] = "0123456789";
-\&        unsigned char iv[] = "12345678";
-\&        /* Don\*(Aqt set key or IV because we will modify the parameters */
+\&        unsigned char key[] = "0123456789abcdeF";
+\&        unsigned char iv[] = "1234567887654321";
+\&
+\&        /* Don\*(Aqt set key or IV right away; we want to check lengths */
 \&        EVP_CIPHER_CTX_init(&ctx);
-\&        EVP_CipherInit_ex(&ctx, EVP_rc2(), NULL, NULL, NULL, do_encrypt);
-\&        EVP_CIPHER_CTX_set_key_length(&ctx, 10);
-\&        /* We finished modifying parameters so now we can set key and IV */
+\&        EVP_CipherInit_ex(&ctx, EVP_aes_128_cbc(), NULL, NULL, NULL,
+\&                do_encrypt);
+\&        OPENSSL_assert(EVP_CIPHER_CTX_key_length(&ctx) == 16);
+\&        OPENSSL_assert(EVP_CIPHER_CTX_iv_length(&ctx) == 16);
+\&
+\&        /* Now we can set key and IV */
 \&        EVP_CipherInit_ex(&ctx, NULL, NULL, key, iv, do_encrypt);
 \&
 \&        for(;;) 
@@ -627,3 +606,6 @@ General encryption, decryption function example using \s-1FILE\s0 I/O and \s-1RC
 \&\fIEVP_DecryptInit_ex()\fR, \fIEVP_DecryptFinal_ex()\fR, \fIEVP_CipherInit_ex()\fR,
 \&\fIEVP_CipherFinal_ex()\fR and \fIEVP_CIPHER_CTX_set_padding()\fR appeared in
 OpenSSL 0.9.7.
+.PP
+\&\s-1IDEA\s0 appeared in OpenSSL 0.9.7 but was often disabled due to
+patent concerns; the last patents expired in 2012.
index c7e9ea0..8cca084 100644 (file)
@@ -165,7 +165,7 @@ EVP_PKEY_type \- EVP_PKEY assignment functions.
 \&\fIEVP_PKEY_get1_EC_KEY()\fR return the referenced key in \fBpkey\fR or
 \&\fB\s-1NULL\s0\fR if the key is not of the correct type.
 .PP
-\&\fIEVP_PKEY_assign_RSA()\fR \fIEVP_PKEY_assign_DSA()\fR, \fIEVP_PKEY_assign_DH()\fR
+\&\fIEVP_PKEY_assign_RSA()\fR, \fIEVP_PKEY_assign_DSA()\fR, \fIEVP_PKEY_assign_DH()\fR
 and \fIEVP_PKEY_assign_EC_KEY()\fR also set the referenced key to \fBkey\fR
 however these use the supplied \fBkey\fR internally and so \fBkey\fR
 will be freed when the parent \fBpkey\fR is freed.
@@ -181,8 +181,8 @@ In accordance with the OpenSSL naming convention the key obtained
 from or assigned to the \fBpkey\fR using the \fB1\fR functions must be
 freed as well as \fBpkey\fR.
 .PP
-\&\fIEVP_PKEY_assign_RSA()\fR \fIEVP_PKEY_assign_DSA()\fR, \fIEVP_PKEY_assign_DH()\fR
-\&\fIEVP_PKEY_assign_EC_KEY()\fR are implemented as macros.
+\&\fIEVP_PKEY_assign_RSA()\fR, \fIEVP_PKEY_assign_DSA()\fR, \fIEVP_PKEY_assign_DH()\fR
+and \fIEVP_PKEY_assign_EC_KEY()\fR are implemented as macros.
 .SH "RETURN VALUES"
 .IX Header "RETURN VALUES"
 \&\fIEVP_PKEY_set1_RSA()\fR, \fIEVP_PKEY_set1_DSA()\fR, \fIEVP_PKEY_set1_DH()\fR and
@@ -192,7 +192,7 @@ freed as well as \fBpkey\fR.
 \&\fIEVP_PKEY_get1_EC_KEY()\fR return the referenced key or \fB\s-1NULL\s0\fR if 
 an error occurred.
 .PP
-\&\fIEVP_PKEY_assign_RSA()\fR \fIEVP_PKEY_assign_DSA()\fR, \fIEVP_PKEY_assign_DH()\fR
+\&\fIEVP_PKEY_assign_RSA()\fR, \fIEVP_PKEY_assign_DSA()\fR, \fIEVP_PKEY_assign_DH()\fR
 and \fIEVP_PKEY_assign_EC_KEY()\fR return 1 for success and 0 for failure.
 .SH "SEE ALSO"
 .IX Header "SEE ALSO"
index a2e4e4b..d43fbd0 100644 (file)
@@ -155,9 +155,14 @@ before the call the \fBsiglen\fR parameter should contain the length of the
 \&\fBsig\fR and the amount of data written to \fBsiglen\fR.
 .SH "NOTES"
 .IX Header "NOTES"
+\&\fIEVP_PKEY_sign()\fR does not hash the data to be signed, and therefore is
+normally used to sign digests. For signing arbitrary messages, see the
+\&\fIEVP_DigestSignInit\fR\|(3) and
+\&\fIEVP_SignInit\fR\|(3) signing interfaces instead.
+.PP
 After the call to \fIEVP_PKEY_sign_init()\fR algorithm specific control
 operations can be performed to set any appropriate parameters for the
-operation.
+operation (see \fIEVP_PKEY_CTX_ctrl\fR\|(3)).
 .PP
 The function \fIEVP_PKEY_sign()\fR can be called more than once on the same
 context if several operations are performed using the same parameters.
@@ -175,13 +180,17 @@ Sign data using \s-1RSA\s0 with PKCS#1 padding and \s-1SHA256\s0 digest:
 \& #include <openssl/rsa.h>
 \&
 \& EVP_PKEY_CTX *ctx;
+\& /* md is a SHA\-256 digest in this example. */
 \& unsigned char *md, *sig;
-\& size_t mdlen, siglen; 
+\& size_t mdlen = 32, siglen;
 \& EVP_PKEY *signing_key;
-\& /* NB: assumes signing_key, md and mdlen are already set up
-\&  * and that signing_key is an RSA private key
+\&
+\& /*
+\&  * NB: assumes signing_key and md are set up before the next
+\&  * step. signing_key must be an RSA private key and md must
+\&  * point to the SHA\-256 digest to be signed.
 \&  */
-\& ctx = EVP_PKEY_CTX_new(signing_key);
+\& ctx = EVP_PKEY_CTX_new(signing_key, NULL /* no engine */);
 \& if (!ctx)
 \&        /* Error occurred */
 \& if (EVP_PKEY_sign_init(ctx) <= 0)
@@ -208,6 +217,7 @@ Sign data using \s-1RSA\s0 with PKCS#1 padding and \s-1SHA256\s0 digest:
 .SH "SEE ALSO"
 .IX Header "SEE ALSO"
 \&\fIEVP_PKEY_CTX_new\fR\|(3),
+\&\fIEVP_PKEY_CTX_ctrl\fR\|(3),
 \&\fIEVP_PKEY_encrypt\fR\|(3),
 \&\fIEVP_PKEY_decrypt\fR\|(3),
 \&\fIEVP_PKEY_verify\fR\|(3),
index 4e6b23e..52e46ef 100644 (file)
@@ -1,6 +1,9 @@
 /* opensslconf.h */
 /* WARNING: Generated automatically from opensslconf.h.in by Configure. */
 
+#ifdef  __cplusplus
+extern "C" {
+#endif
 /* OpenSSL was configured with the following options: */
 #ifndef OPENSSL_DOING_MAKEDEPEND
 
@@ -244,3 +247,6 @@ YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED!!!!!
 
 #endif /* DES_DEFAULT_OPTIONS */
 #endif /* HEADER_DES_LOCL_H */
+#ifdef  __cplusplus
+}
+#endif
index 71d0c83..9cf7314 100644 (file)
@@ -1,6 +1,9 @@
 /* opensslconf.h */
 /* WARNING: Generated automatically from opensslconf.h.in by Configure. */
 
+#ifdef  __cplusplus
+extern "C" {
+#endif
 /* OpenSSL was configured with the following options: */
 #ifndef OPENSSL_DOING_MAKEDEPEND
 
@@ -244,3 +247,6 @@ YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED!!!!!
 
 #endif /* DES_DEFAULT_OPTIONS */
 #endif /* HEADER_DES_LOCL_H */
+#ifdef  __cplusplus
+}
+#endif
index 34008d7..be71dc5 100644 (file)
@@ -175,12 +175,13 @@ even if he gets hold of the normal (certified) key, as this key was
 only used for signing.
 .PP
 In order to perform a \s-1DH\s0 key exchange the server must use a \s-1DH\s0 group
-(\s-1DH\s0 parameters) and generate a \s-1DH\s0 key. The server will always generate a new
-\&\s-1DH\s0 key during the negotiation, when the \s-1DH\s0 parameters are supplied via
-callback and/or when the \s-1SSL_OP_SINGLE_DH_USE\s0 option of
-\&\fISSL_CTX_set_options\fR\|(3) is set. It will
-immediately create a \s-1DH\s0 key, when \s-1DH\s0 parameters are supplied via
-\&\fISSL_CTX_set_tmp_dh()\fR and \s-1SSL_OP_SINGLE_DH_USE\s0 is not set. In this case,
+(\s-1DH\s0 parameters) and generate a \s-1DH\s0 key.
+The server will always generate a new \s-1DH\s0 key during the negotiation
+if either the \s-1DH\s0 parameters are supplied via callback or the
+\&\s-1SSL_OP_SINGLE_DH_USE\s0 option of \fISSL_CTX_set_options\fR\|(3) is set (or both).
+It will  immediately create a \s-1DH\s0 key if \s-1DH\s0 parameters are supplied via
+\&\fISSL_CTX_set_tmp_dh()\fR and \s-1SSL_OP_SINGLE_DH_USE\s0 is not set.
+In this case,
 it may happen that a key is generated on initialization without later
 being needed, while on the other hand the computer time during the
 negotiation is being saved.
@@ -266,7 +267,7 @@ partly left out.)
 \&      dh_tmp = dh_512;
 \&      break;
 \&    case 1024:
-\&      if (!dh_1024) 
+\&      if (!dh_1024)
 \&        dh_1024 = get_dh1024();
 \&      dh_tmp = dh_1024;
 \&      break;
index 481eba2..7fe08d9 100644 (file)
@@ -1,6 +1,7 @@
 # DO NOT EDIT: generated from man-makefile-update target
 MAN+= CA.pl.1
 MAN+= asn1parse.1
+MAN+= c_rehash.1
 MAN+= ca.1
 MAN+= ciphers.1
 MAN+= cms.1
@@ -8,13 +9,18 @@ MAN+= config.5
 MAN+= crl.1
 MAN+= crl2pkcs7.1
 MAN+= dgst.1
-MLINKS+= dgst.1 md5.1
-MLINKS+= dgst.1 md4.1
-MLINKS+= dgst.1 md2.1
-MLINKS+= dgst.1 sha1.1
 MLINKS+= dgst.1 sha.1
+MLINKS+= dgst.1 sha1.1
 MLINKS+= dgst.1 mdc2.1
 MLINKS+= dgst.1 ripemd160.1
+MLINKS+= dgst.1 sha224.1
+MLINKS+= dgst.1 sha256.1
+MLINKS+= dgst.1 sha384.1
+MLINKS+= dgst.1 sha512.1
+MLINKS+= dgst.1 md2.1
+MLINKS+= dgst.1 md4.1
+MLINKS+= dgst.1 md5.1
+MLINKS+= dgst.1 dss1.1
 MAN+= dhparam.1
 MAN+= dsa.1
 MAN+= dsaparam.1
similarity index 56%
copy from secure/lib/libcrypto/man/EVP_PKEY_sign.3
copy to secure/usr.bin/openssl/man/c_rehash.1
index a2e4e4b..3641c43 100644 (file)
 .rm #[ #] #H #V #F C
 .\" ========================================================================
 .\"
-.IX Title "EVP_PKEY_sign 3"
-.TH EVP_PKEY_sign 3 "2014-06-05" "1.0.1h" "OpenSSL"
+.IX Title "C_REHASH 1"
+.TH C_REHASH 1 "2014-06-05" "1.0.1h" "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"
-EVP_PKEY_sign_init, EVP_PKEY_sign \- sign using a public key algorithm
+c_rehash \- Create symbolic links to files named by the hash values
 .SH "SYNOPSIS"
 .IX Header "SYNOPSIS"
-.Vb 1
-\& #include <openssl/evp.h>
-\&
-\& int EVP_PKEY_sign_init(EVP_PKEY_CTX *ctx);
-\& int EVP_PKEY_sign(EVP_PKEY_CTX *ctx,
-\&                        unsigned char *sig, size_t *siglen,
-\&                        const unsigned char *tbs, size_t tbslen);
-.Ve
+\&\fBc_rehash\fR
+[ \fIdirectory\fR...]
 .SH "DESCRIPTION"
 .IX Header "DESCRIPTION"
-The \fIEVP_PKEY_sign_init()\fR function initializes a public key algorithm
-context using key \fBpkey\fR for a signing operation.
+\&\fBc_rehash\fR scans directories and calculates a hash value of each \f(CW\*(C`.pem\*(C'\fR
+file in the specified directory list and creates symbolic links
+for each file, where the name of the link is the hash value.
+This utility is useful as many programs that use OpenSSL require
+directories to be set up like this in order to find certificates.
+.PP
+If any directories are named on the command line, then those are
+processed in turn. If not, then the \fB\s-1SSL_CERT_DIR\s0\fR environment variable
+is consulted; this shold be a colon-separated list of directories,
+like the Unix \fB\s-1PATH\s0\fR variable.
+If that is not set then the default directory (installation-specific
+but often \fB/usr/local/ssl/certs\fR) is processed.
+.PP
+In order for a directory to be processed, the user must have write
+permissions on that directory, otherwise it will be skipped.
+The links created are of the form \f(CW\*(C`HHHHHHHH.D\*(C'\fR, where each \fBH\fR
+is a hexadecimal character and \fBD\fR is a single decimal digit.
+When processing a directory, \fBc_rehash\fR will first remove all links
+that have a name in that syntax. If you have links in that format
+used for other purposes, they will be removed.
+Hashes for \s-1CRL\s0's look similar except the letter \fBr\fR appears after
+the period, like this: \f(CW\*(C`HHHHHHHH.rD\*(C'\fR.
 .PP
-The \fIEVP_PKEY_sign()\fR function performs a public key signing operation
-using \fBctx\fR. The data to be signed is specified using the \fBtbs\fR and
-\&\fBtbslen\fR parameters. If \fBsig\fR is \fB\s-1NULL\s0\fR then the maximum size of the output
-buffer is written to the \fBsiglen\fR parameter. If \fBsig\fR is not \fB\s-1NULL\s0\fR then
-before the call the \fBsiglen\fR parameter should contain the length of the
-\&\fBsig\fR buffer, if the call is successful the signature is written to
-\&\fBsig\fR and the amount of data written to \fBsiglen\fR.
-.SH "NOTES"
-.IX Header "NOTES"
-After the call to \fIEVP_PKEY_sign_init()\fR algorithm specific control
-operations can be performed to set any appropriate parameters for the
-operation.
+Multiple objects may have the same hash; they will be indicated by
+incrementing the \fBD\fR value. Duplicates are found by comparing the
+full \s-1SHA\-1\s0 fingerprint. A warning will be displayed if a duplicate
+is found.
 .PP
-The function \fIEVP_PKEY_sign()\fR can be called more than once on the same
-context if several operations are performed using the same parameters.
-.SH "RETURN VALUES"
-.IX Header "RETURN VALUES"
-\&\fIEVP_PKEY_sign_init()\fR and \fIEVP_PKEY_sign()\fR return 1 for success and 0
-or a negative value for failure. In particular a return value of \-2
-indicates the operation is not supported by the public key algorithm.
-.SH "EXAMPLE"
-.IX Header "EXAMPLE"
-Sign data using \s-1RSA\s0 with PKCS#1 padding and \s-1SHA256\s0 digest:
+A warning will also be displayed if there are \fB.pem\fR files that
+cannot be parsed as either a certificate or a \s-1CRL\s0.
+.PP
+The program uses the \fBopenssl\fR program to compute the hashes and
+fingerprints. If not found in the user's \fB\s-1PATH\s0\fR, then set the
+\&\fB\s-1OPENSSL\s0\fR environment variable to the full pathname.
+Any program can be used, it will be invoked as follows for either
+a certificate or \s-1CRL:\s0
 .PP
 .Vb 2
-\& #include <openssl/evp.h>
-\& #include <openssl/rsa.h>
-\&
-\& EVP_PKEY_CTX *ctx;
-\& unsigned char *md, *sig;
-\& size_t mdlen, siglen; 
-\& EVP_PKEY *signing_key;
-\& /* NB: assumes signing_key, md and mdlen are already set up
-\&  * and that signing_key is an RSA private key
-\&  */
-\& ctx = EVP_PKEY_CTX_new(signing_key);
-\& if (!ctx)
-\&        /* Error occurred */
-\& if (EVP_PKEY_sign_init(ctx) <= 0)
-\&        /* Error */
-\& if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING) <= 0)
-\&        /* Error */
-\& if (EVP_PKEY_CTX_set_signature_md(ctx, EVP_sha256()) <= 0)
-\&        /* Error */
-\&
-\& /* Determine buffer length */
-\& if (EVP_PKEY_sign(ctx, NULL, &siglen, md, mdlen) <= 0)
-\&        /* Error */
-\&
-\& sig = OPENSSL_malloc(siglen);
-\&
-\& if (!sig)
-\&        /* malloc failure */
-\& 
-\& if (EVP_PKEY_sign(ctx, sig, &siglen, md, mdlen) <= 0)
-\&        /* Error */
-\&
-\& /* Signature is siglen bytes written to buffer sig */
+\&  $OPENSSL x509 \-hash \-fingerprint \-noout \-in FFFFFF
+\&  $OPENSSL crl \-hash \-fingerprint \-noout \-in FFFFFF
 .Ve
+.PP
+where \fB\s-1FFFFFF\s0\fR is the filename. It must output the hash of the
+file on the first line, and the fingerprint on the second,
+optionally prefixed with some text and an equals sign.
+.SH "ENVIRONMENT"
+.IX Header "ENVIRONMENT"
+.IP "\fB\s-1OPENSSL\s0\fR" 4
+.IX Item "OPENSSL"
+The path to an executable to use to generate hashes and
+fingerprints (see above).
+.IP "\fB\s-1SSL_CERT_DIR\s0\fR" 4
+.IX Item "SSL_CERT_DIR"
+Colon separated list of directories to operate on.
+Ignored if directories are listed on the command line.
 .SH "SEE ALSO"
 .IX Header "SEE ALSO"
-\&\fIEVP_PKEY_CTX_new\fR\|(3),
-\&\fIEVP_PKEY_encrypt\fR\|(3),
-\&\fIEVP_PKEY_decrypt\fR\|(3),
-\&\fIEVP_PKEY_verify\fR\|(3),
-\&\fIEVP_PKEY_verify_recover\fR\|(3),
-\&\fIEVP_PKEY_derive\fR\|(3)
-.SH "HISTORY"
-.IX Header "HISTORY"
-These functions were first added to OpenSSL 1.0.0.
+\&\fIopenssl\fR\|(1),
+\&\fIcrl\fR\|(1).
+\&\fIx509\fR\|(1).
index fcd126a..bdd67fa 100644 (file)
 .if n .ad l
 .nh
 .SH "NAME"
-dgst, md5, md4, md2, sha1, sha, mdc2, ripemd160 \- message digests
+dgst, sha, sha1, mdc2, ripemd160, sha224, sha256, sha384, sha512, md2, md4, md5, dss1 \- message digests
 .SH "SYNOPSIS"
 .IX Header "SYNOPSIS"
 \&\fBopenssl\fR \fBdgst\fR 
-[\fB\-md5|\-md4|\-md2|\-sha1|\-sha|\-mdc2|\-ripemd160|\-dss1\fR]
+[\fB\-sha|\-sha1|\-mdc2|\-ripemd160|\-sha224|\-sha256|\-sha384|\-sha512|\-md2|\-md4|\-md5|\-dss1\fR]
 [\fB\-c\fR]
 [\fB\-d\fR]
 [\fB\-hex\fR]
 [\fB\-binary\fR]
+[\fB\-r\fR]
 [\fB\-out filename\fR]
 [\fB\-sign filename\fR]
 [\fB\-keyform arg\fR]
@@ -147,16 +148,18 @@ dgst, md5, md4, md2, sha1, sha, mdc2, ripemd160 \- message digests
 [\fB\-prverify filename\fR]
 [\fB\-signature filename\fR]
 [\fB\-hmac key\fR]
+[\fB\-non\-fips\-allow\fR]
+[\fB\-fips\-fingerprint\fR]
 [\fBfile...\fR]
 .PP
-[\fBmd5|md4|md2|sha1|sha|mdc2|ripemd160\fR]
-[\fB\-c\fR]
-[\fB\-d\fR]
-[\fBfile...\fR]
+\&\fBopenssl\fR
+[\fIdigest\fR]
+[\fB...\fR]
 .SH "DESCRIPTION"
 .IX Header "DESCRIPTION"
 The digest functions output the message digest of a supplied file or files
-in hexadecimal form. They can also be used for digital signing and verification.
+in hexadecimal.  The digest functions also generate and verify digital
+signatures using message digests.
 .SH "OPTIONS"
 .IX Header "OPTIONS"
 .IP "\fB\-c\fR" 4
@@ -169,10 +172,14 @@ print out \s-1BIO\s0 debugging information.
 .IP "\fB\-hex\fR" 4
 .IX Item "-hex"
 digest is to be output as a hex dump. This is the default case for a \*(L"normal\*(R"
-digest as opposed to a digital signature.
+digest as opposed to a digital signature.  See \s-1NOTES\s0 below for digital
+signatures using \fB\-hex\fR.
 .IP "\fB\-binary\fR" 4
 .IX Item "-binary"
 output the digest or signature in binary form.
+.IP "\fB\-r\fR" 4
+.IX Item "-r"
+output the digest in the \*(L"coreutils\*(R" format used by programs like \fBsha1sum\fR.
 .IP "\fB\-out filename\fR" 4
 .IX Item "-out filename"
 filename to output to, or standard output by default.
@@ -181,8 +188,8 @@ filename to output to, or standard output by default.
 digitally sign the digest using the private key in \*(L"filename\*(R".
 .IP "\fB\-keyform arg\fR" 4
 .IX Item "-keyform arg"
-Specifies the key format to sign digest with. Only \s-1PEM\s0 and \s-1ENGINE\s0
-formats are supported by the \fBdgst\fR command.
+Specifies the key format to sign digest with. The \s-1DER\s0, \s-1PEM\s0, P12,
+and \s-1ENGINE\s0 formats are supported.
 .IP "\fB\-engine id\fR" 4
 .IX Item "-engine id"
 Use engine \fBid\fR for operations (including private key storage).
@@ -241,20 +248,46 @@ generator, or an \s-1EGD\s0 socket (see \fIRAND_egd\fR\|(3)).
 Multiple files can be specified separated by a OS-dependent character.
 The separator is \fB;\fR for MS-Windows, \fB,\fR for OpenVMS, and \fB:\fR for
 all others.
+.IP "\fB\-non\-fips\-allow\fR" 4
+.IX Item "-non-fips-allow"
+enable use of non-FIPS algorithms such as \s-1MD5\s0 even in \s-1FIPS\s0 mode.
+.IP "\fB\-fips\-fingerprint\fR" 4
+.IX Item "-fips-fingerprint"
+compute \s-1HMAC\s0 using a specific key
+for certain OpenSSL-FIPS operations.
 .IP "\fBfile...\fR" 4
 .IX Item "file..."
 file or files to digest. If no files are specified then standard input is
 used.
+.SH "EXAMPLES"
+.IX Header "EXAMPLES"
+To create a hex-encoded message digest of a file:
+ openssl dgst \-md5 \-hex file.txt
+.PP
+To sign a file using \s-1SHA\-256\s0 with binary file output:
+ openssl dgst \-sha256 \-sign privatekey.pem \-out signature.sign file.txt
+.PP
+To verify a signature:
+ openssl dgst \-sha256 \-verify publickey.pem \e
+ \-signature signature.sign \e
+ file.txt
 .SH "NOTES"
 .IX Header "NOTES"
 The digest of choice for all new applications is \s-1SHA1\s0. Other digests are
 however still widely used.
 .PP
-If you wish to sign or verify data using the \s-1DSA\s0 algorithm then the dss1
-digest must be used.
+When signing a file, \fBdgst\fR will automatically determine the algorithm
+(\s-1RSA\s0, \s-1ECC\s0, etc) to use for signing based on the private key's \s-1ASN\s0.1 info.
+When verifying signatures, it only handles the \s-1RSA\s0, \s-1DSA\s0, or \s-1ECDSA\s0 signature
+itself, not the related data to identify the signer and algorithm used in
+formats such as x.509, \s-1CMS\s0, and S/MIME.
 .PP
 A source of random numbers is required for certain signing algorithms, in
-particular \s-1DSA\s0.
+particular \s-1ECDSA\s0 and \s-1DSA\s0.
 .PP
 The signing and verify options should only be used if a single file is
 being signed or verified.
+.PP
+Hex signatures cannot be verified using \fBopenssl\fR.  Instead, use \*(L"xxd \-r\*(R"
+or similar program to transform the hex signature into a binary signature
+prior to verification.