^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) // SPDX-License-Identifier: GPL-2.0-or-later
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * xfrm algorithm interface
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Copyright (c) 2002 James Morris <jmorris@intercode.com.au>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #include <crypto/hash.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) #include <crypto/skcipher.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #include <linux/module.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #include <linux/kernel.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #include <linux/pfkeyv2.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #include <linux/crypto.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #include <linux/scatterlist.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #include <net/xfrm.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #if IS_ENABLED(CONFIG_INET_ESP) || IS_ENABLED(CONFIG_INET6_ESP)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #include <net/esp.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) * Algorithms supported by IPsec. These entries contain properties which
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) * are used in key negotiation and xfrm processing, and are used to verify
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) * that instantiated crypto transforms have correct parameters for IPsec
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) * purposes.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) static struct xfrm_algo_desc aead_list[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) .name = "rfc4106(gcm(aes))",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) .uinfo = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) .aead = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) .geniv = "seqiv",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) .icv_truncbits = 64,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) .pfkey_supported = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) .sadb_alg_id = SADB_X_EALG_AES_GCM_ICV8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) .sadb_alg_ivlen = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) .sadb_alg_minbits = 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) .sadb_alg_maxbits = 256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) .name = "rfc4106(gcm(aes))",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) .uinfo = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) .aead = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) .geniv = "seqiv",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) .icv_truncbits = 96,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) .pfkey_supported = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) .sadb_alg_id = SADB_X_EALG_AES_GCM_ICV12,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) .sadb_alg_ivlen = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) .sadb_alg_minbits = 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) .sadb_alg_maxbits = 256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) .name = "rfc4106(gcm(aes))",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) .uinfo = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) .aead = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) .geniv = "seqiv",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) .icv_truncbits = 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) .pfkey_supported = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) .sadb_alg_id = SADB_X_EALG_AES_GCM_ICV16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) .sadb_alg_ivlen = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) .sadb_alg_minbits = 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) .sadb_alg_maxbits = 256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) .name = "rfc4309(ccm(aes))",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) .uinfo = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) .aead = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) .geniv = "seqiv",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) .icv_truncbits = 64,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) .pfkey_supported = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) .sadb_alg_id = SADB_X_EALG_AES_CCM_ICV8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) .sadb_alg_ivlen = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) .sadb_alg_minbits = 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) .sadb_alg_maxbits = 256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) .name = "rfc4309(ccm(aes))",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) .uinfo = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) .aead = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) .geniv = "seqiv",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) .icv_truncbits = 96,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) .pfkey_supported = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) .sadb_alg_id = SADB_X_EALG_AES_CCM_ICV12,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) .sadb_alg_ivlen = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) .sadb_alg_minbits = 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) .sadb_alg_maxbits = 256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) .name = "rfc4309(ccm(aes))",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) .uinfo = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) .aead = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) .geniv = "seqiv",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) .icv_truncbits = 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) .pfkey_supported = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) .sadb_alg_id = SADB_X_EALG_AES_CCM_ICV16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) .sadb_alg_ivlen = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) .sadb_alg_minbits = 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) .sadb_alg_maxbits = 256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) .name = "rfc4543(gcm(aes))",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) .uinfo = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) .aead = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) .geniv = "seqiv",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) .icv_truncbits = 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) .pfkey_supported = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) .sadb_alg_id = SADB_X_EALG_NULL_AES_GMAC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) .sadb_alg_ivlen = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) .sadb_alg_minbits = 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) .sadb_alg_maxbits = 256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) .name = "rfc7539esp(chacha20,poly1305)",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) .uinfo = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) .aead = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) .geniv = "seqiv",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) .icv_truncbits = 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) .pfkey_supported = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) static struct xfrm_algo_desc aalg_list[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) .name = "digest_null",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) .uinfo = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) .auth = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) .icv_truncbits = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) .icv_fullbits = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) .pfkey_supported = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) .sadb_alg_id = SADB_X_AALG_NULL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) .sadb_alg_ivlen = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) .sadb_alg_minbits = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) .sadb_alg_maxbits = 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) .name = "hmac(md5)",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) .compat = "md5",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) .uinfo = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) .auth = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) .icv_truncbits = 96,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) .icv_fullbits = 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) .pfkey_supported = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) .sadb_alg_id = SADB_AALG_MD5HMAC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) .sadb_alg_ivlen = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) .sadb_alg_minbits = 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) .sadb_alg_maxbits = 128
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) .name = "hmac(sha1)",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) .compat = "sha1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) .uinfo = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) .auth = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) .icv_truncbits = 96,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) .icv_fullbits = 160,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) .pfkey_supported = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) .sadb_alg_id = SADB_AALG_SHA1HMAC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) .sadb_alg_ivlen = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) .sadb_alg_minbits = 160,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) .sadb_alg_maxbits = 160
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) .name = "hmac(sha256)",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) .compat = "sha256",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) .uinfo = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) .auth = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) .icv_truncbits = IS_ENABLED(CONFIG_ANDROID) ? 128 : 96,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) .icv_fullbits = 256,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) .pfkey_supported = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) .sadb_alg_id = SADB_X_AALG_SHA2_256HMAC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) .sadb_alg_ivlen = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) .sadb_alg_minbits = 256,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) .sadb_alg_maxbits = 256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) .name = "hmac(sha384)",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) .uinfo = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) .auth = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) .icv_truncbits = 192,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) .icv_fullbits = 384,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) .pfkey_supported = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) .sadb_alg_id = SADB_X_AALG_SHA2_384HMAC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) .sadb_alg_ivlen = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) .sadb_alg_minbits = 384,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) .sadb_alg_maxbits = 384
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) .name = "hmac(sha512)",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) .uinfo = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) .auth = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) .icv_truncbits = 256,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) .icv_fullbits = 512,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) .pfkey_supported = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) .sadb_alg_id = SADB_X_AALG_SHA2_512HMAC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) .sadb_alg_ivlen = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) .sadb_alg_minbits = 512,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) .sadb_alg_maxbits = 512
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) .name = "hmac(rmd160)",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) .compat = "rmd160",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) .uinfo = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) .auth = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) .icv_truncbits = 96,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) .icv_fullbits = 160,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) .pfkey_supported = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) .sadb_alg_id = SADB_X_AALG_RIPEMD160HMAC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) .sadb_alg_ivlen = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) .sadb_alg_minbits = 160,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) .sadb_alg_maxbits = 160
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) .name = "xcbc(aes)",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) .uinfo = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) .auth = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) .icv_truncbits = 96,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) .icv_fullbits = 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) .pfkey_supported = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) .sadb_alg_id = SADB_X_AALG_AES_XCBC_MAC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) .sadb_alg_ivlen = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) .sadb_alg_minbits = 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) .sadb_alg_maxbits = 128
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) /* rfc4494 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) .name = "cmac(aes)",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) .uinfo = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) .auth = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) .icv_truncbits = 96,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) .icv_fullbits = 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) .pfkey_supported = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) static struct xfrm_algo_desc ealg_list[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) .name = "ecb(cipher_null)",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) .compat = "cipher_null",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) .uinfo = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) .encr = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) .blockbits = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) .defkeybits = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) .pfkey_supported = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) .sadb_alg_id = SADB_EALG_NULL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) .sadb_alg_ivlen = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) .sadb_alg_minbits = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) .sadb_alg_maxbits = 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) .name = "cbc(des)",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) .compat = "des",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) .uinfo = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) .encr = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) .geniv = "echainiv",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) .blockbits = 64,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) .defkeybits = 64,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) .pfkey_supported = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) .sadb_alg_id = SADB_EALG_DESCBC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) .sadb_alg_ivlen = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) .sadb_alg_minbits = 64,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) .sadb_alg_maxbits = 64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) .name = "cbc(des3_ede)",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) .compat = "des3_ede",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) .uinfo = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) .encr = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) .geniv = "echainiv",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) .blockbits = 64,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) .defkeybits = 192,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) .pfkey_supported = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) .sadb_alg_id = SADB_EALG_3DESCBC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) .sadb_alg_ivlen = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) .sadb_alg_minbits = 192,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) .sadb_alg_maxbits = 192
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) .name = "cbc(cast5)",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) .compat = "cast5",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) .uinfo = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) .encr = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) .geniv = "echainiv",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) .blockbits = 64,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) .defkeybits = 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) .pfkey_supported = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) .sadb_alg_id = SADB_X_EALG_CASTCBC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) .sadb_alg_ivlen = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) .sadb_alg_minbits = 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) .sadb_alg_maxbits = 128
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) .name = "cbc(blowfish)",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) .compat = "blowfish",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) .uinfo = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) .encr = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) .geniv = "echainiv",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) .blockbits = 64,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) .defkeybits = 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) .pfkey_supported = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) .sadb_alg_id = SADB_X_EALG_BLOWFISHCBC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) .sadb_alg_ivlen = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) .sadb_alg_minbits = 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) .sadb_alg_maxbits = 448
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) .name = "cbc(aes)",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) .compat = "aes",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) .uinfo = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) .encr = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) .geniv = "echainiv",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) .blockbits = 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) .defkeybits = 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) .pfkey_supported = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) .sadb_alg_id = SADB_X_EALG_AESCBC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) .sadb_alg_ivlen = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) .sadb_alg_minbits = 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) .sadb_alg_maxbits = 256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) .name = "cbc(serpent)",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) .compat = "serpent",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) .uinfo = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) .encr = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) .geniv = "echainiv",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) .blockbits = 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) .defkeybits = 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) .pfkey_supported = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) .sadb_alg_id = SADB_X_EALG_SERPENTCBC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) .sadb_alg_ivlen = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) .sadb_alg_minbits = 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) .sadb_alg_maxbits = 256,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) .name = "cbc(camellia)",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) .compat = "camellia",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) .uinfo = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) .encr = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) .geniv = "echainiv",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) .blockbits = 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) .defkeybits = 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) .pfkey_supported = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) .sadb_alg_id = SADB_X_EALG_CAMELLIACBC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) .sadb_alg_ivlen = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) .sadb_alg_minbits = 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) .sadb_alg_maxbits = 256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) .name = "cbc(twofish)",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) .compat = "twofish",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) .uinfo = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) .encr = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) .geniv = "echainiv",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) .blockbits = 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) .defkeybits = 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) .pfkey_supported = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) .sadb_alg_id = SADB_X_EALG_TWOFISHCBC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530) .sadb_alg_ivlen = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531) .sadb_alg_minbits = 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) .sadb_alg_maxbits = 256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) .name = "rfc3686(ctr(aes))",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) .uinfo = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) .encr = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) .geniv = "seqiv",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) .blockbits = 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) .defkeybits = 160, /* 128-bit key + 32-bit nonce */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) .pfkey_supported = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) .sadb_alg_id = SADB_X_EALG_AESCTR,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) .sadb_alg_ivlen = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551) .sadb_alg_minbits = 160,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) .sadb_alg_maxbits = 288
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) static struct xfrm_algo_desc calg_list[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) .name = "deflate",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) .uinfo = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) .comp = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562) .threshold = 90,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565) .pfkey_supported = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566) .desc = { .sadb_alg_id = SADB_X_CALG_DEFLATE }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569) .name = "lzs",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570) .uinfo = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571) .comp = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572) .threshold = 90,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575) .pfkey_supported = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576) .desc = { .sadb_alg_id = SADB_X_CALG_LZS }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579) .name = "lzjh",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580) .uinfo = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581) .comp = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 582) .threshold = 50,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 583) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 584) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 585) .pfkey_supported = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 586) .desc = { .sadb_alg_id = SADB_X_CALG_LZJH }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 587) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 588) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 589)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 590) static inline int aalg_entries(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 591) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 592) return ARRAY_SIZE(aalg_list);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 593) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 594)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 595) static inline int ealg_entries(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 596) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 597) return ARRAY_SIZE(ealg_list);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 598) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 599)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 600) static inline int calg_entries(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 601) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 602) return ARRAY_SIZE(calg_list);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 603) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 604)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 605) struct xfrm_algo_list {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 606) struct xfrm_algo_desc *algs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 607) int entries;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 608) u32 type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 609) u32 mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 610) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 611)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 612) static const struct xfrm_algo_list xfrm_aead_list = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 613) .algs = aead_list,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 614) .entries = ARRAY_SIZE(aead_list),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 615) .type = CRYPTO_ALG_TYPE_AEAD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 616) .mask = CRYPTO_ALG_TYPE_MASK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 617) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 618)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 619) static const struct xfrm_algo_list xfrm_aalg_list = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 620) .algs = aalg_list,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 621) .entries = ARRAY_SIZE(aalg_list),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 622) .type = CRYPTO_ALG_TYPE_HASH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 623) .mask = CRYPTO_ALG_TYPE_HASH_MASK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 624) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 625)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 626) static const struct xfrm_algo_list xfrm_ealg_list = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 627) .algs = ealg_list,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 628) .entries = ARRAY_SIZE(ealg_list),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 629) .type = CRYPTO_ALG_TYPE_SKCIPHER,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 630) .mask = CRYPTO_ALG_TYPE_MASK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 631) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 632)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 633) static const struct xfrm_algo_list xfrm_calg_list = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 634) .algs = calg_list,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 635) .entries = ARRAY_SIZE(calg_list),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 636) .type = CRYPTO_ALG_TYPE_COMPRESS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 637) .mask = CRYPTO_ALG_TYPE_MASK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 638) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 639)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 640) static struct xfrm_algo_desc *xfrm_find_algo(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 641) const struct xfrm_algo_list *algo_list,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 642) int match(const struct xfrm_algo_desc *entry, const void *data),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 643) const void *data, int probe)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 644) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 645) struct xfrm_algo_desc *list = algo_list->algs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 646) int i, status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 647)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 648) for (i = 0; i < algo_list->entries; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 649) if (!match(list + i, data))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 650) continue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 651)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 652) if (list[i].available)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 653) return &list[i];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 654)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 655) if (!probe)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 656) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 657)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 658) status = crypto_has_alg(list[i].name, algo_list->type,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 659) algo_list->mask);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 660) if (!status)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 661) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 662)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 663) list[i].available = status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 664) return &list[i];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 665) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 666) return NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 667) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 668)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 669) static int xfrm_alg_id_match(const struct xfrm_algo_desc *entry,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 670) const void *data)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 671) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 672) return entry->desc.sadb_alg_id == (unsigned long)data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 673) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 674)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 675) struct xfrm_algo_desc *xfrm_aalg_get_byid(int alg_id)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 676) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 677) return xfrm_find_algo(&xfrm_aalg_list, xfrm_alg_id_match,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 678) (void *)(unsigned long)alg_id, 1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 679) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 680) EXPORT_SYMBOL_GPL(xfrm_aalg_get_byid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 681)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 682) struct xfrm_algo_desc *xfrm_ealg_get_byid(int alg_id)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 683) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 684) return xfrm_find_algo(&xfrm_ealg_list, xfrm_alg_id_match,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 685) (void *)(unsigned long)alg_id, 1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 686) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 687) EXPORT_SYMBOL_GPL(xfrm_ealg_get_byid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 688)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 689) struct xfrm_algo_desc *xfrm_calg_get_byid(int alg_id)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 690) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 691) return xfrm_find_algo(&xfrm_calg_list, xfrm_alg_id_match,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 692) (void *)(unsigned long)alg_id, 1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 693) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 694) EXPORT_SYMBOL_GPL(xfrm_calg_get_byid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 695)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 696) static int xfrm_alg_name_match(const struct xfrm_algo_desc *entry,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 697) const void *data)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 698) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 699) const char *name = data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 700)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 701) return name && (!strcmp(name, entry->name) ||
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 702) (entry->compat && !strcmp(name, entry->compat)));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 703) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 704)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 705) struct xfrm_algo_desc *xfrm_aalg_get_byname(const char *name, int probe)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 706) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 707) return xfrm_find_algo(&xfrm_aalg_list, xfrm_alg_name_match, name,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 708) probe);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 709) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 710) EXPORT_SYMBOL_GPL(xfrm_aalg_get_byname);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 711)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 712) struct xfrm_algo_desc *xfrm_ealg_get_byname(const char *name, int probe)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 713) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 714) return xfrm_find_algo(&xfrm_ealg_list, xfrm_alg_name_match, name,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 715) probe);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 716) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 717) EXPORT_SYMBOL_GPL(xfrm_ealg_get_byname);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 718)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 719) struct xfrm_algo_desc *xfrm_calg_get_byname(const char *name, int probe)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 720) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 721) return xfrm_find_algo(&xfrm_calg_list, xfrm_alg_name_match, name,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 722) probe);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 723) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 724) EXPORT_SYMBOL_GPL(xfrm_calg_get_byname);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 725)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 726) struct xfrm_aead_name {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 727) const char *name;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 728) int icvbits;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 729) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 730)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 731) static int xfrm_aead_name_match(const struct xfrm_algo_desc *entry,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 732) const void *data)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 733) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 734) const struct xfrm_aead_name *aead = data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 735) const char *name = aead->name;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 736)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 737) return aead->icvbits == entry->uinfo.aead.icv_truncbits && name &&
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 738) !strcmp(name, entry->name);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 739) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 740)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 741) struct xfrm_algo_desc *xfrm_aead_get_byname(const char *name, int icv_len, int probe)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 742) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 743) struct xfrm_aead_name data = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 744) .name = name,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 745) .icvbits = icv_len,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 746) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 747)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 748) return xfrm_find_algo(&xfrm_aead_list, xfrm_aead_name_match, &data,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 749) probe);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 750) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 751) EXPORT_SYMBOL_GPL(xfrm_aead_get_byname);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 752)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 753) struct xfrm_algo_desc *xfrm_aalg_get_byidx(unsigned int idx)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 754) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 755) if (idx >= aalg_entries())
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 756) return NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 757)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 758) return &aalg_list[idx];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 759) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 760) EXPORT_SYMBOL_GPL(xfrm_aalg_get_byidx);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 761)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 762) struct xfrm_algo_desc *xfrm_ealg_get_byidx(unsigned int idx)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 763) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 764) if (idx >= ealg_entries())
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 765) return NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 766)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 767) return &ealg_list[idx];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 768) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 769) EXPORT_SYMBOL_GPL(xfrm_ealg_get_byidx);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 770)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 771) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 772) * Probe for the availability of crypto algorithms, and set the available
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 773) * flag for any algorithms found on the system. This is typically called by
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 774) * pfkey during userspace SA add, update or register.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 775) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 776) void xfrm_probe_algs(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 777) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 778) int i, status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 779)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 780) BUG_ON(in_softirq());
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 781)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 782) for (i = 0; i < aalg_entries(); i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 783) status = crypto_has_ahash(aalg_list[i].name, 0, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 784) if (aalg_list[i].available != status)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 785) aalg_list[i].available = status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 786) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 787)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 788) for (i = 0; i < ealg_entries(); i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 789) status = crypto_has_skcipher(ealg_list[i].name, 0, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 790) if (ealg_list[i].available != status)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 791) ealg_list[i].available = status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 792) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 793)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 794) for (i = 0; i < calg_entries(); i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 795) status = crypto_has_comp(calg_list[i].name, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 796) CRYPTO_ALG_ASYNC);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 797) if (calg_list[i].available != status)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 798) calg_list[i].available = status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 799) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 800) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 801) EXPORT_SYMBOL_GPL(xfrm_probe_algs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 802)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 803) int xfrm_count_pfkey_auth_supported(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 804) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 805) int i, n;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 806)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 807) for (i = 0, n = 0; i < aalg_entries(); i++)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 808) if (aalg_list[i].available && aalg_list[i].pfkey_supported)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 809) n++;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 810) return n;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 811) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 812) EXPORT_SYMBOL_GPL(xfrm_count_pfkey_auth_supported);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 813)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 814) int xfrm_count_pfkey_enc_supported(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 815) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 816) int i, n;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 817)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 818) for (i = 0, n = 0; i < ealg_entries(); i++)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 819) if (ealg_list[i].available && ealg_list[i].pfkey_supported)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 820) n++;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 821) return n;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 822) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 823) EXPORT_SYMBOL_GPL(xfrm_count_pfkey_enc_supported);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 824)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 825) MODULE_LICENSE("GPL");