1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
pub mod contents; pub mod locked; pub mod unlocked; use ursa::encryption::random_vec; pub fn get_random(len: usize) -> Result<Vec<u8>, String> { random_vec(len).map_err(|e| e.to_string()) } pub mod prelude { pub use crate::contents::{ key_pair::KeyPair, public_key_info::{to_recoverable_signature, KeyType, PublicKeyInfo}, Content, ContentEntity, }; pub use crate::locked::LockedWallet; pub use crate::unlocked::UnlockedWallet; } #[cfg(test)] mod tests { use crate::prelude::*; use serde_json; #[test] fn secp256k1_recoverable_round_trip() -> Result<(), String> { let message = "hello".as_bytes(); let mut w = UnlockedWallet::new("thing"); let pk_info = w.new_key(KeyType::EcdsaSecp256k1RecoveryMethod2020, None)?; let sig = w.sign_raw(&pk_info.id, &message)?; assert_eq!( Ok(true), match pk_info.content { Content::PublicKey(r_pk_inf) => r_pk_inf.verify(&message, &sig), _ => Ok(false), } ); Ok(()) } #[test] fn wallet() -> Result<(), String> { let mut w = UnlockedWallet::new("thing"); w.new_key(KeyType::EcdsaSecp256k1RecoveryMethod2020, None)?; w.new_key(KeyType::EcdsaSecp256k1RecoveryMethod2020, None)?; w.new_key(KeyType::EcdsaSecp256k1RecoveryMethod2020, None)?; w.new_key(KeyType::EcdsaSecp256k1RecoveryMethod2020, None)?; w.new_key(KeyType::EcdsaSecp256k1RecoveryMethod2020, None)?; let pass = "My Password".to_string(); let lw = w.lock(pass.as_bytes())?; let uw = lw.unlock(pass.as_bytes())?; assert_eq!(5, uw.get_keys().len()); Ok(()) } }