polymorph_webcrypto_guest/
x25519.rs1use crate::{bindings, AgreementKeyOptions, AgreementPublicKey, AgreementSecretKey, Error};
13
14pub async fn import_public_key_raw(raw: impl Into<Vec<u8>>) -> Result<AgreementPublicKey, Error> {
17 Ok(AgreementPublicKey::from_raw(
18 bindings::x25519::import_public_key_raw(raw.into()).await?,
19 ))
20}
21
22pub async fn import_public_key_spki(spki: impl Into<Vec<u8>>) -> Result<AgreementPublicKey, Error> {
24 Ok(AgreementPublicKey::from_raw(
25 bindings::x25519::import_public_key_spki(spki.into()).await?,
26 ))
27}
28
29pub async fn import_public_key_jwk(jwk: impl Into<String>) -> Result<AgreementPublicKey, Error> {
31 Ok(AgreementPublicKey::from_raw(
32 bindings::x25519::import_public_key_jwk(jwk.into()).await?,
33 ))
34}
35
36pub async fn import_secret_key_pkcs8(
38 pkcs8: impl Into<Vec<u8>>,
39 options: AgreementKeyOptions,
40) -> Result<AgreementSecretKey, Error> {
41 Ok(AgreementSecretKey::from_raw(
42 bindings::x25519::import_secret_key_pkcs8(pkcs8.into(), options.lower()).await?,
43 ))
44}
45
46pub async fn import_secret_key_jwk(
48 jwk: impl Into<String>,
49 options: AgreementKeyOptions,
50) -> Result<AgreementSecretKey, Error> {
51 Ok(AgreementSecretKey::from_raw(
52 bindings::x25519::import_secret_key_jwk(jwk.into(), options.lower()).await?,
53 ))
54}
55
56pub async fn generate_key(
58 options: AgreementKeyOptions,
59) -> Result<(AgreementSecretKey, AgreementPublicKey), Error> {
60 let (secret, public) = bindings::x25519::generate_key(options.lower()).await?;
61 Ok((
62 AgreementSecretKey::from_raw(secret),
63 AgreementPublicKey::from_raw(public),
64 ))
65}