use alloc::vec::Vec;
use dusk_plonk::prelude::{Composer, Witness, WitnessPoint};
use crate::hades::GadgetPermutation;
use crate::{Domain, Error};
pub fn encrypt_gadget(
composer: &mut Composer,
message: impl AsRef<[Witness]>,
shared_secret: &WitnessPoint,
nonce: &Witness,
) -> Result<Vec<Witness>, Error> {
Ok(dusk_safe::encrypt(
GadgetPermutation::new(composer),
Domain::Encryption,
message,
&[*shared_secret.x(), *shared_secret.y()],
nonce,
)?)
}
pub fn decrypt_gadget(
composer: &mut Composer,
cipher: impl AsRef<[Witness]>,
shared_secret: &WitnessPoint,
nonce: &Witness,
) -> Result<Vec<Witness>, Error> {
Ok(dusk_safe::decrypt(
GadgetPermutation::new(composer),
Domain::Encryption,
cipher,
&[*shared_secret.x(), *shared_secret.y()],
nonce,
)?)
}