pub struct Aes { /* private fields */ }Expand description
AES cipher implementation using RustCrypto (production-grade)
This implementation uses the audited aes and cbc crates from the
RustCrypto project for secure AES-128 and AES-256 encryption.
Implementations§
Source§impl Aes
impl Aes
Sourcepub fn encrypt_cbc(&self, data: &[u8], iv: &[u8]) -> Result<Vec<u8>, AesError>
pub fn encrypt_cbc(&self, data: &[u8], iv: &[u8]) -> Result<Vec<u8>, AesError>
Encrypt data using AES-CBC mode with PKCS#7 padding
Uses RustCrypto’s cbc crate for production-grade encryption.
Sourcepub fn decrypt_cbc(&self, data: &[u8], iv: &[u8]) -> Result<Vec<u8>, AesError>
pub fn decrypt_cbc(&self, data: &[u8], iv: &[u8]) -> Result<Vec<u8>, AesError>
Decrypt data using AES-CBC mode with PKCS#7 padding removal
Uses RustCrypto’s cbc crate for production-grade decryption.
Sourcepub fn encrypt_ecb(&self, data: &[u8]) -> Result<Vec<u8>, AesError>
pub fn encrypt_ecb(&self, data: &[u8]) -> Result<Vec<u8>, AesError>
Encrypt data using AES-ECB mode (for Perms entry in R6)
Note: ECB mode is generally insecure but required by PDF spec for Perms entry.
Sourcepub fn decrypt_ecb(&self, data: &[u8]) -> Result<Vec<u8>, AesError>
pub fn decrypt_ecb(&self, data: &[u8]) -> Result<Vec<u8>, AesError>
Decrypt data using AES-ECB mode (for Perms entry verification in R6)
Sourcepub fn encrypt_cbc_raw(
&self,
data: &[u8],
iv: &[u8],
) -> Result<Vec<u8>, AesError>
pub fn encrypt_cbc_raw( &self, data: &[u8], iv: &[u8], ) -> Result<Vec<u8>, AesError>
Encrypt data using AES-CBC mode WITHOUT padding
Used for R5/R6 UE entry encryption where data is already block-aligned (32 bytes). Unlike encrypt_cbc, this does not add PKCS#7 padding.
§Requirements
- Data length must be a multiple of 16 bytes
- IV must be exactly 16 bytes
§Security Note
The XOR operations in CBC chaining use simple loops. While Rust/LLVM typically produces constant-time code for fixed-size array XOR operations, this is not formally guaranteed. PDF encryption is designed for offline brute-force attacks where timing side-channels are not in the threat model.
Sourcepub fn decrypt_cbc_raw(
&self,
data: &[u8],
iv: &[u8],
) -> Result<Vec<u8>, AesError>
pub fn decrypt_cbc_raw( &self, data: &[u8], iv: &[u8], ) -> Result<Vec<u8>, AesError>
Decrypt data using AES-CBC mode WITHOUT padding
Used for R5/R6 UE entry decryption where data is already block-aligned (32 bytes). Unlike decrypt_cbc, this does not expect or remove PKCS#7 padding.
§Requirements
- Data length must be a multiple of 16 bytes
- IV must be exactly 16 bytes
§Security Note
The XOR operations in CBC chaining use simple loops. While Rust/LLVM typically produces constant-time code for fixed-size array XOR operations, this is not formally guaranteed. PDF encryption is designed for offline brute-force attacks where timing side-channels are not in the threat model.
Auto Trait Implementations§
impl Freeze for Aes
impl RefUnwindSafe for Aes
impl Send for Aes
impl Sync for Aes
impl Unpin for Aes
impl UnwindSafe for Aes
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more