Documentation
use ed25519_dalek::SigningKey;
use wasm_bindgen::prelude::{JsError, wasm_bindgen};
use sha3::{Digest, Sha3_512};

#[wasm_bindgen]
pub struct Ed25519Ph {
  hasher: Sha3_512,
  sk: SigningKey,
}

#[wasm_bindgen]
impl Ed25519Ph {
  #[wasm_bindgen(constructor)]
  pub fn new(sk: &[u8]) -> Result<Self, JsError> {
    dbg!(sk.len());
    Ok(Self {
      hasher: Sha3_512::new(),
      sk: SigningKey::from_bytes(&sk.try_into()?),
    })
  }

  #[wasm_bindgen]
  pub fn update(&mut self, data: &[u8]) {
    self.hasher.update(data);
  }

  #[wasm_bindgen]
  pub fn finish(self) -> Result<Vec<u8>, JsError> {
    Ok(
      self
        .sk
        .sign_prehashed(self.hasher, None)?
        .to_bytes()
        .to_vec(),
    )
  }
}