diff --git a/Cargo.lock b/Cargo.lock index d3289b3..1321ce8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,10 +1,5 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -[[package]] -name = "alt_serde" -version = "1.0.104" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "block-buffer" version = "0.7.3" @@ -39,6 +34,14 @@ name = "cfg-if" version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "core-error" +version = "0.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "curve25519-dalek" version = "2.0.0" @@ -113,12 +116,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" name = "ironforest" version = "0.1.0" dependencies = [ - "alt_serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", + "core-error 0.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "curve25519-dalek 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "ecdsa 0.5.0-pre (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", "serde_cbor 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)", + "sha2 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -260,6 +264,11 @@ name = "unicode-xid" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "version_check" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "wasi" version = "0.9.0+wasi-snapshot-preview1" @@ -271,12 +280,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" [metadata] -"checksum alt_serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)" = "03beeddedd09889b96def26f78ba46e34ffd9bdaaa33b2c980cbaa1d0e762686" "checksum block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" "checksum block-padding 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" "checksum byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" "checksum byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" "checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" +"checksum core-error 0.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "efcdb2972eb64230b4c50646d8498ff73f5128d196a90c7236eec4cbe8619b8f" "checksum curve25519-dalek 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "26778518a7f6cffa1d25a44b602b62b979bd88adb9e99ffec546998cf3404839" "checksum digest 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" "checksum ecdsa 0.5.0-pre (registry+https://github.com/rust-lang/crates.io-index)" = "1d7e523a6e90b7682c0857c1d26cf06f3a0224bc2dfb0766f5e35a0a71ad3dbe" @@ -303,5 +312,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)" = "123bd9499cfb380418d509322d7a6d52e5315f064fe4b3ad18a53d6b92c07859" "checksum typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6d2783fe2d6b8c1101136184eb41be8b1ad379e4657050b8aaff0c79ee7575f9" "checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" +"checksum version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "078775d0255232fb988e6fccf26ddc9d1ac274299aaedcedce21c6f72cc533ce" "checksum wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)" = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" "checksum zeroize 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3cbac2ed2ba24cc90f5e06485ac8c7c1e5449fe8911aef4d8877218af021a5b8" diff --git a/Cargo.toml b/Cargo.toml index 0795beb..7c5651e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,8 @@ edition = "2018" [dependencies] ecdsa = "0.5.0-pre" curve25519-dalek = "2" -alt_serde = "1.0.104" +sha2 = "0.8.1" +core-error = "0.0.0" rand = "*" serde = { version = "1.0", features = ["derive", "alloc"], default-features = false } serde_cbor = { version = "0.11", default-features = false } diff --git a/src/addresses.rs b/src/addresses.rs deleted file mode 100644 index 4947df5..0000000 --- a/src/addresses.rs +++ /dev/null @@ -1,14 +0,0 @@ -extern crate rand; -use serde::{Serialize, Deserialize}; - -#[derive(Serialize, Deserialize, Debug, PartialEq)] -pub struct PublicKey { - pub id: u64 -} - -#[derive(Serialize, Deserialize, Debug, PartialEq)] -pub struct SecretKey {} - -pub fn gen_keys() -> (PublicKey, SecretKey) { - (PublicKey { id: rand::random::() }, SecretKey {}) -} diff --git a/src/crypto.rs b/src/crypto.rs new file mode 100644 index 0000000..6e37e13 --- /dev/null +++ b/src/crypto.rs @@ -0,0 +1,32 @@ +extern crate rand; + +use serde::{Serialize, Deserialize}; + +#[derive(Serialize, Deserialize, Debug, PartialEq)] +pub struct PublicKey { + pub id: u64 +} + +#[derive(Serialize, Deserialize, Debug, PartialEq)] +pub struct KeyPack { + pub public_key: PublicKey, + secret_key: u64, +} + +impl KeyPack { + pub fn gen() -> KeyPack { + KeyPack { public_key: PublicKey { id: rand::random::() }, secret_key: 0 } + } +} + +impl PublicKey { + pub fn verify_sign(self, sign: u64) -> bool { + true + } +} + +impl KeyPack { + pub fn sign(self, msg: u64) -> u64 { + 0 + } +} diff --git a/src/error.rs b/src/error.rs new file mode 100644 index 0000000..2d93388 --- /dev/null +++ b/src/error.rs @@ -0,0 +1 @@ +pub trait Error {} diff --git a/src/ironforce.rs b/src/ironforce.rs index eed2ccf..79768b7 100644 --- a/src/ironforce.rs +++ b/src/ironforce.rs @@ -1,16 +1,14 @@ use crate::transport::Transport; -use crate::addresses::{PublicKey, SecretKey, gen_keys}; +use crate::crypto::{PublicKey, KeyPack}; pub struct IronForce { transport: Transport, - public: PublicKey, - secret: SecretKey, + key_pack: KeyPack } impl IronForce { - pub fn new() -> IronForce { - let (public, secret) = gen_keys(); - IronForce { transport: Transport {}, public, secret } + pub fn gen() -> IronForce { + IronForce { transport: Transport {}, key_pack: KeyPack::gen() } } } diff --git a/src/lib.rs b/src/lib.rs index c83265b..155c9af 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -6,7 +6,8 @@ extern crate alloc; mod ironforce; mod transport; mod message; -mod addresses; +mod crypto; +mod error; #[cfg(test)] mod tests { @@ -16,17 +17,12 @@ mod tests { #[test] fn creation_works() { - IronForce::new(); + IronForce::gen(); } #[test] fn serialization() { - let msg = crate::message::Message { - msg_type: MsgType::MultiCast, - hash: 0, - body: 0, - source: crate::addresses::PublicKey { id: 0 }, - }; + let msg = crate::message::Message::new(MsgType::MultiCast, Vec::::new(), crate::crypto::KeyPack::gen()); let serialized = msg.ser(); let msg2 = Message::deserialize(serialized); } diff --git a/src/message.rs b/src/message.rs index feda78b..b5704ad 100644 --- a/src/message.rs +++ b/src/message.rs @@ -1,6 +1,7 @@ use serde::{Serialize, Deserialize}; -use crate::addresses::PublicKey; +use crate::crypto::{PublicKey, KeyPack}; use alloc::vec::Vec; +use sha2::Digest; #[derive(Serialize, Deserialize, Debug, PartialEq)] @@ -12,25 +13,44 @@ pub enum MsgType { #[derive(Serialize, Deserialize, Debug, PartialEq)] pub struct Message { pub msg_type: MsgType, - pub hash: u64, - pub body: u64, + pub body: Vec, pub source: PublicKey, + hash: u64, + sign: u64, } impl Message { + fn get_hash(self) -> Vec { + let mut hasher = sha2::Sha256::new(); + hasher.input(self.ser()); + hasher.result().to_vec() + } + + pub fn new(msg_type: MsgType, body: Vec, key_pack: KeyPack) -> Message { + let msg = Message { msg_type, body, source: key_pack.public_key, hash: 0, sign: 0 }; + msg + } + pub fn ser(self) -> Vec { let mut buf = [0u8; 8192]; let mut ser = serde_cbor::Serializer::new( serde_cbor::ser::SliceWrite::new(&mut buf[..]) ); - self.serialize(&mut ser).unwrap(); + self.serialize(&mut ser); let writer = ser.into_inner(); buf.to_vec() } pub fn deserialize(serialized: Vec) -> Self { let mut scratch = [0u8; 8192]; - let msg = serde_cbor::de::from_slice_with_scratch(&serialized.as_slice(), &mut scratch).unwrap(); - msg + let msg_r = serde_cbor::de::from_slice_with_scratch(&serialized.as_slice(), &mut scratch); + match msg_r { + Ok(msg) => { + msg + } + Err(e) => { + panic!("{}", e); + } + } } }