atagen

matrix-rust-sdk

public
Star0
Watch0
ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk.git

Blame: bindings/matrix-sdk-crypto-ffi/src/users.rs

7ff8adafe9e4atagen2026-10-22 12:30 UTC1
use matrix_sdk_crypto::{UserIdentity as SdkUserIdentity, types::CrossSigningKey};
7ff8adafe9e4atagen2026-10-22 12:30 UTC2
7ff8adafe9e4atagen2026-10-22 12:30 UTC3
use crate::CryptoStoreError;
7ff8adafe9e4atagen2026-10-22 12:30 UTC4
7ff8adafe9e4atagen2026-10-22 12:30 UTC5
/// Enum representing cross signing identity of our own user or some other
7ff8adafe9e4atagen2026-10-22 12:30 UTC6
/// user.
7ff8adafe9e4atagen2026-10-22 12:30 UTC7
#[derive(uniffi::Enum)]
7ff8adafe9e4atagen2026-10-22 12:30 UTC8
pub enum UserIdentity {
7ff8adafe9e4atagen2026-10-22 12:30 UTC9
    /// Our own user identity.
7ff8adafe9e4atagen2026-10-22 12:30 UTC10
    Own {
7ff8adafe9e4atagen2026-10-22 12:30 UTC11
        /// The unique id of our own user.
7ff8adafe9e4atagen2026-10-22 12:30 UTC12
        user_id: String,
7ff8adafe9e4atagen2026-10-22 12:30 UTC13
        /// Does our own user identity trust our own device.
7ff8adafe9e4atagen2026-10-22 12:30 UTC14
        trusts_our_own_device: bool,
7ff8adafe9e4atagen2026-10-22 12:30 UTC15
        /// The public master key of our identity.
7ff8adafe9e4atagen2026-10-22 12:30 UTC16
        master_key: String,
7ff8adafe9e4atagen2026-10-22 12:30 UTC17
        /// The public user-signing key of our identity.
7ff8adafe9e4atagen2026-10-22 12:30 UTC18
        user_signing_key: String,
7ff8adafe9e4atagen2026-10-22 12:30 UTC19
        /// The public self-signing key of our identity.
7ff8adafe9e4atagen2026-10-22 12:30 UTC20
        self_signing_key: String,
7ff8adafe9e4atagen2026-10-22 12:30 UTC21
        /// True if this identity was verified at some point but is not anymore.
7ff8adafe9e4atagen2026-10-22 12:30 UTC22
        has_verification_violation: bool,
7ff8adafe9e4atagen2026-10-22 12:30 UTC23
    },
7ff8adafe9e4atagen2026-10-22 12:30 UTC24
    /// The user identity of other users.
7ff8adafe9e4atagen2026-10-22 12:30 UTC25
    Other {
7ff8adafe9e4atagen2026-10-22 12:30 UTC26
        /// The unique id of the user.
7ff8adafe9e4atagen2026-10-22 12:30 UTC27
        user_id: String,
7ff8adafe9e4atagen2026-10-22 12:30 UTC28
        /// The public master key of the identity.
7ff8adafe9e4atagen2026-10-22 12:30 UTC29
        master_key: String,
7ff8adafe9e4atagen2026-10-22 12:30 UTC30
        /// The public self-signing key of our identity.
7ff8adafe9e4atagen2026-10-22 12:30 UTC31
        self_signing_key: String,
7ff8adafe9e4atagen2026-10-22 12:30 UTC32
        /// True if this identity was verified at some point but is not anymore.
7ff8adafe9e4atagen2026-10-22 12:30 UTC33
        has_verification_violation: bool,
7ff8adafe9e4atagen2026-10-22 12:30 UTC34
    },
7ff8adafe9e4atagen2026-10-22 12:30 UTC35
}
7ff8adafe9e4atagen2026-10-22 12:30 UTC36
7ff8adafe9e4atagen2026-10-22 12:30 UTC37
impl UserIdentity {
7ff8adafe9e4atagen2026-10-22 12:30 UTC38
    pub(crate) async fn from_rust(i: SdkUserIdentity) -> Result<Self, CryptoStoreError> {
7ff8adafe9e4atagen2026-10-22 12:30 UTC39
        Ok(match i {
7ff8adafe9e4atagen2026-10-22 12:30 UTC40
            SdkUserIdentity::Own(i) => {
7ff8adafe9e4atagen2026-10-22 12:30 UTC41
                let master: CrossSigningKey = i.master_key().as_ref().to_owned();
7ff8adafe9e4atagen2026-10-22 12:30 UTC42
                let user_signing: CrossSigningKey = i.user_signing_key().as_ref().to_owned();
7ff8adafe9e4atagen2026-10-22 12:30 UTC43
                let self_signing: CrossSigningKey = i.self_signing_key().as_ref().to_owned();
7ff8adafe9e4atagen2026-10-22 12:30 UTC44
7ff8adafe9e4atagen2026-10-22 12:30 UTC45
                UserIdentity::Own {
7ff8adafe9e4atagen2026-10-22 12:30 UTC46
                    user_id: i.user_id().to_string(),
7ff8adafe9e4atagen2026-10-22 12:30 UTC47
                    trusts_our_own_device: i.trusts_our_own_device().await?,
7ff8adafe9e4atagen2026-10-22 12:30 UTC48
                    master_key: serde_json::to_string(&master)?,
7ff8adafe9e4atagen2026-10-22 12:30 UTC49
                    user_signing_key: serde_json::to_string(&user_signing)?,
7ff8adafe9e4atagen2026-10-22 12:30 UTC50
                    self_signing_key: serde_json::to_string(&self_signing)?,
7ff8adafe9e4atagen2026-10-22 12:30 UTC51
                    has_verification_violation: i.has_verification_violation(),
7ff8adafe9e4atagen2026-10-22 12:30 UTC52
                }
7ff8adafe9e4atagen2026-10-22 12:30 UTC53
            }
7ff8adafe9e4atagen2026-10-22 12:30 UTC54
            SdkUserIdentity::Other(i) => {
7ff8adafe9e4atagen2026-10-22 12:30 UTC55
                let master: CrossSigningKey = i.master_key().as_ref().to_owned();
7ff8adafe9e4atagen2026-10-22 12:30 UTC56
                let self_signing: CrossSigningKey = i.self_signing_key().as_ref().to_owned();
7ff8adafe9e4atagen2026-10-22 12:30 UTC57
7ff8adafe9e4atagen2026-10-22 12:30 UTC58
                UserIdentity::Other {
7ff8adafe9e4atagen2026-10-22 12:30 UTC59
                    user_id: i.user_id().to_string(),
7ff8adafe9e4atagen2026-10-22 12:30 UTC60
                    master_key: serde_json::to_string(&master)?,
7ff8adafe9e4atagen2026-10-22 12:30 UTC61
                    self_signing_key: serde_json::to_string(&self_signing)?,
7ff8adafe9e4atagen2026-10-22 12:30 UTC62
                    has_verification_violation: i.has_verification_violation(),
7ff8adafe9e4atagen2026-10-22 12:30 UTC63
                }
7ff8adafe9e4atagen2026-10-22 12:30 UTC64
            }
7ff8adafe9e4atagen2026-10-22 12:30 UTC65
        })
7ff8adafe9e4atagen2026-10-22 12:30 UTC66
    }
7ff8adafe9e4atagen2026-10-22 12:30 UTC67
}