public ConnectionService(Session session, UserauthArgs auth) : base(session) { Contract.Requires(auth != null); _auth = auth; }
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; }
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()); }