Trim() 개인적인 정적인 메소드

private static Trim ( byte a, int length ) : byte[]
a byte
length int
리턴 byte[]
예제 #1
0
        public static int[] GenerateCompactWindowNaf(int width, BigInteger k)
        {
            if (width == 2)
            {
                return(WNafUtilities.GenerateCompactNaf(k));
            }
            if (width < 2 || width > 16)
            {
                throw new ArgumentException("must be in the range [2, 16]", "width");
            }
            if (k.BitLength >> 16 != 0)
            {
                throw new ArgumentException("must have bitlength < 2^16", "k");
            }
            if (k.SignValue == 0)
            {
                return(WNafUtilities.EMPTY_INTS);
            }
            int[] array = new int[k.BitLength / width + 1];
            int   num   = 1 << width;
            int   num2  = num - 1;
            int   num3  = num >> 1;
            bool  flag  = false;
            int   num4  = 0;
            int   i     = 0;

            while (i <= k.BitLength)
            {
                if (k.TestBit(i) == flag)
                {
                    i++;
                }
                else
                {
                    k = k.ShiftRight(i);
                    int num5 = k.IntValue & num2;
                    if (flag)
                    {
                        num5++;
                    }
                    flag = ((num5 & num3) != 0);
                    if (flag)
                    {
                        num5 -= num;
                    }
                    int num6 = (num4 > 0) ? (i - 1) : i;
                    array[num4++] = (num5 << 16 | num6);
                    i             = width;
                }
            }
            if (array.Length > num4)
            {
                array = WNafUtilities.Trim(array, num4);
            }
            return(array);
        }
예제 #2
0
        public static byte[] GenerateJsf(BigInteger g, BigInteger h)
        {
            int num = Math.Max(g.BitLength, h.BitLength) + 1;

            byte[]     array       = new byte[num];
            BigInteger bigInteger  = g;
            BigInteger bigInteger2 = h;
            int        num2        = 0;
            int        num3        = 0;
            int        num4        = 0;
            int        num5        = 0;

            while ((num3 | num4) != 0 || bigInteger.BitLength > num5 || bigInteger2.BitLength > num5)
            {
                int num6 = (int)(((uint)bigInteger.IntValue >> num5) + (uint)num3 & 7u);
                int num7 = (int)(((uint)bigInteger2.IntValue >> num5) + (uint)num4 & 7u);
                int num8 = num6 & 1;
                if (num8 != 0)
                {
                    num8 -= (num6 & 2);
                    if (num6 + num8 == 4 && (num7 & 3) == 2)
                    {
                        num8 = -num8;
                    }
                }
                int num9 = num7 & 1;
                if (num9 != 0)
                {
                    num9 -= (num7 & 2);
                    if (num7 + num9 == 4 && (num6 & 3) == 2)
                    {
                        num9 = -num9;
                    }
                }
                if (num3 << 1 == 1 + num8)
                {
                    num3 ^= 1;
                }
                if (num4 << 1 == 1 + num9)
                {
                    num4 ^= 1;
                }
                if (++num5 == 30)
                {
                    num5        = 0;
                    bigInteger  = bigInteger.ShiftRight(30);
                    bigInteger2 = bigInteger2.ShiftRight(30);
                }
                array[num2++] = (byte)(num8 << 4 | (num9 & 15));
            }
            if (array.Length > num2)
            {
                array = WNafUtilities.Trim(array, num2);
            }
            return(array);
        }
예제 #3
0
        public static byte[] GenerateWindowNaf(int width, BigInteger k)
        {
            if (width == 2)
            {
                return(WNafUtilities.GenerateNaf(k));
            }
            if (width < 2 || width > 8)
            {
                throw new ArgumentException("must be in the range [2, 8]", "width");
            }
            if (k.SignValue == 0)
            {
                return(WNafUtilities.EMPTY_BYTES);
            }
            byte[] array = new byte[k.BitLength + 1];
            int    num   = 1 << width;
            int    num2  = num - 1;
            int    num3  = num >> 1;
            bool   flag  = false;
            int    num4  = 0;
            int    i     = 0;

            while (i <= k.BitLength)
            {
                if (k.TestBit(i) == flag)
                {
                    i++;
                }
                else
                {
                    k = k.ShiftRight(i);
                    int num5 = k.IntValue & num2;
                    if (flag)
                    {
                        num5++;
                    }
                    flag = ((num5 & num3) != 0);
                    if (flag)
                    {
                        num5 -= num;
                    }
                    num4         += ((num4 > 0) ? (i - 1) : i);
                    array[num4++] = (byte)num5;
                    i             = width;
                }
            }
            if (array.Length > num4)
            {
                array = WNafUtilities.Trim(array, num4);
            }
            return(array);
        }
예제 #4
0
        public static int[] GenerateCompactNaf(BigInteger k)
        {
            if (k.BitLength >> 16 != 0)
            {
                throw new ArgumentException("must have bitlength < 2^16", "k");
            }
            if (k.SignValue == 0)
            {
                return(WNafUtilities.EMPTY_INTS);
            }
            BigInteger bigInteger = k.ShiftLeft(1).Add(k);
            int        bitLength  = bigInteger.BitLength;

            int[]      array       = new int[bitLength >> 1];
            BigInteger bigInteger2 = bigInteger.Xor(k);
            int        num         = bitLength - 1;
            int        num2        = 0;
            int        num3        = 0;

            for (int i = 1; i < num; i++)
            {
                if (!bigInteger2.TestBit(i))
                {
                    num3++;
                }
                else
                {
                    int num4 = k.TestBit(i) ? -1 : 1;
                    array[num2++] = (num4 << 16 | num3);
                    num3          = 1;
                    i++;
                }
            }
            array[num2++] = (65536 | num3);
            if (array.Length > num2)
            {
                array = WNafUtilities.Trim(array, num2);
            }
            return(array);
        }