Ledger Tests

This commit is contained in:
Hanh 2023-04-28 15:37:30 +10:00
parent 3d94b41c25
commit 6ef1b31f9e
3 changed files with 76 additions and 12 deletions

View File

@ -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(())
}

View File

@ -23,7 +23,7 @@ fn handle_error_code(code: u16) -> Result<()> {
}
}
async fn apdu_hid(data: &[u8]) -> Result<Vec<u8>> {
async fn apdu(data: &[u8]) -> Result<Vec<u8>> {
let api = HidApi::new()?;
let transport = TransportNativeHID::new(&api)?;
let command = APDUCommand {
@ -43,8 +43,9 @@ async fn apdu_hid(data: &[u8]) -> Result<Vec<u8>> {
const TEST_SERVER_IP: Option<&'static str> = option_env!("LEDGER_IP");
async fn apdu_http(data: &[u8]) -> Vec<u8> {
async fn apdu_http(data: &[u8]) -> Result<Vec<u8>> {
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<u8> = vec![];
bb.write_all(&hex!("E015010008"))?;
bb.write_all(&hex!("E015000008"))?;
bb.write_u64::<LE>(amount)?;
apdu(&bb).await?;
Ok(())
@ -301,11 +302,20 @@ pub async fn ledger_pedersen_hash(data: &[u8]) -> Result<Vec<u8>> {
Ok(cmu)
}
pub async fn ledger_test_math(data: &[u8]) -> Result<Vec<u8>> {
pub async fn ledger_get_debug(i: u8) -> Result<Vec<u8>> {
let mut bb: Vec<u8> = 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<Vec<u8>> {
let mut bb: Vec<u8> = vec![];
bb.write_all(&hex!("E0FF"))?;
bb.write_u8(i)?;
bb.write_all(&hex!("0000"))?;
let res = apdu(&bb).await?;
Ok(res)
}

View File

@ -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::<LE>(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(
&params_dir.join("sapling-spend.params"),