Skip to content

Consider supporting buffer-to-buffer cipher operations #31

@newpavlov

Description

@newpavlov

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?

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions