BeRTOS
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