[descriptor] Perform additional checks before using a descriptor

Fixes #287
This commit is contained in:
Alekos Filini
2021-02-15 11:33:47 -05:00
committed by Steve Myers
parent 6092c6e789
commit 7843732e17
3 changed files with 51 additions and 4 deletions

View File

@@ -66,8 +66,9 @@ use crate::blockchain::{Blockchain, Progress};
use crate::database::{BatchDatabase, BatchOperations, DatabaseUtils};
use crate::descriptor::derived::AsDerived;
use crate::descriptor::{
get_checksum, DerivedDescriptor, DerivedDescriptorMeta, DescriptorMeta, DescriptorScripts,
ExtendedDescriptor, ExtractPolicy, IntoWalletDescriptor, Policy, XKeyUtils,
get_checksum, into_wallet_descriptor_checked, DerivedDescriptor, DerivedDescriptorMeta,
DescriptorMeta, DescriptorScripts, ExtendedDescriptor, ExtractPolicy, IntoWalletDescriptor,
Policy, XKeyUtils,
};
use crate::error::Error;
use crate::psbt::PSBTUtils;
@@ -134,7 +135,7 @@ where
) -> Result<Self, Error> {
let secp = Secp256k1::new();
let (descriptor, keymap) = descriptor.into_wallet_descriptor(&secp, network)?;
let (descriptor, keymap) = into_wallet_descriptor_checked(descriptor, &secp, network)?;
database.check_descriptor_checksum(
KeychainKind::External,
get_checksum(&descriptor.to_string())?.as_bytes(),
@@ -143,7 +144,7 @@ where
let (change_descriptor, change_signers) = match change_descriptor {
Some(desc) => {
let (change_descriptor, change_keymap) =
desc.into_wallet_descriptor(&secp, network)?;
into_wallet_descriptor_checked(desc, &secp, network)?;
database.check_descriptor_checksum(
KeychainKind::Internal,
get_checksum(&change_descriptor.to_string())?.as_bytes(),