xmr.h 2.5 KB

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