Struct cryptoballot::Authenticator[][src]

pub struct Authenticator {
    pub id: Uuid,
    pub public_keys: IndexMap<String, AuthPublicKey>,
Expand description

An Authenticator is responsible for authenticating a voter as allowed to vote a specific ballot in an election.

An authenticator receives the following from a voter:

  1. Voter’s bonefides (government-id, security-code, password etc).
  2. Election ID and Ballot ID
  3. blinded auth-package triplet of (election-id, ballot-id, voter-public-key)

The authenticator first checks the election-id and ballot-id against the voter’s bonefides (this is implementation specific and out of scope of CryptoBallot). After satisfied that the voter is allowed to vote this election and ballot, the authenticator blind-signs the blinded triplet and returns the signature to the voter who will unblind it.

Before the election, the authenticator will generate a signing keypair for each ballot-id. Having on key per ballot ensures that the blinded triplet matches the correct election and ballot.

WARNING: The secret keys used to sign blinded triplets must NOT be used for any other purpose. Doing so can result in secret key disclosure.


id: Uuidpublic_keys: IndexMap<String, AuthPublicKey>


impl Authenticator[src]

pub fn new(
    keysize: usize,
    ballot_ids: &[String]
) -> Result<(Self, IndexMap<String, RSAPrivateKey>), Error>

Create a new Authenticator, generating keys for provided ballot-ids.

For good security, keysize should be at least 2048 bits, and ideally 4096 bits.

WARNING: The secret keys generated here must NOT be used for any other purpose. Doing so can result in secret key disclosure.

pub fn authenticate(
    secret: &RSAPrivateKey,
    blinded_auth_package: &[u8]
) -> Authentication

Sign the blinded (election-id, ballot-id, voter-public-key) auth-package triplet.

This should only be called after verifying the voter’s bonefides (eg government-id, security-code, password etc) and that they are authorized to vote the requested election and ballot.

pub fn verify(
    election_id: Identifier,
    ballot_id: &str,
    anonymous_key: &PublicKey,
    signature: &[u8]
) -> Result<(), ValidationError>

Verify the authenticator signature

Trait Implementations

impl Clone for Authenticator[src]

fn clone(&self) -> Authenticator[src]

Returns a copy of the value. Read more

fn clone_from(&mut self, source: &Self)1.0.0[src]

Performs copy-assignment from source. Read more

impl Debug for Authenticator[src]

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

Formats the value using the given formatter. Read more

impl<'de> Deserialize<'de> for Authenticator[src]

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error> where
    __D: Deserializer<'de>, 

Deserialize this value from the given Serde deserializer. Read more

impl Serialize for Authenticator[src]

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error> where
    __S: Serializer

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations

impl RefUnwindSafe for Authenticator

impl Send for Authenticator

impl Sync for Authenticator

impl Unpin for Authenticator

impl UnwindSafe for Authenticator

Blanket Implementations

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

pub fn type_id(&self) -> TypeId[src]

Gets the TypeId of self. Read more

impl<T> Borrow<T> for T where
    T: ?Sized

pub fn borrow(&self) -> &T[src]

Immutably borrows from an owned value. Read more

impl<T> BorrowMut<T> for T where
    T: ?Sized

pub fn borrow_mut(&mut self) -> &mut T[src]

Mutably borrows from an owned value. Read more

impl<T> From<T> for T[src]

pub fn from(t: T) -> T[src]

Performs the conversion.

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

pub fn into(self) -> U[src]

Performs the conversion.

impl<T> Pointable for T[src]

pub const ALIGN: usize[src]

The alignment of pointer.

type Init = T

The type for initializers.

pub unsafe fn init(init: <T as Pointable>::Init) -> usize[src]

Initializes a with the given initializer. Read more

pub unsafe fn deref<'a>(ptr: usize) -> &'a T[src]

Dereferences the given pointer. Read more

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

Mutably dereferences the given pointer. Read more

pub unsafe fn drop(ptr: usize)[src]

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

impl<T> Same<T> for T[src]

type Output = T

Should always be Self

impl<T> ToOwned for T where
    T: Clone

type Owned = T

The resulting type after obtaining ownership.

pub fn to_owned(&self) -> T[src]

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

pub fn clone_into(&self, target: &mut T)[src]

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

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

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

type Error = Infallible

The type returned in the event of a conversion error.

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

Performs the conversion.

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

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

The type returned in the event of a conversion error.

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

Performs the conversion.

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

pub fn vzip(self) -> V[src]

impl<T> DeserializeOwned for T where
    T: for<'de> Deserialize<'de>,