summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authordoug <>2015-09-14 01:45:03 +0000
committerdoug <>2015-09-14 01:45:03 +0000
commitccf0b47cd77c8c167d186cc3f01dfc310ee5b29f (patch)
tree587478d440edfb518946564a3da5958afa932346 /src/lib
parent516aee833d4c8a3fa73b13184ca096bf2ad7f1f2 (diff)
downloadopenbsd-ccf0b47cd77c8c167d186cc3f01dfc310ee5b29f.tar.gz
openbsd-ccf0b47cd77c8c167d186cc3f01dfc310ee5b29f.tar.bz2
openbsd-ccf0b47cd77c8c167d186cc3f01dfc310ee5b29f.zip
Temporarily revive MD4 for MS CHAP support.
Diffstat (limited to 'src/lib')
-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
27 files changed, 1320 insertions, 42 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