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.
Table of Contents
Blinding and Un-Blinding¶
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 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 typevalue
: Positive 64-bit integer value
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 typesnon_neg
: 32-bit integer value
Rage Proofs¶
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
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 valuecommit
: 33-byte pedersen commitmentcommit_blind
: Sha-256 blind factor type for the correct digitsnonce
: Sha-256 blind factor type for our non-forged signaturesbase10_exp
: Exponents base 10 in range [-1 ; 18] inclusivelymin_bits
: 8-bit positive integer, must be in range [0 ; 64] inclusivelyactual_value
: 64-bit positive integer, must be greater or equal min_value
Verification¶
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 commitmentsneg_commits_in
: List of 33-byte pedersen commitmentsexcess
: Sum of two list of 33-byte pedersen commitments where sums the first set and subtracts the second
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 commitmentproof
: List of characters
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 typecommit
: 33-byte pedersen commitmentproof
: List of characters