From b760c0e6ceb3dbabd3da40e3f2af9f8cae9b3bb5 Mon Sep 17 00:00:00 2001 From: Florian Duros Date: Tue, 6 Jun 2023 15:05:28 +0200 Subject: [PATCH 1/5] Add keys to `UserIdentity` and `OwnUserIdentity` --- .../matrix-sdk-crypto-js/src/identities.rs | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/bindings/matrix-sdk-crypto-js/src/identities.rs b/bindings/matrix-sdk-crypto-js/src/identities.rs index 3e28e9aaf..cd9baf9ed 100644 --- a/bindings/matrix-sdk-crypto-js/src/identities.rs +++ b/bindings/matrix-sdk-crypto-js/src/identities.rs @@ -85,6 +85,28 @@ impl OwnUserIdentity { future_to_promise(async move { Ok(me.trusts_our_own_device().await?) }) } + + /// Get the master key of the identity. + #[wasm_bindgen(getter, js_name = "masterKey")] + pub fn master_key(&self) -> Option { + let master_key = self.inner.master_key().as_ref().to_owned(); + serde_json::to_string(&master_key).ok() + } + + /// Get the self-signing key of the identity. + #[wasm_bindgen(getter, js_name = "selfSigningKey")] + pub fn self_signing_key(&self) -> Option { + let self_signing_key = self.inner.master_key().as_ref().to_owned(); + serde_json::to_string(&self_signing_key).ok() + } + + /// Get the user-signing key of the identity, this is only present for our + /// own user identity.. + #[wasm_bindgen(getter, js_name = "userSigningKey")] + pub fn user_signing_key(&self) -> Option { + let user_signing_key = self.inner.master_key().as_ref().to_owned(); + serde_json::to_string(&user_signing_key).ok() + } } /// Struct representing a cross signing identity of a user. @@ -169,4 +191,26 @@ impl UserIdentity { Ok(serde_json::to_string(&me.verification_request_content(methods).await)?) })) } + + /// Get the master key of the identity. + #[wasm_bindgen(getter, js_name = "masterKey")] + pub fn master_key(&self) -> Option { + let master_key = self.inner.master_key().as_ref().to_owned(); + serde_json::to_string(&master_key).ok() + } + + /// Get the self-signing key of the identity. + #[wasm_bindgen(getter, js_name = "selfSigningKey")] + pub fn self_signing_key(&self) -> Option { + let self_signing_key = self.inner.master_key().as_ref().to_owned(); + serde_json::to_string(&self_signing_key).ok() + } + + /// Get the user-signing key of the identity, this is only present for our + /// own user identity.. + #[wasm_bindgen(getter, js_name = "userSigningKey")] + pub fn user_signing_key(&self) -> Option { + let user_signing_key = self.inner.master_key().as_ref().to_owned(); + serde_json::to_string(&user_signing_key).ok() + } } From b4c440a5e7f087715efb9a48a0a7ad3eabd62657 Mon Sep 17 00:00:00 2001 From: Florian Duros Date: Tue, 6 Jun 2023 15:10:28 +0200 Subject: [PATCH 2/5] Update `CHANGELOG.md` --- bindings/matrix-sdk-crypto-js/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/bindings/matrix-sdk-crypto-js/CHANGELOG.md b/bindings/matrix-sdk-crypto-js/CHANGELOG.md index 01aed05e1..c2ffd1348 100644 --- a/bindings/matrix-sdk-crypto-js/CHANGELOG.md +++ b/bindings/matrix-sdk-crypto-js/CHANGELOG.md @@ -1,3 +1,7 @@ +# Next version + +- Add `masterKey`, `userSigningKey`, `selfSigningKey` to `UserIdentity` and `OwnUserIdentity` + # v0.1.0-alpha.9 - Extend `OlmDevice.markRequestAsSent` to accept responses to From d0f3f1e657e08e6ca33f88481fd1ecaecb510029 Mon Sep 17 00:00:00 2001 From: Florian Duros Date: Tue, 6 Jun 2023 16:25:17 +0200 Subject: [PATCH 3/5] Review fixes --- .../matrix-sdk-crypto-js/src/identities.rs | 38 ++++++++----------- 1 file changed, 15 insertions(+), 23 deletions(-) diff --git a/bindings/matrix-sdk-crypto-js/src/identities.rs b/bindings/matrix-sdk-crypto-js/src/identities.rs index cd9baf9ed..a8f74a0f1 100644 --- a/bindings/matrix-sdk-crypto-js/src/identities.rs +++ b/bindings/matrix-sdk-crypto-js/src/identities.rs @@ -88,24 +88,24 @@ impl OwnUserIdentity { /// Get the master key of the identity. #[wasm_bindgen(getter, js_name = "masterKey")] - pub fn master_key(&self) -> Option { - let master_key = self.inner.master_key().as_ref().to_owned(); - serde_json::to_string(&master_key).ok() + pub fn master_key(&self) -> Result { + let master_key = self.inner.master_key().as_ref(); + Ok(serde_json::to_string(master_key)?) } /// Get the self-signing key of the identity. #[wasm_bindgen(getter, js_name = "selfSigningKey")] - pub fn self_signing_key(&self) -> Option { - let self_signing_key = self.inner.master_key().as_ref().to_owned(); - serde_json::to_string(&self_signing_key).ok() + pub fn self_signing_key(&self) -> Result { + let self_signing_key = self.inner.self_signing_key().as_ref(); + Ok(serde_json::to_string(self_signing_key)?) } /// Get the user-signing key of the identity, this is only present for our /// own user identity.. #[wasm_bindgen(getter, js_name = "userSigningKey")] - pub fn user_signing_key(&self) -> Option { - let user_signing_key = self.inner.master_key().as_ref().to_owned(); - serde_json::to_string(&user_signing_key).ok() + pub fn user_signing_key(&self) -> Result { + let user_signing_key = self.inner.user_signing_key().as_ref(); + Ok(serde_json::to_string(user_signing_key)?) } } @@ -194,23 +194,15 @@ impl UserIdentity { /// Get the master key of the identity. #[wasm_bindgen(getter, js_name = "masterKey")] - pub fn master_key(&self) -> Option { - let master_key = self.inner.master_key().as_ref().to_owned(); - serde_json::to_string(&master_key).ok() + pub fn master_key(&self) -> Result { + let master_key = self.inner.master_key().as_ref(); + Ok(serde_json::to_string(master_key)?) } /// Get the self-signing key of the identity. #[wasm_bindgen(getter, js_name = "selfSigningKey")] - pub fn self_signing_key(&self) -> Option { - let self_signing_key = self.inner.master_key().as_ref().to_owned(); - serde_json::to_string(&self_signing_key).ok() - } - - /// Get the user-signing key of the identity, this is only present for our - /// own user identity.. - #[wasm_bindgen(getter, js_name = "userSigningKey")] - pub fn user_signing_key(&self) -> Option { - let user_signing_key = self.inner.master_key().as_ref().to_owned(); - serde_json::to_string(&user_signing_key).ok() + pub fn self_signing_key(&self) -> Result { + let self_signing_key = self.inner.self_signing_key().as_ref(); + Ok(serde_json::to_string(self_signing_key)?) } } From 721a704540889a0ed1c26e290d09b34cb276024a Mon Sep 17 00:00:00 2001 From: Florian Duros Date: Tue, 6 Jun 2023 17:21:14 +0200 Subject: [PATCH 4/5] Add tests --- .../tests/machine.test.js | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/bindings/matrix-sdk-crypto-js/tests/machine.test.js b/bindings/matrix-sdk-crypto-js/tests/machine.test.js index c65094e91..c5778de24 100644 --- a/bindings/matrix-sdk-crypto-js/tests/machine.test.js +++ b/bindings/matrix-sdk-crypto-js/tests/machine.test.js @@ -601,6 +601,28 @@ describe(OlmMachine.name, () => { const identity = await m.getIdentity(user); expect(identity).toBeInstanceOf(OwnUserIdentity); + const masterKey = JSON.parse(identity.masterKey); + const selfSigningKey = JSON.parse(identity.selfSigningKey); + const userSigningKey = JSON.parse(identity.userSigningKey); + + const masterObjKeys = Object.keys(masterKey.keys); + const keyFromMasterKey = masterKey.keys[masterObjKeys[0]]; + + // self signing key exists + expect(Object.keys(selfSigningKey.keys).length).toBe(1) + // self signing key is different from the master key + expect(selfSigningKey.keys[keyFromMasterKey]).not.toBeDefined(); + + const selfSigningObjKeys = Object.keys(selfSigningKey.keys); + const keyFromSelfSigningKey = masterKey.keys[selfSigningObjKeys[0]]; + + // user signing key exists + expect(Object.keys(userSigningKey.keys).length).toBe(1) + // user signing key is different from the master key + expect(userSigningKey.keys[keyFromMasterKey]).not.toBeDefined(); + // user signing key is different from the self signing key + expect(userSigningKey.keys[keyFromSelfSigningKey]).not.toBeDefined(); + const signatureUploadRequest = await identity.verify(); expect(signatureUploadRequest).toBeInstanceOf(SignatureUploadRequest); From 198c8f69013c6d1549b9307a2eca02f64dc2f724 Mon Sep 17 00:00:00 2001 From: Florian Duros Date: Tue, 6 Jun 2023 17:26:57 +0200 Subject: [PATCH 5/5] Prettier fix --- bindings/matrix-sdk-crypto-js/tests/machine.test.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/bindings/matrix-sdk-crypto-js/tests/machine.test.js b/bindings/matrix-sdk-crypto-js/tests/machine.test.js index c5778de24..c40599ad4 100644 --- a/bindings/matrix-sdk-crypto-js/tests/machine.test.js +++ b/bindings/matrix-sdk-crypto-js/tests/machine.test.js @@ -609,7 +609,7 @@ describe(OlmMachine.name, () => { const keyFromMasterKey = masterKey.keys[masterObjKeys[0]]; // self signing key exists - expect(Object.keys(selfSigningKey.keys).length).toBe(1) + expect(Object.keys(selfSigningKey.keys).length).toBe(1); // self signing key is different from the master key expect(selfSigningKey.keys[keyFromMasterKey]).not.toBeDefined(); @@ -617,13 +617,12 @@ describe(OlmMachine.name, () => { const keyFromSelfSigningKey = masterKey.keys[selfSigningObjKeys[0]]; // user signing key exists - expect(Object.keys(userSigningKey.keys).length).toBe(1) + expect(Object.keys(userSigningKey.keys).length).toBe(1); // user signing key is different from the master key expect(userSigningKey.keys[keyFromMasterKey]).not.toBeDefined(); // user signing key is different from the self signing key expect(userSigningKey.keys[keyFromSelfSigningKey]).not.toBeDefined(); - const signatureUploadRequest = await identity.verify(); expect(signatureUploadRequest).toBeInstanceOf(SignatureUploadRequest);