Autosyncing with Wine HEAD

svn path=/trunk/; revision=31793
This commit is contained in:
The Wine Synchronizer 2008-01-14 16:27:48 +00:00
parent d254b4ea52
commit f9c674b43c
2 changed files with 39 additions and 8 deletions

View file

@ -2798,6 +2798,14 @@ BOOL WINAPI RSAENH_CPSetKeyParam(HCRYPTPROV hProv, HCRYPTKEY hKey, DWORD dwParam
}
switch (dwParam) {
case KP_PADDING:
/* The MS providers only support PKCS5_PADDING */
if (*(DWORD *)pbData != PKCS5_PADDING) {
SetLastError(NTE_BAD_DATA);
return FALSE;
}
return TRUE;
case KP_MODE:
pCryptKey->dwMode = *(DWORD*)pbData;
return TRUE;
@ -2815,6 +2823,23 @@ BOOL WINAPI RSAENH_CPSetKeyParam(HCRYPTPROV hProv, HCRYPTKEY hKey, DWORD dwParam
setup_key(pCryptKey);
return TRUE;
case KP_SALT_EX:
{
CRYPT_INTEGER_BLOB *blob = (CRYPT_INTEGER_BLOB *)pbData;
/* salt length can't be greater than 128 bits = 16 bytes */
if (blob->cbData > 16)
{
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
memcpy(pCryptKey->abKeyValue + pCryptKey->dwKeyLen, blob->pbData,
blob->cbData);
pCryptKey->dwSaltLen = blob->cbData;
setup_key(pCryptKey);
return TRUE;
}
case KP_EFFECTIVE_KEYLEN:
switch (pCryptKey->aiAlgid) {
case CALG_RC2:
@ -2901,7 +2926,7 @@ BOOL WINAPI RSAENH_CPGetKeyParam(HCRYPTPROV hProv, HCRYPTKEY hKey, DWORD dwParam
DWORD *pdwDataLen, DWORD dwFlags)
{
CRYPTKEY *pCryptKey;
DWORD dwBitLen;
DWORD dwValue;
TRACE("(hProv=%08lx, hKey=%08lx, dwParam=%08x, pbData=%p, pdwDataLen=%p dwFlags=%08x)\n",
hProv, hKey, dwParam, pbData, pdwDataLen, dwFlags);
@ -2933,20 +2958,24 @@ BOOL WINAPI RSAENH_CPGetKeyParam(HCRYPTPROV hProv, HCRYPTKEY hKey, DWORD dwParam
return copy_param(pbData, pdwDataLen,
(CONST BYTE*)&pCryptKey->abKeyValue[pCryptKey->dwKeyLen], pCryptKey->dwSaltLen);
case KP_PADDING:
dwValue = PKCS5_PADDING;
return copy_param(pbData, pdwDataLen, (CONST BYTE*)&dwValue, sizeof(DWORD));
case KP_KEYLEN:
dwBitLen = pCryptKey->dwKeyLen << 3;
return copy_param(pbData, pdwDataLen, (CONST BYTE*)&dwBitLen, sizeof(DWORD));
dwValue = pCryptKey->dwKeyLen << 3;
return copy_param(pbData, pdwDataLen, (CONST BYTE*)&dwValue, sizeof(DWORD));
case KP_EFFECTIVE_KEYLEN:
if (pCryptKey->dwEffectiveKeyLen)
dwBitLen = pCryptKey->dwEffectiveKeyLen;
dwValue = pCryptKey->dwEffectiveKeyLen;
else
dwBitLen = pCryptKey->dwKeyLen << 3;
return copy_param(pbData, pdwDataLen, (CONST BYTE*)&dwBitLen, sizeof(DWORD));
dwValue = pCryptKey->dwKeyLen << 3;
return copy_param(pbData, pdwDataLen, (CONST BYTE*)&dwValue, sizeof(DWORD));
case KP_BLOCKLEN:
dwBitLen = pCryptKey->dwBlockLen << 3;
return copy_param(pbData, pdwDataLen, (CONST BYTE*)&dwBitLen, sizeof(DWORD));
dwValue = pCryptKey->dwBlockLen << 3;
return copy_param(pbData, pdwDataLen, (CONST BYTE*)&dwValue, sizeof(DWORD));
case KP_MODE:
return copy_param(pbData, pdwDataLen, (CONST BYTE*)&pCryptKey->dwMode, sizeof(DWORD));

View file

@ -1,5 +1,6 @@
<?xml version="1.0"?>
<!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd">
<group>
<module name="rsaenh" type="win32dll" baseaddress="${BASEADDRESS_RSAENH}" installbase="system32" installname="rsaenh.dll" allowwarnings="true">
<autoregister infsection="OleControlDlls" type="DllRegisterServer" />
<importlibrary definition="rsaenh.spec.def" />
@ -26,3 +27,4 @@
<file>version.rc</file>
<file>rsaenh.spec</file>
</module>
</group>