OSDN Git Service

Update OpenSSL to 1.1.0.
[ffftp/ffftp.git] / socketwrapper.c
index c216206..a513d7b 100644 (file)
 \r
 // FTPS対応\r
 \r
-typedef void (__cdecl* _SSL_load_error_strings)();\r
-typedef int (__cdecl* _SSL_library_init)();\r
-typedef SSL_METHOD* (__cdecl* _SSLv23_method)();\r
+// OpenSSL 1.1.0対応\r
+//typedef void (__cdecl* _SSL_load_error_strings)();\r
+//typedef int (__cdecl* _SSL_library_init)();\r
+typedef int (__cdecl* _OPENSSL_init_ssl)(uint64_t, OPENSSL_INIT_SETTINGS*);\r
+// OpenSSL 1.1.0対応\r
+//typedef SSL_METHOD* (__cdecl* _SSLv23_method)();\r
+typedef SSL_METHOD* (__cdecl* _TLS_method)();\r
 typedef SSL* (__cdecl* _SSL_new)(SSL_CTX*);\r
 typedef void (__cdecl* _SSL_free)(SSL*);\r
 typedef long (__cdecl* _SSL_ctrl)(SSL*, int, long, void*);\r
@@ -70,9 +74,13 @@ typedef unsigned char* (__cdecl* _SHA256)(const unsigned char*, size_t, unsigned
 typedef unsigned char* (__cdecl* _SHA384)(const unsigned char*, size_t, unsigned char*);\r
 typedef unsigned char* (__cdecl* _SHA512)(const unsigned char*, size_t, unsigned char*);\r
 \r
-_SSL_load_error_strings p_SSL_load_error_strings;\r
-_SSL_library_init p_SSL_library_init;\r
-_SSLv23_method p_SSLv23_method;\r
+// OpenSSL 1.1.0対応\r
+//_SSL_load_error_strings p_SSL_load_error_strings;\r
+//_SSL_library_init p_SSL_library_init;\r
+_OPENSSL_init_ssl p_OPENSSL_init_ssl;\r
+// OpenSSL 1.1.0対応\r
+//_SSLv23_method p_SSLv23_method;\r
+_TLS_method p_TLS_method;\r
 _SSL_new p_SSL_new;\r
 _SSL_free p_SSL_free;\r
 _SSL_ctrl p_SSL_ctrl;\r
@@ -153,15 +161,15 @@ BOOL LoadOpenSSL()
 #ifdef ENABLE_PROCESS_PROTECTION\r
        // 同梱するOpenSSLのバージョンに合わせてSHA1ハッシュ値を変更すること\r
 #if defined(_M_IX86)\r
-       // ssleay32.dll 1.0.2h\r
-       RegisterTrustedModuleSHA1Hash("\x7E\x40\xBE\x64\xDC\x67\xAC\x54\x5E\x27\x62\x02\x80\x41\x08\x0A\xA7\xB4\xD9\x3C");\r
-       // libeay32.dll 1.0.2h\r
-       RegisterTrustedModuleSHA1Hash("\xE5\x35\x05\x1B\xEC\x5A\xF1\xC9\xE5\xAA\x3D\x85\x3B\xCE\xBB\x9A\xCA\xC8\x6A\x17");\r
+       // ssleay32.dll 1.1.0h\r
+       RegisterTrustedModuleSHA1Hash("\x36\xFA\x98\xA1\xBE\x62\xB2\x07\xF0\xB8\x20\xE0\xB2\x86\x41\x68\xE2\x8D\x8B\x0F");\r
+       // libeay32.dll 1.1.0h\r
+       RegisterTrustedModuleSHA1Hash("\x2C\xD5\x65\x74\x2A\x8D\xE3\x22\x8F\xFE\xA9\x6D\xB5\x9D\x34\xFB\xBB\x23\x73\xFD");\r
 #elif defined(_M_AMD64)\r
-       // ssleay32.dll 1.0.2h\r
-       RegisterTrustedModuleSHA1Hash("\x32\x2E\x8A\x61\xCF\x64\xC0\xB4\xFF\x98\x93\x88\x8D\x16\xC8\x7B\xA3\x4D\x90\x78");\r
-       // libeay32.dll 1.0.2h\r
-       RegisterTrustedModuleSHA1Hash("\x27\x5F\x56\x01\xDC\xE5\xBA\xF8\x3E\x0E\x32\xB6\xCF\x6C\xF4\x1A\x08\x1E\x49\x16");\r
+       // ssleay32.dll 1.1.0h\r
+       RegisterTrustedModuleSHA1Hash("\x1A\xA5\x43\xC8\x19\x85\x16\xC0\x19\x04\x8D\xD2\xE0\xF3\xF8\x73\x4D\x9E\xA0\x2F");\r
+       // libeay32.dll 1.1.0h\r
+       RegisterTrustedModuleSHA1Hash("\xC4\x4E\xD4\x5B\xEF\xA6\xC0\x9F\x6A\x45\xEC\x26\xDE\xEC\x3A\xC0\x24\x00\xF1\x66");\r
 #endif\r
 #endif\r
        g_hOpenSSL = LoadLibrary("ssleay32.dll");\r
@@ -169,9 +177,13 @@ BOOL LoadOpenSSL()
 //     if(!g_hOpenSSL)\r
 //             g_hOpenSSL = LoadLibrary("libssl32.dll");\r
        if(!g_hOpenSSL\r
-               || !(p_SSL_load_error_strings = (_SSL_load_error_strings)GetProcAddress(g_hOpenSSL, "SSL_load_error_strings"))\r
-               || !(p_SSL_library_init = (_SSL_library_init)GetProcAddress(g_hOpenSSL, "SSL_library_init"))\r
-               || !(p_SSLv23_method = (_SSLv23_method)GetProcAddress(g_hOpenSSL, "SSLv23_method"))\r
+               // OpenSSL 1.1.0対応\r
+//             || !(p_SSL_load_error_strings = (_SSL_load_error_strings)GetProcAddress(g_hOpenSSL, "SSL_load_error_strings"))\r
+//             || !(p_SSL_library_init = (_SSL_library_init)GetProcAddress(g_hOpenSSL, "SSL_library_init"))\r
+               || !(p_OPENSSL_init_ssl = (_OPENSSL_init_ssl)GetProcAddress(g_hOpenSSL, "OPENSSL_init_ssl"))\r
+               // OpenSSL 1.1.0対応\r
+//             || !(p_SSLv23_method = (_SSLv23_method)GetProcAddress(g_hOpenSSL, "SSLv23_method"))\r
+               || !(p_TLS_method = (_TLS_method)GetProcAddress(g_hOpenSSL, "TLS_method"))\r
                || !(p_SSL_new = (_SSL_new)GetProcAddress(g_hOpenSSL, "SSL_new"))\r
                || !(p_SSL_free = (_SSL_free)GetProcAddress(g_hOpenSSL, "SSL_free"))\r
                || !(p_SSL_ctrl = (_SSL_ctrl)GetProcAddress(g_hOpenSSL, "SSL_ctrl"))\r
@@ -238,8 +250,11 @@ BOOL LoadOpenSSL()
                return FALSE;\r
        }\r
        InitializeCriticalSection(&g_OpenSSLLock);\r
-       p_SSL_load_error_strings();\r
-       p_SSL_library_init();\r
+       // OpenSSL 1.1.0対応\r
+//     p_SSL_load_error_strings();\r
+       p_OPENSSL_init_ssl(OPENSSL_INIT_LOAD_CRYPTO_STRINGS | OPENSSL_INIT_LOAD_SSL_STRINGS, NULL);\r
+//     p_SSL_library_init();\r
+       p_OPENSSL_init_ssl(0, NULL);\r
        SetSSLTimeoutCallback(60000, DefaultSSLTimeoutCallback);\r
        SetSSLConfirmCallback(DefaultSSLConfirmCallback);\r
        g_bOpenSSLLoaded = TRUE;\r
@@ -265,10 +280,15 @@ void FreeOpenSSL()
        if(g_pOpenSSLCTX)\r
                p_SSL_CTX_free(g_pOpenSSLCTX);\r
        g_pOpenSSLCTX = NULL;\r
-       FreeLibrary(g_hOpenSSL);\r
-       g_hOpenSSL = NULL;\r
+       // OpenSSL 1.1.0対応\r
+//     FreeLibrary(g_hOpenSSL);\r
+//     g_hOpenSSL = NULL;\r
+//     FreeLibrary(g_hOpenSSLCommon);\r
+//     g_hOpenSSLCommon = NULL;\r
        FreeLibrary(g_hOpenSSLCommon);\r
        g_hOpenSSLCommon = NULL;\r
+       FreeLibrary(g_hOpenSSL);\r
+       g_hOpenSSL = NULL;\r
        LeaveCriticalSection(&g_OpenSSLLock);\r
        DeleteCriticalSection(&g_OpenSSLLock);\r
        g_bOpenSSLLoaded = FALSE;\r
@@ -412,7 +432,9 @@ BOOL SetSSLRootCertificate(const void* pData, DWORD Length)
        EnterCriticalSection(&g_OpenSSLLock);\r
        if(!g_pOpenSSLCTX)\r
        {\r
-               g_pOpenSSLCTX = p_SSL_CTX_new(p_SSLv23_method());\r
+               // OpenSSL 1.1.0対応\r
+//             g_pOpenSSLCTX = p_SSL_CTX_new(p_SSLv23_method());\r
+               g_pOpenSSLCTX = p_SSL_CTX_new(p_TLS_method());\r
                p_SSL_CTX_ctrl(g_pOpenSSLCTX, SSL_CTRL_MODE, SSL_MODE_ENABLE_PARTIAL_WRITE | SSL_MODE_AUTO_RETRY, NULL);\r
        }\r
        if(g_pOpenSSLCTX)\r
@@ -678,7 +700,9 @@ BOOL AttachSSL(SOCKET s, SOCKET parent, BOOL* pbAborted, BOOL bStrengthen)
        EnterCriticalSection(&g_OpenSSLLock);\r
        if(!g_pOpenSSLCTX)\r
        {\r
-               g_pOpenSSLCTX = p_SSL_CTX_new(p_SSLv23_method());\r
+               // OpenSSL 1.1.0対応\r
+//             g_pOpenSSLCTX = p_SSL_CTX_new(p_SSLv23_method());\r
+               g_pOpenSSLCTX = p_SSL_CTX_new(p_TLS_method());\r
                p_SSL_CTX_ctrl(g_pOpenSSLCTX, SSL_CTRL_MODE, SSL_MODE_ENABLE_PARTIAL_WRITE | SSL_MODE_AUTO_RETRY, NULL);\r
        }\r
        if(g_pOpenSSLCTX)\r
@@ -705,7 +729,8 @@ BOOL AttachSSL(SOCKET s, SOCKET parent, BOOL* pbAborted, BOOL bStrengthen)
                                        {\r
                                                if(bStrengthen)\r
                                                {\r
-                                                       p_SSL_ctrl(*ppSSL, SSL_CTRL_OPTIONS, SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3, NULL);\r
+                                                       // OpenSSL 1.1.0対応\r
+//                                                     p_SSL_ctrl(*ppSSL, SSL_CTRL_OPTIONS, SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3, NULL);\r
                                                        p_SSL_set_cipher_list(*ppSSL, "HIGH");\r
                                                }\r
                                        }\r