diff --git a/src/main/communication.ts b/src/main/communication.ts index e378271..615091c 100644 --- a/src/main/communication.ts +++ b/src/main/communication.ts @@ -3,7 +3,6 @@ import { type SecretProof } from '../classes/ballot' import { ElectionData, SecondDeviceFinalMessage, SecondDeviceLoginResponse } from '../classes/communication' import { EnvironmentVariables } from './constants' import { ErrorType } from './error' -import data from '../mock/extended.json' type ResponseStatus = 'OK' | 'ERROR' abstract class ResponseBean { // eslint-disable-line @@ -129,18 +128,19 @@ class Comm implements Communication { } class CommMock implements Communication { + public constructor(public readonly data) {} public async electionData (): Promise> { - const electionData = ElectionData.fromJson(data.electionData) + const electionData = ElectionData.fromJson(this.data.electionData) return await Promise.resolve(new ResponseBeanOk(electionData)) } public async login (voterId: string, nonce: string, c: string, challenge: string): Promise> { - const loginResponse = SecondDeviceLoginResponse.fromJson(data.loginResponse.value) + const loginResponse = SecondDeviceLoginResponse.fromJson(this.data.loginResponse.value) return await Promise.resolve(new ResponseBeanOk(loginResponse)) } public async challenge (token: string, proof: SecretProof): Promise> { - const finalMessage = SecondDeviceFinalMessage.fromJson(data.finalMessage.value) + const finalMessage = SecondDeviceFinalMessage.fromJson(this.data.finalMessage.value) return await Promise.resolve(new ResponseBeanOk(finalMessage)) } } diff --git a/src/main/constants.ts b/src/main/constants.ts index a068ea1..118fadc 100644 --- a/src/main/constants.ts +++ b/src/main/constants.ts @@ -1,6 +1,6 @@ import { type ProofGenerator, ProofGeneratorImpl, ProofGeneratorMock } from '../algorithms/proof' import dataTest from '../mock/data.json' -import dataUI from '../mock/extended.json' +import dataUI from '../mock/data.json' import { Comm, CommMock, type Communication } from './communication' const k = '0373744f99d31509eb5f8caaabc0cc3fab70e571a5db4d762020723b9cd6ada260' const g = '0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798' @@ -22,12 +22,12 @@ class EnvironmentVariables { this.instance.mode = mode console.log('mode', mode) if (mode === 'mock') { - this.instance.proofGen = new ProofGeneratorMock(BigInt(dataUI.challengeRequest.challenge), BigInt(dataUI.challengeRequest.challengeRandomCoin)) - this.instance.comm = new CommMock() + this.instance.proofGen = new ProofGeneratorMock(BigInt(dataUI.challenge.challenge), BigInt(dataUI.challenge.challengeRandomCoin)) + this.instance.comm = new CommMock(dataUI) } if (mode === 'test') { this.instance.proofGen = new ProofGeneratorMock(BigInt(dataTest.challenge.challenge), BigInt(dataTest.challenge.challengeRandomCoin)) - this.instance.comm = new CommMock() + this.instance.comm = new CommMock(dataTest) } else if (mode === 'dev') { this.instance.proofGen = new ProofGeneratorImpl() this.instance.comm = new Comm() diff --git a/src/mock/data.json b/src/mock/data.json index 56671cf..cf39be8 100644 --- a/src/mock/data.json +++ b/src/mock/data.json @@ -2,7 +2,9 @@ "c": "vtWXj-YxxTV2ektefJ5pk7AWc9saoPbu6wJZUZ9R1t8ekU89x7SCYLcg8ODi3fHST4BTmAK97XN3XqWc", "vid": "voter8", "nonce": "4bf8cecf3fb4c4b4372005e13a53dce705123fab5b9e9288461e6d8fbf9644ea", + "url": "localhost:5000?c=vtWXj-YxxTV2ektefJ5pk7AWc9saoPbu6wJZUZ9R1t8ekU89x7SCYLcg8ODi3fHST4BTmAK97XN3XqWc&vid=voter8&nonce=4bf8cecf3fb4c4b4372005e13a53dce705123fab5b9e9288461e6d8fbf9644ea", "password": "196308", + "fingerprint": "b7e8e76c369d6a9ca268e40cde8347ac443040d6c4a1df3035744ace05b94e00849abf083ae5baa8fee462a723823054858387ec35462a49f93c2ea40b2fc876", "proof": { "e": "108039209026641834721998202775536164454916176078442584841940316235417705823230", "r": "44267717001895006656767798790813376597351395807170189462353830054915294464906" @@ -21,6 +23,7 @@ "challengeCommitment": "030e1a9be2459151057e9d731b524ca435f1c05bc0a95d3d82b30512d306172b17" }, "loginResponse": { + "value": { "token": "MDIwNWJmMmUxNDQ5NmY2OGMwZjg2ZjZiMzEzZjIxMGE5MzkzZWRiMDgzODIxZGNjNGY5OTE0Y2FiOWM1MWM5ZjJl.UjVXYXRxTlRzdk12QWRwOA==", "ballotVoterId": "0205bf2e14496f68c0f86f6b313f210a9393edb083821dcc4f9914cab9c51c9f2e", "electionId": "bfced618-34aa-4b78-ba5b-d21dc04a1a7e", @@ -43,13 +46,18 @@ "messages": {}, "allowInvalid": true, "initialMessage": "{\"secondDeviceParametersJson\":\"{\\\"publicKey\\\":\\\"030588c6c80497da9e50bf56a4853c9fd3dd945a5e2ed741ccf783c5538611da26\\\",\\\"verificationKey\\\":\\\"30820122300d06092a864886f70d01010105000382010f003082010a0282010100a52865923e9a08c8e58c0beacd3f40391f980b7db7a87c626d68dbf2a2a28a848402e5adc7ae7d3afef34b697bcf26e5c29b3be55850f2c7a308d90573d6b3788339104fc7579b07b483ccafa11f12ad123f6eaeb3a64a5cdc3f944ed613d5ad1bb6f8cbb704682d16391f731fac0c87dfe84859c9c9fd690a57cbe7a7bdf3a69d3e8457a1afd88112bf44538b6a04809b3e61ef9608c24ef1f02d6796e73bbeff49efca7a9cf443e36791bce307323d1a05f7fd8d8697b820f632eb50b19a2b4f20c958e193ec80b269e4a1b322bbd2a9d27ba91e7e1f5440bf944cdb1658f5d6d612a0b1d838cbbe19640fd4c5d967b03b95c388910c6ce0c3ecd9340af3f90203010001\\\",\\\"ballots\\\":[{\\\"type\\\":\\\"STANDARD_BALLOT\\\",\\\"id\\\":\\\"A\\\",\\\"title\\\":{\\\"default\\\":\\\"Ballot title\\\",\\\"value\\\":{}},\\\"lists\\\":[{\\\"id\\\":\\\"A1\\\",\\\"title\\\":{\\\"default\\\":\\\"First question!\\\",\\\"value\\\":{}},\\\"columnHeaders\\\":[{\\\"default\\\":\\\"\\\",\\\"value\\\":{}}],\\\"candidates\\\":[{\\\"id\\\":\\\"A1-1\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Yes\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"A1-2\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"No\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0}],\\\"maxVotesOnList\\\":1,\\\"minVotesOnList\\\":1,\\\"maxVotesForList\\\":0,\\\"minVotesForList\\\":0,\\\"voteCandidateXorList\\\":false}],\\\"showInvalidOption\\\":true,\\\"showAbstainOption\\\":false,\\\"maxVotes\\\":1,\\\"minVotes\\\":0,\\\"prohibitMoreVotes\\\":false,\\\"prohibitLessVotes\\\":false,\\\"calculateAvailableVotes\\\":false}]}\",\"comSeed\":\"a240ec46ff7adefb01b5b8d6fade3c96cb50c40f737a3cffbd98a0e9e6415ea2\",\"publicCredential\":\"0205bf2e14496f68c0f86f6b313f210a9393edb083821dcc4f9914cab9c51c9f2e\",\"ballot\":{\"encryptedChoice\":{\"ciphertexts\":[{\"x\":\"03bf956c38e14a6f81ed3621e165fb8c6000c28738f0e279fa28d2254d6b799eb1\",\"y\":\"02e19fbd88d9e1ad760653dde8e7f00fcc0d45e2b38ccc0cb2301f2239d4fcac3f\"}]},\"proofOfKnowledgeOfEncryptionCoins\":[{\"c\":\"79966540728819921955585823592173536360716995948664894735154654897488787881072\",\"f\":\"90388416755735603296616014607154433872748203957820626540975447356971608146868\"}],\"proofOfKnowledgeOfPrivateCredential\":{\"c\":\"4219105992081372606513358125198075081967495840895255912931536426010398533192\",\"f\":\"110464010855198853861051741469261963282081696331616030540127604123885412224008\"}},\"signatureHex\":\"529f3e8c7d1f0e2c8061526d8e1d8000c24ab60b32b3bda0ce959788483f977fb12da70ccb7ac154a698ef925cf7ca52e142f8eb22d23e5ccd42b63da227230bf886b13211f5c1f618a946a64f8566fd36849b46a156d4a35288204fd7b22e15fcdce8884b5d6e5c69b07ca271332ba14eced079402c735db642b82ae7478fe2efe849d8c50ba11b7d6985486607a54ea42c6394dc2060ac58cfa9c69cc750816dad43fb74d113ab7bc014e619649688fdbf96a29c894fa2cfc5d2bac8b897d0c8dbb3b79e5c17a90913dcb4ba583ea90e706891d38278745c1b4856f88d045c38b840d4fd427291187c250b2ed7bc846fa25440e98d3e9832f2047e52bc5207\",\"factorX\":[\"03aacd547442d178a6fd95d949d84ecc17bbf16bb2428b7598f6abce29a1459a5a\"],\"factorY\":[\"0228136a113abad456a2cb690b4a38cea7ef3ba7839b74550aa5bc53a5af88a868\"],\"factorA\":[\"0340abe2067662ca5b3b2d122e4aaf7971db4209763ee8949d506e8c974e6c2ddd\"],\"factorB\":[\"026bcbe81a01c159c9e42045dbded1ca37ac0d664e3fe3e24bac342c4db28c8647\"]}" + }, + "status": "OK" }, "challenge": { "challenge": "108039209026641834721998202775536164454916176078442584841940316235417705823230", "challengeRandomCoin": "44267717001895006656767798790813376597351395807170189462353830054915294464906" }, - "finalMessage": "{\"z\":[\"3633826251616834446657553661530373736489206587264246793596555854504147120873052400272122845815239659486740186516083053240689380948861192914781931033170662\"]}", + "finalMessage": { + "value": "{\"z\":[\"3633826251616834446657553661530373736489206587264246793596555854504147120873052400272122845815239659486740186516083053240689380948861192914781931033170662\"]}", + "status": "OK" + }, "decoded": [0,0,0,1], "receipt": [ "Project ID: bfced618-34aa-4b78-ba5b-d21dc04a1a7e", diff --git a/src/mock/extended.json b/src/mock/extended.json index 4c3855e..6f10814 100644 --- a/src/mock/extended.json +++ b/src/mock/extended.json @@ -2,7 +2,9 @@ "electionData": {"title":{"default":"Präsidiumswahl 2023 und Vorstandswahl 2023","value":{}},"languages":["DE"]}, "loginRequest": {"voterId":"voter24","nonce":"cd02cad970d6b5659e097d09545c605518d4061cf3751c5a19ffc298193d62f2","password":"423332","challengeCommitment":"0285f5259b3d5f637c76c09073eb4e422f1f18529423e64149bcb59b777c21f868"}, "loginResponse": {"value":{"token":"dm90ZXIyNA==.SGVMdjhHMkFlQ29hWjA3Lw==","ballotVoterId":"voter24","electionId":"ddc9a1c9-7e06-4b79-8d88-97942813ac5d","languages":["DE"],"title":{"default":"Präsidiumswahl 2023 und Vorstandswahl 2023","value":{}},"logo":{"default":{"hash":"","url":"img/CUSTOM_LOGO/default.png","alt":""},"value":{"DE":{"hash":"","url":"img/CUSTOM_LOGO/DE.png","alt":""}}},"publicLabel":"1:14","messages":{"ANCHOR.CANCEL":{"default":"Stimmabgabe abbrechen","value":{}},"ANCHOR.CHECK-VOTE":{"default":"Stimmabgabe prüfen","value":{}},"ANCHOR.CONTINUE":{"default":"Weiter zur Stimmabgabe","value":{}},"ANCHOR.CORRECT":{"default":"Auswahl korrigieren","value":{}},"ANCHOR.DATAPRIVACYPOLICY.TEXT":{"default":"Datenschutz","value":{}},"ANCHOR.DATAPRIVACYPOLICY.URL":{"default":"https://www.polyas.de/datenschutz","value":{}},"ANCHOR.IMPRINT.TEXT":{"default":"Impressum","value":{}},"ANCHOR.IMPRINT.URL":{"default":"https://www.polyas.de/impressum","value":{}},"ANCHOR.VOTE":{"default":"Verbindliche Stimmabgabe","value":{}},"AUTH.ID.LABEL":{"default":"Zugangs-PIN","value":{}},"AUTH.ID.PLACEHOLDER":{"default":"Zugangs-PIN","value":{}},"AUTH.LOGIN":{"default":"Am Wahlsystem anmelden","value":{}},"AUTH.PASS.HIDE":{"default":"Passwort verbergen","value":{}},"AUTH.PASS.LABEL":{"default":"Wahl-PIN","value":{}},"AUTH.PASS.PLACEHOLDER":{"default":"Wahl-PIN","value":{}},"AUTH.PASS.SHOW":{"default":"Passwort anzeigen","value":{}},"AUTH.TEXT":{"default":"Bitte geben Sie Ihre Zugangsdaten zum Online-Wahlsystem ein, um sich anzumelden. Ihre Zugangsdaten können Sie Ihrer Wahleinladung entnehmen.","value":{}},"AUTH.TEXT_SECURELINK":{"default":"","value":{}},"BROWSER_ADVICE":{"default":"Um Ihre Stimmabgabe sicher und reibungslos durchzuführen, nutzen Sie jedoch bitte die aktuellste Version Ihres Internetbrowsers.","value":{}},"CONFIRM.INFO_ALERT":{"default":"Ihre Auswahl wird Ihnen hier zur Bestätigung angezeigt. Sie können Ihre Auswahl korrigieren oder die Stimmabgabe bestätigen. Solange Sie noch nicht auf den Button \"Verbindliche Stimmabgabe\" geklickt haben, können Sie die Stimmabgabe jederzeit abbrechen. Ihre Vorauswahl wird in diesem Fall nicht zwischengespeichert. Wenn Sie Ihre Stimme jetzt verbindlich abgeben, wird diese wie folgt gezählt:","value":{}},"CONFIRM.INVALID.ALLOW_INVALID":{"default":"Wenn Sie Ihre Auswahl nicht korrigieren, wird dieser Stimmzettel als ungültig gezählt.","value":{}},"CONFIRM.INVALID.DISALLOW_INVALID":{"default":"Eine Stimmabgabe ist aufgrund der Wahlregeln nicht möglich. Bitte korrigieren Sie Ihre Auswahl.","value":{}},"CONFIRM.INVALID.DISALLOW_INVALID_NOTE":{"default":"Eine Stimmabgabe ist aufgrund der Wahlregeln nicht möglich.
Bitte korrigieren Sie Ihre Auswahl.","value":{}},"CONFIRM.INVALID.INTENTIONALLY_ABSTAINED":{"default":"Ihre Stimme wird als Enthaltung gewertet","value":{}},"CONFIRM.INVALID.INTENTIONALLY_INVALID":{"default":"Ihr Stimmzettel wird als ungültig gezählt.","value":{}},"CONFIRM.INVALID.MAXLISTSWITHCHOICES":{"default":"Sie haben Stimmen an zu viele Wahlvorschläge auf diesem Stimmzettel vergeben.","value":{}},"CONFIRM.INVALID.NO.VOTES_ON_BALLOT":{"default":"Sie haben keine Stimme vergeben. Ihr Stimmzettel wird als ungültig gezählt.","value":{}},"CONFIRM.INVALID.TOO_LESS.VOTES_CANDIDATE":{"default":"Sie haben zu wenige Stimmen an einen Kandidaten dieser Liste vergeben.","value":{}},"CONFIRM.INVALID.TOO_LESS.VOTES_FOR_CANDIDATE":{"default":"Sie haben zu wenige Stimmen an die einzelnen Wahlvorschläge vergeben.","value":{}},"CONFIRM.INVALID.TOO_LESS.VOTES_FOR_CANDIDATES":{"default":"Sie haben zu wenige Stimmen an die Kandidaten dieses Stimmzettels vergeben.","value":{}},"CONFIRM.INVALID.TOO_LESS.VOTES_FOR_LISTS":{"default":"Sie haben zu wenige Stimmen an die Listen dieses Stimmzettels vergeben.","value":{}},"CONFIRM.INVALID.TOO_LESS.VOTES_LIST":{"default":"Sie haben zu wenige Stimmen für diese Liste vergeben.","value":{}},"CONFIRM.INVALID.TOO_LESS.VOTES_ON_BALLOT":{"default":"Sie haben zu wenige Stimmen auf diesem Stimmzettel vergeben.","value":{}},"CONFIRM.INVALID.TOO_LESS.VOTES_TOTAL":{"default":"Sie haben zu wenige Stimmen an die Listen dieses Stimmzettels vergeben.","value":{}},"CONFIRM.INVALID.TOO_MANY.VOTES_FOR_CANDIDATES":{"default":"Sie haben zu viele Stimmen an die Kandidaten dieses Stimmzettels vergeben.","value":{}},"CONFIRM.INVALID.TOO_MANY.VOTES_FOR_LISTS":{"default":"Sie haben zu viele Stimmen an die Listen dieses Stimmzettels vergeben.","value":{}},"CONFIRM.INVALID.TOO_MANY.VOTES_LIST":{"default":"Sie haben zu viele Stimmen für diese Liste vergeben.","value":{}},"CONFIRM.INVALID.TOO_MANY.VOTES_ON_BALLOT":{"default":"Sie haben zu viele Stimmen auf diesem Stimmzettel vergeben.","value":{}},"CONFIRM.INVALID.TOO_MANY.VOTES_TOTAL":{"default":"Sie haben zu viele Stimmen auf dieser Liste vergeben.","value":{}},"ELECTION.VOTING.INTRODUCTION":{"default":"

Sie sind im Wählerverzeichnis eingetragen und haben im nächsten Schritt die Möglichkeit, Ihre Auswahl zu treffen. Nachdem Sie den Stimmzettel ausgefüllt haben, wird Ihnen dieser in einem weiteren Schritt zur Bestätigung angezeigt. Sie haben in diesem die Gelegenheit, Ihre Auswahl zu bestätigen oder zu korrigieren. Sofern Sie noch nicht auf den Button \"Verbindliche Stimmabgabe\" geklickt haben, können Sie die Stimmabgabe jederzeit abbrechen. In diesem Fall wird Ihre Auswahl nicht zwischengespeichert. Anschließend haben Sie während des Wahlzeitraums jederzeit die Möglichkeit, sich erneut anzumelden und Ihre Wahl zu treffen.

Bitte beachten Sie, dass Ihre personenbezogenen Daten während der Stimmabgabe nur anonymisiert verarbeitet werden, um das Wahlgeheimnis zu wahren.

Sie werden jetzt zur virtuellen Wahlkabine weitergeleitet. Bitte achten Sie darauf, dass Sie Ihre Wahl unbeobachtet treffen können.

","value":{}},"ELECTION.VOTING.SUBMISSION":{"default":"Ihre Stimme wird übermittelt","value":{}},"ELECTION.VOTING.VOTE_INVALID":{"default":"Ungültig wählen","value":{}},"ELECTION.VOTING.VOTES_AVAILABLE_BALLOT":{"default":"Anzahl zu vergebender Stimmen: {{count}}","value":{}},"ELECTION.VOTING.VOTES_AVAILABLE_LIST":{"default":"Anzahl zu vergebender Stimmen: {{count}}","value":{}},"ELECTION.VOTING.WELCOME":{"default":"Willkommen im POLYAS Online-Wahlsystem. Ihre Anmeldung war erfolgreich.","value":{}},"ELECTION.VOTING.YOUR_VOTE":{"default":"Ihre Stimme","value":{}},"ELECTION.WRITE_IN_INFO":{"default":"","value":{}},"ELECTION.WRITE_IN_PLACEHOLDER":{"default":"Option Write-In-Kandidat","value":{}},"ERROR.AUTH.ALREADY_VOTED":{"default":"Sie können sich nicht erneut am POLYAS Online-Wahlsystem anmelden, da Sie Ihre Stimme bereits abgegeben haben. Sollten Sie Ihre Stimme noch nicht abgegeben haben, kontaktieren Sie bitte Ihren Wahlveranstalter.","value":{}},"ERROR.AUTH.WRONG_CREDENTIALS":{"default":"Die von Ihnen genutzte Kombination aus Zugangs-PIN (Mitgliedsnummer) und Wahl-PIN (Passwort) ist nicht bekannt. Bitte überprüfen Sie, ob Sie Ihre Zugangsdaten korrekt eingegeben haben. Achten Sie bei der Eingabe auf Groß- und Kleinschreibung und geben Sie die Zugangsdaten genau so an, wie diese in Ihrer Wahleinladung stehen.

\nBitte verzichten Sie während der Durchführung der Stimmabgabe auf die Nutzung der \"Vor-\", \"Zurück-\" sowie \"Aktualisieren-\"Buttons Ihres Browsers und nutzen Sie nur die Schaltflächen der Wahlanwendung. Sollten weiterhin Probleme beim Login auftreten, kontaktieren Sie Ihren Wahlveranstalter.","value":{}},"ERROR.COM.NO_BACKEND":{"default":"Ihre Online-Wahl","value":{}},"ERROR.DEFAULT":{"default":"

Ein Fehler ist aufgetreten.

Bitte versuchen Sie es in einigen Minuten erneut. Sollten Sie weiterhin Probleme haben, kontaktieren Sie bitte Ihren Wahlveranstalter.

","value":{}},"ERROR.INTERNAL.UNEXPECTED_CLIENT_ERROR":{"default":"Der von Ihnen verwendete Browser wird durch das POLYAS Online-Wahlsystem nicht unterstützt. Um Ihre Stimmabgabe sicher und geheim durchzuführen, laden Sie die neueste Version Ihres Internetbrowsers herunter oder nutzen Sie einen anderen Browser. Sollten Sie weiterhin Probleme haben, kontaktieren Sie bitte Ihren Wahlveranstalter","value":{}},"ERROR.PAGE_VOTER_NOT_LOGGEDIN":{"default":"

Sie wurden zu Ihrer eigenen Sicherheit vom Wahlsystem abgemeldet.

Dies kann folgende Ursachen haben:

  • Sie waren zu lange inaktiv, in diesem Fall melden Sie sich bitte erneut am Wahlsystem an.
  • Sie verwenden einen veralteten Browser, bitte aktualisieren Sie diesen und melden Sie sich danach erneut an.
  • Sollten weiterhin Probleme auftreten, kontaktieren Sie bitte Ihren Wahlveranstalter.

","value":{}},"ERROR.PAGE.CLIENTERROR":{"default":"

Ein Fehler ist aufgetreten.

Bitte nutzen Sie einen anderen Browser.

","value":{}},"ERROR.PAGE.CLOSED":{"default":"Diese Online-Wahl ist bereits beendet.
Aus diesem Grund ist eine Stimmabgabe leider nicht mehr möglich. Sollten Sie weitere Fragen haben, kontaktieren Sie bitte Ihren Wahlveranstalter.","value":{}},"ERROR.PAGE.EXPIRED":{"default":"

Sie wurden zu Ihrer eigenen Sicherheit vom Wahlsystem abgemeldet.

Dies kann folgende Ursachen haben:

  • Sie waren zu lange inaktiv, in diesem Fall melden Sie sich bitte erneut am Wahlsystem an.
  • Sie verwenden einen veralteten Browser, bitte aktualisieren Sie diesen und melden Sie sich danach erneut an.

Sollten weiterhin Probleme auftreten, kontaktieren Sie bitte Ihren Wahlveranstalter.

","value":{}},"ERROR.PAGE.INTERNAL":{"default":"

Ein Fehler ist aufgetreten.

Bitte überprüfen Sie, ob Sie die korrekte URL angegeben haben und sich innerhalb des Wahlzeitraums befinden.

Überprüfen Sie bitte auch, ob auf Ihrem Endgerät eine aktuelle Version Ihres Interbrowsers installiert ist.

Sollten weiterhin Probleme auftreten, kontaktieren Sie bitte Ihren Wahlveranstalter.

","value":{}},"ERROR.PAGE.INVALID_TOKEN":{"default":"

Es ist ein Fehler aufgetreten, die Stimmabgabe konnte nicht abgeschlossen werden.

Bitte versuchen Sie es erneut. Sollten Sie weiterhin Probleme haben, kontaktieren Sie bitte Ihren Wahlveranstalter.

","value":{}},"ERROR.PAGE.NOT_AUTHENTICATED":{"default":"

Bei der Übermittlung Ihrer Daten kam es zu einem Fehler.

Bitte wiederholen Sie den Wahlvorgang.

Sollten weiterhin Probleme auftreten, kontaktieren Sie bitte Ihren Wahlveranstalter.

","value":{}},"ERROR.PAGE.SECURELINK_MISSING_PARAMETER":{"default":"Fehlende Parameter:","value":{}},"ERROR.PAGE.SECURELINK_PIN":{"default":"Wähler-ID (pin)","value":{}},"ERROR.PAGE.SECURELINK_SIG":{"default":"Signatur (sig)","value":{}},"ERROR.PAGE.SECURELINK_TTL":{"default":"Gültigkeitsdauer (ttl)","value":{}},"ERROR.PAGE.TOKEN_PARSING_ERROR":{"default":"

Es ist ein Fehler aufgetreten, die Stimmabgabe konnte nicht abgeschlossen werden.

Bitte versuchen Sie es erneut. Sollten Sie weiterhin Probleme haben, kontaktieren Sie bitte Ihren Wahlveranstalter.

","value":{}},"ERROR.PAGE.VOTEERROR":{"default":"

Es ist ein Fehler aufgetreten, die Stimmabgabe konnte nicht abgeschlossen werden.

Bitte versuchen Sie es erneut. Sollten Sie weiterhin Probleme haben, kontaktieren Sie bitte Ihren Wahlveranstalter.

","value":{}},"ERROR.RELOGIN":{"default":"Erneut anmelden","value":{}},"ERROR.SECURELINK_COULD_NOT_GENERATE_SIGNATURE":{"default":"Bitte kontaktieren Sie Ihren Wahlveranstalter.","value":{}},"ERROR.SECURELINK_DUPLICATE_PINS":{"default":"Ihre Wähler-ID ist mehrfach im Wählerverzeichnis hinterlegt, wir können Sie daher nicht eindeutig identifizieren. Bitte kontaktieren Sie Ihren Wahlleiter.","value":{}},"ERROR.SECURELINK_INVALID_SIGNATURE":{"default":"Bitte kontaktieren Sie Ihren Wahlveranstalter.","value":{}},"ERROR.SECURELINK_NOT_ACTIVE":{"default":"Der Securelink ist bei dieser Wahl nicht aktiviert bitte kontaktieren Sie Ihren Wahlveranstalter.","value":{}},"ERROR.SECURELINK_STALE_TTL":{"default":"Ihr Securelink ist abgelaufen. Bitte melden Sie sich erneut im geschützten Mitgliederbereich Ihrer Organisation an und klicken Sie erneut auf den Link zu Online-Wahllokal.","value":{}},"ERROR.SECURELINK_WRONG_TTL_FORMAT":{"default":"Bitte kontaktieren Sie Ihren Wahlleiter.","value":{}},"ERROR.SELFTEST.HEADER":{"default":"Ein Fehler ist aufgetreten.","value":{}},"ERROR.SELFTEST.TEXT":{"default":"Bitte nutzen Sie einen anderen Browser.","value":{}},"ERROR.STATE.CLOSED":{"default":"Das Online-Wahllokal hat zur Zeit nicht geöffnet. Den Wahlzeitraum können Sie Ihrer Wahleinladung entnehmen. Sollten Sie weiterhin Probleme bei der Anmeldung am Wahlsystem haben, kontaktieren Sie bitte Ihren Wahlveranstalter.","value":{}},"LANG.DE":{"default":"Deutsch","value":{}},"LANG.EN":{"default":"Englisch","value":{}},"LANG.FR":{"default":"Französisch","value":{}},"LANG.IT":{"default":"Italienisch","value":{}},"LANG.NL":{"default":"Niederländisch","value":{}},"META.TITLE.STEP_0":{"default":"Ein Fehler ist aufgetreten","value":{}},"META.TITLE.STEP_1":{"default":"Anmelden","value":{}},"META.TITLE.STEP_2":{"default":"Willkommen","value":{}},"META.TITLE.STEP_3":{"default":"Stimmabgabe","value":{}},"META.TITLE.STEP_4":{"default":"Stimmabgabe prüfen","value":{}},"META.TITLE.STEP_5":{"default":"Vielen Dank","value":{}},"REDIRECT.UNDEFINED_TEXT":{"default":"Bitte kontaktieren Sie Ihren Wahlberanstalter.","value":{}},"REDIRECT.UNDEFINED_TITLE":{"default":"Sie sind nicht im Wahlsystem angemeldet.","value":{}},"SECURELINK.TTL_EXPIRE_DATE":{"default":"Ihr Securelink ist noch gültig bis:","value":{}},"SESSION.RELOGIN.ERROR.PASSWORD.EMPTY":{"default":"Das Feld \"Passwort\" darf nicht leer sein.","value":{}},"SESSION.RELOGIN.ERROR.PASSWORD.WRONG":{"default":"Das von Ihnen angegebene Passwort ist nicht korrekt.","value":{}},"SESSION.RELOGIN.MODAL.LABEL":{"default":"Bitte geben Sie ihr Passwort erneut ein.","value":{}},"SESSION.RELOGIN.MODAL.SUBMIT":{"default":"Abschicken","value":{}},"SESSION.RELOGIN.MODAL.TITLE":{"default":"Sicherheitsabfrage","value":{}},"THANKYOU.BALLOT_AUDIT":{"default":"Individuelle Verifikation:
\nSie können nun überprüfen, ob Ihr(e) Stimmzettel korrekt in die digitale Wahlurne eingegangen sind. Dazu stehen Ihnen unabhängige Verifikationstools zur Verfügung. Wählen sie dazu weiter unten einen Anbieter aus, dem sie vertrauen. Scannen Sie anschließend den untenstehenden QR-Code mit einem geeigneten Zweitgerät (z.B. Smartphone). Auf Ihrem Zweitgerät öffnet sich anschließend eine Web-App, in der Sie das unten angezeigte zeitbasierte Einmalpasswort eingeben müssen, um sich anzumelden. Anschließend wird Ihnen ein Abbild Ihres Stimmzettels bzw. Ihrer Stimmzettel angezeigt.

\nWeitere Informationen finden Sie hier: https://gi.de/wahlen/faq

\nFolgende Verifikations-Anbieter stehen ihnen zur Verfügung:

\nAnbieter: famoser.ch
\t\t\nEntwickler: Florian Moser, INRIA
\nHosting: famoser.ch
\n
\nAnbieter: KIT
\nEntwickler: Felix Dörre, Michael Kirsten
\nHosting: KIT\n

\t\t\nAnbieter: Universität Stuttgart
\nEntwickler: Nicolas Huber, Oliver Koppenhöfer
\nHosting: Gesellschaft für Informatik, Bonn\n

\nAnbieter: POLYAS GmbH
\nEntwickler: POLYAS GmbH
\nHosting: POLYAS GmbH","value":{}},"THANKYOU.VOTED_HEADLINE":{"default":"Ihre Stimme ist erfolgreich in der digitalen Wahlurne eingangen!","value":{}},"THANKYOU.VOTED_TEXT":{"default":"Sie können dieses Browserfenster jetzt schließen.","value":{}},"VERIFY.AUDIT.WITH":{"default":"","value":{}},"VERIFY.QR.INFO":{"default":"Mit dem Scannen des QR Codes startet die Überprüfung Ihres Stimmzettels durch das Verifikationstool des Anbieters","value":{}},"VERIFY.SELECT.LABEL":{"default":"Bitte wählen Sie einen Anbieter aus, mit dem sie Ihre Stimmzettel überprüfen:","value":{}},"VERIFY.SELECT.PLACEHOLDER":{"default":"Wählen Sie hier den gewünschten Anbieter","value":{}},"VERIFY.WITH":{"default":"Achtung! Schließen Sie dieses Fenster nicht, bevor Sie die individuelle Verifikation durchgeführt haben. Sie können nicht auf diese Seite zurückkehren. Mit dem Schließen der Seite beenden Sie die Möglichkeit zur individuellen Verifikation.

\nBitte beachten Sie, dass sich Ihr zeitbasiertes Einmalpasswort alle 30 Sekunden ändert. Die Überprüfung ist innerhalb einer halben Stunde nach Ihrer Stimmabgabe möglich.","value":{}},"VOTE.INFO_ALERT":{"default":"Sie haben nun die Möglichkeit, Ihre Auswahl zu treffen. Bitte beachten Sie die Wahlregeln. Diese können Sie dem Stimmzettel entnehmen.

Detaillierte Informationen zur GI und zu den Kandidatinnen und Kandidaten finden Sie unter https://gi.de/wahlen/.
\nDie Wahl läuft bis zum 8. Dezember 2023 12:00 Uhr. Bei Fragen wenden Sie bitte per E-Mail unter onlinewahlen@gi.de an den Wahlleiter Prof. Dr. Gerrit Hornung, LL.M.","value":{}},"VOTE.NO_BALLOTS":{"default":"Es liegen keine Stimmzettel vor, für die Sie abstimmen können. Dies kann verschiedene Ursachen haben. Bitte kontaktieren Sie Ihren Wahlveranstalter, um Näheres zu erfahren. Sie können das Browserfenster nun schließen.","value":{}}},"allowInvalid":true,"initialMessage":"{\"secondDeviceParametersJson\":\"{\\\"publicKey\\\":\\\"0271ffc6dc9c7f6a79cfced6543c8b7feb79e4eac2a542c6e4de90326039bf81c8\\\",\\\"verificationKey\\\":\\\"30820122300d06092a864886f70d01010105000382010f003082010a028201010088a9e0d615a8dba47ae84e8a4df087f69dc1c03c16b54b540d84e52ab2e697ac362e1b55a5a05abaa2da5c17f84051bcf3387ef0947f8117a871c3c569b7085b5e18476da25a6db6aa8d260be53ec7e651a158e5bcd26cc99898e0a8d8014d13cdbe5c749ce821eb1f122b53edcf8954a3e8411859f3eed150375b858b6dd055cba5d801a6df33a5078e75ad6a4ac7f7cfe5560d415b008724ab7db433d6c6c2c09d0f9f20d8004710779fd4821330aab5f0ba618591386cac2574b2282ee96891ddf1a1a85c450241e91c26a312aa477be56e21b926b6e197c5cdd45e5c780988919aef356e2d5e6c3057ab1b95f0099c0302c0fa0a92f0876f3ff1bfd51dbb0203010001\\\",\\\"ballots\\\":[{\\\"type\\\":\\\"STANDARD_BALLOT\\\",\\\"id\\\":\\\"1\\\",\\\"contentAbove\\\":{\\\"value\\\":{\\\"default\\\":{\\\"data\\\":{},\\\"nodes\\\":[{\\\"data\\\":{},\\\"nodes\\\":[{\\\"text\\\":\\\"Sie können bei jeder Person \\\\\\\"ja\\\\\\\" oder \\\\\\\"nein\\\\\\\" ankreuzen. Kreuzen Sie gar nichts oder bei einer Person beides an, ist Ihre Wahl für den Vorstand ungültig, ebenso, wie wenn Sie \\\\\\\"ungültig\\\\\\\" für den gesamten Stimmzettel ankreuzen.\\\",\\\"marks\\\":[],\\\"object\\\":\\\"text\\\"}],\\\"type\\\":\\\"paragraph\\\",\\\"object\\\":\\\"block\\\"}],\\\"object\\\":\\\"document\\\"},\\\"value\\\":{}},\\\"contentType\\\":\\\"RICH_TEXT\\\"},\\\"title\\\":{\\\"default\\\":\\\"1. Stimmzettel: Vorstandswahl 2023\\\",\\\"value\\\":{}},\\\"lists\\\":[{\\\"id\\\":\\\"2\\\",\\\"title\\\":{\\\"default\\\":\\\"Präsidentin\\\",\\\"value\\\":{}},\\\"columnHeaders\\\":[{\\\"default\\\":\\\"Christine Regitz, SAP SE\\\",\\\"value\\\":{}}],\\\"columnProperties\\\":[{\\\"hide\\\":false}],\\\"candidates\\\":[{\\\"id\\\":\\\"3\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Ja\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"4\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Nein\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0}],\\\"maxVotesOnList\\\":1,\\\"minVotesOnList\\\":0,\\\"maxVotesForList\\\":0,\\\"minVotesForList\\\":0,\\\"voteCandidateXorList\\\":false},{\\\"id\\\":\\\"5\\\",\\\"title\\\":{\\\"default\\\":\\\"Vizepräsident\\\",\\\"value\\\":{}},\\\"columnHeaders\\\":[{\\\"default\\\":\\\"Prof. Dr. Erhard Rahm, Universität Leipzig\\\",\\\"value\\\":{}}],\\\"columnProperties\\\":[{\\\"hide\\\":false}],\\\"candidates\\\":[{\\\"id\\\":\\\"6\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Ja\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"7\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Nein\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0}],\\\"maxVotesOnList\\\":1,\\\"minVotesOnList\\\":0,\\\"maxVotesForList\\\":0,\\\"minVotesForList\\\":0,\\\"voteCandidateXorList\\\":false},{\\\"id\\\":\\\"8\\\",\\\"title\\\":{\\\"default\\\":\\\"Vizepräsidentin\\\",\\\"value\\\":{}},\\\"columnHeaders\\\":[{\\\"default\\\":\\\"Dr. Katharina Weitz, Universität Augsburg\\\",\\\"value\\\":{}}],\\\"columnProperties\\\":[{\\\"hide\\\":false}],\\\"candidates\\\":[{\\\"id\\\":\\\"9\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Ja\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"10\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Nein\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0}],\\\"maxVotesOnList\\\":1,\\\"minVotesOnList\\\":0,\\\"maxVotesForList\\\":0,\\\"minVotesForList\\\":0,\\\"voteCandidateXorList\\\":false},{\\\"id\\\":\\\"11\\\",\\\"title\\\":{\\\"default\\\":\\\"Vizepräsident\\\",\\\"value\\\":{}},\\\"columnHeaders\\\":[{\\\"default\\\":\\\"Prof. Dr. Martin R. Wolf, Institut für Digitalisierung Aachen (IDA) an der FH Aachen\\\",\\\"value\\\":{}}],\\\"columnProperties\\\":[{\\\"hide\\\":false}],\\\"candidates\\\":[{\\\"id\\\":\\\"12\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Ja\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"13\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Nein\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0}],\\\"maxVotesOnList\\\":1,\\\"minVotesOnList\\\":0,\\\"maxVotesForList\\\":0,\\\"minVotesForList\\\":0,\\\"voteCandidateXorList\\\":false}],\\\"contentBelow\\\":{\\\"value\\\":{\\\"default\\\":{\\\"data\\\":{},\\\"nodes\\\":[{\\\"data\\\":{},\\\"nodes\\\":[{\\\"text\\\":\\\"\\\",\\\"marks\\\":[],\\\"object\\\":\\\"text\\\"}],\\\"type\\\":\\\"paragraph\\\",\\\"object\\\":\\\"block\\\"}],\\\"object\\\":\\\"document\\\"},\\\"value\\\":{}},\\\"contentType\\\":\\\"RICH_TEXT\\\"},\\\"showInvalidOption\\\":true,\\\"showAbstainOption\\\":false,\\\"maxVotes\\\":4,\\\"minVotes\\\":1,\\\"prohibitMoreVotes\\\":false,\\\"prohibitLessVotes\\\":false,\\\"externalIdentification\\\":\\\"Sheet2\\\",\\\"calculateAvailableVotes\\\":false},{\\\"type\\\":\\\"STANDARD_BALLOT\\\",\\\"id\\\":\\\"14\\\",\\\"contentAbove\\\":{\\\"value\\\":{\\\"default\\\":{\\\"data\\\":{},\\\"nodes\\\":[{\\\"data\\\":{},\\\"nodes\\\":[{\\\"text\\\":\\\"Sie haben drei Stimmen zu Verfügung. Geben Sie mehr als drei oder keine Stimme ab, ist Ihre Wahl für das Präsidium ungültig.\\\",\\\"marks\\\":[],\\\"object\\\":\\\"text\\\"}],\\\"type\\\":\\\"paragraph\\\",\\\"object\\\":\\\"block\\\"}],\\\"object\\\":\\\"document\\\"},\\\"value\\\":{}},\\\"contentType\\\":\\\"RICH_TEXT\\\"},\\\"title\\\":{\\\"default\\\":\\\"2. Stimmzettel: Präsidiumswahl 2023\\\",\\\"value\\\":{}},\\\"lists\\\":[{\\\"id\\\":\\\"15\\\",\\\"title\\\":{\\\"default\\\":\\\"Kandidatinnen und Kandidaten für das GI-Präsidium\\\",\\\"value\\\":{}},\\\"columnHeaders\\\":[],\\\"columnProperties\\\":[{\\\"hide\\\":false}],\\\"candidates\\\":[{\\\"id\\\":\\\"16\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Andreas Chemnitz, cv cryptovision GmbH \\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"17\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Sascha Manns, Office Partner \\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"18\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Carolin Neumann, IBM Deutschland & BYTE Challenge \\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"19\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Prof. Dr. Harald Wehnes, Julius Maximilians Universität \\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"20\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Dr. Jan Sürmeli, FZI Forschungszentrum Informatik\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"21\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Univ.-Prof. Dr. Maria A. Wimmer, Universität Koblenz \\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0}],\\\"maxVotesOnList\\\":3,\\\"minVotesOnList\\\":1,\\\"maxVotesForList\\\":0,\\\"minVotesForList\\\":0,\\\"voteCandidateXorList\\\":false}],\\\"contentBelow\\\":{\\\"value\\\":{\\\"default\\\":\\\"\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"},\\\"showInvalidOption\\\":true,\\\"showAbstainOption\\\":false,\\\"maxVotes\\\":3,\\\"minVotes\\\":1,\\\"prohibitMoreVotes\\\":false,\\\"prohibitLessVotes\\\":false,\\\"externalIdentification\\\":\\\"Sheet1\\\",\\\"calculateAvailableVotes\\\":false}]}\",\"comSeed\":\"9227b98b6e59c392f5145d8b2b34526b01daa38f6c351a70e481409369cc4ddf\",\"publicCredential\":\"035599e3341936d90bbf792482bae21cd25c72100abbb2f5b845101989514fbf27\",\"ballot\":{\"encryptedChoice\":{\"ciphertexts\":[{\"x\":\"033619946c957e24526c60a2b1ecaec496a1ea9c308f654eb0037b9c0c73671949\",\"y\":\"037041ee3586f07f8f802c6d35397300d7f8e67d351ac0fcffe0fc772b21023f96\"}]},\"proofOfKnowledgeOfEncryptionCoins\":[{\"c\":\"38350190428771601162775147324234983334864220361858224371592276473539890483583\",\"f\":\"29009326725164361378294937664736560654087371474097467848580980780043291308616\"}],\"proofOfKnowledgeOfPrivateCredential\":{\"c\":\"88354074653622600893895116975179287209843370902328605918382631091630818129194\",\"f\":\"39286887905822375578170584074198715769432562030877678999155452657494520461683\"}},\"signatureHex\":\"0e8f5b309c067e004831b67cc6c5d1d10d34eee62d1bd21e6ad2f0dcc3b474202672fc232b92d17627865bba4aea138604d8c341acaba068939d3c51d0d89b9912e51ab23633cc7d18cc49fb470d30a4e10e357aa1a08d244d5924a9e08af4945424bb0c1f8a0a69502912e5d262985d19eac7d48ae9353a0a3f56602ffd8281b300729fdcce1e8aaf1a10d98d89d101581c8b793599bc3cf8f1a9d5336da68483a54f86b432802ef236eb1983ac8bc651f59fa77ecc9df1b679cb062a6a2a9148e26bfb3820d8b2f8aabf9a1ca09f47b9bb8ff57b0293ed1b34cf711d1ec66a7c355325db4d2b722834c981cc5b337a270148bf089de95d65655b94fb977449\",\"factorX\":[\"02794b22ebb955fd5921dc6591f59c7f867fcbf002d5a04caa7e142d57cff3c78f\"],\"factorY\":[\"03c42e626875e43f9c9bf924f274411025934d341b856ca2cb0d4f251acf9f98d3\"],\"factorA\":[\"03b6b0f0dd3fc4f8c43d29d53579d69a2bd91f5dbaeea3991dd79849a02fcd1046\"],\"factorB\":[\"036192221c51ea19ee6eb89675439ad23a84d272a81d263b3835d9cab7d37418e6\"]}"},"status":"OK"}, - "challengeRequest": {"challenge":"108498025763500742883590697308724991556043991982575825450818750327791262604123","challengeRandomCoin":"23674456062586866422264241006244664624316209643495519815885232527870012720236"}, + "challenge": { + "challenge":"108498025763500742883590697308724991556043991982575825450818750327791262604123", "challengeRandomCoin":"23674456062586866422264241006244664624316209643495519815885232527870012720236" + }, "finalMessage": {"value":"{\"z\":[\"9527399632055089768915534375772913039258945405545363338506663943520012054452437628577780682283146416906956920871229921795620034155683540417937417777392533\"]}","status":"OK"}, "link": "http://localhost:5000/?c=kFpsHZFLr8j-2yDySJzMhLTyEFx6Nu4oqxFSE4oIaeV3IZRlF0987AlWeCQC4AHpznYchLE_gI3nwXmS&vid=voter24&nonce=cd02cad970d6b5659e097d09545c605518d4061cf3751c5a19ffc298193d62f2" } \ No newline at end of file diff --git a/src/mock/testinstanz.json b/src/mock/testinstanz.json index d14e319..fe56a35 100644 --- a/src/mock/testinstanz.json +++ b/src/mock/testinstanz.json @@ -11,5 +11,6 @@ "initialMessage":"{\"secondDeviceParametersJson\":\"{\\\"publicKey\\\":\\\"03df1af0cb7023743eb370fd1d48a7dcc5c3f1401a78ddaa39b945f7e1f893f2f0\\\",\\\"verificationKey\\\":\\\"30820122300d06092a864886f70d01010105000382010f003082010a0282010100c81ffa7aad8266407805a4fe7bd73cab7f60519ae5329f08208d002aed867e25cae5bd8ccb044015705b88244923d66692ee57cb27dc6c82184990fdf46798e262df004c5d47d3b883a19b8774fdfc76fab630657f606d52c3f9abebe668c61edd5868848ef930e8b4d422624ebe672abfc03545768ecd9215b2ee6b3388646fda179c8c329686a92d8e9968b1e287b20c95a0fdd305fea0864fd0eb50edbced5c1f468fc6633ad726d07ff5a8c829b5755e5c7bc51be6e242d345bc28d59dcfe736ec1f9c9c874e56cdc93c9d2197620d91b4fd5a703440cd02b44acb248eedc2ea49bba67b65c908daf8a7736969de4b9d470741fdbfcc05ff07ded8e75d290203010001\\\",\\\"ballots\\\":[{\\\"type\\\":\\\"STANDARD_BALLOT\\\",\\\"id\\\":\\\"1\\\",\\\"contentAbove\\\":{\\\"value\\\":{\\\"default\\\":\\\"\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"},\\\"title\\\":{\\\"default\\\":\\\"Langer Stimmzettel\\\",\\\"value\\\":{}},\\\"lists\\\":[{\\\"id\\\":\\\"2\\\",\\\"columnHeaders\\\":[{\\\"default\\\":\\\"Spalte 1\\\",\\\"value\\\":{}}],\\\"columnProperties\\\":[{\\\"hide\\\":false}],\\\"candidates\\\":[{\\\"id\\\":\\\"3\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 1\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"4\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 2\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"5\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 3\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"6\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 4\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"7\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 5\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"8\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 6\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"9\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 7\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"10\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 8\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"11\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 9\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"12\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 10\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"13\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 11\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"14\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 12\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"15\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 13\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"16\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 14\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"17\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 15\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"18\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 16\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"19\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 17\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"20\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 18\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"21\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 19\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"22\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 20\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"23\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 21\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"24\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 22\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"25\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 23\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"26\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 24\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"27\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 25\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"28\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 26\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"29\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 27\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"30\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 28\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"31\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 29\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"32\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 30\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"33\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 31\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"34\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 32\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"35\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 33\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"36\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 34\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"37\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 35\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"38\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 36\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"39\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 37\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"40\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 38\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"41\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 39\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"42\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 40\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"43\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 41\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"44\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 42\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"45\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 43\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"46\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 44\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"47\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 45\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"48\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 46\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"49\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 47\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"50\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 48\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"51\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 49\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"52\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 50\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"53\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 51\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"54\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 52\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"55\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 53\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"56\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 54\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"57\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 55\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"58\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 56\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"59\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 57\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"60\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 58\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"61\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 59\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"62\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 60\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"63\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 61\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"64\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 62\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"65\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 63\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"66\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 64\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"67\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 65\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"68\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 66\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"69\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 67\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"70\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 68\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"71\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 69\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"72\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 70\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"73\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 71\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"74\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 72\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"75\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 73\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"76\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 74\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"77\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 75\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"78\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 76\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"79\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 77\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"80\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 78\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"81\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 79\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"82\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 80\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"83\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 81\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"84\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 82\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"85\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 83\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"86\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 84\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"87\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 85\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"88\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 86\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"89\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 87\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"90\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 88\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"91\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 89\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"92\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 90\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"93\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 91\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"94\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 92\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"95\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 93\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"96\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 94\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"97\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 95\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"98\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 96\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"99\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 97\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"100\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 98\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"101\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 99\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"102\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 100\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"103\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 101\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"104\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 102\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"105\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 103\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"106\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 104\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"107\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 105\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"108\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 106\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"109\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 107\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"110\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 108\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"111\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 109\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"112\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 110\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"113\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 111\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"114\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 112\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"115\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 113\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"116\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 114\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"117\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 115\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"118\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 116\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"119\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 117\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"120\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 118\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"121\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 119\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"122\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 120\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"123\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 121\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"124\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 122\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"125\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 123\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"126\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 124\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"127\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 125\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"128\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 126\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"129\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 127\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"130\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 128\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"131\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 129\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"132\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 130\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"133\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 131\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"134\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 132\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"135\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 133\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"136\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 134\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"137\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 135\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"138\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 136\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"139\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 137\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"140\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 138\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"141\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 139\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"142\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 140\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"143\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 141\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"144\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 142\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"145\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 143\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"146\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 144\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"147\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 145\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"148\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 146\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"149\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 147\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"150\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 148\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"151\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 149\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"152\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 150\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"153\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 151\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"154\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 152\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"155\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 153\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"156\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 154\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"157\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 155\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"158\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 156\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"159\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 157\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"160\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 158\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"161\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 159\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"162\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 160\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"163\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 161\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"164\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 162\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"165\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 163\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"166\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 164\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"167\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 165\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"168\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 166\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"169\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 167\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"170\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 168\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"171\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 169\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"172\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 170\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"173\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 171\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"174\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 172\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"175\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 173\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"176\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 174\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"177\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 175\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"178\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 176\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"179\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 177\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"180\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 178\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"181\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 179\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"182\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 180\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"183\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 181\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"184\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 182\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"185\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 183\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"186\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 184\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"187\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 185\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"188\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 186\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"189\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 187\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"190\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 188\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"191\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 189\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"192\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 190\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"193\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 191\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"194\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 192\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"195\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 193\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"196\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 194\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"197\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 195\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"198\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 196\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"199\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 197\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"200\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 198\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"201\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 199\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0},{\\\"id\\\":\\\"202\\\",\\\"columns\\\":[{\\\"value\\\":{\\\"default\\\":\\\"Kandidat 200\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"}],\\\"maxVotes\\\":1,\\\"minVotes\\\":0}],\\\"maxVotesOnList\\\":1,\\\"minVotesOnList\\\":0,\\\"maxVotesForList\\\":0,\\\"minVotesForList\\\":0,\\\"voteCandidateXorList\\\":false}],\\\"contentBelow\\\":{\\\"value\\\":{\\\"default\\\":\\\"\\\",\\\"value\\\":{}},\\\"contentType\\\":\\\"TEXT\\\"},\\\"showInvalidOption\\\":true,\\\"showAbstainOption\\\":false,\\\"maxVotes\\\":1,\\\"minVotes\\\":0,\\\"prohibitMoreVotes\\\":false,\\\"prohibitLessVotes\\\":false,\\\"externalIdentification\\\":\\\"Sheet1\\\",\\\"calculateAvailableVotes\\\":false}]}\",\"comSeed\":\"3bba2f45fa012803af4b5528bc9020406e92134edbad12f39269cf08f6ddcfc9\",\"publicCredential\":\"03f37d9de2db6d47770aa03d148526da34d7ac588d7729d64c2b48af03207930ab\",\"ballot\":{\"encryptedChoice\":{\"ciphertexts\":[{\"x\":\"026b83e2fa5052323dd09d15a3aacf3b84dca671ab88e7745067744327725f81be\",\"y\":\"030dbeba0ba655fb26f7b9414462ada7f6b7d145e517beae957a0f04119594994c\"},{\"x\":\"03c84b2a83ff2f05c55f91d256e167bb0dd54977d45f796dd463aec1054a087f17\",\"y\":\"036889b7fa293701807870aa6e7bdb3f378d85476f33768d3156890cb39aeb8fa0\"},{\"x\":\"02d328ac5792f99d6f165e8e399aca2bc30461568595d89c35570768e059c38266\",\"y\":\"0313cde4a9c3620836bd5741ad14790e2e3fb3266316b93613dedb9d39862cc120\"},{\"x\":\"03f6b634a890b64867e24730c0ab19d92c30993c5dc0894d83ac79b91d4fe0f14b\",\"y\":\"03fca065440f1e88129c1f41dd7888de837625c3329dcbb6f9a0ef85baaa13c703\"},{\"x\":\"0206326fbb0da5a933c83ce97e4111b56ee9e6d0814bc98267cc3afb2dec467fa2\",\"y\":\"029b8b15f770a5d76be20cf2bf60ee8c02907a84c1862336347d60eb9e899d0292\"},{\"x\":\"03d39f975f72e26e4426f6e9809d050baa49d604c4b0ac5952a441ecd939b17707\",\"y\":\"037c0c807f0069043b8a049bba6b5c6b33484c6c41362dec10c767f746494f8bed\"},{\"x\":\"02b6b930ed8cff0972b5321e899f7bcf6bc78743945020d3b8710228fc5855ca42\",\"y\":\"02e969e698219e960f44926083f0ce02499e7d3232554e764647a110462b5615b7\"}]},\"proofOfKnowledgeOfEncryptionCoins\":[{\"c\":\"8831970322144779564341746437872738432360211357175154359747649916907686152511\",\"f\":\"70538140328215058074245812395684926226792482294435136022949511763554607864041\"},{\"c\":\"110086852313473182674836826865347427113338154460287647257060496490045593508852\",\"f\":\"57318598299877555243107854755137771970745189954717969095205247724211300745797\"},{\"c\":\"69550785194614180005470415638082326886453460674110929612914582819674810112816\",\"f\":\"56210049462333838013604269524235005883715871041970681056558890868455661452813\"},{\"c\":\"59630761165936575690601969303063470865004880040153376595594582475034551120522\",\"f\":\"633224809242074841937567889317548416782288948757487980395393642126082911838\"},{\"c\":\"53238718550712499296911614370314172299695864985403568877978219498046413195271\",\"f\":\"38545131584075299010513047170169305701691056038390692423233646663259743341510\"},{\"c\":\"46556875867147012641160646619167439987721666741297218056904906428323181618009\",\"f\":\"65226539359950780997998120540533961567860446378707147877827547150262023942418\"},{\"c\":\"95401076528969434397756362623792710233511390266733071468678741381422711847478\",\"f\":\"36908401209745076266249954413306379212038375334774501043044137624526907057720\"}],\"proofOfKnowledgeOfPrivateCredential\":{\"c\":\"64776937565881428455985922992125420232341578053996509853255420152083978566174\",\"f\":\"105192641726039398298611367363273196607333191476888795721797315883574854249838\"}},\"signatureHex\":\"b9bc81e85178b396037af656334f440441fbf8383d1748aaa1fd54ae60bc96e43c8fcdc2c2ed1511a159ae26747118a59d10feef4deed6ab702822e7b8e56f3750bee7738444326be8ebc5a298c820f92d5562c4aa7d9d2879f7cac0803be2cb4aead6a9c972225c3d13b5cf140c4e61c5d10afe9271c1f54f2f6129dc6056c5c684b364649920d76d3f6f23849ede99bf4bb39f010a5a5171e16ca695de0e3058a781e22a61b7eb9da9be88b26bb3a3cd78f2d32c5dc746aa5eb87711aa20dc2217ab26ae9ec1dbdc40670e6d29fde4807b46b49e6c477bce424491fb1ce179e292c8c2dcbb5ce2cd7ee8146883c25a73b3ef9ec0a87af15a2c3ed30ae8e83b\",\"factorX\":[\"0205f742072dfe8b3e432240655e34776b8cd9f4bf073b1aeb869a3e37f128cf5f\",\"022ccdf409c958e9a1160af66d0db3598037ac61c9528b6c1dd6c65296e35d1d8a\",\"03e79bf557d5bbae0c2d9da49a9504d351cb9514bd512abc5aad9967528c8aef70\",\"0251c2b06642fa6885d025f853fda92649624ae6636077dd3215f02d6c6a7e3ed5\",\"02d9b39f17c2a8d70356e244993f5e358e2a2b23ca52f946a8b153b9d1ed20e09e\",\"03adf149bcebe4c69cadec5998192cba7b43e5b07c30dd8ec07951a3cd32f6f2b3\",\"028bcd90537814712c2872bf7569134542e9d657686dfeef2ecd6e805a1693de03\"],\"factorY\":[\"03f64212167d0e256bcc2b2dfff41fa48d3386d2edc7f1bf067d0041c9e320b487\",\"03d93194d66a45cf0850cdeaca74d033870a66b723bda14aef3af2f99538763a80\",\"030fed85ec6a86d910bd9fdcd7639bd08d828059a99c52aee315f0d833e7dfe49a\",\"03eb74a27a5018d8f9d04a8a07cc290cf0630a2c3a0e98f0eeb2d0ce4e5885a70c\",\"03f99a2b879bc124db8f0709041de68a8e9a6397b3541638468060afe440efda29\",\"02fe635a41e35d60cd257d11f7398be11d955c15a4af2a5754a15f11872f99a629\",\"03e4ba95f21cc8287df315160e37ca232ea373a5e35771df9ea2db861fa7e8ab64\"],\"factorA\":[\"03b236a6a39b2b525ef0470082586327930c661df723fa1b2739d9e63ed8215530\",\"0291295a9d5a62595fda8d956f1cb7e0a991277abeb9881003f1926da1da05585a\",\"0324ca330c17de8a4dcd9b9c74c1477dd308f19032e40d4e6c0153e71caa0fcdb5\",\"02df747d8dfc31866dc524612d1730f88dd9e74e5aab238ec051cd726e8ce9ab60\",\"0255016abcc2a8005ceda6abb6228be498c56bda1e1983c8fae57b7d4f14417adb\",\"0385743e8cba6b2cf7c2d31833b574be0deeb2e6112e8a49bfe624d6e6d2c1397e\",\"037dc31d935c31f9046b2223747b93b32b86e95d04f3ba96ce3f52dd2126417795\"],\"factorB\":[\"03cc853b22448a5ac31c998ab094a8dfd93c10c2d4ec3a28d7339d55e4550caebd\",\"02b036e19089918f01389f514c7d70dc9f6bea4fde084e3735dc028fd48cb72672\",\"02a44e518eb2f1de9bb1affdbf8292ae95d07db0b1390b98e1d78ece0c21ee07d1\",\"031fa011cc7b80d679c7a7e94bf7a33b1f01ba95711fe8ff2c10172df45e103980\",\"02ebf728abe3161c1c93c487ebead674a0bb7d7fb67368921d62700a7db3dd3d69\",\"02b8b1245add39a7239e50bd2715f85ad60021e9b7bb2cd8d498ee2624a0d29a04\",\"0384323db3c128480b33e0b502f6883d3114299487f5a6b41d5b9a2fc0738379dd\"]}" }, "url": "http://localhost:4300/?c=B8n5onjdEIz1c8BDaixbImZQ1gxLHS-DVoqaQMp9BBqu-o11VmOhTWpNOzo7-tr4cB_3mHMMg6UrdFBW&vid=voter4&nonce=3267672a9ea01f3e1bb49512d82bbcb560e1d2a8148904cb1da616bcba92a4fe", - "c": "B8n5onjdEIz1c8BDaixbImZQ1gxLHS-DVoqaQMp9BBqu-o11VmOhTWpNOzo7-tr4cB_3mHMMg6UrdFBW" + "c": "B8n5onjdEIz1c8BDaixbImZQ1gxLHS-DVoqaQMp9BBqu-o11VmOhTWpNOzo7-tr4cB_3mHMMg6UrdFBW", + "fingerprint": "65792573f35f912cebd3865f67cb9f260338b68a20bc8e28c5350504fb3d5e4e8ab01383df9246576d4f8bb2a30c2949d04c397adf42d0fbe116938aa7c86ca4" } \ No newline at end of file diff --git a/test/decryption.test.ts b/test/decryption.test.ts index b2be286..5e98060 100644 --- a/test/decryption.test.ts +++ b/test/decryption.test.ts @@ -6,7 +6,7 @@ import { bufToHex, hexToBuf } from "../src/main/utils" import crypto from "crypto" import { EnvironmentVariables } from "../src/main/constants" import { ProofGeneratorMock } from "../src/algorithms/proof" -const loginResponse = SecondDeviceLoginResponse.fromJson(data.loginResponse) +const loginResponse = SecondDeviceLoginResponse.fromJson(data.loginResponse.value) const randomCoinSeed = "1e89b5f95deae82f6f823b52709117405f057783eda018d72cbd83141d394fbd" Object.defineProperty(globalThis, 'crypto', { @@ -46,7 +46,7 @@ test("test decrytQRCode", async () => { test("test checkZKP", async () => { const init = loginResponse.initialMessageDecoded - const final = SecondDeviceFinalMessage.fromJson(data.finalMessage) + const final = SecondDeviceFinalMessage.fromJson(data.finalMessage.value) const e = "108039209026641834721998202775536164454916176078442584841940316235417705823230" const r = "44267717001895006656767798790813376597351395807170189462353830054915294464906" const proof = (new ProofGeneratorMock(BigInt(e), BigInt(r))).generateProof() diff --git a/test/signature.test.ts b/test/signature.test.ts index 559399d..6ddab7d 100644 --- a/test/signature.test.ts +++ b/test/signature.test.ts @@ -13,7 +13,7 @@ Object.defineProperty(globalThis, 'crypto', { }); test("test ballot fingerprint", async () => { - const response = SecondDeviceLoginResponse.fromJson(data.loginResponse) + const response = SecondDeviceLoginResponse.fromJson(data.loginResponse.value) const expectedNormalizedBallot = "000000010000002103bf956c38e14a6f81ed3621e165fb8c6000c28738f0e279fa28d2254d6b799eb10000002102e19fbd88d9e1ad760653dde8e7f00fcc0d45e2b38ccc0cb2301f2239d4fcac3f000000010000002100b0cb75473491d930dfffdf51f65753db9e6d1252720f50532bd6a4ddb5073c700000002100c7d607e9d00ebb3849a3632d1e64bdc726ea3ba0ce564a0de2c578f1d5db83b4000000200953edeaf6598b16e39aab05f7a751a5d68c0190ef6c10b64b602b6a97c1a6480000002100f4386a1cefe2f2ef00aef6b4cc107ec5ec13984f65e1c941fdf49882986f0c08" const expectedFingerprint = "91dd5f592932c7c681f20310c801e7ea935f116527b65ce6524f14c6ad2f9dac" expect(bufToHex(getBallotAsNormalizedBytestring(response.initialMessageDecoded.ballot))).toBe(expectedNormalizedBallot) @@ -21,7 +21,7 @@ test("test ballot fingerprint", async () => { }) test("test checkSignature", async () => { - const response = SecondDeviceLoginResponse.fromJson(data.loginResponse) + const response = SecondDeviceLoginResponse.fromJson(data.loginResponse.value) const valid = await checkSignature(response) expect(valid).toBe(true) }) \ No newline at end of file diff --git a/test/verificationtool.test.ts b/test/verificationtool.test.ts index b2a89f7..95fd880 100644 --- a/test/verificationtool.test.ts +++ b/test/verificationtool.test.ts @@ -1,19 +1,17 @@ import data from "../src/mock/data.json" -import axios from "axios" //import * as proof from "../src/algorithms/proof" import * as decrypt from "../src/algorithms/decryption" import * as sign from "../src/algorithms/signature" -import { hexToBuf } from "../src/main/utils" +import axios from 'axios' import {Comm, ResponseBean, ResponseBeanError, ResponseBeanOk} from "../src/main/communication" import {Verificationtool} from "../src/main/verificationtool" import { ElectionData, SecondDeviceFinalMessage, SecondDeviceLoginResponse } from "../src/classes/communication" import { ErrorType } from "../src/main/error" import { EnvironmentVariables } from "../src/main/constants" import crypto from "crypto" +import { Proof, SecretProof } from "../src/classes/ballot" EnvironmentVariables.init("test").fingerprint = "b7e8e76c369d6a9ca268e40cde8347ac443040d6c4a1df3035744ace05b94e00849abf083ae5baa8fee462a723823054858387ec35462a49f93c2ea40b2fc876" -EnvironmentVariables.instance.comm = new Comm() -const mockedAxios = jest.spyOn(axios, 'request') const mockedDecrypt = jest.spyOn(decrypt, 'decrytQRCode') const randomCoinSeed = "1e89b5f95deae82f6f823b52709117405f057783eda018d72cbd83141d394fbd" @@ -24,51 +22,9 @@ Object.defineProperty(globalThis, 'crypto', { } }); -async function validAxios(request: any) { - if(request.url == "/electionData") { - if (request.data != undefined) { - return Promise.reject("Invalid request value") - } - return Promise.resolve( - { - status: "OK", - data: data.electionData - }) - } else if (request.url == "/login") { - if (JSON.stringify(request.data) != JSON.stringify(data.loginRequest)) { - return Promise.reject("Invalid request value") - } - return Promise.resolve( - { - status: "OK", - data: { - status: "OK", - value: data.loginResponse - } - }) - } else if (request.url == "/challenge") { - if (JSON.stringify(request.data) != JSON.stringify(data.challenge)) { - return Promise.reject("Invalid request value") - } - return Promise.resolve( - { - status: "OK", - data: { - status: "OK", - value: data.finalMessage - } - }) - } - else { - console.log(request) - return Promise.reject("Invalid url") - } -} - - beforeEach(() => { - mockedAxios.mockImplementation(validAxios) - mockedDecrypt.mockResolvedValue(hexToBuf(randomCoinSeed)) + //mockedAxios.mockImplementation(validAxios) + //mockedDecrypt.mockResolvedValue(hexToBuf(randomCoinSeed)) }) test("test verificationtool valid", async () => { @@ -79,11 +35,11 @@ test("test verificationtool valid", async () => { const login = await verificationtool.login(data.vid, data.nonce, data.password, data.c) expect(login.status).toBe("OK") - expect((login as ResponseBeanOk).value).toStrictEqual(SecondDeviceLoginResponse.fromJson(data.loginResponse)) + expect((login as ResponseBeanOk).value).toStrictEqual(SecondDeviceLoginResponse.fromJson(data.loginResponse.value)) const finalMessage = await verificationtool.finalMessage() expect(finalMessage.status).toBe("OK") - expect((finalMessage as ResponseBeanOk).value).toStrictEqual(SecondDeviceFinalMessage.fromJson(data.finalMessage)) + expect((finalMessage as ResponseBeanOk).value).toStrictEqual(SecondDeviceFinalMessage.fromJson(data.finalMessage.value)) const decodedBallot = await verificationtool.decodeBallot() expect(decodedBallot.status).toBe("OK") @@ -109,20 +65,21 @@ test("test invalid format", async () => { status: "OK", data: {a:1} } - const verificationtool = new Verificationtool() + const comm = new Comm() + const mockedAxios = jest.spyOn(axios, 'request') mockedAxios.mockResolvedValueOnce(invalidResponseData) - const electionData = await verificationtool.loadElectionData() + const electionData = await comm.electionData() expect(electionData.status).toBe("ERROR") expect((electionData as ResponseBeanError).errorType).toBe(ErrorType.FORMAT) mockedAxios.mockResolvedValueOnce(invalidResponse) - const login = await verificationtool.login(data.vid, data.nonce, data.password, data.c) + const login = await comm.login(data.vid, data.nonce, data.password, data.c) expect(login.status).toBe("ERROR") expect((login as ResponseBeanError).errorType).toBe(ErrorType.FORMAT) - await verificationtool.login(data.vid, data.nonce, data.password, data.c) + await comm.login(data.vid, data.nonce, data.password, data.c) mockedAxios.mockResolvedValueOnce(invalidResponse) - const final = await verificationtool.finalMessage() + const final = await comm.challenge('', new SecretProof(BigInt(1), BigInt(2), BigInt(3))) expect(final.status).toBe("ERROR") expect((final as ResponseBeanError).errorType).toBe(ErrorType.FORMAT) }) @@ -135,16 +92,17 @@ test("test backend error", async () => { value: {a:1} } } - const verificationtool = new Verificationtool() + const comm = new Comm() + const mockedAxios = jest.spyOn(axios, 'request') mockedAxios.mockResolvedValueOnce(invalidResponse) - const login = await verificationtool.login(data.vid, data.nonce, data.password, data.c) + const login = await comm.login(data.vid, data.nonce, data.password, data.c) expect(login.status).toBe("ERROR") expect((login as ResponseBeanError).errorType).toBe(ErrorType.EXTERN) - await verificationtool.login(data.vid, data.nonce, data.password, data.c) + await comm.login(data.vid, data.nonce, data.password, data.c) mockedAxios.mockResolvedValueOnce(invalidResponse) - const final = await verificationtool.finalMessage() + const final = await comm.challenge('', new SecretProof(BigInt(1), BigInt(2), BigInt(3))) expect(final.status).toBe("ERROR") expect((final as ResponseBeanError).errorType).toBe(ErrorType.EXTERN) }) @@ -233,10 +191,19 @@ test("test error in fullLogin in finalMessage", async () => { expect((final as ResponseBeanError).message).not.toBeDefined() }) -test("test connection error in fullLogin", async() => { - mockedAxios.mockRejectedValueOnce("No comment") - const verificationtool = new Verificationtool() - const loginFail = await verificationtool.fullLogin(data.vid, data.nonce, data.password, data.c) +test("test connection error in Comm", async() => { + const comm = new Comm() + const mockedAxios = jest.spyOn(axios, 'request') + mockedAxios.mockRejectedValue('no comment') + const electionDataFail = await comm.electionData() + expect(electionDataFail.status).toBe(ResponseBean.errorStatus) + expect((electionDataFail as ResponseBeanError).errorType).toBe(ErrorType.CONNECTION) + + const loginFail = await comm.login(data.vid, data.nonce, data.password, data.c) expect(loginFail.status).toBe(ResponseBean.errorStatus) expect((loginFail as ResponseBeanError).errorType).toBe(ErrorType.CONNECTION) + + const challengeFail = await comm.challenge('', new SecretProof(BigInt(1), BigInt(2), BigInt(3))) + expect(challengeFail.status).toBe(ResponseBean.errorStatus) + expect((challengeFail as ResponseBeanError).errorType).toBe(ErrorType.CONNECTION) })