anchor.diff:  													 (foreign-bitfield-value '+known-hosts-flags+ flags)
   													 store))))
   													 
  +(defcfun ("libssh2_agent_userauth" --agent-userauth) +ERROR-CODE+
  +	(agent +ssh-agent+) (username :string) (identity :pointer))
  +
  +(defun user-auth-agent (agent username identity)
  +	(with-foreign-string (fs-username username)
  +		(--agent-userauth agent fs-username identity)))
   
   (defcfun ("libssh2_userauth_password_ex" --user-auth-password) +ERROR-CODE+
   	(session +session+) 
   	(username :string) (username-length :unsigned-int)
   	(password :string) (password-length :unsigned-int)
   	(password-change :pointer))
  -
  +			
   (defun user-auth-password (session username password &optional (callback (null-pointer)))
   	(let ((username-length (length username))
   				(password-length (length password)))
  
positive.code: 
  ;; CLOS FACADE: FOR BLOCKING STREAMS!! ;;
  (defclass auth-data ()
  	())
  	 
  (defclass ssh-connection ()
  	((session     :type     +session+
  
negative.code: 								(known-hosts-writefile known-hosts (hosts-db ssh))
  								t)))))))
  
  (defmethod authentication :around ((ssh ssh-connection) (auth auth-data))
  	(if (auth-passed ssh)
  			t
  			(if (ssh-verify-session ssh)
  					(setf (auth-passed ssh)
  								(call-next-method)))))
  
  (defmethod authentication ((ssh ssh-connection) (auth auth-password))
  	(repeat-and-wait-until-complete ((socket (session ssh)))
  		(user-auth-password (session  ssh)
  												(login    auth)
  												(password auth))))
  
  (defclass auth-agent (auth-data) ())
  
  (defmethod authentication ((ssh ssh-connection) (auth auth-agent))
  	(let ((agent (agent-init (session ssh)))
  				(username (login auth)))
  		(unwind-protect
  				 (if (and agent
  									(eq (agent-connect agent)
  											:ERROR-NONE))
  						 (let ((next-identity (agent-identities-iterator agent)))
  							 (when next-identity
  								 (with-foreign-string (fs-username username)
  									 (loop for identity = (funcall next-identity)
  											while identity do
  												(if (eq
  														 (repeat-and-wait-until-complete ((socket ssh))
  															 (--agent-userauth agent fs-username identity))
  														 :ERROR-NONE)
  														(return t))))))
  						 (throw-last-error (session ssh)))
  			(when agent 
  				(agent-free agent)))))
  
  (defvar *ssh-channel-buffer-size* 64)
  
  