public EncryptedPacket EncryptData(byte[] original)
        {
            var sessionKey = aesEncryption.GenerateRandomNumber(32);
            var encryptedPacket = new EncryptedPacket() { Iv = aesEncryption.GenerateRandomNumber(16) };
            encryptedPacket.EncryptedData = aesEncryption.EncryptAes(original, sessionKey, encryptedPacket.Iv);
            encryptedPacket.EncryptedSessionKey = asymmetricEncryption.EncryptData(sessionKey);
            using (var hmac = new HMACSHA256(sessionKey))
            {
                encryptedPacket.Hmac = hmac.ComputeHash(encryptedPacket.EncryptedData);
            }

            return encryptedPacket;
        }
        public byte[] DecryptData(EncryptedPacket encryptedPacket)
        {
            var decryptedSessionKey = asymmetricEncryption.DecryptData(encryptedPacket.EncryptedSessionKey);

            using (var hmac = new HMACSHA256(decryptedSessionKey))
            {
                var hmacToCheck = hmac.ComputeHash(encryptedPacket.EncryptedData);
                if (!Compare(encryptedPacket.Hmac, hmacToCheck))
                {
                    throw new CryptographicException("HMAC comparison failed");
                }
            }

            var decryptedData = aesEncryption.DecryptAes(encryptedPacket.EncryptedData, decryptedSessionKey,
                encryptedPacket.Iv);
            return decryptedData;
        }