예제 #1
0
파일: binding.c 프로젝트: ccppluagopy/Robot
static int lua_create_lua_msg(lua_State* state)
{
	int sockfd = lua_tointeger(state, 1);
	size_t len;
	const char *str = lua_tolstring(state, 2, &len);

#if ENABLE_XXTEA_ZLIB
	
	xxtea_long xxlen = 0;
	unsigned char* xxresult = xxtea_encrypt((unsigned char*)str, len, (unsigned char*)xxtea_key, strlen(xxtea_key), &xxlen);

	uLong buf_len = MAX_LUA_MSG_LEN;
	compress((Bytef*)msg_buf, &buf_len, (Bytef*)xxresult, xxlen);
	
	#if 0
	printf("---- buf_len: %d\n", buf_len);
	printf("---- sizeof(msg_buf): %d\n", sizeof(msg_buf));
	printf("---- sockfd: %p\n", sockfd);
	printf("---- sock: %p\n", g_sock_fd_map[sockfd]);
	printf("---- epoll_idx: %d\n", g_sock_fd_map[sockfd]->epoll_idx);
	printf("---- luamsg_sending: %p\n", g_workers[g_sock_fd_map[sockfd]->epoll_idx].luamsg_sending);
	#endif
	
	g_workers[g_sock_fd_map[sockfd]->epoll_idx].luamsg_sending = create_lua_msg(msg_buf, buf_len);

	free(xxresult);
#else
	g_workers[g_sock_fd_map[sockfd]->epoll_idx].luamsg_sending = create_lua_msg(str, len);
#endif

	return 1;
}
예제 #2
0
unsigned char *EncryptXXTea::decode()
{
    UserData user_d = {10,20,30};
    unsigned char *t_data = (unsigned char *)&user_d;
    const  char *key_s = "YuanfeiTestXXTea";
    xxtea_long key_len = strlen(key_s);
    xxtea_long ret_len;
    unsigned char *bufs=xxtea_encrypt(t_data, sizeof(UserData), (unsigned char*)key_s, key_len, &ret_len);
    
    char t_buf[512];
    memset(&t_buf, 0, 512);
    memcpy(&t_buf, bufs, ret_len+1);
    
    key_s = "YuanfeiTestXXTea";
    key_len = strlen(key_s);
    xxtea_long de_len;
    unsigned char *de_data=xxtea_decrypt(bufs, ret_len, (unsigned char*)key_s, key_len, &de_len);
    memset(&t_buf, 0, 512);
    memcpy(&t_buf, de_data, ret_len+1);
    
    UserData decod;
    memset(&decod, 0, sizeof(UserData));
    memcpy(&decod, de_data, sizeof(UserData));
    return nullptr;

}
예제 #3
0
String xxtea_c::encrypt(String data)
{
  // Works only if the Key in setup
  if(this->keyset && data.length() != 0)
  {
    // If the Data within the limits of the Engine
    if(data.length() < MAX_XXTEA_DATA8)
    {
      size_t len;
      // Assign the Maximum buffer we have
      len = MAX_XXTEA_DATA8;
      // Perform Encryption
      if(xxtea_encrypt((uint8_t *)data.c_str(),data.length(),
        this->data,&len) == XXTEA_STATUS_SUCCESS)
      {
        String result;
        size_t i;
        result.reserve(len*2 + 1);
        result = "";
        for(i=0;i<len;i++)
        {
          result+=tohex((this->data[i] >> 4) & 0x0F);
          result+=tohex(this->data[i] & 0x0F);
        }
        return result;
      }
    }
예제 #4
0
unsigned char* CACrypto::encryptXXTEA(unsigned char* plaintext,
                                      int plaintextLength,
                                      unsigned char* key,
                                      int keyLength,
                                      int* resultLength)
{
    xxtea_long len;
    unsigned char* result = xxtea_encrypt(plaintext, (xxtea_long)plaintextLength, key, (xxtea_long)keyLength, &len);
    *resultLength = (int)len;
    return result;
}
예제 #5
0
//1v1
void CClientSocket::SendFoOne2One(char * bufSend, DWORD dwLen)
{
	CHATSEND ct = { ONE2ONE };
	char fid[BUFNAME] = {};
	_itoa_s(dwLen, fid, 20, 10);
	memcpy_s(ct.m_content.o2o.szUid, strlen(m_szUID), m_szUID, strlen(m_szUID));
	memcpy_s(ct.m_content.o2o.szFid, strlen(fid), fid, strlen(fid));
	memcpy_s(ct.m_content.o2o.szUname, strlen(m_szName), m_szName, strlen(m_szName));

	//加密聊天信息
	string Content = bufSend;
	string key = m_szUID;
	string cipherText = xxtea_encrypt(Content, key);
	memcpy_s(ct.m_content.o2o.szContent, cipherText.length(), cipherText.c_str(), cipherText.length());
	send(m_sClient, (char *)&ct, sizeof(ct), NULL);
}
예제 #6
0
파일: test.c 프로젝트: anley/xxtea-c
int main() {
    const char *text = "Hello World! 你好,中国!";
    const char *key = "1234567890";
    size_t len;
    unsigned char *encrypt_data = xxtea_encrypt(text, strlen(text), key, &len);
    char * base64_data = base64_encode(encrypt_data, len);
    printf("%s\n", base64_data);
    char *decrypt_data = xxtea_decrypt(encrypt_data, len, key, &len);
    if (strncmp(text, decrypt_data, len) == 0) {
        printf("success!\n");
    }
    else {
        printf("fail!\n");
    }
    free(encrypt_data);
    free(decrypt_data);
    free(base64_data);
    return 0;
}
예제 #7
0
SSAPMessage KPMqtt::sendEncrypt(char* msgJson, unsigned char* key, int keyLength){
	
	//The server does not need a topic
	//char* msgJson=msg->toJson();
	//Serial.println(msgJson);
	

	xxtea_long len=strlen(msgJson);
	xxtea_long encryptedLength=0;
	
	unsigned char *result=new unsigned char[690];
	
	//Serial.println("Antes de encriptar");
	unsigned char* encryptedMsg = xxtea_encrypt((unsigned char *)msgJson, len, key, keyLength, &encryptedLength, result);
	//Serial.print("Despues de encriptar, Longitud: ");
	//Serial.println(encryptedLength);
	//Codificado en Base64, ya no es necesario con los cambios hechos en la libreria
	
	delete[] msgJson;
	
	//Serial.print("Memoria antes de codificar a base64: ");
	//Serial.println(memoryTest());
	
	char* encodedOutput=new char[690];
	int codedLength = base64_encode(encodedOutput, reinterpret_cast<char*>(encryptedMsg), encryptedLength);
	//Serial.println("Despues de codificar, Longitud: ");
	//Serial.println(codedLength);
	
	//Serial.print("Memoria despues de codificar a base64: ");
	//Serial.println(memoryTest());
	
	delete[] encryptedMsg;
	
	char* adjustedEncodedOutput=new char[codedLength+1];
	for(int i=0;i<codedLength;i++){
		adjustedEncodedOutput[i]=encodedOutput[i];
	}
	adjustedEncodedOutput[codedLength]='\0';
	
	delete[] encodedOutput;
	
	//Serial.println("Antes de publicar");
	client.publish("", (uint8_t*)adjustedEncodedOutput, codedLength, false);
	//Serial.println("Despues de publicar");
	delete[] adjustedEncodedOutput;
	
	publishResponse=NULL;
	
	
	for(int i=0; i<MAX_RESPONSE_LOOP_RETRIES && publishResponse==NULL;i++){
		delay(1000);
		client.loop();
		//Serial.println("Esperando respuesta");
	}
	
	//Serial.println("Antes de comprobar el nulo:");
	//Serial.println(publishResponse);
	
	//Hasta aqui no se pierde memoria en memory leaks
	if(publishResponse!=NULL){
		char* decodedOutput=new char[690];
		int decodedLenght = base64_decode(decodedOutput, publishResponse, strlen(publishResponse));
		delete[] publishResponse;
		
		
		Serial.print("Longitud decodificado");
		Serial.println(decodedLenght);
		Serial.println("##################################");
		unsigned char* adjustedDecodedOutput=new unsigned char[decodedLenght];
		for(int i=0;i<decodedLenght;i++){
			adjustedDecodedOutput[i]=(unsigned char)decodedOutput[i];
			Serial.print((int) adjustedDecodedOutput[i]);
		}
		Serial.println("\n##################################");
	
		delete[] decodedOutput;
		
		
		xxtea_long *ret_len;
		Serial.println("Antes de descifrar");
		//intentar eso, pasar el argumento del resultado por parametros, y que se declare antes para que no lo haga el malloc
		unsigned char *result2=new unsigned char[690];
		unsigned char * decryptedMsg = xxtea_decrypt(adjustedDecodedOutput, decodedLenght, key, keyLength, ret_len, result2);
		/*Serial.println("Parte del desencriptado");
		for(int i=0;i<100;i++){
			Serial.print((char)result2[i]);
		}
		Serial.println("Parte del desencriptado");*/
		
	/*	Serial.println("Despues de descifrar");

		Serial.println("Longitud Respuesta descifrada: ");
		Serial.println((int)ret_len);
		
		Serial.println("Respuesta descifrada: ");
		Serial.println((char*)decryptedMsg);
		
		delete[] adjustedDecodedOutput;*/
		
		/*
		SSAPMessage response = SSAPMessage::fromJSonToSSAPMessage((char*)decryptedMsg);
		delete[] decryptedMsg;
		
		if(response.getMessageType()==JOIN){
			char* responseBody=response.getBody();//Body lo borro en la funcion principal del programa
			SSAPBodyReturnMessage bodyMessage=SSAPBodyReturnMessage::fromJSonToSSAPMessage(responseBody);
			if(bodyMessage.isOk()){
				delete[] sessionKey;
				sessionKey=new char[strlen(bodyMessage.getData())+1];
				strcpy(sessionKey, bodyMessage.getData());
			}
			
			delete[] bodyMessage.getData();
			delete[] bodyMessage.getError();
		}
		return response;*/
	}

}