示例#1
0
        // b - big endian bytes
        // g - serialized data
        // dhPrime - serialized data
        // returns big-endian G_B
        public static byte[] GetGB(byte[] bData, TLInt gData, TLString pString)
        {
            //var bBytes = new byte[256]; // big endian bytes
            //var random = new Random();
            //random.NextBytes(bBytes);

            var g = new BigInteger(gData.Value);
            var p = pString.ToBigInteger();
            var b = new BigInteger(bData.Reverse().Concat(new byte[] { 0x00 }).ToArray());

            var gb = BigInteger.ModPow(g, b, p).ToByteArray(); // little endian + (may be) zero last byte

            //remove last zero byte
            if (gb[gb.Length - 1] == 0x00)
            {
                gb = gb.SubArray(0, gb.Length - 1);
            }

            var length = gb.Length;
            var result = new byte[length];

            for (int i = 0; i < length; i++)
            {
                result[length - i - 1] = gb[i];
            }

            return(result);
        }