use super::*;
impl<N: Network> Plaintext<N> {
pub fn encrypt(&self, address: &Address<N>, randomizer: Scalar<N>) -> Result<Ciphertext<N>> {
let plaintext_view_key = (**address * randomizer).to_x_coordinate();
self.encrypt_symmetric(plaintext_view_key)
}
pub fn encrypt_symmetric(&self, plaintext_view_key: Field<N>) -> Result<Ciphertext<N>> {
let num_randomizers = self.num_randomizers()?;
let randomizers = N::hash_many_psd8(&[N::encryption_domain(), plaintext_view_key], num_randomizers);
self.encrypt_with_randomizers(&randomizers)
}
pub(crate) fn encrypt_with_randomizers(&self, randomizers: &[Field<N>]) -> Result<Ciphertext<N>> {
Ciphertext::from_fields(
&self
.to_fields()?
.into_iter()
.zip_eq(randomizers)
.map(|(plaintext, randomizer)| plaintext + randomizer)
.collect::<Vec<_>>(),
)
}
}