1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-11-26 17:38:39 +00:00
trezor-firmware/crypto/monero/xmr.h

77 lines
2.5 KiB
C
Raw Permalink Normal View History

2018-07-05 00:10:34 +00:00
//
// Created by Dusan Klinec on 10/05/2018.
//
#ifndef TREZOR_CRYPTO_XMR_H
#define TREZOR_CRYPTO_XMR_H
#include "ed25519-donna/ed25519-donna.h"
2018-07-05 00:10:34 +00:00
#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);
2018-07-05 00:10:34 +00:00
/* 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);
2018-07-05 00:10:34 +00:00
/* 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);
2018-07-05 00:10:34 +00:00
/* derivation */
void xmr_generate_key_derivation(ge25519 *r, const ge25519 *A,
const bignum256modm b);
2018-07-05 00:10:34 +00:00
/* H_s(derivation || varint(output_index)) + base */
void xmr_derive_private_key(bignum256modm s, const ge25519 *deriv, uint32_t idx,
const bignum256modm base);
2018-07-05 00:10:34 +00:00
/* H_s(derivation || varint(output_index))G + base */
void xmr_derive_public_key(ge25519 *r, const ge25519 *deriv, uint32_t idx,
const ge25519 *base);
2018-07-05 00:10:34 +00:00
/* 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);
2018-07-05 00:10:34 +00:00
/* 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);
2018-07-05 00:10:34 +00:00
/* subaddress secret */
void xmr_get_subaddress_secret_key(bignum256modm r, uint32_t major,
uint32_t minor, const bignum256modm m);
2018-07-05 00:10:34 +00:00
/* Generates Pedersen commitment C = aG + bH */
void xmr_gen_c(ge25519 *r, const bignum256modm a, uint64_t amount);
2018-07-05 00:10:34 +00:00
#endif // TREZOR_CRYPTO_XMR_H