public byte[] DecryptData(
			EncryptedPacket encryptedPacket, RSAWithRSAParameterKey rsaParams, DigitalSignature digitalSignature)
		{
			var decryptedSessionKey = rsaParams.DecryptData(encryptedPacket.EncryptedSessionKey);
			using (var hmac = new HMACSHA256(decryptedSessionKey))
			{
				var hmacToCheck = hmac.ComputeHash(encryptedPacket.EncryptedData);
				if (!Compare(encryptedPacket.Hmac, hmacToCheck))
					throw new CryptographicException("HMAC for decryption does not match encrypted packet.");

				if (!digitalSignature.VerifySignature(encryptedPacket.Hmac, encryptedPacket.Signature))
					throw new CryptographicException("Digital Signature can not be verified.");
			}

			var decryptedData = 
				_aes.Decrypt(encryptedPacket.EncryptedData, decryptedSessionKey, encryptedPacket.Iv);

			return decryptedData;
		}