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