chore: Update Ruma to 684ffc

chore: Update Ruma to 684ffc
This commit is contained in:
Ivan Enderlin
2024-01-22 15:13:01 +01:00
committed by GitHub
3 changed files with 47 additions and 35 deletions
Generated
+10 -9
View File
@@ -4734,7 +4734,7 @@ dependencies = [
[[package]]
name = "ruma"
version = "0.9.4"
source = "git+https://github.com/ruma/ruma?rev=a7e1d7fa49d93f4d9cbc369aa28378a89b3dc9e4#a7e1d7fa49d93f4d9cbc369aa28378a89b3dc9e4"
source = "git+https://github.com/ruma/ruma?rev=684ffc789877355bd25269451b2356817c17cc3f#684ffc789877355bd25269451b2356817c17cc3f"
dependencies = [
"assign",
"js_int",
@@ -4750,8 +4750,9 @@ dependencies = [
[[package]]
name = "ruma-client-api"
version = "0.17.4"
source = "git+https://github.com/ruma/ruma?rev=a7e1d7fa49d93f4d9cbc369aa28378a89b3dc9e4#a7e1d7fa49d93f4d9cbc369aa28378a89b3dc9e4"
source = "git+https://github.com/ruma/ruma?rev=684ffc789877355bd25269451b2356817c17cc3f#684ffc789877355bd25269451b2356817c17cc3f"
dependencies = [
"as_variant",
"assign",
"bytes",
"http",
@@ -4768,7 +4769,7 @@ dependencies = [
[[package]]
name = "ruma-common"
version = "0.12.1"
source = "git+https://github.com/ruma/ruma?rev=a7e1d7fa49d93f4d9cbc369aa28378a89b3dc9e4#a7e1d7fa49d93f4d9cbc369aa28378a89b3dc9e4"
source = "git+https://github.com/ruma/ruma?rev=684ffc789877355bd25269451b2356817c17cc3f#684ffc789877355bd25269451b2356817c17cc3f"
dependencies = [
"as_variant",
"base64 0.21.5",
@@ -4798,7 +4799,7 @@ dependencies = [
[[package]]
name = "ruma-events"
version = "0.27.11"
source = "git+https://github.com/ruma/ruma?rev=a7e1d7fa49d93f4d9cbc369aa28378a89b3dc9e4#a7e1d7fa49d93f4d9cbc369aa28378a89b3dc9e4"
source = "git+https://github.com/ruma/ruma?rev=684ffc789877355bd25269451b2356817c17cc3f#684ffc789877355bd25269451b2356817c17cc3f"
dependencies = [
"as_variant",
"indexmap 2.1.0",
@@ -4822,7 +4823,7 @@ dependencies = [
[[package]]
name = "ruma-federation-api"
version = "0.8.0"
source = "git+https://github.com/ruma/ruma?rev=a7e1d7fa49d93f4d9cbc369aa28378a89b3dc9e4#a7e1d7fa49d93f4d9cbc369aa28378a89b3dc9e4"
source = "git+https://github.com/ruma/ruma?rev=684ffc789877355bd25269451b2356817c17cc3f#684ffc789877355bd25269451b2356817c17cc3f"
dependencies = [
"js_int",
"ruma-common",
@@ -4834,7 +4835,7 @@ dependencies = [
[[package]]
name = "ruma-html"
version = "0.1.0"
source = "git+https://github.com/ruma/ruma?rev=a7e1d7fa49d93f4d9cbc369aa28378a89b3dc9e4#a7e1d7fa49d93f4d9cbc369aa28378a89b3dc9e4"
source = "git+https://github.com/ruma/ruma?rev=684ffc789877355bd25269451b2356817c17cc3f#684ffc789877355bd25269451b2356817c17cc3f"
dependencies = [
"as_variant",
"html5ever",
@@ -4846,7 +4847,7 @@ dependencies = [
[[package]]
name = "ruma-identifiers-validation"
version = "0.9.3"
source = "git+https://github.com/ruma/ruma?rev=a7e1d7fa49d93f4d9cbc369aa28378a89b3dc9e4#a7e1d7fa49d93f4d9cbc369aa28378a89b3dc9e4"
source = "git+https://github.com/ruma/ruma?rev=684ffc789877355bd25269451b2356817c17cc3f#684ffc789877355bd25269451b2356817c17cc3f"
dependencies = [
"js_int",
"thiserror",
@@ -4855,7 +4856,7 @@ dependencies = [
[[package]]
name = "ruma-macros"
version = "0.12.0"
source = "git+https://github.com/ruma/ruma?rev=a7e1d7fa49d93f4d9cbc369aa28378a89b3dc9e4#a7e1d7fa49d93f4d9cbc369aa28378a89b3dc9e4"
source = "git+https://github.com/ruma/ruma?rev=684ffc789877355bd25269451b2356817c17cc3f#684ffc789877355bd25269451b2356817c17cc3f"
dependencies = [
"once_cell",
"proc-macro-crate 2.0.1",
@@ -4870,7 +4871,7 @@ dependencies = [
[[package]]
name = "ruma-push-gateway-api"
version = "0.8.0"
source = "git+https://github.com/ruma/ruma?rev=a7e1d7fa49d93f4d9cbc369aa28378a89b3dc9e4#a7e1d7fa49d93f4d9cbc369aa28378a89b3dc9e4"
source = "git+https://github.com/ruma/ruma?rev=684ffc789877355bd25269451b2356817c17cc3f#684ffc789877355bd25269451b2356817c17cc3f"
dependencies = [
"js_int",
"ruma-common",
+2 -2
View File
@@ -36,8 +36,8 @@ futures-executor = "0.3.21"
futures-util = { version = "0.3.26", default-features = false, features = ["alloc"] }
http = "0.2.6"
itertools = "0.12.0"
ruma = { git = "https://github.com/ruma/ruma", rev = "a7e1d7fa49d93f4d9cbc369aa28378a89b3dc9e4", features = ["client-api-c", "compat-upload-signatures", "compat-user-id", "compat-arbitrary-length-ids", "unstable-msc3401"] }
ruma-common = { git = "https://github.com/ruma/ruma", rev = "a7e1d7fa49d93f4d9cbc369aa28378a89b3dc9e4"}
ruma = { git = "https://github.com/ruma/ruma", rev = "684ffc789877355bd25269451b2356817c17cc3f", features = ["client-api-c", "compat-upload-signatures", "compat-user-id", "compat-arbitrary-length-ids", "unstable-msc3401"] }
ruma-common = { git = "https://github.com/ruma/ruma", rev = "684ffc789877355bd25269451b2356817c17cc3f"}
once_cell = "1.16.0"
rand = "0.8.5"
serde = "1.0.151"
+35 -24
View File
@@ -245,29 +245,40 @@ impl SecretStorageKey {
fn check_zero_message(&self) -> Result<(), DecodeError> {
match &self.storage_key_info.algorithm {
SecretStorageEncryptionAlgorithm::V1AesHmacSha2(properties) => {
if properties.iv.as_bytes().len() != IV_SIZE {
Err(DecodeError::IvLength(IV_SIZE, properties.iv.as_bytes().len()))
} else {
let mut iv_array = [0u8; 16];
iv_array.copy_from_slice(properties.iv.as_bytes());
// I'm not particularly convinced that this couldn't have been done simpler. Why
// do we need to reproduce the ciphertext? Couldn't we just generate the MAC tag
// using the `ZERO_MESSAGE`?
let (Some(iv), Some(mac)) = (&properties.iv, &properties.mac) else {
// The IV and/or MAC are missing from the account data
// content. As the [spec] says, we have to assume that the
// key is valid.
//
// If someone is reading this and is designing a new secret encryption
// algorithm, please consider the above suggestion.
let key = AesHmacSha2Key::from_secret_storage_key(&self.secret_key, "");
let ciphertext = key.apply_keystream(Self::ZERO_MESSAGE.to_vec(), &iv_array);
let expected_mac = HmacSha256Mac::from_slice(properties.mac.as_bytes())
.ok_or_else(|| {
DecodeError::MacLength(MAC_SIZE, properties.mac.as_bytes().len())
})?;
// [spec]: https://spec.matrix.org/unstable/client-server-api/#msecret_storagev1aes-hmac-sha2
return Ok(());
};
key.verify_mac(&ciphertext, expected_mac.as_bytes())?;
let iv = iv.as_bytes();
let iv_length = iv.len();
Ok(())
if iv_length != IV_SIZE {
return Err(DecodeError::IvLength(IV_SIZE, iv_length));
}
let mut iv_array = [0u8; 16];
iv_array.copy_from_slice(iv);
// I'm not particularly convinced that this couldn't have been done simpler.
// Why do we need to reproduce the ciphertext?
// Couldn't we just generate the MAC tag
// using the `ZERO_MESSAGE`?
//
// If someone is reading this and is designing a new secret encryption
// algorithm, please consider the above suggestion.
let key = AesHmacSha2Key::from_secret_storage_key(&self.secret_key, "");
let ciphertext = key.apply_keystream(Self::ZERO_MESSAGE.to_vec(), &iv_array);
let expected_mac = HmacSha256Mac::from_slice(mac.as_bytes())
.ok_or_else(|| DecodeError::MacLength(MAC_SIZE, mac.as_bytes().len()))?;
key.verify_mac(&ciphertext, expected_mac.as_bytes())?;
Ok(())
}
custom => Err(DecodeError::UnsupportedAlgorithm(custom.algorithm().to_owned())),
}
@@ -283,7 +294,7 @@ impl SecretStorageKey {
SecretStorageKeyEventContent::new(
key_id,
SecretStorageEncryptionAlgorithm::V1AesHmacSha2(
SecretStorageV1AesHmacSha2Properties::new(iv, mac),
SecretStorageV1AesHmacSha2Properties::new(Some(iv), Some(mac)),
),
)
}
@@ -862,8 +873,8 @@ mod test {
"bmur2d9ypPUH1msSwCxQOJkuKRmJI55e".to_owned(),
SecretStorageEncryptionAlgorithm::V1AesHmacSha2(
SecretStorageV1AesHmacSha2Properties::new(
Base64::new(vec![0u8; 14]),
Base64::new(vec![0u8; 32]),
Some(Base64::new(vec![0u8; 14])),
Some(Base64::new(vec![0u8; 32])),
),
),
);
@@ -878,8 +889,8 @@ mod test {
"bmur2d9ypPUH1msSwCxQOJkuKRmJI55e".to_owned(),
SecretStorageEncryptionAlgorithm::V1AesHmacSha2(
SecretStorageV1AesHmacSha2Properties::new(
Base64::new(vec![0u8; 16]),
Base64::new(vec![0u8; 10]),
Some(Base64::new(vec![0u8; 16])),
Some(Base64::new(vec![0u8; 10])),
),
),
);