Нашел тут простую реализацию XXTEA. уточню, код будет работать в меге32.
в описании алгоритма указано:
at least two words (64 bits)Код
void xxtea_crypt(unsigned long *v)
{
unsigned long long q=40;
unsigned long long z=v[1], y=v[0], sum=0, e;
while ( q-- > 0 )
{
sum += DELTA;
e = sum >> 2&3;
y = v[1];
z = v[0]+= ( (((z>>9)^(y<<2))+((y>>3)^(z<<6)))^((sum^y)+(key[e]^z)) );
y = v[0];
z = v[1] += ( (((z>>9)^(y<<2))+((y>>3)^(z<<6)))^((sum^y)+(key[1^e]^z)) );
}
}
Код
void xxtea_decrypt(unsigned long *v)
{
long q=40;
long z=v[1], y=v[0], e, sum = q*DELTA;
while (sum != 0)
{
e = sum>> 2&3;
z = v[0];
y = v[1] -= ( (((z>>9)^(y<<2))+((y>>3)^(z<<6)))^((sum^y)+(key[1^e]^z)) );
z = v[1];
y = v[0] -= ( (((z>>9)^(y<<2))+((y>>3)^(z<<6)))^((sum^y)+(key[e]^z)) );
sum -= DELTA;
}
}
как теперь туда байтовый массив запихать? Делал преобразование байт с помощью этой функции:
Код
ULONG GetInt32( UCHAR *pBytes )
{
return (ULONG)(*(pBytes + 3) << 24 | *(pBytes + 2) << 16 | *(pBytes + 1) << 8 | *pBytes);
}
IAR ругается что
shift count is too largeP.S.
Админам: тема касается AVR
Сообщение отредактировал Ivan Kuznetzov - Mar 5 2010, 06:59