mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-04-25 03:29:58 -07:00
94 lines
2.4 KiB
C
94 lines
2.4 KiB
C
//
|
|
// 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
|