mirror of
https://github.com/darkrenaissance/darkfi.git
synced 2026-01-10 07:08:05 -05:00
dao2: working signature checking
This commit is contained in:
@@ -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 ¶ms.clear_inputs {
|
||||
signature_public_keys.push(input.signature_public.inner());
|
||||
}
|
||||
for input in ¶ms.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 ¶ms.outputs {
|
||||
let value_coords = output.value_commit.to_affine().coordinates().unwrap();
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user