Module: wine Branch: refs/heads/master Commit: b4899f0712aba3e1eaae26abb7626cbe3cab8ea1 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=b4899f0712aba3e1eaae26ab...
Author: Mike McCormack mike@codeweavers.com Date: Sun May 21 17:27:50 2006 +0900
advapi32: Implement and test SystemFunction010.
---
dlls/advapi32/advapi32.spec | 2 +- dlls/advapi32/crypt_md4.c | 27 +++++++++++++++++++++++++++ dlls/advapi32/tests/crypt_md4.c | 21 +++++++++++++++++++++ 3 files changed, 49 insertions(+), 1 deletions(-)
diff --git a/dlls/advapi32/advapi32.spec b/dlls/advapi32/advapi32.spec index 86a1b8d..becd80e 100644 --- a/dlls/advapi32/advapi32.spec +++ b/dlls/advapi32/advapi32.spec @@ -604,7 +604,7 @@ # @ stub StopTraceW @ stdcall SystemFunction007(ptr ptr) @ stdcall SystemFunction008(ptr ptr ptr) @ stdcall SystemFunction009(ptr ptr ptr) -@ stub SystemFunction010 +@ stdcall SystemFunction010(ptr ptr ptr) @ stub SystemFunction011 @ stub SystemFunction012 @ stub SystemFunction013 diff --git a/dlls/advapi32/crypt_md4.c b/dlls/advapi32/crypt_md4.c index 2c2318f..f782ca0 100644 --- a/dlls/advapi32/crypt_md4.c +++ b/dlls/advapi32/crypt_md4.c @@ -296,3 +296,30 @@ NTSTATUS WINAPI SystemFunction007(PUNICO
return STATUS_SUCCESS; } + +/****************************************************************************** + * SystemFunction010 [ADVAPI32.@] + * + * MD4 hashes 16 bytes of data + * + * PARAMS + * unknown [] seems to have no effect on the output + * data [I] pointer to data to hash (16 bytes) + * output [O] the md4 hash of the data (16 bytes) + * + * RETURNS + * Success: STATUS_SUCCESS + * Failure: STATUS_UNSUCCESSFUL + * + */ +NTSTATUS WINAPI SystemFunction010(LPVOID unknown, LPBYTE data, LPBYTE hash) +{ + MD4_CTX ctx; + + MD4Init( &ctx ); + MD4Update( &ctx, data, 0x10 ); + MD4Final( &ctx ); + memcpy( hash, ctx.digest, 0x10 ); + + return STATUS_SUCCESS; +} diff --git a/dlls/advapi32/tests/crypt_md4.c b/dlls/advapi32/tests/crypt_md4.c index 3dfa294..0c72d2b 100644 --- a/dlls/advapi32/tests/crypt_md4.c +++ b/dlls/advapi32/tests/crypt_md4.c @@ -40,11 +40,13 @@ typedef VOID (WINAPI *fnMD4Init)( MD4_CT typedef VOID (WINAPI *fnMD4Update)( MD4_CTX *ctx, const unsigned char *src, const int len ); typedef VOID (WINAPI *fnMD4Final)( MD4_CTX *ctx ); typedef int (WINAPI *fnSystemFunction007)(PUNICODE_STRING,LPBYTE); +typedef int (WINAPI *fnSystemFunction010)(LPVOID, const LPBYTE, LPBYTE);
fnMD4Init pMD4Init; fnMD4Update pMD4Update; fnMD4Final pMD4Final; fnSystemFunction007 pSystemFunction007; +fnSystemFunction010 pSystemFunction010;
#define ctxcmp( a, b ) memcmp( (char*)a, (char*)b, FIELD_OFFSET( MD4_CTX, in ) )
@@ -124,6 +126,21 @@ #endif ok(!memcmp(output, expected, sizeof expected), "response wrong\n"); }
+static void test_SystemFunction010(void) +{ + unsigned char expected[0x10] = { + 0x48, 0x7c, 0x3f, 0x5e, 0x2b, 0x0d, 0x6a, 0x79, + 0x32, 0x4e, 0xcd, 0xbe, 0x9c, 0x15, 0x16, 0x6f }; + unsigned char in[0x10], output[0x10]; + int r; + + memset(in, 0, sizeof in); + memset(output, 0, sizeof output); + r = pSystemFunction010(0, in, output); + ok( r == STATUS_SUCCESS, "wrong error code\n"); + ok( !memcmp(expected, output, sizeof output), "output wrong\n"); +} + START_TEST(crypt_md4) { HMODULE module; @@ -141,5 +158,9 @@ START_TEST(crypt_md4) if (pSystemFunction007) test_SystemFunction007();
+ pSystemFunction010 = (fnSystemFunction010)GetProcAddress( module, "SystemFunction010" ); + if (pSystemFunction010) + test_SystemFunction010(); + FreeLibrary( module ); }