forked from meck93/evote-crypto
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvoting.ts
28 lines (24 loc) · 1008 Bytes
/
voting.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import BN = require('bn.js')
import { GlobalHelper, Summary } from '../index'
import { Cipher, Encryption, SystemParameters } from './index'
export const generateYesVote = (sp: SystemParameters, pk: BN): Cipher =>
Encryption.encrypt(1, sp, pk)
export const generateNoVote = (sp: SystemParameters, pk: BN): Cipher =>
Encryption.encrypt(0, sp, pk)
export const generateBaseVote = (): Cipher => {
return { a: GlobalHelper.newBN(1), b: GlobalHelper.newBN(1) }
} // encrypt with m=0, r=0
export const addVotes = (votes: Cipher[], sp: SystemParameters): Cipher => {
return votes.reduce(
(previous, current) => Encryption.add(previous, current, sp),
generateBaseVote()
)
}
export const tallyVotes = (sp: SystemParameters, sk: BN, votes: Cipher[]): number => {
return Encryption.decrypt1(addVotes(votes, sp), sk, sp).toNumber()
}
export const getSummary = (total: number, tallyResult: number): Summary => {
const yes = tallyResult - 0
const no = total - yes
return { total, yes, no }
}