private unsafe Exception?TryDecryptTrans(KeyTransRecipientInfo recipientInfo, SafeProvOrNCryptKeyHandle hKey, CryptKeySpec keySpec) { KeyTransRecipientInfoPalWindows pal = (KeyTransRecipientInfoPalWindows)(recipientInfo.Pal); bool keyAddRefd = false; try { CMSG_CTRL_DECRYPT_PARA decryptPara; decryptPara.cbSize = sizeof(CMSG_CTRL_DECRYPT_PARA); hKey.DangerousAddRef(ref keyAddRefd); decryptPara.hKey = hKey.DangerousGetHandle(); decryptPara.dwKeySpec = keySpec; decryptPara.dwRecipientIndex = pal.Index; bool success = Interop.Crypt32.CryptMsgControl(_hCryptMsg, 0, MsgControlType.CMSG_CTRL_DECRYPT, ref decryptPara); if (!success) { return(Marshal.GetHRForLastWin32Error().ToCryptographicException()); } return(null); } finally { if (keyAddRefd) { hKey.DangerousRelease(); } } }
private Exception TryDecryptTrans(KeyTransRecipientInfo recipientInfo, SafeProvOrNCryptKeyHandle hKey, CryptKeySpec keySpec) { KeyTransRecipientInfoPalWindows pal = (KeyTransRecipientInfoPalWindows)(recipientInfo.Pal); CMSG_CTRL_DECRYPT_PARA decryptPara; decryptPara.cbSize = Marshal.SizeOf <CMSG_CTRL_DECRYPT_PARA>(); decryptPara.hKey = hKey; decryptPara.dwKeySpec = keySpec; decryptPara.dwRecipientIndex = pal.Index; bool success = Interop.Crypt32.CryptMsgControl(_hCryptMsg, 0, MsgControlType.CMSG_CTRL_DECRYPT, ref decryptPara); if (!success) { return(Marshal.GetHRForLastWin32Error().ToCryptographicException()); } return(null); }