hjugement-protocol-0.0.10.20191104: A cryptographic protocol for the Majority Judgment.

Safe HaskellNone
LanguageHaskell2010

Voting.Protocol.Arithmetic

Contents

Synopsis

Class CryptoParams where

class (EuclideanRing (G crypto c), FromNatural (G crypto c), ToNatural (G crypto c), Eq (G crypto c), Ord (G crypto c), Show (G crypto c), NFData (G crypto c), FromJSON (G crypto c), ToJSON (G crypto c), Reifies c crypto) => CryptoParams crypto c where Source #

Minimal complete definition

groupGen, groupOrder

Methods

groupGen :: G crypto c Source #

A generator of the subgroup.

groupOrder :: Proxy c -> Natural Source #

The order of the subgroup.

groupGenPowers :: [G crypto c] Source #

groupGenPowers returns the infinite list of powers of groupGen.

NOTE: In the CryptoParams class to keep computed values in memory across calls to groupGenPowers.

groupGenInverses :: [G crypto c] Source #

groupGenInverses returns the infinite list of inverse powers of groupGen: [groupGen ^ negate i | i <- [0..]], but by computing each value from the previous one.

NOTE: In the CryptoParams class to keep computed values in memory across calls to groupGenInverses.

Used by intervalDisjunctions.

Instances
Reifies c FFC => CryptoParams FFC c Source # 
Instance details

Defined in Voting.Protocol.FFC

Class ReifyCrypto

class ReifyCrypto crypto where Source #

Methods

reifyCrypto :: crypto -> (forall c. Reifies c crypto => CryptoParams crypto c => Proxy c -> r) -> r Source #

Like reify but augmented with the CryptoParams constraint.

Instances
ReifyCrypto FFC Source # 
Instance details

Defined in Voting.Protocol.FFC

Methods

reifyCrypto :: FFC -> (forall c. (Reifies c FFC, CryptoParams FFC c) => Proxy c -> r) -> r Source #

Class Additive

class Additive a where Source #

An additive semigroup.

Minimal complete definition

zero, (+)

Methods

zero :: a Source #

(+) :: a -> a -> a infixl 6 Source #

sum :: Foldable f => f a -> a Source #

Instances
Additive Int Source # 
Instance details

Defined in Voting.Protocol.Arithmetic

Methods

zero :: Int Source #

(+) :: Int -> Int -> Int Source #

sum :: Foldable f => f Int -> Int Source #

Additive Integer Source # 
Instance details

Defined in Voting.Protocol.Arithmetic

Additive Natural Source # 
Instance details

Defined in Voting.Protocol.Arithmetic

CryptoParams crypto c => Additive (E crypto c) Source # 
Instance details

Defined in Voting.Protocol.Arithmetic

Methods

zero :: E crypto c Source #

(+) :: E crypto c -> E crypto c -> E crypto c Source #

sum :: Foldable f => f (E crypto c) -> E crypto c Source #

Reifies c FFC => Additive (G FFC c) Source # 
Instance details

Defined in Voting.Protocol.FFC

Methods

zero :: G FFC c Source #

(+) :: G FFC c -> G FFC c -> G FFC c Source #

sum :: Foldable f => f (G FFC c) -> G FFC c Source #

CryptoParams crypto c => Additive (Encryption crypto v c) Source #

Additive homomorphism. Using the fact that: groupGen ^x * groupGen ^y == groupGen ^(x+y).

Instance details

Defined in Voting.Protocol.Cryptography

Methods

zero :: Encryption crypto v c Source #

(+) :: Encryption crypto v c -> Encryption crypto v c -> Encryption crypto v c Source #

sum :: Foldable f => f (Encryption crypto v c) -> Encryption crypto v c Source #

Class Semiring

class Additive a => Semiring a where Source #

A multiplicative semigroup, with an additive semigroup (aka. a semiring).

Methods

one :: a Source #

(*) :: a -> a -> a infixl 7 Source #

Instances
Semiring Int Source # 
Instance details

Defined in Voting.Protocol.Arithmetic

Methods

one :: Int Source #

(*) :: Int -> Int -> Int Source #

Semiring Integer Source # 
Instance details

Defined in Voting.Protocol.Arithmetic

