diff --git a/test/tea-decrypt.c b/test/tea-decrypt.c new file mode 100644 index 0000000..aadd820 --- /dev/null +++ b/test/tea-decrypt.c @@ -0,0 +1,27 @@ +#include +#include +#include +#include + +void decrypt(uint32_t *v, uint32_t *k) { + uint32_t v0 = v[0], v1 = v[1], sum = 0xC6EF3720, i; /* set up */ + uint32_t delta = 0x9e3779b9; /* a key schedule constant */ + uint32_t k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3]; /* cache key */ + for (i = 0; i < 32; i++) { /* basic cycle start */ + v1 -= ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3); + v0 -= ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1); + sum -= delta; + } /* end cycle */ + v[0] = v0; + v[1] = v1; +} + +int main(int argc, char *argv[]) { + if (argc != 3) { + printf("Usage: %s text_to_decrypt key", argv[0]); + exit(1); + } + decrypt((uint32_t*)argv[1], (uint32_t*)argv[2]); + printf("Result: %s", argv[1]); + return 0; +} \ No newline at end of file diff --git a/test/tea-encrypt.c b/test/tea-encrypt.c new file mode 100644 index 0000000..2a571a0 --- /dev/null +++ b/test/tea-encrypt.c @@ -0,0 +1,39 @@ +#include +#include +#include +#include +#include + + +void encrypt(uint32_t *v, uint32_t *k) { + uint32_t v0 = v[0], v1 = v[1], sum = 0, i; /* set up */ + uint32_t delta = 0x9e3779b9; /* a key schedule constant */ + uint32_t k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3]; /* cache key */ + for (i = 0; i < 32; 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((uint32_t*)buf, (uint32_t *)argv[2]); + printf("Result:\n"); + for (i = 0; i< buflen; i++) { + printf("%02x", buf[i]); + } + printf("\n"); + return 0; +} \ No newline at end of file