FFFTPのソースコードです。
Revision | 5a1386b87710e85b4609536a735ce97106f39133 (tree) |
---|---|
Zeit | 2014-06-08 22:54:42 |
Autor | s_kawamoto <s_kawamoto@user...> |
Commiter | s_kawamoto |
Fix bugs of automatic software update.
@@ -539,6 +539,8 @@ BOOL DecryptSignature(const char* PublicKey, const void* pIn, DWORD InLength, vo | ||
539 | 539 | EVP_PKEY* pPKEY; |
540 | 540 | RSA* pRSA; |
541 | 541 | int i; |
542 | + if(!g_bOpenSSLLoaded) | |
543 | + return FALSE; | |
542 | 544 | bResult = FALSE; |
543 | 545 | if(pBIO = p_BIO_new_mem_buf((void*)PublicKey, sizeof(char) * strlen(PublicKey))) |
544 | 546 | { |
@@ -566,29 +568,44 @@ BOOL DecryptSignature(const char* PublicKey, const void* pIn, DWORD InLength, vo | ||
566 | 568 | |
567 | 569 | // ハッシュ計算 |
568 | 570 | // 他にも同等の関数はあるが主にマルウェア対策のための冗長化 |
569 | -void GetHashSHA1(const void* pData, DWORD Size, void* pHash) | |
571 | +BOOL GetHashSHA1(const void* pData, DWORD Size, void* pHash) | |
570 | 572 | { |
573 | + if(!g_bOpenSSLLoaded) | |
574 | + return FALSE; | |
571 | 575 | p_SHA1((const unsigned char*)pData, (size_t)Size, (unsigned char*)pHash); |
576 | + return TRUE; | |
572 | 577 | } |
573 | 578 | |
574 | -void GetHashSHA224(const void* pData, DWORD Size, void* pHash) | |
579 | +BOOL GetHashSHA224(const void* pData, DWORD Size, void* pHash) | |
575 | 580 | { |
581 | + if(!g_bOpenSSLLoaded) | |
582 | + return FALSE; | |
576 | 583 | p_SHA224((const unsigned char*)pData, (size_t)Size, (unsigned char*)pHash); |
584 | + return TRUE; | |
577 | 585 | } |
578 | 586 | |
579 | -void GetHashSHA256(const void* pData, DWORD Size, void* pHash) | |
587 | +BOOL GetHashSHA256(const void* pData, DWORD Size, void* pHash) | |
580 | 588 | { |
589 | + if(!g_bOpenSSLLoaded) | |
590 | + return FALSE; | |
581 | 591 | p_SHA256((const unsigned char*)pData, (size_t)Size, (unsigned char*)pHash); |
592 | + return TRUE; | |
582 | 593 | } |
583 | 594 | |
584 | -void GetHashSHA384(const void* pData, DWORD Size, void* pHash) | |
595 | +BOOL GetHashSHA384(const void* pData, DWORD Size, void* pHash) | |
585 | 596 | { |
597 | + if(!g_bOpenSSLLoaded) | |
598 | + return FALSE; | |
586 | 599 | p_SHA384((const unsigned char*)pData, (size_t)Size, (unsigned char*)pHash); |
600 | + return TRUE; | |
587 | 601 | } |
588 | 602 | |
589 | -void GetHashSHA512(const void* pData, DWORD Size, void* pHash) | |
603 | +BOOL GetHashSHA512(const void* pData, DWORD Size, void* pHash) | |
590 | 604 | { |
605 | + if(!g_bOpenSSLLoaded) | |
606 | + return FALSE; | |
591 | 607 | p_SHA512((const unsigned char*)pData, (size_t)Size, (unsigned char*)pHash); |
608 | + return TRUE; | |
592 | 609 | } |
593 | 610 | |
594 | 611 | // SSLセッションを開始 |
@@ -21,11 +21,11 @@ void SetSSLConfirmCallback(LPSSLCONFIRMCALLBACK pCallback); | ||
21 | 21 | BOOL SetSSLRootCertificate(const void* pData, DWORD Length); |
22 | 22 | BOOL IsHostNameMatched(LPCSTR HostName, LPCSTR CommonName); |
23 | 23 | BOOL DecryptSignature(const char* PublicKey, const void* pIn, DWORD InLength, void* pOut, DWORD OutLength, DWORD* pOutLength); |
24 | -void GetHashSHA1(const void* pData, DWORD Size, void* pHash); | |
25 | -void GetHashSHA224(const void* pData, DWORD Size, void* pHash); | |
26 | -void GetHashSHA256(const void* pData, DWORD Size, void* pHash); | |
27 | -void GetHashSHA384(const void* pData, DWORD Size, void* pHash); | |
28 | -void GetHashSHA512(const void* pData, DWORD Size, void* pHash); | |
24 | +BOOL GetHashSHA1(const void* pData, DWORD Size, void* pHash); | |
25 | +BOOL GetHashSHA224(const void* pData, DWORD Size, void* pHash); | |
26 | +BOOL GetHashSHA256(const void* pData, DWORD Size, void* pHash); | |
27 | +BOOL GetHashSHA384(const void* pData, DWORD Size, void* pHash); | |
28 | +BOOL GetHashSHA512(const void* pData, DWORD Size, void* pHash); | |
29 | 29 | BOOL AttachSSL(SOCKET s, SOCKET parent, BOOL* pbAborted); |
30 | 30 | BOOL DetachSSL(SOCKET s); |
31 | 31 | BOOL IsSSLAttached(SOCKET s); |
@@ -180,20 +180,22 @@ BOOL CheckForUpdates(BOOL bDownload, LPCTSTR DownloadDir, DWORD* pVersion, LPTST | ||
180 | 180 | { |
181 | 181 | if(ReadFileViaHTTP(&Buf1, sizeof(Buf1), &Length, HTTP_USER_AGENT, UPDATE_SERVER, UPDATE_LIST_PATH)) |
182 | 182 | { |
183 | - GetHashSHA512(&Buf1, Length, &Hash); | |
184 | - if(memcmp(&Hash, &UpdateHash.ListHash, 64) == 0) | |
183 | + if(GetHashSHA512(&Buf1, Length, &Hash)) | |
185 | 184 | { |
186 | - if(Length >= sizeof(UPDATE_LIST)) | |
185 | + if(memcmp(&Hash, &UpdateHash.ListHash, 64) == 0) | |
187 | 186 | { |
188 | - bResult = TRUE; | |
189 | - pUpdateList = (UPDATE_LIST*)&Buf1; | |
190 | - if(pUpdateList->Version > *pVersion) | |
187 | + if(Length >= sizeof(UPDATE_LIST)) | |
191 | 188 | { |
192 | - *pVersion = pUpdateList->Version; | |
193 | - _tcscpy(pVersionString, pUpdateList->VersionString); | |
189 | + bResult = TRUE; | |
190 | + pUpdateList = (UPDATE_LIST*)&Buf1; | |
191 | + if(pUpdateList->Version > *pVersion) | |
192 | + { | |
193 | + *pVersion = pUpdateList->Version; | |
194 | + _tcscpy(pVersionString, pUpdateList->VersionString); | |
195 | + } | |
196 | + if(bDownload) | |
197 | + bResult = PrepareUpdates(&Buf1, Length, DownloadDir); | |
194 | 198 | } |
195 | - if(bDownload) | |
196 | - bResult = PrepareUpdates(&Buf1, Length, DownloadDir); | |
197 | 199 | } |
198 | 200 | } |
199 | 201 | } |
@@ -240,14 +242,16 @@ BOOL PrepareUpdates(void* pList, DWORD ListLength, LPCTSTR DownloadDir) | ||
240 | 242 | { |
241 | 243 | if(ReadFileViaHTTP(pBuf, 16777216, &Length, HTTP_USER_AGENT, UPDATE_SERVER, pUpdateList->File[i].SrcPath)) |
242 | 244 | { |
243 | - GetHashSHA512(pBuf, Length, &Hash); | |
244 | - if(memcmp(&Hash, &pUpdateList->File[i].SrcHash, 64) == 0) | |
245 | + if(GetHashSHA512(pBuf, Length, &Hash)) | |
245 | 246 | { |
246 | - _tcscpy(Path, DownloadDir); | |
247 | - _tcscat(Path, _T("\\")); | |
248 | - _tcscat(Path, pUpdateList->File[i].DstPath); | |
249 | - if(SaveMemoryToFileWithTimestamp(Path, pBuf, Length, &pUpdateList->File[i].Timestamp)) | |
250 | - b = TRUE; | |
247 | + if(memcmp(&Hash, &pUpdateList->File[i].SrcHash, 64) == 0) | |
248 | + { | |
249 | + _tcscpy(Path, DownloadDir); | |
250 | + _tcscat(Path, _T("\\")); | |
251 | + _tcscat(Path, pUpdateList->File[i].DstPath); | |
252 | + if(SaveMemoryToFileWithTimestamp(Path, pBuf, Length, &pUpdateList->File[i].Timestamp)) | |
253 | + b = TRUE; | |
254 | + } | |
251 | 255 | } |
252 | 256 | } |
253 | 257 | } |