threefish_mix_c.c 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. /* threefish_mix_c.c */
  2. /*
  3. This file is part of the ARM-Crypto-Lib.
  4. Copyright (C) 2006-2010 Daniel Otte (daniel.otte@rub.de)
  5. This program is free software: you can redistribute it and/or modify
  6. it under the terms of the GNU General Public License as published by
  7. the Free Software Foundation, either version 3 of the License, or
  8. (at your option) any later version.
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. GNU General Public License for more details.
  13. You should have received a copy of the GNU General Public License
  14. along with this program. If not, see <http://www.gnu.org/licenses/>.
  15. */
  16. /*
  17. * \author Daniel Otte
  18. * \email daniel.otte@rub.de
  19. * \date 2009-03-16
  20. * \license GPLv3 or later
  21. *
  22. *
  23. *
  24. */
  25. #include <stdint.h>
  26. #define X0 (((uint64_t*)data)[0])
  27. #define X1 (((uint64_t*)data)[1])
  28. void threefish_mix(void* data, uint8_t rot){
  29. uint64_t x;
  30. x = X1;
  31. X0 += x;
  32. X1 = ((x<<rot)|(x>>(64-rot))) ^ X0;
  33. }