public string Create(string plainText)
        {
            if (string.IsNullOrEmpty(plainText))
            {
                throw new ArgumentException("Value cannot be null or empty.", nameof(plainText));
            }

            var tokenStorageItem = new TokenStorageItem();

            var salt      = SaltUtil.GenerateSecureRandomSalt();
            var encrypted = EncryptionProvider.Encrypt(plainText, KeyVaultUtil.GetSecureSecretFromVault(), salt);

            if (encrypted != null)
            {
                tokenStorageItem = new TokenStorageItem
                {
                    Token           = CreateTokenGuid(),
                    SaltValue       = salt,
                    EcnryptedValue  = encrypted,
                    CreateDateTime  = DateTime.UtcNow,
                    UpdatedDateTime = DateTime.UtcNow
                };
            }

            //write or append to json file
            WriteAppendDataItem(tokenStorageItem);

            return(tokenStorageItem.Token);
        }
        public void EncryptDecrypt_WithSpecialChars_Test()
        {
            var passPhrase = KeyVaultUtil.GetSecureSecretFromVault();
            var data       = "Some secret user's data¡";
            var salt       = SaltUtil.GenerateSecureRandomSalt();

            AesManagedProvider crypto    = new AesManagedProvider();
            string             encrypted = crypto.Encrypt(data, passPhrase, salt);
            string             decrypted = crypto.Decrypt(encrypted, passPhrase, salt);

            Assert.AreEqual(data, decrypted);
        }
        public void Decrypt_FailSalt_Test()
        {
            var passPhrase = KeyVaultUtil.GetSecureSecretFromVault();
            var data       = "4111111111111111";
            var salt       = SaltUtil.GenerateSecureRandomSalt();

            AesManagedProvider crypto    = new AesManagedProvider();
            string             encrypted = crypto.Encrypt(data, passPhrase, salt);
            string             decrypted = crypto.Decrypt(encrypted, passPhrase, "sldfjsdlksld");

            Assert.IsNull(decrypted);
        }
        public void EncryptDecrypt_CC_Number_Test()
        {
            var passPhrase = KeyVaultUtil.GetSecureSecretFromVault();
            var data       = "4111111111111111";
            var salt       = SaltUtil.GenerateSecureRandomSalt();

            AesManagedProvider crypto    = new AesManagedProvider();
            string             encrypted = crypto.Encrypt(data, passPhrase, salt);
            string             decrypted = crypto.Decrypt(encrypted, passPhrase, salt);

            Assert.AreEqual(data, decrypted);
        }
        public void EncryptDecrypt_LargeText__Test()
        {
            var passPhrase = KeyVaultUtil.GetSecureSecretFromVault();
            var data       = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. " +
                             "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure " +
                             "dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. " +
                             "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";

            var salt = SaltUtil.GenerateSecureRandomSalt();

            AesManagedProvider crypto    = new AesManagedProvider();
            string             encrypted = crypto.Encrypt(data, passPhrase, salt);
            string             decrypted = crypto.Decrypt(encrypted, passPhrase, salt);

            Assert.AreEqual(data, decrypted);
        }