From b5e5ee025651b76e2c01610c77b52f5cdae1f422 Mon Sep 17 00:00:00 2001 From: librelois <c@elo.tf> Date: Tue, 1 Sep 2020 17:37:04 +0200 Subject: [PATCH] [fix] fix tests & add seed random feature --- Cargo.toml | 6 +++--- src/crypto.rs | 10 +++++++++- src/parsers.rs | 8 ++++---- tests/web.rs | 32 +++++++++++++++++++++++--------- 4 files changed, 39 insertions(+), 17 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index a32f983..b5215f6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "dup-tools-wasm" -version = "0.3.0" +version = "0.3.1" authors = ["librelois <elois@duniter.org>"] description = "Tools for DUP Protocol." repository = "https://git.duniter.org/tools/dup-tools-wasm" @@ -15,8 +15,8 @@ default = ["console_error_panic_hook"] [dependencies] cfg-if = "0.1.10" -dubp-documents = { version = "0.20.0", features = ["crypto_scrypt"] } -dubp-documents-parser = { version = "0.5.1", features = ["crypto_scrypt"] } +dubp-documents = { version = "0.21.0", features = ["crypto_rand", "crypto_scrypt"] } +dubp-documents-parser = { version = "0.6.0", features = ["crypto_rand", "crypto_scrypt"] } #durs-network-documents = "0.3.1" serde_derive = "1.0.*" wasm-bindgen = "0.2.67" diff --git a/src/crypto.rs b/src/crypto.rs index 61c24d5..8e6f6fe 100644 --- a/src/crypto.rs +++ b/src/crypto.rs @@ -29,6 +29,14 @@ pub fn verify(datas: &str, pubkey: &str, signature: &str) -> bool { pubkey.verify(datas.as_bytes(), &sig).is_ok() } +#[wasm_bindgen] +pub fn generate_random_seed() -> String { + match Seed32::random() { + Ok(seed) => seed.to_base58(), + Err(_) => "fail to generate random seed".to_owned(), + } +} + #[wasm_bindgen] pub fn generate_ed25519_pubkey(salt: String, password: String) -> String { let keypair = ed25519::KeyPairFromSaltedPasswordGenerator::with_default_parameters() @@ -40,7 +48,7 @@ pub fn generate_ed25519_pubkey(salt: String, password: String) -> String { #[wasm_bindgen] pub fn generate_seed_from_salted_password(salt: String, password: String) -> String { let seed = ed25519::KeyPairFromSaltedPasswordGenerator::with_default_parameters() - .generate_seed(salt.as_bytes(), password.as_bytes()); + .generate_seed(password.as_bytes(), salt.as_bytes()); seed.to_base58() } diff --git a/src/parsers.rs b/src/parsers.rs index 3bef0d7..7194623 100644 --- a/src/parsers.rs +++ b/src/parsers.rs @@ -78,7 +78,7 @@ pub fn parse_doc_into_json(doc: &str, doc_type: DocumentType) -> String { DubpDocument::Transaction(ref tx_box) => { let tx = tx_box.deref().clone(); tx.compute_hash(); - DubpDocument::to_json_string_pretty(&DubpDocument::Transaction(Box::new(tx))) + DubpDocument::to_json_string_pretty(&DubpDocument::Transaction(tx)) .unwrap_or_else(|_| "Fail to jsonifie document.".to_owned()) } _ => DubpDocument::to_json_string_pretty(&blockchain_document) @@ -122,7 +122,7 @@ fn parse_doc(doc: &str, doc_type: DocumentType) -> Result<Document_, RawTextPars } //}, DocumentType::TxV10 => Ok(Document_::DubpDocument(DubpDocument::Transaction( - Box::new(TransactionDocument::parse_from_raw_text(doc)?), + TransactionDocument::parse_from_raw_text(doc)?, ))), DocumentType::IdentityV10 => Ok(Document_::DubpDocument(DubpDocument::Identity( IdentityDocument::parse_from_raw_text(doc)?, @@ -131,10 +131,10 @@ fn parse_doc(doc: &str, doc_type: DocumentType) -> Result<Document_, RawTextPars MembershipDocument::parse_from_raw_text(doc)?, ))), DocumentType::CertificationV10 => Ok(Document_::DubpDocument(DubpDocument::Certification( - Box::new(CertificationDocument::parse_from_raw_text(doc)?), + CertificationDocument::parse_from_raw_text(doc)?, ))), DocumentType::RevocationV10 => Ok(Document_::DubpDocument(DubpDocument::Revocation( - Box::new(RevocationDocument::parse_from_raw_text(doc)?), + RevocationDocument::parse_from_raw_text(doc)?, ))), /*DocumentType::PeerV11 => Ok(Document_::NetworkDocument(NetworkDocument::Peer(Box::new( PeerCard::V11(PeerCardV11::parse(doc)?), diff --git a/tests/web.rs b/tests/web.rs index c174a84..033b6c9 100644 --- a/tests/web.rs +++ b/tests/web.rs @@ -3,18 +3,25 @@ #![cfg(target_arch = "wasm32")] extern crate dup_tools_wasm; -#[macro_use] -extern crate pretty_assertions; extern crate wasm_bindgen_test; use dup_tools_wasm::crypto::*; use dup_tools_wasm::examples::*; use dup_tools_wasm::parsers::*; use dup_tools_wasm::*; +//use pretty_assertions::assert_eq; use wasm_bindgen_test::*; wasm_bindgen_test_configure!(run_in_browser); +#[wasm_bindgen_test] +fn test_generate_random_seed() { + let seed1 = generate_random_seed(); + let seed2 = generate_random_seed(); + + assert_ne!(seed1, seed2); +} + #[wasm_bindgen_test] fn test_generate_ed25519_keypair() { let pubkey = generate_ed25519_pubkey( @@ -29,13 +36,20 @@ fn test_generate_ed25519_keypair() { } #[wasm_bindgen_test] -fn test_generate_ed25519_keypair_from_seed() { +fn test_generate_seed_from_salted_password() { let seed_b58 = generate_seed_from_salted_password( "JhxtHB7UcsDbA9wMSyMKXUzBZUQvqVyB32KwzS9SWoLkjrUhHV".to_owned(), "JhxtHB7UcsDbA9wMSyMKXUzBZUQvqVyB32KwzS9SWoLkjrUhHV_".to_owned(), ); - let pubkey_from_seed_b58 = generate_ed25519_pubkey_from_seed(&seed_b58, 58); + assert_eq!(seed_b58, "AhCNguKBPxaG6yZAcX53c12kybubCXn3fjbR5LnCkrQu"); +} + +#[wasm_bindgen_test] +fn test_generate_ed25519_keypair_from_seed() { + let seed_b58 = "AhCNguKBPxaG6yZAcX53c12kybubCXn3fjbR5LnCkrQu"; + + let pubkey_from_seed_b58 = generate_ed25519_pubkey_from_seed(seed_b58, 58); assert_eq!( pubkey_from_seed_b58.as_str(), @@ -49,7 +63,7 @@ fn test_parse_and_verify_example_idty_v10() { assert_eq!( parse_doc_into_json(&doc, DocumentType::Any), - "{\n \"Identity\": {\n \"currency\": \"duniter_unit_test_currency\",\n \"username\": \"tic\",\n \"blockstamp\": \"0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855\",\n \"issuer\": \"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV\",\n \"signature\": \"1eubHHbuNfilHMM0G2bI30iZzebQ2cQ1PC7uPAw08FGMMmQCRerlF/3pc4sAcsnexsxBseA/3lY03KlONqJBAg==\"\n }\n}".to_owned() + "{\n \"Identity\": {\n \"V10\": {\n \"currency\": \"duniter_unit_test_currency\",\n \"username\": \"tic\",\n \"blockstamp\": \"0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855\",\n \"issuer\": \"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV\",\n \"signature\": \"1eubHHbuNfilHMM0G2bI30iZzebQ2cQ1PC7uPAw08FGMMmQCRerlF/3pc4sAcsnexsxBseA/3lY03KlONqJBAg==\"\n }\n }\n}".to_owned() ); assert_eq!( parse_doc_and_verify(&doc, DocumentType::Any), @@ -63,7 +77,7 @@ fn test_parse_and_verify_example_membership_v10() { assert_eq!( parse_doc_into_json(&doc, DocumentType::Any), - "{\n \"Membership\": {\n \"currency\": \"duniter_unit_test_currency\",\n \"issuer\": \"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV\",\n \"blockstamp\": \"0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855\",\n \"membership\": \"IN\",\n \"username\": \"tic\",\n \"identity_blockstamp\": \"0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855\",\n \"signature\": \"s2hUbokkibTAWGEwErw6hyXSWlWFQ2UWs2PWx8d/kkElAyuuWaQq4Tsonuweh1xn4AC1TVWt4yMR3WrDdkhnAw==\"\n }\n}".to_owned() + "{\n \"Membership\": {\n \"V10\": {\n \"currency\": \"duniter_unit_test_currency\",\n \"issuer\": \"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV\",\n \"blockstamp\": \"0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855\",\n \"membership\": \"IN\",\n \"username\": \"tic\",\n \"identity_blockstamp\": \"0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855\",\n \"signature\": \"s2hUbokkibTAWGEwErw6hyXSWlWFQ2UWs2PWx8d/kkElAyuuWaQq4Tsonuweh1xn4AC1TVWt4yMR3WrDdkhnAw==\"\n }\n }\n}".to_owned() ); assert_eq!( parse_doc_and_verify(&doc, DocumentType::Any), @@ -77,7 +91,7 @@ fn test_parse_and_verify_example_cert_v10() { assert_eq!( parse_doc_into_json(&doc, DocumentType::Any), - "{\n \"Certification\": {\n \"currency\": \"g1-test\",\n \"issuer\": \"5B8iMAzq1dNmFe3ZxFTBQkqhq4fsztg1gZvxHXCk1XYH\",\n \"target\": \"mMPioknj2MQCX9KyKykdw8qMRxYR2w1u3UpdiEJHgXg\",\n \"identity_username\": \"mmpio\",\n \"identity_blockstamp\": \"7543-000044410C5370DE8DBA911A358F318096B7A269CFC2BB93272E397CC513EA0A\",\n \"identity_sig\": \"SmSweUD4lEMwiZfY8ux9maBjrQQDkC85oMNsin6oSQCPdXG8sFCZ4FisUaWqKsfOlZVb/HNa+TKzD2t0Yte+DA==\",\n \"blockstamp\": \"167884-0001DFCA28002A8C96575E53B8CEF8317453A7B0BA255542CCF0EC8AB5E99038\",\n \"signature\": \"wqZxPEGxLrHGv8VdEIfUGvUcf+tDdNTMXjLzVRCQ4UhlhDRahOMjfcbP7byNYr5OfIl83S1MBxF7VJgu8YasCA==\"\n }\n}".to_owned() + "{\n \"Certification\": {\n \"V10\": {\n \"currency\": \"g1-test\",\n \"issuer\": \"5B8iMAzq1dNmFe3ZxFTBQkqhq4fsztg1gZvxHXCk1XYH\",\n \"target\": \"mMPioknj2MQCX9KyKykdw8qMRxYR2w1u3UpdiEJHgXg\",\n \"identity_username\": \"mmpio\",\n \"identity_blockstamp\": \"7543-000044410C5370DE8DBA911A358F318096B7A269CFC2BB93272E397CC513EA0A\",\n \"identity_sig\": \"SmSweUD4lEMwiZfY8ux9maBjrQQDkC85oMNsin6oSQCPdXG8sFCZ4FisUaWqKsfOlZVb/HNa+TKzD2t0Yte+DA==\",\n \"blockstamp\": \"167884-0001DFCA28002A8C96575E53B8CEF8317453A7B0BA255542CCF0EC8AB5E99038\",\n \"signature\": \"wqZxPEGxLrHGv8VdEIfUGvUcf+tDdNTMXjLzVRCQ4UhlhDRahOMjfcbP7byNYr5OfIl83S1MBxF7VJgu8YasCA==\"\n }\n }\n}".to_owned() ); assert_eq!( parse_doc_and_verify(&doc, DocumentType::Any), @@ -91,7 +105,7 @@ fn test_parse_and_verify_example_revoc_v10() { assert_eq!( parse_doc_into_json(&doc, DocumentType::Any), - "{\n \"Revocation\": {\n \"currency\": \"g1\",\n \"issuer\": \"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV\",\n \"identity_username\": \"tic\",\n \"identity_blockstamp\": \"0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855\",\n \"identity_sig\": \"1eubHHbuNfilHMM0G2bI30iZzebQ2cQ1PC7uPAw08FGMMmQCRerlF/3pc4sAcsnexsxBseA/3lY03KlONqJBAg==\",\n \"signature\": \"XXOgI++6qpY9O31ml/FcfbXCE6aixIrgkT5jL7kBle3YOMr+8wrp7Rt+z9hDVjrNfYX2gpeJsuMNfG4T/fzVDQ==\"\n }\n}".to_owned() + "{\n \"Revocation\": {\n \"V10\": {\n \"currency\": \"g1\",\n \"issuer\": \"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV\",\n \"identity_username\": \"tic\",\n \"identity_blockstamp\": \"0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855\",\n \"identity_sig\": \"1eubHHbuNfilHMM0G2bI30iZzebQ2cQ1PC7uPAw08FGMMmQCRerlF/3pc4sAcsnexsxBseA/3lY03KlONqJBAg==\",\n \"signature\": \"XXOgI++6qpY9O31ml/FcfbXCE6aixIrgkT5jL7kBle3YOMr+8wrp7Rt+z9hDVjrNfYX2gpeJsuMNfG4T/fzVDQ==\"\n }\n }\n}".to_owned() ); assert_eq!( parse_doc_and_verify(&doc, DocumentType::Any), @@ -105,7 +119,7 @@ fn test_parse_and_verify_example_tx_v10() { assert_eq!( parse_doc_into_json(&doc, DocumentType::Any), - "{\n \"Transaction\": {\n \"currency\": \"g1\",\n \"blockstamp\": \"107702-0000017CDBE974DC9A46B89EE7DC2BEE4017C43A005359E0853026C21FB6A084\",\n \"locktime\": 0,\n \"issuers\": [\n \"Do6Y6nQ2KTo5fB4MXbSwabXVmXHxYRB9UUAaTPKn1XqC\"\n ],\n \"inputs\": [\n \"1002:0:D:Do6Y6nQ2KTo5fB4MXbSwabXVmXHxYRB9UUAaTPKn1XqC:104937\",\n \"1002:0:D:Do6Y6nQ2KTo5fB4MXbSwabXVmXHxYRB9UUAaTPKn1XqC:105214\"\n ],\n \"unlocks\": [\n \"0:SIG(0)\",\n \"1:SIG(0)\"\n ],\n \"outputs\": [\n \"2004:0:SIG(DTgQ97AuJ8UgVXcxmNtULAs8Fg1kKC1Wr9SAS96Br9NG)\"\n ],\n \"comment\": \"c est pour 2 mois d adhesion ressourcerie\",\n \"signatures\": [\n \"lnpuFsIymgz7qhKF/GsZ3n3W8ZauAAfWmT4W0iJQBLKJK2GFkesLWeMj/+GBfjD6kdkjreg9M6VfkwIZH+hCCQ==\"\n ],\n \"hash\": \"FB10D45F0146D3461FD25D921D686A350717E5D61024CC0DF61F3F6B0CADF9E0\"\n }\n}".to_owned() + "{\n \"Transaction\": {\n \"V10\": {\n \"currency\": \"g1\",\n \"blockstamp\": \"107702-0000017CDBE974DC9A46B89EE7DC2BEE4017C43A005359E0853026C21FB6A084\",\n \"locktime\": 0,\n \"issuers\": [\n \"Do6Y6nQ2KTo5fB4MXbSwabXVmXHxYRB9UUAaTPKn1XqC\"\n ],\n \"inputs\": [\n \"1002:0:D:Do6Y6nQ2KTo5fB4MXbSwabXVmXHxYRB9UUAaTPKn1XqC:104937\",\n \"1002:0:D:Do6Y6nQ2KTo5fB4MXbSwabXVmXHxYRB9UUAaTPKn1XqC:105214\"\n ],\n \"unlocks\": [\n \"0:SIG(0)\",\n \"1:SIG(0)\"\n ],\n \"outputs\": [\n \"2004:0:SIG(DTgQ97AuJ8UgVXcxmNtULAs8Fg1kKC1Wr9SAS96Br9NG)\"\n ],\n \"comment\": \"c est pour 2 mois d adhesion ressourcerie\",\n \"signatures\": [\n \"lnpuFsIymgz7qhKF/GsZ3n3W8ZauAAfWmT4W0iJQBLKJK2GFkesLWeMj/+GBfjD6kdkjreg9M6VfkwIZH+hCCQ==\"\n ],\n \"hash\": null\n }\n }\n}".to_owned() ); assert_eq!( parse_doc_and_verify(&doc, DocumentType::Any), -- GitLab