]>
git.saurik.com Git - apple/xnu.git/blob - bsd/netinet6/esp.h
   1 /*      $FreeBSD: src/sys/netinet6/esp.h,v 1.2.2.2 2001/07/03 11:01:49 ume Exp $        */ 
   2 /*      $KAME: esp.h,v 1.16 2000/10/18 21:28:00 itojun Exp $    */ 
   5  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. 
   8  * Redistribution and use in source and binary forms, with or without 
   9  * modification, are permitted provided that the following conditions 
  11  * 1. Redistributions of source code must retain the above copyright 
  12  *    notice, this list of conditions and the following disclaimer. 
  13  * 2. Redistributions in binary form must reproduce the above copyright 
  14  *    notice, this list of conditions and the following disclaimer in the 
  15  *    documentation and/or other materials provided with the distribution. 
  16  * 3. Neither the name of the project nor the names of its contributors 
  17  *    may be used to endorse or promote products derived from this software 
  18  *    without specific prior written permission. 
  20  * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND 
  21  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
  22  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
  23  * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE 
  24  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
  25  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 
  26  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
  27  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
  28  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 
  29  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
  34  * RFC1827/2406 Encapsulated Security Payload. 
  37 #ifndef _NETINET6_ESP_H_ 
  38 #define _NETINET6_ESP_H_ 
  39 #include <sys/appleapiopts.h> 
  43         u_int32_t       esp_spi
;        /* ESP */ 
  44         /*variable size, 32bit bound*/  /* Initialization Vector */ 
  45         /*variable size*/               /* Payload data */ 
  46         /*variable size*/               /* padding */ 
  47         /*8bit*/                        /* pad size */ 
  48         /*8bit*/                        /* next header */ 
  49         /*8bit*/                        /* next header */ 
  50         /*variable size, 32bit bound*/  /* Authentication data (new IPsec) */ 
  54         u_int32_t       esp_spi
;        /* ESP */ 
  55         u_int32_t       esp_seq
;        /* Sequence number */ 
  56         /*variable size*/               /* (IV and) Payload data */ 
  57         /*variable size*/               /* padding */ 
  58         /*8bit*/                        /* pad size */ 
  59         /*8bit*/                        /* next header */ 
  60         /*8bit*/                        /* next header */ 
  61         /*variable size, 32bit bound*/  /* Authentication data */ 
  65         u_int8_t        esp_padlen
;     /* pad length */ 
  66         u_int8_t        esp_nxt
;        /* Next header */ 
  67         /*variable size, 32bit bound*/  /* Authentication data (new IPsec)*/ 
  73 struct esp_algorithm 
{ 
  74         size_t padbound
;        /* pad boundary, in byte */ 
  75         int ivlenval
;           /* iv length, in byte */ 
  76         int (*mature
)(struct secasvar 
*); 
  77         int keymin
;     /* in bits */ 
  78         int keymax
;     /* in bits */ 
  79         int (*schedlen
)(const struct esp_algorithm 
*); 
  81         int (*ivlen
)(const struct esp_algorithm 
*, struct secasvar 
*); 
  82         int (*decrypt
)(struct mbuf 
*, size_t, 
  83                 struct secasvar 
*, const struct esp_algorithm 
*, int); 
  84         int (*encrypt
)(struct mbuf 
*, size_t, size_t, 
  85                 struct secasvar 
*, const struct esp_algorithm 
*, int); 
  86         /* not supposed to be called directly */ 
  87         int (*schedule
)(const struct esp_algorithm 
*, struct secasvar 
*); 
  88         int (*blockdecrypt
)(const struct esp_algorithm 
*, 
  89                 struct secasvar 
*, u_int8_t 
*, u_int8_t 
*); 
  90         int (*blockencrypt
)(const struct esp_algorithm 
*, 
  91                 struct secasvar 
*, u_int8_t 
*, u_int8_t 
*); 
  94 extern const struct esp_algorithm 
*esp_algorithm_lookup(int); 
  95 extern int esp_max_ivlen(void); 
  98 extern int esp4_output(struct mbuf 
*, struct ipsecrequest 
*); 
  99 extern void esp4_input(struct mbuf 
*, int off
); 
 100 extern size_t esp_hdrsiz(struct ipsecrequest 
*); 
 102 extern int esp_schedule(const struct esp_algorithm 
*, struct secasvar 
*); 
 103 extern int esp_auth(struct mbuf 
*, size_t, size_t, 
 104         struct secasvar 
*, u_char 
*); 
 105 #endif /* KERNEL_PRIVATE */ 
 107 #endif /* _NETINET6_ESP_H_ */