-
Notifications
You must be signed in to change notification settings - Fork 230
Closed
Labels
Description
For some use-cases (e.g. in TLS implementations) you need to decrypt/encrypt data from read-only source and write result into provided buffer.
To prevent code duplication I think the best solution will be to implement algorithms over enum like this:
enum CryptoBuf<'a> {
InBuf(&'a mut [u8]),
BufToBuf { in_buf: &'a [u8], out_buf: &'a mut [u8] },
}
trait Cipher: Sized {
/// Users are heavily discouraged from using this method
fn _encrypt(self, data: CryptoBuf);
fn encrypt(self, buf: &mut [u8]) {
self._encrypt(CryptoBuf::InBuf(buf));
}
fn encrypt_b2b(self, in_buf: &mut [u8], out_buf: &mut [u8]) -> Result<(), Error> {
if check_lengths(in_buf, out_buf) { Err(Error)? }
self._encrypt(CryptoBuf::BufToBuf { in_buf, out_buf });
Ok(())
}
}Any thoughts?
Reactions are currently unavailable