You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
ASYD/ASYD_Cryptograhpy/SW02-XTEA-CBC/XTEA.c

39 lines
1.3 KiB

/**
*--------------------------------------------------------------------\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 <stdint.h>
#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;
}