diff --git a/chain-impl-mockchain/src/ledger/ledger.rs b/chain-impl-mockchain/src/ledger/ledger.rs index a5bbe813a..1a8fdd4da 100644 --- a/chain-impl-mockchain/src/ledger/ledger.rs +++ b/chain-impl-mockchain/src/ledger/ledger.rs @@ -1878,9 +1878,9 @@ fn match_identifier_witness<'a>( fn input_single_account_verify<'a>( mut ledger: account::Ledger, _block0_hash: &HeaderId, - _sign_data_hash: &TransactionSignDataHash, + sign_data_hash: &TransactionSignDataHash, account: &account::Identifier, - _witness: &'a account::Witness, + witness: &'a account::Witness, spending_counter: account::SpendingCounter, value: Value, ) -> Result { @@ -1888,6 +1888,18 @@ fn input_single_account_verify<'a>( let new_ledger = ledger.remove_value(account, spending_counter, value)?; ledger = new_ledger; + let verified = witness.verify( + account.as_ref(), + &WitnessAccountData(sign_data_hash.as_ref().to_vec()), + ); + + if verified == chain_crypto::Verification::Failed { + return Err(Error::AccountInvalidSignature { + account: account.clone(), + witness: Witness::Account(spending_counter, witness.clone()), + }); + }; + // TODO verify sig(pub_key,data) Ok(ledger) } diff --git a/chain-impl-mockchain/src/transaction/witness.rs b/chain-impl-mockchain/src/transaction/witness.rs index 31faf5fc1..278a66881 100644 --- a/chain-impl-mockchain/src/transaction/witness.rs +++ b/chain-impl-mockchain/src/transaction/witness.rs @@ -99,7 +99,7 @@ impl AsRef<[u8]> for WitnessUtxoData { } } -pub struct WitnessAccountData(Vec); +pub struct WitnessAccountData(pub Vec); impl WitnessAccountData { pub fn new(