sasl: advertise and relay ECDSA-NIST256P-CHALLENGE

This commit is contained in:
Jean Chevronnet 2026-08-30 04:52:40 +00:00
parent dfbe8e8c4a
commit ed58813ea5
No known key found for this signature in database
GPG key ID: 439666D63A9477E4
2 changed files with 9 additions and 6 deletions

View file

@ -335,6 +335,7 @@ impl Command for Authenticate {
CmdResult::Ok
} else if arg.eq_ignore_ascii_case("PLAIN")
|| arg.eq_ignore_ascii_case("SCRAM-SHA-256")
|| arg.eq_ignore_ascii_case("ECDSA-NIST256P-CHALLENGE")
{
if !have_services {
s.numeric(
@ -344,12 +345,14 @@ impl Command for Authenticate {
);
return CmdResult::Fail;
}
// SCRAM is challenge-response, so the password never crosses the wire —
// it's fine to offer over plaintext too. The rounds relay mech-agnostically.
// SCRAM and ECDSA are challenge-response, so the password/key never
// crosses the wire — fine over plaintext too. Rounds relay mech-agnostically.
let mech = if arg.eq_ignore_ascii_case("PLAIN") {
"PLAIN"
} else {
} else if arg.eq_ignore_ascii_case("SCRAM-SHA-256") {
"SCRAM-SHA-256"
} else {
"ECDSA-NIST256P-CHALLENGE"
};
if let Some(u) = s.users.get_mut(&uid) {
u.sasl_mech = Some(mech.to_string());
@ -382,7 +385,7 @@ impl Command for Authenticate {
}
}
} else {
s.numeric(uid, RPL_SASLMECHS, "PLAIN,SCRAM-SHA-256 :are available SASL mechanisms");
s.numeric(uid, RPL_SASLMECHS, "PLAIN,SCRAM-SHA-256,ECDSA-NIST256P-CHALLENGE :are available SASL mechanisms");
s.numeric(uid, ERR_SASLFAIL, ":Unsupported SASL mechanism");
CmdResult::Fail
}

View file

@ -194,9 +194,9 @@ impl Caps {
.map(|c| {
if *c == "sasl" && cap302 {
if secure {
"sasl=PLAIN,EXTERNAL,SCRAM-SHA-256".to_string()
"sasl=PLAIN,EXTERNAL,SCRAM-SHA-256,ECDSA-NIST256P-CHALLENGE".to_string()
} else {
"sasl=PLAIN,SCRAM-SHA-256".to_string()
"sasl=PLAIN,SCRAM-SHA-256,ECDSA-NIST256P-CHALLENGE".to_string()
}
} else if *c == "draft/multiline" && cap302 {
format!("draft/multiline=max-bytes={mline_bytes},max-lines={mline_lines}")