FileFind.Meshwork.Node.CreateNewSessionKey C# (CSharp) Method

CreateNewSessionKey() public method

public CreateNewSessionKey ( ) : void
return void
        public void CreateNewSessionKey()
        {
            if (this.FinishedKeyExchange == false) {

                // The logic elsewhere is to call this method unless RemoteHasKey == true.
                // That needs to be cleaned up, because this is pointless.
                if (sentKeyExchange == true) {
                    //LogManager.Current.WriteToLog("CreateNewSessionKey() AGAIN for " + this.ToString() + "\n" + Environment.StackTrace);
                    return;
                }

                try {
                    LoggingService.LogInfo("Creating secure communication channel to {0}...", this.ToString());

                    sentKeyExchange = true;

                    byte[] keyExchange = diffieHellman.CreateKeyExchange();
                    Message m = network.MessageBuilder.CreateNewSessionKeyMessage(this, keyExchange);
                    AckMethod c = new AckMethod();
                    c.args = new object[]{ this };
                    c.Method += new AckMethod.MethodEventHandler(network.NewSessionKeyReady);
                    network.AckMethods.Add(m.MessageID, c);
                    network.SendRoutedMessage(m);
                } catch (Exception ex) {
                    LoggingService.LogError("Failed to create key exchange! Hopefully we will retry...");
                    sentKeyExchange = false;
                    throw ex;
                }
            } else {
                LoggingService.LogWarning("Why are we trying to CreateNewSessionKey for {0} when FinishedKeyExchange=True?", this.ToString());
            }
        }

Usage Example

Ejemplo n.º 1
0
        internal void ProcessNewSessionKeyMessage(Node messageFrom, byte[] key)
        {
            string keyHash = FileFind.Common.SHA512Str(key);

            // This lets us create a brand new session key
            // if someone wants that for whatever reason.
            if (messageFrom.SessionKeyDataHash != String.Empty && keyHash != messageFrom.SessionKeyDataHash)
            {
                Core.LoggingService.LogInfo("MessageProcessor: Re-keying with: {0}.", messageFrom.ToString());
                messageFrom.ClearSessionKey();
            }

            if (messageFrom.FinishedKeyExchange == false)
            {
                Core.LoggingService.LogInfo("Received secure channel key from: {0}.", messageFrom.ToString());

                messageFrom.SessionKeyDataHash = keyHash;
                messageFrom.DecryptKeyExchange(key);

                if (messageFrom.RemoteHasKey == true)
                {
                    Core.LoggingService.LogInfo("Secure communication channel to {0} now avaliable.", messageFrom.ToString());
                    network.SendInfoToTrustedNode(messageFrom);
                }
                else
                {
                    messageFrom.CreateNewSessionKey();
                }
            }
            else
            {
                Core.LoggingService.LogWarning("Received secure communication key from: {0}, but key exchange was already finished!", messageFrom.ToString());
            }
        }
All Usage Examples Of FileFind.Meshwork.Node::CreateNewSessionKey