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