use std::convert::Infallible;
use pallas_codec::minicbor;
#[derive(Debug, Clone, Eq, PartialEq)]
pub struct DmqMsg {
pub msg_payload: DmqMsgPayload,
pub kes_signature: Vec<u8>,
pub operational_certificate: DmqMsgOperationalCertificate,
pub cold_verification_key: Vec<u8>,
}
#[derive(Debug, Clone, Eq, PartialEq)]
pub struct DmqMsgPayload {
pub msg_id: Vec<u8>,
pub msg_body: Vec<u8>,
pub kes_period: u64,
pub expires_at: u32,
}
impl DmqMsgPayload {
pub fn bytes_to_sign(&self) -> Result<Vec<u8>, minicbor::encode::Error<Infallible>> {
minicbor::to_vec(self)
}
}
#[derive(Debug, Clone, Eq, PartialEq)]
pub struct DmqMsgOperationalCertificate {
pub kes_vk: Vec<u8>,
pub issue_number: u64,
pub start_kes_period: u64,
pub cert_sig: Vec<u8>,
}
#[derive(Debug, Clone, Eq, PartialEq)]
pub struct DmqMsgValidationError(pub String);
impl From<String> for DmqMsgValidationError {
fn from(string: String) -> DmqMsgValidationError {
DmqMsgValidationError(string)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn dmq_msg_payload_bytes_to_sign_golden() {
let payload = DmqMsgPayload {
msg_id: vec![1, 2, 3],
msg_body: vec![4, 5, 6],
kes_period: 7,
expires_at: 14,
};
let bytes = payload.bytes_to_sign().unwrap();
assert_eq!(vec![132, 67, 1, 2, 3, 67, 4, 5, 6, 7, 14], bytes);
}
}