| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- //
- // 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
|