コード例 #1
0
ファイル: HandshakeLayer.cs プロジェクト: peske/netmq
        private void AddFinished(OutgoingMessageBag outgoingMessages)
        {
            m_localHash.TransformFinalBlock(EmptyArray <byte> .Instance, 0, 0);

            byte[] seed = m_localHash.Hash;
            m_localHash.Dispose();
            m_localHash = null;

            var label = SecurityParameters.Entity == ConnectionEnd.Server ? ServerFinishedLabel : ClientFinshedLabel;

            var finishedMessage = new FinishedMessage
            {
                VerifyData = PRF.Get(SecurityParameters.MasterSecret, label, seed, FinishedMessage.VerifyDataLength)
            };

            NetMQMessage outgoingMessage = finishedMessage.ToNetMQMessage();

            outgoingMessages.AddHandshakeMessage(outgoingMessage);
            m_lastSentMessage = HandshakeType.Finished;

            if (SecurityParameters.Entity == ConnectionEnd.Client)
            {
                HashRemote(outgoingMessage);
            }
        }
コード例 #2
0
        public HandleClientFinishedState(
            IServiceProvider serviceProvider,
            ICipherSuitesProvider cipherSuitesProvider,

            Connection connection,
            HandshakeWriter writer,
            HandshakeFinishedService handshakeFinishedService,

            VersionConfig versionConfig,
            CipherSuiteConfig cipherSuiteConfig,

            FinishedMessage handshake)
        {
            _serviceProvider      = serviceProvider;
            _cipherSuitesProvider = cipherSuitesProvider;

            _connection = connection;
            _writer     = writer;
            _handshakeFinishedService = handshakeFinishedService;


            _versionConfig     = versionConfig;
            _cipherSuiteConfig = cipherSuiteConfig;

            _handshake = handshake;
        }
コード例 #3
0
        private void AddFinished(OutgoingMessageBag outgoingMessages)
        {
            m_localHash.TransformFinalBlock(new byte[0], 0, 0);

            byte[] seed = m_localHash.Hash;
            m_localHash.Dispose();
            m_localHash = null;

            string label;

            if (SecurityParameters.Entity == ConnectionEnd.Server)
            {
                label = ServerFinishedLabel;
            }
            else
            {
                label = ClientFinshedLabel;
            }

            FinishedMessage finishedMessage = new FinishedMessage();

            finishedMessage.VerifyData =
                PRF.Get(SecurityParameters.MasterSecret, label, seed, FinishedMessage.VerifyDataLength);

            NetMQMessage outgoingMessage = finishedMessage.ToNetMQMessage();

            outgoingMessages.AddHandshakeMessage(outgoingMessage);
            m_lastSentMessage = HandshakeType.Finished;

            if (SecurityParameters.Entity == ConnectionEnd.Client)
            {
                HashRemote(outgoingMessage);
            }
        }
コード例 #4
0
    /// <summary>
    /// Play audio and display text.
    /// </summary>
    /// <returns></returns>
    private IEnumerator RayTextSequence()
    {
        // Disable interaction until Ray has left the player a puddle of emotions.
        InteractWithSelectedObject interactionScript = Camera.main.GetComponent <InteractWithSelectedObject>();

        if (interactionScript != null && scanningCam != null)
        {
            interactionScript.enabled = false;
            scanningCam.SetActive(false);
        }

        // Clear text.
        textWriter.DisplayText("");

        // Play audio clip.
        rayAudioSource.Play();

        #region print Ray's sentimental message.  :(

        // Adjust text speed to match audio clip (we are hardcoding this because Becca's talking speed changes from line to line).
        textWriter.ChangeTypingSpeed(17);

        textWriter.DisplayText(endingLines);
        yield return(new WaitForSeconds(18));

        // Adjust text speed to match audio clip (we are hardcoding this because Becca's talking speed changes from line to line).
        textWriter.ChangeTypingSpeed(18);

        textWriter.DisplayText(endingLines2);
        yield return(new WaitForSeconds(17));

        // Adjust text speed to match audio clip (we are hardcoding this because Becca's talking speed changes from line to line).
        textWriter.ChangeTypingSpeed(20);

        textWriter.DisplayText(endingLines3);

        #endregion

        while (rayAudioSource.isPlaying)
        {
            yield return(null);
        }

        // Enable interaction, so that the player can kill themself.
        if (interactionScript != null)
        {
            interactionScript.enabled = true;
            scanningCam.SetActive(true);
        }

        if (FinishedMessage != null)
        {
            FinishedMessage.Invoke();
        }
    }
