/** *--------------------------------------------------------------------\n * HSLU T&A Hochschule Luzern Technik+Architektur \n *--------------------------------------------------------------------\n * * \brief model solution for ASYD assignment crypto 01 * \file * \author Stefano Nicora, stefano.nicora@hslu.ch * \date 04.10.22 * *-------------------------------------------------------------------- */ #include #include "XTEA.h" void encipher(unsigned int num_cycles, uint32_t v[2], uint32_t const k[4]) { unsigned int i; const uint32_t delta = 0x9E3779B9; uint32_t v0 = v[0], v1 = v[1], sum = 0; for (i = 0; i < num_cycles; i++) { v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]); sum += delta; v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum >> 11) & 3]); } v[0] = v0; v[1] = v1; } void decipher(unsigned int num_cycles, uint32_t v[2], uint32_t const k[4]) { unsigned int i; const uint32_t delta = 0x9E3779B9; uint32_t v0 = v[0], v1 = v[1], sum = delta * num_cycles; for (i = 0; i < num_cycles; i++) { v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum >> 11) & 3]); sum -= delta; v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]); } v[0] = v0; v[1] = v1; }