예제 #1
0
        private static bool testForBits_getMultiHash40(ref int pc, int hc, SHA3 sha)
        {
            var size  = 32;
            var sizeb = size << 3;

            byte[] result = null;
            byte[] inData = new byte[size];

            int[,] counts = new int[sizeb, sizeb];

            BytesBuilder.ToNull(inData);
            for (int i = 0; i < sizeb; i++)
            {
                setBitInArray(inData, i);

                for (int j = 0; j < sizeb; j++)
                {
                    if (i == j)
                    {
                        continue;
                    }

                    setBitInArray(inData, j);

                    SHA3.getMultiHash40(inData, out result, ref pc, hc, sha, size);
                    //SHA3.getMultiHash20(inData, out result, ref pc, hc, sha, size);
                    //result = sha.getHash512(inData);
                    //result = new testCiphers.RC4(inData).getGamma(size);
                    toResult(sizeb, i, j, result, counts);

                    setBitInArray(inData, j, false);
                }

                setBitInArray(inData, i, false);
            }

            double суммарнаяВероятность, минимальнаяВероятность, множительВероятностей, отклонениеОтЭталона, отклонениеОтЭталонаВниз, отклонениеОтЭталонаВверх;

            double[,] вероятность;
            getCountsResult(sizeb, counts, out вероятность, out минимальнаяВероятность, out множительВероятностей, out суммарнаяВероятность, out отклонениеОтЭталона, out отклонениеОтЭталонаВниз, out отклонениеОтЭталонаВверх);

            if (множительВероятностей > 1.01 || суммарнаяВероятность < 0.01 || отклонениеОтЭталонаВниз > 0.10 || отклонениеОтЭталонаВверх > 0.10 || минимальнаяВероятность < 0.001)
            {
                return(false);
            }

            return(true);
        }