use crate::{ProvingKey, VerifyingKey};
use crate::types::native::{ProvingKeyNative, VerifyingKeyNative};
use wasm_bindgen::prelude::wasm_bindgen;
#[wasm_bindgen]
#[derive(Clone, Debug)]
pub struct KeyPair {
proving_key: Option<ProvingKey>,
verifying_key: Option<VerifyingKey>,
}
#[wasm_bindgen]
impl KeyPair {
#[wasm_bindgen(constructor)]
pub fn new(proving_key: ProvingKey, verifying_key: VerifyingKey) -> KeyPair {
KeyPair { proving_key: Some(proving_key), verifying_key: Some(verifying_key) }
}
#[wasm_bindgen(js_name = "provingKey")]
pub fn proving_key(&mut self) -> Result<ProvingKey, String> {
self.proving_key.take().ok_or("Proving key has already been removed".to_string())
}
#[wasm_bindgen(js_name = "verifyingKey")]
pub fn verifying_key(&mut self) -> Result<VerifyingKey, String> {
self.verifying_key.take().ok_or("Proving key has already been removed".to_string())
}
}
impl From<(ProvingKeyNative, VerifyingKeyNative)> for KeyPair {
fn from((proving_key, verifying_key): (ProvingKeyNative, VerifyingKeyNative)) -> Self {
Self::new(proving_key.into(), verifying_key.into())
}
}