keyhive_wasm 0.3.0

WebAssembly wrappers for keyhive_core
Documentation
use super::{
    change_id::JsChangeId, delegation::JsDelegation, event_handler::JsEventHandler,
    signer::JsSigner,
};
use derive_more::{From, Into};
use dupe::Dupe;
use keyhive_core::{crypto::signed_ext::SignedSubjectId, principal::group::delegation::Delegation};
use keyhive_crypto::{signed::Signed, verifiable::Verifiable};
use std::sync::Arc;
use wasm_bindgen::prelude::*;

#[derive(Debug, Clone, Dupe, From, Into)]
#[wasm_bindgen(js_name = SignedDelegation)]
pub struct JsSignedDelegation(
    pub(crate) Arc<Signed<Delegation<JsSigner, JsChangeId, JsEventHandler>>>,
);

#[wasm_bindgen(js_class = SignedDelegation)]
impl JsSignedDelegation {
    pub fn verify(&self) -> bool {
        self.0.try_verify().is_ok()
    }

    #[wasm_bindgen(getter)]
    pub fn delegation(&self) -> JsDelegation {
        self.0.payload().clone().into()
    }

    #[wasm_bindgen(getter, js_name = subjectId)]
    pub fn subject_id(&self) -> super::identifier::JsIdentifier {
        (*self.0).subject_id().into()
    }

    #[wasm_bindgen(getter, js_name = verifyingKey)]
    pub fn verifying_key(&self) -> Vec<u8> {
        self.0.verifying_key().to_bytes().to_vec()
    }

    #[wasm_bindgen(getter)]
    pub fn signature(&self) -> Vec<u8> {
        self.0.signature().to_vec()
    }
}