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:
enumCryptoBuf<'a>{InBuf(&'amut[u8]),BufToBuf{in_buf:&'a[u8],out_buf:&'amut[u8]},}traitCipher:Sized{/// Users are heavily discouraged from using this methodfn_encrypt(self,data:CryptoBuf);fnencrypt(self,buf:&mut[u8]){self._encrypt(CryptoBuf::InBuf(buf));}fnencrypt_b2b(self,in_buf:&mut[u8],out_buf:&mut[u8]) -> Result<(),Error>{ifcheck_lengths(in_buf, out_buf){Err(Error)? }self._encrypt(CryptoBuf::BufToBuf{ in_buf, out_buf });Ok(())}}Any thoughts?
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:
Any thoughts?