Module: wine Branch: master Commit: d2827be07f42d4d59d2bb3d83894d58fc85bbaba URL: http://source.winehq.org/git/wine.git/?a=commit;h=d2827be07f42d4d59d2bb3d838...
Author: Juan Lang juan.lang@gmail.com Date: Fri Aug 7 10:53:47 2009 -0700
rsaenh: Implement exporting PLAINTEXTKEYBLOBs.
---
dlls/rsaenh/rsaenh.c | 30 ++++++++++++++++++++++++++++++ 1 files changed, 30 insertions(+), 0 deletions(-)
diff --git a/dlls/rsaenh/rsaenh.c b/dlls/rsaenh/rsaenh.c index dbc78c7..8ae9659 100644 --- a/dlls/rsaenh/rsaenh.c +++ b/dlls/rsaenh/rsaenh.c @@ -2481,6 +2481,33 @@ static BOOL crypt_export_private_key(CRYPTKEY *pCryptKey, BOOL force, return TRUE; }
+static BOOL crypt_export_plaintext_key(CRYPTKEY *pCryptKey, BYTE *pbData, + DWORD *pdwDataLen) +{ + BLOBHEADER *pBlobHeader = (BLOBHEADER*)pbData; + DWORD *pKeyLen = (DWORD*)(pBlobHeader+1); + BYTE *pbKey = (BYTE*)(pKeyLen+1); + DWORD dwDataLen; + + dwDataLen = sizeof(BLOBHEADER) + sizeof(DWORD) + pCryptKey->dwKeyLen; + if (pbData) { + if (*pdwDataLen < dwDataLen) { + SetLastError(ERROR_MORE_DATA); + *pdwDataLen = dwDataLen; + return FALSE; + } + + pBlobHeader->bType = PLAINTEXTKEYBLOB; + pBlobHeader->bVersion = CUR_BLOB_VERSION; + pBlobHeader->reserved = 0; + pBlobHeader->aiKeyAlg = pCryptKey->aiAlgid; + + *pKeyLen = pCryptKey->dwKeyLen; + memcpy(pbKey, &pCryptKey->abKeyValue, pCryptKey->dwKeyLen); + } + *pdwDataLen = dwDataLen; + return TRUE; +} /****************************************************************************** * crypt_export_key [Internal] * @@ -2535,6 +2562,9 @@ static BOOL crypt_export_key(CRYPTKEY *pCryptKey, HCRYPTKEY hPubKey,
case PRIVATEKEYBLOB: return crypt_export_private_key(pCryptKey, force, pbData, pdwDataLen); + + case PLAINTEXTKEYBLOB: + return crypt_export_plaintext_key(pCryptKey, pbData, pdwDataLen);
default: SetLastError(NTE_BAD_TYPE); /* FIXME: error code? */