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.
 
 
 
 
 

36 lines
952 B

  1. /* Copyright (c) 2014-2016 Cryptography Research, Inc.
  2. * Released under the MIT License. See LICENSE.txt for license information.
  3. */
  4. #define FIELD_LITERAL(a,b,c,d,e) {{ a,b,c,d,e }}
  5. #define LIMB_PLACE_VALUE(i) 51
  6. void gf_add_RAW (gf out, const gf a, const gf b) {
  7. for (unsigned int i=0; i<5; i++) {
  8. out->limb[i] = a->limb[i] + b->limb[i];
  9. }
  10. }
  11. void gf_sub_RAW (gf out, const gf a, const gf b) {
  12. for (unsigned int i=0; i<5; i++) {
  13. out->limb[i] = a->limb[i] - b->limb[i];
  14. }
  15. }
  16. void gf_bias (gf a, int amt) {
  17. a->limb[0] += ((uint64_t)(amt)<<52) - 38*amt;
  18. for (unsigned int i=1; i<5; i++) {
  19. a->limb[i] += ((uint64_t)(amt)<<52)-2*amt;
  20. }
  21. }
  22. void gf_weak_reduce (gf a) {
  23. uint64_t mask = (1ull<<51) - 1;
  24. uint64_t tmp = a->limb[4] >> 51;
  25. for (unsigned int i=4; i>0; i--) {
  26. a->limb[i] = (a->limb[i] & mask) + (a->limb[i-1]>>51);
  27. }
  28. a->limb[0] = (a->limb[0] & mask) + tmp*19;
  29. }