public ConnectionService(Session session, UserauthArgs auth) : base(session) { Contract.Requires(auth != null); _auth = auth; }
private void HandleMessage(PasswordRequestMessage message) { var verifed = false; var args = new UserauthArgs(_session, message.Username, message.Password); if (Userauth != null) { Userauth(this, args); verifed = args.Result; } if (verifed) { _session.RegisterService(message.ServiceName, args); Succeed?.Invoke(this, message.ServiceName); _session.SendMessage(new SuccessMessage()); return; } else { _session.SendMessage(new FailureMessage()); } }
public ConnectionService(Session session, UserauthArgs auth) : base(session) { Contract.Requires(auth != null); _auth = auth; Task.Run(() => { MessageLoop(); }); }
public SessionRequestedArgs(SessionChannel channel, string command, UserauthArgs userauthArgs) { Contract.Requires(channel != null); Contract.Requires(command != null); Contract.Requires(userauthArgs != null); this.Channel = channel; this.CommandText = command; this.AttachedUserauthArgs = userauthArgs; }
public SessionRequestedArgs(SessionChannel channel, string command, UserauthArgs userauthArgs) { Contract.Requires(channel != null); Contract.Requires(command != null); Contract.Requires(userauthArgs != null); Channel = channel; CommandText = command; AttachedUserauthArgs = userauthArgs; }
public CommandRequestedArgs(SessionChannel channel, string type, string command, UserauthArgs userauthArgs) { Contract.Requires(channel != null); Contract.Requires(command != null); Contract.Requires(userauthArgs != null); Channel = channel; ShellType = type; CommandText = command; AttachedUserauthArgs = userauthArgs; }
public EnvironmentArgs(SessionChannel channel, string name, string value, UserauthArgs userauthArgs) { Contract.Requires(channel != null); Contract.Requires(name != null); Contract.Requires(value != null); Contract.Requires(userauthArgs != null); Channel = channel; Name = name; Value = value; AttachedUserauthArgs = userauthArgs; }
public TcpRequestArgs(SessionChannel channel, string host, int port, string originatorIP, int originatorPort, UserauthArgs userauthArgs) { Contract.Requires(channel != null); Contract.Requires(host != null); Contract.Requires(originatorIP != null); Channel = channel; Host = host; Port = port; OriginatorIP = originatorIP; OriginatorPort = originatorPort; AttachedUserauthArgs = userauthArgs; }
private void HandleMessage(PublicKeyRequestMessage message) { if (Session._publicKeyAlgorithms.ContainsKey(message.KeyAlgorithmName)) { if (!message.HasSignature) { _session.SendMessage(new PublicKeyOkMessage { KeyAlgorithmName = message.KeyAlgorithmName, PublicKey = message.PublicKey }); return; } var keyAlg = Session._publicKeyAlgorithms[message.KeyAlgorithmName](null); keyAlg.LoadKeyAndCertificatesData(message.PublicKey); var sig = keyAlg.GetSignature(message.Signature); var verifed = false; using (var worker = new SshDataWorker()) { worker.WriteBinary(_session.SessionId); worker.Write(message.PayloadWithoutSignature); verifed = keyAlg.VerifyData(worker.ToByteArray(), sig); } var args = new UserauthArgs(message.KeyAlgorithmName, keyAlg.GetFingerprint(), message.PublicKey); if (verifed && Userauth != null) { Userauth(this, args); verifed = args.Result; } if (verifed) { _session.RegisterService(message.ServiceName, args); if (Succeed != null) { Succeed(this, message.ServiceName); } _session.SendMessage(new SuccessMessage()); return; } else { _session.SendMessage(new FailureMessage()); throw new SshConnectionException("Authentication fail.", DisconnectReason.NoMoreAuthMethodsAvailable); } } _session.SendMessage(new FailureMessage()); }
private void AuthenticationSuccessful(RequestMessage message, UserauthArgs args, AuthenticationMethod method) { this.Session.AuthenticationMethods[method] = true; var remainingAuthenticationMethods = this.GetRemainingAuthenticationMethods(); if (remainingAuthenticationMethods.Count > 0) { this.Session.SendMessage(new FailureMessage(remainingAuthenticationMethods, true)); return; } this.AuthenticationSuccessful(message, args); }
private void HandleMessage(PublicKeyRequestMessage message) { if (Session._publicKeyAlgorithms.ContainsKey(message.KeyAlgorithmName)) { var verifed = false; var keyAlg = Session._publicKeyAlgorithms[message.KeyAlgorithmName](null); keyAlg.LoadKeyAndCertificatesData(message.PublicKey); var args = new UserauthArgs(base._session, message.Username, message.KeyAlgorithmName, keyAlg.GetFingerprint(), message.PublicKey); Userauth?.Invoke(this, args); verifed = args.Result; if (!verifed) { _session.SendMessage(new FailureMessage()); return; } if (!message.HasSignature) { _session.SendMessage(new PublicKeyOkMessage { KeyAlgorithmName = message.KeyAlgorithmName, PublicKey = message.PublicKey }); return; } var sig = keyAlg.GetSignature(message.Signature); using (var worker = new SshDataWorker()) { worker.WriteBinary(_session.SessionId); worker.Write(message.PayloadWithoutSignature); verifed = keyAlg.VerifyData(worker.ToByteArray(), sig); } if (!verifed) { _session.SendMessage(new FailureMessage()); return; } _session.RegisterService(message.ServiceName, args); Succeed?.Invoke(this, message.ServiceName); _session.SendMessage(new SuccessMessage()); } }
private void HandleMessage(PublicKeyRequestMessage message) { if (Session._publicKeyAlgorithms.ContainsKey(message.KeyAlgorithmName)) { if (!message.HasSignature) { _session.SendMessage(new PublicKeyOkMessage { KeyAlgorithmName = message.KeyAlgorithmName, PublicKey = message.PublicKey }); return; } var keyAlg = Session._publicKeyAlgorithms[message.KeyAlgorithmName](null); keyAlg.LoadKeyAndCertificatesData(message.PublicKey); var sig = keyAlg.GetSignature(message.Signature); var verifed = false; using (var worker = new SshDataWorker()) { worker.WriteBinary(_session.SessionId); worker.Write(message.PayloadWithoutSignature); verifed = keyAlg.VerifyData(worker.ToByteArray(), sig); } var args = new UserauthArgs(message.KeyAlgorithmName, keyAlg.GetFingerprint(), message.PublicKey); if (verifed && Userauth != null) { Userauth(this, args); verifed = args.Result; } if (verifed) { _session.RegisterService(message.ServiceName, args); if (Succeed != null) Succeed(this, message.ServiceName); _session.SendMessage(new SuccessMessage()); return; } else { _session.SendMessage(new FailureMessage()); throw new SshConnectionException("Authentication fail.", DisconnectReason.NoMoreAuthMethodsAvailable); } } _session.SendMessage(new FailureMessage()); }
public PtyArgs(SessionChannel channel, string terminal, uint heightPx, uint heightRows, uint widthPx, uint widthChars, string modes, UserauthArgs userauthArgs) { Contract.Requires(channel != null); Contract.Requires(terminal != null); Contract.Requires(modes != null); Contract.Requires(userauthArgs != null); Channel = channel; Terminal = terminal; HeightPx = heightPx; HeightRows = heightRows; WidthPx = widthPx; WidthChars = widthChars; Modes = modes; AttachedUserauthArgs = userauthArgs; }
private void HandleMessage(PasswordRequestMessage message) { var args = new UserauthArgs(null, null, null); if (this.Session.AuthenticationMethods == null || !this.Session.AuthenticationMethods.ContainsKey(AuthenticationMethod.Password)) { this.Session.SendMessage(new FailureMessage()); return; } // Handle authentication here if (message.Password != "password") { this.Session.SendMessage(new FailureMessage()); return; } this.AuthenticationSuccessful(message, args, AuthenticationMethod.Password); }
private void HandleMessage(NoneRequestMessage message) { var args = new UserauthArgs(null, null, null); this.Username = message.Username; if (this.Session.AuthenticationMethods == null) { this.AuthenticationSuccessful(message, args); return; } var remainingAuthenticationMethods = this.GetRemainingAuthenticationMethods(); if (remainingAuthenticationMethods.Count == 0) { this.AuthenticationSuccessful(message, args); return; } this.Session.SendMessage(new FailureMessage(remainingAuthenticationMethods, false)); }
private void AuthenticationSuccessful(RequestMessage message, UserauthArgs args) { this.Session.RegisterService(message.ServiceName, args); this.Succeed?.Invoke(this, message.ServiceName); this.Session.SendMessage(new SuccessMessage()); }
static void service_Userauth(object sender, UserauthArgs e) { Console.WriteLine("Client {0} fingerprint: {1}.", e.KeyAlgorithm, e.Fingerprint); e.Result = true; }
private void HandleMessage(PublicKeyRequestMessage message) { if (this.Session.AuthenticationMethods == null || !this.Session.AuthenticationMethods.ContainsKey(AuthenticationMethod.PublicKey) || !Session.PublicKeyAlgorithms.ContainsKey(message.KeyAlgorithmName)) { this.Session.SendMessage(new FailureMessage()); throw new SshConnectionException("Authentication fail.", DisconnectReason.NoMoreAuthMethodsAvailable); } if (!message.HasSignature) { this.Session.SendMessage(new PublicKeyOkMessage { KeyAlgorithmName = message.KeyAlgorithmName, PublicKey = message.PublicKey }); return; } var keyAlg = Session.PublicKeyAlgorithms[message.KeyAlgorithmName](null); keyAlg.LoadKeyAndCertificatesData(message.PublicKey); var sig = keyAlg.GetSignature(message.Signature); bool verifed; using (var worker = new SshDataWorker()) { worker.WriteBinary(this.Session.SessionId); worker.Write(message.PayloadWithoutSignature); verifed = keyAlg.VerifyData(worker.ToByteArray(), sig); } var args = new UserauthArgs(message.KeyAlgorithmName, keyAlg.GetFingerprint(), message.PublicKey); if (verifed && this.Userauth != null) { this.Userauth(this, args); verifed = args.Result; } if (!verifed) { this.Session.SendMessage(new FailureMessage()); throw new SshConnectionException("Authentication fail.", DisconnectReason.NoMoreAuthMethodsAvailable); } if (this.Session.clientKeyRepository != null && this.Session.clientKeyRepository.GetKeyForClient(this.Username) != null) { var clientKey = Encoding.ASCII.GetString(this.Session.clientKeyRepository.GetKeyForClient(this.Username)); var messageKey = System.Convert.ToBase64String(message.PublicKey); if (clientKey == messageKey) { this.AuthenticationSuccessful(message, args, AuthenticationMethod.PublicKey); return; } } else { this.AuthenticationSuccessful(message, args, AuthenticationMethod.PublicKey); return; } throw new SshConnectionException("Authentication fail.", DisconnectReason.NoMoreAuthMethodsAvailable); }