Trait tari_crypto::range_proof::RangeProofService[][src]

pub trait RangeProofService {
    type P: Sized;
    type K: SecretKey;
    type PK: PublicKey<K = Self::K>;
    fn construct_proof(
        &self,
        key: &Self::K,
        value: u64
    ) -> Result<Self::P, RangeProofError>;
fn verify(
        &self,
        proof: &Self::P,
        commitment: &HomomorphicCommitment<Self::PK>
    ) -> bool;
fn range(&self) -> usize;
fn construct_proof_with_rewind_key(
        &self,
        key: &Self::K,
        value: u64,
        rewind_key: &Self::K,
        rewind_blinding_key: &Self::K,
        proof_message: &[u8; 21]
    ) -> Result<Self::P, RangeProofError>;
fn rewind_proof_value_only(
        &self,
        proof: &Self::P,
        commitment: &HomomorphicCommitment<Self::PK>,
        rewind_public_key: &Self::PK,
        rewind_blinding_public_key: &Self::PK
    ) -> Result<RewindResult, RangeProofError>;
fn rewind_proof_commitment_data(
        &self,
        proof: &Self::P,
        commitment: &HomomorphicCommitment<Self::PK>,
        rewind_key: &Self::K,
        rewind_blinding_key: &Self::K
    ) -> Result<FullRewindResult<Self::K>, RangeProofError>; }

Associated Types

type P: Sized[src]

type K: SecretKey[src]

type PK: PublicKey<K = Self::K>[src]

Loading content...

Required methods

fn construct_proof(
    &self,
    key: &Self::K,
    value: u64
) -> Result<Self::P, RangeProofError>
[src]

Construct a new range proof for the given secret key and value. The resulting proof will be sufficient evidence that the prover knows the secret key and value, and that the value lies in the range determined by the service.

fn verify(
    &self,
    proof: &Self::P,
    commitment: &HomomorphicCommitment<Self::PK>
) -> bool
[src]

Verify the range proof against the given commitment. If this function returns true, it attests to the commitment having a value in the range [0; 2^64-1] and that the prover knew both the value and private key.

fn range(&self) -> usize[src]

Return the maximum range of the range proof as a power of 2. i.e. if the maximum range is 2^64, this function returns 64.

fn construct_proof_with_rewind_key(
    &self,
    key: &Self::K,
    value: u64,
    rewind_key: &Self::K,
    rewind_blinding_key: &Self::K,
    proof_message: &[u8; 21]
) -> Result<Self::P, RangeProofError>
[src]

Construct a rangeproof with the ability to rewind it. Requires two rewind keys and a 19-byte message to be included in the range proof. The proof can contain 23 bytes but 4 bytes are used to confirm that a rewind was performed correctly

fn rewind_proof_value_only(
    &self,
    proof: &Self::P,
    commitment: &HomomorphicCommitment<Self::PK>,
    rewind_public_key: &Self::PK,
    rewind_blinding_public_key: &Self::PK
) -> Result<RewindResult, RangeProofError>
[src]

Rewind a rewindable range proof to reveal the committed value and the 19 byte proof message

fn rewind_proof_commitment_data(
    &self,
    proof: &Self::P,
    commitment: &HomomorphicCommitment<Self::PK>,
    rewind_key: &Self::K,
    rewind_blinding_key: &Self::K
) -> Result<FullRewindResult<Self::K>, RangeProofError>
[src]

Fully rewind a rewindable range proof to reveal the committed value, blinding factor and the 19 byte proof message.

Loading content...

Implementors

impl RangeProofService for DalekRangeProofService[src]

type K = RistrettoSecretKey

type P = Vec<u8>

type PK = RistrettoPublicKey

Loading content...