crypt32: Support getting and setting the KP_PADDING key param.

This commit is contained in:
Juan Lang 2007-11-28 09:20:23 -08:00 committed by Alexandre Julliard
parent f6705c67eb
commit c9e0fa442a
1 changed files with 20 additions and 8 deletions

View File

@ -2798,6 +2798,14 @@ BOOL WINAPI RSAENH_CPSetKeyParam(HCRYPTPROV hProv, HCRYPTKEY hKey, DWORD dwParam
} }
switch (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: case KP_MODE:
pCryptKey->dwMode = *(DWORD*)pbData; pCryptKey->dwMode = *(DWORD*)pbData;
return TRUE; return TRUE;
@ -2901,7 +2909,7 @@ BOOL WINAPI RSAENH_CPGetKeyParam(HCRYPTPROV hProv, HCRYPTKEY hKey, DWORD dwParam
DWORD *pdwDataLen, DWORD dwFlags) DWORD *pdwDataLen, DWORD dwFlags)
{ {
CRYPTKEY *pCryptKey; CRYPTKEY *pCryptKey;
DWORD dwBitLen; DWORD dwValue;
TRACE("(hProv=%08lx, hKey=%08lx, dwParam=%08x, pbData=%p, pdwDataLen=%p dwFlags=%08x)\n", TRACE("(hProv=%08lx, hKey=%08lx, dwParam=%08x, pbData=%p, pdwDataLen=%p dwFlags=%08x)\n",
hProv, hKey, dwParam, pbData, pdwDataLen, dwFlags); hProv, hKey, dwParam, pbData, pdwDataLen, dwFlags);
@ -2933,20 +2941,24 @@ BOOL WINAPI RSAENH_CPGetKeyParam(HCRYPTPROV hProv, HCRYPTKEY hKey, DWORD dwParam
return copy_param(pbData, pdwDataLen, return copy_param(pbData, pdwDataLen,
(CONST BYTE*)&pCryptKey->abKeyValue[pCryptKey->dwKeyLen], pCryptKey->dwSaltLen); (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: case KP_KEYLEN:
dwBitLen = pCryptKey->dwKeyLen << 3; dwValue = pCryptKey->dwKeyLen << 3;
return copy_param(pbData, pdwDataLen, (CONST BYTE*)&dwBitLen, sizeof(DWORD)); return copy_param(pbData, pdwDataLen, (CONST BYTE*)&dwValue, sizeof(DWORD));
case KP_EFFECTIVE_KEYLEN: case KP_EFFECTIVE_KEYLEN:
if (pCryptKey->dwEffectiveKeyLen) if (pCryptKey->dwEffectiveKeyLen)
dwBitLen = pCryptKey->dwEffectiveKeyLen; dwValue = pCryptKey->dwEffectiveKeyLen;
else else
dwBitLen = pCryptKey->dwKeyLen << 3; dwValue = pCryptKey->dwKeyLen << 3;
return copy_param(pbData, pdwDataLen, (CONST BYTE*)&dwBitLen, sizeof(DWORD)); return copy_param(pbData, pdwDataLen, (CONST BYTE*)&dwValue, sizeof(DWORD));
case KP_BLOCKLEN: case KP_BLOCKLEN:
dwBitLen = pCryptKey->dwBlockLen << 3; dwValue = pCryptKey->dwBlockLen << 3;
return copy_param(pbData, pdwDataLen, (CONST BYTE*)&dwBitLen, sizeof(DWORD)); return copy_param(pbData, pdwDataLen, (CONST BYTE*)&dwValue, sizeof(DWORD));
case KP_MODE: case KP_MODE:
return copy_param(pbData, pdwDataLen, (CONST BYTE*)&pCryptKey->dwMode, sizeof(DWORD)); return copy_param(pbData, pdwDataLen, (CONST BYTE*)&pCryptKey->dwMode, sizeof(DWORD));