Commit 2d6d002b authored by Juan Lang's avatar Juan Lang Committed by Alexandre Julliard

Use CryptMem functions for internal memory allocation.

parent 717a4eb6
...@@ -211,7 +211,7 @@ static char *CRYPT_GetKeyName(DWORD dwEncodingType, LPCSTR pszFuncName, ...@@ -211,7 +211,7 @@ static char *CRYPT_GetKeyName(DWORD dwEncodingType, LPCSTR pszFuncName,
* format specifier that are removed by sprintf. * format specifier that are removed by sprintf.
*/ */
len = sizeof(szEncodingTypeFmt) + lstrlenA(pszFuncName) + lstrlenA(oid); len = sizeof(szEncodingTypeFmt) + lstrlenA(pszFuncName) + lstrlenA(oid);
szKey = HeapAlloc(GetProcessHeap(), 0, len); szKey = CryptMemAlloc(len);
if (szKey) if (szKey)
sprintf(szKey, szEncodingTypeFmt, dwEncodingType, pszFuncName, oid); sprintf(szKey, szEncodingTypeFmt, dwEncodingType, pszFuncName, oid);
return szKey; return szKey;
...@@ -255,7 +255,7 @@ BOOL WINAPI CryptRegisterOIDFunction(DWORD dwEncodingType, LPCSTR pszFuncName, ...@@ -255,7 +255,7 @@ BOOL WINAPI CryptRegisterOIDFunction(DWORD dwEncodingType, LPCSTR pszFuncName,
return FALSE; return FALSE;
r = RegCreateKeyA(HKEY_LOCAL_MACHINE, szKey, &hKey); r = RegCreateKeyA(HKEY_LOCAL_MACHINE, szKey, &hKey);
HeapFree(GetProcessHeap(), 0, szKey); CryptMemFree(szKey);
if(r != ERROR_SUCCESS) if(r != ERROR_SUCCESS)
return FALSE; return FALSE;
...@@ -289,7 +289,7 @@ BOOL WINAPI CryptUnregisterOIDFunction(DWORD dwEncodingType, LPCSTR pszFuncName, ...@@ -289,7 +289,7 @@ BOOL WINAPI CryptUnregisterOIDFunction(DWORD dwEncodingType, LPCSTR pszFuncName,
szKey = CRYPT_GetKeyName(dwEncodingType, pszFuncName, pszOID); szKey = CRYPT_GetKeyName(dwEncodingType, pszFuncName, pszOID);
rc = RegDeleteKeyA(HKEY_LOCAL_MACHINE, szKey); rc = RegDeleteKeyA(HKEY_LOCAL_MACHINE, szKey);
HeapFree(GetProcessHeap(), 0, szKey); CryptMemFree(szKey);
if (rc) if (rc)
SetLastError(rc); SetLastError(rc);
return rc ? FALSE : TRUE; return rc ? FALSE : TRUE;
...@@ -318,7 +318,7 @@ BOOL WINAPI CryptGetOIDFunctionValue(DWORD dwEncodingType, LPCSTR pszFuncName, ...@@ -318,7 +318,7 @@ BOOL WINAPI CryptGetOIDFunctionValue(DWORD dwEncodingType, LPCSTR pszFuncName,
szKey = CRYPT_GetKeyName(dwEncodingType, pszFuncName, pszOID); szKey = CRYPT_GetKeyName(dwEncodingType, pszFuncName, pszOID);
rc = RegOpenKeyA(HKEY_LOCAL_MACHINE, szKey, &hKey); rc = RegOpenKeyA(HKEY_LOCAL_MACHINE, szKey, &hKey);
HeapFree(GetProcessHeap(), 0, szKey); CryptMemFree(szKey);
if (rc) if (rc)
SetLastError(rc); SetLastError(rc);
else else
...@@ -355,7 +355,7 @@ BOOL WINAPI CryptSetOIDFunctionValue(DWORD dwEncodingType, LPCSTR pszFuncName, ...@@ -355,7 +355,7 @@ BOOL WINAPI CryptSetOIDFunctionValue(DWORD dwEncodingType, LPCSTR pszFuncName,
szKey = CRYPT_GetKeyName(dwEncodingType, pszFuncName, pszOID); szKey = CRYPT_GetKeyName(dwEncodingType, pszFuncName, pszOID);
rc = RegOpenKeyA(HKEY_LOCAL_MACHINE, szKey, &hKey); rc = RegOpenKeyA(HKEY_LOCAL_MACHINE, szKey, &hKey);
HeapFree(GetProcessHeap(), 0, szKey); CryptMemFree(szKey);
if (rc) if (rc)
SetLastError(rc); SetLastError(rc);
else else
...@@ -390,14 +390,14 @@ static void *CRYPT_GetFunc(DWORD dwCertEncodingType, LPCSTR lpszStructType, ...@@ -390,14 +390,14 @@ static void *CRYPT_GetFunc(DWORD dwCertEncodingType, LPCSTR lpszStructType,
*lib = NULL; *lib = NULL;
r = RegOpenKeyA(HKEY_LOCAL_MACHINE, szKey, &hKey); r = RegOpenKeyA(HKEY_LOCAL_MACHINE, szKey, &hKey);
HeapFree(GetProcessHeap(), 0, szKey); CryptMemFree(szKey);
if(r != ERROR_SUCCESS) if(r != ERROR_SUCCESS)
return NULL; return NULL;
RegQueryValueExA(hKey, "FuncName", NULL, &type, NULL, &size); RegQueryValueExA(hKey, "FuncName", NULL, &type, NULL, &size);
if (GetLastError() == ERROR_MORE_DATA && type == REG_SZ) if (GetLastError() == ERROR_MORE_DATA && type == REG_SZ)
{ {
funcName = HeapAlloc(GetProcessHeap(), 0, size); funcName = CryptMemAlloc(size);
RegQueryValueExA(hKey, "FuncName", NULL, &type, (LPBYTE)funcName, RegQueryValueExA(hKey, "FuncName", NULL, &type, (LPBYTE)funcName,
&size); &size);
} }
...@@ -406,7 +406,7 @@ static void *CRYPT_GetFunc(DWORD dwCertEncodingType, LPCSTR lpszStructType, ...@@ -406,7 +406,7 @@ static void *CRYPT_GetFunc(DWORD dwCertEncodingType, LPCSTR lpszStructType,
RegQueryValueExW(hKey, szDllName, NULL, &type, NULL, &size); RegQueryValueExW(hKey, szDllName, NULL, &type, NULL, &size);
if (GetLastError() == ERROR_MORE_DATA && type == REG_SZ) if (GetLastError() == ERROR_MORE_DATA && type == REG_SZ)
{ {
LPWSTR dllName = HeapAlloc(GetProcessHeap(), 0, size); LPWSTR dllName = CryptMemAlloc(size);
RegQueryValueExW(hKey, szDllName, NULL, &type, (LPBYTE)dllName, RegQueryValueExW(hKey, szDllName, NULL, &type, (LPBYTE)dllName,
&size); &size);
...@@ -423,10 +423,10 @@ static void *CRYPT_GetFunc(DWORD dwCertEncodingType, LPCSTR lpszStructType, ...@@ -423,10 +423,10 @@ static void *CRYPT_GetFunc(DWORD dwCertEncodingType, LPCSTR lpszStructType,
*lib = NULL; *lib = NULL;
} }
} }
HeapFree(GetProcessHeap(), 0, dllName); CryptMemFree(dllName);
} }
if (funcName != szFuncName) if (funcName != szFuncName)
HeapFree(GetProcessHeap(), 0, (char *)funcName); CryptMemFree((char *)funcName);
TRACE("returning %p\n", ret); TRACE("returning %p\n", ret);
return ret; return ret;
} }
...@@ -1330,10 +1330,11 @@ static BOOL WINAPI CRYPT_AsnEncodeRdn(DWORD dwCertEncodingType, CERT_RDN *rdn, ...@@ -1330,10 +1330,11 @@ static BOOL WINAPI CRYPT_AsnEncodeRdn(DWORD dwCertEncodingType, CERT_RDN *rdn,
ret = TRUE; ret = TRUE;
if (rdn->cRDNAttr) if (rdn->cRDNAttr)
{ {
blobs = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, blobs = CryptMemAlloc(rdn->cRDNAttr * sizeof(CRYPT_DER_BLOB));
rdn->cRDNAttr * sizeof(CRYPT_DER_BLOB));
if (!blobs) if (!blobs)
ret = FALSE; ret = FALSE;
else
memset(blobs, 0, rdn->cRDNAttr * sizeof(CRYPT_DER_BLOB));
} }
for (i = 0; ret && i < rdn->cRDNAttr; i++) for (i = 0; ret && i < rdn->cRDNAttr; i++)
{ {
...@@ -1357,8 +1358,7 @@ static BOOL WINAPI CRYPT_AsnEncodeRdn(DWORD dwCertEncodingType, CERT_RDN *rdn, ...@@ -1357,8 +1358,7 @@ static BOOL WINAPI CRYPT_AsnEncodeRdn(DWORD dwCertEncodingType, CERT_RDN *rdn,
{ {
for (i = 0; ret && i < rdn->cRDNAttr; i++) for (i = 0; ret && i < rdn->cRDNAttr; i++)
{ {
blobs[i].pbData = HeapAlloc(GetProcessHeap(), 0, blobs[i].pbData = CryptMemAlloc(blobs[i].cbData);
blobs[i].cbData);
if (!blobs[i].pbData) if (!blobs[i].pbData)
ret = FALSE; ret = FALSE;
else else
...@@ -1387,7 +1387,7 @@ static BOOL WINAPI CRYPT_AsnEncodeRdn(DWORD dwCertEncodingType, CERT_RDN *rdn, ...@@ -1387,7 +1387,7 @@ static BOOL WINAPI CRYPT_AsnEncodeRdn(DWORD dwCertEncodingType, CERT_RDN *rdn,
if (blobs) if (blobs)
{ {
for (i = 0; i < rdn->cRDNAttr; i++) for (i = 0; i < rdn->cRDNAttr; i++)
HeapFree(GetProcessHeap(), 0, blobs[i].pbData); CryptMemFree(blobs[i].pbData);
} }
} }
__EXCEPT(page_fault) __EXCEPT(page_fault)
...@@ -1396,7 +1396,7 @@ static BOOL WINAPI CRYPT_AsnEncodeRdn(DWORD dwCertEncodingType, CERT_RDN *rdn, ...@@ -1396,7 +1396,7 @@ static BOOL WINAPI CRYPT_AsnEncodeRdn(DWORD dwCertEncodingType, CERT_RDN *rdn,
return FALSE; return FALSE;
} }
__ENDTRY __ENDTRY
HeapFree(GetProcessHeap(), 0, blobs); CryptMemFree(blobs);
return ret; return ret;
} }
...@@ -1866,7 +1866,7 @@ static BOOL WINAPI CRYPT_AsnEncodeBitsSwapBytes(DWORD dwCertEncodingType, ...@@ -1866,7 +1866,7 @@ static BOOL WINAPI CRYPT_AsnEncodeBitsSwapBytes(DWORD dwCertEncodingType,
ret = TRUE; ret = TRUE;
if (newBlob.cbData) if (newBlob.cbData)
{ {
newBlob.pbData = HeapAlloc(GetProcessHeap(), 0, newBlob.cbData); newBlob.pbData = CryptMemAlloc(newBlob.cbData);
if (newBlob.pbData) if (newBlob.pbData)
{ {
DWORD i; DWORD i;
...@@ -1880,7 +1880,7 @@ static BOOL WINAPI CRYPT_AsnEncodeBitsSwapBytes(DWORD dwCertEncodingType, ...@@ -1880,7 +1880,7 @@ static BOOL WINAPI CRYPT_AsnEncodeBitsSwapBytes(DWORD dwCertEncodingType,
if (ret) if (ret)
ret = CRYPT_AsnEncodeBits(dwCertEncodingType, lpszStructType, ret = CRYPT_AsnEncodeBits(dwCertEncodingType, lpszStructType,
&newBlob, dwFlags, pEncodePara, pbEncoded, pcbEncoded); &newBlob, dwFlags, pEncodePara, pbEncoded, pcbEncoded);
HeapFree(GetProcessHeap(), 0, newBlob.pbData); CryptMemFree(newBlob.pbData);
} }
__EXCEPT(page_fault) __EXCEPT(page_fault)
{ {
...@@ -5547,7 +5547,7 @@ static BOOL WINAPI CRYPT_ExportRsaPublicKeyInfoEx(HCRYPTPROV hCryptProv, ...@@ -5547,7 +5547,7 @@ static BOOL WINAPI CRYPT_ExportRsaPublicKeyInfoEx(HCRYPTPROV hCryptProv,
ret = CryptExportKey(key, 0, PUBLICKEYBLOB, 0, NULL, &keySize); ret = CryptExportKey(key, 0, PUBLICKEYBLOB, 0, NULL, &keySize);
if (ret) if (ret)
{ {
LPBYTE pubKey = HeapAlloc(GetProcessHeap(), 0, keySize); LPBYTE pubKey = CryptMemAlloc(keySize);
if (pubKey) if (pubKey)
{ {
...@@ -5591,7 +5591,7 @@ static BOOL WINAPI CRYPT_ExportRsaPublicKeyInfoEx(HCRYPTPROV hCryptProv, ...@@ -5591,7 +5591,7 @@ static BOOL WINAPI CRYPT_ExportRsaPublicKeyInfoEx(HCRYPTPROV hCryptProv,
} }
} }
} }
HeapFree(GetProcessHeap(), 0, pubKey); CryptMemFree(pubKey);
} }
else else
ret = FALSE; ret = FALSE;
...@@ -5656,7 +5656,7 @@ static BOOL WINAPI CRYPT_ImportRsaPublicKeyInfoEx(HCRYPTPROV hCryptProv, ...@@ -5656,7 +5656,7 @@ static BOOL WINAPI CRYPT_ImportRsaPublicKeyInfoEx(HCRYPTPROV hCryptProv,
pInfo->PublicKey.pbData, pInfo->PublicKey.cbData, 0, NULL, &pubKeySize); pInfo->PublicKey.pbData, pInfo->PublicKey.cbData, 0, NULL, &pubKeySize);
if (ret) if (ret)
{ {
LPBYTE pubKey = HeapAlloc(GetProcessHeap(), 0, pubKeySize); LPBYTE pubKey = CryptMemAlloc(pubKeySize);
if (pubKey) if (pubKey)
{ {
...@@ -5666,7 +5666,7 @@ static BOOL WINAPI CRYPT_ImportRsaPublicKeyInfoEx(HCRYPTPROV hCryptProv, ...@@ -5666,7 +5666,7 @@ static BOOL WINAPI CRYPT_ImportRsaPublicKeyInfoEx(HCRYPTPROV hCryptProv,
if (ret) if (ret)
ret = CryptImportKey(hCryptProv, pubKey, pubKeySize, 0, 0, ret = CryptImportKey(hCryptProv, pubKey, pubKeySize, 0, 0,
phKey); phKey);
HeapFree(GetProcessHeap(), 0, pubKey); CryptMemFree(pubKey);
} }
else else
ret = FALSE; ret = FALSE;
......
...@@ -196,7 +196,7 @@ BOOL unserialize_string(BYTE * ptr, DWORD *index, DWORD size, ...@@ -196,7 +196,7 @@ BOOL unserialize_string(BYTE * ptr, DWORD *index, DWORD size,
return FALSE; return FALSE;
} }
if (!(*data = HeapAlloc( GetProcessHeap(), 0, len*width))) if (!(*data = CryptMemAlloc( len*width)))
{ {
return FALSE; return FALSE;
} }
...@@ -538,19 +538,19 @@ void free_protect_data(struct protect_data_t * pInfo) ...@@ -538,19 +538,19 @@ void free_protect_data(struct protect_data_t * pInfo)
if (!pInfo) return; if (!pInfo) return;
if (pInfo->info0.pbData) if (pInfo->info0.pbData)
HeapFree( GetProcessHeap(), 0, pInfo->info0.pbData); CryptMemFree(pInfo->info0.pbData);
if (pInfo->info1.pbData) if (pInfo->info1.pbData)
HeapFree( GetProcessHeap(), 0, pInfo->info1.pbData); CryptMemFree(pInfo->info1.pbData);
if (pInfo->szDataDescr) if (pInfo->szDataDescr)
HeapFree( GetProcessHeap(), 0, pInfo->szDataDescr); CryptMemFree(pInfo->szDataDescr);
if (pInfo->data0.pbData) if (pInfo->data0.pbData)
HeapFree( GetProcessHeap(), 0, pInfo->data0.pbData); CryptMemFree(pInfo->data0.pbData);
if (pInfo->salt.pbData) if (pInfo->salt.pbData)
HeapFree( GetProcessHeap(), 0, pInfo->salt.pbData); CryptMemFree(pInfo->salt.pbData);
if (pInfo->cipher.pbData) if (pInfo->cipher.pbData)
HeapFree( GetProcessHeap(), 0, pInfo->cipher.pbData); CryptMemFree(pInfo->cipher.pbData);
if (pInfo->fingerprint.pbData) if (pInfo->fingerprint.pbData)
HeapFree( GetProcessHeap(), 0, pInfo->fingerprint.pbData); CryptMemFree(pInfo->fingerprint.pbData);
} }
/* copies a string into a data blob */ /* copies a string into a data blob */
...@@ -560,7 +560,7 @@ BYTE * convert_str_to_blob(char* str, DATA_BLOB* blob) ...@@ -560,7 +560,7 @@ BYTE * convert_str_to_blob(char* str, DATA_BLOB* blob)
if (!str || !blob) return NULL; if (!str || !blob) return NULL;
blob->cbData=strlen(str)+1; blob->cbData=strlen(str)+1;
if (!(blob->pbData=HeapAlloc(GetProcessHeap(),0,blob->cbData))) if (!(blob->pbData=CryptMemAlloc(blob->cbData)))
{ {
blob->cbData=0; blob->cbData=0;
} }
...@@ -598,7 +598,7 @@ BOOL fill_protect_data(struct protect_data_t * pInfo, LPCWSTR szDataDescr, ...@@ -598,7 +598,7 @@ BOOL fill_protect_data(struct protect_data_t * pInfo, LPCWSTR szDataDescr,
pInfo->null0=0x0000; pInfo->null0=0x0000;
if ((pInfo->szDataDescr=HeapAlloc( GetProcessHeap(), 0, (dwStrLen+1)*sizeof(WCHAR)))) if ((pInfo->szDataDescr=CryptMemAlloc((dwStrLen+1)*sizeof(WCHAR))))
{ {
memcpy(pInfo->szDataDescr,szDataDescr,(dwStrLen+1)*sizeof(WCHAR)); memcpy(pInfo->szDataDescr,szDataDescr,(dwStrLen+1)*sizeof(WCHAR));
} }
...@@ -614,7 +614,7 @@ BOOL fill_protect_data(struct protect_data_t * pInfo, LPCWSTR szDataDescr, ...@@ -614,7 +614,7 @@ BOOL fill_protect_data(struct protect_data_t * pInfo, LPCWSTR szDataDescr,
/* allocate memory to hold a salt */ /* allocate memory to hold a salt */
pInfo->salt.cbData=CRYPT32_PROTECTDATA_SALT_LEN; pInfo->salt.cbData=CRYPT32_PROTECTDATA_SALT_LEN;
if ((pInfo->salt.pbData=HeapAlloc( GetProcessHeap(),0,pInfo->salt.cbData))) if ((pInfo->salt.pbData=CryptMemAlloc(pInfo->salt.cbData)))
{ {
/* generate random salt */ /* generate random salt */
if (!CryptGenRandom(hProv, pInfo->salt.cbData, pInfo->salt.pbData)) if (!CryptGenRandom(hProv, pInfo->salt.cbData, pInfo->salt.pbData))
...@@ -667,7 +667,7 @@ BOOL convert_hash_to_blob(HCRYPTHASH hHash, DATA_BLOB * blob) ...@@ -667,7 +667,7 @@ BOOL convert_hash_to_blob(HCRYPTHASH hHash, DATA_BLOB * blob)
return FALSE; return FALSE;
} }
if (!(blob->pbData=HeapAlloc( GetProcessHeap(), 0, blob->cbData))) if (!(blob->pbData=CryptMemAlloc(blob->cbData)))
{ {
ERR("failed to allocate blob memory\n"); ERR("failed to allocate blob memory\n");
return FALSE; return FALSE;
...@@ -677,7 +677,7 @@ BOOL convert_hash_to_blob(HCRYPTHASH hHash, DATA_BLOB * blob) ...@@ -677,7 +677,7 @@ BOOL convert_hash_to_blob(HCRYPTHASH hHash, DATA_BLOB * blob)
if (!CryptGetHashParam(hHash, HP_HASHVAL, blob->pbData, &dwSize, 0)) if (!CryptGetHashParam(hHash, HP_HASHVAL, blob->pbData, &dwSize, 0))
{ {
ERR("failed to get hash value\n"); ERR("failed to get hash value\n");
HeapFree( GetProcessHeap(), 0, blob->pbData); CryptMemFree(blob->pbData);
blob->pbData=NULL; blob->pbData=NULL;
blob->cbData=0; blob->cbData=0;
return FALSE; return FALSE;
...@@ -705,7 +705,7 @@ BOOL hash_matches_blob(HCRYPTHASH hHash, DATA_BLOB * two) ...@@ -705,7 +705,7 @@ BOOL hash_matches_blob(HCRYPTHASH hHash, DATA_BLOB * two)
rc = TRUE; rc = TRUE;
} }
HeapFree( GetProcessHeap(), 0, one.pbData ); CryptMemFree(one.pbData);
return rc; return rc;
} }
...@@ -733,7 +733,7 @@ BOOL load_encryption_key(HCRYPTPROV hProv, DATA_BLOB * salt, ...@@ -733,7 +733,7 @@ BOOL load_encryption_key(HCRYPTPROV hProv, DATA_BLOB * salt,
dwUsernameLen = 0; dwUsernameLen = 0;
if (!GetUserNameA(NULL,&dwUsernameLen) && if (!GetUserNameA(NULL,&dwUsernameLen) &&
GetLastError()==ERROR_MORE_DATA && dwUsernameLen && GetLastError()==ERROR_MORE_DATA && dwUsernameLen &&
(szUsername = HeapAlloc( GetProcessHeap(), 0, dwUsernameLen))) (szUsername = CryptMemAlloc(dwUsernameLen)))
{ {
szUsername[0]='\0'; szUsername[0]='\0';
GetUserNameA( szUsername, &dwUsernameLen ); GetUserNameA( szUsername, &dwUsernameLen );
...@@ -768,7 +768,7 @@ BOOL load_encryption_key(HCRYPTPROV hProv, DATA_BLOB * salt, ...@@ -768,7 +768,7 @@ BOOL load_encryption_key(HCRYPTPROV hProv, DATA_BLOB * salt,
/* clean up */ /* clean up */
CryptDestroyHash(hSaltHash); CryptDestroyHash(hSaltHash);
if (szUsername) HeapFree( GetProcessHeap(), 0, szUsername ); if (szUsername) CryptMemFree(szUsername);
return rc; return rc;
} }
...@@ -902,10 +902,10 @@ BOOL WINAPI CryptProtectData(DATA_BLOB* pDataIn, ...@@ -902,10 +902,10 @@ BOOL WINAPI CryptProtectData(DATA_BLOB* pDataIn,
/* copy plain text into cipher area for CryptEncrypt call */ /* copy plain text into cipher area for CryptEncrypt call */
protect_data.cipher.cbData=dwLength; protect_data.cipher.cbData=dwLength;
if (!(protect_data.cipher.pbData=HeapAlloc( GetProcessHeap(), 0, if (!(protect_data.cipher.pbData=CryptMemAlloc(
protect_data.cipher.cbData))) protect_data.cipher.cbData)))
{ {
ERR("HeapAlloc\n"); ERR("CryptMemAlloc\n");
goto free_hash; goto free_hash;
} }
memcpy(protect_data.cipher.pbData,pDataIn->pbData,pDataIn->cbData); memcpy(protect_data.cipher.pbData,pDataIn->pbData,pDataIn->cbData);
...@@ -1068,7 +1068,7 @@ BOOL WINAPI CryptUnprotectData(DATA_BLOB* pDataIn, ...@@ -1068,7 +1068,7 @@ BOOL WINAPI CryptUnprotectData(DATA_BLOB* pDataIn,
pDataOut->cbData=protect_data.cipher.cbData; pDataOut->cbData=protect_data.cipher.cbData;
if (!(pDataOut->pbData=LocalAlloc( LPTR, pDataOut->cbData))) if (!(pDataOut->pbData=LocalAlloc( LPTR, pDataOut->cbData)))
{ {
ERR("HeapAlloc\n"); ERR("CryptMemAlloc\n");
goto free_hash; goto free_hash;
} }
memcpy(pDataOut->pbData,protect_data.cipher.pbData,protect_data.cipher.cbData); memcpy(pDataOut->pbData,protect_data.cipher.pbData,protect_data.cipher.cbData);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment