From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michael Tremer To: development@lists.ipfire.org Subject: [PATCH 1/2] vpnmain.cgi: Add support for key exchange using ML-KEM Date: Mon, 03 Feb 2025 20:50:11 +0000 Message-ID: <20250203205012.3773819-1-michael.tremer@ipfire.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============7164165996814698169==" List-Id: --===============7164165996814698169== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable There are enabled by default, because I don't see any reason why we should not offer this. Signed-off-by: Michael Tremer --- html/cgi-bin/vpnmain.cgi | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/html/cgi-bin/vpnmain.cgi b/html/cgi-bin/vpnmain.cgi index 3541aaa29..05376e029 100755 --- a/html/cgi-bin/vpnmain.cgi +++ b/html/cgi-bin/vpnmain.cgi @@ -2384,11 +2384,11 @@ END #use default advanced value $cgiparams{'IKE_ENCRYPTION'} =3D 'chacha20poly1305|aes256gcm128|aes256gcm96= |aes256gcm64|aes256|aes192gcm128|aes192gcm96|aes192gcm64|aes192|aes128gcm128|= aes128gcm96|aes128gcm64|aes128'; #[18]; $cgiparams{'IKE_INTEGRITY'} =3D 'sha2_512|sha2_256'; #[19]; - $cgiparams{'IKE_GROUPTYPE'} =3D 'curve448|curve25519|e521|e384|= 4096|3072'; #[20]; + $cgiparams{'IKE_GROUPTYPE'} =3D 'mlkem1024|mlkem768|mlkem512|cu= rve448|curve25519|e521|e384|4096|3072'; #[20]; $cgiparams{'IKE_LIFETIME'} =3D '3'; #[16]; $cgiparams{'ESP_ENCRYPTION'} =3D 'chacha20poly1305|aes256gcm128|aes256gcm96= |aes256gcm64|aes256|aes192gcm128|aes192gcm96|aes192gcm64|aes192|aes128gcm128|= aes128gcm96|aes128gcm64|aes128'; #[21]; $cgiparams{'ESP_INTEGRITY'} =3D 'sha2_512|sha2_256'; #[22]; - $cgiparams{'ESP_GROUPTYPE'} =3D 'curve448|curve25519|e521|e384|= 4096|3072'; #[23]; + $cgiparams{'ESP_GROUPTYPE'} =3D 'mlkem1024|mlkem768|mlkem512|cu= rve448|curve25519|e521|e384|4096|3072'; #[23]; $cgiparams{'ESP_KEYLIFE'} =3D '1'; #[17]; $cgiparams{'COMPRESSION'} =3D 'off'; #[13]; $cgiparams{'ONLY_PROPOSED'} =3D 'on'; #[24]; @@ -2769,7 +2769,7 @@ if(($cgiparams{'ACTION'} eq $Lang::tr{'advanced'}) || goto ADVANCED_ERROR; } foreach my $val (@temp) { - if ($val !~ /^(curve448|curve25519|e521|e384|e256|e224|e192|e512bp|e384bp= |e256bp|e224bp|768|1024|1536|2048|3072|4096|6144|8192)$/) { + if ($val !~ /^(mlkem(1024|768|512)|curve448|curve25519|e521|e384|e256|e22= 4|e192|e512bp|e384bp|e256bp|e224bp|768|1024|1536|2048|3072|4096|6144|8192)$/)= { $errormessage =3D $Lang::tr{'invalid input'}; goto ADVANCED_ERROR; } @@ -2810,7 +2810,7 @@ if(($cgiparams{'ACTION'} eq $Lang::tr{'advanced'}) || goto ADVANCED_ERROR; } foreach my $val (@temp) { - if ($val !~ /^(curve448|curve25519|e521|e384|e256|e224|e192|e512bp|e384bp= |e256bp|e224bp|768|1024|1536|2048|3072|4096|6144|8192|none)$/) { + if ($val !~ /^(mlkem(1024|768|512)|curve448|curve25519|e521|e384|e256|e22= 4|e192|e512bp|e384bp|e256bp|e224bp|768|1024|1536|2048|3072|4096|6144|8192|non= e)$/) { $errormessage =3D $Lang::tr{'invalid input'}; goto ADVANCED_ERROR; } @@ -2950,6 +2950,9 @@ if(($cgiparams{'ACTION'} eq $Lang::tr{'advanced'}) || $checked{'IKE_INTEGRITY'}{'aesxcbc'} =3D ''; @temp =3D split('\|', $cgiparams{'IKE_INTEGRITY'}); foreach my $key (@temp) {$checked{'IKE_INTEGRITY'}{$key} =3D "selected=3D's= elected'"; } + $checked{'IKE_GROUPTYPE'}{'mlkem1024'} =3D ''; + $checked{'IKE_GROUPTYPE'}{'mlkem768'} =3D ''; + $checked{'IKE_GROUPTYPE'}{'mlkem512'} =3D ''; $checked{'IKE_GROUPTYPE'}{'curve448'} =3D ''; $checked{'IKE_GROUPTYPE'}{'curve25519'} =3D ''; $checked{'IKE_GROUPTYPE'}{'768'} =3D ''; @@ -2990,6 +2993,9 @@ if(($cgiparams{'ACTION'} eq $Lang::tr{'advanced'}) || $checked{'ESP_INTEGRITY'}{'aesxcbc'} =3D ''; @temp =3D split('\|', $cgiparams{'ESP_INTEGRITY'}); foreach my $key (@temp) {$checked{'ESP_INTEGRITY'}{$key} =3D "selected=3D's= elected'"; } + $checked{'ESP_GROUPTYPE'}{'mlkem1024'} =3D ''; + $checked{'ESP_GROUPTYPE'}{'mlkem768'} =3D ''; + $checked{'ESP_GROUPTYPE'}{'mlkem512'} =3D ''; $checked{'ESP_GROUPTYPE'}{'curve448'} =3D ''; $checked{'ESP_GROUPTYPE'}{'curve25519'} =3D ''; $checked{'ESP_GROUPTYPE'}{'768'} =3D ''; @@ -3155,6 +3161,9 @@ if(($cgiparams{'ACTION'} eq $Lang::tr{'advanced'}) || $Lang::tr{'grouptype'} + + + @@ -3755,7 +3767,9 @@ sub make_algos($$$$$) { if ($mode eq "ike") { push(@algo, $int); =20 - if ($grp =3D~ m/^e(.*)$/) { + if ($grp =3D~ m/^mlkem(\d+)$/) { + push(@algo, "$grp"); + } elsif ($grp =3D~ m/^e(.*)$/) { push(@algo, "ecp$1"); } elsif ($grp =3D~ m/curve(448|25519)/) { push(@algo, "$grp"); @@ -3772,6 +3786,8 @@ sub make_algos($$$$$) { =20 if (!$pfs || $grp eq "none") { # noop + } elsif ($grp =3D~ m/^mlkem(\d+)$/) { + push(@algo, "$grp"); } elsif ($grp =3D~ m/^e(.*)$/) { push(@algo, "ecp$1"); } elsif ($grp =3D~ m/curve(448|25519)/) { --=20 2.39.5 --===============7164165996814698169==--