Merge branch '2.0' into 3.0

This commit is contained in:
terrafrost 2024-11-14 20:14:52 -06:00
commit f7714a529e

View File

@ -5089,41 +5089,65 @@ class SSH2
*/
public function setPreferredAlgorithms(array $methods)
{
$keys = ['client_to_server', 'server_to_client'];
if (isset($methods['kex']) && is_string($methods['kex'])) {
$methods['kex'] = explode(',', $methods['kex']);
}
if (isset($methods['hostkey']) && is_string($methods['hostkey'])) {
$methods['hostkey'] = explode(',', $methods['hostkey']);
}
foreach ($keys as $key) {
if (isset($methods[$key])) {
$a = &$methods[$key];
if (isset($a['crypt']) && is_string($a['crypt'])) {
$a['crypt'] = explode(',', $a['crypt']);
}
if (isset($a['comp']) && is_string($a['comp'])) {
$a['comp'] = explode(',', $a['comp']);
}
if (isset($a['mac']) && is_string($a['mac'])) {
$a['mac'] = explode(',', $a['mac']);
}
}
}
$preferred = $methods;
if (isset($preferred['kex'])) {
$preferred['kex'] = array_intersect(
is_string($preferred['kex']) ? [$preferred['kex']] : $preferred['kex'],
$preferred['kex'],
static::getSupportedKEXAlgorithms()
);
}
if (isset($preferred['hostkey'])) {
$preferred['hostkey'] = array_intersect(
is_string($preferred['hostkey']) ? [$preferred['hostkey']] : $preferred['hostkey'],
$preferred['hostkey'],
static::getSupportedHostKeyAlgorithms()
);
}
$keys = ['client_to_server', 'server_to_client'];
foreach ($keys as $key) {
if (isset($preferred[$key])) {
$a = &$preferred[$key];
if (isset($a['crypt'])) {
$a['crypt'] = array_intersect(
is_string($a['crypt']) ? [$a['crypt']] : $a['crypt'],
$a['crypt'],
static::getSupportedEncryptionAlgorithms()
);
}
if (isset($a['comp'])) {
$a['comp'] = array_intersect(
is_string($a['comp']) ? [$a['comp']] : $a['comp'],
$a['comp'],
static::getSupportedCompressionAlgorithms()
);
}
if (isset($a['mac'])) {
$a['mac'] = array_intersect(
is_string($a['mac']) ? [$a['mac']] : $a['mac'],
$a['mac'],
static::getSupportedMACAlgorithms()
);
}