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:
Jason Volk 2023-03-01 00:54:38 -08:00 committed by GitHub
parent f9a40e137e
commit bcb97b139d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 7 additions and 1 deletions

View File

@ -14,6 +14,7 @@ edition = "2021"
all-features = true
[features]
compat = []
ring-compat = ["dep:subslice"]
unstable-exhaustive-types = []

View File

@ -85,7 +85,11 @@ fn split_id(id: &str) -> Result<(Algorithm, String), Error> {
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()));
}

View File

@ -97,6 +97,7 @@ compat = [
"ruma-common/compat",
"ruma-client-api?/compat",
"ruma-federation-api?/compat",
"ruma-signatures?/compat",
]
# Specific compatibility for past ring public/private key documents.