ed25519-donna-impl-base.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. /*
  2. Timing safe memory compare
  3. */
  4. int ed25519_verify(const unsigned char *x, const unsigned char *y, size_t len);
  5. /*
  6. conversions
  7. */
  8. void ge25519_p1p1_to_partial(ge25519 *r, const ge25519_p1p1 *p);
  9. void ge25519_p1p1_to_full(ge25519 *r, const ge25519_p1p1 *p);
  10. void ge25519_full_to_pniels(ge25519_pniels *p, const ge25519 *r);
  11. /*
  12. adding & doubling
  13. */
  14. void ge25519_double_p1p1(ge25519_p1p1 *r, const ge25519 *p);
  15. #ifndef ED25519_NO_PRECOMP
  16. void ge25519_nielsadd2_p1p1(ge25519_p1p1 *r, const ge25519 *p, const ge25519_niels *q, unsigned char signbit);
  17. #endif
  18. /* computes [s1]p1 + [s2]p2 */
  19. //#if USE_MONERO
  20. void ge25519_double_scalarmult_vartime2(ge25519 *r, const ge25519 *p1, const bignum256modm s1, const ge25519 *p2, const bignum256modm s2);
  21. //#endif
  22. void ge25519_pnielsadd_p1p1(ge25519_p1p1 *r, const ge25519 *p, const ge25519_pniels *q, unsigned char signbit);
  23. void ge25519_double_partial(ge25519 *r, const ge25519 *p);
  24. void ge25519_double(ge25519 *r, const ge25519 *p);
  25. void ge25519_nielsadd2(ge25519 *r, const ge25519_niels *q);
  26. void ge25519_pnielsadd(ge25519_pniels *r, const ge25519 *p, const ge25519_pniels *q);
  27. /*
  28. pack & unpack
  29. */
  30. void ge25519_pack(unsigned char r[32], const ge25519 *p);
  31. int ge25519_unpack_negative_vartime(ge25519 *r, const unsigned char p[32]);
  32. /*
  33. scalarmults
  34. */
  35. void ge25519_set_neutral(ge25519 *r);
  36. /* computes [s1]p1 + [s2]base */
  37. void ge25519_double_scalarmult_vartime(ge25519 *r, const ge25519 *p1, const bignum256modm s1, const bignum256modm s2);
  38. /* computes [s1]p1, constant time */
  39. void ge25519_scalarmult(ge25519 *r, const ge25519 *p1, const bignum256modm s1);
  40. void ge25519_scalarmult_base_choose_niels(ge25519_niels *t, const uint8_t table[256][96], uint32_t pos, signed char b);
  41. /* computes [s]basepoint */
  42. void ge25519_scalarmult_base_niels(ge25519 *r, const uint8_t basepoint_table[256][96], const bignum256modm s);
  43. /* check if r is on curve */
  44. int ge25519_check(const ge25519 *r);
  45. /* a == b */
  46. int ge25519_eq(const ge25519 *a, const ge25519 *b);
  47. /* copies one point to another */
  48. void ge25519_copy(ge25519 *dst, const ge25519 *src);
  49. /* sets B point to r */
  50. void ge25519_set_base(ge25519 *r);
  51. /* 8*P */
  52. void ge25519_mul8(ge25519 *r, const ge25519 *t);
  53. /* -P */
  54. void ge25519_neg_partial(ge25519 *r);
  55. /* -P */
  56. void ge25519_neg_full(ge25519 *r);
  57. /* reduce all coords */
  58. void ge25519_reduce(ge25519 *r, const ge25519 *t);
  59. /* normalizes coords. (x, y, 1, x*y) */
  60. void ge25519_norm(ge25519 *r, const ge25519 * t);
  61. /* Simple addition */
  62. void ge25519_add(ge25519 *r, const ge25519 *a, const ge25519 *b, unsigned char signbit);
  63. /* point from bytes, used in H_p() */
  64. void ge25519_fromfe_frombytes_vartime(ge25519 *r, const unsigned char *s);
  65. /* point from bytes */
  66. int ge25519_unpack_vartime(ge25519 *r, const unsigned char *s);
  67. /* aG, wrapper for niels base mult. */
  68. void ge25519_scalarmult_base_wrapper(ge25519 *r, const bignum256modm s);