feat: add example

This commit is contained in:
2023-08-27 16:50:22 +08:00
parent 4e9f7c031c
commit 2b5b807af0
7 changed files with 120 additions and 5 deletions

View File

@@ -62,7 +62,7 @@ impl $module {
let message_buffer_slice = self.message_buffer.as_slice();
let message_buffer_len = message_buffer_slice.len();
if message_buffer_len < 32 {
return vec![];
return Vec::with_capacity(0);
}
let blocks_count = (message_buffer_len / 16) - 1;
let mut plaintext_message = Vec::with_capacity(blocks_count * 16);
@@ -91,7 +91,7 @@ impl $module {
// last block and this block len is less than 128 bits
self.encryption_nonce = inc_32(self.encryption_nonce);
let mut ctr = self.encryption_nonce.to_be_bytes();
let block = Block::<Aes128>::from_mut_slice(&mut ctr);
let block = Block::<$aesn>::from_mut_slice(&mut ctr);
self.crypto.encrypt_block(block);
let chunk = &self.message_buffer[0..message_buffer_len - 16];

View File

@@ -62,14 +62,14 @@ impl $module {
let message_buffer_slice = self.message_buffer.as_slice();
let message_buffer_len = message_buffer_slice.len();
if message_buffer_len < 16 {
return vec![];
return Vec::with_capacity(0);
}
let blocks_count = message_buffer_len / 16;
let mut encrypted_message = Vec::with_capacity(blocks_count * 16);
for i in 0..blocks_count {
self.encryption_nonce = inc_32(self.encryption_nonce);
let mut ctr = self.encryption_nonce.to_be_bytes();
let block = Block::<Aes128>::from_mut_slice(&mut ctr);
let block = Block::<$aesn>::from_mut_slice(&mut ctr);
self.crypto.encrypt_block(block);
let chunk = &message_buffer_slice[i * 16..(i + 1) * 16];
let y = u8to128(chunk) ^ u8to128(&block.as_slice());
@@ -90,7 +90,7 @@ impl $module {
// last block and this block len is less than 128 bits
self.encryption_nonce = inc_32(self.encryption_nonce);
let mut ctr = self.encryption_nonce.to_be_bytes();
let block = Block::<Aes128>::from_mut_slice(&mut ctr);
let block = Block::<$aesn>::from_mut_slice(&mut ctr);
self.crypto.encrypt_block(block);
let chunk = self.message_buffer.as_slice();

View File

@@ -44,6 +44,7 @@ pub(crate) fn normalize_nonce(ghash_key: u128, nonce_bytes: &[u8]) -> (u128, u12
(ghash_key, normalized_nonce)
}
#[inline]
pub(crate) fn u8to128(bytes: &[u8]) -> u128 {
bytes.iter().rev().enumerate().fold(0, |acc, (i, &byte)| {
acc | (byte as u128) << (i * 8)
@@ -62,6 +63,7 @@ pub(crate) fn msb_s(s: usize, bytes: &[u8]) -> Vec<u8> {
}
// incs(X)=MSBlen(X)-s(X) || [int(LSBs(X))+1 mod 2^s]s
#[inline]
pub(crate) fn inc_32(bits: u128) -> u128 {
let msb = bits >> 32;
let mut lsb = (bits & 0xffffffff) as u32;