/*
 * Copyright (c) 2013 Eike Stepper (Berlin, Germany) and others. All rights reserved. This program and the accompanying
 * materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution,
 * and is available at http://www.eclipse.org/legal/epl-v10.html Contributors: Eike Stepper - initial API and
 * implementation Christian W. Damus (CEA LIST) - bug 418454: adapted from CDO Server
 */

/**
 * Reusable implementation of a server-to-client authentication signal and related API.
 *
 * @since 4.3
 */
package org.eclipse.net4j.signal.security;
