You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

44 lines
1.2 KiB

  1. /**
  2. * @cond internal
  3. * @file f_arithmetic.c
  4. * @copyright
  5. * Copyright (c) 2014 Cryptography Research, Inc. \n
  6. * Released under the MIT License. See LICENSE.txt for license information.
  7. * @author Mike Hamburg
  8. * @brief Field-specific arithmetic.
  9. */
  10. #include "field.h"
  11. void
  12. field_isr (
  13. field_a_t a,
  14. const field_a_t x
  15. ) {
  16. field_a_t L0, L1, L2, L3;
  17. field_sqr ( L2, x );
  18. field_mul ( L1, x, L2 );
  19. field_sqrn ( L0, L1, 2 );
  20. field_mul ( L2, L1, L0 );
  21. field_sqrn ( L0, L2, 4 );
  22. field_mul ( L1, L2, L0 );
  23. field_sqr ( L0, L1 );
  24. field_mul ( L2, x, L0 );
  25. field_sqrn ( L0, L2, 8 );
  26. field_mul ( L2, L1, L0 );
  27. field_sqrn ( L0, L2, 17 );
  28. field_mul ( L1, L2, L0 );
  29. field_sqrn ( L0, L1, 17 );
  30. field_mul ( L1, L2, L0 );
  31. field_sqrn ( L3, L1, 17 );
  32. field_mul ( L0, L2, L3 );
  33. field_sqrn ( L2, L0, 51 );
  34. field_mul ( L0, L1, L2 );
  35. field_sqrn ( L1, L0, 119 );
  36. field_mul ( L2, L0, L1 );
  37. field_sqr ( L0, L2 );
  38. field_mul ( L1, x, L0 );
  39. field_sqrn ( L0, L1, 239 );
  40. field_mul ( a, L2, L0 );
  41. }