11// Public crates.
2- use rc4:: KeyInit ;
3- use rc4:: Rc4 ;
4- use rc4:: StreamCipher ;
5- use salsa20:: cipher:: KeyIvInit ;
6- use salsa20:: Salsa20 ;
7- use sha2:: Digest ;
8- use sha2:: Sha256 ;
2+ use rc4:: { KeyInit , Rc4 , StreamCipher } ;
3+ use salsa20:: { cipher:: KeyIvInit , Salsa20 } ;
4+ use sha2:: { Digest , Sha256 } ;
95use siphasher:: sip:: SipHasher24 ;
106use std:: hash:: Hasher ;
117use suffix_array:: SuffixArray ;
@@ -51,12 +47,9 @@ const BRANCH_TABLE: [u32; 256] = [
5147
5248// Calculate and return sha256 hash.
5349fn sha256_calc ( input : & [ u8 ] ) -> [ u8 ; 32 ] {
54- let mut output: [ u8 ; 32 ] = [ 0 ; 32 ] ;
5550 let mut hasher = Sha256 :: new ( ) ;
5651 hasher. update ( input) ;
57-
58- output. copy_from_slice ( hasher. finalize ( ) . as_slice ( ) ) ;
59- output
52+ hasher. finalize ( ) . into ( )
6053}
6154
6255// Encrypt and return salsa20 stream.
@@ -71,21 +64,17 @@ fn salsa20_calc(key: &[u8; 32]) -> [u8; 256] {
7164fn fnv1a_calc ( input : & [ u8 ] ) -> u64 {
7265 let mut hasher = fnv:: FnvHasher :: default ( ) ;
7366 hasher. write ( input) ;
74- let output = hasher. finish ( ) ;
75- output
67+ hasher. finish ( )
7668}
7769
7870// Calculate and return xxh64 hash.
7971fn xxh64_calc ( input : & [ u8 ] ) -> u64 {
80- let output = xxhash_rust:: xxh64:: xxh64 ( input, 0 ) ;
81- output
72+ xxhash_rust:: xxh64:: xxh64 ( input, 0 )
8273}
8374
8475// Calculate and return sip24 hash.
8576fn sip24_calc ( input : & [ u8 ] , k0 : u64 , k1 : u64 ) -> u64 {
86- let hasher = SipHasher24 :: new_with_keys ( k0, k1) ;
87- let output = hasher. hash ( input) ;
88- output
77+ SipHasher24 :: new_with_keys ( k0, k1) . hash ( input)
8978}
9079
9180// The AstroBWTv3 calculation.
@@ -95,9 +84,7 @@ pub fn astrobwtv3_hash(input: &[u8]) -> [u8; 32] {
9584
9685 // Step 3: rc4.
9786 let mut rc4 = Rc4 :: new ( & data. into ( ) ) ;
98- let mut stream = data. to_vec ( ) ;
99- rc4. apply_keystream ( & mut stream) ;
100- data. copy_from_slice ( & stream) ;
87+ rc4. apply_keystream ( & mut data) ;
10188
10289 // Step 4: fnv1a.
10390 let mut lhash = fnv1a_calc ( & data) ;
@@ -146,13 +133,13 @@ pub fn astrobwtv3_hash(input: &[u8]) -> [u8; 32] {
146133 tmp = tmp. wrapping_mul ( tmp) ; // *
147134 }
148135 0x03 => {
149- tmp = tmp ^ data[ pos2 as usize ] ; // XOR
136+ tmp ^= data[ pos2 as usize ] ; // XOR
150137 }
151138 0x04 => {
152139 tmp = !tmp; // binary NOT operator
153140 }
154141 0x05 => {
155- tmp = tmp & data[ pos2 as usize ] ; // AND
142+ tmp &= data[ pos2 as usize ] ; // AND
156143 }
157144 0x06 => {
158145 tmp = tmp. wrapping_shl ( ( tmp & 3 ) as u32 ) ; // shift left
@@ -190,13 +177,11 @@ pub fn astrobwtv3_hash(input: &[u8]) -> [u8; 32] {
190177 }
191178 }
192179 data[ i as usize ] = tmp;
193- if branch == 0 {
194- if ( pos2 - pos1) % 2 == 1 {
195- // Reverse.
196- data[ pos1 as usize ] = data[ pos1 as usize ] . reverse_bits ( ) ;
197- data[ pos2 as usize ] = data[ pos2 as usize ] . reverse_bits ( ) ;
198- data. swap ( pos1 as usize , pos2 as usize ) ;
199- }
180+ if branch == 0 && ( pos2 - pos1) % 2 == 1 {
181+ // Reverse.
182+ data[ pos1 as usize ] = data[ pos1 as usize ] . reverse_bits ( ) ;
183+ data[ pos2 as usize ] = data[ pos2 as usize ] . reverse_bits ( ) ;
184+ data. swap ( pos1 as usize , pos2 as usize ) ;
200185 }
201186 if branch == 253 {
202187 // More deviations.
@@ -230,12 +215,10 @@ pub fn astrobwtv3_hash(input: &[u8]) -> [u8; 32] {
230215 lhash = sip24_calc ( & data[ ..pos2 as usize ] , tries, prev_lhash) ;
231216 }
232217
233- // 25% probablility .
218+ // 25% probability .
234219 if dp_minus <= 0x40 {
235220 // Do the rc4.
236- stream = data. to_vec ( ) ;
237- rc4. apply_keystream ( & mut stream) ;
238- data. copy_from_slice ( & stream) ;
221+ rc4. apply_keystream ( & mut data) ;
239222 }
240223
241224 data[ 255 ] ^= data[ pos1 as usize ] ^ data[ pos2 as usize ] ;
@@ -250,8 +233,8 @@ pub fn astrobwtv3_hash(input: &[u8]) -> [u8; 32] {
250233 }
251234
252235 // We may discard up to ~ 1KiB data from the stream to ensure that wide number of variants exists.
253- let data_len =
254- ( tries - 4 ) as u32 * 256 + ( ( ( data[ 253 ] as u64 ) << 8 | ( data[ 254 ] as u64 ) ) as u32 & 0x3ff ) ;
236+ let data_len = ( tries - 4 ) as u32 * 256
237+ + ( ( ( ( data[ 253 ] as u64 ) << 8 ) | ( data[ 254 ] as u64 ) ) as u32 & 0x3ff ) ;
255238
256239 // Step 6: build our suffix array.
257240 let scratch_sa = SuffixArray :: new ( & scratch_data[ ..data_len as usize ] ) ;
0 commit comments