26#ifndef PX_XTEA_NUMBER_OF_ROUNDS
27#define PX_XTEA_NUMBER_OF_ROUNDS 16
30#define PX_XTEA_DELTA 0x9E3779B9
37static uint32_t px_xtea_key[4];
48 for(i = 0; i < 4; i++)
50 px_xtea_key[i] = key[i];
58 uint32_t d0 = data[0];
59 uint32_t d1 = data[1];
62 for(i = PX_XTEA_NUMBER_OF_ROUNDS; i != 0; i--)
64 d0 += (((d1 << 4) ^ (d1 >> 5)) + d1) ^ (sum + px_xtea_key[sum & 3]);
66 d1 += (((d0 << 4) ^ (d0 >> 5)) + d0) ^ (sum + px_xtea_key[(sum >> 11) & 3]);
75 size_t nr_of_bytes_out = 0;
77 while(nr_of_bytes != 0)
86 memcpy(buf, data_in, nr_of_bytes);
89 memcpy(data_out, buf, 8);
98 memcpy(buf, data_in, 8);
101 memcpy(data_out, buf, 8);
104 nr_of_bytes_out += 8;
109 return nr_of_bytes_out;
116 uint32_t d0 = data[0];
117 uint32_t d1 = data[1];
118 uint32_t sum = (uint32_t)(PX_XTEA_DELTA * PX_XTEA_NUMBER_OF_ROUNDS);
120 for(i = PX_XTEA_NUMBER_OF_ROUNDS; i != 0; i--)
122 d1 -= (((d0 << 4) ^ (d0 >> 5)) + d0) ^ (sum + px_xtea_key[(sum >> 11) & 3]);
123 sum -= PX_XTEA_DELTA;
124 d0 -= (((d1 << 4) ^ (d1 >> 5)) + d1) ^ (sum + px_xtea_key[sum & 3]);
133 size_t nr_of_bytes_out = 0;
135 while(nr_of_bytes != 0)
144 memcpy(buf, data_in, nr_of_bytes);
147 memcpy(data_out, buf, 8);
149 nr_of_bytes_out += 8;
156 memcpy(buf, data_in, 8);
159 memcpy(data_out, buf, 8);
162 nr_of_bytes_out += 8;
167 return nr_of_bytes_out;
void px_xtea_decrypt(uint32_t data[2])
Decrypt 64-bit data with 128-bit key.
void px_xtea_encrypt(uint32_t data[2])
Encrypt 64-bit data with 128-bit key.
size_t px_xtea_decrypt_data_ecb(const uint8_t *data_in, uint8_t *data_out, size_t nr_of_bytes)
Decrypt a data buffer using Electronic Codebook (ECB) block cipher operation.
size_t px_xtea_encrypt_data_ecb(const uint8_t *data_in, uint8_t *data_out, size_t nr_of_bytes)
Encrypt a data buffer using Electronic Codebook (ECB) block cipher operation.
void px_xtea_init(const uint32_t key[4])
Initialise 128-bit key for encryption/decryption.