signatures: Allow additional key version-string characters in compat mode
This complies with the published specification by default, with optional compatibility for additional federation keys in use. Co-authored-by: Jonathan de Jong <jonathan@automatia.nl>
This commit is contained in:
parent
f9a40e137e
commit
bcb97b139d
@ -14,6 +14,7 @@ edition = "2021"
|
|||||||
all-features = true
|
all-features = true
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
|
compat = []
|
||||||
ring-compat = ["dep:subslice"]
|
ring-compat = ["dep:subslice"]
|
||||||
unstable-exhaustive-types = []
|
unstable-exhaustive-types = []
|
||||||
|
|
||||||
|
@ -85,7 +85,11 @@ fn split_id(id: &str) -> Result<(Algorithm, String), Error> {
|
|||||||
|
|
||||||
let version = signature_id[1];
|
let version = signature_id[1];
|
||||||
|
|
||||||
if !version.bytes().all(|ch| ch.is_ascii_alphanumeric() || ch == b'_') {
|
#[cfg(feature = "compat")]
|
||||||
|
const EXTRA_ALLOWED: [u8; 3] = [b'_', b'+', b'/'];
|
||||||
|
#[cfg(not(feature = "compat"))]
|
||||||
|
const EXTRA_ALLOWED: [u8; 1] = [b'_'];
|
||||||
|
if !version.bytes().all(|ch| ch.is_ascii_alphanumeric() || EXTRA_ALLOWED.contains(&ch)) {
|
||||||
return Err(Error::InvalidVersion(version.into()));
|
return Err(Error::InvalidVersion(version.into()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -97,6 +97,7 @@ compat = [
|
|||||||
"ruma-common/compat",
|
"ruma-common/compat",
|
||||||
"ruma-client-api?/compat",
|
"ruma-client-api?/compat",
|
||||||
"ruma-federation-api?/compat",
|
"ruma-federation-api?/compat",
|
||||||
|
"ruma-signatures?/compat",
|
||||||
]
|
]
|
||||||
|
|
||||||
# Specific compatibility for past ring public/private key documents.
|
# Specific compatibility for past ring public/private key documents.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user