Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
b6aa6210
Commit
b6aa6210
authored
Oct 06, 2004
by
Hans Leidekker
Committed by
Alexandre Julliard
Oct 06, 2004
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Implement MD{4,5}Init MD{4,5}Update and MD{4,5}Final.
Add tests for these functions.
parent
ec3e9462
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
788 additions
and
6 deletions
+788
-6
Makefile.in
dlls/advapi32/Makefile.in
+2
-0
advapi32.spec
dlls/advapi32/advapi32.spec
+6
-6
crypt_md4.c
dlls/advapi32/crypt_md4.c
+274
-0
crypt_md5.c
dlls/advapi32/crypt_md5.c
+284
-0
.cvsignore
dlls/advapi32/tests/.cvsignore
+2
-0
Makefile.in
dlls/advapi32/tests/Makefile.in
+2
-0
crypt_md4.c
dlls/advapi32/tests/crypt_md4.c
+109
-0
crypt_md5.c
dlls/advapi32/tests/crypt_md5.c
+109
-0
No files found.
dlls/advapi32/Makefile.in
View file @
b6aa6210
...
...
@@ -12,6 +12,8 @@ C_SRCS = \
crypt.c
\
crypt_des.c
\
crypt_lmhash.c
\
crypt_md4.c
\
crypt_md5.c
\
crypt_sha.c
\
eventlog.c
\
registry.c
\
...
...
dlls/advapi32/advapi32.spec
View file @
b6aa6210
...
...
@@ -174,12 +174,12 @@
@ stdcall MakeAbsoluteSD(ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr)
@ stdcall MakeSelfRelativeSD(ptr ptr ptr)
@ stub MapGenericMask
@ st
ub MD4Final
@ st
ub MD4Init
@ st
ub MD4Update
@ st
ub MD5Final
@ st
ub MD5Init
@ st
ub MD5Update
@ st
dcall MD4Final(ptr ptr)
@ st
dcall MD4Init(ptr)
@ st
dcall MD4Update(ptr ptr long)
@ st
dcall MD5Final(ptr ptr)
@ st
dcall MD5Init(ptr)
@ st
dcall MD5Update(ptr ptr long)
@ stdcall NotifyBootConfigStatus(long)
@ stdcall NotifyChangeEventLog (long long)
@ stub ObjectCloseAuditAlarmA
...
...
dlls/advapi32/crypt_md4.c
0 → 100644
View file @
b6aa6210
/*
* Copyright (C) 2001 Nikos Mavroyanopoulos
* Copyright (C) 2004 Hans Leidekker
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/*
* This code implements the MD4 message-digest algorithm.
* It is based on code in the public domain written by Colin
* Plumb in 1993. The algorithm is due to Ron Rivest.
*
* Equivalent code is available from RSA Data Security, Inc.
* This code has been tested against that, and is equivalent,
* except that you don't need to include two pages of legalese
* with every copy.
*
* To compute the message digest of a chunk of bytes, declare an
* MD4_CTX structure, pass it to MD4Init, call MD4Update as
* needed on buffers full of bytes, and then call MD4Final, which
* will fill a supplied 16-byte array with the digest.
*/
#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
typedef
struct
{
unsigned
int
buf
[
4
];
unsigned
int
i
[
2
];
unsigned
char
in
[
64
];
unsigned
char
digest
[
16
];
}
MD4_CTX
;
static
void
MD4Transform
(
unsigned
int
buf
[
4
],
unsigned
int
const
in
[
16
]
);
/*
* Note: this code is harmless on little-endian machines.
*/
static
void
byteReverse
(
unsigned
char
*
buf
,
unsigned
longs
)
{
unsigned
int
t
;
do
{
t
=
(
unsigned
int
)((
unsigned
)
buf
[
3
]
<<
8
|
buf
[
2
])
<<
16
|
((
unsigned
)
buf
[
1
]
<<
8
|
buf
[
0
]);
*
(
unsigned
int
*
)
buf
=
t
;
buf
+=
4
;
}
while
(
--
longs
);
}
/*
* Start MD4 accumulation. Set bit count to 0 and buffer to mysterious
* initialization constants.
*/
VOID
WINAPI
MD4Init
(
MD4_CTX
*
ctx
)
{
ctx
->
buf
[
0
]
=
0x67452301
;
ctx
->
buf
[
1
]
=
0xefcdab89
;
ctx
->
buf
[
2
]
=
0x98badcfe
;
ctx
->
buf
[
3
]
=
0x10325476
;
ctx
->
i
[
0
]
=
ctx
->
i
[
1
]
=
0
;
}
/*
* Update context to reflect the concatenation of another buffer full
* of bytes.
*/
VOID
WINAPI
MD4Update
(
MD4_CTX
*
ctx
,
const
unsigned
char
*
buf
,
unsigned
int
len
)
{
register
unsigned
int
t
;
/* Update bitcount */
t
=
ctx
->
i
[
0
];
if
((
ctx
->
i
[
0
]
=
t
+
((
unsigned
int
)
len
<<
3
))
<
t
)
ctx
->
i
[
1
]
++
;
/* Carry from low to high */
ctx
->
i
[
1
]
+=
len
>>
29
;
t
=
(
t
>>
3
)
&
0x3f
;
/* Handle any leading odd-sized chunks */
if
(
t
)
{
unsigned
char
*
p
=
(
unsigned
char
*
)
ctx
->
in
+
t
;
t
=
64
-
t
;
if
(
len
<
t
)
{
memcpy
(
p
,
buf
,
len
);
return
;
}
memcpy
(
p
,
buf
,
t
);
byteReverse
(
ctx
->
in
,
16
);
MD4Transform
(
ctx
->
buf
,
(
unsigned
int
*
)
ctx
->
in
);
buf
+=
t
;
len
-=
t
;
}
/* Process data in 64-byte chunks */
while
(
len
>=
64
)
{
memcpy
(
ctx
->
in
,
buf
,
64
);
byteReverse
(
ctx
->
in
,
16
);
MD4Transform
(
ctx
->
buf
,
(
unsigned
int
*
)
ctx
->
in
);
buf
+=
64
;
len
-=
64
;
}
/* Handle any remaining bytes of data. */
memcpy
(
ctx
->
in
,
buf
,
len
);
}
/*
* Final wrapup - pad to 64-byte boundary with the bit pattern
* 1 0* (64-bit count of bits processed, MSB-first)
*/
VOID
WINAPI
MD4Final
(
MD4_CTX
*
ctx
)
{
unsigned
int
count
;
unsigned
char
*
p
;
/* Compute number of bytes mod 64 */
count
=
(
ctx
->
i
[
0
]
>>
3
)
&
0x3F
;
/* Set the first char of padding to 0x80. This is safe since there is
always at least one byte free */
p
=
ctx
->
in
+
count
;
*
p
++
=
0x80
;
/* Bytes of padding needed to make 64 bytes */
count
=
64
-
1
-
count
;
/* Pad out to 56 mod 64 */
if
(
count
<
8
)
{
/* Two lots of padding: Pad the first block to 64 bytes */
memset
(
p
,
0
,
count
);
byteReverse
(
ctx
->
in
,
16
);
MD4Transform
(
ctx
->
buf
,
(
unsigned
int
*
)
ctx
->
in
);
/* Now fill the next block with 56 bytes */
memset
(
ctx
->
in
,
0
,
56
);
}
else
{
/* Pad block to 56 bytes */
memset
(
p
,
0
,
count
-
8
);
}
byteReverse
(
ctx
->
in
,
14
);
/* Append length in bits and transform */
((
unsigned
int
*
)
ctx
->
in
)[
14
]
=
ctx
->
i
[
0
];
((
unsigned
int
*
)
ctx
->
in
)[
15
]
=
ctx
->
i
[
1
];
MD4Transform
(
ctx
->
buf
,
(
unsigned
int
*
)
ctx
->
in
);
byteReverse
(
(
unsigned
char
*
)
ctx
->
buf
,
4
);
if
(
ctx
->
digest
!=
NULL
)
memcpy
(
ctx
->
digest
,
ctx
->
buf
,
16
);
memset
(
ctx
,
0
,
sizeof
(
ctx
)
);
/* In case it's sensitive */
}
/* The three core functions */
#define rotl32(x,n) (((x) << ((unsigned int)(n))) | ((x) >> (32 - (unsigned int)(n))))
#define F( x, y, z ) (((x) & (y)) | ((~x) & (z)))
#define G( x, y, z ) (((x) & (y)) | ((x) & (z)) | ((y) & (z)))
#define H( x, y, z ) ((x) ^ (y) ^ (z))
#define FF( a, b, c, d, x, s ) { \
(a) += F( (b), (c), (d) ) + (x); \
(a) = rotl32( (a), (s) ); \
}
#define GG( a, b, c, d, x, s ) { \
(a) += G( (b), (c), (d) ) + (x) + (unsigned int)0x5a827999; \
(a) = rotl32( (a), (s) ); \
}
#define HH( a, b, c, d, x, s ) { \
(a) += H( (b), (c), (d) ) + (x) + (unsigned int)0x6ed9eba1; \
(a) = rotl32( (a), (s) ); \
}
/*
* The core of the MD4 algorithm
*/
static
void
MD4Transform
(
unsigned
int
buf
[
4
],
const
unsigned
int
in
[
16
]
)
{
register
unsigned
int
a
,
b
,
c
,
d
;
a
=
buf
[
0
];
b
=
buf
[
1
];
c
=
buf
[
2
];
d
=
buf
[
3
];
FF
(
a
,
b
,
c
,
d
,
in
[
0
],
3
);
FF
(
d
,
a
,
b
,
c
,
in
[
1
],
7
);
FF
(
c
,
d
,
a
,
b
,
in
[
2
],
11
);
FF
(
b
,
c
,
d
,
a
,
in
[
3
],
19
);
FF
(
a
,
b
,
c
,
d
,
in
[
4
],
3
);
FF
(
d
,
a
,
b
,
c
,
in
[
5
],
7
);
FF
(
c
,
d
,
a
,
b
,
in
[
6
],
11
);
FF
(
b
,
c
,
d
,
a
,
in
[
7
],
19
);
FF
(
a
,
b
,
c
,
d
,
in
[
8
],
3
);
FF
(
d
,
a
,
b
,
c
,
in
[
9
],
7
);
FF
(
c
,
d
,
a
,
b
,
in
[
10
],
11
);
FF
(
b
,
c
,
d
,
a
,
in
[
11
],
19
);
FF
(
a
,
b
,
c
,
d
,
in
[
12
],
3
);
FF
(
d
,
a
,
b
,
c
,
in
[
13
],
7
);
FF
(
c
,
d
,
a
,
b
,
in
[
14
],
11
);
FF
(
b
,
c
,
d
,
a
,
in
[
15
],
19
);
GG
(
a
,
b
,
c
,
d
,
in
[
0
],
3
);
GG
(
d
,
a
,
b
,
c
,
in
[
4
],
5
);
GG
(
c
,
d
,
a
,
b
,
in
[
8
],
9
);
GG
(
b
,
c
,
d
,
a
,
in
[
12
],
13
);
GG
(
a
,
b
,
c
,
d
,
in
[
1
],
3
);
GG
(
d
,
a
,
b
,
c
,
in
[
5
],
5
);
GG
(
c
,
d
,
a
,
b
,
in
[
9
],
9
);
GG
(
b
,
c
,
d
,
a
,
in
[
13
],
13
);
GG
(
a
,
b
,
c
,
d
,
in
[
2
],
3
);
GG
(
d
,
a
,
b
,
c
,
in
[
6
],
5
);
GG
(
c
,
d
,
a
,
b
,
in
[
10
],
9
);
GG
(
b
,
c
,
d
,
a
,
in
[
14
],
13
);
GG
(
a
,
b
,
c
,
d
,
in
[
3
],
3
);
GG
(
d
,
a
,
b
,
c
,
in
[
7
],
5
);
GG
(
c
,
d
,
a
,
b
,
in
[
11
],
9
);
GG
(
b
,
c
,
d
,
a
,
in
[
15
],
13
);
HH
(
a
,
b
,
c
,
d
,
in
[
0
],
3
);
HH
(
d
,
a
,
b
,
c
,
in
[
8
],
9
);
HH
(
c
,
d
,
a
,
b
,
in
[
4
],
11
);
HH
(
b
,
c
,
d
,
a
,
in
[
12
],
15
);
HH
(
a
,
b
,
c
,
d
,
in
[
2
],
3
);
HH
(
d
,
a
,
b
,
c
,
in
[
10
],
9
);
HH
(
c
,
d
,
a
,
b
,
in
[
6
],
11
);
HH
(
b
,
c
,
d
,
a
,
in
[
14
],
15
);
HH
(
a
,
b
,
c
,
d
,
in
[
1
],
3
);
HH
(
d
,
a
,
b
,
c
,
in
[
9
],
9
);
HH
(
c
,
d
,
a
,
b
,
in
[
5
],
11
);
HH
(
b
,
c
,
d
,
a
,
in
[
13
],
15
);
HH
(
a
,
b
,
c
,
d
,
in
[
3
],
3
);
HH
(
d
,
a
,
b
,
c
,
in
[
11
],
9
);
HH
(
c
,
d
,
a
,
b
,
in
[
7
],
11
);
HH
(
b
,
c
,
d
,
a
,
in
[
15
],
15
);
buf
[
0
]
+=
a
;
buf
[
1
]
+=
b
;
buf
[
2
]
+=
c
;
buf
[
3
]
+=
d
;
}
dlls/advapi32/crypt_md5.c
0 → 100644
View file @
b6aa6210
/*
* Copyright (C) 2001 Nikos Mavroyanopoulos
* Copyright (C) 2004 Hans Leidekker
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/*
* This code implements the MD5 message-digest algorithm.
* It is based on code in the public domain written by Colin
* Plumb in 1993. The algorithm is due to Ron Rivest.
*
* Equivalent code is available from RSA Data Security, Inc.
* This code has been tested against that, and is equivalent,
* except that you don't need to include two pages of legalese
* with every copy.
*
* To compute the message digest of a chunk of bytes, declare an
* MD5_CTX structure, pass it to MD5Init, call MD5Update as
* needed on buffers full of bytes, and then call MD5Final, which
* will fill a supplied 16-byte array with the digest.
*/
#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
typedef
struct
{
unsigned
int
i
[
2
];
unsigned
int
buf
[
4
];
unsigned
char
in
[
64
];
unsigned
char
digest
[
16
];
}
MD5_CTX
;
static
void
MD5Transform
(
unsigned
int
buf
[
4
],
const
unsigned
int
in
[
16
]
);
/*
* Note: this code is harmless on little-endian machines.
*/
static
void
byteReverse
(
unsigned
char
*
buf
,
unsigned
longs
)
{
unsigned
int
t
;
do
{
t
=
(
unsigned
int
)((
unsigned
)
buf
[
3
]
<<
8
|
buf
[
2
])
<<
16
|
((
unsigned
)
buf
[
1
]
<<
8
|
buf
[
0
]);
*
(
unsigned
int
*
)
buf
=
t
;
buf
+=
4
;
}
while
(
--
longs
);
}
/*
* Start MD5 accumulation. Set bit count to 0 and buffer to mysterious
* initialization constants.
*/
VOID
WINAPI
MD5Init
(
MD5_CTX
*
ctx
)
{
ctx
->
buf
[
0
]
=
0x67452301
;
ctx
->
buf
[
1
]
=
0xefcdab89
;
ctx
->
buf
[
2
]
=
0x98badcfe
;
ctx
->
buf
[
3
]
=
0x10325476
;
ctx
->
i
[
0
]
=
ctx
->
i
[
1
]
=
0
;
}
/*
* Update context to reflect the concatenation of another buffer full
* of bytes.
*/
VOID
WINAPI
MD5Update
(
MD5_CTX
*
ctx
,
const
unsigned
char
*
buf
,
unsigned
int
len
)
{
register
unsigned
int
t
;
/* Update bitcount */
t
=
ctx
->
i
[
0
];
if
((
ctx
->
i
[
0
]
=
t
+
((
unsigned
int
)
len
<<
3
))
<
t
)
ctx
->
i
[
1
]
++
;
/* Carry from low to high */
ctx
->
i
[
1
]
+=
len
>>
29
;
t
=
(
t
>>
3
)
&
0x3f
;
/* Handle any leading odd-sized chunks */
if
(
t
)
{
unsigned
char
*
p
=
(
unsigned
char
*
)
ctx
->
in
+
t
;
t
=
64
-
t
;
if
(
len
<
t
)
{
memcpy
(
p
,
buf
,
len
);
return
;
}
memcpy
(
p
,
buf
,
t
);
byteReverse
(
ctx
->
in
,
16
);
MD5Transform
(
ctx
->
buf
,
(
unsigned
int
*
)
ctx
->
in
);
buf
+=
t
;
len
-=
t
;
}
/* Process data in 64-byte chunks */
while
(
len
>=
64
)
{
memcpy
(
ctx
->
in
,
buf
,
64
);
byteReverse
(
ctx
->
in
,
16
);
MD5Transform
(
ctx
->
buf
,
(
unsigned
int
*
)
ctx
->
in
);
buf
+=
64
;
len
-=
64
;
}
/* Handle any remaining bytes of data. */
memcpy
(
ctx
->
in
,
buf
,
len
);
}
/*
* Final wrapup - pad to 64-byte boundary with the bit pattern
* 1 0* (64-bit count of bits processed, MSB-first)
*/
VOID
WINAPI
MD5Final
(
MD5_CTX
*
ctx
)
{
unsigned
int
count
;
unsigned
char
*
p
;
/* Compute number of bytes mod 64 */
count
=
(
ctx
->
i
[
0
]
>>
3
)
&
0x3F
;
/* Set the first char of padding to 0x80. This is safe since there is
always at least one byte free */
p
=
ctx
->
in
+
count
;
*
p
++
=
0x80
;
/* Bytes of padding needed to make 64 bytes */
count
=
64
-
1
-
count
;
/* Pad out to 56 mod 64 */
if
(
count
<
8
)
{
/* Two lots of padding: Pad the first block to 64 bytes */
memset
(
p
,
0
,
count
);
byteReverse
(
ctx
->
in
,
16
);
MD5Transform
(
ctx
->
buf
,
(
unsigned
int
*
)
ctx
->
in
);
/* Now fill the next block with 56 bytes */
memset
(
ctx
->
in
,
0
,
56
);
}
else
{
/* Pad block to 56 bytes */
memset
(
p
,
0
,
count
-
8
);
}
byteReverse
(
ctx
->
in
,
14
);
/* Append length in bits and transform */
((
unsigned
int
*
)
ctx
->
in
)[
14
]
=
ctx
->
i
[
0
];
((
unsigned
int
*
)
ctx
->
in
)[
15
]
=
ctx
->
i
[
1
];
MD5Transform
(
ctx
->
buf
,
(
unsigned
int
*
)
ctx
->
in
);
byteReverse
(
(
unsigned
char
*
)
ctx
->
buf
,
4
);
if
(
ctx
->
digest
!=
NULL
)
memcpy
(
ctx
->
digest
,
ctx
->
buf
,
16
);
memset
(
ctx
,
0
,
sizeof
(
ctx
)
);
/* In case it's sensitive */
}
/* The four core functions - F1 is optimized somewhat */
/* #define F1( x, y, z ) (x & y | ~x & z) */
#define F1( x, y, z ) (z ^ (x & (y ^ z)))
#define F2( x, y, z ) F1( z, x, y )
#define F3( x, y, z ) (x ^ y ^ z)
#define F4( x, y, z ) (y ^ (x | ~z))
/* This is the central step in the MD5 algorithm. */
#define MD5STEP( f, w, x, y, z, data, s ) \
( w += f( x, y, z ) + data, w = w << s | w >> (32 - s), w += x )
/*
* The core of the MD5 algorithm, this alters an existing MD5 hash to
* reflect the addition of 16 longwords of new data. MD5Update blocks
* the data and converts bytes into longwords for this routine.
*/
static
void
MD5Transform
(
unsigned
int
buf
[
4
],
const
unsigned
int
in
[
16
]
)
{
register
unsigned
int
a
,
b
,
c
,
d
;
a
=
buf
[
0
];
b
=
buf
[
1
];
c
=
buf
[
2
];
d
=
buf
[
3
];
MD5STEP
(
F1
,
a
,
b
,
c
,
d
,
in
[
0
]
+
0xd76aa478
,
7
);
MD5STEP
(
F1
,
d
,
a
,
b
,
c
,
in
[
1
]
+
0xe8c7b756
,
12
);
MD5STEP
(
F1
,
c
,
d
,
a
,
b
,
in
[
2
]
+
0x242070db
,
17
);
MD5STEP
(
F1
,
b
,
c
,
d
,
a
,
in
[
3
]
+
0xc1bdceee
,
22
);
MD5STEP
(
F1
,
a
,
b
,
c
,
d
,
in
[
4
]
+
0xf57c0faf
,
7
);
MD5STEP
(
F1
,
d
,
a
,
b
,
c
,
in
[
5
]
+
0x4787c62a
,
12
);
MD5STEP
(
F1
,
c
,
d
,
a
,
b
,
in
[
6
]
+
0xa8304613
,
17
);
MD5STEP
(
F1
,
b
,
c
,
d
,
a
,
in
[
7
]
+
0xfd469501
,
22
);
MD5STEP
(
F1
,
a
,
b
,
c
,
d
,
in
[
8
]
+
0x698098d8
,
7
);
MD5STEP
(
F1
,
d
,
a
,
b
,
c
,
in
[
9
]
+
0x8b44f7af
,
12
);
MD5STEP
(
F1
,
c
,
d
,
a
,
b
,
in
[
10
]
+
0xffff5bb1
,
17
);
MD5STEP
(
F1
,
b
,
c
,
d
,
a
,
in
[
11
]
+
0x895cd7be
,
22
);
MD5STEP
(
F1
,
a
,
b
,
c
,
d
,
in
[
12
]
+
0x6b901122
,
7
);
MD5STEP
(
F1
,
d
,
a
,
b
,
c
,
in
[
13
]
+
0xfd987193
,
12
);
MD5STEP
(
F1
,
c
,
d
,
a
,
b
,
in
[
14
]
+
0xa679438e
,
17
);
MD5STEP
(
F1
,
b
,
c
,
d
,
a
,
in
[
15
]
+
0x49b40821
,
22
);
MD5STEP
(
F2
,
a
,
b
,
c
,
d
,
in
[
1
]
+
0xf61e2562
,
5
);
MD5STEP
(
F2
,
d
,
a
,
b
,
c
,
in
[
6
]
+
0xc040b340
,
9
);
MD5STEP
(
F2
,
c
,
d
,
a
,
b
,
in
[
11
]
+
0x265e5a51
,
14
);
MD5STEP
(
F2
,
b
,
c
,
d
,
a
,
in
[
0
]
+
0xe9b6c7aa
,
20
);
MD5STEP
(
F2
,
a
,
b
,
c
,
d
,
in
[
5
]
+
0xd62f105d
,
5
);
MD5STEP
(
F2
,
d
,
a
,
b
,
c
,
in
[
10
]
+
0x02441453
,
9
);
MD5STEP
(
F2
,
c
,
d
,
a
,
b
,
in
[
15
]
+
0xd8a1e681
,
14
);
MD5STEP
(
F2
,
b
,
c
,
d
,
a
,
in
[
4
]
+
0xe7d3fbc8
,
20
);
MD5STEP
(
F2
,
a
,
b
,
c
,
d
,
in
[
9
]
+
0x21e1cde6
,
5
);
MD5STEP
(
F2
,
d
,
a
,
b
,
c
,
in
[
14
]
+
0xc33707d6
,
9
);
MD5STEP
(
F2
,
c
,
d
,
a
,
b
,
in
[
3
]
+
0xf4d50d87
,
14
);
MD5STEP
(
F2
,
b
,
c
,
d
,
a
,
in
[
8
]
+
0x455a14ed
,
20
);
MD5STEP
(
F2
,
a
,
b
,
c
,
d
,
in
[
13
]
+
0xa9e3e905
,
5
);
MD5STEP
(
F2
,
d
,
a
,
b
,
c
,
in
[
2
]
+
0xfcefa3f8
,
9
);
MD5STEP
(
F2
,
c
,
d
,
a
,
b
,
in
[
7
]
+
0x676f02d9
,
14
);
MD5STEP
(
F2
,
b
,
c
,
d
,
a
,
in
[
12
]
+
0x8d2a4c8a
,
20
);
MD5STEP
(
F3
,
a
,
b
,
c
,
d
,
in
[
5
]
+
0xfffa3942
,
4
);
MD5STEP
(
F3
,
d
,
a
,
b
,
c
,
in
[
8
]
+
0x8771f681
,
11
);
MD5STEP
(
F3
,
c
,
d
,
a
,
b
,
in
[
11
]
+
0x6d9d6122
,
16
);
MD5STEP
(
F3
,
b
,
c
,
d
,
a
,
in
[
14
]
+
0xfde5380c
,
23
);
MD5STEP
(
F3
,
a
,
b
,
c
,
d
,
in
[
1
]
+
0xa4beea44
,
4
);
MD5STEP
(
F3
,
d
,
a
,
b
,
c
,
in
[
4
]
+
0x4bdecfa9
,
11
);
MD5STEP
(
F3
,
c
,
d
,
a
,
b
,
in
[
7
]
+
0xf6bb4b60
,
16
);
MD5STEP
(
F3
,
b
,
c
,
d
,
a
,
in
[
10
]
+
0xbebfbc70
,
23
);
MD5STEP
(
F3
,
a
,
b
,
c
,
d
,
in
[
13
]
+
0x289b7ec6
,
4
);
MD5STEP
(
F3
,
d
,
a
,
b
,
c
,
in
[
0
]
+
0xeaa127fa
,
11
);
MD5STEP
(
F3
,
c
,
d
,
a
,
b
,
in
[
3
]
+
0xd4ef3085
,
16
);
MD5STEP
(
F3
,
b
,
c
,
d
,
a
,
in
[
6
]
+
0x04881d05
,
23
);
MD5STEP
(
F3
,
a
,
b
,
c
,
d
,
in
[
9
]
+
0xd9d4d039
,
4
);
MD5STEP
(
F3
,
d
,
a
,
b
,
c
,
in
[
12
]
+
0xe6db99e5
,
11
);
MD5STEP
(
F3
,
c
,
d
,
a
,
b
,
in
[
15
]
+
0x1fa27cf8
,
16
);
MD5STEP
(
F3
,
b
,
c
,
d
,
a
,
in
[
2
]
+
0xc4ac5665
,
23
);
MD5STEP
(
F4
,
a
,
b
,
c
,
d
,
in
[
0
]
+
0xf4292244
,
6
);
MD5STEP
(
F4
,
d
,
a
,
b
,
c
,
in
[
7
]
+
0x432aff97
,
10
);
MD5STEP
(
F4
,
c
,
d
,
a
,
b
,
in
[
14
]
+
0xab9423a7
,
15
);
MD5STEP
(
F4
,
b
,
c
,
d
,
a
,
in
[
5
]
+
0xfc93a039
,
21
);
MD5STEP
(
F4
,
a
,
b
,
c
,
d
,
in
[
12
]
+
0x655b59c3
,
6
);
MD5STEP
(
F4
,
d
,
a
,
b
,
c
,
in
[
3
]
+
0x8f0ccc92
,
10
);
MD5STEP
(
F4
,
c
,
d
,
a
,
b
,
in
[
10
]
+
0xffeff47d
,
15
);
MD5STEP
(
F4
,
b
,
c
,
d
,
a
,
in
[
1
]
+
0x85845dd1
,
21
);
MD5STEP
(
F4
,
a
,
b
,
c
,
d
,
in
[
8
]
+
0x6fa87e4f
,
6
);
MD5STEP
(
F4
,
d
,
a
,
b
,
c
,
in
[
15
]
+
0xfe2ce6e0
,
10
);
MD5STEP
(
F4
,
c
,
d
,
a
,
b
,
in
[
6
]
+
0xa3014314
,
15
);
MD5STEP
(
F4
,
b
,
c
,
d
,
a
,
in
[
13
]
+
0x4e0811a1
,
21
);
MD5STEP
(
F4
,
a
,
b
,
c
,
d
,
in
[
4
]
+
0xf7537e82
,
6
);
MD5STEP
(
F4
,
d
,
a
,
b
,
c
,
in
[
11
]
+
0xbd3af235
,
10
);
MD5STEP
(
F4
,
c
,
d
,
a
,
b
,
in
[
2
]
+
0x2ad7d2bb
,
15
);
MD5STEP
(
F4
,
b
,
c
,
d
,
a
,
in
[
9
]
+
0xeb86d391
,
21
);
buf
[
0
]
+=
a
;
buf
[
1
]
+=
b
;
buf
[
2
]
+=
c
;
buf
[
3
]
+=
d
;
}
dlls/advapi32/tests/.cvsignore
View file @
b6aa6210
Makefile
crypt.ok
crypt_lmhash.ok
crypt_md4.ok
crypt_md5.ok
crypt_sha.ok
registry.ok
security.ok
...
...
dlls/advapi32/tests/Makefile.in
View file @
b6aa6210
...
...
@@ -8,6 +8,8 @@ IMPORTS = advapi32 kernel32
CTESTS
=
\
crypt.c
\
crypt_lmhash.c
\
crypt_md4.c
\
crypt_md5.c
\
crypt_sha.c
\
registry.c
\
security.c
...
...
dlls/advapi32/tests/crypt_md4.c
0 → 100644
View file @
b6aa6210
/*
* Unit tests for MD4 functions
*
* Copyright 2004 Hans Leidekker
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <stdio.h>
#include "wine/test.h"
#include "windef.h"
#include "winbase.h"
#include "winerror.h"
typedef
struct
{
unsigned
int
buf
[
4
];
unsigned
int
i
[
2
];
unsigned
char
in
[
64
];
unsigned
char
digest
[
16
];
}
MD4_CTX
;
typedef
VOID
(
WINAPI
*
fnMD4Init
)(
MD4_CTX
*
ctx
);
typedef
VOID
(
WINAPI
*
fnMD4Update
)(
MD4_CTX
*
ctx
,
const
unsigned
char
*
src
,
const
int
len
);
typedef
VOID
(
WINAPI
*
fnMD4Final
)(
MD4_CTX
*
ctx
);
fnMD4Init
pMD4Init
;
fnMD4Update
pMD4Update
;
fnMD4Final
pMD4Final
;
#define ctxcmp( a, b ) memcmp( (char*)a, (char*)b, FIELD_OFFSET( MD4_CTX, in ) )
void
test_md4_ctx
()
{
static
unsigned
char
message
[]
=
"In our Life there's If"
"In our beliefs there's Lie"
"In our business there is Sin"
"In our bodies, there is Die"
;
int
size
=
strlen
(
message
);
HMODULE
module
;
MD4_CTX
ctx
;
MD4_CTX
ctx_initialized
=
{
{
0x67452301
,
0xefcdab89
,
0x98badcfe
,
0x10325476
},
{
0
,
0
}
};
MD4_CTX
ctx_update1
=
{
{
0x5e592ef7
,
0xbdcb1567
,
0x2b626d17
,
0x7d1198bd
},
{
0x00000338
,
0
}
};
MD4_CTX
ctx_update2
=
{
{
0x05dcfd65
,
0xb3711c0d
,
0x9e3369c2
,
0x903ead11
},
{
0x00000670
,
0
}
};
unsigned
char
expect
[
16
]
=
{
0x5f
,
0xd3
,
0x9b
,
0x29
,
0x47
,
0x53
,
0x47
,
0xaf
,
0xa5
,
0xba
,
0x0c
,
0x05
,
0xff
,
0xc0
,
0xc7
,
0xda
};
if
(
!
(
module
=
LoadLibrary
(
"advapi32.dll"
)))
return
;
pMD4Init
=
(
fnMD4Init
)
GetProcAddress
(
module
,
"MD4Init"
);
pMD4Update
=
(
fnMD4Update
)
GetProcAddress
(
module
,
"MD4Update"
);
pMD4Final
=
(
fnMD4Final
)
GetProcAddress
(
module
,
"MD4Final"
);
if
(
!
pMD4Init
||
!
pMD4Update
||
!
pMD4Final
)
goto
out
;
memset
(
&
ctx
,
0
,
sizeof
(
ctx
)
);
pMD4Init
(
&
ctx
);
ok
(
!
ctxcmp
(
&
ctx
,
&
ctx_initialized
),
"invalid initialization
\n
"
);
pMD4Update
(
&
ctx
,
message
,
size
);
ok
(
!
ctxcmp
(
&
ctx
,
&
ctx_update1
),
"update doesn't work correctly
\n
"
);
pMD4Update
(
&
ctx
,
message
,
size
);
ok
(
!
ctxcmp
(
&
ctx
,
&
ctx_update2
),
"update doesn't work correctly
\n
"
);
pMD4Final
(
&
ctx
);
ok
(
ctxcmp
(
&
ctx
,
&
ctx_initialized
),
"context has changed
\n
"
);
ok
(
!
memcmp
(
ctx
.
digest
,
expect
,
sizeof
(
expect
)
),
"incorrect result
\n
"
);
out:
FreeLibrary
(
module
);
}
START_TEST
(
crypt_md4
)
{
test_md4_ctx
();
}
dlls/advapi32/tests/crypt_md5.c
0 → 100644
View file @
b6aa6210
/*
* Unit tests for MD5 functions
*
* Copyright 2004 Hans Leidekker
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <stdio.h>
#include "wine/test.h"
#include "windef.h"
#include "winbase.h"
#include "winerror.h"
typedef
struct
{
unsigned
int
i
[
2
];
unsigned
int
buf
[
4
];
unsigned
char
in
[
64
];
unsigned
char
digest
[
16
];
}
MD5_CTX
;
typedef
VOID
(
WINAPI
*
fnMD5Init
)(
MD5_CTX
*
ctx
);
typedef
VOID
(
WINAPI
*
fnMD5Update
)(
MD5_CTX
*
ctx
,
const
unsigned
char
*
src
,
const
int
len
);
typedef
VOID
(
WINAPI
*
fnMD5Final
)(
MD5_CTX
*
ctx
);
fnMD5Init
pMD5Init
;
fnMD5Update
pMD5Update
;
fnMD5Final
pMD5Final
;
#define ctxcmp( a, b ) memcmp( (char*)a, (char*)b, FIELD_OFFSET( MD5_CTX, in ) )
void
test_md5_ctx
()
{
static
unsigned
char
message
[]
=
"In our Life there's If"
"In our beliefs there's Lie"
"In our business there is Sin"
"In our bodies, there is Die"
;
int
size
=
strlen
(
message
);
HMODULE
module
;
MD5_CTX
ctx
;
MD5_CTX
ctx_initialized
=
{
{
0
,
0
},
{
0x67452301
,
0xefcdab89
,
0x98badcfe
,
0x10325476
}
};
MD5_CTX
ctx_update1
=
{
{
0x00000338
,
0
},
{
0x068cb64d
,
0xb7a05790
,
0x426979ee
,
0xed67e221
}
};
MD5_CTX
ctx_update2
=
{
{
0x00000670
,
0
},
{
0x2f7afe58
,
0xcc3e9315
,
0x709c465c
,
0xbf6414c8
}
};
unsigned
char
expect
[
16
]
=
{
0x43
,
0x03
,
0xdd
,
0x8c
,
0x60
,
0xd9
,
0x3a
,
0x22
,
0x0b
,
0x28
,
0xd0
,
0xb2
,
0x65
,
0x93
,
0xd0
,
0x36
};
if
(
!
(
module
=
LoadLibrary
(
"advapi32.dll"
)))
return
;
pMD5Init
=
(
fnMD5Init
)
GetProcAddress
(
module
,
"MD5Init"
);
pMD5Update
=
(
fnMD5Update
)
GetProcAddress
(
module
,
"MD5Update"
);
pMD5Final
=
(
fnMD5Final
)
GetProcAddress
(
module
,
"MD5Final"
);
if
(
!
pMD5Init
||
!
pMD5Update
||
!
pMD5Final
)
goto
out
;
memset
(
&
ctx
,
0
,
sizeof
(
ctx
)
);
pMD5Init
(
&
ctx
);
ok
(
!
ctxcmp
(
&
ctx
,
&
ctx_initialized
),
"invalid initialization
\n
"
);
pMD5Update
(
&
ctx
,
message
,
size
);
ok
(
!
ctxcmp
(
&
ctx
,
&
ctx_update1
),
"update doesn't work correctly
\n
"
);
pMD5Update
(
&
ctx
,
message
,
size
);
ok
(
!
ctxcmp
(
&
ctx
,
&
ctx_update2
),
"update doesn't work correctly
\n
"
);
pMD5Final
(
&
ctx
);
ok
(
ctxcmp
(
&
ctx
,
&
ctx_initialized
),
"context has changed
\n
"
);
ok
(
!
memcmp
(
ctx
.
digest
,
expect
,
sizeof
(
expect
)
),
"incorrect result
\n
"
);
out:
FreeLibrary
(
module
);
}
START_TEST
(
crypt_md5
)
{
test_md5_ctx
();
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment