xukc
[fix]support tcp
a8ba146
raw
history blame
3.74 kB
//
// 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