OSDN Git Service

Change UI to enter a new master password.
[ffftp/ffftp.git] / socketwrapper.c
index acbb8a0..c4c7603 100644 (file)
@@ -1,15 +1,16 @@
-// socketwrapper.cpp
+// socketwrapper.c
 // Copyright (C) 2011 Suguru Kawamoto
-// \83\\83P\83b\83g\83\89\83b\83p\81[
-// socket\8aÖ\98A\8aÖ\90\94\82ðOpenSSL\97p\82É\92u\8a·
-// \83R\83\93\83p\83C\83\8b\82É\82ÍOpenSSL\82Ì\83w\83b\83_\81[\83t\83@\83C\83\8b\82ª\95K\97v
-// \8eÀ\8ds\82É\82ÍOpenSSL\82ÌDLL\82ª\95K\97v
+// ソケットラッパー
+// socket関連関数をOpenSSL用に置換
+// コンパイルにはOpenSSLのヘッダーファイルが必要
+// 実行にはOpenSSLのDLLが必要
 
 #include <windows.h>
 #include <mmsystem.h>
 #include <openssl/ssl.h>
 
 #include "socketwrapper.h"
+#include "protectprocess.h"
 
 typedef void (__cdecl* _SSL_load_error_strings)();
 typedef int (__cdecl* _SSL_library_init)();
@@ -45,7 +46,7 @@ _SSL_peek pSSL_peek;
 _SSL_read pSSL_read;
 _SSL_get_error pSSL_get_error;
 
-#define MAX_SSL_SOCKET 16
+#define MAX_SSL_SOCKET 64
 
 BOOL g_bOpenSSLLoaded;
 HMODULE g_hOpenSSL;
@@ -65,6 +66,14 @@ BOOL LoadOpenSSL()
 {
        if(g_bOpenSSLLoaded)
                return FALSE;
+#ifdef ENABLE_PROCESS_PROTECTION
+       // 同梱するOpenSSLのバージョンに合わせてSHA1ハッシュ値を変更すること
+       // ssleay32.dll 1.0.0e
+       // libssl32.dll 1.0.0e
+       RegisterTrustedModuleSHA1Hash("\x4E\xB7\xA0\x22\x14\x4B\x58\x6D\xBC\xF5\x21\x0D\x96\x78\x0D\x79\x7D\x66\xB2\xB0");
+       // libeay32.dll 1.0.0e
+       RegisterTrustedModuleSHA1Hash("\x01\x32\x7A\xAE\x69\x26\xE6\x58\xC7\x63\x22\x1E\x53\x5A\x78\xBC\x61\xC7\xB5\xC1");
+#endif
        g_hOpenSSL = LoadLibrary("ssleay32.dll");
        if(!g_hOpenSSL)
                g_hOpenSSL = LoadLibrary("libssl32.dll");
@@ -185,7 +194,7 @@ BOOL AttachSSL(SOCKET s)
                                if(pSSL_set_fd(*ppSSL, s) != 0)
                                {
                                        r = TRUE;
-                                       // SSL\82Ì\83l\83S\83V\83G\81[\83V\83\87\83\93\82É\82Í\8e\9e\8aÔ\82ª\82©\82©\82é\8fê\8d\87\82ª\82 \82é
+                                       // SSLのネゴシエーションには時間がかかる場合がある
                                        while(pSSL_connect(*ppSSL) != 1)
                                        {
                                                LeaveCriticalSection(&g_OpenSSLLock);