diff options
author | Shauren <shauren.trinity@gmail.com> | 2019-06-08 13:20:31 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2019-06-08 17:10:10 +0200 |
commit | e7bce901da9e442c039d780fc852cccbf90f35ae (patch) | |
tree | 0aec44c9d04cdd230e83b25a7a18d717c6a5525c /dep/CascLib/src | |
parent | bcaaa3d6f69cd60b25a25fc69904f9a8ece24250 (diff) |
Dep/CascLib: Patch CascLib to expose encryption keys
Diffstat (limited to 'dep/CascLib/src')
-rw-r--r-- | dep/CascLib/src/CascDecrypt.cpp | 31 | ||||
-rw-r--r-- | dep/CascLib/src/CascLib.h | 1 |
2 files changed, 24 insertions, 8 deletions
diff --git a/dep/CascLib/src/CascDecrypt.cpp b/dep/CascLib/src/CascDecrypt.cpp index 81e098ca178..ec29bb4cb07 100644 --- a/dep/CascLib/src/CascDecrypt.cpp +++ b/dep/CascLib/src/CascDecrypt.cpp @@ -353,6 +353,14 @@ static int Decrypt_Salsa20(LPBYTE pbOutBuffer, LPBYTE pbInBuffer, size_t cbInBuf return Decrypt(&SalsaState, pbOutBuffer, pbInBuffer, cbInBuffer); } +static LPBYTE CascFindKey(TCascStorage * hs, ULONGLONG KeyName) +{ + PCASC_ENCRYPTION_KEY pKey; + + pKey = (PCASC_ENCRYPTION_KEY)hs->EncryptionKeys.FindObject(&KeyName); + return (pKey != NULL) ? pKey->Key : NULL; +} + //----------------------------------------------------------------------------- // Public functions @@ -376,14 +384,6 @@ int CascLoadEncryptionKeys(TCascStorage * hs) return nError; } -LPBYTE CascFindKey(TCascStorage * hs, ULONGLONG KeyName) -{ - PCASC_ENCRYPTION_KEY pKey; - - pKey = (PCASC_ENCRYPTION_KEY)hs->EncryptionKeys.FindObject(&KeyName); - return (pKey != NULL) ? pKey->Key : NULL; -} - int CascDecrypt(TCascStorage * hs, LPBYTE pbOutBuffer, PDWORD pcbOutBuffer, LPBYTE pbInBuffer, DWORD cbInBuffer, DWORD dwFrameIndex) { ULONGLONG KeyName = 0; @@ -515,3 +515,18 @@ bool WINAPI CascAddEncryptionKey(HANDLE hStorage, ULONGLONG KeyName, LPBYTE Key) // Also insert the key to the map return hs->EncryptionKeys.InsertObject(pEncKey, &pEncKey->KeyName); } + +LPBYTE WINAPI CascFindEncryptionKey(HANDLE hStorage, ULONGLONG KeyName) +{ + TCascStorage* hs; + + // Validate the storage handle + hs = TCascStorage::IsValid(hStorage); + if (hs == NULL) + { + SetLastError(ERROR_INVALID_HANDLE); + return false; + } + + return CascFindKey(hs, KeyName); +} diff --git a/dep/CascLib/src/CascLib.h b/dep/CascLib/src/CascLib.h index 1fb1911eade..9695ad7429a 100644 --- a/dep/CascLib/src/CascLib.h +++ b/dep/CascLib/src/CascLib.h @@ -268,6 +268,7 @@ bool WINAPI CascOpenStorage(LPCTSTR szDataPath, DWORD dwLocaleMask, HANDLE * ph bool WINAPI CascOpenOnlineStorage(LPCTSTR szLocalCache, LPCSTR szCodeName, LPCSTR szRegion, DWORD dwLocaleMask, HANDLE * phStorage); bool WINAPI CascGetStorageInfo(HANDLE hStorage, CASC_STORAGE_INFO_CLASS InfoClass, void * pvStorageInfo, size_t cbStorageInfo, size_t * pcbLengthNeeded); bool WINAPI CascAddEncryptionKey(HANDLE hStorage, ULONGLONG KeyName, LPBYTE Key); +LPBYTE WINAPI CascFindEncryptionKey(HANDLE hStorage, ULONGLONG KeyName); bool WINAPI CascCloseStorage(HANDLE hStorage); bool WINAPI CascOpenFile(HANDLE hStorage, const void * pvFileName, DWORD dwLocaleFlags, DWORD dwOpenFlags, HANDLE * phFile); |