#obfuscation #random #wide #hash #string-format

no-std obfstr

Compiletime string constant obfuscation for Rust

13 releases

0.4.3 Mar 2, 2023
0.4.1 Jul 29, 2022
0.3.0 Mar 31, 2021
0.2.1 Oct 2, 2020
0.1.0 Mar 20, 2019

#18 in No standard library

Download history 6251/week @ 2023-12-11 7641/week @ 2023-12-18 2596/week @ 2023-12-25 6695/week @ 2024-01-01 6852/week @ 2024-01-08 7665/week @ 2024-01-15 8194/week @ 2024-01-22 7068/week @ 2024-01-29 6322/week @ 2024-02-05 7872/week @ 2024-02-12 7612/week @ 2024-02-19 7471/week @ 2024-02-26 5316/week @ 2024-03-04 6655/week @ 2024-03-11 6312/week @ 2024-03-18 4992/week @ 2024-03-25

23,616 downloads per month
Used in 14 crates (13 directly)

MIT license

42KB
854 lines

String Obfuscation

MIT License crates.io docs.rs Build status

Compiletime string constant obfuscation for Rust.

The string constant itself is embedded in obfuscated form and deobfuscated locally. This reference to a temporary value must be used in the same statement it was generated. See the documentation for more advanced use cases.

If you're looking for obfuscating format strings (format!, println!, etc.) I have another crate fmtools with the optional dependency obfstr enabled to automatically apply string obfuscation to your formatting strings.

Examples

The obfstr! macro returns the deobfuscated string as a temporary value:

assert_eq!(obfstr::obfstr!("Hello 🌍"), "Hello 🌍");

The wide! macro provides compiletime utf16 string constants:

let expected = &['W' as u16, 'i' as u16, 'd' as u16, 'e' as u16, 0];
assert_eq!(obfstr::wide!("Wide\0"), expected);

The random! macro provides compiletime random values:

const RND: i32 = obfstr::random!(u8) as i32;
assert!(RND >= 0 && RND <= 255);

Compiletime random values are based on file!(), line!(), column!() and a fixed seed to ensure reproducibility. This fixed seed is stored as text in the environment variable OBFSTR_SEED and can be changed as desired.

License

Licensed under MIT License, see license.txt.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, shall be licensed as above, without any additional terms or conditions.

No runtime deps