hostbasket/sigsocket/src/protocol.rs
2025-05-19 14:48:40 +03:00

46 lines
1.3 KiB
Rust

use serde::{Deserialize, Serialize};
use actix::prelude::*;
// Message for client introduction
#[derive(Message)]
#[rtype(result = "()")]
pub struct Introduction {
pub public_key: String,
}
// Message for requesting a signature from a client
#[derive(Message, Debug)]
#[rtype(result = "()")]
pub struct SignRequest {
pub message: Vec<u8>,
pub request_id: String,
pub response_sender: Option<tokio::sync::oneshot::Sender<String>>,
}
/// Response for a signature request
#[derive(Message, Debug)]
#[rtype(result = "()")]
pub struct SignResponse {
pub message: Vec<u8>,
pub signature: Vec<u8>,
pub request_id: String,
}
// Internal message for pending requests
#[derive(Message)]
#[rtype(result = "()")]
pub struct PendingRequest {
pub request_id: String,
pub message: Vec<u8>,
pub response_tx: tokio::sync::oneshot::Sender<String>,
}
// Protocol enum for serializing/deserializing WebSocket messages
#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(tag = "type", content = "payload")]
pub enum ProtocolMessage {
Introduction(String), // Contains base64 encoded public key
SignRequest(String), // Contains base64 encoded message to sign
SignResponse(String), // Contains "message.signature" in base64
}