@@ -29,7 +29,7 @@ impl Default for Cb7 {
2929impl fmt:: Debug for Cb7 {
3030 fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
3131 f. debug_struct ( "Cb7" )
32- . field ( "seeds[0][0..16]" , & self . seeds [ 0 ] [ 0 ..16 ] . to_vec ( ) )
32+ . field ( "seeds[0][0..16]" , & & self . seeds [ 0 ] [ 0 ..16 ] )
3333 . field ( "key" , & self . key )
3434 . field ( "beefcodf" , & self . beefcodf )
3535 . field ( "initialized" , & self . initialized )
@@ -310,17 +310,43 @@ const fn mod_inverse(x: u32) -> u32 {
310310
311311// RSA encryption/decryption
312312fn rsa_crypt ( addr : & mut u32 , val : & mut u32 , rsakey : u64 , modulus : u64 ) {
313- use num_bigint:: BigUint ;
314-
315- let code = BigUint :: from_slice ( & [ * val, * addr] ) ;
316- let m = BigUint :: from ( modulus) ;
313+ let code = u64:: from ( * val) | ( u64:: from ( * addr) << 32 ) ;
317314
318315 // Exponentiation is only invertible if code < modulus
319- if code < m {
320- let digits = code. modpow ( & BigUint :: from ( rsakey) , & m) . to_u32_digits ( ) ;
321- * addr = digits[ 1 ] ;
322- * val = digits[ 0 ] ;
316+ if code >= modulus {
317+ return ;
318+ }
319+
320+ let result = mod_pow ( code, rsakey, modulus) ;
321+ * addr = ( result >> 32 ) as u32 ;
322+ * val = result as u32 ;
323+ }
324+
325+ // Fast modular exponentiation for 64-bit values
326+ #[ inline]
327+ const fn mod_pow ( mut base : u64 , mut exp : u64 , modulus : u64 ) -> u64 {
328+ if modulus == 1 {
329+ return 0 ;
330+ }
331+
332+ let mut result = 1u64 ;
333+ base %= modulus;
334+
335+ while exp > 0 {
336+ if exp & 1 == 1 {
337+ result = mul_mod ( result, base, modulus) ;
338+ }
339+ exp >>= 1 ;
340+ base = mul_mod ( base, base, modulus) ;
323341 }
342+
343+ result
344+ }
345+
346+ // Computes (a * b) % modulus using 128-bit intermediates to avoid overflow
347+ #[ inline]
348+ const fn mul_mod ( a : u64 , b : u64 , modulus : u64 ) -> u64 {
349+ ( ( a as u128 * b as u128 ) % modulus as u128 ) as u64
324350}
325351
326352const BEEFCODE : u32 = 0xbeef_c0de ;
0 commit comments