Public ElGamal encryption key:


Elliptic curve Prime256

(4333ef31bd18e1ce786ad5a2b3c9b3b9cbc2b1edcf964aaaac9290ed2c7140b3, 031fd5b1d4f3b3e105787928d2897a05c9f0de25d2f1533a2bc6483401a94a09)

Public ECDSA signature keys:


Elliptic curve Prime192

Smartcard 1 -
(1a10f4fefbf47a8e0f40119a5535232d29c85e76b45eb923, e9ae5eb43cbcdbdd4179934effeb5858babf364c0ebe89c0)

Smartcard 2 -
(12c36b6734f9e2de7d81b2a53ddb186d11c3a8b946a1127c, 1c80560bb3df414821b5ca3ba00ab4594240a359bc19957e)

Committee -
(982e5297f6d32c494ba394566302d70ea6e7d36cf1a6c6be, 10a52a25780dd2195c5cf7b8b2b8b5ba5c5fb1c0ed1e4c99)

Single vote format (strings are in base 64):


*sc = Smartcard

sc1ID$counter1@sc2ID$counter2@SchoolID@E(v,c)
@sign_sc2(Enc(v,r) | sn1 | sn2)@g^r1@sign_sc1(g^r1 | sn1)@ g^r2@sign_sc2(g^r2 | sn2)

Element format:
Enc(v,c) -> "(x,y):(z,k)"
sign_scX(Y) -> "(r,s)"
g^r1, g^r2 -> "(x,y)"
scxID, counter, SchoolId -> Numbers

Signature format:
sign_sc2(E(v,r) | sn1 | sn2) = sign_sc2((x,y):(z,k)~sc1ID$counter1~sc2ID$counter2)
sign_sc1(g^r1 | sn1) = sign_sc1((x,y)~sc1ID$counter1)
sign_sc2(g^r2 | sn2) = sign_sc2((x,y)~sc2ID$counter2)

Votes file format:


The votes files consists of multiple votes. Each line in the file represents a single vote appearing in the format presented above.

Votes file signature format:


The format is an ECDSA pair "(r,s)" represented in hexadecimal form.

Ballot verification application (for Android):


You can easily download VeriBallot by scanning the following barcode or click the barcode and you'll be redirected to the Android MarketPlace.