aboutsummaryrefslogtreecommitdiff
path: root/dep/CascLib/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2019-06-08 13:20:31 +0200
committerShauren <shauren.trinity@gmail.com>2019-06-08 17:10:10 +0200
commite7bce901da9e442c039d780fc852cccbf90f35ae (patch)
tree0aec44c9d04cdd230e83b25a7a18d717c6a5525c /dep/CascLib/src
parentbcaaa3d6f69cd60b25a25fc69904f9a8ece24250 (diff)
Dep/CascLib: Patch CascLib to expose encryption keys
Diffstat (limited to 'dep/CascLib/src')
-rw-r--r--dep/CascLib/src/CascDecrypt.cpp31
-rw-r--r--dep/CascLib/src/CascLib.h1
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);