40template <
size_t N, u
int64_t Seed>
54 for (
size_t i = 0;
i <
N - 1; ++
i) {
56 unsigned char k0 =
static_cast<unsigned char>(key);
57 unsigned char k1 =
static_cast<unsigned char>(key >> 8);
58 unsigned char c =
static_cast<unsigned char>(str[
i]);
63 c =
static_cast<unsigned char>(
c +
static_cast<unsigned char>(state));
65 unsigned shift = (
k1 & 0x07) | 1;
66 c =
static_cast<unsigned char>((
c <<
shift) | (
c >> (8 -
shift)));
70 _data[
i] =
static_cast<char>(
c);
71 state = advanceState(state,
c, key);
82 for (
size_t i = 0;
i <
N - 1; ++
i) {
84 unsigned char k0 =
static_cast<unsigned char>(key);
85 unsigned char k1 =
static_cast<unsigned char>(key >> 8);
86 unsigned char c =
static_cast<unsigned char>(_data[
i]);
91 unsigned shift = (
k1 & 0x07) | 1;
92 c =
static_cast<unsigned char>((
c >>
shift) | (
c << (8 -
shift)));
94 c =
static_cast<unsigned char>(
c -
static_cast<unsigned char>(state));
98 out.setCharAt(
i,
Char(
static_cast<char>(
c)));
99 state = advanceState(state,
static_cast<unsigned char>(_data[
i]), key);
112 static constexpr uint64_t initState() {
115 h *= 0x94d049bb133111ebULL;
121 static constexpr uint64_t keyAt(
size_t i) {
123 0xbf58476d1ce4e5b9ULL;
125 h *= 0x94d049bb133111ebULL;
133 state *= 0x517cc1b727220a95ULL;
134 state ^= state >> 29;
149#define PROMEKI_OBFUSCATE_SEED \
150 (::promeki::fnv1a(__FILE__) ^ (static_cast<uint64_t>(__LINE__) * 0x9e3779b97f4a7c15ULL) ^ \
151 ::promeki::fnv1a(__DATE__ __TIME__))
163#define PROMEKI_OBFUSCATE(str) \
165 static constexpr auto _obf = \
166 ::promeki::ObfuscatedString<sizeof(str), PROMEKI_OBFUSCATE_SEED>(str); \
167 return _obf.decode(); \
Unicode-aware character class wrapping a single codepoint.
Definition char.h:23
Dynamic array container wrapping std::vector.
Definition list.h:40
Compile-time string obfuscation.
Definition obfuscatedstring.h:41
String decode() const
Decodes the obfuscated data back to the original string.
Definition obfuscatedstring.h:79
consteval ObfuscatedString(const char(&str)[N])
Encodes a string literal at compile time.
Definition obfuscatedstring.h:52
Encoding-aware string class with copy-on-write semantics.
Definition string.h:35
#define PROMEKI_NAMESPACE_BEGIN
Starts a promeki namespace block.
Definition namespace.h:14
#define PROMEKI_NAMESPACE_END
Ends a promeki namespace block.
Definition namespace.h:19