Skip to content

Commit

Permalink
feat: add remaining mimi-protocol structures
Browse files Browse the repository at this point in the history
  • Loading branch information
timokoesters committed Jan 7, 2025
1 parent 2b940b1 commit 58d3793
Show file tree
Hide file tree
Showing 12 changed files with 329 additions and 51 deletions.
144 changes: 144 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,5 @@ version = "0.1.0"
edition = "2021"

[dependencies]
openmls = "0.6.0"
serde_bytes = "0.11.15"
36 changes: 36 additions & 0 deletions src/consent.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
use openmls::prelude::KeyPackage;
use serde_bytes::ByteBuf;

use crate::IdentifierUri;

#[repr(u8)]
pub enum ConsentEntry {
// TODO: Factor our common fields
Cancel {
requester_uri: IdentifierUri,
target_uri: IdentifierUri,
room_id: Option<ByteBuf>,
} = 0,
Request {
requester_uri: IdentifierUri,
target_uri: IdentifierUri,
room_id: Option<ByteBuf>,
} = 1,
Grant {
requester_uri: IdentifierUri,
target_uri: IdentifierUri,
room_id: Option<ByteBuf>,
client_key_packages: KeyPackage,
} = 2,
Revoke {
requester_uri: IdentifierUri,
target_uri: IdentifierUri,
room_id: Option<ByteBuf>,
} = 3,
}

pub struct ConsentScope {
requester_uri: IdentifierUri,
target_uri: IdentifierUri,
room_id: Option<ByteBuf>,
}
5 changes: 5 additions & 0 deletions src/frank.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
pub struct Frank {
franking_tag: [u8; 32], // TODO: The RFC starts mixing camelCase and snake_case
server_frank: [u8; 32],
server_frank_context_hash: [u8; 32],
}
30 changes: 23 additions & 7 deletions src/group_info.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,39 @@
//
// SPDX-License-Identifier: AGPL-3.0-or-later

use openmls::prelude::{
group_info::GroupInfo, Ciphersuite, Credential, ExternalSender, HpkePublicKey,
SignaturePublicKey,
};
use serde_bytes::ByteBuf;

use super::{CipherSuite, GroupInfo, RatchetTreeOption};
use super::RatchetTreeOption;

// "to-be-signed"
#[repr(u8)]
pub enum GroupInfoRequestTBS {
pub enum GroupInfoRequest {
Mls10 {
cipher_suite: CipherSuite,
cipher_suite: Ciphersuite,
requesting_signature_key: SignaturePublicKey,
requesting_credential: Credential,
group_info_public_key: HPKEPublicKey,
group_info_public_key: HpkePublicKey,
joining_code: Option<String>, // TODO: Or ByteBuf?
signature: ByteBuf, // TODO: Or only create signature when serializing, for example macro #[signature]?
} = 1,
}

// TODO: The signed variant's joining code is not optional?

// TODO: typo groupInfoPubl[i]cKey

#[repr(u8)]
pub enum GroupInfoCode {
Reserved = 0,
Success = 1,
NotAuthorized = 2,
NoSuchRoom = 3,
Custom(u8),
}

// "to-be-encrypted"
pub struct GroupInfoRatchetTreeTBE {
group_info: GroupInfo,
Expand All @@ -28,13 +43,14 @@ pub struct GroupInfoRatchetTreeTBE {

// "to-be-signed"
#[repr(u8)]
pub enum GroupInfoResponseTBS {
pub enum GroupInfoResponse {
Mls10 {
status: GroupInfoCode,
cipher_suite: CipherSuite,
cipher_suite: Ciphersuite,
room_id: ByteBuf,
hub_sender: ExternalSender,
encrypted_groupinfo_and_tree: ByteBuf,
signature: ByteBuf, // TODO: Or only create signature when serializing, for example macro #[signature]?
} = 1,
}

Expand Down
71 changes: 71 additions & 0 deletions src/identifier_query.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
use serde_bytes::ByteBuf;

use crate::IdentifierUri;

#[repr(u8)]
pub enum IdentifierRequest {
Reserved {
search_value: String,
} = 0,
Handle {
search_value: String,
} = 1,
Nick {
search_value: String,
} = 2,
Email {
search_value: String,
} = 3,
Phone {
search_value: String,
} = 4,
PartialName {
search_value: String,
} = 5,
WholeProfile {
search_value: String,
} = 6,
OidcStdClaim {
search_value: String,
claim_name: String,
} = 7,
VcardField {
search_value: String,
field_name: String,
} = 8,
}

#[repr(u8)]
pub enum IdentifierQueryCode {
Success = 0,
NotFound = 1,
Ambiguous = 2,
Forbidden = 3,
UnsupportedField = 4,
Custom(u8),
}

#[repr(u8)]
pub enum FieldSource {
Reserved = 0,
OidcStdClaim = 7,
VCardField = 8,
Custom(u8),
}

struct ProfileField {
field_source: FieldSource,
field_name: String, // TODO: Why does it say string in the rfc instead of opaque <V>
field_value: ByteBuf,
}

struct UserProfile {
stable_uri: IdentifierUri,
fields: Vec<ProfileField>,
}

pub struct IdentifierResponse {
response_code: IdentifierQueryCode,
uri: Vec<IdentifierUri>,
found_profiles: Vec<UserProfile>,
}
8 changes: 5 additions & 3 deletions src/key_material.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,18 @@
//
// SPDX-License-Identifier: AGPL-3.0-or-later

use super::{Capabilities, CipherSuite, IdentifierUri, KeyPackage, RequiredCapabilities};
use openmls::prelude::{Capabilities, Ciphersuite, KeyPackage, RequiredCapabilitiesExtension};

use super::IdentifierUri;

#[repr(u8)]
pub enum KeyMaterialRequest {
Mls10 {
requesting_user: IdentifierUri,
target_user: IdentifierUri,
room_id: IdentifierUri,
acceptable_ciphersuites: Vec<CipherSuite>,
required_capabilities: RequiredCapabilities,
acceptable_ciphersuites: Vec<Ciphersuite>,
required_capabilities: RequiredCapabilitiesExtension,
} = 1,
}

Expand Down
Loading

0 comments on commit 58d3793

Please sign in to comment.