/*	$NetBSD: isakmp_quick.h,v 1.4 2006/09/09 16:22:09 manu Exp $	*/

/* Id: isakmp_quick.h,v 1.3 2004/06/11 16:00:16 ludvigm Exp */

/*
 * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. Neither the name of the project nor the names of its contributors
 *    may be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 */

#ifndef _ISAKMP_QUICK_H
#define _ISAKMP_QUICK_H

extern int quick_i1prep __P((struct ph2handle *, vchar_t *));
extern int quick_i1send __P((struct ph2handle *, vchar_t *));
extern int quick_i2recv __P((struct ph2handle *, vchar_t *));
extern int quick_i2send __P((struct ph2handle *, vchar_t *));
extern int quick_i3recv __P((struct ph2handle *, vchar_t *));

extern int quick_r1recv __P((struct ph2handle *, vchar_t *));
extern int quick_r1prep __P((struct ph2handle *, vchar_t *));
extern int quick_r2send __P((struct ph2handle *, vchar_t *));
extern int quick_r3recv __P((struct ph2handle *, vchar_t *));
extern int quick_r3send __P((struct ph2handle *, vchar_t *));
extern int quick_r3prep __P((struct ph2handle *, vchar_t *));

#endif /* _ISAKMP_QUICK_H */
