Exemplo n.º 1
0
        public void SimpleTest()
        {
            var request = Step1ClientHelper.GetRequest();
            var publicKeyFingerPrint = RSAHelper.GetFingerprint(PublicKey);
            var resPq = Step1ServerHelper.GetResponse(request.Nonce, publicKeyFingerPrint, out var p, out var q, out var serverNonce);

            var reqDhParams    = Step2ClientHelper.GetRequest(resPq, PublicKey, out var newNonceFromClient);
            var serverDhParams = Step2ServerHelper.GetResponse(reqDhParams, PrivateKey, out var parameters, out var newNonceFromServer);

            Assert.Equal(newNonceFromClient, newNonceFromServer);

            var setClientDhParams       = Step3ClientHelper.GetRequest((TServerDHParamsOk)serverDhParams, newNonceFromClient, out var clientAgree, out var serverTime);
            var setClientDhParamsAnswer = Step3ServerHelper.GetResponse(setClientDhParams, newNonceFromClient, parameters, out var serverAgree, out var serverSalt);

            Assert.Equal(serverAgree.ToByteArray(), clientAgree);
        }
Exemplo n.º 2
0
        public void ValidateTest()
        {
            var paramsOk = new TServerDHParamsOk
            {
                EncryptedAnswerAsBinary = _encryptedData,
                Nonce       = _nonce,
                ServerNonce = _serverNonce
            };

            var packageBuffer = Serializer.Serialize(paramsOk);
            var packageData   = packageBuffer.ToArray();

            var completeDhExchange = new Step3CompleteDhExchange();
            var oldResponse        = completeDhExchange.ToBytes(_nonce, _serverNonce, _newNonce, _encryptedData);


            var response = Step3ClientHelper.GetRequest(paramsOk, _newNonce, out var clientAgree, out var serviceTime);
        }
Exemplo n.º 3
0
        protected override void ChannelRead0(IChannelHandlerContext ctx, IObject msg)
        {
            switch (msg)
            {
            case TResPQ resPq:
                Guard.That(resPq.Nonce).IsItemsEquals(_nonce);

                Log.Debug($"#{ClientSettings.ClientSession.SessionId}: TResPQ step complete");

                var requestReqDhParams = Step2ClientHelper.GetRequest(resPq, ClientSettings.PublicKey, out _newNonce);
                ctx.WriteAndFlushAsync(requestReqDhParams);
                break;

            case TServerDHParamsOk dhParamsOk:
                Log.Debug($"#{ClientSettings.ClientSession.SessionId}: TServerDHParamsOk step complete");

                var request = Step3ClientHelper.GetRequest(dhParamsOk, _newNonce, out _clientAgree, out var serverTime);
                ClientSettings.ClientSession.TimeOffset = serverTime - (int)DateTimeOffset.Now.ToUnixTimeSeconds();

                SessionWriter.Save(ClientSettings.ClientSession)
                .ContinueWith(_ => ctx.WriteAndFlushAsync(request));

                break;

            case TDhGenOk dhGenOk:
                Log.Debug($"#{ClientSettings.ClientSession.SessionId}: TDhGenOk step complete");

                ClientSettings.ClientSession.AuthKey    = new AuthKey(_clientAgree);
                ClientSettings.ClientSession.ServerSalt = SaltHelper.ComputeSalt(_newNonce, dhGenOk.ServerNonce);

                SessionWriter.Save(ClientSettings.ClientSession)
                .ContinueWith(_ => ctx.FireUserEventTriggered(ESystemNotification.HandshakeComplete));
                break;

            case TServerDHParamsFail _:
            case TDhGenRetry _:
            case TDhGenFail _:
                throw new NotSupportedException();

            default:
                ctx.FireChannelRead(msg);
                break;
            }
        }