From 25221b7d2afb70f82eb3805330fd39a6f6708049 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Tue, 26 Jun 2012 23:41:55 +0000 Subject: mk: removed all LIST_INTERFACE, MI_INTERFACE & UTF8_INTERFACE instances. all related functions moved to mir_core. git-svn-id: http://svn.miranda-ng.org/main/trunk@644 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- src/core/miranda.cpp | 112 ++++++++++--- src/miranda32_10.vcxproj | 11 +- src/miranda32_10.vcxproj.filters | 9 +- src/modules/langpack/lpservices.cpp | 2 + src/modules/utils/md5.cpp | 318 ++---------------------------------- src/modules/utils/sha1.cpp | 175 -------------------- src/modules/utils/timezones.cpp | 2 +- src/modules/utils/utils.cpp | 3 +- 8 files changed, 116 insertions(+), 516 deletions(-) delete mode 100644 src/modules/utils/sha1.cpp (limited to 'src') diff --git a/src/core/miranda.cpp b/src/core/miranda.cpp index baf786a8d3..8985d2a333 100644 --- a/src/core/miranda.cpp +++ b/src/core/miranda.cpp @@ -488,6 +488,31 @@ static INT_PTR RemoveWait(WPARAM wParam, LPARAM) return 0; } +/////////////////////////////////////////////////////////////////////////////// + +struct MM_INTERFACE +{ + size_t cbSize; + void* (*mmi_malloc) (size_t); + void* (*mmi_realloc) (void*, size_t); + void (*mmi_free) (void*); + + void* (*mmi_calloc) (size_t); + char* (*mmi_strdup) (const char *src); + wchar_t* (*mmi_wstrdup) (const wchar_t *src); + int (*mir_snprintf) (char *buffer, size_t count, const char* fmt, ...); + int (*mir_sntprintf) (TCHAR *buffer, size_t count, const TCHAR* fmt, ...); + int (*mir_vsnprintf) (char *buffer, size_t count, const char* fmt, va_list va); + int (*mir_vsntprintf) (TCHAR *buffer, size_t count, const TCHAR* fmt, va_list va); + + wchar_t* (*mir_a2u_cp) (const char* src, int codepage); + wchar_t* (*mir_a2u)(const char* src); + char* (*mir_u2a_cp)(const wchar_t* src, int codepage); + char* (*mir_u2a)(const wchar_t* src); +}; + +#define MS_SYSTEM_GET_MMI "Miranda/System/GetMMI" + INT_PTR GetMemoryManagerInterface(WPARAM, LPARAM lParam) { struct MM_INTERFACE *mmi = (struct MM_INTERFACE*) lParam; @@ -529,6 +554,30 @@ INT_PTR GetMemoryManagerInterface(WPARAM, LPARAM lParam) return 0; } +/////////////////////////////////////////////////////////////////////////////// + +struct LIST_INTERFACE +{ + size_t cbSize; + + SortedList* (*List_Create)(int, int); + void (*List_Destroy)(SortedList*); + + void* (*List_Find)(SortedList*, void*); + int (*List_GetIndex)(SortedList*, void*, int*); + int (*List_Insert)(SortedList*, void*, int); + int (*List_Remove)(SortedList*, int); + int (*List_IndexOf)(SortedList*, void*); + + int (*List_InsertPtr)(SortedList* list, void* p); + int (*List_RemovePtr)(SortedList* list, void* p); + + void (*List_Copy)(SortedList* src, SortedList* dst, size_t); + void (*List_ObjCopy)(SortedList* src, SortedList* dst, size_t); +}; + +#define MS_SYSTEM_GET_LI "Miranda/System/GetLI" + INT_PTR GetListInterface(WPARAM, LPARAM lParam) { struct LIST_INTERFACE *li = (struct LIST_INTERFACE*) lParam; @@ -539,42 +588,65 @@ INT_PTR GetListInterface(WPARAM, LPARAM lParam) li->List_ObjCopy = List_ObjCopy; li->List_InsertPtr = List_InsertPtr; li->List_RemovePtr = List_RemovePtr; - li->List_Create = List_Create; - li->List_Destroy = List_Destroy; - li->List_Find = List_Find; - li->List_GetIndex = List_GetIndex; - li->List_Insert = List_Insert; - li->List_Remove = List_Remove; - li->List_IndexOf = List_IndexOf; + li->List_Create = List_Create; + li->List_Destroy = List_Destroy; + li->List_Find = List_Find; + li->List_GetIndex = List_GetIndex; + li->List_Insert = List_Insert; + li->List_Remove = List_Remove; + li->List_IndexOf = List_IndexOf; return 0; } +/////////////////////////////////////////////////////////////////////////////// + +struct UTF8_INTERFACE +{ + size_t cbSize; + + // decodes utf8 and places the result back into the same buffer. + // if the second parameter is present, the additional wchar_t* string gets allocated, + // and filled with the decoded utf8 content without any information loss. + // this string should be freed using mir_free() + char* (*utf8_decode)(char* str, wchar_t** ucs2); + char* (*utf8_decodecp)(char* str, int codepage, wchar_t** ucs2); + + // encodes an ANSI string into a utf8 format using the current langpack code page, + // or CP_ACP, if lanpack is missing + // the resulting string should be freed using mir_free + char* (*utf8_encode)(const char* src); + char* (*utf8_encodecp)(const char* src, int codepage); + + // encodes an WCHAR string into a utf8 format + // the resulting string should be freed using mir_free + char* (*utf8_encodeW)(const wchar_t* src); + + // decodes utf8 and returns the result as wchar_t* that should be freed using mir_free() + // the input buffer remains unchanged + wchar_t* (*utf8_decodeW)(const char* str); + + // returns the predicted length of the utf-8 string + int (*utf8_lenW)(const wchar_t* src); +}; + +#define MS_SYSTEM_GET_UTFI "Miranda/System/GetUTFI" + INT_PTR GetUtfInterface(WPARAM, LPARAM lParam) { struct UTF8_INTERFACE *utfi = (struct UTF8_INTERFACE*) lParam; if (utfi == NULL) return 1; - switch(utfi->cbSize) { - case UTF8_INTERFACE_SIZEOF_V1: - case UTF8_INTERFACE_SIZEOF_V2: - case sizeof(struct UTF8_INTERFACE): - break; - - default: + if (utfi->cbSize != sizeof(UTF8_INTERFACE)) return 1; - } utfi->utf8_decode = Utf8Decode; utfi->utf8_decodecp = Utf8DecodeCP; utfi->utf8_encode = Utf8Encode; utfi->utf8_encodecp = Utf8EncodeCP; utfi->utf8_encodeW = Utf8EncodeW; - if (utfi->cbSize > UTF8_INTERFACE_SIZEOF_V1) - utfi->utf8_decodeW = Utf8DecodeW; - if (utfi->cbSize > UTF8_INTERFACE_SIZEOF_V2) - utfi->utf8_lenW = Ucs2toUtf8Len; - + utfi->utf8_decodeW = Utf8DecodeW; + utfi->utf8_lenW = Ucs2toUtf8Len; return 0; } diff --git a/src/miranda32_10.vcxproj b/src/miranda32_10.vcxproj index bcb5e08e44..09a3493e91 100644 --- a/src/miranda32_10.vcxproj +++ b/src/miranda32_10.vcxproj @@ -99,7 +99,7 @@ true false $(IntDir)$(TargetName).lib - $(SolutionDir)\lib + $(SolutionDir)\lib $(SolutionDir)\lib @@ -136,7 +136,7 @@ true false $(IntDir)$(TargetName).lib - $(SolutionDir)\lib + $(SolutionDir)\lib $(SolutionDir)\lib @@ -168,7 +168,7 @@ Windows false $(IntDir)$(TargetName).lib - $(SolutionDir)\lib + $(SolutionDir)\lib $(SolutionDir)\lib @@ -200,7 +200,7 @@ Windows false $(IntDir)$(TargetName).lib - $(SolutionDir)\lib + $(SolutionDir)\lib $(SolutionDir)\lib @@ -537,9 +537,6 @@ ..\..\core\commonheaders.h - - ..\..\core\commonheaders.h - ..\..\core\commonheaders.h diff --git a/src/miranda32_10.vcxproj.filters b/src/miranda32_10.vcxproj.filters index ce44b856ae..ee80ca5714 100644 --- a/src/miranda32_10.vcxproj.filters +++ b/src/miranda32_10.vcxproj.filters @@ -515,9 +515,6 @@ Modules\utils - - Modules\utils - Modules\utils @@ -527,9 +524,6 @@ Modules\utils - - Modules\utils - Modules\utils @@ -680,6 +674,9 @@ Modules\utils + + Modules\utils + diff --git a/src/modules/langpack/lpservices.cpp b/src/modules/langpack/lpservices.cpp index af4262783c..b346a6a277 100644 --- a/src/modules/langpack/lpservices.cpp +++ b/src/modules/langpack/lpservices.cpp @@ -90,6 +90,8 @@ INT_PTR srvReloadLangpack(WPARAM wParam, LPARAM lParam) int LoadLangPackModule(void) { + ReloadLangpack(NULL); + CreateServiceFunction(MS_LANGPACK_TRANSLATESTRING, srvTranslateString); CreateServiceFunction(MS_LANGPACK_TRANSLATEMENU, srvTranslateMenu); CreateServiceFunction(MS_LANGPACK_GETCODEPAGE, srvGetDefaultCodePage); diff --git a/src/modules/utils/md5.cpp b/src/modules/utils/md5.cpp index 94cd69bbe2..1ab0184e3e 100644 --- a/src/modules/utils/md5.cpp +++ b/src/modules/utils/md5.cpp @@ -5,7 +5,7 @@ warranty. In no event will the authors be held liable for any damages arising from the use of this software. - Permission is granted to anyone to use this software for any purpose, + Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: @@ -55,308 +55,14 @@ #include "..\..\core\commonheaders.h" - -#define T_MASK ((mir_md5_word_t)~0) -#define T1 /* 0xd76aa478 */ (T_MASK ^ 0x28955b87) -#define T2 /* 0xe8c7b756 */ (T_MASK ^ 0x173848a9) -#define T3 0x242070db -#define T4 /* 0xc1bdceee */ (T_MASK ^ 0x3e423111) -#define T5 /* 0xf57c0faf */ (T_MASK ^ 0x0a83f050) -#define T6 0x4787c62a -#define T7 /* 0xa8304613 */ (T_MASK ^ 0x57cfb9ec) -#define T8 /* 0xfd469501 */ (T_MASK ^ 0x02b96afe) -#define T9 0x698098d8 -#define T10 /* 0x8b44f7af */ (T_MASK ^ 0x74bb0850) -#define T11 /* 0xffff5bb1 */ (T_MASK ^ 0x0000a44e) -#define T12 /* 0x895cd7be */ (T_MASK ^ 0x76a32841) -#define T13 0x6b901122 -#define T14 /* 0xfd987193 */ (T_MASK ^ 0x02678e6c) -#define T15 /* 0xa679438e */ (T_MASK ^ 0x5986bc71) -#define T16 0x49b40821 -#define T17 /* 0xf61e2562 */ (T_MASK ^ 0x09e1da9d) -#define T18 /* 0xc040b340 */ (T_MASK ^ 0x3fbf4cbf) -#define T19 0x265e5a51 -#define T20 /* 0xe9b6c7aa */ (T_MASK ^ 0x16493855) -#define T21 /* 0xd62f105d */ (T_MASK ^ 0x29d0efa2) -#define T22 0x02441453 -#define T23 /* 0xd8a1e681 */ (T_MASK ^ 0x275e197e) -#define T24 /* 0xe7d3fbc8 */ (T_MASK ^ 0x182c0437) -#define T25 0x21e1cde6 -#define T26 /* 0xc33707d6 */ (T_MASK ^ 0x3cc8f829) -#define T27 /* 0xf4d50d87 */ (T_MASK ^ 0x0b2af278) -#define T28 0x455a14ed -#define T29 /* 0xa9e3e905 */ (T_MASK ^ 0x561c16fa) -#define T30 /* 0xfcefa3f8 */ (T_MASK ^ 0x03105c07) -#define T31 0x676f02d9 -#define T32 /* 0x8d2a4c8a */ (T_MASK ^ 0x72d5b375) -#define T33 /* 0xfffa3942 */ (T_MASK ^ 0x0005c6bd) -#define T34 /* 0x8771f681 */ (T_MASK ^ 0x788e097e) -#define T35 0x6d9d6122 -#define T36 /* 0xfde5380c */ (T_MASK ^ 0x021ac7f3) -#define T37 /* 0xa4beea44 */ (T_MASK ^ 0x5b4115bb) -#define T38 0x4bdecfa9 -#define T39 /* 0xf6bb4b60 */ (T_MASK ^ 0x0944b49f) -#define T40 /* 0xbebfbc70 */ (T_MASK ^ 0x4140438f) -#define T41 0x289b7ec6 -#define T42 /* 0xeaa127fa */ (T_MASK ^ 0x155ed805) -#define T43 /* 0xd4ef3085 */ (T_MASK ^ 0x2b10cf7a) -#define T44 0x04881d05 -#define T45 /* 0xd9d4d039 */ (T_MASK ^ 0x262b2fc6) -#define T46 /* 0xe6db99e5 */ (T_MASK ^ 0x1924661a) -#define T47 0x1fa27cf8 -#define T48 /* 0xc4ac5665 */ (T_MASK ^ 0x3b53a99a) -#define T49 /* 0xf4292244 */ (T_MASK ^ 0x0bd6ddbb) -#define T50 0x432aff97 -#define T51 /* 0xab9423a7 */ (T_MASK ^ 0x546bdc58) -#define T52 /* 0xfc93a039 */ (T_MASK ^ 0x036c5fc6) -#define T53 0x655b59c3 -#define T54 /* 0x8f0ccc92 */ (T_MASK ^ 0x70f3336d) -#define T55 /* 0xffeff47d */ (T_MASK ^ 0x00100b82) -#define T56 /* 0x85845dd1 */ (T_MASK ^ 0x7a7ba22e) -#define T57 0x6fa87e4f -#define T58 /* 0xfe2ce6e0 */ (T_MASK ^ 0x01d3191f) -#define T59 /* 0xa3014314 */ (T_MASK ^ 0x5cfebceb) -#define T60 0x4e0811a1 -#define T61 /* 0xf7537e82 */ (T_MASK ^ 0x08ac817d) -#define T62 /* 0xbd3af235 */ (T_MASK ^ 0x42c50dca) -#define T63 0x2ad7d2bb -#define T64 /* 0xeb86d391 */ (T_MASK ^ 0x14792c6e) - -//gfd* -static void md5_process(mir_md5_state_t *pms, const mir_md5_byte_t *data /*[64]*/) -{ - mir_md5_word_t - a = pms->abcd[0], b = pms->abcd[1], - c = pms->abcd[2], d = pms->abcd[3]; - mir_md5_word_t t; - /* Define storage for little-endian or both types of CPUs. */ - mir_md5_word_t xbuf[16]; - const mir_md5_word_t *X; - - { - /* - * Determine dynamically whether this is a big-endian or - * little-endian machine, since we can use a more efficient - * algorithm on the latter. - */ - static const int w = 1; - - if (*((const mir_md5_byte_t *)&w)) /* dynamic little-endian */ - { - /* - * On little-endian machines, we can process properly aligned - * data without copying it. - */ - if ( !((data - (const mir_md5_byte_t *)0) & 3)) { - /* data are properly aligned */ - X = (const mir_md5_word_t *)data; - } else { - /* not aligned */ - memcpy(xbuf, data, 64); - X = xbuf; - } - } - else /* dynamic big-endian */ - { - /* - * On big-endian machines, we must arrange the bytes in the - * right order. - */ - const mir_md5_byte_t *xp = data; - int i; - - X = xbuf; /* (dynamic only) */ - for (i = 0; i < 16; ++i, xp += 4) - xbuf[i] = xp[0] + (xp[1] << 8) + (xp[2] << 16) + (xp[3] << 24); - } - } - -#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32 - (n)))) - - /* Round 1. */ - /* Let [abcd k s i] denote the operation - a = b + ((a + F(b, c, d) + X[k] + T[i]) <<< s). */ -#define F(x, y, z) (((x) & (y)) | (~(x) & (z))) -#define SET1(a, b, c, d, k, s, Ti)\ - t = a + F(b, c, d) + X[k] + Ti;\ - a = ROTATE_LEFT(t, s) + b - /* Do the following 16 operations. */ - SET1(a, b, c, d, 0, 7, T1); - SET1(d, a, b, c, 1, 12, T2); - SET1(c, d, a, b, 2, 17, T3); - SET1(b, c, d, a, 3, 22, T4); - SET1(a, b, c, d, 4, 7, T5); - SET1(d, a, b, c, 5, 12, T6); - SET1(c, d, a, b, 6, 17, T7); - SET1(b, c, d, a, 7, 22, T8); - SET1(a, b, c, d, 8, 7, T9); - SET1(d, a, b, c, 9, 12, T10); - SET1(c, d, a, b, 10, 17, T11); - SET1(b, c, d, a, 11, 22, T12); - SET1(a, b, c, d, 12, 7, T13); - SET1(d, a, b, c, 13, 12, T14); - SET1(c, d, a, b, 14, 17, T15); - SET1(b, c, d, a, 15, 22, T16); - - /* Round 2. */ - /* Let [abcd k s i] denote the operation - a = b + ((a + G(b, c, d) + X[k] + T[i]) <<< s). */ -#define G(x, y, z) (((x) & (z)) | ((y) & ~(z))) -#define SET2(a, b, c, d, k, s, Ti)\ - t = a + G(b, c, d) + X[k] + Ti;\ - a = ROTATE_LEFT(t, s) + b - /* Do the following 16 operations. */ - SET2(a, b, c, d, 1, 5, T17); - SET2(d, a, b, c, 6, 9, T18); - SET2(c, d, a, b, 11, 14, T19); - SET2(b, c, d, a, 0, 20, T20); - SET2(a, b, c, d, 5, 5, T21); - SET2(d, a, b, c, 10, 9, T22); - SET2(c, d, a, b, 15, 14, T23); - SET2(b, c, d, a, 4, 20, T24); - SET2(a, b, c, d, 9, 5, T25); - SET2(d, a, b, c, 14, 9, T26); - SET2(c, d, a, b, 3, 14, T27); - SET2(b, c, d, a, 8, 20, T28); - SET2(a, b, c, d, 13, 5, T29); - SET2(d, a, b, c, 2, 9, T30); - SET2(c, d, a, b, 7, 14, T31); - SET2(b, c, d, a, 12, 20, T32); - - /* Round 3. */ - /* Let [abcd k s t] denote the operation - a = b + ((a + H(b, c, d) + X[k] + T[i]) <<< s). */ -#define H(x, y, z) ((x) ^ (y) ^ (z)) -#define SET3(a, b, c, d, k, s, Ti)\ - t = a + H(b, c, d) + X[k] + Ti;\ - a = ROTATE_LEFT(t, s) + b - /* Do the following 16 operations. */ - SET3(a, b, c, d, 5, 4, T33); - SET3(d, a, b, c, 8, 11, T34); - SET3(c, d, a, b, 11, 16, T35); - SET3(b, c, d, a, 14, 23, T36); - SET3(a, b, c, d, 1, 4, T37); - SET3(d, a, b, c, 4, 11, T38); - SET3(c, d, a, b, 7, 16, T39); - SET3(b, c, d, a, 10, 23, T40); - SET3(a, b, c, d, 13, 4, T41); - SET3(d, a, b, c, 0, 11, T42); - SET3(c, d, a, b, 3, 16, T43); - SET3(b, c, d, a, 6, 23, T44); - SET3(a, b, c, d, 9, 4, T45); - SET3(d, a, b, c, 12, 11, T46); - SET3(c, d, a, b, 15, 16, T47); - SET3(b, c, d, a, 2, 23, T48); - - /* Round 4. */ - /* Let [abcd k s t] denote the operation - a = b + ((a + I(b, c, d) + X[k] + T[i]) <<< s). */ -#define I(x, y, z) ((y) ^ ((x) | ~(z))) -#define SET4(a, b, c, d, k, s, Ti)\ - t = a + I(b, c, d) + X[k] + Ti;\ - a = ROTATE_LEFT(t, s) + b - /* Do the following 16 operations. */ - SET4(a, b, c, d, 0, 6, T49); - SET4(d, a, b, c, 7, 10, T50); - SET4(c, d, a, b, 14, 15, T51); - SET4(b, c, d, a, 5, 21, T52); - SET4(a, b, c, d, 12, 6, T53); - SET4(d, a, b, c, 3, 10, T54); - SET4(c, d, a, b, 10, 15, T55); - SET4(b, c, d, a, 1, 21, T56); - SET4(a, b, c, d, 8, 6, T57); - SET4(d, a, b, c, 15, 10, T58); - SET4(c, d, a, b, 6, 15, T59); - SET4(b, c, d, a, 13, 21, T60); - SET4(a, b, c, d, 4, 6, T61); - SET4(d, a, b, c, 11, 10, T62); - SET4(c, d, a, b, 2, 15, T63); - SET4(b, c, d, a, 9, 21, T64); - - /* Then perform the following additions. (That is increment each - of the four registers by the value it had before this block - was started.) */ - pms->abcd[0] += a; - pms->abcd[1] += b; - pms->abcd[2] += c; - pms->abcd[3] += d; -} - -void md5_init(mir_md5_state_t *pms) +struct MD5_INTERFACE { - pms->count[0] = pms->count[1] = 0; - pms->abcd[0] = 0x67452301; - pms->abcd[1] = /*0xefcdab89*/ T_MASK ^ 0x10325476; - pms->abcd[2] = /*0x98badcfe*/ T_MASK ^ 0x67452301; - pms->abcd[3] = 0x10325476; -} - -void md5_append(mir_md5_state_t *pms, const mir_md5_byte_t *data, int nbytes) -{ - const mir_md5_byte_t *p = data; - int left = nbytes; - int offset = (pms->count[0] >> 3) & 63; - mir_md5_word_t nbits = (mir_md5_word_t)(nbytes << 3); - - if (nbytes <= 0) - return; - - /* Update the message length. */ - pms->count[1] += nbytes >> 29; - pms->count[0] += nbits; - if (pms->count[0] < nbits) - pms->count[1]++; - - /* Process an initial partial block. */ - if (offset) { - int copy = (offset + nbytes > 64 ? 64 - offset : nbytes); - - memcpy(pms->buf + offset, p, copy); - if (offset + copy < 64) - return; - p += copy; - left -= copy; - md5_process(pms, pms->buf); - } - - /* Process full blocks. */ - for (; left >= 64; p += 64, left -= 64) - md5_process(pms, p); - - /* Process a final partial block. */ - if (left) - memcpy(pms->buf, p, left); -} - -void md5_finish(mir_md5_state_t *pms, mir_md5_byte_t digest[16]) -{ - static const mir_md5_byte_t pad[64] = { - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }; - mir_md5_byte_t data[8]; - int i; - - /* Save the length before padding. */ - for (i = 0; i < 8; ++i) - data[i] = (mir_md5_byte_t)(pms->count[i >> 2] >> ((i & 3) << 3)); - /* Pad to 56 bytes mod 64. */ - md5_append(pms, pad, ((55 - (pms->count[0] >> 3)) & 63) + 1); - /* Append the length. */ - md5_append(pms, data, 8); - for (i = 0; i < 16; ++i) - digest[i] = (mir_md5_byte_t)(pms->abcd[i >> 2] >> ((i & 3) << 3)); -} - -void md5_hash_string(const mir_md5_byte_t *data, int len, mir_md5_byte_t digest[16]) -{ - mir_md5_state_t state; - md5_init(&state); - md5_append(&state, data, len); - md5_finish(&state, digest); -} + int cbSize; + void (*md5_init) (mir_md5_state_t *pms); + void (*md5_append) (mir_md5_state_t *pms, const mir_md5_byte_t *data, int nbytes); + void (*md5_finish) (mir_md5_state_t *pms, mir_md5_byte_t digest[16]); + void (*md5_hash) (const mir_md5_byte_t *data, int len, mir_md5_byte_t digest[16]); +}; INT_PTR GetMD5Interface(WPARAM, LPARAM lParam) { @@ -366,9 +72,9 @@ INT_PTR GetMD5Interface(WPARAM, LPARAM lParam) if (md5i->cbSize != sizeof(struct MD5_INTERFACE)) return 1; - md5i->md5_init = md5_init; - md5i->md5_append = md5_append; - md5i->md5_finish = md5_finish; - md5i->md5_hash = md5_hash_string; + md5i->md5_init = mir_md5_init; + md5i->md5_append = mir_md5_append; + md5i->md5_finish = mir_md5_finish; + md5i->md5_hash = mir_md5_hash; return 0; } diff --git a/src/modules/utils/sha1.cpp b/src/modules/utils/sha1.cpp deleted file mode 100644 index 2fede54718..0000000000 --- a/src/modules/utils/sha1.cpp +++ /dev/null @@ -1,175 +0,0 @@ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is SHA 180-1 Reference Implementation (Compact version). - * - * The Initial Developer of the Original Code is - * Paul Kocher of Cryptography Research. - * Portions created by the Initial Developer are Copyright (C) 1995-9 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#include "..\..\core\commonheaders.h" - -static void shaHashBlock(mir_sha1_ctx *ctx); - -void shaInit(mir_sha1_ctx *ctx) { - int i; - - ctx->lenW = 0; - ctx->sizeHi = ctx->sizeLo = 0; - - /* Initialize H with the magic constants (see FIPS180 for constants) - */ - ctx->H[0] = 0x67452301L; - ctx->H[1] = 0xefcdab89L; - ctx->H[2] = 0x98badcfeL; - ctx->H[3] = 0x10325476L; - ctx->H[4] = 0xc3d2e1f0L; - - for (i = 0; i < 80; i++) - ctx->W[i] = 0; -} - - -void shaUpdate(mir_sha1_ctx *ctx, mir_sha1_byte_t *dataIn, int len) { - int i; - - /* Read the data into W and process blocks as they get full - */ - for (i = 0; i < len; i++) { - ctx->W[ctx->lenW / 4] <<= 8; - ctx->W[ctx->lenW / 4] |= (unsigned long)dataIn[i]; - if ((++ctx->lenW) % 64 == 0) { - shaHashBlock(ctx); - ctx->lenW = 0; - } - ctx->sizeLo += 8; - ctx->sizeHi += (ctx->sizeLo < 8); - } -} - - -void shaFinal(mir_sha1_ctx *ctx, mir_sha1_byte_t hashout[20]) { - unsigned char pad0x80 = 0x80; - unsigned char pad0x00 = 0x00; - unsigned char padlen[8]; - int i; - - /* Pad with a binary 1 (e.g. 0x80), then zeroes, then length - */ - padlen[0] = (unsigned char)((ctx->sizeHi >> 24) & 255); - padlen[1] = (unsigned char)((ctx->sizeHi >> 16) & 255); - padlen[2] = (unsigned char)((ctx->sizeHi >> 8) & 255); - padlen[3] = (unsigned char)((ctx->sizeHi >> 0) & 255); - padlen[4] = (unsigned char)((ctx->sizeLo >> 24) & 255); - padlen[5] = (unsigned char)((ctx->sizeLo >> 16) & 255); - padlen[6] = (unsigned char)((ctx->sizeLo >> 8) & 255); - padlen[7] = (unsigned char)((ctx->sizeLo >> 0) & 255); - shaUpdate(ctx, &pad0x80, 1); - while (ctx->lenW != 56) - shaUpdate(ctx, &pad0x00, 1); - shaUpdate(ctx, padlen, 8); - - /* Output hash - */ - for (i = 0; i < 20; i++) { - hashout[i] = (unsigned char)(ctx->H[i / 4] >> 24); - ctx->H[i / 4] <<= 8; - } - - /* - * Re-initialize the context (also zeroizes contents) - */ - shaInit(ctx); -} - - -void shaBlock(mir_sha1_byte_t *dataIn, int len, mir_sha1_byte_t hashout[20]) { - mir_sha1_ctx ctx; - - shaInit(&ctx); - shaUpdate(&ctx, dataIn, len); - shaFinal(&ctx, hashout); -} - - -#define SHA_ROTL(X, n) (((X) << (n)) | ((X) >> (32-(n)))) - -static void shaHashBlock(mir_sha1_ctx *ctx) { - int t; - unsigned long A, B, C, D, E, TEMP; - - for (t = 16; t <= 79; t++) - ctx->W[t] = - SHA_ROTL(ctx->W[t-3] ^ ctx->W[t-8] ^ ctx->W[t-14] ^ ctx->W[t-16], 1); - - A = ctx->H[0]; - B = ctx->H[1]; - C = ctx->H[2]; - D = ctx->H[3]; - E = ctx->H[4]; - - for (t = 0; t <= 19; t++) { - TEMP = SHA_ROTL(A, 5) + (((C^D)&B)^D) + E + ctx->W[t] + 0x5a827999L; - E = D; D = C; C = SHA_ROTL(B, 30); B = A; A = TEMP; - } - for (t = 20; t <= 39; t++) { - TEMP = SHA_ROTL(A, 5) + (B^C^D) + E + ctx->W[t] + 0x6ed9eba1L; - E = D; D = C; C = SHA_ROTL(B, 30); B = A; A = TEMP; - } - for (t = 40; t <= 59; t++) { - TEMP = SHA_ROTL(A, 5) + ((B&C)|(D&(B|C))) + E + ctx->W[t] + 0x8f1bbcdcL; - E = D; D = C; C = SHA_ROTL(B, 30); B = A; A = TEMP; - } - for (t = 60; t <= 79; t++) { - TEMP = SHA_ROTL(A, 5) + (B^C^D) + E + ctx->W[t] + 0xca62c1d6L; - E = D; D = C; C = SHA_ROTL(B, 30); B = A; A = TEMP; - } - - ctx->H[0] += A; - ctx->H[1] += B; - ctx->H[2] += C; - ctx->H[3] += D; - ctx->H[4] += E; -} - -INT_PTR GetSHA1Interface(WPARAM, LPARAM lParam) -{ - struct SHA1_INTERFACE *sha1i = (struct SHA1_INTERFACE*) lParam; - if (sha1i == NULL) - return 1; - if (sha1i->cbSize != sizeof(struct SHA1_INTERFACE)) - return 1; - - sha1i->sha1_init = shaInit; - sha1i->sha1_append = shaUpdate; - sha1i->sha1_finish = shaFinal; - sha1i->sha1_hash = shaBlock; - return 0; -} diff --git a/src/modules/utils/timezones.cpp b/src/modules/utils/timezones.cpp index d90a303e49..bf83dfeb75 100644 --- a/src/modules/utils/timezones.cpp +++ b/src/modules/utils/timezones.cpp @@ -520,7 +520,7 @@ void GetLocalizedString(HKEY hSubKey, const TCHAR *szName, wchar_t *szBuf, DWORD } } -void RecalculateTime(void) +extern "C" __declspec(dllexport) void RecalculateTime(void) { GetTimeZoneInformation(&myInfo.myTZ.tzi); myInfo.timestamp = time(NULL); diff --git a/src/modules/utils/utils.cpp b/src/modules/utils/utils.cpp index 964e9a920f..3ed6446003 100644 --- a/src/modules/utils/utils.cpp +++ b/src/modules/utils/utils.cpp @@ -22,6 +22,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "..\..\core\commonheaders.h" +#define MS_SYSTEM_GET_MD5I "Miranda/System/GetMD5I" + INT_PTR ResizeDialog(WPARAM wParam, LPARAM lParam); int InitOpenUrl(void); int InitWindowList(void); @@ -475,7 +477,6 @@ int LoadUtilsModule(void) CreateServiceFunction(MS_UTILS_GETRANDOM, GenerateRandom); CreateServiceFunction(MS_SYSTEM_RESTART, RestartMiranda); CreateServiceFunction(MS_SYSTEM_GET_MD5I, GetMD5Interface); - CreateServiceFunction(MS_SYSTEM_GET_SHA1I, GetSHA1Interface); InitOpenUrl(); InitWindowList(); InitHyperlink(); -- cgit v1.2.3