dao2: working signature checking

This commit is contained in:
x
2022-11-08 12:48:48 +00:00
parent a32d72754b
commit 2fe6425ecf
3 changed files with 14 additions and 9 deletions

View File

@@ -103,8 +103,11 @@ fn get_metadata(_cid: ContractId, ix: &[u8]) -> ContractResult {
let params: MoneyTransferParams = deserialize(data)?;
let mut zk_public_values: Vec<(String, Vec<pallas::Base>)> = Vec::new();
let signature_public_keys: Vec<pallas::Point> = Vec::new();
let mut signature_public_keys: Vec<pallas::Point> = Vec::new();
for input in &params.clear_inputs {
signature_public_keys.push(input.signature_public.inner());
}
for input in &params.inputs {
let value_coords = input.value_commit.to_affine().coordinates().unwrap();
let token_coords = input.token_commit.to_affine().coordinates().unwrap();
@@ -124,6 +127,8 @@ fn get_metadata(_cid: ContractId, ix: &[u8]) -> ContractResult {
sig_y,
]
));
signature_public_keys.push(input.signature_public.inner());
}
for output in &params.outputs {
let value_coords = output.value_commit.to_affine().coordinates().unwrap();

View File

@@ -136,7 +136,7 @@ fn validate(
}
tx.zk_verify(&zk_bins, &zkpublic_table)?;
//tx.verify_sigs();
tx.verify_sigs(&sigpub_table);
// Now we finished verification stage, just apply all changes
assert_eq!(tx.calls.len(), updates.len());

View File

@@ -1,4 +1,5 @@
use darkfi::{crypto::Proof, Result, VerifyFailed::ProofVerifyFailed};
use darkfi_serial::Encodable;
use darkfi_sdk::{
crypto::{
schnorr::{SchnorrPublic, Signature},
@@ -88,19 +89,18 @@ impl Transaction {
}
pub fn verify_sigs(&self, sigpub_table: &Vec<Vec<pallas::Point>>) -> Result<()> {
//let mut tx_data = Vec::new();
//self.calls.encode(&mut tx_data)?;
//self.proofs.encode(&mut tx_data)?;
// Hash it and use the hash as the signing data
let mut unsigned_tx_data = vec![0xde, 0xad, 0xbe, 0xef];
let mut tx_data = Vec::new();
self.calls.encode(&mut tx_data)?;
self.proofs.encode(&mut tx_data)?;
// TODO: Hash it and use the hash as the signing data
// let sighash = ...
for (i, (signatures, signature_public_keys)) in
self.signatures.iter().zip(sigpub_table.iter()).enumerate()
{
for (signature_pub_key, signature) in signature_public_keys.iter().zip(signatures) {
let signature_pub_key = PublicKey::from(*signature_pub_key);
let verify_result = signature_pub_key.verify(&unsigned_tx_data[..], &signature);
let verify_result = signature_pub_key.verify(&tx_data[..], &signature);
assert!(verify_result, "verify sigs[{}] failed", i);
}
debug!(target: "demo", "verify_sigs({}) passed", i);