| 24 | const uint32_t NUM_ROUNDS = 32; |
| 25 | |
| 26 | static inline uint64_t EncryptXTea(uint64_t v, const uint32_t* key) |
| 27 | { |
| 28 | uint32_t v0 = (uint32_t) (v >> 32); |
| 29 | uint32_t v1 = (uint32_t) (v & 0xffffffff); |
| 30 | |
| 31 | uint32_t sum = 0, delta = 0x9e3779b9; |
| 32 | for (uint32_t i = 0; i < NUM_ROUNDS; i++) |
| 33 | { |
| 34 | v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + dmEndian::ToHost(key[sum & 3])); |
| 35 | sum += delta; |
| 36 | v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + dmEndian::ToHost(key[(sum>>11) & 3])); |
| 37 | } |
| 38 | uint64_t ret = dmEndian::ToHost((((uint64_t) v0) << 32 | v1)); |
| 39 | return ret; |
| 40 | } |
| 41 | |
| 42 | static void EncryptXTeaCTR(uint8_t* data, uint32_t datalen, const uint8_t* key, uint32_t keylen) |
| 43 | { |
no test coverage detected