4.6. Crypto API

The crypto API is available from the full node via websockets.

If you have not set up your websockets connection, please read this article.


4.6.1. Blinding and Un-Blinding

4.6.1.1. blind

commitment_type graphene::app::crypto_api::blind(const fc::ecc::blind_factor_type &blind, uint64_t value)

Generates a pedersen commitment: *commit = blind * G + value * G2. The commitment is 33 bytes, the blinding factor is 32 bytes. For more information about pederson commitment check next url https://en.wikipedia.org/wiki/Commitment_scheme.

Return
A 33-byte pedersen commitment: *commit = blind * G + value * G2
Parameters
  • blind: Sha-256 blind factor type
  • value: Positive 64-bit integer value

4.6.1.2. blind_sum

blind_factor_type graphene::app::crypto_api::blind_sum(const std::vector<blind_factor_type> &blinds_in, uint32_t non_neg)

Get sha-256 blind factor type.

Return
A blind factor type
Parameters
  • blinds_in: List of sha-256 blind factor types
  • non_neg: 32-bit integer value



4.6.2. Rage Proofs

4.6.2.1. range_get_info

range_proof_info graphene::app::crypto_api::range_get_info(const std::vector<char> &proof)

Gets “range proof” info. The cli_wallet includes functionality for sending blind transfers in which the values of the input and outputs amounts are “blinded.” In the case where a transaction produces two or more outputs, (e.g. an amount to the intended recipient plus “change” back to the sender), a “range proof” must be supplied to prove that none of the outputs commit to a negative value.

Return
A range proof info structure with exponent, mantissa, min and max values
Parameters
  • proof: List of proof’s characters

4.6.2.2. range_proof_sign

std::vector<char> graphene::app::crypto_api::range_proof_sign(uint64_t min_value, const commitment_type &commit, const blind_factor_type &commit_blind, const blind_factor_type &nonce, int8_t base10_exp, uint8_t min_bits, uint64_t actual_value)

Proves with respect to min_value the range for pedersen commitment which has the provided blinding factor and value.

Return
A list of characters as proof in proof
Parameters
  • min_value: Positive 64-bit integer value
  • commit: 33-byte pedersen commitment
  • commit_blind: Sha-256 blind factor type for the correct digits
  • nonce: Sha-256 blind factor type for our non-forged signatures
  • exp: Exponents base 10 in range [-1 ; 18] inclusively
  • min_bits: 8-bit positive integer, must be in range [0 ; 64] inclusively
  • actual_value: 64-bit positive integer, must be greater or equal min_value



4.6.3. Verification

4.6.3.1. verify_sum

bool graphene::app::crypto_api::verify_sum(const std::vector<commitment_type> &commits_in, const std::vector<commitment_type> &neg_commits_in, int64_t excess)

Verifies that commits + neg_commits + excess == 0.

Return
Boolean - true in event of commits + neg_commits + excess == 0, otherwise false
Parameters
  • commits_in: List of 33-byte pedersen commitments
  • neg_commits_in: List of 33-byte pedersen commitments
  • excess: Sum of two list of 33-byte pedersen commitments where sums the first set and subtracts the second

4.6.3.2. verify_range

verify_range_result graphene::app::crypto_api::verify_range(const fc::ecc::commitment_type &commit, const std::vector<char> &proof)

Verifies range proof for 33-byte pedersen commitment.

Return
A structure with success, min and max values
Parameters
  • commit: 33-byte pedersen commitment
  • proof: List of characters

4.6.3.3. verify_range_proof_rewind

verify_range_proof_rewind_result graphene::app::crypto_api::verify_range_proof_rewind(const blind_factor_type &nonce, const fc::ecc::commitment_type &commit, const std::vector<char> &proof)

Verifies range proof rewind for 33-byte pedersen commitment.

Return
A structure with success, min, max, value_out, blind_out and message_out values
Parameters
  • nonce: Sha-256 blind refactor type
  • commit: 33-byte pedersen commitment
  • proof: List of characters