public byte[] DecryptData(EncryptedPacket encryptedPacket, RSAWithRSAParameterKey rsaParams) { // Decrypt AES Key with RSA var decryptedSessionKey = rsaParams.DecryptData(encryptedPacket.EncryptedSessionKey); // Decrypt our data with AES using the decryptedSessionKey return(_aes.Decrypt(encryptedPacket.EncryptedData, decryptedSessionKey, encryptedPacket.IV)); }
public byte[] DecryptData(EncryptedPacket encryptedPacket, RSAWithRSAParameterKey privateKey) { // Decrypt the unique 256 bits AES session key var sessionKey = privateKey.DecryptData(encryptedPacket.EncryptedSessionKey); // Validate the encrypted data is accurate using (var hmac = new HMACSHA256(sessionKey)) { var hmacToCheck = hmac.ComputeHash(encryptedPacket.EncryptedData); if (!CompareBytes(encryptedPacket.Hmac, hmacToCheck)) { throw new CryptographicException("HMAC invalid, data is corrupted."); } } // Decrypt the data var data = _aes.Decrypt(encryptedPacket.EncryptedData, sessionKey, encryptedPacket.Iv); return(data); }