gipu/test/tea-encrypt.c
Giulio De Pasquale e518029485 CALL + fix vari
2017-05-24 20:54:12 +02:00

39 lines
1.0 KiB
C

#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
void encrypt(uint16_t *v, uint16_t *k) {
uint16_t v0 = v[0], v1 = v[1], sum = 0, i; /* set up */
//uint32_t delta = 0x9e3779b9; /* a key schedule constant */
uint16_t delta= 0x9e37;
uint16_t k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3]; /* cache key */
for (i = 0; i < 64; i++) { /* basic cycle start */
sum += delta;
v0 += ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1);
v1 += ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3);
} /* end cycle */
v[0] = v0;
v[1] = v1;
}
int main(int argc, char *argv[]) {
uint8_t *buf;
uint32_t buflen, i;
if (argc != 3) {
printf("Usage: %s text_to_encrypt key", argv[0]);
exit(1);
}
buflen = strlen(argv[1]);
buf = (uint8_t *)malloc(buflen);
memcpy(buf, argv[1], buflen);
encrypt((uint16_t *)buf, (uint16_t *)argv[2]);
printf("Result:\n");
for (i = 0; i < buflen; i++) {
printf("%02x", buf[i]);
}
printf("\n");
return 0;
}