示例#1
0
        public IEnumerable<IProtocolStep> Execute(CascadeProtocolRuntimeEnvironment environment)
        {
            foreach (var keyItem in environment.BobKey)
            {
                keyItem.ErrorHere = false;
            }

            return null;
        }
 public IEnumerable<IProtocolStep> Execute(CascadeProtocolRuntimeEnvironment environment)
 {
     while (OddErrorsBlocksSetNotEmpty(environment))
     {
         yield return new FindSmallestOddErrorBlockStep();
         yield return new CorrectErrorByBinaryStep();
         yield return new BackTrackCorrectedErrorStep();
     }
 }
示例#3
0
 public IEnumerable<IProtocolStep> Execute(CascadeProtocolRuntimeEnvironment environment)
 {
     yield return new ShowInitialErrorsStep();
     yield return new HideInitialErrorsStep();
     for (int i = 0; i < 4; ++i)
     {
         yield return new OnePassStep(i);
     }
 }
示例#4
0
 public IEnumerable<IProtocolStep> Execute(CascadeProtocolRuntimeEnvironment environment)
 {
     environment.Pass = _pass;
     yield return new ShowCurrentPassStep(_pass);
     yield return new FillBlocksWithRandomPermutationStep();
     yield return new CalculateParitiesStep();
     yield return new CheckParitiesStep();
     yield return new SetOddErrorsBlocksStep();
     yield return new ProcessOddErrorsBlocksStep();
 }
示例#5
0
        public IEnumerable<IProtocolStep> Execute(CascadeProtocolRuntimeEnvironment environment)
        {
            for (var i = 0; i < environment.KeyLength; i++)
            {
                if (environment.AliceKey[i].Value != environment.BobKey[i].Value)
                {
                    environment.BobKey[i].ErrorHere = true;
                }
            }

            return null;
        }
        public IEnumerable<IProtocolStep> Execute(CascadeProtocolRuntimeEnvironment environment)
        {
            yield return new InitializeBinaryCorrectionStep();

            while (environment.BinaryEnvironment.PositionsCount > 1)
            {
                yield return new LookAtFirstHalfOfWorkingPositionsStep();
                yield return new CalculateWorkingPositionsParityStep();
                yield return new CompareWorkingPositionsParityStep();
                yield return new UpdateWorkingPositionsStep();
            }

            yield return new CorrectErrorInFoundPositionStep();
        }
        public IEnumerable<IProtocolStep> Execute(CascadeProtocolRuntimeEnvironment environment)
        {
            environment.OddErrorsCountBlocks.Clear();
            for (var i = 0; i < environment.Pass + 1; ++i)
            {
                for (var j = 0; j < environment.AliceBlocks[i].Count; ++j)
                {
                    if (environment.AliceBlocks[i][j].Parity != environment.BobBlocks[i][j].Parity)
                    {
                        environment.OddErrorsCountBlocks.Add(environment.BobBlocks[i][j]);
                    }
                }
            }

            return null;
        }
        public IEnumerable<IProtocolStep> Execute(CascadeProtocolRuntimeEnvironment environment)
        {
            environment.BinaryEnvironment.StartPosition = 0;
            environment.BinaryEnvironment.PositionsCount = environment.BinaryEnvironment.WorkingBlock.Size;
            environment.BinaryEnvironment.SampleBlock =
                environment.AliceBlocks.SelectMany(list => list)
                           .Single(
                               block => block.Size == environment.BinaryEnvironment.WorkingBlock.Size &&
                                        block.KeyItems[0].Position ==
                                        environment.BinaryEnvironment.WorkingBlock.KeyItems[0].Position);
            foreach (var keyItem in environment.BinaryEnvironment.WorkingBlock.KeyItems)
            {
                keyItem.ErrorHere = true;
            }

            return null;
        }
        public IEnumerable<IProtocolStep> Execute(CascadeProtocolRuntimeEnvironment environment)
        {
            var correctedItem = environment.BinaryEnvironment.WorkingBlock.KeyItems.Single(item => item.ErrorHere);
            correctedItem.ErrorHere = false;
            var position = correctedItem.Position;

            foreach (var block in Enumerable.Range(0,environment.Pass + 1).SelectMany(i => environment.BobBlocks[i]).Where(block => block.KeyItems.Any(item => item.Position == position)))
            {
                if (environment.OddErrorsCountBlocks.Contains(block))
                {
                    environment.OddErrorsCountBlocks.Remove(block);
                }
                else
                {
                    environment.OddErrorsCountBlocks.Add(block);
                }
            }

            return null;
        }
        public IEnumerable<IProtocolStep> Execute(CascadeProtocolRuntimeEnvironment environment)
        {
            var parityMatch = environment.BinaryEnvironment.SampleParity ==
                              environment.BinaryEnvironment.WorkingParity;

            environment.BinaryEnvironment.PositionsCount /= 2;
            foreach (
                var item in
                    environment.BinaryEnvironment.WorkingBlock.KeyItems.Skip(
                        environment.BinaryEnvironment.StartPosition +
                        (parityMatch ? 0 : (environment.BinaryEnvironment.PositionsCount)))
                               .Take(environment.BinaryEnvironment.PositionsCount))
            {
                item.ErrorHere = false;
            }

            if (parityMatch)
            {
                environment.BinaryEnvironment.StartPosition += environment.BinaryEnvironment.PositionsCount;
            }

            return null;
        }
示例#11
0
 public IEnumerable<IProtocolStep> Execute(CascadeProtocolRuntimeEnvironment environment)
 {
     return null;
 }
 public IEnumerable<IProtocolStep> Execute(CascadeProtocolRuntimeEnvironment environment)
 {
     environment.BinaryEnvironment.WorkingBlock = environment.OddErrorsCountBlocks.OrderBy(block => block.Size).First();
     return null;
 }
 private bool OddErrorsBlocksSetNotEmpty(CascadeProtocolRuntimeEnvironment environment)
 {
     return environment.OddErrorsCountBlocks.Any();
 }
示例#14
0
 public IEnumerable<IProtocolStep> Execute(CascadeProtocolRuntimeEnvironment environment)
 {
     Description = "Вычисление чётностей блоков";
     return null;
 }