xtea.c 686 B

12345678910111213141516171819202122
  1. #include "xtea.h"
  2. void xtea_encrypt(uint32_t v[2], const uint32_t k[4]) {
  3. uint32_t v0=v[0], v1=v[1], sum=0, delta=0x9E3779B9;
  4. for (uint8_t i=0;i<32;i++) {
  5. v0 += (((v1<<4) ^ (v1>>5)) + v1) ^ (sum + k[sum & 3]);
  6. sum += delta;
  7. v1 += (((v0<<4) ^ (v0>>5)) + v0) ^ (sum + k[(sum>>11) & 3]);
  8. }
  9. v[0]=v0; v[1]=v1;
  10. }
  11. void xtea_decrypt(uint32_t v[2], const uint32_t k[4]) {
  12. uint32_t v0=v[0], v1=v[1], delta=0x9E3779B9, sum=delta*32;
  13. for (uint8_t i=0;i<32;i++) {
  14. v1 -= (((v0<<4) ^ (v0>>5)) + v0) ^ (sum + k[(sum>>11) & 3]);
  15. sum -= delta;
  16. v0 -= (((v1<<4) ^ (v1>>5)) + v1) ^ (sum + k[sum & 3]);
  17. }
  18. v[0]=v0; v[1]=v1;
  19. }