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.
39 lines
1.3 KiB
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;
|
|
}
|
|
|