]>
Commit | Line | Data |
---|---|---|
9bccf70c A |
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 $ */ | |
1c79356b A |
3 | |
4 | /* | |
5 | * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. | |
6 | * All rights reserved. | |
7 | * | |
8 | * Redistribution and use in source and binary forms, with or without | |
9 | * modification, are permitted provided that the following conditions | |
10 | * are met: | |
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. | |
19 | * | |
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 | |
30 | * SUCH DAMAGE. | |
31 | */ | |
32 | ||
33 | /* | |
34 | * RFC1827/2406 Encapsulated Security Payload. | |
35 | */ | |
36 | ||
37 | #ifndef _NETINET6_ESP_H_ | |
38 | #define _NETINET6_ESP_H_ | |
9bccf70c | 39 | #include <sys/appleapiopts.h> |
1c79356b | 40 | |
1c79356b A |
41 | |
42 | struct esp { | |
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) */ | |
51 | }; | |
52 | ||
53 | struct newesp { | |
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 */ | |
62 | }; | |
63 | ||
64 | struct esptail { | |
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)*/ | |
68 | }; | |
69 | ||
91447636 | 70 | #ifdef KERNEL_PRIVATE |
9bccf70c | 71 | struct secasvar; |
1c79356b | 72 | |
1c79356b A |
73 | struct esp_algorithm { |
74 | size_t padbound; /* pad boundary, in byte */ | |
9bccf70c | 75 | int ivlenval; /* iv length, in byte */ |
91447636 | 76 | int (*mature)(struct secasvar *); |
1c79356b A |
77 | int keymin; /* in bits */ |
78 | int keymax; /* in bits */ | |
91447636 | 79 | int (*schedlen)(const struct esp_algorithm *); |
9bccf70c | 80 | const char *name; |
91447636 A |
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); | |
9bccf70c | 86 | /* not supposed to be called directly */ |
91447636 A |
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 *); | |
1c79356b A |
92 | }; |
93 | ||
91447636 A |
94 | extern const struct esp_algorithm *esp_algorithm_lookup(int); |
95 | extern int esp_max_ivlen(void); | |
1c79356b A |
96 | |
97 | /* crypt routines */ | |
91447636 A |
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 *); | |
1c79356b | 101 | |
91447636 A |
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 *); | |
8ad349bb | 105 | #endif KERNEL_PRIVATE |
1c79356b | 106 | |
8ad349bb | 107 | #endif _NETINET6_ESP_H_ |