1 1.7 msaitoh # $NetBSD: algorithms.sh,v 1.7 2021/12/05 02:49:21 msaitoh 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.3 ozaki ESP_ENCRYPTION_ALGORITHMS_MINIMUM="null rijndael-cbc" 31 1.1 ozaki 32 1.7 msaitoh # Valid key lengths of ESP encryption 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.2 ozaki 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.5 ozaki IPCOMP_COMPRESSION_ALGORITHMS="deflate" 115 1.5 ozaki IPCOMP_COMPRESSION_ALGORITHMS_MINIMUM="deflate" 116 1.5 ozaki valid_keys_deflate="0" 117 1.5 ozaki invalid_keys_deflate="8" 118 1.5 ozaki minlen_deflate="90" 119 1.5 ozaki 120 1.1 ozaki get_one_valid_keylen() 121 1.1 ozaki { 122 1.1 ozaki local algo=$1 123 1.1 ozaki local _algo=$(echo $algo | sed 's/-//g') 124 1.1 ozaki local len= 125 1.1 ozaki local keylengths= 126 1.1 ozaki 127 1.1 ozaki eval keylengths="\$valid_keys_${_algo}" 128 1.1 ozaki 129 1.1 ozaki for len in $(echo $keylengths); do 130 1.1 ozaki break; 131 1.1 ozaki done 132 1.1 ozaki 133 1.1 ozaki echo $len 134 1.1 ozaki } 135 1.1 ozaki 136 1.1 ozaki get_valid_keylengths() 137 1.1 ozaki { 138 1.1 ozaki local algo=$1 139 1.1 ozaki local _algo=$(echo $algo | sed 's/-//g') 140 1.1 ozaki 141 1.1 ozaki eval keylengths="\$valid_keys_${_algo}" 142 1.1 ozaki echo $keylengths 143 1.1 ozaki } 144 1.1 ozaki 145 1.1 ozaki get_invalid_keylengths() 146 1.1 ozaki { 147 1.1 ozaki local algo=$1 148 1.1 ozaki local _algo=$(echo $algo | sed 's/-//g') 149 1.1 ozaki 150 1.1 ozaki eval keylengths="\$invalid_keys_${_algo}" 151 1.1 ozaki echo $keylengths 152 1.1 ozaki } 153 1.1 ozaki 154 1.1 ozaki generate_key() 155 1.1 ozaki { 156 1.1 ozaki local keylen=$(($1 / 8)) 157 1.1 ozaki local key= 158 1.1 ozaki 159 1.1 ozaki while [ $keylen -gt 0 ]; do 160 1.1 ozaki key="${key}a" 161 1.1 ozaki keylen=$((keylen - 1)) 162 1.1 ozaki done 163 1.1 ozaki if [ ! -z "$key" ]; then 164 1.1 ozaki key="\"$key\"" 165 1.1 ozaki fi 166 1.1 ozaki 167 1.1 ozaki echo $key 168 1.1 ozaki } 169 1.4 ozaki 170 1.4 ozaki generate_algo_args() 171 1.4 ozaki { 172 1.4 ozaki local proto=$1 173 1.4 ozaki local algo=$2 174 1.4 ozaki local keylen=$(get_one_valid_keylen $algo) 175 1.4 ozaki local key=$(generate_key $keylen) 176 1.4 ozaki 177 1.6 ozaki if [ $proto = esp -o $proto = "esp-udp" ]; then 178 1.4 ozaki echo "-E $algo $key" 179 1.5 ozaki elif [ $proto = ah ]; then 180 1.5 ozaki echo "-A $algo $key" 181 1.4 ozaki else 182 1.5 ozaki echo "-C $algo $key" 183 1.4 ozaki fi 184 1.4 ozaki } 185 1.5 ozaki 186 1.5 ozaki get_minlen() 187 1.5 ozaki { 188 1.5 ozaki local algo=$1 189 1.5 ozaki local minlen= 190 1.5 ozaki 191 1.5 ozaki eval minlen="\$minlen_${algo}" 192 1.5 ozaki echo $minlen 193 1.5 ozaki } 194