Blob Blame History Raw
diff -up crypto-policies/back-ends/libreswan.pl.libreswan-fix crypto-policies/back-ends/libreswan.pl
--- crypto-policies/back-ends/libreswan.pl.libreswan-fix	2018-12-17 17:01:44.000000000 +0100
+++ crypto-policies/back-ends/libreswan.pl	2019-02-18 10:34:57.525777928 +0100
@@ -26,7 +26,9 @@ sub append {
 
 my %group_map = (
 	'X448'    => '',
-	'X25519'    => '', #dh31 - not in f28
+	'X25519'    => '',
+# Disabled for now as it cannot be prioritized over others
+#	'X25519'    => 'dh31',
 	'SECP256R1' => 'dh19',
 	'SECP384R1' => 'dh20',
 	'SECP521R1' => 'dh21',
@@ -38,31 +40,42 @@ my %group_map = (
 	'FFDHE-8192' => 'dh18'
 );
 
+my %cipher_map = (
+	'AES-256-CBC'       => 'aes256',
+	'AES-128-CBC'       => 'aes128',
+	'AES-256-GCM'       => 'aes_gcm256',
+	'AES-128-GCM'       => 'aes_gcm128',
+	'CHACHA20-POLY1305' => 'chacha20_poly1305',
+# Unused for IKEv2
+#	'3DES-CBC'          => '3des',
+);
+
 my %cipher_prf_map = (
-	'AES-256-CBC-HMAC-SHA2-512'       => 'aes256-sha2_512',
-	'AES-256-CBC-HMAC-SHA2-256'       => 'aes256-sha2_256',
-	'AES-128-CBC-HMAC-SHA2-256'       => 'aes128-sha2_256',
-	'AES-256-CBC-HMAC-SHA1'       => 'aes256-sha1',
-	'AES-128-CBC-HMAC-SHA1'       => 'aes128-sha1',
-	'AES-256-GCM-HMAC-SHA2-512'       => 'aes_gcm256-sha2_512',
-	'AES-256-GCM-HMAC-SHA2-256'       => 'aes_gcm256-sha2_256',
-	'AES-128-GCM-HMAC-SHA2-512'       => 'aes_gcm128-sha2_512',
-	'AES-128-GCM-HMAC-SHA2-256'       => 'aes_gcm128-sha2_256',
-	'CHACHA20-POLY1305-HMAC-SHA2-512' => 'chacha20_poly1305-sha2_512',
-	'CHACHA20-POLY1305-HMAC-SHA2-256' => 'chacha20_poly1305-sha2_256',
-	'3DES-CBC-HMAC-SHA1'          => '3des-sha1',
+	'AES-256-CBC-HMAC-SHA2-512'       => 'sha2_512',
+	'AES-256-CBC-HMAC-SHA2-256'       => 'sha2_256',
+	'AES-128-CBC-HMAC-SHA2-256'       => 'sha2_256',
+# Not needed for IKEv2
+#	'AES-256-CBC-HMAC-SHA1'           => 'sha1',
+#	'AES-128-CBC-HMAC-SHA1'           => 'sha1',
+	'AES-256-GCM-HMAC-SHA2-512'       => 'sha2_512',
+	'AES-256-GCM-HMAC-SHA2-256'       => 'sha2_256',
+	'AES-128-GCM-HMAC-SHA2-512'       => 'sha2_512',
+	'AES-128-GCM-HMAC-SHA2-256'       => 'sha2_256',
+	'CHACHA20-POLY1305-HMAC-SHA2-512' => 'sha2_512',
+	'CHACHA20-POLY1305-HMAC-SHA2-256' => 'sha2_256',
+#	'3DES-CBC-HMAC-SHA1'              => 'sha1',
 );
 
 my %cipher_mac_map = (
-	'AES-256-CBC-HMAC-SHA2-512'       => 'aes256-sha2_512',
-	'AES-256-CBC-HMAC-SHA2-256'       => 'aes256-sha2_256',
-	'AES-128-CBC-HMAC-SHA2-256'       => 'aes128-sha2_256',
-	'AES-256-CBC-HMAC-SHA1'       => 'aes256-sha1',
-	'AES-128-CBC-HMAC-SHA1'       => 'aes128-sha1',
-	'AES-256-GCM-AEAD'            => 'aes_gcm256',
-	'AES-128-GCM-AEAD'            => 'aes_gcm128',
-	'CHACHA20-POLY1305-AEAD'      => 'chacha20_poly1305',
-	'3DES-CBC-HMAC-SHA1'          => '3des-sha1',
+	'AES-256-CBC-HMAC-SHA2-512'       => 'sha2_512',
+	'AES-256-CBC-HMAC-SHA2-256'       => 'sha2_256',
+	'AES-128-CBC-HMAC-SHA2-256'       => 'sha2_256',
+	'AES-256-CBC-HMAC-SHA1'       => 'sha1',
+	'AES-128-CBC-HMAC-SHA1'       => 'sha1',
+	'AES-256-GCM-AEAD'            => '',
+	'AES-128-GCM-AEAD'            => '',
+	'CHACHA20-POLY1305-AEAD'      => '',
+#	'3DES-CBC-HMAC-SHA1'          => '3des-sha1',
 );
 
 my %protocol_map = (
@@ -147,35 +160,52 @@ sub generate_temp_policy() {
 	$tmp = '';
 
 	my $cipher;
+	my $cm;
 	my $group;
 	my $mac;
+	my $mm;
 	my $combo;
 
 	%mac_prio_map = %mac_ike_prio_map;
 	my @sorted_mac_list = sort compare @mac_list;
 
-	foreach (@group_list) {
-		$group = $group_map{$_};
-		if (!defined($group) || $group eq '') {
+
+	foreach (@cipher_list) {
+		$cipher = $_;
+		$cm = $cipher_map{$cipher};
+		if (!defined($cm)) {
+#			print STDERR "libreswan: unknown cipher: $cipher\n";
 			next;
 		}
+		$combo = $cm."-";
+		foreach (@sorted_mac_list) {
+			$mac = $_;
 
-		foreach (@cipher_list) {
-			$cipher = $_;
-			foreach (@sorted_mac_list) {
-				$mac = $_;
-
-				my $cm=$cipher."-".$mac;
-				$combo = $cipher_prf_map{$cm};
-
-				if (!defined($combo)) {
-#					print STDERR "libreswan: unknown combo: $cipher-$mac\n";
-					next;
-				}
+			$mm = $cipher_prf_map{$cipher."-".$mac};
 
-				append("${combo};${group}", \$tmp);
+			if (!defined($mm)) {
+#				print STDERR "libreswan: unknown combo: $cipher-$mac\n";
+				next;
 			}
+
+			$combo = $combo.$mm."+";
 		}
+
+		my $lastc = substr($combo, -1);
+		if ($lastc eq "-") {
+			next;
+		}
+		# Replace the last + with -
+		substr($combo, -1) = "-";
+		foreach (@group_list) {
+			$group = $group_map{$_};
+			if (!defined($group) || $group eq '') {
+				next;
+			}
+			$combo = $combo.$group."+";
+		}
+		substr($combo, -1) = '';
+		append("${combo}", \$tmp);
 	}
 
 	if ($tmp ne '') {
@@ -189,20 +219,35 @@ sub generate_temp_policy() {
 	$tmp = '';
 	foreach (@cipher_list) {
 		$cipher = $_;
+		$cm = $cipher_map{$cipher};
+		if (!defined($cm)) {
+#			print STDERR "libreswan: unknown cipher: $cipher\n";
+			next;
+		}
+		$combo = $cm."-";
 		foreach (@sorted_mac_list) {
 			$mac = $_;
 
-			my $cm=$cipher."-".$mac;
-			$combo = $cipher_mac_map{$cm};
+			$mm = $cipher_mac_map{$cipher."-".$mac};
 
-			if (!defined($combo)) {
+			if (!defined($mm)) {
 				next;
 			}
 
-			if ($tmp !~ $combo) {
-				append("${combo}", \$tmp);
+			if ($mm eq '') {
+				# Special handling for AEAD
+				substr($combo, -1) = '+';
+			} else {
+				$combo = $combo.$mm."+";
 			}
 		}
+
+		my $lastc = substr($combo, -1);
+		if ($lastc eq "-") {
+			next;
+		}
+		substr($combo, -1) = '';
+		append("${combo}", \$tmp);
 	}
 
 	if ($tmp ne '') {
diff -up crypto-policies/tests/outputs/DEFAULT-libreswan.txt.libreswan-fix crypto-policies/tests/outputs/DEFAULT-libreswan.txt
--- crypto-policies/tests/outputs/DEFAULT-libreswan.txt.libreswan-fix	2018-12-17 17:01:44.000000000 +0100
+++ crypto-policies/tests/outputs/DEFAULT-libreswan.txt	2019-02-18 10:34:57.526777910 +0100
@@ -1,5 +1,5 @@
 conn %default
 	ikev2=insist
 	pfs=yes
-	ike=aes_gcm256-sha2_512;dh19,aes_gcm256-sha2_256;dh19,chacha20_poly1305-sha2_512;dh19,chacha20_poly1305-sha2_256;dh19,aes256-sha2_512;dh19,aes256-sha2_256;dh19,aes256-sha1;dh19,aes_gcm128-sha2_512;dh19,aes_gcm128-sha2_256;dh19,aes128-sha2_256;dh19,aes128-sha1;dh19,aes_gcm256-sha2_512;dh20,aes_gcm256-sha2_256;dh20,chacha20_poly1305-sha2_512;dh20,chacha20_poly1305-sha2_256;dh20,aes256-sha2_512;dh20,aes256-sha2_256;dh20,aes256-sha1;dh20,aes_gcm128-sha2_512;dh20,aes_gcm128-sha2_256;dh20,aes128-sha2_256;dh20,aes128-sha1;dh20,aes_gcm256-sha2_512;dh21,aes_gcm256-sha2_256;dh21,chacha20_poly1305-sha2_512;dh21,chacha20_poly1305-sha2_256;dh21,aes256-sha2_512;dh21,aes256-sha2_256;dh21,aes256-sha1;dh21,aes_gcm128-sha2_512;dh21,aes_gcm128-sha2_256;dh21,aes128-sha2_256;dh21,aes128-sha1;dh21,aes_gcm256-sha2_512;dh14,aes_gcm256-sha2_256;dh14,chacha20_poly1305-sha2_512;dh14,chacha20_poly1305-sha2_256;dh14,aes256-sha2_512;dh14,aes256-sha2_256;dh14,aes256-sha1;dh14,aes_gcm128-sha2_512;dh14,aes_gcm128-sha2_256;dh14,aes128-sha2_256;dh14,aes128-sha1;dh14,aes_gcm256-sha2_512;dh15,aes_gcm256-sha2_256;dh15,chacha20_poly1305-sha2_512;dh15,chacha20_poly1305-sha2_256;dh15,aes256-sha2_512;dh15,aes256-sha2_256;dh15,aes256-sha1;dh15,aes_gcm128-sha2_512;dh15,aes_gcm128-sha2_256;dh15,aes128-sha2_256;dh15,aes128-sha1;dh15,aes_gcm256-sha2_512;dh16,aes_gcm256-sha2_256;dh16,chacha20_poly1305-sha2_512;dh16,chacha20_poly1305-sha2_256;dh16,aes256-sha2_512;dh16,aes256-sha2_256;dh16,aes256-sha1;dh16,aes_gcm128-sha2_512;dh16,aes_gcm128-sha2_256;dh16,aes128-sha2_256;dh16,aes128-sha1;dh16,aes_gcm256-sha2_512;dh18,aes_gcm256-sha2_256;dh18,chacha20_poly1305-sha2_512;dh18,chacha20_poly1305-sha2_256;dh18,aes256-sha2_512;dh18,aes256-sha2_256;dh18,aes256-sha1;dh18,aes_gcm128-sha2_512;dh18,aes_gcm128-sha2_256;dh18,aes128-sha2_256;dh18,aes128-sha1;dh18
-	esp=aes_gcm256,chacha20_poly1305,aes256-sha2_512,aes256-sha1,aes256-sha2_256,aes_gcm128,aes128-sha1,aes128-sha2_256
+	ike=aes_gcm256-sha2_512+sha2_256-dh19+dh20+dh21+dh14+dh15+dh16+dh18,chacha20_poly1305-sha2_512+sha2_256-dh19+dh20+dh21+dh14+dh15+dh16+dh18,aes256-sha2_512+sha2_256-dh19+dh20+dh21+dh14+dh15+dh16+dh18,aes_gcm128-sha2_512+sha2_256-dh19+dh20+dh21+dh14+dh15+dh16+dh18,aes128-sha2_256-dh19+dh20+dh21+dh14+dh15+dh16+dh18
+	esp=aes_gcm256,chacha20_poly1305,aes256-sha2_512+sha1+sha2_256,aes_gcm128,aes128-sha1+sha2_256
diff -up crypto-policies/tests/outputs/FIPS-libreswan.txt.libreswan-fix crypto-policies/tests/outputs/FIPS-libreswan.txt
--- crypto-policies/tests/outputs/FIPS-libreswan.txt.libreswan-fix	2018-12-17 17:01:44.000000000 +0100
+++ crypto-policies/tests/outputs/FIPS-libreswan.txt	2019-02-18 10:34:57.526777910 +0100
@@ -1,5 +1,5 @@
 conn %default
 	ikev2=insist
 	pfs=yes
-	ike=aes_gcm256-sha2_512;dh19,aes_gcm256-sha2_256;dh19,aes256-sha2_512;dh19,aes256-sha2_256;dh19,aes256-sha1;dh19,aes_gcm128-sha2_512;dh19,aes_gcm128-sha2_256;dh19,aes128-sha2_256;dh19,aes128-sha1;dh19,aes_gcm256-sha2_512;dh20,aes_gcm256-sha2_256;dh20,aes256-sha2_512;dh20,aes256-sha2_256;dh20,aes256-sha1;dh20,aes_gcm128-sha2_512;dh20,aes_gcm128-sha2_256;dh20,aes128-sha2_256;dh20,aes128-sha1;dh20,aes_gcm256-sha2_512;dh21,aes_gcm256-sha2_256;dh21,aes256-sha2_512;dh21,aes256-sha2_256;dh21,aes256-sha1;dh21,aes_gcm128-sha2_512;dh21,aes_gcm128-sha2_256;dh21,aes128-sha2_256;dh21,aes128-sha1;dh21,aes_gcm256-sha2_512;dh14,aes_gcm256-sha2_256;dh14,aes256-sha2_512;dh14,aes256-sha2_256;dh14,aes256-sha1;dh14,aes_gcm128-sha2_512;dh14,aes_gcm128-sha2_256;dh14,aes128-sha2_256;dh14,aes128-sha1;dh14,aes_gcm256-sha2_512;dh15,aes_gcm256-sha2_256;dh15,aes256-sha2_512;dh15,aes256-sha2_256;dh15,aes256-sha1;dh15,aes_gcm128-sha2_512;dh15,aes_gcm128-sha2_256;dh15,aes128-sha2_256;dh15,aes128-sha1;dh15,aes_gcm256-sha2_512;dh16,aes_gcm256-sha2_256;dh16,aes256-sha2_512;dh16,aes256-sha2_256;dh16,aes256-sha1;dh16,aes_gcm128-sha2_512;dh16,aes_gcm128-sha2_256;dh16,aes128-sha2_256;dh16,aes128-sha1;dh16,aes_gcm256-sha2_512;dh18,aes_gcm256-sha2_256;dh18,aes256-sha2_512;dh18,aes256-sha2_256;dh18,aes256-sha1;dh18,aes_gcm128-sha2_512;dh18,aes_gcm128-sha2_256;dh18,aes128-sha2_256;dh18,aes128-sha1;dh18
-	esp=aes_gcm256,aes256-sha2_512,aes256-sha1,aes256-sha2_256,aes_gcm128,aes128-sha1,aes128-sha2_256
+	ike=aes_gcm256-sha2_512+sha2_256-dh19+dh20+dh21+dh14+dh15+dh16+dh18,aes256-sha2_512+sha2_256-dh19+dh20+dh21+dh14+dh15+dh16+dh18,aes_gcm128-sha2_512+sha2_256-dh19+dh20+dh21+dh14+dh15+dh16+dh18,aes128-sha2_256-dh19+dh20+dh21+dh14+dh15+dh16+dh18
+	esp=aes_gcm256,aes256-sha2_512+sha1+sha2_256,aes_gcm128,aes128-sha1+sha2_256
diff -up crypto-policies/tests/outputs/FUTURE-libreswan.txt.libreswan-fix crypto-policies/tests/outputs/FUTURE-libreswan.txt
--- crypto-policies/tests/outputs/FUTURE-libreswan.txt.libreswan-fix	2018-12-17 17:01:44.000000000 +0100
+++ crypto-policies/tests/outputs/FUTURE-libreswan.txt	2019-02-18 10:34:57.527777893 +0100
@@ -1,5 +1,5 @@
 conn %default
 	ikev2=insist
 	pfs=yes
-	ike=aes_gcm256-sha2_512;dh19,aes_gcm256-sha2_256;dh19,chacha20_poly1305-sha2_512;dh19,chacha20_poly1305-sha2_256;dh19,aes256-sha2_512;dh19,aes256-sha2_256;dh19,aes_gcm256-sha2_512;dh20,aes_gcm256-sha2_256;dh20,chacha20_poly1305-sha2_512;dh20,chacha20_poly1305-sha2_256;dh20,aes256-sha2_512;dh20,aes256-sha2_256;dh20,aes_gcm256-sha2_512;dh21,aes_gcm256-sha2_256;dh21,chacha20_poly1305-sha2_512;dh21,chacha20_poly1305-sha2_256;dh21,aes256-sha2_512;dh21,aes256-sha2_256;dh21,aes_gcm256-sha2_512;dh15,aes_gcm256-sha2_256;dh15,chacha20_poly1305-sha2_512;dh15,chacha20_poly1305-sha2_256;dh15,aes256-sha2_512;dh15,aes256-sha2_256;dh15,aes_gcm256-sha2_512;dh16,aes_gcm256-sha2_256;dh16,chacha20_poly1305-sha2_512;dh16,chacha20_poly1305-sha2_256;dh16,aes256-sha2_512;dh16,aes256-sha2_256;dh16,aes_gcm256-sha2_512;dh18,aes_gcm256-sha2_256;dh18,chacha20_poly1305-sha2_512;dh18,chacha20_poly1305-sha2_256;dh18,aes256-sha2_512;dh18,aes256-sha2_256;dh18
-	esp=aes_gcm256,chacha20_poly1305,aes256-sha2_512,aes256-sha2_256
+	ike=aes_gcm256-sha2_512+sha2_256-dh19+dh20+dh21+dh15+dh16+dh18,chacha20_poly1305-sha2_512+sha2_256-dh19+dh20+dh21+dh15+dh16+dh18,aes256-sha2_512+sha2_256-dh19+dh20+dh21+dh15+dh16+dh18
+	esp=aes_gcm256,chacha20_poly1305,aes256-sha2_512+sha2_256
diff -up crypto-policies/tests/outputs/LEGACY-libreswan.txt.libreswan-fix crypto-policies/tests/outputs/LEGACY-libreswan.txt
--- crypto-policies/tests/outputs/LEGACY-libreswan.txt.libreswan-fix	2018-12-17 17:01:44.000000000 +0100
+++ crypto-policies/tests/outputs/LEGACY-libreswan.txt	2019-02-18 10:34:57.527777893 +0100
@@ -1,5 +1,5 @@
 conn %default
 	ikev2=insist
 	pfs=yes
-	ike=aes_gcm256-sha2_512;dh19,aes_gcm256-sha2_256;dh19,chacha20_poly1305-sha2_512;dh19,chacha20_poly1305-sha2_256;dh19,aes256-sha2_512;dh19,aes256-sha2_256;dh19,aes256-sha1;dh19,aes_gcm128-sha2_512;dh19,aes_gcm128-sha2_256;dh19,aes128-sha2_256;dh19,aes128-sha1;dh19,3des-sha1;dh19,aes_gcm256-sha2_512;dh20,aes_gcm256-sha2_256;dh20,chacha20_poly1305-sha2_512;dh20,chacha20_poly1305-sha2_256;dh20,aes256-sha2_512;dh20,aes256-sha2_256;dh20,aes256-sha1;dh20,aes_gcm128-sha2_512;dh20,aes_gcm128-sha2_256;dh20,aes128-sha2_256;dh20,aes128-sha1;dh20,3des-sha1;dh20,aes_gcm256-sha2_512;dh21,aes_gcm256-sha2_256;dh21,chacha20_poly1305-sha2_512;dh21,chacha20_poly1305-sha2_256;dh21,aes256-sha2_512;dh21,aes256-sha2_256;dh21,aes256-sha1;dh21,aes_gcm128-sha2_512;dh21,aes_gcm128-sha2_256;dh21,aes128-sha2_256;dh21,aes128-sha1;dh21,3des-sha1;dh21,aes_gcm256-sha2_512;dh5,aes_gcm256-sha2_256;dh5,chacha20_poly1305-sha2_512;dh5,chacha20_poly1305-sha2_256;dh5,aes256-sha2_512;dh5,aes256-sha2_256;dh5,aes256-sha1;dh5,aes_gcm128-sha2_512;dh5,aes_gcm128-sha2_256;dh5,aes128-sha2_256;dh5,aes128-sha1;dh5,3des-sha1;dh5,aes_gcm256-sha2_512;dh14,aes_gcm256-sha2_256;dh14,chacha20_poly1305-sha2_512;dh14,chacha20_poly1305-sha2_256;dh14,aes256-sha2_512;dh14,aes256-sha2_256;dh14,aes256-sha1;dh14,aes_gcm128-sha2_512;dh14,aes_gcm128-sha2_256;dh14,aes128-sha2_256;dh14,aes128-sha1;dh14,3des-sha1;dh14,aes_gcm256-sha2_512;dh15,aes_gcm256-sha2_256;dh15,chacha20_poly1305-sha2_512;dh15,chacha20_poly1305-sha2_256;dh15,aes256-sha2_512;dh15,aes256-sha2_256;dh15,aes256-sha1;dh15,aes_gcm128-sha2_512;dh15,aes_gcm128-sha2_256;dh15,aes128-sha2_256;dh15,aes128-sha1;dh15,3des-sha1;dh15,aes_gcm256-sha2_512;dh16,aes_gcm256-sha2_256;dh16,chacha20_poly1305-sha2_512;dh16,chacha20_poly1305-sha2_256;dh16,aes256-sha2_512;dh16,aes256-sha2_256;dh16,aes256-sha1;dh16,aes_gcm128-sha2_512;dh16,aes_gcm128-sha2_256;dh16,aes128-sha2_256;dh16,aes128-sha1;dh16,3des-sha1;dh16,aes_gcm256-sha2_512;dh18,aes_gcm256-sha2_256;dh18,chacha20_poly1305-sha2_512;dh18,chacha20_poly1305-sha2_256;dh18,aes256-sha2_512;dh18,aes256-sha2_256;dh18,aes256-sha1;dh18,aes_gcm128-sha2_512;dh18,aes_gcm128-sha2_256;dh18,aes128-sha2_256;dh18,aes128-sha1;dh18,3des-sha1;dh18
-	esp=aes_gcm256,chacha20_poly1305,aes256-sha2_512,aes256-sha1,aes256-sha2_256,aes_gcm128,aes128-sha1,aes128-sha2_256,3des-sha1
+	ike=aes_gcm256-sha2_512+sha2_256-dh19+dh20+dh21+dh5+dh14+dh15+dh16+dh18,chacha20_poly1305-sha2_512+sha2_256-dh19+dh20+dh21+dh5+dh14+dh15+dh16+dh18,aes256-sha2_512+sha2_256-dh19+dh20+dh21+dh5+dh14+dh15+dh16+dh18,aes_gcm128-sha2_512+sha2_256-dh19+dh20+dh21+dh5+dh14+dh15+dh16+dh18,aes128-sha2_256-dh19+dh20+dh21+dh5+dh14+dh15+dh16+dh18
+	esp=aes_gcm256,chacha20_poly1305,aes256-sha2_512+sha1+sha2_256,aes_gcm128,aes128-sha1+sha2_256