pub struct Zkp {
    ibas: Vec<Announcement>,
    ds: Vec<Ciphertext>,
    zwvs: Vec<ResponseRandomness>,
    r: Scalar,
}

Fields§

§ibas: Vec<Announcement>

Commitment to the proof randomness and bits of binary representaion of i

§ds: Vec<Ciphertext>

Encryption to the polynomial coefficients used in the proof

§zwvs: Vec<ResponseRandomness>

Response related to the randomness committed in ibas

§r: Scalar

Final response

Implementations§

source§

impl Zkp

source

pub(crate) fn generate<R: RngCore + CryptoRng>( rng: &mut R, crs: &Crs, public_key: &PublicKey, unit_vector: &UnitVector, encryption_randomness: &[Scalar], ciphertexts: &[Ciphertext] ) -> Self

Generate a unit vector proof. In this proof, a prover encrypts each entry of a vector unit_vector, and proves that the vector is a unit vector. In particular, it proves that it is the ith unit vector without disclosing i. Common Reference String (Crs): Pedersen Commitment Key Statement: public key pk, and ciphertexts ciphertexts C_0=Enc_pk(r_0; v_0), …, C_{m-1}=Enc_pk(r_{m-1}; v_{m-1}) Witness: the unit vector unit_vector, and randomness used for encryption encryption_randomness.

The proof communication complexity is logarithmic with respect to the size of the encrypted tuple. Description of the proof available in Figure 8.

source

pub fn verify( &self, crs: &Crs, public_key: &PublicKey, ciphertexts: &[Ciphertext] ) -> bool

Verify a unit vector proof. The verifier checks that the plaintexts encrypted in ciphertexts, under public_key represent a unit vector. Common Reference String (crs): Pedersen Commitment Key Statement: public key pk, and ciphertexts ciphertexts C_0=Enc_pk(r_0; v_0), …, C_{m-1}=Enc_pk(r_{m-1}; v_{m-1})

Description of the verification procedure available in Figure 9.

source

fn verify_statements( &self, public_key: &PublicKey, commitment_key: &CommitmentKey, ciphertexts: &Ptp<Ciphertext>, challenge_x: &Scalar, challenge_y: &Scalar ) -> bool

Final verification of the proof, that we compute in a single vartime multiscalar multiplication.

source

pub fn from_buffer(codec: &mut Codec<&[u8]>) -> Result<Self, ReadError>

Try to generate a Proof from a buffer

source

pub fn from_parts( ibas: Vec<Announcement>, ds: Vec<Ciphertext>, zwvs: Vec<ResponseRandomness>, r: Scalar ) -> Self

Constructs the proof structure from constituent parts.

Panics

The ibas, ds, and zwvs must have the same length, otherwise the function will panic.

source

pub fn len(&self) -> usize

Returns the length of the size of the witness vector

source

pub fn ibas(&self) -> impl Iterator<Item = &Announcement>

Return an iterator of the announcement commitments

source

pub fn announcments_group_elements(&self) -> Vec<GroupElement>

Return announcement commitments group elements

source

pub fn ds(&self) -> impl Iterator<Item = &Ciphertext>

Return an iterator of the encryptions of the polynomial coefficients

source

pub fn zwvs(&self) -> impl Iterator<Item = &ResponseRandomness>

Return an iterator of the response related to the randomness

source

pub fn response_randomness_group_elements(&self) -> Vec<Scalar>

Return an iterator of the response related to the randomness

source

pub fn r(&self) -> &Scalar

Return R

Trait Implementations§

source§

impl Clone for Zkp

source§

fn clone(&self) -> Zkp

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Zkp

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for Zkp

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl PartialEq<Zkp> for Zkp

source§

fn eq(&self, other: &Zkp) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl Eq for Zkp

source§

impl StructuralEq for Zkp

source§

impl StructuralPartialEq for Zkp

Auto Trait Implementations§

§

impl RefUnwindSafe for Zkp

§

impl Send for Zkp

§

impl Sync for Zkp

§

impl Unpin for Zkp

§

impl UnwindSafe for Zkp

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
source§

impl<T> ToOwned for Twhere T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for Twhere V: MultiLane<T>,

§

fn vzip(self) -> V