Semiring Natural Source # 
Instance details

Defined in Voting.Protocol.Arithmetic

CryptoParams crypto c => Semiring (E crypto c) Source # 
Instance details

Defined in Voting.Protocol.Arithmetic

Methods

one :: E crypto c Source #

(*) :: E crypto c -> E crypto c -> E crypto c Source #

Reifies c FFC => Semiring (G FFC c) Source # 
Instance details

Defined in Voting.Protocol.FFC

Methods

one :: G FFC c Source #

(*) :: G FFC c -> G FFC c -> G FFC c Source #

(^) :: forall crypto c. Reifies c crypto => Semiring (G crypto c) => G crypto c -> E crypto c -> G crypto c infixr 8 Source #

(b ^ e) returns the modular exponentiation of base b by exponent e.

Class Ring

class Semiring a => Ring a where Source #

A semiring that support substraction (aka. a ring).

Minimal complete definition

negate

Methods

negate :: a -> a Source #

(-) :: a -> a -> a infixl 6 Source #

Instances
Ring Int Source # 
Instance details

Defined in Voting.Protocol.Arithmetic

Methods

negate :: Int -> Int Source #

(-) :: Int -> Int -> Int Source #

Ring Integer Source # 
Instance details

Defined in Voting.Protocol.Arithmetic

CryptoParams crypto c => Ring (E crypto c) Source # 
Instance details

Defined in Voting.Protocol.Arithmetic

Methods

negate :: E crypto c -> E crypto c Source #

(-) :: E crypto c -> E crypto c -> E crypto c Source #

Reifies c FFC => Ring (G FFC c) Source # 
Instance details

Defined in Voting.Protocol.FFC

Methods

negate :: G FFC c -> G FFC c Source #

(-) :: G FFC c -> G FFC c -> G FFC c Source #

Class EuclideanRing

class Ring a => EuclideanRing a where Source #

A commutative ring that support division (aka. an euclidean ring).

Minimal complete definition

inverse

Methods

inverse :: a -> a Source #

(/) :: a -> a -> a infixl 7 Source #

Instances
Reifies c FFC => EuclideanRing (G FFC c) Source # 
Instance details

Defined in Voting.Protocol.FFC

Methods

inverse :: G FFC c -> G FFC c Source #

(/) :: G FFC c -> G FFC c -> G FFC c Source #

Type G

newtype G crypto c Source #

The type of the elements of a subgroup of a field.

Constructors

G 

Fields

Instances
Eq (G FFC c) Source # 
Instance details

Defined in Voting.Protocol.FFC

Methods

(==) :: G FFC c -> G FFC c -> Bool #

(/=) :: G FFC c -> G FFC c -> Bool #

Ord (G FFC c) Source # 
Instance details

Defined in Voting.Protocol.FFC

Methods

compare :: G FFC c -> G FFC c -> Ordering #

(<) :: G FFC c -> G FFC c -> Bool #

(<=) :: G FFC c -> G FFC c -> Bool #

(>) :: G FFC c -> G FFC c -> Bool #

(>=) :: G FFC c -> G FFC c -> Bool #

max :: G FFC c -> G FFC c -> G FFC c #

min :: G FFC c -> G FFC c -> G FFC c #

Show (G FFC c) Source # 
Instance details

Defined in Voting.Protocol.FFC

Methods

showsPrec :: Int -> G FFC c -> ShowS #

show :: G FFC c -> String #

showList :: [G FFC c] -> ShowS #

ToJSON (G FFC c) Source # 
Instance details

Defined in Voting.Protocol.FFC

Methods

toJSON :: G FFC c -> Value #

toEncoding :: G FFC c -> Encoding #

toJSONList :: [G FFC c] -> Value #

toEncodingList :: [G FFC c] -> Encoding #

Reifies c FFC => FromJSON (G FFC c) Source # 
Instance details

Defined in Voting.Protocol.FFC

Methods

parseJSON :: Value -> Parser (G FFC c) #

parseJSONList :: Value -> Parser [G FFC c] #

NFData (G FFC c) Source # 
Instance details

Defined in Voting.Protocol.FFC

Methods

rnf :: G FFC c -> () #

Reifies c FFC => Random (G FFC c) Source # 
Instance details

