Lev
3 years ago
commit
7cfb275a18
5 changed files with 352 additions and 0 deletions
@ -0,0 +1,260 @@
|
||||
# This file is automatically @generated by Cargo. |
||||
# It is not intended for manual editing. |
||||
version = 3 |
||||
|
||||
[[package]] |
||||
name = "block-buffer" |
||||
version = "0.7.3" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" |
||||
dependencies = [ |
||||
"block-padding", |
||||
"byte-tools", |
||||
"byteorder", |
||||
"generic-array", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "block-padding" |
||||
version = "0.1.5" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" |
||||
dependencies = [ |
||||
"byte-tools", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "byte-tools" |
||||
version = "0.3.1" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" |
||||
|
||||
[[package]] |
||||
name = "byteorder" |
||||
version = "1.4.3" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" |
||||
|
||||
[[package]] |
||||
name = "cfg-if" |
||||
version = "1.0.0" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" |
||||
|
||||
[[package]] |
||||
name = "digest" |
||||
version = "0.8.1" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" |
||||
dependencies = [ |
||||
"generic-array", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "fake-simd" |
||||
version = "0.1.2" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" |
||||
|
||||
[[package]] |
||||
name = "generic-array" |
||||
version = "0.12.4" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" |
||||
dependencies = [ |
||||
"typenum", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "getrandom" |
||||
version = "0.1.16" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" |
||||
dependencies = [ |
||||
"cfg-if", |
||||
"libc", |
||||
"wasi 0.9.0+wasi-snapshot-preview1", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "getrandom" |
||||
version = "0.2.3" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" |
||||
dependencies = [ |
||||
"cfg-if", |
||||
"libc", |
||||
"wasi 0.10.2+wasi-snapshot-preview1", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "ironforce" |
||||
version = "0.1.0" |
||||
dependencies = [ |
||||
"rand", |
||||
"rand_os", |
||||
"serde", |
||||
"sha2", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "libc" |
||||
version = "0.2.107" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "fbe5e23404da5b4f555ef85ebed98fb4083e55a00c317800bc2a50ede9f3d219" |
||||
|
||||
[[package]] |
||||
name = "opaque-debug" |
||||
version = "0.2.3" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" |
||||
|
||||
[[package]] |
||||
name = "ppv-lite86" |
||||
version = "0.2.15" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "ed0cfbc8191465bed66e1718596ee0b0b35d5ee1f41c5df2189d0fe8bde535ba" |
||||
|
||||
[[package]] |
||||
name = "proc-macro2" |
||||
version = "1.0.32" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "ba508cc11742c0dc5c1659771673afbab7a0efab23aa17e854cbab0837ed0b43" |
||||
dependencies = [ |
||||
"unicode-xid", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "quote" |
||||
version = "1.0.10" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "38bc8cc6a5f2e3655e0899c1b848643b2562f853f114bfec7be120678e3ace05" |
||||
dependencies = [ |
||||
"proc-macro2", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "rand" |
||||
version = "0.8.4" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" |
||||
dependencies = [ |
||||
"libc", |
||||
"rand_chacha", |
||||
"rand_core 0.6.3", |
||||
"rand_hc", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "rand_chacha" |
||||
version = "0.3.1" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" |
||||
dependencies = [ |
||||
"ppv-lite86", |
||||
"rand_core 0.6.3", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "rand_core" |
||||
version = "0.5.1" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" |
||||
dependencies = [ |
||||
"getrandom 0.1.16", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "rand_core" |
||||
version = "0.6.3" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" |
||||
dependencies = [ |
||||
"getrandom 0.2.3", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "rand_hc" |
||||
version = "0.3.1" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7" |
||||
dependencies = [ |
||||
"rand_core 0.6.3", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "rand_os" |
||||
version = "0.2.2" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "a788ae3edb696cfcba1c19bfd388cc4b8c21f8a408432b199c072825084da58a" |
||||
dependencies = [ |
||||
"getrandom 0.1.16", |
||||
"rand_core 0.5.1", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "serde" |
||||
version = "1.0.130" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913" |
||||
dependencies = [ |
||||
"serde_derive", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "serde_derive" |
||||
version = "1.0.130" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b" |
||||
dependencies = [ |
||||
"proc-macro2", |
||||
"quote", |
||||
"syn", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "sha2" |
||||
version = "0.8.2" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "a256f46ea78a0c0d9ff00077504903ac881a1dafdc20da66545699e7776b3e69" |
||||
dependencies = [ |
||||
"block-buffer", |
||||
"digest", |
||||
"fake-simd", |
||||
"opaque-debug", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "syn" |
||||
version = "1.0.81" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "f2afee18b8beb5a596ecb4a2dce128c719b4ba399d34126b9e4396e3f9860966" |
||||
dependencies = [ |
||||
"proc-macro2", |
||||
"quote", |
||||
"unicode-xid", |
||||
] |
||||
|
||||
[[package]] |
||||
name = "typenum" |
||||
version = "1.14.0" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "b63708a265f51345575b27fe43f9500ad611579e764c79edbc2037b1121959ec" |
||||
|
||||
[[package]] |
||||
name = "unicode-xid" |
||||
version = "0.2.2" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" |
||||
|
||||
[[package]] |
||||
name = "wasi" |
||||
version = "0.9.0+wasi-snapshot-preview1" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" |
||||
|
||||
[[package]] |
||||
name = "wasi" |
||||
version = "0.10.2+wasi-snapshot-preview1" |
||||
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" |
@ -0,0 +1,15 @@
|
||||
[package] |
||||
name = "ironforce" |
||||
version = "0.1.0" |
||||
edition = "2018" |
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html |
||||
|
||||
|
||||
[dependencies] |
||||
rand_os = "*" |
||||
# x25519-dalek = "0.6.0" |
||||
# ed25519-dalek = { version = "1.0", features = ["serde"] } |
||||
sha2 = "0.8.1" |
||||
rand = "*" |
||||
serde = { version = "1.0", features = ["derive", "alloc"], default-features = false } |
@ -0,0 +1,63 @@
|
||||
extern crate rand; |
||||
|
||||
use crate::ed25519_dalek::ed25519::signature::Signature; |
||||
use crate::ed25519_dalek::Signer; |
||||
use crate::ed25519_dalek::Verifier; |
||||
use alloc::vec::Vec; |
||||
use ed25519_dalek::{Keypair, PublicKey as PK}; |
||||
use rand::rngs::OsRng; |
||||
use serde::{Deserialize, Serialize}; |
||||
|
||||
#[derive(Debug, PartialEq, Serialize, Deserialize, Clone)] |
||||
pub struct PublicKey { |
||||
pub key: [u8; 32], |
||||
} |
||||
|
||||
impl PublicKey { |
||||
pub fn verify_sign(&self, raw: &Vec<u8>, sign: &Vec<u8>) -> bool { |
||||
PK::from_bytes(&self.key) |
||||
.unwrap() |
||||
.verify( |
||||
raw, |
||||
&Signature::from_bytes(sign.clone().into_boxed_slice().as_ref()).unwrap(), |
||||
) |
||||
.is_ok() |
||||
} |
||||
} |
||||
|
||||
pub struct Keys { |
||||
pub pair: Keypair, |
||||
} |
||||
|
||||
impl Keys { |
||||
pub fn gen() -> Keys { |
||||
Keys { |
||||
pair: Keypair::generate(&mut OsRng {}), |
||||
} |
||||
} |
||||
} |
||||
|
||||
#[derive(Debug, PartialEq, Serialize, Deserialize, Clone)] |
||||
pub enum Sign { |
||||
NoSign, |
||||
Signed(PublicKey /* source */, Vec<u8> /* sign */), |
||||
} |
||||
|
||||
pub fn verify_sign(data: &Vec<u8>, sign: &Sign) -> bool { |
||||
match sign { |
||||
Sign::NoSign => true, |
||||
Sign::Signed(key, sign) => key.verify_sign(data, sign), |
||||
} |
||||
} |
||||
|
||||
impl Keys { |
||||
pub fn sign(&self, content: &Vec<u8>) -> Vec<u8> { |
||||
self.pair.sign(content.as_ref()).to_bytes().to_vec() |
||||
} |
||||
|
||||
pub fn get_public(&self) -> PublicKey { |
||||
PublicKey { |
||||
key: *self.clone().pair.public.as_bytes(), |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue