pub fn perform_authentication<'a, T: AuthenticationHandler + ?Sized>(
    handler: &'a T,
    tunnel: &'a (dyn Tunnel + Send + Sync + 'a),
    shutdown_notifier: &'a CancellationListener
) -> BoxFuture<'a, Result<(TunnelName, AuthenticationAttributes), AuthenticationError<T::Error>>>where
    T::Error: Debug + Send,