md4_dgst.c revision 392aa7cc7d2b122614c5393c3e357da07fd07af3
19c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar/* crypto/md4/md4_dgst.c */ 29c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 39c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar * All rights reserved. 49c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar * 59c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar * This package is an SSL implementation written 69c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar * by Eric Young (eay@cryptsoft.com). 79c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar * The implementation was written so as to conform with Netscapes SSL. 89c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar * 99c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar * This library is free for commercial and non-commercial use as long as 109c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar * the following conditions are aheared to. The following conditions 119c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar * apply to all code found in this distribution, be it the RC4, RSA, 129c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar * lhash, DES, etc., code; not just the SSL code. The SSL documentation 139c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar * included with this distribution is covered by the same copyright terms 1440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar * except that the holder is Tim Hudson (tjh@cryptsoft.com). 15b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar * 169c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar * Copyright remains Eric Young's, and as such any Copyright notices in 17182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger * the code are not to be removed. 189c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar * If this package is used in a product, Eric Young should be given attribution 199c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar * as the author of the parts of the library used. 209c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar * This can be in the form of a textual message at program startup or 21260611a32535c851237926bfcf78869b13c07d5bJohn McCall * in documentation (online or textual) provided with the package. 22260611a32535c851237926bfcf78869b13c07d5bJohn McCall * 239c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar * Redistribution and use in source and binary forms, with or without 24df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor * modification, are permitted provided that the following conditions 25df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor * are met: 2602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar * 1. Redistributions of source code must retain the copyright 27f395528158379e7ea9f6ff4bbb791abadca15aabDaniel Dunbar * notice, this list of conditions and the following disclaimer. 2802633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar * 2. Redistributions in binary form must reproduce the above copyright 2902633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar * notice, this list of conditions and the following disclaimer in the 30985b825eea7387be10478de0430815ed6a673326Daniel Dunbar * documentation and/or other materials provided with the distribution. 319c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar * 3. All advertising materials mentioning features or use of this software 3220a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar * must display the following acknowledgement: 3392dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands * "This product includes cryptographic software written by 3466b8a6671bb5df540dd7200a5286f7ed7a72c1ccBob Wilson * Eric Young (eay@cryptsoft.com)" 3566b8a6671bb5df540dd7200a5286f7ed7a72c1ccBob Wilson * The word 'cryptographic' can be left out if the rouines from the library 3666b8a6671bb5df540dd7200a5286f7ed7a72c1ccBob Wilson * being used are not cryptographic related :-). 3766b8a6671bb5df540dd7200a5286f7ed7a72c1ccBob Wilson * 4. If you include any Windows specific code (or a derivative thereof) from 3866b8a6671bb5df540dd7200a5286f7ed7a72c1ccBob Wilson * the apps directory (application code) you must include an acknowledgement: 3966b8a6671bb5df540dd7200a5286f7ed7a72c1ccBob Wilson * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 4066b8a6671bb5df540dd7200a5286f7ed7a72c1ccBob Wilson * 4154db68bf0e389b8aabe1a434f825a81a9c1f7db8Peter Collingbourne * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 4254db68bf0e389b8aabe1a434f825a81a9c1f7db8Peter Collingbourne * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 43df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 44c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 45c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 46c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 47c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 48fa41d6975058ceb1b8a24564f6dcec72f89f62e8Daniel Dunbar * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 49fa41d6975058ceb1b8a24564f6dcec72f89f62e8Daniel Dunbar * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 50ed734737d5af31906e30e537d4a41c760ddcfc59Eric Christopher * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 5102a84277864e5476b12c0ec687ed09f0b2922471Hal Finkel * SUCH DAMAGE. 529284d215022457ba867080a713f08f026d89ea17Bruno Cardoso Lopes * 536acda16e9c194dcbd0dea64341e182bdb65d0f41Daniel Dunbar * The licence and distribution terms for any publically available version or 549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum * derivative of this code cannot be changed. i.e. this code cannot simply be 556acda16e9c194dcbd0dea64341e182bdb65d0f41Daniel Dunbar * copied and put under another distribution licence 56260611a32535c851237926bfcf78869b13c07d5bJohn McCall * [including the GNU Public Licence.] 57260611a32535c851237926bfcf78869b13c07d5bJohn McCall */ 58260611a32535c851237926bfcf78869b13c07d5bJohn McCall 59260611a32535c851237926bfcf78869b13c07d5bJohn McCall#include <stdio.h> 60260611a32535c851237926bfcf78869b13c07d5bJohn McCall#include <openssl/opensslv.h> 619c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#include <openssl/crypto.h> 623038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar#include "md4_locl.h" 639c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 6460a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbarconst char MD4_version[]="MD4" OPENSSL_VERSION_PTEXT; 658767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar 669c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar/* Implemented from RFC1186 The MD4 Message-Digest Algorithm 6747ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar */ 6847ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 6920a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar#define INIT_DATA_A (unsigned long)0x67452301L 7020a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar#define INIT_DATA_B (unsigned long)0xefcdab89L 7120a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar#define INIT_DATA_C (unsigned long)0x98badcfeL 7220a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar#define INIT_DATA_D (unsigned long)0x10325476L 7320a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar 7420a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbarfips_md_init(MD4) 7520a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar { 7620a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar memset (c,0,sizeof(*c)); 77fc30829694e62040c14f329f5491724fe7476241Jim Grosbach c->A=INIT_DATA_A; 7820a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar c->B=INIT_DATA_B; 793038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar c->C=INIT_DATA_C; 803038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar c->D=INIT_DATA_D; 8120a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar return 1; 8220a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar } 8320a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar 8420a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar#ifndef md4_block_data_order 8520a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar#ifdef X 8620a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar#undef X 871eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump#endif 881eb4433ac451dc16f4133a88af2d002ac26c58efMike Stumpvoid md4_block_data_order (MD4_CTX *c, const void *data_, size_t num) 891eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump { 9047ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const unsigned char *data=data_; 919c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar register unsigned MD32_REG_T A,B,C,D,l; 929c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#ifndef MD32_XARRAY 9331b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar /* See comment in crypto/sha/sha_locl.h for details. */ 9431b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar unsigned MD32_REG_T XX0, XX1, XX2, XX3, XX4, XX5, XX6, XX7, 9592dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands XX8, XX9,XX10,XX11,XX12,XX13,XX14,XX15; 969c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar# define X(i) XX##i 973038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar#else 983038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar MD4_LONG XX[MD4_LBLOCK]; 9947ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar# define X(i) XX[i] 10047ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar#endif 1011eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 1021eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump A=c->A; 1031eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump B=c->B; 10447ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar C=c->C; 105b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar D=c->D; 106b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 107b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar for (;num--;) 10882b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar { 10982b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar HOST_c2l(data,l); X( 0)=l; HOST_c2l(data,l); X( 1)=l; 1109c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar /* Round 0 */ 1119c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar R0(A,B,C,D,X( 0), 3,0); HOST_c2l(data,l); X( 2)=l; 1121eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump R0(D,A,B,C,X( 1), 7,0); HOST_c2l(data,l); X( 3)=l; 11392dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands R0(C,D,A,B,X( 2),11,0); HOST_c2l(data,l); X( 4)=l; 1149c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar R0(B,C,D,A,X( 3),19,0); HOST_c2l(data,l); X( 5)=l; 1153038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar R0(A,B,C,D,X( 4), 3,0); HOST_c2l(data,l); X( 6)=l; 1163038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar R0(D,A,B,C,X( 5), 7,0); HOST_c2l(data,l); X( 7)=l; 117b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar R0(C,D,A,B,X( 6),11,0); HOST_c2l(data,l); X( 8)=l; 11860a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar R0(B,C,D,A,X( 7),19,0); HOST_c2l(data,l); X( 9)=l; 119b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar R0(A,B,C,D,X( 8), 3,0); HOST_c2l(data,l); X(10)=l; 120b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar R0(D,A,B,C,X( 9), 7,0); HOST_c2l(data,l); X(11)=l; 12182b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar R0(C,D,A,B,X(10),11,0); HOST_c2l(data,l); X(12)=l; 12282b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar R0(B,C,D,A,X(11),19,0); HOST_c2l(data,l); X(13)=l; 123b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar R0(A,B,C,D,X(12), 3,0); HOST_c2l(data,l); X(14)=l; 124b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar R0(D,A,B,C,X(13), 7,0); HOST_c2l(data,l); X(15)=l; 12592dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands R0(C,D,A,B,X(14),11,0); 126b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar R0(B,C,D,A,X(15),19,0); 1273038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar /* Round 1 */ 1283038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar R1(A,B,C,D,X( 0), 3,0x5A827999L); 1299c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar R1(D,A,B,C,X( 4), 5,0x5A827999L); 13060a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar R1(C,D,A,B,X( 8), 9,0x5A827999L); 1319c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar R1(B,C,D,A,X(12),13,0x5A827999L); 13247ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar R1(A,B,C,D,X( 1), 3,0x5A827999L); 13382b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar R1(D,A,B,C,X( 5), 5,0x5A827999L); 13482b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar R1(C,D,A,B,X( 9), 9,0x5A827999L); 1359c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar R1(B,C,D,A,X(13),13,0x5A827999L); 1369c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar R1(A,B,C,D,X( 2), 3,0x5A827999L); 13792dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands R1(D,A,B,C,X( 6), 5,0x5A827999L); 1389c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar R1(C,D,A,B,X(10), 9,0x5A827999L); 1393038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar R1(B,C,D,A,X(14),13,0x5A827999L); 1403038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar R1(A,B,C,D,X( 3), 3,0x5A827999L); 1419c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar R1(D,A,B,C,X( 7), 5,0x5A827999L); 14260a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar R1(C,D,A,B,X(11), 9,0x5A827999L); 1439c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar R1(B,C,D,A,X(15),13,0x5A827999L); 14447ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar /* Round 2 */ 14582b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar R2(A,B,C,D,X( 0), 3,0x6ED9EBA1L); 14682b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar R2(D,A,B,C,X( 8), 9,0x6ED9EBA1L); 1479c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar R2(C,D,A,B,X( 4),11,0x6ED9EBA1L); 1489c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar R2(B,C,D,A,X(12),15,0x6ED9EBA1L); 14992dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands R2(A,B,C,D,X( 2), 3,0x6ED9EBA1L); 1509c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar R2(D,A,B,C,X(10), 9,0x6ED9EBA1L); 1513038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar R2(C,D,A,B,X( 6),11,0x6ED9EBA1L); 1523038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar R2(B,C,D,A,X(14),15,0x6ED9EBA1L); 1539c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar R2(A,B,C,D,X( 1), 3,0x6ED9EBA1L); 1549c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar R2(D,A,B,C,X( 9), 9,0x6ED9EBA1L); 15547ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar R2(C,D,A,B,X( 5),11,0x6ED9EBA1L); 15682b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar R2(B,C,D,A,X(13),15,0x6ED9EBA1L); 15782b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar R2(A,B,C,D,X( 3), 3,0x6ED9EBA1L); 1589c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar R2(D,A,B,C,X(11), 9,0x6ED9EBA1L); 1599c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar R2(C,D,A,B,X( 7),11,0x6ED9EBA1L); 16092dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands R2(B,C,D,A,X(15),15,0x6ED9EBA1L); 1619c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 1623038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar A = c->A += A; 1633038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar B = c->B += B; 1649c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar C = c->C += C; 1659c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar D = c->D += D; 1668ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier } 16747ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar } 16882b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar#endif 16982b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar