Example #1
0
        private static unsafe void DoKeccakForAllBlocks(byte *msg, long len, Keccak_abstract state, int blockLen, long skippedBlock)
        {
            byte *cur = msg;
            long  i;
            long  SB = 0;

            for (i = 0; i <= len - blockLen; SB++)
            {
                var cr = cur;
                var fl = false;
                for (int j = 0; j < blockLen; j++)
                {
                    // Специально для тестирования пропускаем блоки, где нет данных
                    if (cr[j] != 0 && cr[j] != 255)
                    {
                        fl = true;
                        break;
                    }
                }

                if (fl && SB != skippedBlock)
                {
                    cryptoprime.keccak.Keccackf((ulong *)cur, state.Clong, state.Blong);
                }

                cur += blockLen;
                i   += blockLen;
                if (i > len - blockLen && i != len && SB != skippedBlock)
                {
                    var size = blockLen - len % blockLen;
                    i   -= size;
                    cur -= size;
                }
            }
        }
        private static unsafe void DoKeccakForAllBlocks(byte *msg, long len, Keccak_abstract state, int blockLen)
        {
            byte *cur = msg;
            long  i;
            long  SB = 0;

            for (i = 0; i <= len - blockLen; SB++)
            {
                cryptoprime.keccak.Keccackf((ulong *)cur, state.Clong, state.Blong);

                cur += blockLen;
                i   += blockLen;
                if (i > len - blockLen && i != len)
                {
                    var size = blockLen - len % blockLen;
                    i   -= size;
                    cur -= size;
                }
            }
        }
        private static unsafe void DoThreefishForAllBlocks(byte *msg, long len, ulong *tweak, Keccak_abstract state, int blockLen, ushort *table, int tableLen)
        {
            byte *cur = msg;

            for (int i = 0; i <= len - blockLen; i += blockLen)
            {
                var cr = cur;
                var fl = false;
                for (int j = 0; j < blockLen; j++)
                {
                    // Специально для тестирования пропускаем блоки, где нет данных
                    if (cr[j] != 0 && cr[j] != 255)
                    {
                        fl = true;
                        break;
                    }
                }

                if (fl)
                {
                    var text = cur + 128;
                    if (i == len - blockLen)
                    {
                        text = msg;
                    }

                    CodeGenerated.Cryptoprimes.Threefish_Static_Generated.Threefish1024_step((ulong *)cur, (ulong *)tweak, (ulong *)text);
                }

                cur += blockLen;
            }
        }