1/* $KAME: algorithm.h,v 1.20 2001/12/12 18:23:41 sakane Exp $ */ 2 3/* 4 * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 3. Neither the name of the project nor the names of its contributors 16 * may be used to endorse or promote products derived from this software 17 * without specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND 20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22 * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE 23 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29 * SUCH DAMAGE. 30 */ 31 32/* algorithm class */ 33enum { 34 algclass_ipsec_enc, 35 algclass_ipsec_auth, 36 algclass_ipsec_comp, 37 algclass_isakmp_enc, 38 algclass_isakmp_hash, 39 algclass_isakmp_dh, 40 algclass_isakmp_ameth, /* authentication method. */ 41#define MAXALGCLASS 7 42}; 43 44#define ALG_DEFAULT_KEYLEN 64 45 46#define ALGTYPE_NOTHING 0 47 48/* algorithm type */ 49enum { 50 algtype_nothing = 0, 51 52 /* enc */ 53 algtype_des_iv64, 54 algtype_des, 55 algtype_3des, 56 algtype_rc5, 57 algtype_idea, 58 algtype_cast128, 59 algtype_blowfish, 60 algtype_3idea, 61 algtype_des_iv32, 62 algtype_rc4, 63 algtype_null_enc, 64 algtype_rijndael, 65 algtype_twofish, 66 67 /* ipsec auth */ 68 algtype_hmac_md5, 69 algtype_hmac_sha1, 70 algtype_des_mac, 71 algtype_kpdk, 72 algtype_non_auth, 73 algtype_hmac_sha2_256, 74 algtype_hmac_sha2_384, 75 algtype_hmac_sha2_512, 76 77 /* ipcomp */ 78 algtype_oui, 79 algtype_deflate, 80 algtype_lzs, 81 82 /* hash */ 83 algtype_md5, 84 algtype_sha1, 85 algtype_tiger, 86 algtype_sha2_256, 87 algtype_sha2_384, 88 algtype_sha2_512, 89 90 /* dh_group */ 91 algtype_modp768, 92 algtype_modp1024, 93 algtype_ec2n155, 94 algtype_ec2n185, 95 algtype_modp1536, 96 algtype_modp2048, 97 algtype_modp3072, 98 algtype_modp4096, 99 algtype_modp6144, 100 algtype_modp8192, 101 102 /* authentication method. */ 103 algtype_psk, 104 algtype_dsssig, 105 algtype_rsasig, 106 algtype_rsaenc, 107 algtype_rsarev, 108 algtype_gssapikrb 109}; 110 111struct hmac_algorithm { 112 char *name; 113 int type; 114 int doi; 115 caddr_t (*init) __P((vchar_t *)); 116 void (*update) __P((caddr_t, vchar_t *)); 117 vchar_t *(*final) __P((caddr_t)); 118 int (*hashlen) __P((void)); 119 vchar_t *(*one) __P((vchar_t *, vchar_t *)); 120}; 121 122struct hash_algorithm { 123 char *name; 124 int type; 125 int doi; 126 caddr_t (*init) __P((void)); 127 void (*update) __P((caddr_t, vchar_t *)); 128 vchar_t *(*final) __P((caddr_t)); 129 int (*hashlen) __P((void)); 130 vchar_t *(*one) __P((vchar_t *)); 131}; 132 133struct enc_algorithm { 134 char *name; 135 int type; 136 int doi; 137 int blocklen; 138 vchar_t *(*encrypt) __P((vchar_t *, vchar_t *, vchar_t *)); 139 vchar_t *(*decrypt) __P((vchar_t *, vchar_t *, vchar_t *)); 140 int (*weakkey) __P((vchar_t *)); 141 int (*keylen) __P((int)); 142}; 143 144/* dh group */ 145struct dh_algorithm { 146 char *name; 147 int type; 148 int doi; 149 struct dhgroup *dhgroup; 150}; 151 152/* ipcomp, auth meth, dh group */ 153struct misc_algorithm { 154 char *name; 155 int type; 156 int doi; 157}; 158 159extern int alg_oakley_hashdef_ok __P((int)); 160extern int alg_oakley_hashdef_doi __P((int)); 161extern int alg_oakley_hashdef_hashlen __P((int)); 162extern vchar_t *alg_oakley_hashdef_one __P((int, vchar_t *)); 163 164extern int alg_oakley_hmacdef_doi __P((int)); 165extern vchar_t *alg_oakley_hmacdef_one __P((int, vchar_t *, vchar_t *)); 166 167extern int alg_oakley_encdef_ok __P((int)); 168extern int alg_oakley_encdef_doi __P((int)); 169extern int alg_oakley_encdef_keylen __P((int, int)); 170extern int alg_oakley_encdef_blocklen __P((int)); 171extern vchar_t *alg_oakley_encdef_decrypt __P((int, vchar_t *, vchar_t *, vchar_t *)); 172extern vchar_t *alg_oakley_encdef_encrypt __P((int, vchar_t *, vchar_t *, vchar_t *)); 173 174extern int alg_ipsec_encdef_doi __P((int)); 175extern int alg_ipsec_encdef_keylen __P((int, int)); 176 177extern int alg_ipsec_hmacdef_doi __P((int)); 178extern int alg_ipsec_hmacdef_hashlen __P((int)); 179 180extern int alg_ipsec_compdef_doi __P((int)); 181 182extern int alg_oakley_dhdef_doi __P((int)); 183extern int alg_oakley_dhdef_ok __P((int)); 184extern struct dhgroup *alg_oakley_dhdef_group __P((int)); 185 186extern int alg_oakley_authdef_doi __P((int)); 187 188extern int default_keylen __P((int, int)); 189extern int check_keylen __P((int, int, int)); 190extern int algtype2doi __P((int, int)); 191extern int algclass2doi __P((int)); 192