From: <arn...@us...> - 2006-07-02 21:00:38
|
Revision: 624 Author: arnetheduck Date: 2006-07-02 13:59:53 -0700 (Sun, 02 Jul 2006) ViewCVS: http://svn.sourceforge.net/dcplusplus/?rev=624&view=rev Log Message: ----------- Playing with ssl options Modified Paths: -------------- dcplusplus/trunk/Compile.txt dcplusplus/trunk/DCPlusPlus.rc dcplusplus/trunk/Example.xml dcplusplus/trunk/changelog.txt dcplusplus/trunk/client/AdcHub.cpp dcplusplus/trunk/client/BufferedSocket.cpp dcplusplus/trunk/client/BufferedSocket.h dcplusplus/trunk/client/Client.cpp dcplusplus/trunk/client/Client.h dcplusplus/trunk/client/ConnectionManager.cpp dcplusplus/trunk/client/CryptoManager.cpp dcplusplus/trunk/client/CryptoManager.h dcplusplus/trunk/client/SSLSocket.cpp dcplusplus/trunk/client/SSLSocket.h dcplusplus/trunk/client/SettingsManager.cpp dcplusplus/trunk/client/SettingsManager.h dcplusplus/trunk/client/Socket.h dcplusplus/trunk/client/StringDefs.cpp dcplusplus/trunk/client/StringDefs.h dcplusplus/trunk/client/User.h dcplusplus/trunk/client/UserConnection.h dcplusplus/trunk/windows/AdvancedPage.cpp dcplusplus/trunk/windows/CertificatesPage.cpp dcplusplus/trunk/windows/CertificatesPage.h dcplusplus/trunk/windows/TransferView.cpp dcplusplus/trunk/windows/resource.h dcplusplus/trunk/yassl/include/yassl_int.hpp dcplusplus/trunk/yassl/src/yassl.cpp dcplusplus/trunk/yassl/taocrypt/taocrypt.vcproj dcplusplus/trunk/yassl/yassl.vcproj Modified: dcplusplus/trunk/Compile.txt =================================================================== --- dcplusplus/trunk/Compile.txt 2006-07-02 16:52:24 UTC (rev 623) +++ dcplusplus/trunk/Compile.txt 2006-07-02 20:59:53 UTC (rev 624) @@ -4,7 +4,6 @@ 1) Download the source and STLPort from the DC++ download site. Unpack the DC++ source. Unpack the STLport source into the stlport directory. Download WTL from http://sf.net/projects/wtl. Unpack it to the wtl folder. - Download YaSSL from http://yassl.com/. Unpack it to the yassl folder. 2) You most probably have to update your Platform SDK, http://msdn.microsoft.com will tell you how. You have to do this if you get an error that "natupnp.h" is missing. Since all you need is this Modified: dcplusplus/trunk/DCPlusPlus.rc =================================================================== --- dcplusplus/trunk/DCPlusPlus.rc 2006-07-02 16:52:24 UTC (rev 623) +++ dcplusplus/trunk/DCPlusPlus.rc 2006-07-02 20:59:53 UTC (rev 624) @@ -681,17 +681,20 @@ CAPTION "Security Certificates" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - EDITTEXT IDC_SSL_PRIVATE_KEY_FILE,102,7,166,14,ES_AUTOHSCROLL - EDITTEXT IDC_SSL_CERTIFICATE_FILE,102,24,166,14,ES_AUTOHSCROLL - EDITTEXT IDC_SSL_TRUSTED_CERTIFICATES_PATH,102,42,166,14, + EDITTEXT IDC_TLS_PRIVATE_KEY_FILE,102,7,166,14,ES_AUTOHSCROLL + EDITTEXT IDC_TLS_CERTIFICATE_FILE,102,24,166,14,ES_AUTOHSCROLL + EDITTEXT IDC_TLS_TRUSTED_CERTIFICATES_PATH,102,42,166,14, ES_AUTOHSCROLL LTEXT "Private key file",IDC_STATIC,50,10,48,8 LTEXT "Own certificate file",IDC_STATIC,37,27,61,8 LTEXT "Trusted certificates path",IDC_STATIC,18,45,80,8 LTEXT "Under construction, restart dc++ to see effects...", - IDC_STATIC,7,90,163,8 + IDC_STATIC,7,186,163,8 LTEXT "Experimental feature, don't consider DC++ secure in any way", - IDC_STATIC,7,106,200,8 + IDC_STATIC,7,201,200,8 + CONTROL "",IDC_TLS_OPTIONS,"SysListView32",LVS_REPORT | + LVS_SINGLESEL | LVS_ALIGNLEFT | LVS_NOCOLUMNHEADER | + LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,15,72,243,90 END Modified: dcplusplus/trunk/Example.xml =================================================================== --- dcplusplus/trunk/Example.xml 2006-07-02 16:52:24 UTC (rev 623) +++ dcplusplus/trunk/Example.xml 2006-07-02 20:59:53 UTC (rev 624) @@ -40,6 +40,7 @@ <String Name="Browse">Browse...</String> <String Name="BrowseAccel">&Browse...</String> <String Name="BrowseFileList">Browse file list</String> + <String Name="CertificateNotTrusted">Certificate not trusted, unable to connect</String> <String Name="ChooseFolder">Choose folder</String> <String Name="Cid">CID</String> <String Name="Close">Close</String> @@ -47,6 +48,7 @@ <String Name="ClosingConnection">Closing connection...</String> <String Name="Compressed">Compressed</String> <String Name="CompressionError">Error during compression</String> + <String Name="CommandTooLong">Maximum command length exceeded</String> <String Name="Configure">&Configure</String> <String Name="Connect">&Connect</String> <String Name="ConnectFavuserHub">Connect to hub</String> @@ -301,6 +303,7 @@ <String Name="Offline">Offline</String> <String Name="Online">Online</String> <String Name="OnlyFreeSlots">Only users with free slots</String> + <String Name="OnlyTlsAllowed">Only TLS connections allowed</String> <String Name="OnlyTth">Only results with TTH root</String> <String Name="OnlyWhereOp">Only where I'm op</String> <String Name="Open">Open</String> @@ -369,6 +372,8 @@ <String Name="SettingsAdvanced3">Advanced\Experts only</String> <String Name="SettingsAdvancedResume">Advanced resume using TTH</String> <String Name="SettingsAdvancedSettings">Advanced settings</String> + <String Name="SettingsAllowUntrustedClients">Allow TLS connections to hubs without trusted certificate</String> + <String Name="SettingsAllowUntrustedHubs">Allow TLS connections to hubs without trusted certificate</String> <String Name="SettingsAntiFrag">Use antifragmentation method for downloads</String> <String Name="SettingsAppearance">Appearance</String> <String Name="SettingsAppearance2">Appearance\Colors and sounds</String> @@ -415,7 +420,7 @@ <String Name="SettingsDownloads">Downloads</String> <String Name="SettingsDownloadsMax">Maximum simultaneous downloads (0 = infinite)</String> <String Name="SettingsDownloadsSpeedPause">No new downloads if speed exceeds (KiB/s, 0 = disable)</String> - <String Name="SettingsExampleText">Donate €€€:s! (ok, dirty dollars are fine as well =) (see help menu)</String> + <String Name="SettingsExampleText">Donate €€€:s! (ok, dirty dollars are fine as well =) (see help menu)</String> <String Name="SettingsExternalIp">External / WAN IP</String> <String Name="SettingsFavShowJoins">Only show joins / parts for favorite users</String> <String Name="SettingsFavoriteDirsPage">Downloads\Favorites</String> @@ -524,7 +529,7 @@ <String Name="SettingsWindowsOptions">Window options</String> <String Name="SettingsWriteBuffer">Write buffer size</String> <String Name="SettingsAltSortOrder">Sort all downloads first</String> - <String Name="SettingsUseSsl">Use SSL when remote client supports it</String> + <String Name="SettingsUseTls">Use TLS when remote client supports it</String> <String Name="SfvInconsistency">CRC32 inconsistency (SFV-Check)</String> <String Name="Shared">Shared</String> <String Name="SharedFiles">Shared Files</String> Modified: dcplusplus/trunk/changelog.txt =================================================================== --- dcplusplus/trunk/changelog.txt 2006-07-02 16:52:24 UTC (rev 623) +++ dcplusplus/trunk/changelog.txt 2006-07-02 20:59:53 UTC (rev 624) @@ -30,6 +30,7 @@ * [bug 988] Only unique nicks diplayed in title bar * Added protection from hubs/clients sending junk data resulting in high memory usage / crash * Updated to yaSSL 1.3.7 +* Added a few TLS options; [U] in transfer status means untrusted TLS (encrypted but certificate not validated) -- 0.691 2006-06-03 -- * Links to bugzilla in html changelog Modified: dcplusplus/trunk/client/AdcHub.cpp =================================================================== --- dcplusplus/trunk/client/AdcHub.cpp 2006-07-02 16:52:24 UTC (rev 623) +++ dcplusplus/trunk/client/AdcHub.cpp 2006-07-02 20:59:53 UTC (rev 624) @@ -130,7 +130,7 @@ } if(u->getIdentity().supports(ADCS_FEATURE)) { - u->getUser()->setFlag(User::SSL); + u->getUser()->setFlag(User::TLS); } if(u->getUser() == getMyIdentity().getUser()) { @@ -218,13 +218,26 @@ if(c.getParameters().size() < 3) return; + const string& protocol = c.getParam(0); + const string& port = c.getParam(1); + + string token; + bool hasToken = c.getParam("TO", 2, token); + bool secure; - if(c.getParam(0) == CLIENT_PROTOCOL) { + if(protocol == CLIENT_PROTOCOL) { secure = false; - } else if(c.getParam(0) == SECURE_CLIENT_PROTOCOL) { + } else if(protocol == SECURE_CLIENT_PROTOCOL && CryptoManager::getInstance()->TLSOk()) { secure = true; } else { - send(AdcCommand(AdcCommand::SEV_FATAL, AdcCommand::ERROR_PROTOCOL_UNSUPPORTED, "Protocol unknown", AdcCommand::TYPE_DIRECT).setTo(c.getFrom())); + AdcCommand cmd(AdcCommand::SEV_FATAL, AdcCommand::ERROR_PROTOCOL_UNSUPPORTED, "Protocol unknown"); + cmd.setTo(c.getFrom()); + cmd.addParam("PR", protocol); + + if(hasToken) + cmd.addParam("TO", token); + + send(cmd); return; } @@ -233,22 +246,40 @@ return; } - string token; - c.getParam("TO", 2, token); - ConnectionManager::getInstance()->adcConnect(*u, (short)Util::toInt(c.getParameters()[1]), token, secure); + ConnectionManager::getInstance()->adcConnect(*u, (short)Util::toInt(port), token, secure); } void AdcHub::handle(AdcCommand::RCM, AdcCommand& c) throw() { + if(c.getParameters().empty()) { + return; + } if(!ClientManager::getInstance()->isActive()) return; OnlineUser* u = findUser(c.getFrom()); if(!u || u->getUser() == ClientManager::getInstance()->getMe()) return; - if(c.getParameters().empty() || (c.getParameters()[0] != CLIENT_PROTOCOL && c.getParameters()[0] != SECURE_CLIENT_PROTOCOL)) + + const string& protocol = c.getParam(0); + string token; + bool hasToken = c.getParam("TO", 1, token); + + bool secure; + if(protocol == CLIENT_PROTOCOL) { + secure = false; + } else if(protocol == SECURE_CLIENT_PROTOCOL && CryptoManager::getInstance()->TLSOk()) { + secure = true; + } else { + AdcCommand cmd(AdcCommand::SEV_FATAL, AdcCommand::ERROR_PROTOCOL_UNSUPPORTED, "Protocol unknown"); + cmd.setTo(c.getFrom()); + cmd.addParam("PR", protocol); + + if(hasToken) + cmd.addParam("TO", token); + + send(cmd); return; - string token; - c.getParam("TO", 1, token); - connect(*u, token, c.getParameters()[0] == SECURE_CLIENT_PROTOCOL); + } + connect(*u, token, secure); } void AdcHub::handle(AdcCommand::CMD, AdcCommand& c) throw() { @@ -312,7 +343,7 @@ if(!u) return; - // @todo Check for invalid protocol and unset SSL if necessary + // @todo Check for invalid protocol and unset TLS if necessary fire(ClientListener::Message(), this, *u, c.getParam(1)); } @@ -337,7 +368,7 @@ void AdcHub::connect(const OnlineUser& user) { u_int32_t r = Util::rand(); - connect(user, Util::toString(r), BOOLSETTING(USE_SSL) && user.getUser()->isSet(User::SSL)); + connect(user, Util::toString(r), CryptoManager::getInstance()->TLSOk() && user.getUser()->isSet(User::TLS)); } void AdcHub::connect(const OnlineUser& user, string const& token, bool secure) { @@ -472,7 +503,7 @@ } string su; - if(CryptoManager::getInstance()->hasCerts()) { + if(CryptoManager::getInstance()->TLSOk()) { su += ADCS_FEATURE + ","; } Modified: dcplusplus/trunk/client/BufferedSocket.cpp =================================================================== --- dcplusplus/trunk/client/BufferedSocket.cpp 2006-07-02 16:52:24 UTC (rev 623) +++ dcplusplus/trunk/client/BufferedSocket.cpp 2006-07-02 20:59:53 UTC (rev 624) @@ -255,7 +255,7 @@ } } - if(mode == MODE_LINE && line.size() > SETTING(MAX_COMMAND_LENGTH)) { + if(mode == MODE_LINE && line.size() > static_cast<size_t>(SETTING(MAX_COMMAND_LENGTH))) { throw SocketException(STRING(COMMAND_TOO_LONG)); } } Modified: dcplusplus/trunk/client/BufferedSocket.h =================================================================== --- dcplusplus/trunk/client/BufferedSocket.h 2006-07-02 16:52:24 UTC (rev 623) +++ dcplusplus/trunk/client/BufferedSocket.h 2006-07-02 20:59:53 UTC (rev 624) @@ -99,8 +99,11 @@ void setLineMode(size_t aRollback) { setMode (MODE_LINE, aRollback);} void setMode(Modes mode, size_t aRollback = 0); Modes getMode() const { return mode; } - const string& getIp() { return sock ? sock->getIp() : Util::emptyString; } - bool isConnected() { return sock && sock->isConnected(); } + const string& getIp() const { return sock ? sock->getIp() : Util::emptyString; } + bool isConnected() const { return sock && sock->isConnected(); } + + bool isSecure() const { return sock && sock->isSecure(); } + bool isTrusted() const { return sock && sock->isTrusted(); } void write(const string& aData) throw() { write(aData.data(), aData.length()); } void write(const char* aBuf, size_t aLen) throw(); Modified: dcplusplus/trunk/client/Client.cpp =================================================================== --- dcplusplus/trunk/client/Client.cpp 2006-07-02 16:52:24 UTC (rev 623) +++ dcplusplus/trunk/client/Client.cpp 2006-07-02 20:59:53 UTC (rev 624) @@ -25,6 +25,7 @@ #include "FavoriteManager.h" #include "TimerManager.h" +#include "ResourceManager.h" Client::Counts Client::counts; @@ -100,13 +101,25 @@ } catch(const Exception& e) { if(socket) { BufferedSocket::putSocket(socket); - socket = NULL; + socket = 0; } fire(ClientListener::Failed(), this, e.getError()); } updateActivity(); } +void Client::on(Connected) throw() { + if(socket->isSecure() && !socket->isTrusted() && !BOOLSETTING(ALLOW_UNTRUSTED_HUBS)) { + fire(ClientListener::StatusMessage(), this, STRING(CERTIFICATE_NOT_TRUSTED)); + disconnect(true); + return; + } + + updateActivity(); + ip = socket->getIp(); + fire(ClientListener::Connected(), this); +} + void Client::disconnect(bool graceLess) { if(!socket) return; Modified: dcplusplus/trunk/client/Client.h =================================================================== --- dcplusplus/trunk/client/Client.h 2006-07-02 16:52:24 UTC (rev 623) +++ dcplusplus/trunk/client/Client.h 2006-07-02 20:59:53 UTC (rev 624) @@ -208,7 +208,7 @@ // BufferedSocketListener virtual void on(Connecting) throw() { fire(ClientListener::Connecting(), this); } - virtual void on(Connected) throw() { updateActivity(); ip = socket->getIp(); fire(ClientListener::Connected(), this); } + virtual void on(Connected) throw(); }; Modified: dcplusplus/trunk/client/ConnectionManager.cpp =================================================================== --- dcplusplus/trunk/client/ConnectionManager.cpp 2006-07-02 16:52:24 UTC (rev 623) +++ dcplusplus/trunk/client/ConnectionManager.cpp 2006-07-02 20:59:53 UTC (rev 624) @@ -27,6 +27,7 @@ #include "CryptoManager.h" #include "ClientManager.h" #include "QueueManager.h" +#include "LogManager.h" #include "UserConnection.h" @@ -295,6 +296,10 @@ uc->setLastActivity(GET_TICK()); try { uc->accept(sock); + if(uc->isSecure() && !uc->isTrusted() && !BOOLSETTING(ALLOW_UNTRUSTED_CLIENTS)) { + putConnection(uc); + LogManager::getInstance()->message(STRING(CERTIFICATE_NOT_TRUSTED)); + } } catch(const Exception&) { putConnection(uc); delete uc; @@ -379,6 +384,12 @@ } void ConnectionManager::on(UserConnectionListener::Connected, UserConnection* aSource) throw() { + if(aSource->isSecure() && !aSource->isTrusted() && !BOOLSETTING(ALLOW_UNTRUSTED_CLIENTS)) { + putConnection(aSource); + LogManager::getInstance()->message(STRING(CERTIFICATE_NOT_TRUSTED)); + return; + } + dcassert(aSource->getState() == UserConnection::STATE_CONNECT); if(aSource->isSet(UserConnection::FLAG_NMDC)) { aSource->myNick(aSource->getToken()); Modified: dcplusplus/trunk/client/CryptoManager.cpp =================================================================== --- dcplusplus/trunk/client/CryptoManager.cpp 2006-07-02 16:52:24 UTC (rev 623) +++ dcplusplus/trunk/client/CryptoManager.cpp 2006-07-02 20:59:53 UTC (rev 624) @@ -80,28 +80,63 @@ DH_free(dh); } +bool CryptoManager::TLSOk() const throw() { + return BOOLSETTING(USE_TLS) && certsLoaded; +} +bool CryptoManager::generateCertificate() throw() { +#ifdef _WIN32 + // Generate certificate using OpenSSL + if(SETTING(TLS_PRIVATE_KEY_FILE).empty()) { + return false; + } + wstring cmd = L"openssl.exe -out \"" + Text::utf8ToWide(SETTING(TLS_PRIVATE_KEY_FILE)) + L"\" 2048"; + PROCESS_INFORMATION pi = { 0 }; + STARTUPINFO si = { 0 }; + si.cb = sizeof(si); + + if(!CreateProcess(L"openssl.exe", const_cast<wchar_t*>(cmd.c_str()), 0, 0, FALSE, 0, 0, 0, 0, &pi)) { + return false; + } + WaitForSingleObject(pi.hProcess, INFINITE); + CloseHandle(pi.hThread); + CloseHandle(pi.hProcess); + + cmd = L"openssl.exe x509 -x509 -new -batch -key \"" + Text::utf8ToWide(SETTING(TLS_PRIVATE_KEY_FILE)) + + L"\" -out \"" + Text::utf8ToWide(SETTING(TLS_CERTIFICATE_FILE)) + L"\""; + + if(!CreateProcess(L"openssl.exe", const_cast<wchar_t*>(cmd.c_str()), 0, 0, FALSE, 0, 0, 0, 0, &pi)) { + return false; + } + + WaitForSingleObject(pi.hProcess, INFINITE); + CloseHandle(pi.hThread); + CloseHandle(pi.hProcess); +#endif + return true; +} + void CryptoManager::loadCertificates() throw() { SSL_CTX_set_verify(serverContext, SSL_VERIFY_NONE, 0); SSL_CTX_set_verify(clientContext, SSL_VERIFY_NONE, 0); - if(!SETTING(SSL_CERTIFICATE_FILE).empty()) { - if(SSL_CTX_use_certificate_file(serverContext, SETTING(SSL_CERTIFICATE_FILE).c_str(), SSL_FILETYPE_PEM) != SSL_SUCCESS) { + if(!SETTING(TLS_CERTIFICATE_FILE).empty()) { + if(SSL_CTX_use_certificate_file(serverContext, SETTING(TLS_CERTIFICATE_FILE).c_str(), SSL_FILETYPE_PEM) != SSL_SUCCESS) { LogManager::getInstance()->message("Failed to load certificate file"); return; } - if(SSL_CTX_use_certificate_file(clientContext, SETTING(SSL_CERTIFICATE_FILE).c_str(), SSL_FILETYPE_PEM) != SSL_SUCCESS) { + if(SSL_CTX_use_certificate_file(clientContext, SETTING(TLS_CERTIFICATE_FILE).c_str(), SSL_FILETYPE_PEM) != SSL_SUCCESS) { LogManager::getInstance()->message("Failed to load certificate file"); return; } } - if(!SETTING(SSL_PRIVATE_KEY_FILE).empty()) { - if(SSL_CTX_use_PrivateKey_file(serverContext, SETTING(SSL_PRIVATE_KEY_FILE).c_str(), SSL_FILETYPE_PEM) != SSL_SUCCESS) { + if(!SETTING(TLS_PRIVATE_KEY_FILE).empty()) { + if(SSL_CTX_use_PrivateKey_file(serverContext, SETTING(TLS_PRIVATE_KEY_FILE).c_str(), SSL_FILETYPE_PEM) != SSL_SUCCESS) { LogManager::getInstance()->message("Failed to load private key"); return; } - if(SSL_CTX_use_PrivateKey_file(clientContext, SETTING(SSL_PRIVATE_KEY_FILE).c_str(), SSL_FILETYPE_PEM) != SSL_SUCCESS) { + if(SSL_CTX_use_PrivateKey_file(clientContext, SETTING(TLS_PRIVATE_KEY_FILE).c_str(), SSL_FILETYPE_PEM) != SSL_SUCCESS) { LogManager::getInstance()->message("Failed to load private key"); return; } @@ -111,10 +146,10 @@ WIN32_FIND_DATA data; HANDLE hFind; - hFind = FindFirstFile(Text::toT(SETTING(SSL_TRUSTED_CERTIFICATES_PATH) + "*.pem").c_str(), &data); + hFind = FindFirstFile(Text::toT(SETTING(TLS_TRUSTED_CERTIFICATES_PATH) + "*.pem").c_str(), &data); if(hFind != INVALID_HANDLE_VALUE) { do { - if(SSL_CTX_load_verify_locations(clientContext, (SETTING(SSL_TRUSTED_CERTIFICATES_PATH) + Text::fromT(data.cFileName)).c_str(), NULL) != SSL_SUCCESS) { + if(SSL_CTX_load_verify_locations(clientContext, (SETTING(TLS_TRUSTED_CERTIFICATES_PATH) + Text::fromT(data.cFileName)).c_str(), NULL) != SSL_SUCCESS) { LogManager::getInstance()->message("Failed to load trusted certificate from " + Text::fromT(data.cFileName)); } } while(FindNextFile(hFind, &data)); Modified: dcplusplus/trunk/client/CryptoManager.h =================================================================== --- dcplusplus/trunk/client/CryptoManager.h 2006-07-02 16:52:24 UTC (rev 623) +++ dcplusplus/trunk/client/CryptoManager.h 2006-07-02 20:59:53 UTC (rev 624) @@ -85,7 +85,9 @@ SSLSocket* getServerSocket() throw(SocketException); void loadCertificates() throw(); - bool hasCerts() const { return certsLoaded; } + bool generateCertificate() throw(); + + bool TLSOk() const throw(); private: friend class Singleton<CryptoManager>; Modified: dcplusplus/trunk/client/SSLSocket.cpp =================================================================== --- dcplusplus/trunk/client/SSLSocket.cpp 2006-07-02 16:52:24 UTC (rev 623) +++ dcplusplus/trunk/client/SSLSocket.cpp 2006-07-02 20:59:53 UTC (rev 624) @@ -27,6 +27,7 @@ SSLSocket::SSLSocket(SSL_CTX* context) throw(SocketException) : ctx(context), ssl(0) { + } void SSLSocket::connect(const string& aIp, short aPort) throw(SocketException) { @@ -120,6 +121,22 @@ return Socket::wait(millis, waitFor); } +bool SSLSocket::isTrusted() const throw() { + if(!ssl) { + return false; + } + + if(SSL_get_verify_result(ssl) != SSL_ERROR_NONE) { + return false; + } + + if(!SSL_get_peer_certificate(ssl)) { + return false; + } + + return true; +} + void SSLSocket::shutdown() throw() { if(ssl) SSL_shutdown(ssl); Modified: dcplusplus/trunk/client/SSLSocket.h =================================================================== --- dcplusplus/trunk/client/SSLSocket.h 2006-07-02 16:52:24 UTC (rev 623) +++ dcplusplus/trunk/client/SSLSocket.h 2006-07-02 20:59:53 UTC (rev 624) @@ -45,6 +45,10 @@ virtual int wait(u_int32_t millis, int waitFor) throw(SocketException); virtual void shutdown() throw(); virtual void close() throw(); + + virtual bool isSecure() const throw() { return true; } + virtual bool isTrusted() const throw(); + private: friend class CryptoManager; Modified: dcplusplus/trunk/client/SettingsManager.cpp =================================================================== --- dcplusplus/trunk/client/SettingsManager.cpp 2006-07-02 16:52:24 UTC (rev 623) +++ dcplusplus/trunk/client/SettingsManager.cpp 2006-07-02 20:59:53 UTC (rev 624) @@ -74,7 +74,7 @@ "BoldHub", "BoldPm", "BoldSearch", "SocketInBuffer", "SocketOutBuffer", "OnlyDlTthFiles", "OpenWaitingUsers", "BoldWaitingUsers", "OpenSystemLog", "BoldSystemLog", "AutoRefreshTime", "UseSsl", "AutoSearchLimit", "AltSortOrder", "AutoKickNoFavs", "PromptPassword", "SpyFrameIgnoreTthSearches", - "DontDlAlreadyQueued", "MaxCommandLength", + "DontDlAlreadyQueued", "MaxCommandLength", "AllowUntrustedHubs", "AllowUntrustedClients", "SENTRY", // Int64 "TotalUpload", "TotalDownload", @@ -243,7 +243,7 @@ setDefault(ONLY_DL_TTH_FILES, false); setDefault(OPEN_WAITING_USERS, false); setDefault(OPEN_SYSTEM_LOG, true); - setDefault(SSL_TRUSTED_CERTIFICATES_PATH, Util::getConfigPath() + "Certificates" PATH_SEPARATOR_STR); + setDefault(TLS_TRUSTED_CERTIFICATES_PATH, Util::getConfigPath() + "Certificates" PATH_SEPARATOR_STR); setDefault(BOLD_FINISHED_DOWNLOADS, true); setDefault(BOLD_FINISHED_UPLOADS, true); setDefault(BOLD_QUEUE, true); @@ -253,7 +253,7 @@ setDefault(BOLD_WAITING_USERS, true); setDefault(BOLD_SYSTEM_LOG, true); setDefault(AUTO_REFRESH_TIME, 60); - setDefault(USE_SSL, false); + setDefault(USE_TLS, true); setDefault(AUTO_SEARCH_LIMIT, 5); setDefault(ALT_SORT_ORDER, false); setDefault(AUTO_KICK_NO_FAVS, false); @@ -261,6 +261,8 @@ setDefault(SPY_FRAME_IGNORE_TTH_SEARCHES, false); setDefault(DONT_DL_ALREADY_QUEUED, false); setDefault(MAX_COMMAND_LENGTH, 16*1024*1024); + setDefault(ALLOW_UNTRUSTED_HUBS, true); + setDefault(ALLOW_UNTRUSTED_CLIENTS, true); #ifdef _WIN32 setDefault(MAIN_WINDOW_STATE, SW_SHOWNORMAL); Modified: dcplusplus/trunk/client/SettingsManager.h =================================================================== --- dcplusplus/trunk/client/SettingsManager.h 2006-07-02 16:52:24 UTC (rev 623) +++ dcplusplus/trunk/client/SettingsManager.h 2006-07-02 20:59:53 UTC (rev 624) @@ -59,7 +59,7 @@ FINISHED_UL_WIDTHS, FINISHED_UL_ORDER, PRIVATE_ID, SPYFRAME_WIDTHS, SPYFRAME_ORDER, LOG_FILE_MAIN_CHAT, LOG_FILE_PRIVATE_CHAT, LOG_FILE_STATUS, LOG_FILE_UPLOAD, LOG_FILE_DOWNLOAD, LOG_FILE_SYSTEM, LOG_FORMAT_SYSTEM, LOG_FORMAT_STATUS, DIRECTORLISTINGFRAME_ORDER, DIRECTORLISTINGFRAME_WIDTHS, - SSL_PRIVATE_KEY_FILE, SSL_CERTIFICATE_FILE, SSL_TRUSTED_CERTIFICATES_PATH, + TLS_PRIVATE_KEY_FILE, TLS_CERTIFICATE_FILE, TLS_TRUSTED_CERTIFICATES_PATH, STR_LAST }; enum IntSetting { INT_FIRST = STR_LAST + 1, @@ -89,8 +89,9 @@ NO_IP_OVERRIDE, SEARCH_ONLY_FREE_SLOTS, LAST_SEARCH_TYPE, BOLD_FINISHED_DOWNLOADS, BOLD_FINISHED_UPLOADS, BOLD_QUEUE, BOLD_HUB, BOLD_PM, BOLD_SEARCH, SOCKET_IN_BUFFER, SOCKET_OUT_BUFFER, ONLY_DL_TTH_FILES, OPEN_WAITING_USERS, BOLD_WAITING_USERS, OPEN_SYSTEM_LOG, BOLD_SYSTEM_LOG, AUTO_REFRESH_TIME, - USE_SSL, AUTO_SEARCH_LIMIT, ALT_SORT_ORDER, AUTO_KICK_NO_FAVS, PROMPT_PASSWORD, SPY_FRAME_IGNORE_TTH_SEARCHES, - DONT_DL_ALREADY_QUEUED, MAX_COMMAND_LENGTH, + USE_TLS, AUTO_SEARCH_LIMIT, ALT_SORT_ORDER, AUTO_KICK_NO_FAVS, PROMPT_PASSWORD, SPY_FRAME_IGNORE_TTH_SEARCHES, + DONT_DL_ALREADY_QUEUED, MAX_COMMAND_LENGTH, ALLOW_UNTRUSTED_HUBS, ALLOW_UNTRUSTED_CLIENTS, + TLS_PORT, INT_LAST }; enum Int64Setting { INT64_FIRST = INT_LAST + 1, Modified: dcplusplus/trunk/client/Socket.h =================================================================== --- dcplusplus/trunk/client/Socket.h 2006-07-02 16:52:24 UTC (rev 623) +++ dcplusplus/trunk/client/Socket.h 2006-07-02 20:59:53 UTC (rev 624) @@ -176,6 +176,9 @@ int getSocketOptInt(int option) throw(SocketException); void setSocketOpt(int option, int value) throw(SocketException); + virtual bool isSecure() const throw() { return false; } + virtual bool isTrusted() const throw() { return false; } + /** When socks settings are updated, this has to be called... */ static void socksUpdated(); Modified: dcplusplus/trunk/client/StringDefs.cpp =================================================================== --- dcplusplus/trunk/client/StringDefs.cpp 2006-07-02 16:52:24 UTC (rev 623) +++ dcplusplus/trunk/client/StringDefs.cpp 2006-07-02 20:59:53 UTC (rev 624) @@ -41,6 +41,7 @@ "Browse...", "&Browse...", "Browse file list", +"Certificate not trusted, unable to connect", "Choose folder", "CID", "Close", @@ -48,6 +49,7 @@ "Closing connection...", "Compressed", "Error during compression", +"Maximum command length exceeded", "&Configure", "&Connect", "Connect to hub", @@ -302,6 +304,7 @@ "Offline", "Online", "Only users with free slots", +"Only TLS connections allowed", "Only results with TTH root", "Only where I'm op", "Open", @@ -370,6 +373,8 @@ "Advanced\\Experts only", "Advanced resume using TTH", "Advanced settings", +"Allow TLS connections to hubs without trusted certificate", +"Allow TLS connections to hubs without trusted certificate", "Use antifragmentation method for downloads", "Appearance", "Appearance\\Colors and sounds", @@ -416,7 +421,7 @@ "Downloads", "Maximum simultaneous downloads (0 = infinite)", "No new downloads if speed exceeds (KiB/s, 0 = disable)", -"Donate €€€:s! (ok, dirty dollars are fine as well =) (see help menu)", +"Donate :s! (ok, dirty dollars are fine as well =) (see help menu)", "External / WAN IP", "Only show joins / parts for favorite users", "Downloads\\Favorites", @@ -525,7 +530,7 @@ "Window options", "Write buffer size", "Sort all downloads first", -"Use SSL when remote client supports it", +"Use TLS when remote client supports it", "CRC32 inconsistency (SFV-Check)", "Shared", "Shared Files", @@ -653,6 +658,7 @@ "Browse", "BrowseAccel", "BrowseFileList", +"CertificateNotTrusted", "ChooseFolder", "Cid", "Close", @@ -660,6 +666,7 @@ "ClosingConnection", "Compressed", "CompressionError", +"CommandTooLong", "Configure", "Connect", "ConnectFavuserHub", @@ -914,6 +921,7 @@ "Offline", "Online", "OnlyFreeSlots", +"OnlyTlsAllowed", "OnlyTth", "OnlyWhereOp", "Open", @@ -982,6 +990,8 @@ "SettingsAdvanced3", "SettingsAdvancedResume", "SettingsAdvancedSettings", +"SettingsAllowUntrustedClients", +"SettingsAllowUntrustedHubs", "SettingsAntiFrag", "SettingsAppearance", "SettingsAppearance2", @@ -1137,7 +1147,7 @@ "SettingsWindowsOptions", "SettingsWriteBuffer", "SettingsAltSortOrder", -"SettingsUseSsl", +"SettingsUseTls", "SfvInconsistency", "Shared", "SharedFiles", Modified: dcplusplus/trunk/client/StringDefs.h =================================================================== --- dcplusplus/trunk/client/StringDefs.h 2006-07-02 16:52:24 UTC (rev 623) +++ dcplusplus/trunk/client/StringDefs.h 2006-07-02 20:59:53 UTC (rev 624) @@ -44,6 +44,7 @@ BROWSE, // "Browse..." BROWSE_ACCEL, // "&Browse..." BROWSE_FILE_LIST, // "Browse file list" + CERTIFICATE_NOT_TRUSTED, // "Certificate not trusted, unable to connect" CHOOSE_FOLDER, // "Choose folder" CID, // "CID" CLOSE, // "Close" @@ -306,6 +307,7 @@ OFFLINE, // "Offline" ONLINE, // "Online" ONLY_FREE_SLOTS, // "Only users with free slots" + ONLY_TLS_ALLOWED, // "Only TLS connections allowed" ONLY_TTH, // "Only results with TTH root" ONLY_WHERE_OP, // "Only where I'm op" OPEN, // "Open" @@ -374,6 +376,8 @@ SETTINGS_ADVANCED3, // "Advanced\\Experts only" SETTINGS_ADVANCED_RESUME, // "Advanced resume using TTH" SETTINGS_ADVANCED_SETTINGS, // "Advanced settings" + SETTINGS_ALLOW_UNTRUSTED_CLIENTS, // "Allow TLS connections to hubs without trusted certificate" + SETTINGS_ALLOW_UNTRUSTED_HUBS, // "Allow TLS connections to hubs without trusted certificate" SETTINGS_ANTI_FRAG, // "Use antifragmentation method for downloads" SETTINGS_APPEARANCE, // "Appearance" SETTINGS_APPEARANCE2, // "Appearance\\Colors and sounds" @@ -420,7 +424,7 @@ SETTINGS_DOWNLOADS, // "Downloads" SETTINGS_DOWNLOADS_MAX, // "Maximum simultaneous downloads (0 = infinite)" SETTINGS_DOWNLOADS_SPEED_PAUSE, // "No new downloads if speed exceeds (KiB/s, 0 = disable)" - SETTINGS_EXAMPLE_TEXT, // "Donate €€€:s! (ok, dirty dollars are fine as well =) (see help menu)" + SETTINGS_EXAMPLE_TEXT, // "Donate :s! (ok, dirty dollars are fine as well =) (see help menu)" SETTINGS_EXTERNAL_IP, // "External / WAN IP" SETTINGS_FAV_SHOW_JOINS, // "Only show joins / parts for favorite users" SETTINGS_FAVORITE_DIRS_PAGE, // "Downloads\\Favorites" @@ -529,7 +533,7 @@ SETTINGS_WINDOWS_OPTIONS, // "Window options" SETTINGS_WRITE_BUFFER, // "Write buffer size" SETTINGS_ALT_SORT_ORDER, // "Sort all downloads first" - SETTINGS_USE_SSL, // "Use SSL when remote client supports it" + SETTINGS_USE_TLS, // "Use TLS when remote client supports it" SFV_INCONSISTENCY, // "CRC32 inconsistency (SFV-Check)" SHARED, // "Shared" SHARED_FILES, // "Shared Files" Modified: dcplusplus/trunk/client/User.h =================================================================== --- dcplusplus/trunk/client/User.h 2006-07-02 16:52:24 UTC (rev 623) +++ dcplusplus/trunk/client/User.h 2006-07-02 20:59:53 UTC (rev 624) @@ -41,7 +41,7 @@ HUB_BIT, TTH_GET_BIT, SAVE_NICK_BIT, - SSL_BIT + TLS_BIT }; /** Each flag is set if it's true in at least one hub */ @@ -54,7 +54,7 @@ HUB = 1<<HUB_BIT, TTH_GET = 1<<TTH_GET_BIT, //< User supports getting files by tth -> don't have path in queue... SAVE_NICK = 1<<SAVE_NICK_BIT, //< Save cid->nick association - SSL = 1<<SSL_BIT //< Client supports SSL + TLS = 1<<TLS_BIT //< Client supports SSL }; typedef Pointer<User> Ptr; Modified: dcplusplus/trunk/client/UserConnection.h =================================================================== --- dcplusplus/trunk/client/UserConnection.h 2006-07-02 16:52:24 UTC (rev 623) +++ dcplusplus/trunk/client/UserConnection.h 2006-07-02 20:59:53 UTC (rev 624) @@ -279,7 +279,8 @@ } User::Ptr& getUser() { return user; } - bool isSecure() const { return secure; } + bool isSecure() const { return socket && socket->isSecure(); } + bool isTrusted() const { return socket && socket->isTrusted(); } string getRemoteIp() const { return socket->getIp(); } Download* getDownload() { dcassert(isSet(FLAG_DOWNLOAD)); return download; } @@ -305,8 +306,8 @@ GETSET(u_int32_t, lastActivity, LastActivity); private: BufferedSocket* socket; + bool secure; User::Ptr user; - bool secure; static const string UPLOAD, DOWNLOAD; @@ -316,7 +317,7 @@ }; // We only want ConnectionManager to create this... - UserConnection(bool secure_) throw() : /*cqi(NULL),*/ state(STATE_UNCONNECTED), lastActivity(0), + UserConnection(bool secure_) throw() : state(STATE_UNCONNECTED), lastActivity(0), socket(0), secure(secure_), download(NULL) { } Modified: dcplusplus/trunk/windows/AdvancedPage.cpp =================================================================== --- dcplusplus/trunk/windows/AdvancedPage.cpp 2006-07-02 16:52:24 UTC (rev 623) +++ dcplusplus/trunk/windows/AdvancedPage.cpp 2006-07-02 20:59:53 UTC (rev 624) @@ -47,7 +47,6 @@ { SettingsManager::SEND_UNKNOWN_COMMANDS, ResourceManager::SETTINGS_SEND_UNKNOWN_COMMANDS }, { SettingsManager::ADD_FINISHED_INSTANTLY, ResourceManager::SETTINGS_ADD_FINISHED_INSTANTLY }, { SettingsManager::USE_CTRL_FOR_LINE_HISTORY, ResourceManager::SETTINGS_USE_CTRL_FOR_LINE_HISTORY }, - { SettingsManager::USE_SSL, ResourceManager::SETTINGS_USE_SSL }, { SettingsManager::AUTO_KICK_NO_FAVS, ResourceManager::SETTINGS_AUTO_KICK_NO_FAVS }, { 0, ResourceManager::SETTINGS_AUTO_AWAY } }; Modified: dcplusplus/trunk/windows/CertificatesPage.cpp =================================================================== --- dcplusplus/trunk/windows/CertificatesPage.cpp 2006-07-02 16:52:24 UTC (rev 623) +++ dcplusplus/trunk/windows/CertificatesPage.cpp 2006-07-02 20:59:53 UTC (rev 624) @@ -33,23 +33,29 @@ }; PropPage::Item CertificatesPage::items[] = { - { IDC_SSL_CERTIFICATE_FILE, SettingsManager::SSL_CERTIFICATE_FILE, PropPage::T_STR }, - { IDC_SSL_PRIVATE_KEY_FILE, SettingsManager::SSL_PRIVATE_KEY_FILE, PropPage::T_STR }, - { IDC_SSL_TRUSTED_CERTIFICATES_PATH, SettingsManager::SSL_TRUSTED_CERTIFICATES_PATH, PropPage::T_STR }, + { IDC_TLS_CERTIFICATE_FILE, SettingsManager::TLS_CERTIFICATE_FILE, PropPage::T_STR }, + { IDC_TLS_PRIVATE_KEY_FILE, SettingsManager::TLS_PRIVATE_KEY_FILE, PropPage::T_STR }, + { IDC_TLS_TRUSTED_CERTIFICATES_PATH, SettingsManager::TLS_TRUSTED_CERTIFICATES_PATH, PropPage::T_STR }, { 0, 0, PropPage::T_END } }; +PropPage::ListItem CertificatesPage::listItems[] = { + { SettingsManager::USE_TLS, ResourceManager::SETTINGS_USE_TLS }, + { SettingsManager::ALLOW_UNTRUSTED_HUBS, ResourceManager::SETTINGS_ALLOW_UNTRUSTED_HUBS }, + { SettingsManager::ALLOW_UNTRUSTED_CLIENTS, ResourceManager::SETTINGS_ALLOW_UNTRUSTED_CLIENTS, } +}; + LRESULT CertificatesPage::onInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) { PropPage::translate((HWND)(*this), texts); - PropPage::read((HWND)*this, items, 0, 0); + PropPage::read((HWND)*this, items, listItems, GetDlgItem(IDC_TLS_OPTIONS)); // Do specialized reading here return TRUE; } void CertificatesPage::write() { - PropPage::write((HWND)*this, items, 0, 0); + PropPage::write((HWND)*this, items, listItems, GetDlgItem(IDC_TLS_OPTIONS)); } LRESULT CertificatesPage::onHelpInfo(LPNMHDR /*pnmh*/) { Modified: dcplusplus/trunk/windows/CertificatesPage.h =================================================================== --- dcplusplus/trunk/windows/CertificatesPage.h 2006-07-02 16:52:24 UTC (rev 623) +++ dcplusplus/trunk/windows/CertificatesPage.h 2006-07-02 20:59:53 UTC (rev 624) @@ -55,6 +55,7 @@ static Item items[]; static TextItem texts[]; + static ListItem listItems[]; }; #endif // !defined(CERTIFICATES_PAGE_H) Modified: dcplusplus/trunk/windows/TransferView.cpp =================================================================== --- dcplusplus/trunk/windows/TransferView.cpp 2006-07-02 16:52:24 UTC (rev 623) +++ dcplusplus/trunk/windows/TransferView.cpp 2006-07-02 20:59:53 UTC (rev 624) @@ -499,7 +499,11 @@ tstring statusString; if(d->getUserConnection()->isSecure()) { - statusString += _T("[S]"); + if(d->getUserConnection()->isTrusted()) { + statusString += _T("[S]"); + } else { + statusString += _T("[U]"); + } } if(d->isSet(Download::FLAG_TTH_CHECK)) { statusString += _T("[T]"); Modified: dcplusplus/trunk/windows/resource.h =================================================================== --- dcplusplus/trunk/windows/resource.h 2006-07-02 16:52:24 UTC (rev 623) +++ dcplusplus/trunk/windows/resource.h 2006-07-02 20:59:53 UTC (rev 624) @@ -372,6 +372,7 @@ #define IDC_EDIT2 1318 #define IDC_SOCKET_OUT_BUFFER 1318 #define IDC_SSL_CERTIFICATE_FILE 1318 +#define IDC_TLS_CERTIFICATE_FILE 1318 #define IDC_SETTINGS_SOCKET_OUT_BUFFER 1319 #define IDC_SETTINGS_SOCKET_IN_BUFFER 1320 #define IDC_CHECK1 1321 @@ -408,12 +409,16 @@ #define IDC_SETTINGS_MB 1411 #define IDC_SYSTEM_LOG 1412 #define IDC_SSL_PRIVATE_KEY_FILE 1414 +#define IDC_TLS_PRIVATE_KEY_FILE 1414 #define IDC_SSL_TRUSTED_CERTIFICATES_PATH 1415 +#define IDC_TLS_TRUSTED_CERTIFICATES_PATH 1415 #define IDC_CLIENT_ID 1416 #define IDC_PRIVATE_ID 1416 #define IDC_AUTO_REFRESH_TIME 1419 #define IDC_SETTINGS_AUTO_REFRESH_TIME 1420 #define IDC_AUTO_SEARCH_LIMIT 1421 +#define IDC_SSL_OPTIONS 1421 +#define IDC_TLS_OPTIONS 1421 #define IDC_SETTINGS_AUTO_SEARCH_LIMIT 1422 #define IDC_CLOSE_ALL_PM 1423 #define IDC_CLOSE_ALL_OFFLINE_PM 1424 @@ -460,7 +465,7 @@ #define _APS_3D_CONTROLS 1 #define _APS_NEXT_RESOURCE_VALUE 246 #define _APS_NEXT_COMMAND_VALUE 32789 -#define _APS_NEXT_CONTROL_VALUE 1421 +#define _APS_NEXT_CONTROL_VALUE 1422 #define _APS_NEXT_SYMED_VALUE 105 #endif #endif Modified: dcplusplus/trunk/yassl/include/yassl_int.hpp =================================================================== --- dcplusplus/trunk/yassl/include/yassl_int.hpp 2006-07-02 16:52:24 UTC (rev 623) +++ dcplusplus/trunk/yassl/include/yassl_int.hpp 2006-07-02 20:59:53 UTC (rev 624) @@ -429,16 +429,14 @@ // holds input and output buffers class Buffers { - typedef mySTL::list<input_buffer*> inputList; - typedef mySTL::list<output_buffer*> outputList; - - inputList dataList_; // list of users app data / handshake - outputList handShakeList_; // buffered handshake msgs public: Buffers() {} ~Buffers(); - const inputList& getData() const; + typedef mySTL::list<input_buffer*> inputList; + typedef mySTL::list<output_buffer*> outputList; + + const inputList& getData() const; const outputList& getHandShake() const; inputList& useData(); @@ -446,6 +444,9 @@ private: Buffers(const Buffers&); // hide copy Buffers& operator=(const Buffers&); // and assign + + inputList dataList_; // list of users app data / handshake + outputList handShakeList_; // buffered handshake msgs }; Modified: dcplusplus/trunk/yassl/src/yassl.cpp =================================================================== --- dcplusplus/trunk/yassl/src/yassl.cpp 2006-07-02 16:52:24 UTC (rev 623) +++ dcplusplus/trunk/yassl/src/yassl.cpp 2006-07-02 20:59:53 UTC (rev 624) @@ -31,7 +31,7 @@ #include "openssl/ssl.h" // get rid of this - +/* // yaSSL overloads hide these void* operator new[](size_t sz) { @@ -43,7 +43,7 @@ ::operator delete(ptr); } - +*/ namespace yaSSL { using mySTL::min; Modified: dcplusplus/trunk/yassl/taocrypt/taocrypt.vcproj =================================================================== --- dcplusplus/trunk/yassl/taocrypt/taocrypt.vcproj 2006-07-02 16:52:24 UTC (rev 623) +++ dcplusplus/trunk/yassl/taocrypt/taocrypt.vcproj 2006-07-02 20:59:53 UTC (rev 624) @@ -438,6 +438,9 @@ </FileConfiguration> </File> <File + RelativePath=".\src\md4.cpp"> + </File> + <File RelativePath="src\md5.cpp"> <FileConfiguration Name="Debug|Win32"> @@ -564,6 +567,9 @@ </FileConfiguration> </File> <File + RelativePath=".\src\template_instnt.cpp"> + </File> + <File RelativePath="src\tftables.cpp"> <FileConfiguration Name="Debug|Win32"> @@ -655,9 +661,15 @@ RelativePath="include\integer.hpp"> </File> <File + RelativePath=".\include\kernelc.hpp"> + </File> + <File RelativePath="include\md2.hpp"> </File> <File + RelativePath=".\include\md4.hpp"> + </File> + <File RelativePath="include\md5.hpp"> </File> <File @@ -682,6 +694,9 @@ RelativePath="include\rsa.hpp"> </File> <File + RelativePath=".\include\runtime.hpp"> + </File> + <File RelativePath="include\sha.hpp"> </File> <File Modified: dcplusplus/trunk/yassl/yassl.vcproj =================================================================== --- dcplusplus/trunk/yassl/yassl.vcproj 2006-07-02 16:52:24 UTC (rev 623) +++ dcplusplus/trunk/yassl/yassl.vcproj 2006-07-02 20:59:53 UTC (rev 624) @@ -291,6 +291,9 @@ </FileConfiguration> </File> <File + RelativePath=".\src\template_instnt.cpp"> + </File> + <File RelativePath="src\timer.cpp"> <FileConfiguration Name="Debug|Win32"> @@ -388,21 +391,57 @@ RelativePath="include\cert_wrapper.hpp"> </File> <File + RelativePath=".\include\openssl\crypto.h"> + </File> + <File RelativePath="include\crypto_wrapper.hpp"> </File> <File + RelativePath=".\include\openssl\des.h"> + </File> + <File + RelativePath=".\include\openssl\engine.h"> + </File> + <File + RelativePath=".\include\openssl\err.h"> + </File> + <File RelativePath="include\factory.hpp"> </File> <File RelativePath="include\handshake.hpp"> </File> <File + RelativePath=".\include\openssl\lhash.h"> + </File> + <File RelativePath="include\lock.hpp"> </File> <File RelativePath="include\log.hpp"> </File> <File + RelativePath=".\include\openssl\md4.h"> + </File> + <File + RelativePath=".\include\openssl\md5.h"> + </File> + <File + RelativePath=".\include\openssl\opensslv.h"> + </File> + <File + RelativePath=".\include\openssl\pem.h"> + </File> + <File + RelativePath=".\include\openssl\pkcs12.h"> + </File> + <File + RelativePath=".\include\openssl\rand.h"> + </File> + <File + RelativePath=".\include\openssl\rsa.h"> + </File> + <File RelativePath="include\socket_wrapper.hpp"> </File> <File @@ -412,6 +451,12 @@ RelativePath="include\timer.hpp"> </File> <File + RelativePath=".\include\openssl\x509.h"> + </File> + <File + RelativePath=".\include\openssl\x509v3.h"> + </File> + <File RelativePath=".\include\yassl.hpp"> </File> <File This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |