// // Created by dvc890 on 8/23/21. // #ifndef PING_ENGINE_ANDROID_BOLT_CRYPT_H #define PING_ENGINE_ANDROID_BOLT_CRYPT_H enum CRYPT_TYPE { NONE = 0, XOR = 1 }; namespace xor_ { static void crypt(char* data, int data_len, char key){ for (int i = 0; i < data_len; i++){ data[i] = data[i] ^ key; } } static void crypt2(const char* indata, int data_len, char key, char* outdata) { for (int i = 0; i < data_len; i++){ outdata[i] = indata[i] ^ key; } } } #define GENERATE_ENCRYPT_EXTEN(extend, extend_len, encrypt) \ char extend[6] = {0}; \ int extend_len = 0; \ if(encrypt) { \ extend_len = sprintf(extend, "ept=1"); \ } \ #define GENERATE_DECRYPT_KEY(extend, extend_len, ept_type, ept_key) \ char extend[21] = {0}; \ int extend_len = 0; \ int type_len = snprintf(extend, sizeof(extend), "ept_type=%d", ept_type); \ if (ept_type == XOR) { \ extend_len = snprintf(extend + type_len, sizeof(extend) - type_len, ";ept_key=%c", ept_key);\ } \ #define EXTRACTION_DECRYPT_KEY(ept_type, ept_key, extend, extend_len) \ CRYPT_TYPE ept_type = NONE; \ char ept_key; \ if(extend_len > 0) { \ if(char* type_ptr = strstr(extend, "ept_type")) { \ ept_type = (CRYPT_TYPE)(type_ptr[9]); \ } \ switch (ept_type) { \ case XOR: { \ if(char* key_ptr = strstr(extend, "ept_key")) { \ ept_key = key_ptr[8]; \ } \ break; \ } \ default: \ break; \ } \ } \ #endif //PING_ENGINE_ANDROID_BOLT_CRYPT_H