bsv_wasm/ecdsa/
verify.rs

1use crate::BSVErrors;
2use crate::Signature;
3use crate::{get_hash_digest, PublicKey, SigningHash, ECDSA};
4use ecdsa::signature::DigestVerifier;
5use k256::{ecdsa::VerifyingKey, EncodedPoint};
6#[cfg(target_arch = "wasm32")]
7use wasm_bindgen::prelude::*;
8#[cfg(target_arch = "wasm32")]
9use wasm_bindgen::{throw_str, JsValue};
10
11impl ECDSA {
12    pub(crate) fn verify_digest_impl(message: &[u8], pub_key: &PublicKey, signature: &Signature, hash_algo: SigningHash) -> Result<bool, BSVErrors> {
13        let pub_key_bytes = pub_key.to_bytes_impl()?;
14        let point = EncodedPoint::from_bytes(pub_key_bytes).map_err(|e| BSVErrors::CustomECDSAError(e.to_string()))?;
15        let key = VerifyingKey::from_encoded_point(&point)?;
16        let digest = get_hash_digest(hash_algo, message);
17        key.verify_digest(digest, &signature.sig)?;
18        Ok(true)
19    }
20}
21
22#[cfg(target_arch = "wasm32")]
23#[cfg_attr(all(target_arch = "wasm32", feature = "wasm-bindgen-ecdsa"), wasm_bindgen)]
24impl ECDSA {
25    #[cfg_attr(all(target_arch = "wasm32", feature = "wasm-bindgen-ecdsa"), wasm_bindgen(js_name = verify))]
26    pub fn verify_digest(message: &[u8], pub_key: &PublicKey, signature: &Signature, hash_algo: SigningHash) -> Result<bool, JsValue> {
27        match ECDSA::verify_digest_impl(message, pub_key, signature, hash_algo) {
28            Ok(v) => Ok(v),
29            Err(e) => Err(JsValue::from_str(&e.to_string())),
30        }
31    }
32}
33
34#[cfg(not(target_arch = "wasm32"))]
35impl ECDSA {
36    pub fn verify_digest(message: &[u8], pub_key: &PublicKey, signature: &Signature, hash_algo: SigningHash) -> Result<bool, BSVErrors> {
37        ECDSA::verify_digest_impl(message, pub_key, signature, hash_algo)
38    }
39}