mirror of
https://github.com/lightningdevkit/rust-lightning.git
synced 2025-03-10 21:36:17 +01:00
Merge pull request #2764 from TheBlueMatt/2023-11-chacha-cleanup
Trivial ChaCha cleanups
This commit is contained in:
commit
37150b4d69
1 changed files with 19 additions and 19 deletions
|
@ -21,6 +21,7 @@ mod real_chacha {
|
||||||
struct u32x4(pub u32, pub u32, pub u32, pub u32);
|
struct u32x4(pub u32, pub u32, pub u32, pub u32);
|
||||||
impl ::core::ops::Add for u32x4 {
|
impl ::core::ops::Add for u32x4 {
|
||||||
type Output = u32x4;
|
type Output = u32x4;
|
||||||
|
#[inline]
|
||||||
fn add(self, rhs: u32x4) -> u32x4 {
|
fn add(self, rhs: u32x4) -> u32x4 {
|
||||||
u32x4(self.0.wrapping_add(rhs.0),
|
u32x4(self.0.wrapping_add(rhs.0),
|
||||||
self.1.wrapping_add(rhs.1),
|
self.1.wrapping_add(rhs.1),
|
||||||
|
@ -30,6 +31,7 @@ mod real_chacha {
|
||||||
}
|
}
|
||||||
impl ::core::ops::Sub for u32x4 {
|
impl ::core::ops::Sub for u32x4 {
|
||||||
type Output = u32x4;
|
type Output = u32x4;
|
||||||
|
#[inline]
|
||||||
fn sub(self, rhs: u32x4) -> u32x4 {
|
fn sub(self, rhs: u32x4) -> u32x4 {
|
||||||
u32x4(self.0.wrapping_sub(rhs.0),
|
u32x4(self.0.wrapping_sub(rhs.0),
|
||||||
self.1.wrapping_sub(rhs.1),
|
self.1.wrapping_sub(rhs.1),
|
||||||
|
@ -39,23 +41,27 @@ mod real_chacha {
|
||||||
}
|
}
|
||||||
impl ::core::ops::BitXor for u32x4 {
|
impl ::core::ops::BitXor for u32x4 {
|
||||||
type Output = u32x4;
|
type Output = u32x4;
|
||||||
|
#[inline]
|
||||||
fn bitxor(self, rhs: u32x4) -> u32x4 {
|
fn bitxor(self, rhs: u32x4) -> u32x4 {
|
||||||
u32x4(self.0 ^ rhs.0, self.1 ^ rhs.1, self.2 ^ rhs.2, self.3 ^ rhs.3)
|
u32x4(self.0 ^ rhs.0, self.1 ^ rhs.1, self.2 ^ rhs.2, self.3 ^ rhs.3)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
impl ::core::ops::Shr<u32x4> for u32x4 {
|
impl ::core::ops::Shr<u8> for u32x4 {
|
||||||
type Output = u32x4;
|
type Output = u32x4;
|
||||||
fn shr(self, rhs: u32x4) -> u32x4 {
|
#[inline]
|
||||||
u32x4(self.0 >> rhs.0, self.1 >> rhs.1, self.2 >> rhs.2, self.3 >> rhs.3)
|
fn shr(self, shr: u8) -> u32x4 {
|
||||||
|
u32x4(self.0 >> shr, self.1 >> shr, self.2 >> shr, self.3 >> shr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
impl ::core::ops::Shl<u32x4> for u32x4 {
|
impl ::core::ops::Shl<u8> for u32x4 {
|
||||||
type Output = u32x4;
|
type Output = u32x4;
|
||||||
fn shl(self, rhs: u32x4) -> u32x4 {
|
#[inline]
|
||||||
u32x4(self.0 << rhs.0, self.1 << rhs.1, self.2 << rhs.2, self.3 << rhs.3)
|
fn shl(self, shl: u8) -> u32x4 {
|
||||||
|
u32x4(self.0 << shl, self.1 << shl, self.2 << shl, self.3 << shl)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
impl u32x4 {
|
impl u32x4 {
|
||||||
|
#[inline]
|
||||||
fn from_bytes(bytes: &[u8]) -> Self {
|
fn from_bytes(bytes: &[u8]) -> Self {
|
||||||
assert_eq!(bytes.len(), 4*4);
|
assert_eq!(bytes.len(), 4*4);
|
||||||
Self (
|
Self (
|
||||||
|
@ -118,31 +124,25 @@ mod real_chacha {
|
||||||
macro_rules! round{
|
macro_rules! round{
|
||||||
($state: expr) => {{
|
($state: expr) => {{
|
||||||
$state.a = $state.a + $state.b;
|
$state.a = $state.a + $state.b;
|
||||||
rotate!($state.d, $state.a, S16);
|
rotate!($state.d, $state.a, 16);
|
||||||
$state.c = $state.c + $state.d;
|
$state.c = $state.c + $state.d;
|
||||||
rotate!($state.b, $state.c, S12);
|
rotate!($state.b, $state.c, 12);
|
||||||
$state.a = $state.a + $state.b;
|
$state.a = $state.a + $state.b;
|
||||||
rotate!($state.d, $state.a, S8);
|
rotate!($state.d, $state.a, 8);
|
||||||
$state.c = $state.c + $state.d;
|
$state.c = $state.c + $state.d;
|
||||||
rotate!($state.b, $state.c, S7);
|
rotate!($state.b, $state.c, 7);
|
||||||
}}
|
}}
|
||||||
}
|
}
|
||||||
|
|
||||||
macro_rules! rotate {
|
macro_rules! rotate {
|
||||||
($a: expr, $b: expr, $c:expr) => {{
|
($a: expr, $b: expr, $rot: expr) => {{
|
||||||
let v = $a ^ $b;
|
let v = $a ^ $b;
|
||||||
let r = S32 - $c;
|
let r = 32 - $rot;
|
||||||
let right = v >> r;
|
let right = v >> r;
|
||||||
$a = (v << $c) ^ right
|
$a = (v << $rot) ^ right
|
||||||
}}
|
}}
|
||||||
}
|
}
|
||||||
|
|
||||||
const S32:u32x4 = u32x4(32, 32, 32, 32);
|
|
||||||
const S16:u32x4 = u32x4(16, 16, 16, 16);
|
|
||||||
const S12:u32x4 = u32x4(12, 12, 12, 12);
|
|
||||||
const S8:u32x4 = u32x4(8, 8, 8, 8);
|
|
||||||
const S7:u32x4 = u32x4(7, 7, 7, 7);
|
|
||||||
|
|
||||||
impl ChaCha20 {
|
impl ChaCha20 {
|
||||||
pub fn new(key: &[u8], nonce: &[u8]) -> ChaCha20 {
|
pub fn new(key: &[u8], nonce: &[u8]) -> ChaCha20 {
|
||||||
assert!(key.len() == 16 || key.len() == 32);
|
assert!(key.len() == 16 || key.len() == 32);
|
||||||
|
|
Loading…
Add table
Reference in a new issue