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 diff --git a/bindings/matrix-sdk-crypto-js/src/identities.rs b/bindings/matrix-sdk-crypto-js/src/identities.rs index 3e28e9aaf..a8f74a0f1 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) -> 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) -> 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) -> Result { + let user_signing_key = self.inner.user_signing_key().as_ref(); + Ok(serde_json::to_string(user_signing_key)?) + } } /// Struct representing a cross signing identity of a user. @@ -169,4 +191,18 @@ 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) -> 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) -> Result { + let self_signing_key = self.inner.self_signing_key().as_ref(); + Ok(serde_json::to_string(self_signing_key)?) + } } diff --git a/bindings/matrix-sdk-crypto-js/tests/machine.test.js b/bindings/matrix-sdk-crypto-js/tests/machine.test.js index c65094e91..c40599ad4 100644 --- a/bindings/matrix-sdk-crypto-js/tests/machine.test.js +++ b/bindings/matrix-sdk-crypto-js/tests/machine.test.js @@ -601,6 +601,27 @@ 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);