From cfaafba77f428cb7a253d2fce94cf039b3f2fb01 Mon Sep 17 00:00:00 2001 From: Joscha Date: Thu, 10 Feb 2022 21:43:18 +0100 Subject: [PATCH] Extract, (de-)serialize and format id --- Cargo.lock | 54 ++++++++++++++++++++++++++++++++++++++++++-- cove-core/Cargo.toml | 2 ++ cove-core/src/id.rs | 24 ++++++++++++++++++++ cove-core/src/lib.rs | 5 ++-- 4 files changed, 80 insertions(+), 5 deletions(-) create mode 100644 cove-core/src/id.rs diff --git a/Cargo.lock b/Cargo.lock index e546a32..764f856 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -23,6 +23,15 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block-buffer" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324" +dependencies = [ + "generic-array", +] + [[package]] name = "byteorder" version = "1.4.3" @@ -45,7 +54,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" name = "cove-core" version = "0.1.0" dependencies = [ + "hex", "serde", + "sha2", ] [[package]] @@ -72,6 +83,15 @@ dependencies = [ "libc", ] +[[package]] +name = "crypto-common" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4600d695eb3f6ce1cd44e6e291adceb2cc3ab12f20a33777ecd0bf6eba34e06" +dependencies = [ + "generic-array", +] + [[package]] name = "digest" version = "0.9.0" @@ -81,6 +101,16 @@ dependencies = [ "generic-array", ] +[[package]] +name = "digest" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cb780dce4f9a8f5c087362b3a4595936b2019e7c8b30f2c3e9a7e94e6ae9837" +dependencies = [ + "block-buffer 0.10.2", + "crypto-common", +] + [[package]] name = "fnv" version = "1.0.7" @@ -216,6 +246,15 @@ dependencies = [ "libc", ] +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +dependencies = [ + "serde", +] + [[package]] name = "http" version = "0.2.6" @@ -513,13 +552,24 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" dependencies = [ - "block-buffer", + "block-buffer 0.9.0", "cfg-if", "cpufeatures", - "digest", + "digest 0.9.0", "opaque-debug", ] +[[package]] +name = "sha2" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99c3bd8169c58782adad9290a9af5939994036b76187f7b4f0e6de91dbbfc0ec" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.2", +] + [[package]] name = "signal-hook-registry" version = "1.4.0" diff --git a/cove-core/Cargo.toml b/cove-core/Cargo.toml index eb7c057..4bff230 100644 --- a/cove-core/Cargo.toml +++ b/cove-core/Cargo.toml @@ -4,4 +4,6 @@ version = "0.1.0" edition = "2021" [dependencies] +hex = { version = "0.4.3", features = ["serde"] } serde = { version = "1.0.136", features = ["derive"] } +sha2 = "0.10.1" diff --git a/cove-core/src/id.rs b/cove-core/src/id.rs new file mode 100644 index 0000000..d2a514f --- /dev/null +++ b/cove-core/src/id.rs @@ -0,0 +1,24 @@ +use std::fmt; + +use hex::ToHex; +use serde::{Deserialize, Serialize}; +use sha2::{Digest, Sha256}; + +// TODO Use base64 representation instead + +#[derive(Debug, Deserialize, Serialize)] +pub struct Id(#[serde(with = "hex")] [u8; 32]); + +impl Id { + pub fn of(str: &str) -> Self { + let mut hasher = Sha256::new(); + hasher.update(str); + Self(hasher.finalize().into()) + } +} + +impl fmt::Display for Id { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "{}", self.0.encode_hex::()) + } +} diff --git a/cove-core/src/lib.rs b/cove-core/src/lib.rs index 4c7b3cc..c4b9f47 100644 --- a/cove-core/src/lib.rs +++ b/cove-core/src/lib.rs @@ -1,12 +1,11 @@ +mod id; mod macros; use serde::{Deserialize, Serialize}; +pub use self::id::*; use self::macros::packets; -#[derive(Debug, Deserialize, Serialize)] -pub struct Id(pub u128); - #[derive(Debug, Deserialize, Serialize)] pub struct HelloCmd { pub id: Id,