use super::signer::ThresholdInputSigner;
use crate::crypto::{Point, Scalar};
use crate::error::Result;
use purecrypto::hash::HashAlgorithm;
pub const VIEW_KEY_IDENTIFIER: &[u8] = b"ZANO_THRESHOLD_VIEWKEY";
const VIEW_KEY_HASH: HashAlgorithm = HashAlgorithm::Keccak256;
impl ThresholdInputSigner {
pub fn derive_view_secret(&self) -> Result<Scalar> {
let party = self
.subset()
.new_key_image(
VIEW_KEY_IDENTIFIER.to_vec(),
self.params().clone(),
VIEW_KEY_HASH,
)
.map_err(|e| crate::err!("zanompc: view key ceremony: {e}"))?;
let res = party
.wait()
.map_err(|e| crate::err!("zanompc: view key ceremony: {e}"))?;
Ok(res.secret)
}
pub fn derive_view_keys(&self) -> Result<(Scalar, Point)> {
let secret = self.derive_view_secret()?;
let public = Point::mul_base(&secret);
Ok((secret, public))
}
}