ed25519_donna_impl_base.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  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(
  17. ge25519_p1p1* r,
  18. const ge25519* p,
  19. const ge25519_niels* q,
  20. unsigned char signbit);
  21. #endif
  22. /* computes [s1]p1 + [s2]p2 */
  23. //#if USE_MONERO
  24. void ge25519_double_scalarmult_vartime2(
  25. ge25519* r,
  26. const ge25519* p1,
  27. const bignum256modm s1,
  28. const ge25519* p2,
  29. const bignum256modm s2);
  30. //#endif
  31. void ge25519_pnielsadd_p1p1(
  32. ge25519_p1p1* r,
  33. const ge25519* p,
  34. const ge25519_pniels* q,
  35. unsigned char signbit);
  36. void ge25519_double_partial(ge25519* r, const ge25519* p);
  37. void ge25519_double(ge25519* r, const ge25519* p);
  38. void ge25519_nielsadd2(ge25519* r, const ge25519_niels* q);
  39. void ge25519_pnielsadd(ge25519_pniels* r, const ge25519* p, const ge25519_pniels* q);
  40. /*
  41. pack & unpack
  42. */
  43. void ge25519_pack(unsigned char r[32], const ge25519* p);
  44. int ge25519_unpack_negative_vartime(ge25519* r, const unsigned char p[32]);
  45. /*
  46. scalarmults
  47. */
  48. void ge25519_set_neutral(ge25519* r);
  49. /* computes [s1]p1 + [s2]base */
  50. void ge25519_double_scalarmult_vartime(
  51. ge25519* r,
  52. const ge25519* p1,
  53. const bignum256modm s1,
  54. const bignum256modm s2);
  55. /* computes [s1]p1, constant time */
  56. void ge25519_scalarmult(ge25519* r, const ge25519* p1, const bignum256modm s1);
  57. void ge25519_scalarmult_base_choose_niels(
  58. ge25519_niels* t,
  59. const uint8_t table[256][96],
  60. uint32_t pos,
  61. signed char b);
  62. /* computes [s]basepoint */
  63. void ge25519_scalarmult_base_niels(
  64. ge25519* r,
  65. const uint8_t basepoint_table[256][96],
  66. const bignum256modm s);
  67. /* check if r is on curve */
  68. int ge25519_check(const ge25519* r);
  69. /* a == b */
  70. int ge25519_eq(const ge25519* a, const ge25519* b);
  71. /* copies one point to another */
  72. void ge25519_copy(ge25519* dst, const ge25519* src);
  73. /* sets B point to r */
  74. void ge25519_set_base(ge25519* r);
  75. /* 8*P */
  76. void ge25519_mul8(ge25519* r, const ge25519* t);
  77. /* -P */
  78. void ge25519_neg_partial(ge25519* r);
  79. /* -P */
  80. void ge25519_neg_full(ge25519* r);
  81. /* reduce all coords */
  82. void ge25519_reduce(ge25519* r, const ge25519* t);
  83. /* normalizes coords. (x, y, 1, x*y) */
  84. void ge25519_norm(ge25519* r, const ge25519* t);
  85. /* Simple addition */
  86. void ge25519_add(ge25519* r, const ge25519* a, const ge25519* b, unsigned char signbit);
  87. /* point from bytes, used in H_p() */
  88. void ge25519_fromfe_frombytes_vartime(ge25519* r, const unsigned char* s);
  89. /* point from bytes */
  90. int ge25519_unpack_vartime(ge25519* r, const unsigned char* s);
  91. /* aG, wrapper for niels base mult. */
  92. void ge25519_scalarmult_base_wrapper(ge25519* r, const bignum256modm s);