コード例 #5
0
        private void OnFinished(NetMQMessage incomingMessage, OutgoingMessageBag outgoingMessages)
        {
            if (
                (SecurityParameters.Entity == ConnectionEnd.Client &&
                 (!m_secureChannel.ChangeSuiteChangeArrived ||
                  m_lastReceivedMessage != HandshakeType.ServerHelloDone || m_lastSentMessage != HandshakeType.Finished)) ||
                (SecurityParameters.Entity == ConnectionEnd.Server &&
                 (!m_secureChannel.ChangeSuiteChangeArrived ||
                  m_lastReceivedMessage != HandshakeType.ClientKeyExchange || m_lastSentMessage != HandshakeType.ServerHelloDone)))
            {
                throw new NetMQSecurityException(NetMQSecurityErrorCode.HandshakeUnexpectedMessage, "Finished received when expecting another message");
            }

            if (SecurityParameters.Entity == ConnectionEnd.Server)
            {
                HashLocal(incomingMessage);
            }

            FinishedMessage finishedMessage = new FinishedMessage();

            finishedMessage.SetFromNetMQMessage(incomingMessage);

            m_remoteHash.TransformFinalBlock(new byte[0], 0, 0);

            byte[] seed = m_remoteHash.Hash;
            m_remoteHash.Dispose();
            m_remoteHash = null;

            string label;

            if (SecurityParameters.Entity == ConnectionEnd.Client)
            {
                label = ServerFinishedLabel;
            }
            else
            {
                label = ClientFinshedLabel;
            }

            byte[] verifyData =
                PRF.Get(SecurityParameters.MasterSecret, label, seed, FinishedMessage.VerifyDataLength);

            if (!verifyData.SequenceEqual(finishedMessage.VerifyData))
            {
                throw  new NetMQSecurityException(NetMQSecurityErrorCode.HandshakeVerifyData, "peer verify data wrong");
            }

            if (SecurityParameters.Entity == ConnectionEnd.Server)
            {
                AddFinished(outgoingMessages);
            }

            m_done = true;
        }
コード例 #6
0
        public HandleServerFinishedState(
            IServiceProvider serviceProvider,

            HandshakeFinishedService handshakeFinishedService,

            FinishedMessage handshake)
        {
            _serviceProvider = serviceProvider;

            _handshakeFinishedService = handshakeFinishedService;

            _handshake = handshake;
        }
コード例 #7
0
        public bool Verify(FinishedMessage message)
        {
            if (_keyConfig.Master is null)
            {
                throw new InvalidOperationException("Key config is not initialized");
            }

            var prfDigest = _cipherSuitesProvider.ResolvePRFHash(_cipherSuiteConfig.CipherSuite);
            var prf       = new PRF(prfDigest);

            var label        = _endConfig.End == ConnectionEnd.Server ? "client finished" : "server finished";
            var expectedData =
                prf.Digest(_keyConfig.Master, label, message.VerifyExpectedHash)
                .Take(FinishedMessage.VerifyDataLength)
                .ToArray();

            return(expectedData.SequenceEqual(message.VerifyActual));
        }
コード例 #8
0
        public static HandleClientFinishedState New(IServiceProvider serviceProvider, FinishedMessage handshake)
        {
            return(new HandleClientFinishedState(
                       serviceProvider,
                       serviceProvider.GetRequiredService <ICipherSuitesProvider>(),

                       serviceProvider.GetRequiredService <Connection>(),
                       serviceProvider.GetRequiredService <HandshakeWriter>(),
                       serviceProvider.GetRequiredService <HandshakeFinishedService>(),

                       serviceProvider.GetRequiredService <VersionConfig>(),
                       serviceProvider.GetRequiredService <CipherSuiteConfig>(),

                       handshake
                       ));
        }
コード例 #9
0
        private void SetIsRunningToFalse(ServiceProxy sut)
        {
            var message = new FinishedMessage();

            sut.FinishedHandler(message);
        }
コード例 #10
0
        internal void FinishedHandler(FinishedMessage message)
        {
            IsRunning = false;
            IsColonyCreated = false;
            IsFinished = true;

            m_MemoryBus.PublishAsync(new ColonyFinishedMessage());
        }
コード例 #11
0
        public static HandleServerFinishedState New(IServiceProvider serviceProvider, FinishedMessage handshake)
        {
            return(new HandleServerFinishedState(
                       serviceProvider,

                       serviceProvider.GetService <HandshakeFinishedService>(),

                       handshake));
        }
コード例 #12
0
 private void OnFinishedMessage(FinishedMessage message)
 {
     _processingMessage = false;
 }