7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 1 | use matrix_sdk_crypto::{UserIdentity as SdkUserIdentity, types::CrossSigningKey}; |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 2 | |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 3 | use crate::CryptoStoreError; |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 4 | |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 5 | /// Enum representing cross signing identity of our own user or some other |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 6 | /// user. |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 7 | #[derive(uniffi::Enum)] |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 8 | pub enum UserIdentity { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 9 | /// Our own user identity. |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 10 | Own { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 11 | /// The unique id of our own user. |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 12 | user_id: String, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 13 | /// Does our own user identity trust our own device. |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 14 | trusts_our_own_device: bool, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 15 | /// The public master key of our identity. |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 16 | master_key: String, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 17 | /// The public user-signing key of our identity. |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 18 | user_signing_key: String, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 19 | /// The public self-signing key of our identity. |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 20 | self_signing_key: String, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 21 | /// True if this identity was verified at some point but is not anymore. |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 22 | has_verification_violation: bool, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 23 | }, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 24 | /// The user identity of other users. |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 25 | Other { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 26 | /// The unique id of the user. |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 27 | user_id: String, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 28 | /// The public master key of the identity. |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 29 | master_key: String, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 30 | /// The public self-signing key of our identity. |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 31 | self_signing_key: String, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 32 | /// True if this identity was verified at some point but is not anymore. |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 33 | has_verification_violation: bool, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 34 | }, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 35 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 36 | |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 37 | impl UserIdentity { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 38 | pub(crate) async fn from_rust(i: SdkUserIdentity) -> Result<Self, CryptoStoreError> { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 39 | Ok(match i { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 40 | SdkUserIdentity::Own(i) => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 41 | let master: CrossSigningKey = i.master_key().as_ref().to_owned(); |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 42 | let user_signing: CrossSigningKey = i.user_signing_key().as_ref().to_owned(); |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 43 | let self_signing: CrossSigningKey = i.self_signing_key().as_ref().to_owned(); |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 44 | |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 45 | UserIdentity::Own { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 46 | user_id: i.user_id().to_string(), |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 47 | trusts_our_own_device: i.trusts_our_own_device().await?, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 48 | master_key: serde_json::to_string(&master)?, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 49 | user_signing_key: serde_json::to_string(&user_signing)?, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 50 | self_signing_key: serde_json::to_string(&self_signing)?, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 51 | has_verification_violation: i.has_verification_violation(), |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 52 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 53 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 54 | SdkUserIdentity::Other(i) => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 55 | let master: CrossSigningKey = i.master_key().as_ref().to_owned(); |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 56 | let self_signing: CrossSigningKey = i.self_signing_key().as_ref().to_owned(); |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 57 | |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 58 | UserIdentity::Other { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 59 | user_id: i.user_id().to_string(), |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 60 | master_key: serde_json::to_string(&master)?, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 61 | self_signing_key: serde_json::to_string(&self_signing)?, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 62 | has_verification_violation: i.has_verification_violation(), |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 63 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 64 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 65 | }) |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 66 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 67 | } |