mostro_client/cli/
conversation_key.rs

1use crate::parser::common::{
2    print_info_line, print_key_value, print_section_header, print_success_message,
3};
4use anyhow::Result;
5use nip44::v2::ConversationKey;
6use nostr_sdk::prelude::*;
7
8pub async fn execute_conversation_key(trade_keys: &Keys, receiver: PublicKey) -> Result<()> {
9    print_section_header("🔐 Conversation Key Generator");
10    print_key_value("🔑", "Trade Keys", &trade_keys.public_key().to_hex());
11    print_key_value("🎯", "Receiver", &receiver.to_string());
12    print_info_line("💡", "Deriving conversation key...");
13    println!();
14
15    // Derive conversation key
16    let ck = ConversationKey::derive(trade_keys.secret_key(), &receiver)?;
17    let key = ck.as_bytes();
18    let mut ck_hex = vec![];
19    for i in key {
20        ck_hex.push(format!("{:02x}", i));
21    }
22    let ck_hex = ck_hex.join("");
23
24    println!("🔐 Conversation Key:");
25    println!("─────────────────────────────────────");
26    println!("{}", ck_hex);
27    println!("─────────────────────────────────────");
28    print_success_message("Conversation key generated successfully!");
29
30    Ok(())
31}