events: Make name on SecretStorageKeyEventContent optional

The spec has the `name` field marked as optional.

See: https://spec.matrix.org/v1.4/client-server-api/#key-storage
This commit is contained in:
gnieto 2022-10-22 10:29:13 +02:00 committed by GitHub
parent 045861441a
commit dcff5a0737
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 44 additions and 20 deletions

View File

@ -10,6 +10,8 @@ Breaking changes:
`http::header::HeaderName`
* To continue using constants from `http::header`, they must be imported in
the module calling the macro.
* Make `name` optional on `SecretStorageKeyEventContent`. Default constructor has been
adjusted as well to not require this field.
Improvements:

View File

@ -55,7 +55,7 @@ pub struct SecretStorageKeyEventContent {
pub key_id: String,
/// The name of the key.
pub name: String,
pub name: Option<String>,
/// The encryption algorithm used for this key.
///
@ -70,8 +70,8 @@ pub struct SecretStorageKeyEventContent {
impl SecretStorageKeyEventContent {
/// Creates a `KeyDescription` with the given name.
pub fn new(key_id: String, name: String, algorithm: SecretEncryptionAlgorithm) -> Self {
Self { key_id, name, algorithm, passphrase: None }
pub fn new(key_id: String, algorithm: SecretEncryptionAlgorithm) -> Self {
Self { key_id, name: None, algorithm, passphrase: None }
}
}
@ -105,14 +105,14 @@ mod tests {
#[test]
fn test_key_description_serialization() {
let content = SecretStorageKeyEventContent::new(
"my_key".into(),
let mut content = SecretStorageKeyEventContent::new(
"my_key".into(),
SecretEncryptionAlgorithm::SecretStorageV1AesHmacSha2 {
iv: Base64::parse("YWJjZGVmZ2hpamtsbW5vcA").unwrap(),
mac: Base64::parse("aWRvbnRrbm93d2hhdGFtYWNsb29rc2xpa2U").unwrap(),
},
);
content.name = Some("my_key".to_owned());
let json = json!({
"name": "my_key",
@ -134,7 +134,30 @@ mod tests {
});
let content = from_json_value::<SecretStorageKeyEventContent>(json).unwrap();
assert_eq!(content.name, "my_key");
assert_eq!(content.name.unwrap(), "my_key");
assert_matches!(content.passphrase, None);
let (iv, mac) = assert_matches!(
content.algorithm,
SecretEncryptionAlgorithm::SecretStorageV1AesHmacSha2 {
iv,
mac,
} => (iv, mac)
);
assert_eq!(iv.encode(), "YWJjZGVmZ2hpamtsbW5vcA");
assert_eq!(mac.encode(), "aWRvbnRrbm93d2hhdGFtYWNsb29rc2xpa2U");
}
#[test]
fn test_key_description_deserialization_without_name() {
let json = json!({
"algorithm": "m.secret_storage.v1.aes-hmac-sha2",
"iv": "YWJjZGVmZ2hpamtsbW5vcA",
"mac": "aWRvbnRrbm93d2hhdGFtYWNsb29rc2xpa2U"
});
let content = from_json_value::<SecretStorageKeyEventContent>(json).unwrap();
assert!(content.name.is_none());
assert_matches!(content.passphrase, None);
let (iv, mac) = assert_matches!(
@ -150,10 +173,9 @@ mod tests {
#[test]
fn test_key_description_with_passphrase_serialization() {
let content = SecretStorageKeyEventContent {
let mut content = SecretStorageKeyEventContent {
passphrase: Some(PassPhrase::new("rocksalt".into(), uint!(8))),
..SecretStorageKeyEventContent::new(
"my_key".into(),
"my_key".into(),
SecretEncryptionAlgorithm::SecretStorageV1AesHmacSha2 {
iv: Base64::parse("YWJjZGVmZ2hpamtsbW5vcA").unwrap(),
@ -161,6 +183,7 @@ mod tests {
},
)
};
content.name = Some("my_key".to_owned());
let json = json!({
"name": "my_key",
@ -193,7 +216,7 @@ mod tests {
});
let content = from_json_value::<SecretStorageKeyEventContent>(json).unwrap();
assert_eq!(content.name, "my_key");
assert_eq!(content.name.unwrap(), "my_key");
let passphrase = content.passphrase.unwrap();
assert_eq!(passphrase.algorithm, KeyDerivationAlgorithm::Pbkfd2);
@ -214,16 +237,15 @@ mod tests {
#[test]
fn test_event_serialization() {
let event = GlobalAccountDataEvent {
content: SecretStorageKeyEventContent::new(
"my_key_id".into(),
"my_key".into(),
SecretEncryptionAlgorithm::SecretStorageV1AesHmacSha2 {
iv: Base64::parse("YWJjZGVmZ2hpamtsbW5vcA").unwrap(),
mac: Base64::parse("aWRvbnRrbm93d2hhdGFtYWNsb29rc2xpa2U").unwrap(),
},
),
};
let mut content = SecretStorageKeyEventContent::new(
"my_key_id".into(),
SecretEncryptionAlgorithm::SecretStorageV1AesHmacSha2 {
iv: Base64::parse("YWJjZGVmZ2hpamtsbW5vcA").unwrap(),
mac: Base64::parse("aWRvbnRrbm93d2hhdGFtYWNsb29rc2xpa2U").unwrap(),
},
);
content.name = Some("my_key".to_owned());
let event = GlobalAccountDataEvent { content };
let json = json!({
"type": "m.secret_storage.key.my_key_id",
@ -253,7 +275,7 @@ mod tests {
let ev =
from_json_value::<GlobalAccountDataEvent<SecretStorageKeyEventContent>>(json).unwrap();
assert_eq!(ev.content.key_id, "my_key_id");
assert_eq!(ev.content.name, "my_key");
assert_eq!(ev.content.name.unwrap(), "my_key");
assert_matches!(ev.content.passphrase, None);
let (iv, mac) = assert_matches!(