@@ -101,16 +101,17 @@ impl PwxformCtx<'_> {
101
101
102
102
/// Transform the provided block using the provided S-boxes.
103
103
fn pwxform ( & mut self , b : & mut [ u32 ; 16 ] ) {
104
- let xptr = reshape_block ( b) ;
104
+ // TODO(tarcieri): use upstream `[T]::as_chunks_mut` when MSRV is 1.88
105
+ let b = slice_as_chunks_mut :: < _ , 2 > ( slice_as_chunks_mut :: < _ , PWXSIMPLE > ( b) . 0 ) . 0 ;
105
106
let mut w = self . w ;
106
107
107
108
// 1: for i = 0 to PWXrounds - 1 do
108
109
for i in 0 ..PWXROUNDS {
109
110
// 2: for j = 0 to PWXgather - 1 do
110
111
#[ allow( clippy:: needless_range_loop) ]
111
112
for j in 0 ..PWXGATHER {
112
- let mut xl: u32 = xptr [ j] [ 0 ] [ 0 ] ;
113
- let mut xh: u32 = xptr [ j] [ 0 ] [ 1 ] ;
113
+ let mut xl: u32 = b [ j] [ 0 ] [ 0 ] ;
114
+ let mut xh: u32 = b [ j] [ 0 ] [ 1 ] ;
114
115
115
116
// 3: p0 <-- (lo(B_{j,0}) & Smask) / (PWXsimple * 8)
116
117
let p0 = & self . s0 [ ( xl as usize & SMASK ) / 8 ..] ;
@@ -124,17 +125,17 @@ impl PwxformCtx<'_> {
124
125
let s0 = ( u64:: from ( p0[ k] [ 1 ] ) << 32 ) . wrapping_add ( u64:: from ( p0[ k] [ 0 ] ) ) ;
125
126
let s1 = ( u64:: from ( p1[ k] [ 1 ] ) << 32 ) . wrapping_add ( u64:: from ( p1[ k] [ 0 ] ) ) ;
126
127
127
- xl = xptr [ j] [ k] [ 0 ] ;
128
- xh = xptr [ j] [ k] [ 1 ] ;
128
+ xl = b [ j] [ k] [ 0 ] ;
129
+ xh = b [ j] [ k] [ 1 ] ;
129
130
130
131
let mut x = u64:: from ( xh) . wrapping_mul ( u64:: from ( xl) ) ;
131
132
x = x. wrapping_add ( s0) ;
132
133
x ^= s1;
133
134
134
135
let x_lo = ( x & 0xFFFF_FFFF ) as u32 ;
135
136
let x_hi = ( ( x >> 32 ) & 0xFFFF_FFFF ) as u32 ;
136
- xptr [ j] [ k] [ 0 ] = x_lo;
137
- xptr [ j] [ k] [ 1 ] = x_hi;
137
+ b [ j] [ k] [ 0 ] = x_lo;
138
+ b [ j] [ k] [ 1 ] = x_hi;
138
139
139
140
// 8: if (i != 0) and (i != PWXrounds - 1)
140
141
if i != 0 && i != ( PWXROUNDS - 1 ) {
@@ -155,15 +156,3 @@ impl PwxformCtx<'_> {
155
156
self . w = w & ( ( 1 << SWIDTH ) * PWXSIMPLE - 1 ) ;
156
157
}
157
158
}
158
-
159
- #[ allow( unsafe_code) ]
160
- pub ( crate ) fn reshape_block ( b : & mut [ u32 ; 16 ] ) -> & mut [ [ [ u32 ; PWXSIMPLE ] ; 2 ] ; 4 ] {
161
- const {
162
- assert ! (
163
- size_of:: <[ u32 ; 16 ] >( ) == size_of:: <[ [ [ u32 ; PWXSIMPLE ] ; 2 ] ; 4 ] >( ) ,
164
- "PWXSIMPLE is incorrectly sized"
165
- ) ;
166
- }
167
-
168
- unsafe { & mut * core:: ptr:: from_mut ( b) . cast ( ) }
169
- }
0 commit comments