Home | History | Annotate | Line # | Download | only in ipsec
algorithms.sh revision 1.1.6.1
      1  1.1.6.1  pgoyette #	$NetBSD: algorithms.sh,v 1.1.6.1 2017/05/02 03:19:23 pgoyette Exp $
      2      1.1     ozaki #
      3      1.1     ozaki # Copyright (c) 2017 Internet Initiative Japan Inc.
      4      1.1     ozaki # All rights reserved.
      5      1.1     ozaki #
      6      1.1     ozaki # Redistribution and use in source and binary forms, with or without
      7      1.1     ozaki # modification, are permitted provided that the following conditions
      8      1.1     ozaki # are met:
      9      1.1     ozaki # 1. Redistributions of source code must retain the above copyright
     10      1.1     ozaki #    notice, this list of conditions and the following disclaimer.
     11      1.1     ozaki # 2. Redistributions in binary form must reproduce the above copyright
     12      1.1     ozaki #    notice, this list of conditions and the following disclaimer in the
     13      1.1     ozaki #    documentation and/or other materials provided with the distribution.
     14      1.1     ozaki #
     15      1.1     ozaki # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     16      1.1     ozaki # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     17      1.1     ozaki # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     18      1.1     ozaki # PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     19      1.1     ozaki # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     20      1.1     ozaki # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     21      1.1     ozaki # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     22      1.1     ozaki # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     23      1.1     ozaki # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     24      1.1     ozaki # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     25      1.1     ozaki # POSSIBILITY OF SUCH DAMAGE.
     26      1.1     ozaki #
     27      1.1     ozaki 
     28      1.1     ozaki ESP_ENCRYPTION_ALGORITHMS="des-cbc 3des-cbc null blowfish-cbc cast128-cbc \
     29      1.1     ozaki     des-deriv rijndael-cbc aes-ctr camellia-cbc aes-gcm-16 aes-gmac"
     30  1.1.6.1  pgoyette ESP_ENCRYPTION_ALGORITHMS_MINIMUM="null rijndael-cbc"
     31      1.1     ozaki 
     32      1.1     ozaki # Valid key lengths of ESP encription algorithms
     33      1.1     ozaki #    des-cbc         64
     34      1.1     ozaki #    3des-cbc        192
     35      1.1     ozaki #    null            0 to 2048     XXX only accept 0 length
     36      1.1     ozaki #    blowfish-cbc    40 to 448
     37      1.1     ozaki #    cast128-cbc     40 to 128
     38      1.1     ozaki #    des-deriv       64
     39      1.1     ozaki #    3des-deriv      192           XXX not implemented
     40      1.1     ozaki #    rijndael-cbc    128/192/256
     41      1.1     ozaki #    twofish-cbc     0 to 256      XXX not supported
     42      1.1     ozaki #    aes-ctr         160/224/288
     43      1.1     ozaki #    camellia-cbc    128/192/256
     44      1.1     ozaki #    aes-gcm-16      160/224/288
     45      1.1     ozaki #    aes-gmac        160/224/288
     46      1.1     ozaki valid_keys_descbc="64"
     47      1.1     ozaki invalid_keys_descbc="56 72"
     48      1.1     ozaki valid_keys_3descbc="192"
     49      1.1     ozaki invalid_keys_3descbc="184 200"
     50      1.1     ozaki #valid_keys_null="0 2048"
     51      1.1     ozaki valid_keys_null="0"
     52      1.1     ozaki invalid_keys_null="8"
     53      1.1     ozaki valid_keys_blowfishcbc="40 448"
     54      1.1     ozaki invalid_keys_blowfishcbc="32 456"
     55      1.1     ozaki valid_keys_cast128cbc="40 128"
     56      1.1     ozaki invalid_keys_cast128cbc="32 136"
     57      1.1     ozaki valid_keys_desderiv="64"
     58      1.1     ozaki invalid_keys_desderiv="56 72"
     59      1.1     ozaki #valid_keys_3desderiv="192"
     60      1.1     ozaki #invalid_keys_3desderiv="184 200"
     61      1.1     ozaki valid_keys_rijndaelcbc="128 192 256"
     62      1.1     ozaki invalid_keys_rijndaelcbc="120 136 184 200 248 264"
     63      1.1     ozaki #valid_keys_twofishcbc="0 256"
     64      1.1     ozaki #invalid_keys_twofishcbc="264"
     65      1.1     ozaki valid_keys_aesctr="160 224 288"
     66      1.1     ozaki invalid_keys_aesctr="152 168 216 232 280 296"
     67      1.1     ozaki valid_keys_camelliacbc="128 192 256"
     68      1.1     ozaki invalid_keys_camelliacbc="120 136 184 200 248 264"
     69      1.1     ozaki valid_keys_aesgcm16="160 224 288"
     70      1.1     ozaki invalid_keys_aesgcm16="152 168 216 232 280 296"
     71      1.1     ozaki valid_keys_aesgmac="160 224 288"
     72      1.1     ozaki invalid_keys_aesgmac="152 168 216 232 280 296"
     73      1.1     ozaki 
     74      1.1     ozaki AH_AUTHENTICATION_ALGORITHMS="hmac-md5 hmac-sha1 keyed-md5 keyed-sha1 null \
     75      1.1     ozaki     hmac-sha256 hmac-sha384 hmac-sha512 hmac-ripemd160 aes-xcbc-mac"
     76  1.1.6.1  pgoyette AH_AUTHENTICATION_ALGORITHMS_MINIMUM="null hmac-sha512"
     77      1.1     ozaki 
     78      1.1     ozaki # Valid key lengths of AH authentication algorithms
     79      1.1     ozaki #    hmac-md5        128
     80      1.1     ozaki #    hmac-sha1       160
     81      1.1     ozaki #    keyed-md5       128
     82      1.1     ozaki #    keyed-sha1      160
     83      1.1     ozaki #    null            0 to 2048
     84      1.1     ozaki #    hmac-sha256     256
     85      1.1     ozaki #    hmac-sha384     384
     86      1.1     ozaki #    hmac-sha512     512
     87      1.1     ozaki #    hmac-ripemd160  160
     88      1.1     ozaki #    aes-xcbc-mac    128
     89      1.1     ozaki #    tcp-md5         8 to 640  XXX not enabled in rump kernels
     90      1.1     ozaki valid_keys_hmacmd5="128"
     91      1.1     ozaki invalid_keys_hmacmd5="120 136"
     92      1.1     ozaki valid_keys_hmacsha1="160"
     93      1.1     ozaki invalid_keys_hmacsha1="152 168"
     94      1.1     ozaki valid_keys_keyedmd5="128"
     95      1.1     ozaki invalid_keys_keyedmd5="120 136"
     96      1.1     ozaki valid_keys_keyedsha1="160"
     97      1.1     ozaki invalid_keys_keyedsha1="152 168"
     98      1.1     ozaki #valid_keys_null="0 2048"
     99      1.1     ozaki valid_keys_null="0"
    100      1.1     ozaki invalid_keys_null="8"
    101      1.1     ozaki valid_keys_hmacsha256="256"
    102      1.1     ozaki invalid_keys_hmacsha256="248 264"
    103      1.1     ozaki valid_keys_hmacsha384="384"
    104      1.1     ozaki invalid_keys_hmacsha384="376 392"
    105      1.1     ozaki valid_keys_hmacsha512="512"
    106      1.1     ozaki invalid_keys_hmacsha512="504 520"
    107      1.1     ozaki valid_keys_hmacripemd160="160"
    108      1.1     ozaki invalid_keys_hmacripemd160="152 168"
    109      1.1     ozaki valid_keys_aesxcbcmac="128"
    110      1.1     ozaki invalid_keys_aesxcbcmac="120 136"
    111      1.1     ozaki #valid_keys_tcpmd5="8 640"
    112      1.1     ozaki #invalid_keys_tcpmd5="648"
    113      1.1     ozaki 
    114      1.1     ozaki get_one_valid_keylen()
    115      1.1     ozaki {
    116      1.1     ozaki 	local algo=$1
    117      1.1     ozaki 	local _algo=$(echo $algo | sed 's/-//g')
    118      1.1     ozaki 	local len=
    119      1.1     ozaki 	local keylengths=
    120      1.1     ozaki 
    121      1.1     ozaki 	eval keylengths="\$valid_keys_${_algo}"
    122      1.1     ozaki 
    123      1.1     ozaki 	for len in $(echo $keylengths); do
    124      1.1     ozaki 		break;
    125      1.1     ozaki 	done
    126      1.1     ozaki 
    127      1.1     ozaki 	echo $len
    128      1.1     ozaki }
    129      1.1     ozaki 
    130      1.1     ozaki get_valid_keylengths()
    131      1.1     ozaki {
    132      1.1     ozaki 	local algo=$1
    133      1.1     ozaki 	local _algo=$(echo $algo | sed 's/-//g')
    134      1.1     ozaki 
    135      1.1     ozaki 	eval keylengths="\$valid_keys_${_algo}"
    136      1.1     ozaki 	echo $keylengths
    137      1.1     ozaki }
    138      1.1     ozaki 
    139      1.1     ozaki get_invalid_keylengths()
    140      1.1     ozaki {
    141      1.1     ozaki 	local algo=$1
    142      1.1     ozaki 	local _algo=$(echo $algo | sed 's/-//g')
    143      1.1     ozaki 
    144      1.1     ozaki 	eval keylengths="\$invalid_keys_${_algo}"
    145      1.1     ozaki 	echo $keylengths
    146      1.1     ozaki }
    147      1.1     ozaki 
    148      1.1     ozaki generate_key()
    149      1.1     ozaki {
    150      1.1     ozaki 	local keylen=$(($1 / 8))
    151      1.1     ozaki 	local key=
    152      1.1     ozaki 
    153      1.1     ozaki 	while [ $keylen -gt 0 ]; do
    154      1.1     ozaki 		key="${key}a"
    155      1.1     ozaki 		keylen=$((keylen - 1))
    156      1.1     ozaki 	done
    157      1.1     ozaki 	if [ ! -z "$key" ]; then
    158      1.1     ozaki 		key="\"$key\""
    159      1.1     ozaki 	fi
    160      1.1     ozaki 
    161      1.1     ozaki 	echo $key
    162      1.1     ozaki }
    163