-// 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)();
_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;
{
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");
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);