Beispiel #1
0
        async partial void ProcessEachInitIvExpand2(InitIvExpand2 initIvExpand2)
        {
            var ctx = context;

            if (ctx is null)
            {
                throw new InvalidOperationException("context should be set");
            }

            ctx.PacketHandler.ReceivedFinalInitAck();

            var(publicKey, privateKey) = TsCrypt.GenerateTemporaryKey();

            var ekBase64 = Convert.ToBase64String(publicKey);
            var toSign   = new byte[86];

            Array.Copy(publicKey, 0, toSign, 0, 32);
            var beta = Convert.FromBase64String(initIvExpand2.Beta);

            Array.Copy(beta, 0, toSign, 32, 54);
            var sign  = TsCrypt.Sign(ctx.ConnectionDataFull.Identity.PrivateKey, toSign);
            var proof = Convert.ToBase64String(sign);

            await ClientEk(ekBase64, proof);

            var result = ctx.TsCrypt.CryptoInit2(initIvExpand2.License, initIvExpand2.Omega, initIvExpand2.Proof, initIvExpand2.Beta, privateKey);

            if (!result)
            {
                ChangeState(ctx, TsClientStatus.Disconnected, CommandError.Custom($"Failed to calculate shared secret: {result.Error}"));
                return;
            }

            await DefaultClientInit(ctx);
        }
Beispiel #2
0
        private void ProcessInitIvExpand2(InitIvExpand2 initIvExpand2)
        {
            packetHandler.ReceivedFinalInitAck();

            packetHandler.IncPacketCounter(PacketType.Command);

            var(publicKey, privateKey) = Ts3Crypt.GenerateTemporaryKey();

            var ekBase64 = Convert.ToBase64String(publicKey);
            var toSign   = new byte[86];

            Array.Copy(publicKey, 0, toSign, 0, 32);
            var beta = Convert.FromBase64String(initIvExpand2.Beta);

            Array.Copy(beta, 0, toSign, 32, 54);
            var sign  = Ts3Crypt.Sign(connectionDataFull.Identity.PrivateKey, toSign);
            var proof = Convert.ToBase64String(sign);

            ClientEk(ekBase64, proof);

            var result = ts3Crypt.CryptoInit2(initIvExpand2.License, initIvExpand2.Omega, initIvExpand2.Proof, initIvExpand2.Beta, privateKey);

            if (!result)
            {
                DisconnectInternal(context, Util.CustomError($@"Failed to calculate shared secret: {result.Error}"));
                return;
            }

            packetHandler.CryptoInitDone();

            DefaultClientInit();
        }
Beispiel #3
0
        private void ProcessInitIvExpand2(InitIvExpand2 initIvExpand2)
        {
            DisconnectInternal(context, Util.CustomError("Cannot connect to server 3.1 yet."));
            return;

            var password = connectionDataFull.IsPasswordHashed
                                ? connectionDataFull.Password
                                : Ts3Crypt.HashPassword(connectionDataFull.Password);

            packetHandler.IncPacketCounter(PacketType.Command);

            /*
             * ts3Crypt.GenerateTemporaryKey();
             *
             * // EK SIGN
             * var buffer = new byte[32];
             * Util.Random.NextBytes(buffer);
             * var ek = Convert.ToBase64String(Ed25519.EncodePoint(
             *      ts3Crypt.publicTmp.AffineXCoord.ToBigInteger().ToNetBi(),
             *      ts3Crypt.publicTmp.AffineYCoord.ToBigInteger().ToNetBi()));
             *
             * var toSign = new byte[86];
             * Array.Copy(buffer, 0, toSign, 0, 32);
             * var beta = Convert.FromBase64String(initIvExpand2.Beta);
             * Array.Copy(beta, 0, toSign, 32, 54);
             * var sign = Ts3Crypt.Sign(connectionDataFull.Identity.PrivateKey, toSign);
             * var proof = Convert.ToBase64String(sign);
             * ClientEk(ek, proof);
             * // END EK SIGN
             */
            ts3Crypt.CryptoInit2(initIvExpand2.License, initIvExpand2.Omega, initIvExpand2.Proof);             //  TODO ???
            packetHandler.CryptoInitDone();

            ClientInit(
                connectionDataFull.Username,
                true, true,
                connectionDataFull.DefaultChannel,
                Ts3Crypt.HashPassword(connectionDataFull.DefaultChannelPassword),
                password, string.Empty, string.Empty, string.Empty,
                "123,456", VersionSign);
        }
Beispiel #4
0
 partial void ProcessEachInitIvExpand2(InitIvExpand2 notifies);