コード例 #1
0
        public byte[] ServerProof(ByteArrayBuilderV2 data)
        {
            int num;

            this.pack.Clear();
            byte[] array   = data.GetArray(1, 0x20);
            byte[] buffer2 = data.GetArray(0x21, 20);
            byte[] buffer  = AuthServer.Utils.Concat(array, AuthServer.Utils.Reverse(this.B.getBytes(0x20)));
            SHA1   sha     = new SHA1CryptoServiceProvider();

            byte[]     inData   = AuthServer.Utils.Reverse(sha.ComputeHash(buffer));
            byte[]     buffer6  = AuthServer.Utils.Reverse(array);
            BigInteger integer2 = this.v.modPow(new BigInteger(inData), new BigInteger(rN)) * new BigInteger(buffer6);

            byte[] buffer8  = AuthServer.Utils.Reverse(integer2.modPow(new BigInteger(this.rb), new BigInteger(rN)).getBytes(0x20));
            byte[] buffer9  = new byte[0x10];
            byte[] buffer10 = new byte[0x10];
            for (num = 0; num < 0x10; num++)
            {
                buffer9[num]  = buffer8[num * 2];
                buffer10[num] = buffer8[(num * 2) + 1];
            }
            byte[] buffer11 = sha.ComputeHash(buffer9);
            byte[] buffer12 = sha.ComputeHash(buffer10);
            byte[] b        = new byte[buffer11.Length + buffer12.Length];
            for (num = 0; num < buffer11.Length; num++)
            {
                b[num * 2]       = buffer11[num];
                b[(num * 2) + 1] = buffer12[num];
            }
            byte[] buffer14 = sha.ComputeHash(N);
            byte[] buffer15 = sha.ComputeHash(this.G.getBytes());
            byte[] buffer16 = sha.ComputeHash(this.usernameUP);
            byte[] a        = new byte[20];
            for (num = 0; num < 20; num++)
            {
                a[num] = (byte)(buffer14[num] ^ buffer15[num]);
            }
            byte[] buffer18 = AuthServer.Utils.Concat(AuthServer.Utils.Concat(AuthServer.Utils.Concat(AuthServer.Utils.Concat(AuthServer.Utils.Concat(a, buffer16), this.salt), array), AuthServer.Utils.Reverse(this.B.getBytes(0x20))), b);
            byte[] buffer19 = sha.ComputeHash(buffer18);
            if (!AuthServer.Utils.IsSameByteArray(buffer19, buffer2))
            {
                this.pack.Add((byte)1);
                this.pack.Add((byte)4);
                this.pack.Add(new byte[6]);
                return((byte[])this.pack);
            }
            this.Hash = b;
            buffer18  = AuthServer.Utils.Concat(AuthServer.Utils.Concat(array, buffer19), b);
            byte[] bs = sha.ComputeHash(buffer18);
            this.pack.Add((byte)1);
            this.pack.Add((byte)0);
            this.pack.Add(bs);
            this.pack.Add(new byte[6]);
            return((byte[])this.pack);
        }
コード例 #2
0
        public byte[] ServerChallange(AuthOpCode op)
        {
            byte[] bytes = Encoding.ASCII.GetBytes((this.Name + ":" + this.Password).ToUpper().ToCharArray());
            this.usernameUP = Encoding.ASCII.GetBytes(this.Name.ToUpper().ToCharArray());
            this.G          = new BigInteger(new byte[] { 7 });
            byte[] buffer2 = new byte[] { 1 };
            this.salt = new byte[0x20];
            this.b    = new byte[20];
            rand.NextBytes(this.salt);
            rand.NextBytes(this.b);
            byte[]             bs = new SHA1CryptoServiceProvider().ComputeHash(bytes, 0, bytes.Length);
            ByteArrayBuilderV2 rv = new ByteArrayBuilderV2();

            rv.Add(this.salt);
            rv.Add(bs);
            SHA1       sha2 = new SHA1CryptoServiceProvider();
            BigInteger exp  = new BigInteger(AuthServer.Utils.Reverse(sha2.ComputeHash((byte[])rv, 0, rv.Length)));
            BigInteger n    = new BigInteger(rN);

            this.v  = this.G.modPow(exp, n);
            this.rb = AuthServer.Utils.Reverse(this.b);
            this.K  = new BigInteger(new byte[] { 3 });
            BigInteger integer3 = this.K * this.v;
            BigInteger integer4 = this.G.modPow(new BigInteger(this.rb), new BigInteger(rN));
            BigInteger integer5 = integer3 + integer4;

            this.B = BigInteger.op_Modulus(integer5, new BigInteger(rN));
            this.pack.Clear();
            this.pack.Add((byte)op);
            this.pack.Add((byte)0);
            this.pack.Add((byte)0);
            this.pack.Add(AuthServer.Utils.Reverse(this.B.getBytes(0x20)));
            this.pack.Add(new byte[] { 1, 7, 0x20 });
            this.pack.Add(N);
            this.pack.Add(this.salt);
            this.pack.Add(new byte[0x10]);
            this.pack.Add((byte)0);
            return((byte[])this.pack);
        }
コード例 #3
0
        public byte[] GetList()
        {
            ByteArrayBuilderV2 rv = new ByteArrayBuilderV2();

            rv.Add((byte)0x10);
            rv.Add((ushort)0);
            rv.Add((uint)0);
            rv.Add((byte)this.List.Count);
            foreach (RealmStruct struct2 in this.List)
            {
                rv.Add(struct2.Type);
                rv.Add(struct2.Color);
                rv.Add(struct2.Name);
                rv.Add(struct2.Address);
                rv.Add(struct2.Population);
                rv.Add(struct2.CorrentCharacters);
                rv.Add((byte)1);
                rv.Add((byte)0);
            }
            rv.Add((ushort)0);
            rv.Set(1, (ushort)(rv.Length - 3));
            return((byte[])rv);
        }