public EncryptedPacket EncryptData(
			byte[] original, RSAWithRSAParameterKey rsaParams, DigitalSignature digitalSignature)
		{
			const int sessionKeyLength = 32;
			const int ivLength = 16;

			byte[] sessionKey = _aes.GenerateRandomNumber(sessionKeyLength);
			EncryptedPacket encryptedPacket = new EncryptedPacket { Iv = _aes.GenerateRandomNumber(ivLength) };
			encryptedPacket.EncryptedData = _aes.Encrypt(original, sessionKey, encryptedPacket.Iv);
			encryptedPacket.EncryptedSessionKey = rsaParams.EncryptData(sessionKey);

			using (var hmac = new HMACSHA256(sessionKey))
			{
				encryptedPacket.Hmac = hmac.ComputeHash(encryptedPacket.EncryptedData);
			}
			encryptedPacket.Signature = digitalSignature.SignData(encryptedPacket.Hmac);

			return encryptedPacket;
		}