PRCYCoin  2.0.0.7rc1
P2P Digital Currency
Functions | Variables
main_impl.h File Reference
#include "group.h"
#include "modules/commitment/pedersen_impl.h"
Include dependency graph for main_impl.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

int secp256k1_pedersen_commitment_to_serialized_pubkey (secp256k1_pedersen_commitment *commit, unsigned char *pubkey, size_t *length)
 
void secp256k1_pedersen_serialized_pubkey_to_commitment (const unsigned char *pubkey, size_t length, secp256k1_pedersen_commitment *commit)
 
int secp256k1_pedersen_commitment_parse (const secp256k1_context2 *ctx, secp256k1_pedersen_commitment *commit, const unsigned char *input)
 Parse a 33-byte commitment into a commitment object. More...
 
int secp256k1_pedersen_commitment_serialize (const secp256k1_context2 *ctx, unsigned char *output, const secp256k1_pedersen_commitment *commit)
 Serialize a commitment object into a serialized byte sequence. More...
 
int secp256k1_pedersen_commit (const secp256k1_context2 *ctx, secp256k1_pedersen_commitment *commit, const unsigned char *blind, uint64_t value, const secp256k1_generator *value_gen, const secp256k1_generator *blind_gen)
 Generate a Pedersen commitment. More...
 
int secp256k1_pedersen_blind_sum (const secp256k1_context2 *ctx, unsigned char *blind_out, const unsigned char *const *blinds, size_t n, size_t npositive)
 Takes a list of n pointers to 32 byte blinding values, the first negs of which are treated with positive sign and the rest negative, then calculates an additional blinding value that adds to zero. More...
 
int secp256k1_pedersen_verify_tally (const secp256k1_context2 *ctx, const secp256k1_pedersen_commitment *const *pos, size_t n_pos, const secp256k1_pedersen_commitment *const *neg, size_t n_neg)
 Verify a tally of Pedersen commitments Returns 1: commitments successfully sum to zero. More...
 
int secp256k1_pedersen_commitment_sum (const secp256k1_context2 *ctx, const secp256k1_pedersen_commitment *const *pos, size_t n_pos, const secp256k1_pedersen_commitment *const *neg, size_t n_neg, secp256k1_pedersen_commitment *out)
 
int secp256k1_pedersen_commitment_sum_pos (const secp256k1_context2 *ctx, const secp256k1_pedersen_commitment *const *pos, size_t n_pos, secp256k1_pedersen_commitment *out)
 
int secp256k1_pedersen_blind_generator_blind_sum (const secp256k1_context2 *ctx, const uint64_t *value, const unsigned char *const *generator_blind, unsigned char *const *blinding_factor, size_t n_total, size_t n_inputs)
 Sets the final Pedersen blinding factor correctly when the generators themselves have blinding factors. More...
 

Variables

const secp256k1_generatorsecp256k1_generator_h = &secp256k1_generator_h_internal
 Static constant generator 'h' maintained for historical reasons. More...
 

Function Documentation

◆ secp256k1_pedersen_blind_generator_blind_sum()

int secp256k1_pedersen_blind_generator_blind_sum ( const secp256k1_context2 ctx,
const uint64_t *  value,
const unsigned char *const *  generator_blind,
unsigned char *const *  blinding_factor,
size_t  n_total,
size_t  n_inputs 
)

Sets the final Pedersen blinding factor correctly when the generators themselves have blinding factors.

Consider a generator of the form A' = A + rG, where A is the "real" generator but A' is the generator provided to verifiers. Then a Pedersen commitment P = vA' + r'G really has the form vA + (vr + r')G. To get all these (vr + r') to sum to zero for multiple commitments, we take three arrays consisting of the vs, rs, and ‘r’s, respectively calledvalues,generator_blinds andblinding_factor`s, and sum them.

The function then subtracts the sum of all (vr + r') from the last element of the blinding_factor array, setting the total sum to zero.

Returns 1: Blinding factor successfully computed. 0: Error. A blinding_factor or generator_blind are larger than the group order (probability for random 32 byte number < 2^-127). Retry with different values.

In: ctx: pointer to a context object value: array of asset values, v in the above paragraph. May not be NULL unless n_total is 0. generator_blind: array of asset blinding factors, r in the above paragraph May not be NULL unless n_total is 0. n_total: Total size of the above arrays n_inputs: How many of the initial array elements represent commitments that will be negated in the final sum In/Out: blinding_factor: array of commitment blinding factors, ‘r’in the above paragraph May not be NULL unlessn_total` is 0. the last value will be modified to get the total sum to zero.

Definition at line 227 of file main_impl.h.

◆ secp256k1_pedersen_blind_sum()

int secp256k1_pedersen_blind_sum ( const secp256k1_context2 ctx,
unsigned char *  blind_out,
const unsigned char *const *  blinds,
size_t  n,
size_t  npositive 
)

Takes a list of n pointers to 32 byte blinding values, the first negs of which are treated with positive sign and the rest negative, then calculates an additional blinding value that adds to zero.

