// // Created by Dusan Klinec on 10/05/2018. // #if USE_MONERO #ifndef TREZOR_CRYPTO_XMR_H #define TREZOR_CRYPTO_XMR_H #include "../ed25519_donna/ed25519_donna.h" #include "../hasher.h" extern const ge25519 ALIGN(16) xmr_h; typedef unsigned char xmr_key_t[32]; typedef struct xmr_ctkey { xmr_key_t dest; xmr_key_t mask; } xmr_ctkey_t; /* sets H point to r */ void ge25519_set_xmr_h(ge25519* r); /* random scalar value */ void xmr_random_scalar(bignum256modm m); /* cn_fast_hash */ void xmr_fast_hash(uint8_t* hash, const void* data, size_t length); /* incremental hashing wrappers */ void xmr_hasher_init(Hasher* hasher); void xmr_hasher_update(Hasher* hasher, const void* data, size_t length); void xmr_hasher_final(Hasher* hasher, uint8_t* hash); void xmr_hasher_copy(Hasher* dst, const Hasher* src); /* H_s(buffer) */ void xmr_hash_to_scalar(bignum256modm r, const void* data, size_t length); /* H_p(buffer) */ void xmr_hash_to_ec(ge25519* P, const void* data, size_t length); /* derivation to scalar value */ void xmr_derivation_to_scalar(bignum256modm s, const ge25519* p, uint32_t output_index); /* derivation */ void xmr_generate_key_derivation(ge25519* r, const ge25519* A, const bignum256modm b); /* H_s(derivation || varint(output_index)) + base */ void xmr_derive_private_key( bignum256modm s, const ge25519* deriv, uint32_t idx, const bignum256modm base); /* H_s(derivation || varint(output_index))G + base */ void xmr_derive_public_key(ge25519* r, const ge25519* deriv, uint32_t idx, const ge25519* base); /* aG + bB, G is basepoint */ void xmr_add_keys2(ge25519* r, const bignum256modm a, const bignum256modm b, const ge25519* B); void xmr_add_keys2_vartime( ge25519* r, const bignum256modm a, const bignum256modm b, const ge25519* B); /* aA + bB */ void xmr_add_keys3( ge25519* r, const bignum256modm a, const ge25519* A, const bignum256modm b, const ge25519* B); void xmr_add_keys3_vartime( ge25519* r, const bignum256modm a, const ge25519* A, const bignum256modm b, const ge25519* B); /* subaddress secret */ void xmr_get_subaddress_secret_key( bignum256modm r, uint32_t major, uint32_t minor, const bignum256modm m); /* Generates Pedersen commitment C = aG + bH */ void xmr_gen_c(ge25519* r, const bignum256modm a, uint64_t amount); #endif // TREZOR_CRYPTO_XMR_H #endif // USE_MONERO