Re: [PATCH v2] selftests/net: Refactor xfrm_fill_key() to use array of structs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 8/3/22 8:23 AM, Gautam Menghani wrote:
> A TODO in net/ipsec.c asks to refactor the code in xfrm_fill_key() to
> use set/map to avoid manually comparing each algorithm with the "name" 
> parameter passed to the function as an argument. This patch refactors 
> the code to create an array of structs where each struct contains the 
> algorithm name and its corresponding key length.
> 
> Signed-off-by: Gautam Menghani <gautammenghani201@xxxxxxxxx>
> ---
> changes in v2:
> 1. Fix the compilation warnings for struct and variable declaration
> 
>  tools/testing/selftests/net/ipsec.c | 108 +++++++++++++---------------
>  1 file changed, 49 insertions(+), 59 deletions(-)
> 
> diff --git a/tools/testing/selftests/net/ipsec.c b/tools/testing/selftests/net/ipsec.c
> index cc10c10c5ed9..4a0eeb5b71d2 100644
> --- a/tools/testing/selftests/net/ipsec.c
> +++ b/tools/testing/selftests/net/ipsec.c
> @@ -58,6 +58,8 @@
>  #define VETH_FMT	"ktst-%d"
>  #define VETH_LEN	12
>  
> +#define XFRM_ALGO_NR_KEYS 29
> +
>  static int nsfd_parent	= -1;
>  static int nsfd_childa	= -1;
>  static int nsfd_childb	= -1;
> @@ -75,6 +77,46 @@ const unsigned int ping_timeout		= 300;
>  const unsigned int ping_count		= 100;
>  const unsigned int ping_success		= 80;
>  
> +struct xfrm_key_entry {
> +	char algo_name[35];
> +	int key_len;
> +};
> +
> +struct xfrm_key_entry xfrm_key_entries[XFRM_ALGO_NR_KEYS];
There seems no need to fill up xfrm_key_entries at run time. Please fill
them at compile time.

struct xfrm_key_entry xfrm_key_entries[] = {
	{"digest_null", 0},
	{"ecb(cipher_null)", 0},
	...
};

> +
> +static void init_xfrm_algo_keys(void)
> +{
> +	xfrm_key_entries[0] = (struct xfrm_key_entry) {"digest_null", 0};
> +	xfrm_key_entries[1] = (struct xfrm_key_entry) {"ecb(cipher_null)", 0};
> +	xfrm_key_entries[2] = (struct xfrm_key_entry) {"cbc(des)", 64};
> +	xfrm_key_entries[3] = (struct xfrm_key_entry) {"hmac(md5)", 128};
> +	xfrm_key_entries[4] = (struct xfrm_key_entry) {"cmac(aes)", 128};
> +	xfrm_key_entries[5] = (struct xfrm_key_entry) {"xcbc(aes)", 128};
> +	xfrm_key_entries[6] = (struct xfrm_key_entry) {"cbc(cast5)", 128};
> +	xfrm_key_entries[7] = (struct xfrm_key_entry) {"cbc(serpent)", 128};
> +	xfrm_key_entries[8] = (struct xfrm_key_entry) {"hmac(sha1)", 160};
> +	xfrm_key_entries[9] = (struct xfrm_key_entry) {"hmac(rmd160)", 160};
> +	xfrm_key_entries[10] = (struct xfrm_key_entry) {"cbc(des3_ede)", 192};
> +	xfrm_key_entries[11] = (struct xfrm_key_entry) {"hmac(sha256)", 256};
> +	xfrm_key_entries[12] = (struct xfrm_key_entry) {"cbc(aes)", 256};
> +	xfrm_key_entries[13] = (struct xfrm_key_entry) {"cbc(camellia)", 256};
> +	xfrm_key_entries[14] = (struct xfrm_key_entry) {"cbc(twofish)", 256};
> +	xfrm_key_entries[15] = (struct xfrm_key_entry) {"rfc3686(ctr(aes))", 288};
> +	xfrm_key_entries[16] = (struct xfrm_key_entry) {"hmac(sha384)", 384};
> +	xfrm_key_entries[17] = (struct xfrm_key_entry) {"cbc(blowfish)", 448};
> +	xfrm_key_entries[18] = (struct xfrm_key_entry) {"hmac(sha512)", 512};
> +	xfrm_key_entries[19] = (struct xfrm_key_entry) {"rfc4106(gcm(aes))-128", 160};
> +	xfrm_key_entries[20] = (struct xfrm_key_entry) {"rfc4543(gcm(aes))-128", 160};
> +	xfrm_key_entries[21] = (struct xfrm_key_entry) {"rfc4309(ccm(aes))-128", 152};
> +	xfrm_key_entries[22] = (struct xfrm_key_entry) {"rfc4106(gcm(aes))-192", 224};
> +	xfrm_key_entries[23] = (struct xfrm_key_entry) {"rfc4543(gcm(aes))-192", 224};
> +	xfrm_key_entries[24] = (struct xfrm_key_entry) {"rfc4309(ccm(aes))-192", 216};
> +	xfrm_key_entries[25] = (struct xfrm_key_entry) {"rfc4106(gcm(aes))-256", 288};
> +	xfrm_key_entries[26] = (struct xfrm_key_entry) {"rfc4543(gcm(aes))-256", 288};
> +	xfrm_key_entries[27] = (struct xfrm_key_entry) {"rfc4309(ccm(aes))-256", 280};
> +	xfrm_key_entries[28] = (struct xfrm_key_entry) {"rfc7539(chacha20,poly1305)-128", 0};
> +}

-- 
Muhammad Usama Anjum



[Index of Archives]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Share Photos]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]

  Powered by Linux