From 6ef1b31f9e8b6ee0c217b65d337da734fbf2e826 Mon Sep 17 00:00:00 2001 From: Hanh Date: Fri, 28 Apr 2023 15:37:30 +1000 Subject: [PATCH] Ledger Tests --- src/db.rs | 2 ++ src/ledger/transport.rs | 24 +++++++++++----- src/main/ledger.rs | 62 +++++++++++++++++++++++++++++++++++++---- 3 files changed, 76 insertions(+), 12 deletions(-) diff --git a/src/db.rs b/src/db.rs index bd595f3..d8c1f25 100644 --- a/src/db.rs +++ b/src/db.rs @@ -1095,6 +1095,8 @@ impl DbAdapter { )?; self.connection .execute("DELETE FROM messages WHERE account = ?1", params![account])?; + self.connection + .execute("DELETE FROM hw_wallets WHERE account = ?1", params![account])?; Ok(()) } diff --git a/src/ledger/transport.rs b/src/ledger/transport.rs index 730ec85..60d003f 100644 --- a/src/ledger/transport.rs +++ b/src/ledger/transport.rs @@ -23,7 +23,7 @@ fn handle_error_code(code: u16) -> Result<()> { } } -async fn apdu_hid(data: &[u8]) -> Result> { +async fn apdu(data: &[u8]) -> Result> { let api = HidApi::new()?; let transport = TransportNativeHID::new(&api)?; let command = APDUCommand { @@ -43,8 +43,9 @@ async fn apdu_hid(data: &[u8]) -> Result> { const TEST_SERVER_IP: Option<&'static str> = option_env!("LEDGER_IP"); -async fn apdu_http(data: &[u8]) -> Vec { +async fn apdu_http(data: &[u8]) -> Result> { let client = Client::new(); + let response = client .post(&format!("http://{}:5000/apdu", TEST_SERVER_IP.unwrap())) .body(format!("{{\"data\": \"{}\"}}", hex::encode(data))) .send() @@ -155,7 +156,7 @@ pub async fn ledger_set_orchard_merkle_proof( pub async fn ledger_add_t_input(amount: u64) -> Result<()> { let mut bb: Vec = vec![]; - bb.write_all(&hex!("E015010008"))?; + bb.write_all(&hex!("E015000008"))?; bb.write_u64::(amount)?; apdu(&bb).await?; Ok(()) @@ -301,11 +302,20 @@ pub async fn ledger_pedersen_hash(data: &[u8]) -> Result> { Ok(cmu) } -pub async fn ledger_test_math(data: &[u8]) -> Result> { +pub async fn ledger_get_debug(i: u8) -> Result> { let mut bb: Vec = vec![]; - bb.write_all(&hex!("E0FF0000"))?; - bb.write_u8(data.len() as u8)?; - bb.write_all(data)?; + bb.write_all(&hex!("E0FE"))?; + bb.write_u8(i)?; + bb.write_all(&hex!("0000"))?; + let res = apdu(&bb).await?; + Ok(res) +} + +pub async fn ledger_test_math(i: u8) -> Result> { + let mut bb: Vec = vec![]; + bb.write_all(&hex!("E0FF"))?; + bb.write_u8(i)?; + bb.write_all(&hex!("0000"))?; let res = apdu(&bb).await?; Ok(res) } diff --git a/src/main/ledger.rs b/src/main/ledger.rs index bae2c51..a394e64 100644 --- a/src/main/ledger.rs +++ b/src/main/ledger.rs @@ -4,17 +4,17 @@ use group::{Group, GroupEncoding}; use std::{ fs::File, io::{Read, Write}, - path::Path, + path::Path, env, }; use halo2_proofs::pasta::pallas::{self}; use orchard::{ circuit::{Circuit, ProvingKey}, - keys::{Scope, SpendValidatingKey}, + keys::{Scope, SpendValidatingKey, SpendingKey, SpendAuthorizingKey, FullViewingKey}, note::{ExtractedNoteCommitment, Nullifier, RandomSeed}, primitives::redpallas::{Signature, SpendAuth}, tree::MerklePath, - value::ValueCommitTrapdoor, + value::ValueCommitTrapdoor, Note, }; use rand::{RngCore, SeedableRng}; use rand_chacha::ChaCha20Rng; @@ -25,7 +25,7 @@ use warp_api_ffi::{ connect_lightwalletd, ledger::{ build_broadcast_tx, ledger_add_o_action, ledger_confirm_fee, ledger_init, ledger_init_tx, - ledger_set_net_orchard, ledger_set_orchard_merkle_proof, ledger_set_stage, + ledger_set_net_orchard, ledger_set_orchard_merkle_proof, ledger_set_stage, ledger_test_math, ledger_get_o_fvk, ledger_get_debug, ledger_cmu, }, TransactionPlan, }; @@ -45,11 +45,63 @@ use hex_literal::hex; #[tokio::main] async fn main() { + // let args = env::args(); + // let device: u32 = args.next().unwrap().parse().unwrap(); // orchard_bundle::build_orchard().await.unwrap(); + // ledger_init().await.unwrap(); + + // let sk = ledger_test_math(0).await.unwrap(); + // println!("SK {}", hex::encode(&sk)); + + let mut rng = ChaCha20Rng::from_seed([4u8; 32]); + let (_, _, note) = Note::dummy(&mut rng, None); + let cmx: ExtractedNoteCommitment = note.commitment().into(); + println!("cmx {:?}", cmx); + + let address = note.recipient().to_raw_address_bytes(); + let value = note.value().inner(); + let rseed = note.rseed().as_bytes(); + let rho = note.rho().to_bytes(); + + println!("{}", hex::encode(&address)); + println!("{} {}", value, hex::encode(value.to_le_bytes())); + println!("{}", hex::encode(rseed)); + println!("{}", hex::encode(&rho)); + + let mut buffer = vec![]; + buffer.write(&address).unwrap(); + buffer.write_u64::(value).unwrap(); + buffer.write(rseed).unwrap(); + buffer.write(&rho).unwrap(); + + let cmu = ledger_cmu(&buffer).await.unwrap(); + println!("cmx {:?}", hex::encode(&cmu)); + + // for i in 0..3 { + // let debug_data = ledger_get_debug(i).await.unwrap(); + // println!("debug {}", hex::encode(&debug_data)); + // } + + // for i in 0..10 { + // let sk = ledger_test_math(i).await.unwrap(); + // println!("SK {}", hex::encode(&sk)); + // } + + // let o_fvk = ledger_get_o_fvk().await.unwrap(); + // println!("FVK {}", hex::encode(&o_fvk)); + + // let sk = hex::decode("19778746bfdf33616075940a21c4011263e974ff7b7341a9a8e5713908d39dab").unwrap(); + // let sk = SpendingKey::from_bytes(sk.try_into().unwrap()).unwrap(); + // let ask = SpendAuthorizingKey::from(&sk); + // println!("ask {:?}", ask); + // let fvk = FullViewingKey::from(&sk); + // println!("fvk {}", hex::encode(fvk.to_bytes())); + + } #[tokio::main] -async fn main2() -> Result<()> { +async fn main1() -> Result<()> { let params_dir = Path::new(&std::env::var("HOME").unwrap()).join(".zcash-params"); let prover = LocalTxProver::new( ¶ms_dir.join("sapling-spend.params"),