private static RecoveryState InnerReduceB0(RecoveryState state, int index, IEnumerable <Block> blocks)
        {
            var b0s = blocks
                      .Select(block => state.PartialKey.PartialDecrypt(index, block))
                      .Where(decryptedBlock => Block.IsB0Part((uint)decryptedBlock.Values[index]));

            return(b0s.Any() ? RecoveryState.CreateFromB0Blocks(state, b0s) : null);
        }
        private static RecoveryState InnerReduceSequential(RecoveryState state, int index, IEnumerable <Block> blocks)
        {
            var sequences = blocks
                            .Select(block => state.PartialKey.PartialDecrypt(index, block))
                            .Where(decryptedBlock => Block.IsSequencePart(decryptedBlock.Values[index]));

            return(sequences.Any() ? RecoveryState.CreateFromSequentialBlocks(state, sequences) : null);
        }