private async Task TokenizeString(TokenTableSet table, ConcurrentBag <BasicResult> results, string source)
        {
            var seeds  = new List <int>();
            var result = new BasicResult {
                Value = source
            };

            result = await Task.Run(() => TokenizeCycle(table, seeds, result));

            result.Action = ActionType.Tokenize;

            result.SourceValue = source;
            Encrypt(seeds, result);
            results.Add(result);
        }
 private void Encrypt(List <int> seeds, BasicResult result)
 {
     if (_settings.Encrypt)
     {
         var seed                = string.Join("|", seeds);
         var fullString          = seed + "[ENDSEED]" + result.Value;
         var doubleArray         = fullString.Select(c => (int)c).ToArray();
         var flatArray           = string.Join("|", doubleArray);
         var compressedFlatArray = _compression.Compress(flatArray);
         result.Value = _encryption.EncryptString(compressedFlatArray);
     }
     else
     {
         result.Seed = seeds;
     }
 }
        private async Task DetokenizeString(TokenTableSet table, ConcurrentBag <BasicResult> results, BasicRequest request)
        {
            Decrypt(request);

            if (request.Seed != null)
            {
                request.Seed.Reverse();
            }
            var result = new BasicResult {
                Value = request.Source
            };

            result = await Task.Run(() => DetokeniseCycle(table, request, result));

            result.Action      = ActionType.Detokenize;
            result.SourceValue = request.Source;
            results.Add(result);
        }
        private BasicResult TokenizeCycle(TokenTableSet table, List <int> seeds, BasicResult result)
        {
            var currentSeed = -1;

            if (_settings.Behaviour == Behaviour.RandomSeedInconsistent && !_settings.SeedPerCycle)
            {
                currentSeed = GetSeed(table.ForwardTable.Count);
                seeds.Add(currentSeed);
            }

            for (int i = 0; i < _settings.Cycles; i++)
            {
                if (_settings.Behaviour == Behaviour.RandomSeedInconsistent && _settings.SeedPerCycle)
                {
                    currentSeed = GetSeed(table.ForwardTable.Count);
                    seeds.Add(currentSeed);
                }
                result = Encode(result.Value, table.ForwardTable, currentSeed);
            }

            return(result);
        }
        private BasicResult DetokeniseCycle(TokenTableSet table, BasicRequest request, BasicResult result)
        {
            var seed = -1;

            if (_settings.Behaviour == Behaviour.RandomSeedInconsistent && !_settings.SeedPerCycle)
            {
                seed = request.Seed[0];
            }

            for (int i = 0; i < _settings.Cycles; i++)
            {
                if (_settings.Behaviour == Behaviour.RandomSeedInconsistent && _settings.SeedPerCycle)
                {
                    seed = request.Seed[i];
                }

                result = Encode(result.Value, table.ReverseTable, seed);
            }

            return(result);
        }