Computes the sum of multiple positive and negative blinding factors.

Definition at line 126 of file main_impl.h.

Here is the caller graph for this function:

◆ secp256k1_pedersen_commit()

int secp256k1_pedersen_commit ( const secp256k1_context2 ctx,
secp256k1_pedersen_commitment commit,
const unsigned char *  blind,
uint64_t  value,
const secp256k1_generator value_gen,
const secp256k1_generator blind_gen 
)

Generate a Pedersen commitment.

Returns 1: Commitment successfully created. 0: Error. The blinding factor is larger than the group order (probability for random 32 byte number < 2^-127) or results in the point at infinity. Retry with a different factor. In: ctx: pointer to a context object (cannot be NULL) blind: pointer to a 32-byte blinding factor (cannot be NULL) value: unsigned 64-bit integer value to commit to. value_gen: value generator 'h' blind_gen: blinding factor generator 'g' Out: commit: pointer to the commitment (cannot be NULL)

Blinding factors can be generated and verified in the same way as secp256k1 private keys for ECDSA.

Definition at line 93 of file main_impl.h.

Here is the caller graph for this function:

◆ secp256k1_pedersen_commitment_parse()

int secp256k1_pedersen_commitment_parse ( const secp256k1_context2 ctx,
secp256k1_pedersen_commitment commit,
const unsigned char *  input 
)

Parse a 33-byte commitment into a commitment object.

Returns: 1 if input contains a valid commitment. Args: ctx: a secp256k1 context object. Out: commit: pointer to the output commitment object In: input: pointer to a 33-byte serialized commitment key

Definition at line 56 of file main_impl.h.

Here is the caller graph for this function:

◆ secp256k1_pedersen_commitment_serialize()

int secp256k1_pedersen_commitment_serialize ( const secp256k1_context2 ctx,
unsigned char *  output,
const secp256k1_pedersen_commitment commit 
)

Serialize a commitment object into a serialized byte sequence.

Returns: 1 always. Args: ctx: a secp256k1 context object. Out: output: a pointer to a 33-byte byte array In: commit: a pointer to a secp256k1_pedersen_commitment containing an initialized commitment

Definition at line 77 of file main_impl.h.

Here is the caller graph for this function:

◆ secp256k1_pedersen_commitment_sum()

int secp256k1_pedersen_commitment_sum ( const secp256k1_context2 ctx,
const secp256k1_pedersen_commitment *const *  pos,
size_t  n_pos,
const secp256k1_pedersen_commitment *const *  neg,
size_t  n_neg,
secp256k1_pedersen_commitment out 
)

Definition at line 175 of file main_impl.h.

Here is the caller graph for this function:

◆ secp256k1_pedersen_commitment_sum_pos()

int secp256k1_pedersen_commitment_sum_pos ( const secp256k1_context2 ctx,
const secp256k1_pedersen_commitment *const *  pos,
size_t  n_pos,
secp256k1_pedersen_commitment out 
)

Definition at line 205 of file main_impl.h.

Here is the caller graph for this function:

◆ secp256k1_pedersen_commitment_to_serialized_pubkey()

int secp256k1_pedersen_commitment_to_serialized_pubkey ( secp256k1_pedersen_commitment commit,
unsigned char *  pubkey,
size_t *  length 
)

Definition at line 44 of file main_impl.h.

Here is the caller graph for this function:

◆ secp256k1_pedersen_serialized_pubkey_to_commitment()

void secp256k1_pedersen_serialized_pubkey_to_commitment ( const unsigned char *  pubkey,
size_t  length,
secp256k1_pedersen_commitment commit 
)

Definition at line 50 of file main_impl.h.

Here is the caller graph for this function:

◆ secp256k1_pedersen_verify_tally()

int secp256k1_pedersen_verify_tally ( const secp256k1_context2 ctx,
const secp256k1_pedersen_commitment *const *  pos,
size_t  n_pos,
const secp256k1_pedersen_commitment *const *  neg,
size_t  n_neg 
)

Verify a tally of Pedersen commitments Returns 1: commitments successfully sum to zero.

0: Commitments do not sum to zero or other error. In: ctx: pointer to a context object (cannot be NULL) pos: pointer to array of pointers to the commitments. (cannot be NULL if n_pos is non-zero) n_pos: number of commitments pointed to by pos. neg: pointer to array of pointers to the negative commitments. (cannot be NULL if n_neg is non-zero) n_neg: number of commitments pointed to by neg.

This computes sum(pos[0..n_pos)) - sum(neg[0..n_neg)) == 0.

A Pedersen commitment is xG + vA where G and A are generators for the secp256k1 group and x is a blinding factor, while v is the committed value. For a collection of commitments to sum to zero, for each distinct generator A all blinding factors and all values must sum to zero.

Definition at line 154 of file main_impl.h.

Variable Documentation

◆ secp256k1_generator_h

const secp256k1_generator* secp256k1_generator_h = &secp256k1_generator_h_internal

Static constant generator 'h' maintained for historical reasons.

Definition at line 27 of file main_impl.h.