use serde::{Deserialize, Serialize};
use time::OffsetDateTime;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct KeyRecord {
pub id: String,
pub version: u16,
#[serde(with = "hex::serde")]
pub ed25519: [u8; 32],
#[serde(with = "hex::serde")]
pub x25519: [u8; 32],
#[serde(with = "time::serde::rfc3339")]
pub created_at: OffsetDateTime,
#[serde(with = "time::serde::rfc3339::option")]
pub expires_at: Option<OffsetDateTime>,
}
impl KeyRecord {
pub fn signing_key(
&self,
) -> Result<ed25519_dalek::VerifyingKey, ed25519_dalek::ed25519::Error> {
ed25519_dalek::VerifyingKey::from_bytes(&self.ed25519)
}
pub fn public_key(&self) -> x25519_dalek::PublicKey {
x25519_dalek::PublicKey::from(self.x25519)
}
pub fn is_expired(&self) -> bool {
let now = OffsetDateTime::now_utc();
if let Some(expires_at) = self.expires_at {
now >= expires_at
} else {
false
}
}
}