Defined in Voting.Protocol.FFC

Methods

randomR :: RandomGen g => (G FFC c, G FFC c) -> g -> (G FFC c, g) #

random :: RandomGen g => g -> (G FFC c, g) #

randomRs :: RandomGen g => (G FFC c, G FFC c) -> g -> [G FFC c] #

randoms :: RandomGen g => g -> [G FFC c] #

randomRIO :: (G FFC c, G FFC c) -> IO (G FFC c) #

randomIO :: IO (G FFC c) #

ToNatural (G FFC c) Source # 
Instance details

Defined in Voting.Protocol.FFC

Methods

nat :: G FFC c -> Natural Source #

Reifies c FFC => FromNatural (G FFC c) Source # 
Instance details

Defined in Voting.Protocol.FFC

Methods

fromNatural :: Natural -> G FFC c Source #

Reifies c FFC => EuclideanRing (G FFC c) Source # 
Instance details

Defined in Voting.Protocol.FFC

Methods

inverse :: G FFC c -> G FFC c Source #

(/) :: G FFC c -> G FFC c -> G FFC c Source #

Reifies c FFC => Ring (G FFC c) Source # 
Instance details

Defined in Voting.Protocol.FFC

Methods

negate :: G FFC c -> G FFC c Source #

(-) :: G FFC c -> G FFC c -> G FFC c Source #

Reifies c FFC => Semiring (G FFC c) Source # 
Instance details

Defined in Voting.Protocol.FFC

Methods

one :: G FFC c Source #

(*) :: G FFC c -> G FFC c -> G FFC c Source #

Reifies c FFC => Additive (G FFC c) Source # 
Instance details

Defined in Voting.Protocol.FFC

Methods

zero :: G FFC c Source #

(+) :: G FFC c -> G FFC c -> G FFC c Source #

sum :: Foldable f => f (G FFC c) -> G FFC c Source #

Type family FieldElement

type family FieldElement crypto :: * Source #

Instances
type FieldElement FFC Source #

The type of the elements of a Finite Prime Field.

A field must satisfy the following properties:

  • (f, (+), zero) forms an abelian group, called the additive group of f.
  • (NonNull f, (*), one) forms an abelian group, called the multiplicative group of f.
  • (*) is associative: (a*b)*c == a*(b*c) and a*(b*c) == (a*b)*c.
  • (*) and (+) are both commutative: a*b == b*a and a+b == b+a
  • (*) and (+) are both left and right distributive: a*(b+c) == (a*b) + (a*c) and (a+b)*c == (a*c) + (b*c)

The Natural is always within [0..fieldCharac-1].

Instance details

Defined in Voting.Protocol.FFC

Type E

newtype E crypto c Source #

An exponent of a (cyclic) subgroup of a field. The value is always in [0..groupOrder-1].

Constructors

E 

Fields

Instances
CryptoParams crypto c => Bounded (E crypto c) Source # 
Instance details

Defined in Voting.Protocol.Arithmetic

Methods

minBound :: E crypto c #

maxBound :: E crypto c #

CryptoParams crypto c => Enum (E crypto c) Source # 
Instance details

Defined in Voting.Protocol.Arithmetic

Methods

succ :: E crypto c -> E crypto c #

pred :: E crypto c -> E crypto c #

toEnum :: Int -> E crypto c #

fromEnum :: E crypto c -> Int #

enumFrom :: E crypto c -> [E crypto c] #

enumFromThen :: E crypto c -> E crypto c -> [E crypto c] #

enumFromTo :: E crypto c -> E crypto c -> [E crypto c] #

enumFromThenTo :: E crypto c -> E crypto c -> E crypto c -> [E crypto c] #

Eq (E crypto c) Source # 
Instance details

Defined in Voting.Protocol.Arithmetic

Methods

(==) :: E crypto c -> E crypto c -> Bool #

(/=) :: E crypto c -> E crypto c -> Bool #

Ord (E crypto c) Source # 
Instance details

Defined in Voting.Protocol.Arithmetic

Methods

compare :: E crypto c -> E crypto c -> Ordering #

(<) :: E crypto c -> E crypto c -> Bool #

(<=) :: E crypto c -> E crypto c -> Bool #

