Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^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");