46 lines
1.3 KiB
Rust
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
|
|
}
|