(>) :: E crypto c -> E crypto c -> Bool #

(>=) :: E crypto c -> E crypto c -> Bool #

max :: E crypto c -> E crypto c -> E crypto c #

min :: E crypto c -> E crypto c -> E crypto c #

Show (E crypto c) Source # 
Instance details

Defined in Voting.Protocol.Arithmetic

Methods

showsPrec :: Int -> E crypto c -> ShowS #

show :: E crypto c -> String #

showList :: [E crypto c] -> ShowS #

ToJSON (E crypto c) Source # 
Instance details

Defined in Voting.Protocol.Arithmetic

Methods

toJSON :: E crypto c -> Value #

toEncoding :: E crypto c -> Encoding #

toJSONList :: [E crypto c] -> Value #

toEncodingList :: [E crypto c] -> Encoding #

CryptoParams crypto c => FromJSON (E crypto c) Source # 
Instance details

Defined in Voting.Protocol.Arithmetic

Methods

parseJSON :: Value -> Parser (E crypto c) #

parseJSONList :: Value -> Parser [E crypto c] #

NFData (E crypto c) Source # 
Instance details

Defined in Voting.Protocol.Arithmetic

Methods

rnf :: E crypto c -> () #

CryptoParams crypto c => Random (E crypto c) Source # 
Instance details

Defined in Voting.Protocol.Arithmetic

Methods

randomR :: RandomGen g => (E crypto c, E crypto c) -> g -> (E crypto c, g) #

random :: RandomGen g => g -> (E crypto c, g) #

randomRs :: RandomGen g => (E crypto c, E crypto c) -> g -> [E crypto c] #

randoms :: RandomGen g => g -> [E crypto c] #

randomRIO :: (E crypto c, E crypto c) -> IO (E crypto c) #

randomIO :: IO (E crypto c) #

ToNatural (E crypto c) Source # 
Instance details

Defined in Voting.Protocol.Arithmetic

Methods

nat :: E crypto c -> Natural Source #

CryptoParams crypto c => FromNatural (E crypto c) Source # 
Instance details

Defined in Voting.Protocol.Arithmetic

Methods

fromNatural :: Natural -> E crypto c Source #

CryptoParams crypto c => Ring (E crypto c) Source # 
Instance details

Defined in Voting.Protocol.Arithmetic

Methods

negate :: E crypto c -> E crypto c Source #

(-) :: E crypto c -> E crypto c -> E crypto c Source #

CryptoParams crypto c => Semiring (E crypto c) Source # 
Instance details

Defined in Voting.Protocol.Arithmetic

Methods

one :: E crypto c Source #

(*) :: E crypto c -> E crypto c -> E crypto c Source #

CryptoParams crypto c => Additive (E crypto c) Source # 
Instance details

Defined in Voting.Protocol.Arithmetic

Methods

zero :: E crypto c Source #

(+) :: E crypto c -> E crypto c -> E crypto c Source #

sum :: Foldable f => f (E crypto c) -> E crypto c Source #

Class FromNatural

class FromNatural a where Source #

Methods

fromNatural :: Natural -> a Source #

Instances
FromNatural Natural Source # 
Instance details

Defined in Voting.Protocol.Arithmetic

CryptoParams crypto c => FromNatural (E crypto c) Source # 
Instance details

Defined in Voting.Protocol.Arithmetic

Methods

fromNatural :: Natural -> E crypto c Source #

Reifies c FFC => FromNatural (G FFC c) Source # 
Instance details

Defined in Voting.Protocol.FFC

Methods

fromNatural :: Natural -> G FFC c Source #

Class ToNatural

class ToNatural a where Source #

Methods

nat :: a -> Natural Source #

Instances
ToNatural Natural Source # 
Instance details

Defined in Voting.Protocol.Arithmetic

Methods

nat :: Natural -> Natural Source #

ToNatural (E crypto c) Source # 
Instance details

Defined in Voting.Protocol.Arithmetic

Methods

nat :: E crypto c -> Natural Source #

ToNatural (G FFC c) Source # 
Instance details

Defined in Voting.Protocol.FFC

Methods

nat :: G FFC c -> Natural Source #

bytesNat :: ToNatural n => n -> ByteString Source #

(bytesNat x) returns the serialization of x.