summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordoug <>2015-09-14 01:45:03 +0000
committerdoug <>2015-09-14 01:45:03 +0000
commitccf0b47cd77c8c167d186cc3f01dfc310ee5b29f (patch)
tree587478d440edfb518946564a3da5958afa932346
parent516aee833d4c8a3fa73b13184ca096bf2ad7f1f2 (diff)
downloadopenbsd-ccf0b47cd77c8c167d186cc3f01dfc310ee5b29f.tar.gz
openbsd-ccf0b47cd77c8c167d186cc3f01dfc310ee5b29f.tar.bz2
openbsd-ccf0b47cd77c8c167d186cc3f01dfc310ee5b29f.zip
Temporarily revive MD4 for MS CHAP support.
-rw-r--r--src/lib/libcrypto/crypto/Makefile9
-rw-r--r--src/lib/libcrypto/doc/MD5.pod67
-rw-r--r--src/lib/libcrypto/evp/c_all.c6
-rw-r--r--src/lib/libcrypto/evp/evp.h5
-rw-r--r--src/lib/libcrypto/evp/m_md4.c118
-rw-r--r--src/lib/libcrypto/man/Makefile12
-rw-r--r--src/lib/libcrypto/md4/md4.h103
-rw-r--r--src/lib/libcrypto/md4/md4_dgst.c167
-rw-r--r--src/lib/libcrypto/md4/md4_locl.h108
-rw-r--r--src/lib/libcrypto/md4/md4_one.c77
-rw-r--r--src/lib/libcrypto/opensslfeatures.h1
-rw-r--r--src/lib/libssl/doc/standards.txt6
-rw-r--r--src/lib/libssl/src/crypto/evp/c_all.c6
-rw-r--r--src/lib/libssl/src/crypto/evp/evp.h5
-rw-r--r--src/lib/libssl/src/crypto/evp/m_md4.c118
-rw-r--r--src/lib/libssl/src/crypto/md4/md4.h103
-rw-r--r--src/lib/libssl/src/crypto/md4/md4_dgst.c167
-rw-r--r--src/lib/libssl/src/crypto/md4/md4_locl.h108
-rw-r--r--src/lib/libssl/src/crypto/md4/md4_one.c77
-rw-r--r--src/lib/libssl/src/crypto/opensslfeatures.h1
-rw-r--r--src/lib/libssl/src/doc/apps/dgst.pod6
-rw-r--r--src/lib/libssl/src/doc/apps/openssl.pod8
-rw-r--r--src/lib/libssl/src/doc/apps/speed.pod1
-rw-r--r--src/lib/libssl/src/doc/apps/ts.pod4
-rw-r--r--src/lib/libssl/src/doc/crypto/MD5.pod67
-rw-r--r--src/lib/libssl/src/doc/crypto/crypto.pod6
-rw-r--r--src/lib/libssl/src/doc/standards.txt6
-rw-r--r--src/regress/lib/libcrypto/Makefile3
-rw-r--r--src/regress/lib/libcrypto/md4/Makefile9
-rw-r--r--src/regress/lib/libcrypto/md4/md4test.c125
-rw-r--r--src/usr.bin/openssl/openssl.117
-rw-r--r--src/usr.bin/openssl/openssl.c5
-rw-r--r--src/usr.bin/openssl/req.c4
-rw-r--r--src/usr.bin/openssl/speed.c35
-rw-r--r--src/usr.bin/openssl/ts.c4
35 files changed, 1505 insertions, 59 deletions
diff --git a/src/lib/libcrypto/crypto/Makefile b/src/lib/libcrypto/crypto/Makefile
index 121aaf1d0a..9a58b30627 100644
--- a/src/lib/libcrypto/crypto/Makefile
+++ b/src/lib/libcrypto/crypto/Makefile
@@ -1,4 +1,4 @@
1# $OpenBSD: Makefile,v 1.64 2015/09/13 23:36:21 doug Exp $ 1# $OpenBSD: Makefile,v 1.65 2015/09/14 01:45:03 doug Exp $
2 2
3LIB= crypto 3LIB= crypto
4 4
@@ -144,7 +144,7 @@ SRCS+= encode.c digest.c evp_enc.c evp_key.c
144SRCS+= e_des.c e_bf.c e_idea.c e_des3.c e_camellia.c 144SRCS+= e_des.c e_bf.c e_idea.c e_des3.c e_camellia.c
145SRCS+= e_rc4.c e_aes.c names.c 145SRCS+= e_rc4.c e_aes.c names.c
146SRCS+= e_xcbc_d.c e_rc2.c e_cast.c 146SRCS+= e_xcbc_d.c e_rc2.c e_cast.c
147SRCS+= m_null.c m_md5.c m_sha1.c m_wp.c 147SRCS+= m_null.c m_md4.c m_md5.c m_sha1.c m_wp.c
148SRCS+= m_dss.c m_dss1.c m_ripemd.c m_ecdsa.c 148SRCS+= m_dss.c m_dss1.c m_ripemd.c m_ecdsa.c
149SRCS+= p_open.c p_seal.c p_sign.c p_verify.c p_lib.c p_enc.c p_dec.c 149SRCS+= p_open.c p_seal.c p_sign.c p_verify.c p_lib.c p_enc.c p_dec.c
150SRCS+= bio_md.c bio_b64.c bio_enc.c evp_err.c e_null.c 150SRCS+= bio_md.c bio_b64.c bio_enc.c evp_err.c e_null.c
@@ -173,6 +173,9 @@ SRCS+= krb5_asn.c
173# lhash/ 173# lhash/
174SRCS+= lhash.c lh_stats.c 174SRCS+= lhash.c lh_stats.c
175 175
176# md4/
177SRCS+= md4_dgst.c md4_one.c
178
176# md5/ 179# md5/
177SRCS+= md5_dgst.c md5_one.c 180SRCS+= md5_dgst.c md5_one.c
178 181
@@ -283,6 +286,7 @@ SRCS+= pcy_cache.c pcy_node.c pcy_data.c pcy_map.c pcy_tree.c pcy_lib.c
283 ${LCRYPTO_SRC}/idea \ 286 ${LCRYPTO_SRC}/idea \
284 ${LCRYPTO_SRC}/krb5 \ 287 ${LCRYPTO_SRC}/krb5 \
285 ${LCRYPTO_SRC}/lhash \ 288 ${LCRYPTO_SRC}/lhash \
289 ${LCRYPTO_SRC}/md4 \
286 ${LCRYPTO_SRC}/md5 \ 290 ${LCRYPTO_SRC}/md5 \
287 ${LCRYPTO_SRC}/modes \ 291 ${LCRYPTO_SRC}/modes \
288 ${LCRYPTO_SRC}/objects \ 292 ${LCRYPTO_SRC}/objects \
@@ -340,6 +344,7 @@ HDRS=\
340 crypto/idea/idea.h \ 344 crypto/idea/idea.h \
341 crypto/krb5/krb5_asn.h \ 345 crypto/krb5/krb5_asn.h \
342 crypto/lhash/lhash.h \ 346 crypto/lhash/lhash.h \
347 crypto/md4/md4.h \
343 crypto/md5/md5.h \ 348 crypto/md5/md5.h \
344 crypto/modes/modes.h \ 349 crypto/modes/modes.h \
345 crypto/objects/objects.h \ 350 crypto/objects/objects.h \
diff --git a/src/lib/libcrypto/doc/MD5.pod b/src/lib/libcrypto/doc/MD5.pod
index 056f94bd9e..b0edd5416f 100644
--- a/src/lib/libcrypto/doc/MD5.pod
+++ b/src/lib/libcrypto/doc/MD5.pod
@@ -2,10 +2,33 @@
2 2
3=head1 NAME 3=head1 NAME
4 4
5MD5, MD5_Init, MD5_Update, MD5_Final - MD5 hash functions 5MD2, MD4, MD5, MD2_Init, MD2_Update, MD2_Final, MD4_Init, MD4_Update,
6MD4_Final, MD5_Init, MD5_Update, MD5_Final - MD2, MD4, and MD5 hash functions
6 7
7=head1 SYNOPSIS 8=head1 SYNOPSIS
8 9
10 #include <openssl/md2.h>
11
12 unsigned char *MD2(const unsigned char *d, unsigned long n,
13 unsigned char *md);
14
15 int MD2_Init(MD2_CTX *c);
16 int MD2_Update(MD2_CTX *c, const unsigned char *data,
17 unsigned long len);
18 int MD2_Final(unsigned char *md, MD2_CTX *c);
19
20
21 #include <openssl/md4.h>
22
23 unsigned char *MD4(const unsigned char *d, unsigned long n,
24 unsigned char *md);
25
26 int MD4_Init(MD4_CTX *c);
27 int MD4_Update(MD4_CTX *c, const void *data,
28 unsigned long len);
29 int MD4_Final(unsigned char *md, MD4_CTX *c);
30
31
9 #include <openssl/md5.h> 32 #include <openssl/md5.h>
10 33
11 unsigned char *MD5(const unsigned char *d, unsigned long n, 34 unsigned char *MD5(const unsigned char *d, unsigned long n,
@@ -18,43 +41,61 @@ MD5, MD5_Init, MD5_Update, MD5_Final - MD5 hash functions
18 41
19=head1 DESCRIPTION 42=head1 DESCRIPTION
20 43
21MD5 is a cryptographic hash function with a 128 bit output. 44MD2, MD4, and MD5 are cryptographic hash functions with a 128 bit output.
22 45
23MD5() computes the MD5 message digest of the B<n> bytes at B<d> and 46MD2(), MD4(), and MD5() compute the MD2, MD4, and MD5 message digest
24places it in B<md> (which must have space for MD5_DIGEST_LENGTH == 16 47of the B<n> bytes at B<d> and place it in B<md> (which must have space
48for MD2_DIGEST_LENGTH == MD4_DIGEST_LENGTH == MD5_DIGEST_LENGTH == 16
25bytes of output). If B<md> is NULL, the digest is placed in a static 49bytes of output). If B<md> is NULL, the digest is placed in a static
26array. 50array.
27 51
28The following functions may be used if the message is not completely 52The following functions may be used if the message is not completely
29stored in memory: 53stored in memory:
30 54
55MD2_Init() initializes a B<MD2_CTX> structure.
56
57MD2_Update() can be called repeatedly with chunks of the message to
58be hashed (B<len> bytes at B<data>).
59
60MD2_Final() places the message digest in B<md>, which must have space
61for MD2_DIGEST_LENGTH == 16 bytes of output, and erases the B<MD2_CTX>.
62
63MD4_Init(), MD4_Update(), MD4_Final(), MD5_Init(), MD5_Update(), and
64MD5_Final() are analogous using an B<MD4_CTX> and B<MD5_CTX> structure.
65
31Applications should use the higher level functions 66Applications should use the higher level functions
32L<EVP_DigestInit(3)|EVP_DigestInit(3)> 67L<EVP_DigestInit(3)|EVP_DigestInit(3)>
33etc. instead of calling the hash functions directly. 68etc. instead of calling the hash functions directly.
34 69
35=head1 NOTE 70=head1 NOTE
36 71
37MD5 is recommended only for compatibility with legacy applications. 72MD2, MD4, and MD5 are recommended only for compatibility with existing
38In new applications, SHA-2 should be preferred. 73applications. In new applications, SHA-1 or RIPEMD-160 should be
74preferred.
39 75
40=head1 RETURN VALUES 76=head1 RETURN VALUES
41 77
42MD5() returns a pointer to the hash value. 78MD2(), MD4(), and MD5() return pointers to the hash value.
43 79
44MD5_Init(), MD5_Update(), and MD5_Final() return 1 for success, 0 80MD2_Init(), MD2_Update(), MD2_Final(), MD4_Init(), MD4_Update(),
45otherwise. 81MD4_Final(), MD5_Init(), MD5_Update(), and MD5_Final() return 1 for
82success, 0 otherwise.
46 83
47=head1 CONFORMING TO 84=head1 CONFORMING TO
48 85
49RFC 1321 86RFC 1319, RFC 1320, RFC 1321
50 87
51=head1 SEE ALSO 88=head1 SEE ALSO
52 89
53L<EVP_DigestInit(3)|EVP_DigestInit(3)> 90L<sha(3)|sha(3)>, L<ripemd(3)|ripemd(3)>, L<EVP_DigestInit(3)|EVP_DigestInit(3)>
54 91
55=head1 HISTORY 92=head1 HISTORY
56 93
57MD5(), MD5_Init(), MD5_Update() and MD5_Final() are available in all 94MD2(), MD2_Init(), MD2_Update() MD2_Final(), MD5(), MD5_Init(),
58versions of OpenSSL. 95MD5_Update() and MD5_Final() are available in all versions of SSLeay
96and OpenSSL.
97
98MD4(), MD4_Init(), and MD4_Update() are available in OpenSSL 0.9.6 and
99above.
59 100
60=cut 101=cut
diff --git a/src/lib/libcrypto/evp/c_all.c b/src/lib/libcrypto/evp/c_all.c
index 6b23460210..b83195b370 100644
--- a/src/lib/libcrypto/evp/c_all.c
+++ b/src/lib/libcrypto/evp/c_all.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: c_all.c,v 1.19 2015/09/13 23:36:21 doug Exp $ */ 1/* $OpenBSD: c_all.c,v 1.20 2015/09/14 01:45:03 doug Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -228,6 +228,10 @@ OpenSSL_add_all_ciphers(void)
228void 228void
229OpenSSL_add_all_digests(void) 229OpenSSL_add_all_digests(void)
230{ 230{
231#ifndef OPENSSL_NO_MD4
232 EVP_add_digest(EVP_md4());
233#endif
234
231#ifndef OPENSSL_NO_MD5 235#ifndef OPENSSL_NO_MD5
232 EVP_add_digest(EVP_md5()); 236 EVP_add_digest(EVP_md5());
233 EVP_add_digest_alias(SN_md5, "ssl2-md5"); 237 EVP_add_digest_alias(SN_md5, "ssl2-md5");
diff --git a/src/lib/libcrypto/evp/evp.h b/src/lib/libcrypto/evp/evp.h
index 381d4a45c1..2ddbf6142e 100644
--- a/src/lib/libcrypto/evp/evp.h
+++ b/src/lib/libcrypto/evp/evp.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: evp.h,v 1.47 2015/09/13 23:36:21 doug Exp $ */ 1/* $OpenBSD: evp.h,v 1.48 2015/09/14 01:45:03 doug Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -648,6 +648,9 @@ void BIO_set_cipher(BIO *b, const EVP_CIPHER *c, const unsigned char *k,
648#endif 648#endif
649 649
650const EVP_MD *EVP_md_null(void); 650const EVP_MD *EVP_md_null(void);
651#ifndef OPENSSL_NO_MD4
652const EVP_MD *EVP_md4(void);
653#endif
651#ifndef OPENSSL_NO_MD5 654#ifndef OPENSSL_NO_MD5
652const EVP_MD *EVP_md5(void); 655const EVP_MD *EVP_md5(void);
653#endif 656#endif
diff --git a/src/lib/libcrypto/evp/m_md4.c b/src/lib/libcrypto/evp/m_md4.c
new file mode 100644
index 0000000000..ab3cc852be
--- /dev/null
+++ b/src/lib/libcrypto/evp/m_md4.c
@@ -0,0 +1,118 @@
1/* $OpenBSD: m_md4.c,v 1.16 2015/09/14 01:45:03 doug Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved.
4 *
5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL.
8 *
9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package.
22 *
23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions
25 * are met:
26 * 1. Redistributions of source code must retain the copyright
27 * notice, this list of conditions and the following disclaimer.
28 * 2. Redistributions in binary form must reproduce the above copyright
29 * notice, this list of conditions and the following disclaimer in the
30 * documentation and/or other materials provided with the distribution.
31 * 3. All advertising materials mentioning features or use of this software
32 * must display the following acknowledgement:
33 * "This product includes cryptographic software written by
34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from
38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE.
52 *
53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence
56 * [including the GNU Public Licence.]
57 */
58
59#include <stdio.h>
60
61#include <openssl/opensslconf.h>
62
63#ifndef OPENSSL_NO_MD4
64
65#include <openssl/evp.h>
66#include <openssl/md4.h>
67#include <openssl/objects.h>
68#include <openssl/x509.h>
69
70#ifndef OPENSSL_NO_RSA
71#include <openssl/rsa.h>
72#endif
73
74static int
75init(EVP_MD_CTX *ctx)
76{
77 return MD4_Init(ctx->md_data);
78}
79
80static int
81update(EVP_MD_CTX *ctx, const void *data, size_t count)
82{
83 return MD4_Update(ctx->md_data, data, count);
84}
85
86static int
87final(EVP_MD_CTX *ctx, unsigned char *md)
88{
89 return MD4_Final(md, ctx->md_data);
90}
91
92static const EVP_MD md4_md = {
93 .type = NID_md4,
94 .pkey_type = NID_md4WithRSAEncryption,
95 .md_size = MD4_DIGEST_LENGTH,
96 .flags = 0,
97 .init = init,
98 .update = update,
99 .final = final,
100 .copy = NULL,
101 .cleanup = NULL,
102#ifndef OPENSSL_NO_RSA
103 .sign = (evp_sign_method *)RSA_sign,
104 .verify = (evp_verify_method *)RSA_verify,
105 .required_pkey_type = {
106 EVP_PKEY_RSA, EVP_PKEY_RSA2, 0, 0,
107 },
108#endif
109 .block_size = MD4_CBLOCK,
110 .ctx_size = sizeof(EVP_MD *) + sizeof(MD4_CTX),
111};
112
113const EVP_MD *
114EVP_md4(void)
115{
116 return (&md4_md);
117}
118#endif
diff --git a/src/lib/libcrypto/man/Makefile b/src/lib/libcrypto/man/Makefile
index 101f79b6ff..01e5fef270 100644
--- a/src/lib/libcrypto/man/Makefile
+++ b/src/lib/libcrypto/man/Makefile
@@ -1,4 +1,4 @@
1# $OpenBSD: Makefile,v 1.22 2015/09/13 23:36:21 doug Exp $ 1# $OpenBSD: Makefile,v 1.23 2015/09/14 01:45:03 doug Exp $
2 2
3.include <bsd.own.mk> # for NOMAN 3.include <bsd.own.mk> # for NOMAN
4 4
@@ -642,9 +642,11 @@ MLINKS+=\
642 EVP_DigestInit.3 EVP_get_digestbyname.3 \ 642 EVP_DigestInit.3 EVP_get_digestbyname.3 \
643 EVP_DigestInit.3 EVP_get_digestbynid.3 \ 643 EVP_DigestInit.3 EVP_get_digestbynid.3 \
644 EVP_DigestInit.3 EVP_get_digestbyobj.3 \ 644 EVP_DigestInit.3 EVP_get_digestbyobj.3 \
645 EVP_DigestInit.3 EVP_md2.3 \
645 EVP_DigestInit.3 EVP_md5.3 \ 646 EVP_DigestInit.3 EVP_md5.3 \
646 EVP_DigestInit.3 EVP_md_null.3 \ 647 EVP_DigestInit.3 EVP_md_null.3 \
647 EVP_DigestInit.3 EVP_ripemd160.3 \ 648 EVP_DigestInit.3 EVP_ripemd160.3 \
649 EVP_DigestInit.3 EVP_sha.3 \
648 EVP_DigestInit.3 EVP_sha1.3 \ 650 EVP_DigestInit.3 EVP_sha1.3 \
649 EVP_DigestSignInit.3 EVP_DigestSignUpdate.3 \ 651 EVP_DigestSignInit.3 EVP_DigestSignUpdate.3 \
650 EVP_DigestSignInit.3 EVP_DigestSignFinal.3 \ 652 EVP_DigestSignInit.3 EVP_DigestSignFinal.3 \
@@ -793,6 +795,14 @@ MLINKS+=\
793 HMAC.3 HMAC_Init.3 \ 795 HMAC.3 HMAC_Init.3 \
794 HMAC.3 HMAC_Update.3 \ 796 HMAC.3 HMAC_Update.3 \
795 HMAC.3 HMAC_cleanup.3 \ 797 HMAC.3 HMAC_cleanup.3 \
798 MD5.3 MD2.3 \
799 MD5.3 MD2_Final.3 \
800 MD5.3 MD2_Init.3 \
801 MD5.3 MD2_Update.3 \
802 MD5.3 MD4.3 \
803 MD5.3 MD4_Final.3 \
804 MD5.3 MD4_Init.3 \
805 MD5.3 MD4_Update.3 \
796 MD5.3 MD5_Final.3 \ 806 MD5.3 MD5_Final.3 \
797 MD5.3 MD5_Init.3 \ 807 MD5.3 MD5_Init.3 \
798 MD5.3 MD5_Update.3 \ 808 MD5.3 MD5_Update.3 \
diff --git a/src/lib/libcrypto/md4/md4.h b/src/lib/libcrypto/md4/md4.h
new file mode 100644
index 0000000000..04aacc9801
--- /dev/null
+++ b/src/lib/libcrypto/md4/md4.h
@@ -0,0 +1,103 @@
1/* $OpenBSD: md4.h,v 1.16 2015/09/14 01:45:03 doug Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved.
4 *
5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL.
8 *
9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package.
22 *
23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions
25 * are met:
26 * 1. Redistributions of source code must retain the copyright
27 * notice, this list of conditions and the following disclaimer.
28 * 2. Redistributions in binary form must reproduce the above copyright
29 * notice, this list of conditions and the following disclaimer in the
30 * documentation and/or other materials provided with the distribution.
31 * 3. All advertising materials mentioning features or use of this software
32 * must display the following acknowledgement:
33 * "This product includes cryptographic software written by
34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from
38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE.
52 *
53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence
56 * [including the GNU Public Licence.]
57 */
58
59#include <stddef.h>
60
61#ifndef HEADER_MD4_H
62#define HEADER_MD4_H
63
64#include <openssl/opensslconf.h>
65
66#ifdef __cplusplus
67extern "C" {
68#endif
69
70#ifdef OPENSSL_NO_MD4
71#error MD4 is disabled.
72#endif
73
74/*
75 * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
76 * ! MD4_LONG has to be at least 32 bits wide. !
77 * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
78 */
79
80#define MD4_LONG unsigned int
81
82#define MD4_CBLOCK 64
83#define MD4_LBLOCK (MD4_CBLOCK/4)
84#define MD4_DIGEST_LENGTH 16
85
86typedef struct MD4state_st
87 {
88 MD4_LONG A,B,C,D;
89 MD4_LONG Nl,Nh;
90 MD4_LONG data[MD4_LBLOCK];
91 unsigned int num;
92 } MD4_CTX;
93
94int MD4_Init(MD4_CTX *c);
95int MD4_Update(MD4_CTX *c, const void *data, size_t len);
96int MD4_Final(unsigned char *md, MD4_CTX *c);
97unsigned char *MD4(const unsigned char *d, size_t n, unsigned char *md);
98void MD4_Transform(MD4_CTX *c, const unsigned char *b);
99#ifdef __cplusplus
100}
101#endif
102
103#endif
diff --git a/src/lib/libcrypto/md4/md4_dgst.c b/src/lib/libcrypto/md4/md4_dgst.c
new file mode 100644
index 0000000000..4d3801fc26
--- /dev/null
+++ b/src/lib/libcrypto/md4/md4_dgst.c
@@ -0,0 +1,167 @@
1/* $OpenBSD: md4_dgst.c,v 1.16 2015/09/14 01:45:03 doug Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved.
4 *
5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL.
8 *
9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package.
22 *
23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions
25 * are met:
26 * 1. Redistributions of source code must retain the copyright
27 * notice, this list of conditions and the following disclaimer.
28 * 2. Redistributions in binary form must reproduce the above copyright
29 * notice, this list of conditions and the following disclaimer in the
30 * documentation and/or other materials provided with the distribution.
31 * 3. All advertising materials mentioning features or use of this software
32 * must display the following acknowledgement:
33 * "This product includes cryptographic software written by
34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from
38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE.
52 *
53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence
56 * [including the GNU Public Licence.]
57 */
58
59#include <stdio.h>
60#include <openssl/opensslv.h>
61#include <openssl/crypto.h>
62#include "md4_locl.h"
63
64/* Implemented from RFC1186 The MD4 Message-Digest Algorithm
65 */
66
67#define INIT_DATA_A (unsigned long)0x67452301L
68#define INIT_DATA_B (unsigned long)0xefcdab89L
69#define INIT_DATA_C (unsigned long)0x98badcfeL
70#define INIT_DATA_D (unsigned long)0x10325476L
71
72int MD4_Init(MD4_CTX *c)
73 {
74 memset (c,0,sizeof(*c));
75 c->A=INIT_DATA_A;
76 c->B=INIT_DATA_B;
77 c->C=INIT_DATA_C;
78 c->D=INIT_DATA_D;
79 return 1;
80 }
81
82#ifndef md4_block_data_order
83#ifdef X
84#undef X
85#endif
86void md4_block_data_order (MD4_CTX *c, const void *data_, size_t num)
87 {
88 const unsigned char *data=data_;
89 unsigned MD32_REG_T A,B,C,D,l;
90#ifndef MD32_XARRAY
91 /* See comment in crypto/sha/sha_locl.h for details. */
92 unsigned MD32_REG_T XX0, XX1, XX2, XX3, XX4, XX5, XX6, XX7,
93 XX8, XX9,XX10,XX11,XX12,XX13,XX14,XX15;
94# define X(i) XX##i
95#else
96 MD4_LONG XX[MD4_LBLOCK];
97# define X(i) XX[i]
98#endif
99
100 A=c->A;
101 B=c->B;
102 C=c->C;
103 D=c->D;
104
105 for (;num--;)
106 {
107 HOST_c2l(data,l); X( 0)=l;
108 HOST_c2l(data,l); X( 1)=l;
109 /* Round 0 */
110 R0(A,B,C,D,X( 0), 3,0); HOST_c2l(data,l); X( 2)=l;
111 R0(D,A,B,C,X( 1), 7,0); HOST_c2l(data,l); X( 3)=l;
112 R0(C,D,A,B,X( 2),11,0); HOST_c2l(data,l); X( 4)=l;
113 R0(B,C,D,A,X( 3),19,0); HOST_c2l(data,l); X( 5)=l;
114 R0(A,B,C,D,X( 4), 3,0); HOST_c2l(data,l); X( 6)=l;
115 R0(D,A,B,C,X( 5), 7,0); HOST_c2l(data,l); X( 7)=l;
116 R0(C,D,A,B,X( 6),11,0); HOST_c2l(data,l); X( 8)=l;
117 R0(B,C,D,A,X( 7),19,0); HOST_c2l(data,l); X( 9)=l;
118 R0(A,B,C,D,X( 8), 3,0); HOST_c2l(data,l); X(10)=l;
119 R0(D,A,B,C,X( 9), 7,0); HOST_c2l(data,l); X(11)=l;
120 R0(C,D,A,B,X(10),11,0); HOST_c2l(data,l); X(12)=l;
121 R0(B,C,D,A,X(11),19,0); HOST_c2l(data,l); X(13)=l;
122 R0(A,B,C,D,X(12), 3,0); HOST_c2l(data,l); X(14)=l;
123 R0(D,A,B,C,X(13), 7,0); HOST_c2l(data,l); X(15)=l;
124 R0(C,D,A,B,X(14),11,0);
125 R0(B,C,D,A,X(15),19,0);
126 /* Round 1 */
127 R1(A,B,C,D,X( 0), 3,0x5A827999L);
128 R1(D,A,B,C,X( 4), 5,0x5A827999L);
129 R1(C,D,A,B,X( 8), 9,0x5A827999L);
130 R1(B,C,D,A,X(12),13,0x5A827999L);
131 R1(A,B,C,D,X( 1), 3,0x5A827999L);
132 R1(D,A,B,C,X( 5), 5,0x5A827999L);
133 R1(C,D,A,B,X( 9), 9,0x5A827999L);
134 R1(B,C,D,A,X(13),13,0x5A827999L);
135 R1(A,B,C,D,X( 2), 3,0x5A827999L);
136 R1(D,A,B,C,X( 6), 5,0x5A827999L);
137 R1(C,D,A,B,X(10), 9,0x5A827999L);
138 R1(B,C,D,A,X(14),13,0x5A827999L);
139 R1(A,B,C,D,X( 3), 3,0x5A827999L);
140 R1(D,A,B,C,X( 7), 5,0x5A827999L);
141 R1(C,D,A,B,X(11), 9,0x5A827999L);
142 R1(B,C,D,A,X(15),13,0x5A827999L);
143 /* Round 2 */
144 R2(A,B,C,D,X( 0), 3,0x6ED9EBA1L);
145 R2(D,A,B,C,X( 8), 9,0x6ED9EBA1L);
146 R2(C,D,A,B,X( 4),11,0x6ED9EBA1L);
147 R2(B,C,D,A,X(12),15,0x6ED9EBA1L);
148 R2(A,B,C,D,X( 2), 3,0x6ED9EBA1L);
149 R2(D,A,B,C,X(10), 9,0x6ED9EBA1L);
150 R2(C,D,A,B,X( 6),11,0x6ED9EBA1L);
151 R2(B,C,D,A,X(14),15,0x6ED9EBA1L);
152 R2(A,B,C,D,X( 1), 3,0x6ED9EBA1L);
153 R2(D,A,B,C,X( 9), 9,0x6ED9EBA1L);
154 R2(C,D,A,B,X( 5),11,0x6ED9EBA1L);
155 R2(B,C,D,A,X(13),15,0x6ED9EBA1L);
156 R2(A,B,C,D,X( 3), 3,0x6ED9EBA1L);
157 R2(D,A,B,C,X(11), 9,0x6ED9EBA1L);
158 R2(C,D,A,B,X( 7),11,0x6ED9EBA1L);
159 R2(B,C,D,A,X(15),15,0x6ED9EBA1L);
160
161 A = c->A += A;
162 B = c->B += B;
163 C = c->C += C;
164 D = c->D += D;
165 }
166 }
167#endif
diff --git a/src/lib/libcrypto/md4/md4_locl.h b/src/lib/libcrypto/md4/md4_locl.h
new file mode 100644
index 0000000000..ef574c040d
--- /dev/null
+++ b/src/lib/libcrypto/md4/md4_locl.h
@@ -0,0 +1,108 @@
1/* $OpenBSD: md4_locl.h,v 1.9 2015/09/14 01:45:03 doug Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved.
4 *
5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL.
8 *
9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package.
22 *
23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions
25 * are met:
26 * 1. Redistributions of source code must retain the copyright
27 * notice, this list of conditions and the following disclaimer.
28 * 2. Redistributions in binary form must reproduce the above copyright
29 * notice, this list of conditions and the following disclaimer in the
30 * documentation and/or other materials provided with the distribution.
31 * 3. All advertising materials mentioning features or use of this software
32 * must display the following acknowledgement:
33 * "This product includes cryptographic software written by
34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from
38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE.
52 *
53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence
56 * [including the GNU Public Licence.]
57 */
58
59#include <stdlib.h>
60#include <string.h>
61#include <openssl/opensslconf.h>
62#include <openssl/md4.h>
63
64void md4_block_data_order (MD4_CTX *c, const void *p,size_t num);
65
66#define DATA_ORDER_IS_LITTLE_ENDIAN
67
68#define HASH_LONG MD4_LONG
69#define HASH_CTX MD4_CTX
70#define HASH_CBLOCK MD4_CBLOCK
71#define HASH_UPDATE MD4_Update
72#define HASH_TRANSFORM MD4_Transform
73#define HASH_FINAL MD4_Final
74#define HASH_MAKE_STRING(c,s) do { \
75 unsigned long ll; \
76 ll=(c)->A; HOST_l2c(ll,(s)); \
77 ll=(c)->B; HOST_l2c(ll,(s)); \
78 ll=(c)->C; HOST_l2c(ll,(s)); \
79 ll=(c)->D; HOST_l2c(ll,(s)); \
80 } while (0)
81#define HASH_BLOCK_DATA_ORDER md4_block_data_order
82
83#include "md32_common.h"
84
85/*
86#define F(x,y,z) (((x) & (y)) | ((~(x)) & (z)))
87#define G(x,y,z) (((x) & (y)) | ((x) & ((z))) | ((y) & ((z))))
88*/
89
90/* As pointed out by Wei Dai <weidai@eskimo.com>, the above can be
91 * simplified to the code below. Wei attributes these optimizations
92 * to Peter Gutmann's SHS code, and he attributes it to Rich Schroeppel.
93 */
94#define F(b,c,d) ((((c) ^ (d)) & (b)) ^ (d))
95#define G(b,c,d) (((b) & (c)) | ((b) & (d)) | ((c) & (d)))
96#define H(b,c,d) ((b) ^ (c) ^ (d))
97
98#define R0(a,b,c,d,k,s,t) { \
99 a+=((k)+(t)+F((b),(c),(d))); \
100 a=ROTATE(a,s); };
101
102#define R1(a,b,c,d,k,s,t) { \
103 a+=((k)+(t)+G((b),(c),(d))); \
104 a=ROTATE(a,s); };\
105
106#define R2(a,b,c,d,k,s,t) { \
107 a+=((k)+(t)+H((b),(c),(d))); \
108 a=ROTATE(a,s); };
diff --git a/src/lib/libcrypto/md4/md4_one.c b/src/lib/libcrypto/md4/md4_one.c
new file mode 100644
index 0000000000..c1fd6f3e52
--- /dev/null
+++ b/src/lib/libcrypto/md4/md4_one.c
@@ -0,0 +1,77 @@
1/* $OpenBSD: md4_one.c,v 1.10 2015/09/14 01:45:03 doug Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved.
4 *
5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL.
8 *
9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package.
22 *
23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions
25 * are met:
26 * 1. Redistributions of source code must retain the copyright
27 * notice, this list of conditions and the following disclaimer.
28 * 2. Redistributions in binary form must reproduce the above copyright
29 * notice, this list of conditions and the following disclaimer in the
30 * documentation and/or other materials provided with the distribution.
31 * 3. All advertising materials mentioning features or use of this software
32 * must display the following acknowledgement:
33 * "This product includes cryptographic software written by
34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from
38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE.
52 *
53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence
56 * [including the GNU Public Licence.]
57 */
58
59#include <stdio.h>
60#include <string.h>
61#include <openssl/md4.h>
62#include <openssl/crypto.h>
63
64unsigned char *MD4(const unsigned char *d, size_t n, unsigned char *md)
65 {
66 MD4_CTX c;
67 static unsigned char m[MD4_DIGEST_LENGTH];
68
69 if (md == NULL) md=m;
70 if (!MD4_Init(&c))
71 return NULL;
72 MD4_Update(&c,d,n);
73 MD4_Final(md,&c);
74 explicit_bzero(&c,sizeof(c));
75 return(md);
76 }
77
diff --git a/src/lib/libcrypto/opensslfeatures.h b/src/lib/libcrypto/opensslfeatures.h
index 3d1972f661..ba4dbba959 100644
--- a/src/lib/libcrypto/opensslfeatures.h
+++ b/src/lib/libcrypto/opensslfeatures.h
@@ -6,7 +6,6 @@
6# define OPENSSL_NO_JPAKE 6# define OPENSSL_NO_JPAKE
7# define OPENSSL_NO_KRB5 7# define OPENSSL_NO_KRB5
8# define OPENSSL_NO_MD2 8# define OPENSSL_NO_MD2
9# define OPENSSL_NO_MD4
10# define OPENSSL_NO_MDC2 9# define OPENSSL_NO_MDC2
11# define OPENSSL_NO_PSK 10# define OPENSSL_NO_PSK
12# define OPENSSL_NO_RC5 11# define OPENSSL_NO_RC5
diff --git a/src/lib/libssl/doc/standards.txt b/src/lib/libssl/doc/standards.txt
index e9eacc5840..7bada8d35f 100644
--- a/src/lib/libssl/doc/standards.txt
+++ b/src/lib/libssl/doc/standards.txt
@@ -27,6 +27,12 @@ Implemented:
27These are documents that describe things that are implemented (in 27These are documents that describe things that are implemented (in
28whole or at least great parts) in OpenSSL. 28whole or at least great parts) in OpenSSL.
29 29
301319 The MD2 Message-Digest Algorithm. B. Kaliski. April 1992.
31 (Format: TXT=25661 bytes) (Status: INFORMATIONAL)
32
331320 The MD4 Message-Digest Algorithm. R. Rivest. April 1992. (Format:
34 TXT=32407 bytes) (Status: INFORMATIONAL)
35
301321 The MD5 Message-Digest Algorithm. R. Rivest. April 1992. (Format: 361321 The MD5 Message-Digest Algorithm. R. Rivest. April 1992. (Format:
31 TXT=35222 bytes) (Status: INFORMATIONAL) 37 TXT=35222 bytes) (Status: INFORMATIONAL)
32 38
diff --git a/src/lib/libssl/src/crypto/evp/c_all.c b/src/lib/libssl/src/crypto/evp/c_all.c
index 6b23460210..b83195b370 100644
--- a/src/lib/libssl/src/crypto/evp/c_all.c
+++ b/src/lib/libssl/src/crypto/evp/c_all.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: c_all.c,v 1.19 2015/09/13 23:36:21 doug Exp $ */ 1/* $OpenBSD: c_all.c,v 1.20 2015/09/14 01:45:03 doug Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -228,6 +228,10 @@ OpenSSL_add_all_ciphers(void)
228void 228void
229OpenSSL_add_all_digests(void) 229OpenSSL_add_all_digests(void)
230{ 230{
231#ifndef OPENSSL_NO_MD4
232 EVP_add_digest(EVP_md4());
233#endif
234
231#ifndef OPENSSL_NO_MD5 235#ifndef OPENSSL_NO_MD5
232 EVP_add_digest(EVP_md5()); 236 EVP_add_digest(EVP_md5());
233 EVP_add_digest_alias(SN_md5, "ssl2-md5"); 237 EVP_add_digest_alias(SN_md5, "ssl2-md5");
diff --git a/src/lib/libssl/src/crypto/evp/evp.h b/src/lib/libssl/src/crypto/evp/evp.h
index 381d4a45c1..2ddbf6142e 100644
--- a/src/lib/libssl/src/crypto/evp/evp.h
+++ b/src/lib/libssl/src/crypto/evp/evp.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: evp.h,v 1.47 2015/09/13 23:36:21 doug Exp $ */ 1/* $OpenBSD: evp.h,v 1.48 2015/09/14 01:45:03 doug Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -648,6 +648,9 @@ void BIO_set_cipher(BIO *b, const EVP_CIPHER *c, const unsigned char *k,
648#endif 648#endif
649 649
650const EVP_MD *EVP_md_null(void); 650const EVP_MD *EVP_md_null(void);
651#ifndef OPENSSL_NO_MD4
652const EVP_MD *EVP_md4(void);
653#endif
651#ifndef OPENSSL_NO_MD5 654#ifndef OPENSSL_NO_MD5
652const EVP_MD *EVP_md5(void); 655const EVP_MD *EVP_md5(void);
653#endif 656#endif
diff --git a/src/lib/libssl/src/crypto/evp/m_md4.c b/src/lib/libssl/src/crypto/evp/m_md4.c
new file mode 100644
index 0000000000..ab3cc852be
--- /dev/null
+++ b/src/lib/libssl/src/crypto/evp/m_md4.c
@@ -0,0 +1,118 @@
1/* $OpenBSD: m_md4.c,v 1.16 2015/09/14 01:45:03 doug Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved.
4 *
5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL.
8 *
9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package.
22 *
23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions
25 * are met:
26 * 1. Redistributions of source code must retain the copyright
27 * notice, this list of conditions and the following disclaimer.
28 * 2. Redistributions in binary form must reproduce the above copyright
29 * notice, this list of conditions and the following disclaimer in the
30 * documentation and/or other materials provided with the distribution.
31 * 3. All advertising materials mentioning features or use of this software
32 * must display the following acknowledgement:
33 * "This product includes cryptographic software written by
34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from
38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE.
52 *
53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence
56 * [including the GNU Public Licence.]
57 */
58
59#include <stdio.h>
60
61#include <openssl/opensslconf.h>
62
63#ifndef OPENSSL_NO_MD4
64
65#include <openssl/evp.h>
66#include <openssl/md4.h>
67#include <openssl/objects.h>
68#include <openssl/x509.h>
69
70#ifndef OPENSSL_NO_RSA
71#include <openssl/rsa.h>
72#endif
73
74static int
75init(EVP_MD_CTX *ctx)
76{
77 return MD4_Init(ctx->md_data);
78}
79
80static int
81update(EVP_MD_CTX *ctx, const void *data, size_t count)
82{
83 return MD4_Update(ctx->md_data, data, count);
84}
85
86static int
87final(EVP_MD_CTX *ctx, unsigned char *md)
88{
89 return MD4_Final(md, ctx->md_data);
90}
91
92static const EVP_MD md4_md = {
93 .type = NID_md4,
94 .pkey_type = NID_md4WithRSAEncryption,
95 .md_size = MD4_DIGEST_LENGTH,
96 .flags = 0,
97 .init = init,
98 .update = update,
99 .final = final,
100 .copy = NULL,
101 .cleanup = NULL,
102#ifndef OPENSSL_NO_RSA
103 .sign = (evp_sign_method *)RSA_sign,
104 .verify = (evp_verify_method *)RSA_verify,
105 .required_pkey_type = {
106 EVP_PKEY_RSA, EVP_PKEY_RSA2, 0, 0,
107 },
108#endif
109 .block_size = MD4_CBLOCK,
110 .ctx_size = sizeof(EVP_MD *) + sizeof(MD4_CTX),
111};
112
113const EVP_MD *
114EVP_md4(void)
115{
116 return (&md4_md);
117}
118#endif
diff --git a/src/lib/libssl/src/crypto/md4/md4.h b/src/lib/libssl/src/crypto/md4/md4.h
new file mode 100644
index 0000000000..04aacc9801
--- /dev/null
+++ b/src/lib/libssl/src/crypto/md4/md4.h
@@ -0,0 +1,103 @@
1/* $OpenBSD: md4.h,v 1.16 2015/09/14 01:45:03 doug Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved.
4 *
5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL.
8 *
9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package.
22 *
23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions
25 * are met:
26 * 1. Redistributions of source code must retain the copyright
27 * notice, this list of conditions and the following disclaimer.
28 * 2. Redistributions in binary form must reproduce the above copyright
29 * notice, this list of conditions and the following disclaimer in the
30 * documentation and/or other materials provided with the distribution.
31 * 3. All advertising materials mentioning features or use of this software
32 * must display the following acknowledgement:
33 * "This product includes cryptographic software written by
34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from
38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE.
52 *
53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence
56 * [including the GNU Public Licence.]
57 */
58
59#include <stddef.h>
60
61#ifndef HEADER_MD4_H
62#define HEADER_MD4_H
63
64#include <openssl/opensslconf.h>
65
66#ifdef __cplusplus
67extern "C" {
68#endif
69
70#ifdef OPENSSL_NO_MD4
71#error MD4 is disabled.
72#endif
73
74/*
75 * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
76 * ! MD4_LONG has to be at least 32 bits wide. !
77 * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
78 */
79
80#define MD4_LONG unsigned int
81
82#define MD4_CBLOCK 64
83#define MD4_LBLOCK (MD4_CBLOCK/4)
84#define MD4_DIGEST_LENGTH 16
85
86typedef struct MD4state_st
87 {
88 MD4_LONG A,B,C,D;
89 MD4_LONG Nl,Nh;
90 MD4_LONG data[MD4_LBLOCK];
91 unsigned int num;
92 } MD4_CTX;
93
94int MD4_Init(MD4_CTX *c);
95int MD4_Update(MD4_CTX *c, const void *data, size_t len);
96int MD4_Final(unsigned char *md, MD4_CTX *c);
97unsigned char *MD4(const unsigned char *d, size_t n, unsigned char *md);
98void MD4_Transform(MD4_CTX *c, const unsigned char *b);
99#ifdef __cplusplus
100}
101#endif
102
103#endif
diff --git a/src/lib/libssl/src/crypto/md4/md4_dgst.c b/src/lib/libssl/src/crypto/md4/md4_dgst.c
new file mode 100644
index 0000000000..4d3801fc26
--- /dev/null
+++ b/src/lib/libssl/src/crypto/md4/md4_dgst.c
@@ -0,0 +1,167 @@
1/* $OpenBSD: md4_dgst.c,v 1.16 2015/09/14 01:45:03 doug Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved.
4 *
5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL.
8 *
9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package.
22 *
23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions
25 * are met:
26 * 1. Redistributions of source code must retain the copyright
27 * notice, this list of conditions and the following disclaimer.
28 * 2. Redistributions in binary form must reproduce the above copyright
29 * notice, this list of conditions and the following disclaimer in the
30 * documentation and/or other materials provided with the distribution.
31 * 3. All advertising materials mentioning features or use of this software
32 * must display the following acknowledgement:
33 * "This product includes cryptographic software written by
34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from
38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE.
52 *
53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence
56 * [including the GNU Public Licence.]
57 */
58
59#include <stdio.h>
60#include <openssl/opensslv.h>
61#include <openssl/crypto.h>
62#include "md4_locl.h"
63
64/* Implemented from RFC1186 The MD4 Message-Digest Algorithm
65 */
66
67#define INIT_DATA_A (unsigned long)0x67452301L
68#define INIT_DATA_B (unsigned long)0xefcdab89L
69#define INIT_DATA_C (unsigned long)0x98badcfeL
70#define INIT_DATA_D (unsigned long)0x10325476L
71
72int MD4_Init(MD4_CTX *c)
73 {
74 memset (c,0,sizeof(*c));
75 c->A=INIT_DATA_A;
76 c->B=INIT_DATA_B;
77 c->C=INIT_DATA_C;
78 c->D=INIT_DATA_D;
79 return 1;
80 }
81
82#ifndef md4_block_data_order
83#ifdef X
84#undef X
85#endif
86void md4_block_data_order (MD4_CTX *c, const void *data_, size_t num)
87 {
88 const unsigned char *data=data_;
89 unsigned MD32_REG_T A,B,C,D,l;
90#ifndef MD32_XARRAY
91 /* See comment in crypto/sha/sha_locl.h for details. */
92 unsigned MD32_REG_T XX0, XX1, XX2, XX3, XX4, XX5, XX6, XX7,
93 XX8, XX9,XX10,XX11,XX12,XX13,XX14,XX15;
94# define X(i) XX##i
95#else
96 MD4_LONG XX[MD4_LBLOCK];
97# define X(i) XX[i]
98#endif
99
100 A=c->A;
101 B=c->B;
102 C=c->C;
103 D=c->D;
104
105 for (;num--;)
106 {
107 HOST_c2l(data,l); X( 0)=l;
108 HOST_c2l(data,l); X( 1)=l;
109 /* Round 0 */
110 R0(A,B,C,D,X( 0), 3,0); HOST_c2l(data,l); X( 2)=l;
111 R0(D,A,B,C,X( 1), 7,0); HOST_c2l(data,l); X( 3)=l;
112 R0(C,D,A,B,X( 2),11,0); HOST_c2l(data,l); X( 4)=l;
113 R0(B,C,D,A,X( 3),19,0); HOST_c2l(data,l); X( 5)=l;
114 R0(A,B,C,D,X( 4), 3,0); HOST_c2l(data,l); X( 6)=l;
115 R0(D,A,B,C,X( 5), 7,0); HOST_c2l(data,l); X( 7)=l;
116 R0(C,D,A,B,X( 6),11,0); HOST_c2l(data,l); X( 8)=l;
117 R0(B,C,D,A,X( 7),19,0); HOST_c2l(data,l); X( 9)=l;
118 R0(A,B,C,D,X( 8), 3,0); HOST_c2l(data,l); X(10)=l;
119 R0(D,A,B,C,X( 9), 7,0); HOST_c2l(data,l); X(11)=l;
120 R0(C,D,A,B,X(10),11,0); HOST_c2l(data,l); X(12)=l;
121 R0(B,C,D,A,X(11),19,0); HOST_c2l(data,l); X(13)=l;
122 R0(A,B,C,D,X(12), 3,0); HOST_c2l(data,l); X(14)=l;
123 R0(D,A,B,C,X(13), 7,0); HOST_c2l(data,l); X(15)=l;
124 R0(C,D,A,B,X(14),11,0);
125 R0(B,C,D,A,X(15),19,0);
126 /* Round 1 */
127 R1(A,B,C,D,X( 0), 3,0x5A827999L);
128 R1(D,A,B,C,X( 4), 5,0x5A827999L);
129 R1(C,D,A,B,X( 8), 9,0x5A827999L);
130 R1(B,C,D,A,X(12),13,0x5A827999L);
131 R1(A,B,C,D,X( 1), 3,0x5A827999L);
132 R1(D,A,B,C,X( 5), 5,0x5A827999L);
133 R1(C,D,A,B,X( 9), 9,0x5A827999L);
134 R1(B,C,D,A,X(13),13,0x5A827999L);
135 R1(A,B,C,D,X( 2), 3,0x5A827999L);
136 R1(D,A,B,C,X( 6), 5,0x5A827999L);
137 R1(C,D,A,B,X(10), 9,0x5A827999L);
138 R1(B,C,D,A,X(14),13,0x5A827999L);
139 R1(A,B,C,D,X( 3), 3,0x5A827999L);
140 R1(D,A,B,C,X( 7), 5,0x5A827999L);
141 R1(C,D,A,B,X(11), 9,0x5A827999L);
142 R1(B,C,D,A,X(15),13,0x5A827999L);
143 /* Round 2 */
144 R2(A,B,C,D,X( 0), 3,0x6ED9EBA1L);
145 R2(D,A,B,C,X( 8), 9,0x6ED9EBA1L);
146 R2(C,D,A,B,X( 4),11,0x6ED9EBA1L);
147 R2(B,C,D,A,X(12),15,0x6ED9EBA1L);
148 R2(A,B,C,D,X( 2), 3,0x6ED9EBA1L);
149 R2(D,A,B,C,X(10), 9,0x6ED9EBA1L);
150 R2(C,D,A,B,X( 6),11,0x6ED9EBA1L);
151 R2(B,C,D,A,X(14),15,0x6ED9EBA1L);
152 R2(A,B,C,D,X( 1), 3,0x6ED9EBA1L);
153 R2(D,A,B,C,X( 9), 9,0x6ED9EBA1L);
154 R2(C,D,A,B,X( 5),11,0x6ED9EBA1L);
155 R2(B,C,D,A,X(13),15,0x6ED9EBA1L);
156 R2(A,B,C,D,X( 3), 3,0x6ED9EBA1L);
157 R2(D,A,B,C,X(11), 9,0x6ED9EBA1L);
158 R2(C,D,A,B,X( 7),11,0x6ED9EBA1L);
159 R2(B,C,D,A,X(15),15,0x6ED9EBA1L);
160
161 A = c->A += A;
162 B = c->B += B;
163 C = c->C += C;
164 D = c->D += D;
165 }
166 }
167#endif
diff --git a/src/lib/libssl/src/crypto/md4/md4_locl.h b/src/lib/libssl/src/crypto/md4/md4_locl.h
new file mode 100644
index 0000000000..ef574c040d
--- /dev/null
+++ b/src/lib/libssl/src/crypto/md4/md4_locl.h
@@ -0,0 +1,108 @@
1/* $OpenBSD: md4_locl.h,v 1.9 2015/09/14 01:45:03 doug Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved.
4 *
5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL.
8 *
9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package.
22 *
23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions
25 * are met:
26 * 1. Redistributions of source code must retain the copyright
27 * notice, this list of conditions and the following disclaimer.
28 * 2. Redistributions in binary form must reproduce the above copyright
29 * notice, this list of conditions and the following disclaimer in the
30 * documentation and/or other materials provided with the distribution.
31 * 3. All advertising materials mentioning features or use of this software
32 * must display the following acknowledgement:
33 * "This product includes cryptographic software written by
34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from
38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE.
52 *
53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence
56 * [including the GNU Public Licence.]
57 */
58
59#include <stdlib.h>
60#include <string.h>
61#include <openssl/opensslconf.h>
62#include <openssl/md4.h>
63
64void md4_block_data_order (MD4_CTX *c, const void *p,size_t num);
65
66#define DATA_ORDER_IS_LITTLE_ENDIAN
67
68#define HASH_LONG MD4_LONG
69#define HASH_CTX MD4_CTX
70#define HASH_CBLOCK MD4_CBLOCK
71#define HASH_UPDATE MD4_Update
72#define HASH_TRANSFORM MD4_Transform
73#define HASH_FINAL MD4_Final
74#define HASH_MAKE_STRING(c,s) do { \
75 unsigned long ll; \
76 ll=(c)->A; HOST_l2c(ll,(s)); \
77 ll=(c)->B; HOST_l2c(ll,(s)); \
78 ll=(c)->C; HOST_l2c(ll,(s)); \
79 ll=(c)->D; HOST_l2c(ll,(s)); \
80 } while (0)
81#define HASH_BLOCK_DATA_ORDER md4_block_data_order
82
83#include "md32_common.h"
84
85/*
86#define F(x,y,z) (((x) & (y)) | ((~(x)) & (z)))
87#define G(x,y,z) (((x) & (y)) | ((x) & ((z))) | ((y) & ((z))))
88*/
89
90/* As pointed out by Wei Dai <weidai@eskimo.com>, the above can be
91 * simplified to the code below. Wei attributes these optimizations
92 * to Peter Gutmann's SHS code, and he attributes it to Rich Schroeppel.
93 */
94#define F(b,c,d) ((((c) ^ (d)) & (b)) ^ (d))
95#define G(b,c,d) (((b) & (c)) | ((b) & (d)) | ((c) & (d)))
96#define H(b,c,d) ((b) ^ (c) ^ (d))
97
98#define R0(a,b,c,d,k,s,t) { \
99 a+=((k)+(t)+F((b),(c),(d))); \
100 a=ROTATE(a,s); };
101
102#define R1(a,b,c,d,k,s,t) { \
103 a+=((k)+(t)+G((b),(c),(d))); \
104 a=ROTATE(a,s); };\
105
106#define R2(a,b,c,d,k,s,t) { \
107 a+=((k)+(t)+H((b),(c),(d))); \
108 a=ROTATE(a,s); };
diff --git a/src/lib/libssl/src/crypto/md4/md4_one.c b/src/lib/libssl/src/crypto/md4/md4_one.c
new file mode 100644
index 0000000000..c1fd6f3e52
--- /dev/null
+++ b/src/lib/libssl/src/crypto/md4/md4_one.c
@@ -0,0 +1,77 @@
1/* $OpenBSD: md4_one.c,v 1.10 2015/09/14 01:45:03 doug Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved.
4 *
5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL.
8 *
9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package.
22 *
23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions
25 * are met:
26 * 1. Redistributions of source code must retain the copyright
27 * notice, this list of conditions and the following disclaimer.
28 * 2. Redistributions in binary form must reproduce the above copyright
29 * notice, this list of conditions and the following disclaimer in the
30 * documentation and/or other materials provided with the distribution.
31 * 3. All advertising materials mentioning features or use of this software
32 * must display the following acknowledgement:
33 * "This product includes cryptographic software written by
34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from
38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE.
52 *
53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence
56 * [including the GNU Public Licence.]
57 */
58
59#include <stdio.h>
60#include <string.h>
61#include <openssl/md4.h>
62#include <openssl/crypto.h>
63
64unsigned char *MD4(const unsigned char *d, size_t n, unsigned char *md)
65 {
66 MD4_CTX c;
67 static unsigned char m[MD4_DIGEST_LENGTH];
68
69 if (md == NULL) md=m;
70 if (!MD4_Init(&c))
71 return NULL;
72 MD4_Update(&c,d,n);
73 MD4_Final(md,&c);
74 explicit_bzero(&c,sizeof(c));
75 return(md);
76 }
77
diff --git a/src/lib/libssl/src/crypto/opensslfeatures.h b/src/lib/libssl/src/crypto/opensslfeatures.h
index 3d1972f661..ba4dbba959 100644
--- a/src/lib/libssl/src/crypto/opensslfeatures.h
+++ b/src/lib/libssl/src/crypto/opensslfeatures.h
@@ -6,7 +6,6 @@
6# define OPENSSL_NO_JPAKE 6# define OPENSSL_NO_JPAKE
7# define OPENSSL_NO_KRB5 7# define OPENSSL_NO_KRB5
8# define OPENSSL_NO_MD2 8# define OPENSSL_NO_MD2
9# define OPENSSL_NO_MD4
10# define OPENSSL_NO_MDC2 9# define OPENSSL_NO_MDC2
11# define OPENSSL_NO_PSK 10# define OPENSSL_NO_PSK
12# define OPENSSL_NO_RC5 11# define OPENSSL_NO_RC5
diff --git a/src/lib/libssl/src/doc/apps/dgst.pod b/src/lib/libssl/src/doc/apps/dgst.pod
index daaa87a50a..d8b2abc6fb 100644
--- a/src/lib/libssl/src/doc/apps/dgst.pod
+++ b/src/lib/libssl/src/doc/apps/dgst.pod
@@ -2,12 +2,12 @@
2 2
3=head1 NAME 3=head1 NAME
4 4
5dgst, md5, sha1, ripemd160 - message digests 5dgst, md5, md4, md2, sha1, sha, ripemd160 - message digests
6 6
7=head1 SYNOPSIS 7=head1 SYNOPSIS
8 8
9B<openssl> B<dgst> 9B<openssl> B<dgst>
10[B<-md5|-sha1|-ripemd160|-dss1>] 10[B<-md5|-md4|-md2|-sha1|-sha|-ripemd160|-dss1>]
11[B<-c>] 11[B<-c>]
12[B<-d>] 12[B<-d>]
13[B<-hex>] 13[B<-hex>]
@@ -22,7 +22,7 @@ B<openssl> B<dgst>
22[B<-hmac key>] 22[B<-hmac key>]
23[B<file...>] 23[B<file...>]
24 24
25[B<md5|sha1|ripemd160>] 25[B<md5|md4|md2|sha1|sha|ripemd160>]
26[B<-c>] 26[B<-c>]
27[B<-d>] 27[B<-d>]
28[B<file...>] 28[B<file...>]
diff --git a/src/lib/libssl/src/doc/apps/openssl.pod b/src/lib/libssl/src/doc/apps/openssl.pod
index a000a02331..718d679dbb 100644
--- a/src/lib/libssl/src/doc/apps/openssl.pod
+++ b/src/lib/libssl/src/doc/apps/openssl.pod
@@ -263,6 +263,10 @@ X.509 Certificate Data Management.
263 263
264=over 10 264=over 10
265 265
266=item B<md2>
267
268MD2 Digest
269
266=item B<md5> 270=item B<md5>
267 271
268MD5 Digest 272MD5 Digest
@@ -271,6 +275,10 @@ MD5 Digest
271 275
272RMD-160 Digest 276RMD-160 Digest
273 277
278=item B<sha>
279
280SHA Digest
281
274=item B<sha1> 282=item B<sha1>
275 283
276SHA-1 Digest 284SHA-1 Digest
diff --git a/src/lib/libssl/src/doc/apps/speed.pod b/src/lib/libssl/src/doc/apps/speed.pod
index 61990f0dd5..c309d9a060 100644
--- a/src/lib/libssl/src/doc/apps/speed.pod
+++ b/src/lib/libssl/src/doc/apps/speed.pod
@@ -8,6 +8,7 @@ speed - test library performance
8 8
9B<openssl speed> 9B<openssl speed>
10[B<-engine id>] 10[B<-engine id>]
11[B<md2>]
11[B<md5>] 12[B<md5>]
12[B<hmac>] 13[B<hmac>]
13[B<sha1>] 14[B<sha1>]
diff --git a/src/lib/libssl/src/doc/apps/ts.pod b/src/lib/libssl/src/doc/apps/ts.pod
index f495a14038..3075b6887a 100644
--- a/src/lib/libssl/src/doc/apps/ts.pod
+++ b/src/lib/libssl/src/doc/apps/ts.pod
@@ -12,7 +12,7 @@ B<-query>
12[B<-config> configfile] 12[B<-config> configfile]
13[B<-data> file_to_hash] 13[B<-data> file_to_hash]
14[B<-digest> digest_bytes] 14[B<-digest> digest_bytes]
15[B<-md5>|B<-sha1>|B<-ripemd160>|B<...>] 15[B<-md2>|B<-md4>|B<-md5>|B<-sha>|B<-sha1>|B<-ripemd160>|B<...>]
16[B<-policy> object_id] 16[B<-policy> object_id]
17[B<-no_nonce>] 17[B<-no_nonce>]
18[B<-cert>] 18[B<-cert>]
@@ -124,7 +124,7 @@ per byte, the bytes optionally separated by colons (e.g. 1A:F6:01:... or
1241AF601...). The number of bytes must match the message digest algorithm 1241AF601...). The number of bytes must match the message digest algorithm
125in use. (Optional) 125in use. (Optional)
126 126
127=item B<-md5>|B<-sha1>|B<-ripemd160>|B<...> 127=item B<-md2>|B<-md4>|B<-md5>|B<-sha>|B<-sha1>|B<-ripemd160>|B<...>
128 128
129The message digest to apply to the data file, it supports all the message 129The message digest to apply to the data file, it supports all the message
130digest algorithms that are supported by the openssl B<dgst> command. 130digest algorithms that are supported by the openssl B<dgst> command.
diff --git a/src/lib/libssl/src/doc/crypto/MD5.pod b/src/lib/libssl/src/doc/crypto/MD5.pod
index 056f94bd9e..b0edd5416f 100644
--- a/src/lib/libssl/src/doc/crypto/MD5.pod
+++ b/src/lib/libssl/src/doc/crypto/MD5.pod
@@ -2,10 +2,33 @@
2 2
3=head1 NAME 3=head1 NAME
4 4
5MD5, MD5_Init, MD5_Update, MD5_Final - MD5 hash functions 5MD2, MD4, MD5, MD2_Init, MD2_Update, MD2_Final, MD4_Init, MD4_Update,
6MD4_Final, MD5_Init, MD5_Update, MD5_Final - MD2, MD4, and MD5 hash functions
6 7
7=head1 SYNOPSIS 8=head1 SYNOPSIS
8 9
10 #include <openssl/md2.h>
11
12 unsigned char *MD2(const unsigned char *d, unsigned long n,
13 unsigned char *md);
14
15 int MD2_Init(MD2_CTX *c);
16 int MD2_Update(MD2_CTX *c, const unsigned char *data,
17 unsigned long len);
18 int MD2_Final(unsigned char *md, MD2_CTX *c);
19
20
21 #include <openssl/md4.h>
22
23 unsigned char *MD4(const unsigned char *d, unsigned long n,
24 unsigned char *md);
25
26 int MD4_Init(MD4_CTX *c);
27 int MD4_Update(MD4_CTX *c, const void *data,
28 unsigned long len);
29 int MD4_Final(unsigned char *md, MD4_CTX *c);
30
31
9 #include <openssl/md5.h> 32 #include <openssl/md5.h>
10 33
11 unsigned char *MD5(const unsigned char *d, unsigned long n, 34 unsigned char *MD5(const unsigned char *d, unsigned long n,
@@ -18,43 +41,61 @@ MD5, MD5_Init, MD5_Update, MD5_Final - MD5 hash functions
18 41
19=head1 DESCRIPTION 42=head1 DESCRIPTION
20 43
21MD5 is a cryptographic hash function with a 128 bit output. 44MD2, MD4, and MD5 are cryptographic hash functions with a 128 bit output.
22 45
23MD5() computes the MD5 message digest of the B<n> bytes at B<d> and 46MD2(), MD4(), and MD5() compute the MD2, MD4, and MD5 message digest
24places it in B<md> (which must have space for MD5_DIGEST_LENGTH == 16 47of the B<n> bytes at B<d> and place it in B<md> (which must have space
48for MD2_DIGEST_LENGTH == MD4_DIGEST_LENGTH == MD5_DIGEST_LENGTH == 16
25bytes of output). If B<md> is NULL, the digest is placed in a static 49bytes of output). If B<md> is NULL, the digest is placed in a static
26array. 50array.
27 51
28The following functions may be used if the message is not completely 52The following functions may be used if the message is not completely
29stored in memory: 53stored in memory:
30 54
55MD2_Init() initializes a B<MD2_CTX> structure.
56
57MD2_Update() can be called repeatedly with chunks of the message to
58be hashed (B<len> bytes at B<data>).
59
60MD2_Final() places the message digest in B<md>, which must have space
61for MD2_DIGEST_LENGTH == 16 bytes of output, and erases the B<MD2_CTX>.
62
63MD4_Init(), MD4_Update(), MD4_Final(), MD5_Init(), MD5_Update(), and
64MD5_Final() are analogous using an B<MD4_CTX> and B<MD5_CTX> structure.
65
31Applications should use the higher level functions 66Applications should use the higher level functions
32L<EVP_DigestInit(3)|EVP_DigestInit(3)> 67L<EVP_DigestInit(3)|EVP_DigestInit(3)>
33etc. instead of calling the hash functions directly. 68etc. instead of calling the hash functions directly.
34 69
35=head1 NOTE 70=head1 NOTE
36 71
37MD5 is recommended only for compatibility with legacy applications. 72MD2, MD4, and MD5 are recommended only for compatibility with existing
38In new applications, SHA-2 should be preferred. 73applications. In new applications, SHA-1 or RIPEMD-160 should be
74preferred.
39 75
40=head1 RETURN VALUES 76=head1 RETURN VALUES
41 77
42MD5() returns a pointer to the hash value. 78MD2(), MD4(), and MD5() return pointers to the hash value.
43 79
44MD5_Init(), MD5_Update(), and MD5_Final() return 1 for success, 0 80MD2_Init(), MD2_Update(), MD2_Final(), MD4_Init(), MD4_Update(),
45otherwise. 81MD4_Final(), MD5_Init(), MD5_Update(), and MD5_Final() return 1 for
82success, 0 otherwise.
46 83
47=head1 CONFORMING TO 84=head1 CONFORMING TO
48 85
49RFC 1321 86RFC 1319, RFC 1320, RFC 1321
50 87
51=head1 SEE ALSO 88=head1 SEE ALSO
52 89
53L<EVP_DigestInit(3)|EVP_DigestInit(3)> 90L<sha(3)|sha(3)>, L<ripemd(3)|ripemd(3)>, L<EVP_DigestInit(3)|EVP_DigestInit(3)>
54 91
55=head1 HISTORY 92=head1 HISTORY
56 93
57MD5(), MD5_Init(), MD5_Update() and MD5_Final() are available in all 94MD2(), MD2_Init(), MD2_Update() MD2_Final(), MD5(), MD5_Init(),
58versions of OpenSSL. 95MD5_Update() and MD5_Final() are available in all versions of SSLeay
96and OpenSSL.
97
98MD4(), MD4_Init(), and MD4_Update() are available in OpenSSL 0.9.6 and
99above.
59 100
60=cut 101=cut
diff --git a/src/lib/libssl/src/doc/crypto/crypto.pod b/src/lib/libssl/src/doc/crypto/crypto.pod
index 11087ccc1f..bbd6ce9ea9 100644
--- a/src/lib/libssl/src/doc/crypto/crypto.pod
+++ b/src/lib/libssl/src/doc/crypto/crypto.pod
@@ -28,7 +28,7 @@ hash functions and a cryptographic pseudo-random number generator.
28=item SYMMETRIC CIPHERS 28=item SYMMETRIC CIPHERS
29 29
30L<blowfish(3)|blowfish(3)>, L<cast(3)|cast(3)>, L<des(3)|des(3)>, 30L<blowfish(3)|blowfish(3)>, L<cast(3)|cast(3)>, L<des(3)|des(3)>,
31L<idea(3)|idea(3)>, L<rc2(3)|rc2(3)>, L<rc4(3)|rc4(3)> 31L<idea(3)|idea(3)>, L<rc2(3)|rc2(3)>, L<rc4(3)|rc4(3)>, L<rc5(3)|rc5(3)>
32 32
33=item PUBLIC KEY CRYPTOGRAPHY AND KEY AGREEMENT 33=item PUBLIC KEY CRYPTOGRAPHY AND KEY AGREEMENT
34 34
@@ -40,7 +40,9 @@ L<x509(3)|x509(3)>, L<x509v3(3)|x509v3(3)>
40 40
41=item AUTHENTICATION CODES, HASH FUNCTIONS 41=item AUTHENTICATION CODES, HASH FUNCTIONS
42 42
43L<hmac(3)|hmac(3)>, L<md5(3)|md5(3)>, L<ripemd(3)|ripemd(3)> 43L<hmac(3)|hmac(3)>, L<md2(3)|md2(3)>, L<md4(3)|md4(3)>,
44L<md5(3)|md5(3)>, L<ripemd(3)|ripemd(3)>,
45L<sha(3)|sha(3)>
44 46
45=item AUXILIARY FUNCTIONS 47=item AUXILIARY FUNCTIONS
46 48
diff --git a/src/lib/libssl/src/doc/standards.txt b/src/lib/libssl/src/doc/standards.txt
index e9eacc5840..7bada8d35f 100644
--- a/src/lib/libssl/src/doc/standards.txt
+++ b/src/lib/libssl/src/doc/standards.txt
@@ -27,6 +27,12 @@ Implemented:
27These are documents that describe things that are implemented (in 27These are documents that describe things that are implemented (in
28whole or at least great parts) in OpenSSL. 28whole or at least great parts) in OpenSSL.
29 29
301319 The MD2 Message-Digest Algorithm. B. Kaliski. April 1992.
31 (Format: TXT=25661 bytes) (Status: INFORMATIONAL)
32
331320 The MD4 Message-Digest Algorithm. R. Rivest. April 1992. (Format:
34 TXT=32407 bytes) (Status: INFORMATIONAL)
35
301321 The MD5 Message-Digest Algorithm. R. Rivest. April 1992. (Format: 361321 The MD5 Message-Digest Algorithm. R. Rivest. April 1992. (Format:
31 TXT=35222 bytes) (Status: INFORMATIONAL) 37 TXT=35222 bytes) (Status: INFORMATIONAL)
32 38
diff --git a/src/regress/lib/libcrypto/Makefile b/src/regress/lib/libcrypto/Makefile
index d3d86ab6b2..3b84856435 100644
--- a/src/regress/lib/libcrypto/Makefile
+++ b/src/regress/lib/libcrypto/Makefile
@@ -1,4 +1,4 @@
1# $OpenBSD: Makefile,v 1.20 2015/09/13 23:36:21 doug Exp $ 1# $OpenBSD: Makefile,v 1.21 2015/09/14 01:45:03 doug Exp $
2 2
3SUBDIR= \ 3SUBDIR= \
4 aead \ 4 aead \
@@ -24,6 +24,7 @@ SUBDIR= \
24 hmac \ 24 hmac \
25 idea \ 25 idea \
26 ige \ 26 ige \
27 md4 \
27 md5 \ 28 md5 \
28 pbkdf2 \ 29 pbkdf2 \
29 pkcs7 \ 30 pkcs7 \
diff --git a/src/regress/lib/libcrypto/md4/Makefile b/src/regress/lib/libcrypto/md4/Makefile
new file mode 100644
index 0000000000..ddb4acf2d1
--- /dev/null
+++ b/src/regress/lib/libcrypto/md4/Makefile
@@ -0,0 +1,9 @@
1# $OpenBSD: Makefile,v 1.5 2015/09/14 01:45:03 doug Exp $
2
3PROG= md4test
4LDADD= -lcrypto
5DPADD= ${LIBCRYPTO}
6WARNINGS= Yes
7CFLAGS+= -DLIBRESSL_INTERNAL -Werror
8
9.include <bsd.regress.mk>
diff --git a/src/regress/lib/libcrypto/md4/md4test.c b/src/regress/lib/libcrypto/md4/md4test.c
new file mode 100644
index 0000000000..60b2c0eedb
--- /dev/null
+++ b/src/regress/lib/libcrypto/md4/md4test.c
@@ -0,0 +1,125 @@
1/* crypto/md4/md4test.c */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved.
4 *
5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL.
8 *
9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package.
22 *
23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions
25 * are met:
26 * 1. Redistributions of source code must retain the copyright
27 * notice, this list of conditions and the following disclaimer.
28 * 2. Redistributions in binary form must reproduce the above copyright
29 * notice, this list of conditions and the following disclaimer in the
30 * documentation and/or other materials provided with the distribution.
31 * 3. All advertising materials mentioning features or use of this software
32 * must display the following acknowledgement:
33 * "This product includes cryptographic software written by
34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from
38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE.
52 *
53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence
56 * [including the GNU Public Licence.]
57 */
58
59#include <stdio.h>
60#include <string.h>
61#include <stdlib.h>
62
63#include <openssl/evp.h>
64#include <openssl/md4.h>
65
66static char *test[]={
67 "",
68 "a",
69 "abc",
70 "message digest",
71 "abcdefghijklmnopqrstuvwxyz",
72 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
73 "12345678901234567890123456789012345678901234567890123456789012345678901234567890",
74 NULL,
75 };
76
77static char *ret[]={
78"31d6cfe0d16ae931b73c59d7e0c089c0",
79"bde52cb31de33e46245e05fbdbd6fb24",
80"a448017aaf21d8525fc10ae87aa6729d",
81"d9130a8164549fe818874806e1c7014b",
82"d79e1c308aa5bbcdeea8ed63df412da9",
83"043f8582f241db351ce627e153e7f0e4",
84"e33b4ddc9c38f2199c3e7b164fcc0536",
85};
86
87static char *pt(unsigned char *md);
88int main(int argc, char *argv[])
89 {
90 int i,err=0;
91 char **P,**R;
92 char *p;
93 unsigned char md[MD4_DIGEST_LENGTH];
94
95 P=test;
96 R=ret;
97 i=1;
98 while (*P != NULL)
99 {
100 EVP_Digest(&(P[0][0]),strlen((char *)*P),md,NULL,EVP_md4(), NULL);
101 p=pt(md);
102 if (strcmp(p,(char *)*R) != 0)
103 {
104 printf("error calculating MD4 on '%s'\n",*P);
105 printf("got %s instead of %s\n",p,*R);
106 err++;
107 }
108 else
109 printf("test %d ok\n",i);
110 i++;
111 R++;
112 P++;
113 }
114 exit(err);
115 }
116
117static char *pt(unsigned char *md)
118 {
119 int i;
120 static char buf[80];
121
122 for (i=0; i<MD4_DIGEST_LENGTH; i++)
123 snprintf(buf + i*2, sizeof(buf) - i*2, "%02x",md[i]);
124 return(buf);
125 }
diff --git a/src/usr.bin/openssl/openssl.1 b/src/usr.bin/openssl/openssl.1
index de0a56735a..1ce8e84291 100644
--- a/src/usr.bin/openssl/openssl.1
+++ b/src/usr.bin/openssl/openssl.1
@@ -1,4 +1,4 @@
1.\" $OpenBSD: openssl.1,v 1.27 2015/09/13 23:36:21 doug Exp $ 1.\" $OpenBSD: openssl.1,v 1.28 2015/09/14 01:45:03 doug Exp $
2.\" ==================================================================== 2.\" ====================================================================
3.\" Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved. 3.\" Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved.
4.\" 4.\"
@@ -112,7 +112,7 @@
112.\" 112.\"
113.\" OPENSSL 113.\" OPENSSL
114.\" 114.\"
115.Dd $Mdocdate: September 13 2015 $ 115.Dd $Mdocdate: September 14 2015 $
116.Dt OPENSSL 1 116.Dt OPENSSL 1
117.Os 117.Os
118.Sh NAME 118.Sh NAME
@@ -383,6 +383,8 @@ Streebog-256 digest.
383Streebog-512 digest. 383Streebog-512 digest.
384.It Cm md_gost94 384.It Cm md_gost94
385GOST R 34.11-94 digest. 385GOST R 34.11-94 digest.
386.It Cm md4
387MD4 digest.
386.It Cm md5 388.It Cm md5
387MD5 digest. 389MD5 digest.
388.It Cm ripemd160 390.It Cm ripemd160
@@ -1793,7 +1795,7 @@ install user certificates and CAs in MSIE using the Xenroll control.
1793.Bk -words 1795.Bk -words
1794.Oo 1796.Oo
1795.Fl gost-mac | streebog256 | streebog512 | md_gost94 | 1797.Fl gost-mac | streebog256 | streebog512 | md_gost94 |
1796.Fl md5 | ripemd160 | sha1 | 1798.Fl md4 | md5 | ripemd160 | sha | sha1 |
1797.Fl sha224 | sha256 | sha384 | sha512 | whirlpool 1799.Fl sha224 | sha256 | sha384 | sha512 | whirlpool
1798.Oc 1800.Oc
1799.Op Fl binary 1801.Op Fl binary
@@ -1816,7 +1818,7 @@ install user certificates and CAs in MSIE using the Xenroll control.
1816.Pp 1818.Pp
1817.Nm openssl 1819.Nm openssl
1818.Cm gost-mac | streebog256 | streebog512 | md_gost94 | 1820.Cm gost-mac | streebog256 | streebog512 | md_gost94 |
1819.Cm md5 | ripemd160 | sha | sha1 | 1821.Cm md4 | md5 | ripemd160 | sha | sha1 |
1820.Cm sha224 | sha256 | sha384 | sha512 | whirlpool 1822.Cm sha224 | sha256 | sha384 | sha512 | whirlpool
1821.Op Fl c 1823.Op Fl c
1822.Op Fl d 1824.Op Fl d
@@ -5083,7 +5085,7 @@ instead of standard output.
5083.Op Fl key Ar keyfile 5085.Op Fl key Ar keyfile
5084.Op Fl keyform Ar DER | PEM 5086.Op Fl keyform Ar DER | PEM
5085.Op Fl keyout Ar file 5087.Op Fl keyout Ar file
5086.Op Fl md5 | sha1 5088.Op Fl md4 | md5 | sha1
5087.Op Fl modulus 5089.Op Fl modulus
5088.Op Fl nameopt Ar option 5090.Op Fl nameopt Ar option
5089.Op Fl new 5091.Op Fl new
@@ -7662,6 +7664,7 @@ command were first added in
7662.Op Cm dsa2048 7664.Op Cm dsa2048
7663.Op Cm hmac 7665.Op Cm hmac
7664.Op Cm md2 7666.Op Cm md2
7667.Op Cm md4
7665.Op Cm md5 7668.Op Cm md5
7666.Op Cm rc2 7669.Op Cm rc2
7667.Op Cm rc2-cbc 7670.Op Cm rc2-cbc
@@ -7712,7 +7715,7 @@ benchmarks in parallel.
7712.Nm "openssl ts" 7715.Nm "openssl ts"
7713.Bk -words 7716.Bk -words
7714.Fl query 7717.Fl query
7715.Op Fl md5 | ripemd160 | sha1 7718.Op Fl md4 | md5 | ripemd160 | sha | sha1
7716.Op Fl cert 7719.Op Fl cert
7717.Op Fl config Ar configfile 7720.Op Fl config Ar configfile
7718.Op Fl data Ar file_to_hash 7721.Op Fl data Ar file_to_hash
@@ -7833,7 +7836,7 @@ This option specifies a previously created time stamp request in DER
7833format that will be printed into the output file. 7836format that will be printed into the output file.
7834Useful when you need to examine the content of a request in human-readable 7837Useful when you need to examine the content of a request in human-readable
7835format. 7838format.
7836.It Fl md5|ripemd160|sha1 7839.It Fl md4|md5|ripemd160|sha|sha1
7837The message digest to apply to the data file. 7840The message digest to apply to the data file.
7838It supports all the message digest algorithms that are supported by the 7841It supports all the message digest algorithms that are supported by the
7839.Nm dgst 7842.Nm dgst
diff --git a/src/usr.bin/openssl/openssl.c b/src/usr.bin/openssl/openssl.c
index 1bda338356..604cfddcea 100644
--- a/src/usr.bin/openssl/openssl.c
+++ b/src/usr.bin/openssl/openssl.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: openssl.c,v 1.11 2015/09/13 23:36:21 doug Exp $ */ 1/* $OpenBSD: openssl.c,v 1.12 2015/09/14 01:45:03 doug Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -217,6 +217,9 @@ FUNCTION functions[] = {
217 { FUNC_TYPE_MD, "streebog256", dgst_main }, 217 { FUNC_TYPE_MD, "streebog256", dgst_main },
218 { FUNC_TYPE_MD, "streebog512", dgst_main }, 218 { FUNC_TYPE_MD, "streebog512", dgst_main },
219#endif 219#endif
220#ifndef OPENSSL_NO_MD4
221 { FUNC_TYPE_MD, "md4", dgst_main },
222#endif
220#ifndef OPENSSL_NO_MD5 223#ifndef OPENSSL_NO_MD5
221 { FUNC_TYPE_MD, "md5", dgst_main }, 224 { FUNC_TYPE_MD, "md5", dgst_main },
222#endif 225#endif
diff --git a/src/usr.bin/openssl/req.c b/src/usr.bin/openssl/req.c
index f359e7392e..c7256ae59a 100644
--- a/src/usr.bin/openssl/req.c
+++ b/src/usr.bin/openssl/req.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: req.c,v 1.8 2015/09/13 23:36:21 doug Exp $ */ 1/* $OpenBSD: req.c,v 1.9 2015/09/14 01:45:03 doug Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -354,7 +354,7 @@ bad:
354 BIO_printf(bio_err, " -newkey rsa:bits generate a new RSA key of 'bits' in size\n"); 354 BIO_printf(bio_err, " -newkey rsa:bits generate a new RSA key of 'bits' in size\n");
355 BIO_printf(bio_err, " -newkey dsa:file generate a new DSA key, parameters taken from CA in 'file'\n"); 355 BIO_printf(bio_err, " -newkey dsa:file generate a new DSA key, parameters taken from CA in 'file'\n");
356 BIO_printf(bio_err, " -newkey ec:file generate a new EC key, parameters taken from CA in 'file'\n"); 356 BIO_printf(bio_err, " -newkey ec:file generate a new EC key, parameters taken from CA in 'file'\n");
357 BIO_printf(bio_err, " -[digest] Digest to sign with (md5, sha1)\n"); 357 BIO_printf(bio_err, " -[digest] Digest to sign with (md5, sha1, md4)\n");
358 BIO_printf(bio_err, " -config file request template file.\n"); 358 BIO_printf(bio_err, " -config file request template file.\n");
359 BIO_printf(bio_err, " -subj arg set or modify request subject\n"); 359 BIO_printf(bio_err, " -subj arg set or modify request subject\n");
360 BIO_printf(bio_err, " -multivalue-rdn enable support for multivalued RDNs\n"); 360 BIO_printf(bio_err, " -multivalue-rdn enable support for multivalued RDNs\n");
diff --git a/src/usr.bin/openssl/speed.c b/src/usr.bin/openssl/speed.c
index d9fe3309b7..292fa28634 100644
--- a/src/usr.bin/openssl/speed.c
+++ b/src/usr.bin/openssl/speed.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: speed.c,v 1.14 2015/09/13 23:36:21 doug Exp $ */ 1/* $OpenBSD: speed.c,v 1.15 2015/09/14 01:45:03 doug Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -124,6 +124,9 @@
124#ifndef OPENSSL_NO_IDEA 124#ifndef OPENSSL_NO_IDEA
125#include <openssl/idea.h> 125#include <openssl/idea.h>
126#endif 126#endif
127#ifndef OPENSSL_NO_MD4
128#include <openssl/md4.h>
129#endif
127#ifndef OPENSSL_NO_MD5 130#ifndef OPENSSL_NO_MD5
128#include <openssl/md5.h> 131#include <openssl/md5.h>
129#endif 132#endif
@@ -170,8 +173,7 @@ static int do_multi(int multi);
170#define MAX_ECDH_SIZE 256 173#define MAX_ECDH_SIZE 256
171 174
172static const char *names[ALGOR_NUM] = { 175static const char *names[ALGOR_NUM] = {
173 "md2", NULL /* was mdc2 */, NULL /* was md4 */, "md5", "hmac(md5)", 176 "md2", NULL /* was mdc2 */, "md4", "md5", "hmac(md5)", "sha1", "rmd160",
174 "sha1", "rmd160",
175 "rc4", "des cbc", "des ede3", "idea cbc", "seed cbc", 177 "rc4", "des cbc", "des ede3", "idea cbc", "seed cbc",
176 "rc2 cbc", "rc5-32/12 cbc", "blowfish cbc", "cast cbc", 178 "rc2 cbc", "rc5-32/12 cbc", "blowfish cbc", "cast cbc",
177 "aes-128 cbc", "aes-192 cbc", "aes-256 cbc", 179 "aes-128 cbc", "aes-192 cbc", "aes-256 cbc",
@@ -232,6 +234,9 @@ speed_main(int argc, char **argv)
232 long rsa_count; 234 long rsa_count;
233 unsigned rsa_num; 235 unsigned rsa_num;
234 unsigned char md[EVP_MAX_MD_SIZE]; 236 unsigned char md[EVP_MAX_MD_SIZE];
237#ifndef OPENSSL_NO_MD4
238 unsigned char md4[MD4_DIGEST_LENGTH];
239#endif
235#ifndef OPENSSL_NO_MD5 240#ifndef OPENSSL_NO_MD5
236 unsigned char md5[MD5_DIGEST_LENGTH]; 241 unsigned char md5[MD5_DIGEST_LENGTH];
237 unsigned char hmac[MD5_DIGEST_LENGTH]; 242 unsigned char hmac[MD5_DIGEST_LENGTH];
@@ -313,6 +318,7 @@ speed_main(int argc, char **argv)
313 CAMELLIA_KEY camellia_ks1, camellia_ks2, camellia_ks3; 318 CAMELLIA_KEY camellia_ks1, camellia_ks2, camellia_ks3;
314#endif 319#endif
315#define D_MD2 0 320#define D_MD2 0
321#define D_MD4 2
316#define D_MD5 3 322#define D_MD5 3
317#define D_HMAC 4 323#define D_HMAC 4
318#define D_SHA1 5 324#define D_SHA1 5
@@ -551,6 +557,11 @@ speed_main(int argc, char **argv)
551 j--; /* Otherwise, -mr gets confused with an 557 j--; /* Otherwise, -mr gets confused with an
552 * algorithm. */ 558 * algorithm. */
553 } else 559 } else
560#ifndef OPENSSL_NO_MD4
561 if (strcmp(*argv, "md4") == 0)
562 doit[D_MD4] = 1;
563 else
564#endif
554#ifndef OPENSSL_NO_MD5 565#ifndef OPENSSL_NO_MD5
555 if (strcmp(*argv, "md5") == 0) 566 if (strcmp(*argv, "md5") == 0)
556 doit[D_MD5] = 1; 567 doit[D_MD5] = 1;
@@ -801,6 +812,9 @@ speed_main(int argc, char **argv)
801 BIO_printf(bio_err, "Error: bad option or value\n"); 812 BIO_printf(bio_err, "Error: bad option or value\n");
802 BIO_printf(bio_err, "\n"); 813 BIO_printf(bio_err, "\n");
803 BIO_printf(bio_err, "Available values:\n"); 814 BIO_printf(bio_err, "Available values:\n");
815#ifndef OPENSSL_NO_MD4
816 BIO_printf(bio_err, "md4 ");
817#endif
804#ifndef OPENSSL_NO_MD5 818#ifndef OPENSSL_NO_MD5
805 BIO_printf(bio_err, "md5 "); 819 BIO_printf(bio_err, "md5 ");
806#ifndef OPENSSL_NO_HMAC 820#ifndef OPENSSL_NO_HMAC
@@ -823,7 +837,7 @@ speed_main(int argc, char **argv)
823 BIO_printf(bio_err, "rmd160"); 837 BIO_printf(bio_err, "rmd160");
824#endif 838#endif
825#if !defined(OPENSSL_NO_MD2) || \ 839#if !defined(OPENSSL_NO_MD2) || \
826 !defined(OPENSSL_NO_MD5) || \ 840 !defined(OPENSSL_NO_MD4) || !defined(OPENSSL_NO_MD5) || \
827 !defined(OPENSSL_NO_SHA1) || !defined(OPENSSL_NO_RIPEMD160) || \ 841 !defined(OPENSSL_NO_SHA1) || !defined(OPENSSL_NO_RIPEMD160) || \
828 !defined(OPENSSL_NO_WHIRLPOOL) 842 !defined(OPENSSL_NO_WHIRLPOOL)
829 BIO_printf(bio_err, "\n"); 843 BIO_printf(bio_err, "\n");
@@ -982,6 +996,19 @@ speed_main(int argc, char **argv)
982#define COUNT(d) (count) 996#define COUNT(d) (count)
983 signal(SIGALRM, sig_done); 997 signal(SIGALRM, sig_done);
984 998
999#ifndef OPENSSL_NO_MD4
1000 if (doit[D_MD4]) {
1001 for (j = 0; j < SIZE_NUM; j++) {
1002 print_message(names[D_MD4], c[D_MD4][j], lengths[j]);
1003 Time_F(START);
1004 for (count = 0, run = 1; COND(c[D_MD4][j]); count++)
1005 EVP_Digest(&(buf[0]), (unsigned long) lengths[j], &(md4[0]), NULL, EVP_md4(), NULL);
1006 d = Time_F(STOP);
1007 print_result(D_MD4, j, count, d);
1008 }
1009 }
1010#endif
1011
985#ifndef OPENSSL_NO_MD5 1012#ifndef OPENSSL_NO_MD5
986 if (doit[D_MD5]) { 1013 if (doit[D_MD5]) {
987 for (j = 0; j < SIZE_NUM; j++) { 1014 for (j = 0; j < SIZE_NUM; j++) {
diff --git a/src/usr.bin/openssl/ts.c b/src/usr.bin/openssl/ts.c
index d2bf2a6cd6..e193636868 100644
--- a/src/usr.bin/openssl/ts.c
+++ b/src/usr.bin/openssl/ts.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ts.c,v 1.8 2015/09/13 23:36:21 doug Exp $ */ 1/* $OpenBSD: ts.c,v 1.9 2015/09/14 01:45:03 doug Exp $ */
2/* Written by Zoltan Glozik (zglozik@stones.com) for the OpenSSL 2/* Written by Zoltan Glozik (zglozik@stones.com) for the OpenSSL
3 * project 2002. 3 * project 2002.
4 */ 4 */
@@ -298,7 +298,7 @@ usage:
298 BIO_printf(bio_err, "usage:\n" 298 BIO_printf(bio_err, "usage:\n"
299 "ts -query [-config configfile] " 299 "ts -query [-config configfile] "
300 "[-data file_to_hash] [-digest digest_bytes]" 300 "[-data file_to_hash] [-digest digest_bytes]"
301 "[-md5|-sha1|-ripemd160] " 301 "[-md2|-md4|-md5|-sha|-sha1|-ripemd160] "
302 "[-policy object_id] [-no_nonce] [-cert] " 302 "[-policy object_id] [-no_nonce] [-cert] "
303 "[-in request.tsq] [-out request.tsq] [-text]\n"); 303 "[-in request.tsq] [-out request.tsq] [-text]\n");
304 BIO_printf(bio_err, "or\n" 304 BIO_printf(bio_err, "or\n"