//
// Created by Dusan Klinec on 10/05/2018.
//

#ifndef TREZOR_CRYPTO_RANGE_PROOF_H
#define TREZOR_CRYPTO_RANGE_PROOF_H

#include "xmr.h"
#define XMR_ATOMS 64

typedef uint64_t xmr_amount;
typedef xmr_key_t xmr_key64_t[64];

typedef struct xmr_boro_sig {
  xmr_key64_t s0;
  xmr_key64_t s1;
  xmr_key_t ee;
} xmr_boro_sig_t;

typedef struct range_sig {
  xmr_boro_sig_t asig;
  xmr_key64_t Ci;
} xmr_range_sig_t;

void xmr_gen_range_sig(xmr_range_sig_t* sig, ge25519* C, bignum256modm mask,
                       xmr_amount amount, bignum256modm* last_mask);
void xmr_gen_range_sig_ex(xmr_range_sig_t* sig, ge25519* C, bignum256modm mask,
                          xmr_amount amount, bignum256modm* last_mask,
                          bignum256modm ai[64], bignum256modm alpha[64]);

#endif  // TREZOR_CRYPTO_RANGE_PROOF_H