feat: update normalize_nonce
This commit is contained in:
33
src/lib.rs
33
src/lib.rs
@@ -137,24 +137,27 @@ impl Aes128GcmStreamEncryptor {
|
|||||||
|
|
||||||
fn normalize_nonce(&mut self, nonce_bytes: &[u8]) -> (u128, u128) {
|
fn normalize_nonce(&mut self, nonce_bytes: &[u8]) -> (u128, u128) {
|
||||||
let ghash_key = self.ghash_key();
|
let ghash_key = self.ghash_key();
|
||||||
let nonce = u8to128(nonce_bytes);
|
normalize_nonce(ghash_key, nonce_bytes)
|
||||||
let normalized_nonce = match nonce_bytes.len() == 12 {
|
|
||||||
true => {
|
|
||||||
nonce << 32 | 0x00000001
|
|
||||||
}
|
|
||||||
false => {
|
|
||||||
let mut iv_padding = vec![];
|
|
||||||
// s = 128[len(iv) / 128] - len(iv)
|
|
||||||
let s = 128 * (((nonce_bytes.len() * 8) + 128 - 1) / 128) - (nonce_bytes.len() * 8);
|
|
||||||
iv_padding.push(nonce << s);
|
|
||||||
iv_padding.push((nonce_bytes.len() * 8) as u128);
|
|
||||||
ghash(ghash_key, &iv_padding)
|
|
||||||
}
|
|
||||||
};
|
|
||||||
(ghash_key, normalized_nonce)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn normalize_nonce(ghash_key: u128, nonce_bytes: &[u8]) -> (u128, u128) {
|
||||||
|
let nonce = u8to128(nonce_bytes);
|
||||||
|
let normalized_nonce = match nonce_bytes.len() == 12 {
|
||||||
|
true => {
|
||||||
|
nonce << 32 | 0x00000001
|
||||||
|
}
|
||||||
|
false => {
|
||||||
|
let mut iv_padding = vec![];
|
||||||
|
// s = 128[len(iv) / 128] - len(iv)
|
||||||
|
let s = 128 * (((nonce_bytes.len() * 8) + 128 - 1) / 128) - (nonce_bytes.len() * 8);
|
||||||
|
iv_padding.push(nonce << s);
|
||||||
|
iv_padding.push((nonce_bytes.len() * 8) as u128);
|
||||||
|
ghash(ghash_key, &iv_padding)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
(ghash_key, normalized_nonce)
|
||||||
|
}
|
||||||
|
|
||||||
// R = 11100001 || 0(120)
|
// R = 11100001 || 0(120)
|
||||||
const R: u128 = 0b11100001 << 120;
|
const R: u128 = 0b11100001 << 120;
|
||||||
|
|||||||
Reference in New Issue
Block a user