tea.c

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