xmr.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. //
  2. // Created by Dusan Klinec on 10/05/2018.
  3. //
  4. #if USE_MONERO
  5. #ifndef TREZOR_CRYPTO_XMR_H
  6. #define TREZOR_CRYPTO_XMR_H
  7. #include "../ed25519_donna/ed25519_donna.h"
  8. #include "../hasher.h"
  9. extern const ge25519 ALIGN(16) xmr_h;
  10. typedef unsigned char xmr_key_t[32];
  11. typedef struct xmr_ctkey {
  12. xmr_key_t dest;
  13. xmr_key_t mask;
  14. } xmr_ctkey_t;
  15. /* sets H point to r */
  16. void ge25519_set_xmr_h(ge25519* r);
  17. /* random scalar value */
  18. void xmr_random_scalar(bignum256modm m);
  19. /* cn_fast_hash */
  20. void xmr_fast_hash(uint8_t* hash, const void* data, size_t length);
  21. /* incremental hashing wrappers */
  22. void xmr_hasher_init(Hasher* hasher);
  23. void xmr_hasher_update(Hasher* hasher, const void* data, size_t length);
  24. void xmr_hasher_final(Hasher* hasher, uint8_t* hash);
  25. void xmr_hasher_copy(Hasher* dst, const Hasher* src);
  26. /* H_s(buffer) */
  27. void xmr_hash_to_scalar(bignum256modm r, const void* data, size_t length);
  28. /* H_p(buffer) */
  29. void xmr_hash_to_ec(ge25519* P, const void* data, size_t length);
  30. /* derivation to scalar value */
  31. void xmr_derivation_to_scalar(bignum256modm s, const ge25519* p, uint32_t output_index);
  32. /* derivation */
  33. void xmr_generate_key_derivation(ge25519* r, const ge25519* A, const bignum256modm b);
  34. /* H_s(derivation || varint(output_index)) + base */
  35. void xmr_derive_private_key(
  36. bignum256modm s,
  37. const ge25519* deriv,
  38. uint32_t idx,
  39. const bignum256modm base);
  40. /* H_s(derivation || varint(output_index))G + base */
  41. void xmr_derive_public_key(ge25519* r, const ge25519* deriv, uint32_t idx, const ge25519* base);
  42. /* aG + bB, G is basepoint */
  43. void xmr_add_keys2(ge25519* r, const bignum256modm a, const bignum256modm b, const ge25519* B);
  44. void xmr_add_keys2_vartime(
  45. ge25519* r,
  46. const bignum256modm a,
  47. const bignum256modm b,
  48. const ge25519* B);
  49. /* aA + bB */
  50. void xmr_add_keys3(
  51. ge25519* r,
  52. const bignum256modm a,
  53. const ge25519* A,
  54. const bignum256modm b,
  55. const ge25519* B);
  56. void xmr_add_keys3_vartime(
  57. ge25519* r,
  58. const bignum256modm a,
  59. const ge25519* A,
  60. const bignum256modm b,
  61. const ge25519* B);
  62. /* subaddress secret */
  63. void xmr_get_subaddress_secret_key(
  64. bignum256modm r,
  65. uint32_t major,
  66. uint32_t minor,
  67. const bignum256modm m);
  68. /* Generates Pedersen commitment C = aG + bH */
  69. void xmr_gen_c(ge25519* r, const bignum256modm a, uint64_t amount);
  70. #endif // TREZOR_CRYPTO_XMR_H
  71. #endif // USE_MONERO