tower_defense/crypto/
mod.rs1use ed25519_dalek::{self as ed25519, Signer as _, SigningKey, Verifier as _};
2use serde::{Deserialize, Serialize};
3
4use crate::error::Error;
5
6pub mod peer_id;
7pub use peer_id::PeerId;
8
9#[derive(Debug, Clone, Serialize, Deserialize)]
10#[serde(transparent)]
11pub struct Keypair(ed25519::SigningKey);
12
13impl Keypair {
14 #[must_use]
15 pub fn from_secret_bytes(bytes: &[u8; 32]) -> Self {
16 Self(SigningKey::from_bytes(bytes))
17 }
18
19 #[must_use]
20 pub fn sign(&self, data: &[u8]) -> Signature {
21 self.0.sign(data).into()
22 }
23
24 #[must_use]
25 pub fn public(&self) -> PublicKey {
26 self.0.verifying_key().into()
27 }
28}
29
30impl From<ed25519::SigningKey> for Keypair {
31 fn from(key: ed25519::SigningKey) -> Self {
32 Self(key)
33 }
34}
35
36#[derive(Debug, Clone, Serialize, Deserialize)]
37#[serde(transparent)]
38pub struct PublicKey(ed25519::VerifyingKey);
39
40impl PublicKey {
41 pub fn verify(&self, data: &[u8], signature: &Signature) -> Result<(), Error> {
47 self.0.verify(data, &signature.0).map_err(Into::into)
48 }
49}
50
51impl From<ed25519::VerifyingKey> for PublicKey {
52 fn from(key: ed25519::VerifyingKey) -> Self {
53 Self(key)
54 }
55}
56
57#[derive(Debug, Clone, Serialize, Deserialize)]
58#[serde(transparent)]
59pub struct Signature(ed25519::Signature);
60
61impl From<ed25519::Signature> for Signature {
62 fn from(signature: ed25519::Signature) -> Self {
63 Self(signature)
64 }
65}