[Updt] MTP
This commit is contained in:
parent
b2068f62fb
commit
8a54a360ca
14 changed files with 57 additions and 57 deletions
|
|
@ -6,7 +6,7 @@ edition = "2024"
|
|||
[dependencies]
|
||||
iota-storage = { path = "../iota-storage" }
|
||||
iota-util = { path = "../iota-util" }
|
||||
mtp = { git = "https://git.methanium.net/Methanium/mtp.git", features = ["crypto"] }
|
||||
mtp = { git = "https://git.methanium.net/Methanium/mtp.git", rev = "a135d0f0c2b35147011905f8ee0fc37050f69a6c", features = ["crypto"] }
|
||||
|
||||
[dev-dependencies]
|
||||
tokio = { version = "1.50.0", features = ["macros", "rt"] }
|
||||
|
|
|
|||
|
|
@ -175,8 +175,8 @@ pub fn apply_verified_relay_content(
|
|||
let created_at = i64::try_from(context.created_at)
|
||||
.map_err(|_| "Relay creation time exceeds the local storage range".to_string())?;
|
||||
|
||||
match content.message_type.as_str() {
|
||||
"MessageState" => {
|
||||
match content.message_type {
|
||||
CommunicationType::MessageState => {
|
||||
let partner_id =
|
||||
relay_number(&content.content, DataType::ChatPartnerId, &context.type_map)
|
||||
.and_then(|value| i64::try_from(value).ok())
|
||||
|
|
@ -218,7 +218,7 @@ pub fn apply_verified_relay_content(
|
|||
let _ = partner_id;
|
||||
Ok(())
|
||||
}
|
||||
"MessageSend" => {
|
||||
CommunicationType::MessageSend => {
|
||||
let message = relay_string(&content.content, DataType::Content, &context.type_map)
|
||||
.ok_or_else(|| "Relay MessageSend is missing Content".to_string())?;
|
||||
let send_time = relay_number(&content.content, DataType::SendTime, &context.type_map)
|
||||
|
|
@ -288,7 +288,7 @@ pub fn apply_verified_relay_content(
|
|||
.map_err(|error| error.to_string())?;
|
||||
Ok(())
|
||||
}
|
||||
"MessageEdit" => {
|
||||
CommunicationType::MessageEdit => {
|
||||
let message = relay_string(&content.content, DataType::Content, &context.type_map)
|
||||
.ok_or_else(|| "Relay MessageEdit is missing Content".to_string())?;
|
||||
let send_time = relay_number(&content.content, DataType::SendTime, &context.type_map)
|
||||
|
|
@ -318,7 +318,7 @@ pub fn apply_verified_relay_content(
|
|||
};
|
||||
result.map_err(|error| error.to_string())
|
||||
}
|
||||
"MessageReactionAdd" | "MessageReactionRemove" => {
|
||||
CommunicationType::MessageReactionAdd | CommunicationType::MessageReactionRemove => {
|
||||
let reaction = relay_string(&content.content, DataType::Reaction, &context.type_map)
|
||||
.filter(|value| !value.is_empty() && value.len() <= 64)
|
||||
.ok_or_else(|| "Relay reaction is invalid".to_string())?;
|
||||
|
|
@ -330,7 +330,7 @@ pub fn apply_verified_relay_content(
|
|||
} else {
|
||||
sender_id
|
||||
};
|
||||
let result = if content.message_type == "MessageReactionAdd" {
|
||||
let result = if content.message_type == CommunicationType::MessageReactionAdd {
|
||||
chat_files::add_reaction(
|
||||
storage_owner,
|
||||
external_user,
|
||||
|
|
@ -349,7 +349,7 @@ pub fn apply_verified_relay_content(
|
|||
};
|
||||
result.map_err(|error| error.to_string())
|
||||
}
|
||||
"MessageDelete" | "MessageDeleteLive" => {
|
||||
CommunicationType::MessageDelete | CommunicationType::MessageDeleteLive => {
|
||||
let send_time = relay_number(&content.content, DataType::SendTime, &context.type_map)
|
||||
.and_then(|value| i64::try_from(value).ok())
|
||||
.ok_or_else(|| "Relay MessageDeleteLive is missing SendTime".to_string())?;
|
||||
|
|
@ -365,7 +365,7 @@ pub fn apply_verified_relay_content(
|
|||
};
|
||||
result.map_err(|error| error.to_string())
|
||||
}
|
||||
"SetChatSecret" => {
|
||||
CommunicationType::SetChatSecret => {
|
||||
let frame = CommunicationValue::new(CommunicationType::SetChatSecret)
|
||||
.with_payload(content.content.clone());
|
||||
let recipients = chat_secret_recipients(&frame)
|
||||
|
|
@ -441,7 +441,7 @@ pub fn apply_verified_relay_content(
|
|||
})
|
||||
.map_err(|error| error.to_string())
|
||||
}
|
||||
"AddConversation" => {
|
||||
CommunicationType::AddConversation => {
|
||||
let other_id =
|
||||
relay_number(&content.content, DataType::ChatPartnerId, &context.type_map)
|
||||
.and_then(|value| i64::try_from(value).ok())
|
||||
|
|
@ -485,7 +485,7 @@ pub fn validate_outgoing_receipt_policy(
|
|||
context: &VerifiedRelayContext,
|
||||
content: &VerifiedRelayContent,
|
||||
) -> Result<(), String> {
|
||||
if content.message_type != "MessageState" {
|
||||
if content.message_type != CommunicationType::MessageState {
|
||||
return Ok(());
|
||||
}
|
||||
let state = relay_string(&content.content, DataType::MessageState, &context.type_map)
|
||||
|
|
|
|||
|
|
@ -197,7 +197,7 @@ where
|
|||
let context = VerifiedRelayContext {
|
||||
signer_id: metadata.signer_id(),
|
||||
final_recipient_id: metadata.final_recipient_id(),
|
||||
message_id: metadata.message_id().to_owned(),
|
||||
message_id: metadata.message_id().to_string(),
|
||||
created_at: metadata.created_at(),
|
||||
type_map,
|
||||
};
|
||||
|
|
@ -243,7 +243,7 @@ mod tests {
|
|||
use mtp::codec::SealedRelayBuilder;
|
||||
use mtp::crypto::{DualSigner, Ed25519Signer, Keyring};
|
||||
|
||||
fn relay(message_id: &str) -> Result<(Keyring, Keyring, CommunicationValue), String> {
|
||||
fn relay(message_id: u128) -> Result<(Keyring, Keyring, CommunicationValue), String> {
|
||||
let signer_keyring = Keyring::generate();
|
||||
let recipient_keyring = Keyring::generate();
|
||||
let signer = DualSigner::new(
|
||||
|
|
@ -253,7 +253,7 @@ mod tests {
|
|||
)
|
||||
.map_err(|error| error.to_string())?;
|
||||
let frame = SealedRelayBuilder::new(
|
||||
"MessageSend",
|
||||
mtp::codec::CommunicationType::MessageSend,
|
||||
mtp::codec::DataValue::Str("payload".into()),
|
||||
7,
|
||||
42,
|
||||
|
|
@ -273,7 +273,7 @@ mod tests {
|
|||
|
||||
#[tokio::test]
|
||||
async fn verifies_metadata_with_trusted_signing_key() -> Result<(), String> {
|
||||
let (signer, recipient, frame) = relay("accepted")?;
|
||||
let (signer, recipient, frame) = relay(1)?;
|
||||
let trusted_key = signer.public_key_bundle();
|
||||
let verified = verify_relay_metadata(&frame, 99, &recipient, move |signer_id| async move {
|
||||
(signer_id == 7)
|
||||
|
|
@ -285,13 +285,13 @@ mod tests {
|
|||
|
||||
assert_eq!(verified.context.signer_id, 7);
|
||||
assert_eq!(verified.context.final_recipient_id, 42);
|
||||
assert_eq!(verified.context.message_id, "accepted");
|
||||
assert_eq!(verified.context.message_id, "1");
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn content_validation_uses_final_recipient_id() -> Result<(), String> {
|
||||
let (signer, recipient, frame) = relay("final-recipient")?;
|
||||
let (signer, recipient, frame) = relay(2)?;
|
||||
let trusted_key = signer.public_key_bundle();
|
||||
let verified = verify_relay_metadata(&frame, 99, &recipient, move |signer_id| async move {
|
||||
(signer_id == 7)
|
||||
|
|
@ -309,7 +309,7 @@ mod tests {
|
|||
|
||||
#[tokio::test]
|
||||
async fn rejects_metadata_signed_by_untrusted_key() -> Result<(), String> {
|
||||
let (_signer, recipient, frame) = relay("wrong-key")?;
|
||||
let (_signer, recipient, frame) = relay(3)?;
|
||||
let wrong_signer = Keyring::generate();
|
||||
let trusted_key = wrong_signer.public_key_bundle();
|
||||
let result = verify_relay_metadata(&frame, 99, &recipient, move |_| async move {
|
||||
|
|
@ -328,7 +328,7 @@ mod tests {
|
|||
let signer = Ed25519Signer::new(&signer_keyring.sig_cl_secret_key)
|
||||
.map_err(|error| error.to_string())?;
|
||||
let frame = SealedRelayBuilder::new(
|
||||
"MessageSend",
|
||||
mtp::codec::CommunicationType::MessageSend,
|
||||
mtp::codec::DataValue::Str("payload".into()),
|
||||
7,
|
||||
42,
|
||||
|
|
@ -337,7 +337,7 @@ mod tests {
|
|||
.ok_or("invalid test target")?,
|
||||
&signer,
|
||||
)
|
||||
.message_id("classical-only")
|
||||
.message_id(7_u128)
|
||||
.created_at(123)
|
||||
.metadata_recipients(vec![recipient_keyring.public_key_bundle()])
|
||||
.content_recipients(vec![recipient_keyring.public_key_bundle()])
|
||||
|
|
@ -355,7 +355,7 @@ mod tests {
|
|||
|
||||
#[tokio::test]
|
||||
async fn rejects_outer_sender_before_key_lookup() -> Result<(), String> {
|
||||
let (_signer, recipient, frame) = relay("outer-sender")?;
|
||||
let (_signer, recipient, frame) = relay(4)?;
|
||||
let frame = frame.with_sender(501);
|
||||
let result = verify_relay_metadata(&frame, 99, &recipient, |_| async {
|
||||
Err(RelayValidationError::MissingSigningKeys(7))
|
||||
|
|
@ -371,7 +371,7 @@ mod tests {
|
|||
|
||||
#[tokio::test]
|
||||
async fn verification_does_not_commit_replay_state() -> Result<(), String> {
|
||||
let (signer, recipient, frame) = relay("duplicate")?;
|
||||
let (signer, recipient, frame) = relay(5)?;
|
||||
let trusted_key = signer.public_key_bundle();
|
||||
|
||||
for _ in 0..2 {
|
||||
|
|
@ -387,7 +387,7 @@ mod tests {
|
|||
|
||||
#[test]
|
||||
fn forwarding_preserves_sealed_payload() -> Result<(), String> {
|
||||
let (_signer, _recipient, frame) = relay("forwarding")?;
|
||||
let (_signer, _recipient, frame) = relay(6)?;
|
||||
let forwarded = forward_verified_relay(&frame, RouteTarget::User(100))
|
||||
.map_err(|error| error.to_string())?;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue