tea.c
Go to the documentation of this file.00001
00066 #include "tea.h"
00067 #include <cpu/byteorder.h>
00068
00069 static uint32_t tea_func(uint32_t *in, uint32_t *sum, uint32_t *k)
00070 {
00071 return ((*in << 4) + cpu_to_le32(k[0])) ^ (*in + *sum) ^ ((*in >> 5) + cpu_to_le32(k[1]));
00072 }
00073
00081 void tea_enc(void *_v, void *_k)
00082 {
00083 uint32_t y, z;
00084 uint32_t sum = 0;
00085 uint8_t n = ROUNDS;
00086 uint32_t *v = (uint32_t *)_v;
00087 uint32_t *k = (uint32_t *)_k;
00088
00089 y=cpu_to_le32(v[0]);
00090 z=cpu_to_le32(v[1]);
00091
00092 while(n-- > 0)
00093 {
00094 sum += DELTA;
00095 y += tea_func(&z, &sum, &(k[0]));
00096 z += tea_func(&y, &sum, &(k[2]));
00097 }
00098
00099 v[0] = le32_to_cpu(y);
00100 v[1] = le32_to_cpu(z);
00101 }
00102
00110 void tea_dec(void *_v, void *_k)
00111 {
00112 uint32_t y, z;
00113 uint32_t sum = DELTA * ROUNDS;
00114 uint8_t n = ROUNDS;
00115 uint32_t *v = (uint32_t *)_v;
00116 uint32_t *k = (uint32_t *)_k;
00117
00118 y = cpu_to_le32(v[0]);
00119 z = cpu_to_le32(v[1]);
00120
00121 while(n-- > 0)
00122 {
00123 z -= tea_func(&y, &sum, &(k[2]));
00124 y -= tea_func(&z, &sum, &(k[0]));
00125 sum -= DELTA;
00126 }
00127
00128 v[0] = le32_to_cpu(y);
00129 v[1] = le32_to_cpu(z);
00130 }
00131