code: func handleAuthResponse(c packetConn) (bool, []string, error) {
  	for {
  		packet, err := c.readPacket()
  		if err != nil {
  			return false, nil, err
  		}
  
  		switch packet[0] {
  		case msgUserAuthBanner:
  			// TODO: add callback to present the banner to the user
  		case msgUserAuthFailure:
  			var msg userAuthFailureMsg
  			if err := Unmarshal(packet, &msg); err != nil {
  				return false, nil, err
  			}
  			return false, msg.Methods, nil
  		case msgUserAuthSuccess:
  			return true, nil, nil
  		case msgDisconnect:
  			return false, nil, io.EOF
  		default:
  			return false, nil, unexpectedMessageError(msgUserAuthSuccess, packet[0])
  		}
  	}
  }
docs: // handleAuthResponse returns whether the preceding authentication request succeeded
  // along with a list of remaining authentication methods to try next and
  // an error if an unexpected response was received.