Skip to main content

polymorph_webcrypto_guest/
ecdsa.rs

1//! `ecdsa-verify` / `ecdsa-sign` key creation.
2
3use crate::{bindings, Error, SigningKey, SigningKeyOptions, VerifyingKey};
4
5pub use crate::bindings::ecdsa_verify::EcdsaVariant;
6
7/// Import a public key as an uncompressed SEC1 point.
8pub async fn import_verifying_key_raw(
9    variant: EcdsaVariant,
10    raw: impl Into<Vec<u8>>,
11) -> Result<VerifyingKey, Error> {
12    Ok(VerifyingKey::from_raw(
13        bindings::ecdsa_verify::import_verifying_key_raw(variant, raw.into()).await?,
14    ))
15}
16
17/// Generate a fresh random signing key of the declared variant, returning
18/// both halves.
19pub async fn generate_key(
20    variant: EcdsaVariant,
21    options: SigningKeyOptions,
22) -> Result<(SigningKey, VerifyingKey), Error> {
23    let (signing, verifying) = bindings::ecdsa_sign::generate_key(variant, options.lower()).await?;
24    Ok((
25        SigningKey::from_raw(signing),
26        VerifyingKey::from_raw(verifying),
27    ))
28}