rust_native_obf/
encoding.rs1pub const fn mba_encode_u32(val: u32, key: u32) -> u32 {
2 let a = val ^ key;
3 let b = a.wrapping_mul(0x9e3779b1);
4 let c = b.rotate_left(13);
5 let d = c ^ 0xdeadbeef;
6 d
7}
8
9pub const fn mba_decode_u32(val: u32, key: u32) -> u32 {
10 let d = val ^ 0xdeadbeef;
11 let c = d.rotate_right(13);
12 let b = c.wrapping_mul(0x61c88647);
13 let a = b ^ key;
14 a
15}
16
17pub const fn mba_encode_u64(val: u64, key: u64) -> u64 {
18 let a = val ^ key;
19 let b = a.wrapping_mul(0x517cc1b727220a95);
20 let c = b.rotate_left(31);
21 let d = c ^ 0xcafebabe12345678;
22 d
23}
24
25pub const fn mba_decode_u64(val: u64, key: u64) -> u64 {
26 let d = val ^ 0xcafebabe12345678;
27 let c = d.rotate_right(31);
28 let b = c.wrapping_mul(0xbf58476d1ce4e5b9);
29 let a = b ^ key;
30 a
31}
32
33#[macro_export]
34macro_rules! obf_const {
35 ($val:expr, u32) => {{
36 const _KEY: u32 = $crate::ct_rand!(u32, stringify!($val));
37 const _ENC: u32 = $crate::encoding::mba_encode_u32($val, _KEY);
38 $crate::encoding::mba_decode_u32(_ENC, _KEY)
39 }};
40 ($val:expr, u64) => {{
41 const _KEY: u64 = $crate::ct_rand!(u64, stringify!($val));
42 const _ENC: u64 = $crate::encoding::mba_encode_u64($val, _KEY);
43 $crate::encoding::mba_decode_u64(_ENC, _KEY)
44 }};
45}
46
47pub fn runtime_encode(val: usize) -> usize {
48 let key = 0x9e3779b97f4a7c15usize;
49 val.wrapping_mul(key).rotate_left(7) ^ 0xdeadbeef
50}
51
52pub fn runtime_decode(val: usize) -> usize {
53 let key_inv = 0xf1bbcdcbfa53dcc9usize;
54 (val ^ 0xdeadbeef).rotate_right(7).wrapping_mul(key_inv)
55}
56