Full Code of vvk-ehk/ivxv for AI

published 2785872f84df cached
1403 files
5.0 MB
1.4M tokens
6421 symbols
1 requests
Download .txt
Showing preview only (5,600K chars total). Download the full file or copy to clipboard to get everything.
Repository: vvk-ehk/ivxv
Branch: published
Commit: 2785872f84df
Files: 1403
Total size: 5.0 MB

Directory structure:
gitextract_eag_ui9l/

├── .editorconfig
├── .gitignore
├── .gitmodules
├── Documentation/
│   ├── .gitignore
│   ├── Makefile
│   ├── _static/
│   │   └── custom.css
│   ├── common/
│   │   ├── examples/
│   │   │   ├── id.rpc.vote.query.json
│   │   │   ├── id.rpc.vote.response.json
│   │   │   ├── id.rpc.voterchoices.query.json
│   │   │   ├── id.rpc.voterchoices.response.json
│   │   │   ├── json.rpc.method.query.json
│   │   │   ├── json.rpc.method.response.json
│   │   │   ├── mid.rpc.authenticate.query.json
│   │   │   ├── mid.rpc.authenticate.response.json
│   │   │   ├── mid.rpc.authenticatestatus.query.json
│   │   │   ├── mid.rpc.authenticatestatus.response.json
│   │   │   ├── mid.rpc.authenticatestatus2.query.json
│   │   │   ├── mid.rpc.authenticatestatus2.response.json
│   │   │   ├── mid.rpc.getcertificate.query.json
│   │   │   ├── mid.rpc.getcertificate.response.json
│   │   │   ├── mid.rpc.sign.query.json
│   │   │   ├── mid.rpc.sign.response.json
│   │   │   ├── mid.rpc.signstatus.query.json
│   │   │   ├── mid.rpc.signstatus.response.json
│   │   │   ├── mid.rpc.signstatus2.query.json
│   │   │   ├── mid.rpc.signstatus2.response.json
│   │   │   ├── mid.rpc.vote.query.json
│   │   │   ├── mid.rpc.vote.response.json
│   │   │   ├── mid.rpc.voterchoices.query.json
│   │   │   ├── mid.rpc.voterchoices.response.json
│   │   │   ├── smartid.rpc.authenticate.query.json
│   │   │   ├── smartid.rpc.authenticate.response.json
│   │   │   ├── smartid.rpc.authenticatestatus.query.json
│   │   │   ├── smartid.rpc.authenticatestatus.response.json
│   │   │   ├── smartid.rpc.authenticatestatus2.query.json
│   │   │   ├── smartid.rpc.authenticatestatus2.response.json
│   │   │   ├── smartid.rpc.challenge.query.json
│   │   │   ├── smartid.rpc.challenge.response.json
│   │   │   ├── smartid.rpc.getcertificatechoice.query.json
│   │   │   ├── smartid.rpc.getcertificatechoice.response.json
│   │   │   ├── smartid.rpc.getcertificatechoicestatus.query.json
│   │   │   ├── smartid.rpc.getcertificatechoicestatus.response.json
│   │   │   ├── smartid.rpc.getcertificatechoicestatus2.response.json
│   │   │   ├── smartid.rpc.sign.query.json
│   │   │   ├── smartid.rpc.sign.response.json
│   │   │   ├── smartid.rpc.signstatus.query.json
│   │   │   ├── smartid.rpc.signstatus.response.json
│   │   │   ├── smartid.rpc.signstatus2.query.json
│   │   │   ├── smartid.rpc.signstatus2.response.json
│   │   │   ├── smartid.rpc.vote.query.json
│   │   │   ├── smartid.rpc.vote.response.json
│   │   │   ├── smartid.rpc.voterchoices.query.json
│   │   │   ├── smartid.rpc.voterchoices.response.json
│   │   │   ├── ver.rpc.verify.query.json
│   │   │   ├── ver.rpc.verify.response.json
│   │   │   ├── votesorder.rpc.votes.query.json
│   │   │   ├── votesorder.rpc.votes.response.json
│   │   │   ├── votesorder.rpc.votesseqno.query.json
│   │   │   ├── votesorder.rpc.votesseqno.response.json
│   │   │   ├── webeid.rpc.challenge.query.json
│   │   │   ├── webeid.rpc.challenge.response.json
│   │   │   ├── webeid.rpc.token.query.json
│   │   │   ├── webeid.rpc.token.response.json
│   │   │   ├── webeid.rpc.vote.query.json
│   │   │   ├── webeid.rpc.vote.response.json
│   │   │   ├── webeid.rpc.voterchoices.query.json
│   │   │   └── webeid.rpc.voterchoices.response.json
│   │   ├── schema/
│   │   │   ├── Makefile
│   │   │   ├── ivxv.anon-bb.schema
│   │   │   ├── ivxv.anon-bb.schema.example
│   │   │   ├── ivxv.choices.schema
│   │   │   ├── ivxv.choices.schema.example
│   │   │   ├── ivxv.districts.schema
│   │   │   ├── ivxv.districts.schema.example
│   │   │   ├── ivxv.result.schema
│   │   │   ├── ivxv.result.schema.example
│   │   │   ├── ivxv.revoke.schema
│   │   │   ├── ivxv.revoke.schema.example
│   │   │   ├── ivxv.voterlist.schema
│   │   │   ├── ivxv.voterlist.schema.example
│   │   │   └── validate_schema.py
│   │   └── xmltemplates/
│   │       ├── si.template
│   │       ├── sig.template
│   │       ├── sp.template
│   │       └── sv.template
│   ├── common-model.mk
│   ├── common.mk
│   ├── conf.py
│   ├── differ.sh
│   ├── documents.py
│   ├── en/
│   │   └── backendlogs/
│   │       ├── .gitignore
│   │       ├── Makefile
│   │       ├── create_rst.py
│   │       └── introduction.inc
│   ├── et/
│   │   ├── audiitor/
│   │   │   ├── Makefile
│   │   │   ├── annotatsioon.rst
│   │   │   ├── audit.rst
│   │   │   ├── history.rst
│   │   │   ├── history.txt
│   │   │   ├── index.rst
│   │   │   ├── spelling_wordlist.txt
│   │   │   └── ylevaade.rst
│   │   ├── example-config/
│   │   │   ├── DEMO_auditor/
│   │   │   │   └── DEMO_auditor.yaml
│   │   │   ├── DEMO_election/
│   │   │   │   ├── DEMO.election.yaml
│   │   │   │   ├── DEMO_valijate_nimekiri.pem
│   │   │   │   ├── EE-GovCA2018.pem.crt
│   │   │   │   ├── EE_Certification_Centre_Root_CA.pem.crt
│   │   │   │   ├── ESTEID-SK_2015.pem.crt
│   │   │   │   ├── SK_OCSP_RESPONDER_2011.pem.cer
│   │   │   │   ├── SK_TIMESTAMPING_AUTHORITY.pem.cer
│   │   │   │   └── esteid2018.pem.crt
│   │   │   ├── DEMO_ivxv/
│   │   │   │   ├── EE-GovCA2018.pem.crt
│   │   │   │   ├── ESTEID-SK_2015.pem.crt
│   │   │   │   ├── ESTEID2018.pem.crt
│   │   │   │   ├── SK_OCSP_RESPONDER_2011.pem.crt
│   │   │   │   ├── SK_TIMESTAMPING_AUTHORITY_2019.pem.crt
│   │   │   │   ├── SK_TIMESTAMPING_AUTHORITY_2020.pem.crt
│   │   │   │   ├── SK_TIMESTAMPING_AUTHORITY_2021.pem.crt
│   │   │   │   └── ivxv.properties
│   │   │   ├── DEMO_key.decrypt_f/
│   │   │   │   └── DEMO_key.decrypt_f.yaml
│   │   │   ├── DEMO_key.decrypt_t/
│   │   │   │   └── DEMO_key.decrypt_t.yaml
│   │   │   ├── DEMO_key.groupgen/
│   │   │   │   └── key.groupgen.yaml
│   │   │   ├── DEMO_key.init/
│   │   │   │   └── key.init.yaml
│   │   │   ├── DEMO_processor_TS/
│   │   │   │   └── DEMO_processor_TS.yaml
│   │   │   ├── DEMO_technical/
│   │   │   │   ├── ca.pem
│   │   │   │   └── technical.yaml
│   │   │   └── DEMO_trust/
│   │   │       ├── DEMO.trust.yaml
│   │   │       ├── EE-GovCA2018.pem.crt
│   │   │       ├── EE_Certification_Centre_Root_CA.pem.crt
│   │   │       ├── ESTEID-SK_2015.pem.crt
│   │   │       ├── SK_OCSP_RESPONDER_2011.pem.cer
│   │   │       ├── SK_TIMESTAMPING_AUTHORITY.pem.cer
│   │   │       └── esteid2018.pem.crt
│   │   ├── haldusteenus/
│   │   │   ├── Makefile
│   │   │   ├── allalaadimised.rst
│   │   │   ├── annotatsioon.rst
│   │   │   ├── index.rst
│   │   │   ├── kasutajad.rst
│   │   │   ├── logi.rst
│   │   │   ├── nimekirjad.rst
│   │   │   ├── seadistused.rst
│   │   │   ├── spelling_wordlist.txt
│   │   │   ├── statistika.rst
│   │   │   ├── teenused.rst
│   │   │   ├── yldseisund.rst
│   │   │   └── ylevaade.rst
│   │   ├── kasutusmall/
│   │   │   ├── Makefile
│   │   │   ├── index.rst
│   │   │   ├── kasutusmallid.rst
│   │   │   ├── sissejuhatus.rst
│   │   │   └── tegijad.rst
│   │   ├── kogumisteenuse_haldusjuhend/
│   │   │   ├── Makefile
│   │   │   ├── algseadistamine.rst
│   │   │   ├── annotatsioon.rst
│   │   │   ├── genereeritud-failid/
│   │   │   │   ├── e-valimiskasti_koostamine.inc
│   │   │   │   ├── haldusteenus-laadi_kogumisteenuse_tehnilised_seadistused.inc
│   │   │   │   ├── haldusteenus-laadi_ringkondade_nimekiri.inc
│   │   │   │   ├── haldusteenus-laadi_usaldusjuure_seadistused.inc
│   │   │   │   ├── haldusteenus-laadi_valijate_nimekiri.inc
│   │   │   │   ├── haldusteenus-laadi_valikute_nimekiri.inc
│   │   │   │   ├── haldusteenus-laadi_valimiste_seadistused.inc
│   │   │   │   ├── haldusteenuse_paigaldamine.inc
│   │   │   │   ├── haldusteenuse_soltuvuste_paigaldamine.inc
│   │   │   │   ├── kasutaja_lisamine.inc
│   │   │   │   ├── mikroteenuse_kaivitamine.inc
│   │   │   │   ├── mikroteenuse_seiskamine.inc
│   │   │   │   ├── mikroteenuse_seisundi_tuvastamine.inc
│   │   │   │   └── töötlemisrakenduse_sisendi_koostamine.inc
│   │   │   ├── haldusteenus.rst
│   │   │   ├── haldustoimingud.rst
│   │   │   ├── index.rst
│   │   │   ├── krahhitaaste.rst
│   │   │   ├── lisad.rst
│   │   │   ├── protseduurid.rst
│   │   │   ├── recovery/
│   │   │   │   ├── recovery_backupservice.inc
│   │   │   │   ├── recovery_fullstorage.inc
│   │   │   │   ├── recovery_logcollection.inc
│   │   │   │   ├── recovery_stateless.inc
│   │   │   │   └── recovery_storageservice.inc
│   │   │   ├── seadistused.rst
│   │   │   ├── spelling_wordlist.txt
│   │   │   ├── utiliitide-abiteave/
│   │   │   │   ├── ivxv-admin-helper.inc
│   │   │   │   ├── ivxv-admin-sudo.inc
│   │   │   │   ├── ivxv-agent-daemon.inc
│   │   │   │   ├── ivxv-backup-crontab.inc
│   │   │   │   ├── ivxv-backup.inc
│   │   │   │   ├── ivxv-cmd-load.inc
│   │   │   │   ├── ivxv-collector-init.inc
│   │   │   │   ├── ivxv-config-apply.inc
│   │   │   │   ├── ivxv-config-validate.inc
│   │   │   │   ├── ivxv-copy-log-to-logmon.inc
│   │   │   │   ├── ivxv-create-data-dirs.inc
│   │   │   │   ├── ivxv-db-dump.inc
│   │   │   │   ├── ivxv-db-reset.inc
│   │   │   │   ├── ivxv-eventlog-dump.inc
│   │   │   │   ├── ivxv-export-votes.inc
│   │   │   │   ├── ivxv-generate-processor-input.inc
│   │   │   │   ├── ivxv-secret-load.inc
│   │   │   │   ├── ivxv-service.inc
│   │   │   │   ├── ivxv-status.inc
│   │   │   │   ├── ivxv-update-packages.inc
│   │   │   │   ├── ivxv-users-list.inc
│   │   │   │   ├── ivxv-voter-list-download.inc
│   │   │   │   ├── ivxv-voterstats.inc
│   │   │   │   └── ivxv-voting-sessions.inc
│   │   │   └── ylevaade.rst
│   │   ├── seadistuste_koostejuhend/
│   │   │   ├── Makefile
│   │   │   ├── annotatsioon.rst
│   │   │   ├── auditirakendus.rst
│   │   │   ├── config-examples/
│   │   │   │   ├── DEMO_SK_TIMESTAMPING_AUTHORITY_2020.pem
│   │   │   │   ├── Stats_Server_Certificate.pem
│   │   │   │   ├── TEST_of_EE_Certification_Centre_Root_CA.pem
│   │   │   │   ├── TEST_of_ESTEID-SK_2015.pem
│   │   │   │   ├── TEST_of_SK_OCSP_RESPONDER_2020.pem
│   │   │   │   ├── android-ios-config.json
│   │   │   │   ├── auditor.convert.yaml
│   │   │   │   ├── auditor.decrypt.yaml
│   │   │   │   ├── auditor.integrity.yaml
│   │   │   │   ├── auditor.mixer.yaml
│   │   │   │   ├── etcd_CA.pem
│   │   │   │   ├── example.election.yaml
│   │   │   │   ├── example.technical.yaml
│   │   │   │   ├── example.trust.yaml
│   │   │   │   ├── example.voters.skip.yaml
│   │   │   │   ├── ivxv.properties.real
│   │   │   │   ├── key.decrypt.yaml
│   │   │   │   ├── key.groupgen.yaml
│   │   │   │   ├── key.init.original.yaml
│   │   │   │   ├── key.init.yaml
│   │   │   │   ├── key.testkey.yaml
│   │   │   │   ├── key.util.yaml
│   │   │   │   ├── processor.anonymize.yaml
│   │   │   │   ├── processor.check.yaml
│   │   │   │   ├── processor.checkAndSquash.yaml
│   │   │   │   ├── processor.export.yaml
│   │   │   │   ├── processor.revoke.yaml
│   │   │   │   ├── processor.revokeAndAnonymize.yaml
│   │   │   │   ├── processor.squash.yaml
│   │   │   │   ├── processor.stats.yaml
│   │   │   │   ├── processor.statsdiff.yaml
│   │   │   │   ├── processor.verify.yaml
│   │   │   │   ├── rnd.groupgen.yaml
│   │   │   │   ├── rnd.init.yaml
│   │   │   │   ├── rr_pub.key
│   │   │   │   ├── vote_enc_pkey.pem
│   │   │   │   └── xroadservice_ca.pem
│   │   │   ├── genparam.py
│   │   │   ├── index.rst
│   │   │   ├── kogumisteenus.rst
│   │   │   ├── kontrollrakendus.rst
│   │   │   ├── kt-krypto.inc
│   │   │   ├── kt-tehniline.inc
│   │   │   ├── kt-usaldusjuur.inc
│   │   │   ├── kt-valijate-nimekirja-vahelejätmine.inc
│   │   │   ├── kt-valimised.inc
│   │   │   ├── kt-volitused.inc
│   │   │   ├── kt-ylevaade.inc
│   │   │   ├── mixnet.rst
│   │   │   ├── rakendused.rst
│   │   │   ├── spelling_wordlist.txt
│   │   │   ├── tootlemisrakendus.rst
│   │   │   ├── valijarakendus.rst
│   │   │   ├── votmerakendus.rst
│   │   │   └── ylevaade.rst
│   │   ├── votmerakendus/
│   │   │   ├── Makefile
│   │   │   ├── index.rst
│   │   │   ├── sissejuhatus.rst
│   │   │   ├── viited.rst
│   │   │   └── votmeosakute_protokollid.rst
│   │   └── xteeteenus/
│   │       ├── Makefile
│   │       ├── index.rst
│   │       ├── jooksevnimekiri.rst
│   │       ├── model/
│   │       │   ├── Makefile
│   │       │   ├── xteeivxv.pu
│   │       │   └── xteevotesorder.pu
│   │       ├── seadistamine.rst
│   │       └── sissejuhatus.rst
│   ├── ivxv-technical/
│   │   ├── ivxv-common.cls
│   │   ├── ivxv-technical.cls
│   │   └── pandoc-extras.sty
│   ├── podl/
│   │   ├── .gitignore
│   │   ├── podl.py
│   │   ├── requirements.in
│   │   └── requirements.txt
│   ├── public/
│   │   ├── arhitektuur/
│   │   │   ├── Makefile
│   │   │   ├── etcd.rst
│   │   │   ├── index.rst
│   │   │   ├── kogumisteenus.rst
│   │   │   ├── locales/
│   │   │   │   └── en/
│   │   │   │       └── LC_MESSAGES/
│   │   │   │           ├── etcd.po
│   │   │   │           ├── index.po
│   │   │   │           ├── kogumisteenus.po
│   │   │   │           ├── tehnoloogiad.po
│   │   │   │           ├── vallasrezhiim.po
│   │   │   │           ├── viited.po
│   │   │   │           └── yldpohimotted.po
│   │   │   ├── model/
│   │   │   │   ├── Makefile
│   │   │   │   ├── actors.pu
│   │   │   │   ├── collector-if.pu
│   │   │   │   ├── collector-in.pu
│   │   │   │   ├── development.pu
│   │   │   │   ├── elec-vote.pu
│   │   │   │   ├── election.pu
│   │   │   │   ├── en/
│   │   │   │   │   └── lang.pu
│   │   │   │   ├── et/
│   │   │   │   │   └── lang.pu
│   │   │   │   ├── example.pu
│   │   │   │   ├── general.pu
│   │   │   │   ├── ms-collector-status.pu
│   │   │   │   ├── ms-management-service-components.en.pu
│   │   │   │   ├── ms-management-service-components.et.pu
│   │   │   │   ├── ms-service-status-changes.en.pu
│   │   │   │   ├── ms-service-status-changes.et.pu
│   │   │   │   ├── ms-service-status.en.pu
│   │   │   │   ├── ms-service-status.et.pu
│   │   │   │   ├── ms-upload-command.en.pu
│   │   │   │   ├── ms-upload-command.et.pu
│   │   │   │   ├── ms-voter-list-status.en.pu
│   │   │   │   ├── ms-voter-list-status.et.pu
│   │   │   │   ├── skin.inc
│   │   │   │   ├── uc-audit.pu
│   │   │   │   ├── uc-offline.pu
│   │   │   │   ├── uc-online.pu
│   │   │   │   ├── uc-prep.pu
│   │   │   │   ├── uc-tootleja.pu
│   │   │   │   └── uc-votmerakendus.pu
│   │   │   ├── spelling_wordlist.txt
│   │   │   ├── tehnoloogiad.rst
│   │   │   ├── vallasrezhiim.rst
│   │   │   ├── viited.rst
│   │   │   └── yldpohimotted.rst
│   │   ├── liidesed/
│   │   │   ├── Makefile
│   │   │   ├── examples.rst
│   │   │   ├── index.rst
│   │   │   ├── locales/
│   │   │   │   ├── en/
│   │   │   │   │   └── LC_MESSAGES/
│   │   │   │   │       ├── VIS3-EHS/
│   │   │   │   │       │   ├── 1_Valimisringkondade_nimekiri/
│   │   │   │   │       │   │   └── SPEC.po
│   │   │   │   │       │   ├── 2_Valikute_nimekiri/
│   │   │   │   │       │   │   └── SPEC.po
│   │   │   │   │       │   ├── 3_Valijate_nimekiri/
│   │   │   │   │       │   │   └── SPEC.po
│   │   │   │   │       │   ├── 4_e_haaletanute_nimekiri/
│   │   │   │   │       │   │   └── SPEC.po
│   │   │   │   │       │   ├── 5_Tyhistusnimekiri/
│   │   │   │   │       │   │   └── SPEC.po
│   │   │   │   │       │   ├── 6_e_haaletamise_tulemus/
│   │   │   │   │       │   │   └── SPEC.po
│   │   │   │   │       │   ├── 7_e_haaletamise_yldstatistika/
│   │   │   │   │       │   │   └── SPEC.po
│   │   │   │   │       │   ├── 8_e_haaletamise_detailstatistika/
│   │   │   │   │       │   │   └── SPEC.po
│   │   │   │   │       │   ├── 9_e_haaletamiste_nimekiri/
│   │   │   │   │       │   │   └── SPEC.po
│   │   │   │   │       │   ├── README.po
│   │   │   │   │       │   ├── Taustateave/
│   │   │   │   │       │   │   └── README.po
│   │   │   │   │       │   └── valimissündmuse_identifikaator.po
│   │   │   │   │       ├── examples.po
│   │   │   │   │       └── index.po
│   │   │   │   └── et/
│   │   │   │       └── LC_MESSAGES/
│   │   │   │           ├── VIS3-EHS/
│   │   │   │           │   ├── 1_Valimisringkondade_nimekiri/
│   │   │   │           │   │   └── SPEC.po
│   │   │   │           │   ├── 2_Valikute_nimekiri/
│   │   │   │           │   │   └── SPEC.po
│   │   │   │           │   ├── 3_Valijate_nimekiri/
│   │   │   │           │   │   └── SPEC.po
│   │   │   │           │   ├── 4_e_haaletanute_nimekiri/
│   │   │   │           │   │   └── SPEC.po
│   │   │   │           │   ├── 5_Tyhistusnimekiri/
│   │   │   │           │   │   └── SPEC.po
│   │   │   │           │   ├── 6_e_haaletamise_tulemus/
│   │   │   │           │   │   └── SPEC.po
│   │   │   │           │   ├── 7_e_haaletamise_yldstatistika/
│   │   │   │           │   │   └── SPEC.po
│   │   │   │           │   ├── 8_e_haaletamise_detailstatistika/
│   │   │   │           │   │   └── SPEC.po
│   │   │   │           │   ├── 9_e_haaletamiste_nimekiri/
│   │   │   │           │   │   └── SPEC.po
│   │   │   │           │   ├── README.po
│   │   │   │           │   ├── Taustateave/
│   │   │   │           │   │   └── README.po
│   │   │   │           │   └── valimissündmuse_identifikaator.po
│   │   │   │           ├── examples.po
│   │   │   │           └── index.po
│   │   │   └── spelling_wordlist.txt
│   │   ├── protokollid/
│   │   │   ├── 01-annotatsioon.rst
│   │   │   ├── 02-ylevaade.rst
│   │   │   ├── 04-seadistus.rst
│   │   │   ├── 05-ehaal.rst
│   │   │   ├── 06-talletamine.rst
│   │   │   ├── 06a-regteenus.rst
│   │   │   ├── 07-kontrollimine.rst
│   │   │   ├── 08-haaletamine.rst
│   │   │   ├── 09-tootlemine.rst
│   │   │   ├── 11-audit.rst
│   │   │   ├── 12-lisad.rst
│   │   │   ├── Makefile
│   │   │   ├── index.rst
│   │   │   ├── ivxv-elgamal-ecc.asn1
│   │   │   ├── ivxv-elgamal-general.asn1
│   │   │   ├── ivxv-elgamal-modp.asn1
│   │   │   ├── locales/
│   │   │   │   └── en/
│   │   │   │       └── LC_MESSAGES/
│   │   │   │           ├── 01-annotatsioon.po
│   │   │   │           ├── 02-ylevaade.po
│   │   │   │           ├── 04-seadistus.po
│   │   │   │           ├── 05-ehaal.po
│   │   │   │           ├── 06-talletamine.po
│   │   │   │           ├── 06a-regteenus.po
│   │   │   │           ├── 07-kontrollimine.po
│   │   │   │           ├── 08-haaletamine.po
│   │   │   │           ├── 09-tootlemine.po
│   │   │   │           ├── 11-audit.po
│   │   │   │           ├── 12-lisad.po
│   │   │   │           └── index.po
│   │   │   ├── model/
│   │   │   │   ├── Makefile
│   │   │   │   ├── en/
│   │   │   │   │   └── lang.pu
│   │   │   │   ├── et/
│   │   │   │   │   └── lang.pu
│   │   │   │   └── sequence.pu
│   │   │   ├── paragraph.txt
│   │   │   └── spelling_wordlist.txt
│   │   └── uldsisukord/
│   │       ├── .gitignore
│   │       ├── Makefile
│   │       ├── annotatsioon.rst
│   │       ├── index.rst
│   │       ├── locales/
│   │       │   └── en/
│   │       │       └── LC_MESSAGES/
│   │       │           ├── annotatsioon.po
│   │       │           ├── index.po
│   │       │           ├── nimekiri.po
│   │       │           └── tarned.po
│   │       ├── spelling_wordlist.txt
│   │       └── tarned.rst
│   └── spelling_wordlist.txt
├── LICENSE
├── Makefile
├── README.md
├── README.rst
├── auditor/
│   ├── .gitignore
│   ├── Makefile
│   ├── README.rst
│   ├── build.gradle
│   ├── settings.gradle
│   └── src/
│       └── main/
│           └── java/
│               └── ee/
│                   └── ivxv/
│                       └── audit/
│                           ├── Audit.java
│                           ├── AuditApp.java
│                           ├── AuditContext.java
│                           ├── Msg.java
│                           ├── model/
│                           │   ├── PlainBallotBox.java
│                           │   └── Tally.java
│                           ├── shuffle/
│                           │   ├── ByteTree.java
│                           │   ├── DataParser.java
│                           │   ├── PRNG.java
│                           │   ├── ProtocolInformation.java
│                           │   ├── RO.java
│                           │   ├── ShuffleConsole.java
│                           │   ├── ShuffleException.java
│                           │   ├── ShuffleParameters.java
│                           │   ├── ShuffleProof.java
│                           │   ├── ThreadedVerifier.java
│                           │   └── Verifier.java
│                           ├── tools/
│                           │   ├── ConvertTool.java
│                           │   ├── DecryptTool.java
│                           │   ├── IntegrityTool.java
│                           │   └── MixerTool.java
│                           └── util/
│                               ├── DiscardedBallot.java
│                               ├── InvalidDecProofs.java
│                               └── RawBallotWithDigest.java
├── choices/
│   ├── .gitignore
│   ├── Makefile
│   ├── README.rst
│   ├── cmd/
│   │   ├── choiceimp/
│   │   │   ├── log_desc.go
│   │   │   └── main.go
│   │   ├── districtimp/
│   │   │   ├── district_test.go
│   │   │   ├── log_desc.go
│   │   │   └── main.go
│   │   └── voterimp/
│   │       ├── container.go
│   │       ├── log_desc.go
│   │       ├── main.go
│   │       └── voterimp_test.go
│   ├── go.mod
│   ├── go.sum
│   ├── internal/
│   │   └── client/
│   │       └── sessionstatus/
│   │           └── rpc/
│   │               ├── client.go
│   │               └── log_desc.go
│   └── service/
│       └── choices/
│           ├── log_desc.go
│           └── main.go
├── collector-admin/
│   ├── Makefile
│   ├── README.rst
│   ├── config/
│   │   ├── ivxv-admin-ui.conf
│   │   └── rsyslog.conf
│   ├── ivxv-collector-admin.conf
│   ├── ivxv_admin/
│   │   ├── __init__.py
│   │   ├── agent_daemon.py
│   │   ├── cli_utils/
│   │   │   ├── __init__.py
│   │   │   ├── admin_storage_utils.py
│   │   │   ├── backup_utils.py
│   │   │   ├── config_utils/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── command_load.py
│   │   │   │   ├── config_apply.py
│   │   │   │   ├── config_validate.py
│   │   │   │   ├── load_secret_data_file.py
│   │   │   │   └── voter_list_download.py
│   │   │   ├── service_utils.py
│   │   │   └── status_utils.py
│   │   ├── collector_state.py
│   │   ├── command_file.py
│   │   ├── config.py
│   │   ├── config_validator/
│   │   │   ├── __init__.py
│   │   │   ├── choices_list.py
│   │   │   ├── districts_list.py
│   │   │   ├── election_conf.py
│   │   │   ├── fields.py
│   │   │   ├── schemas.py
│   │   │   ├── tech_conf.py
│   │   │   ├── trust_conf.py
│   │   │   ├── user_management.py
│   │   │   ├── validator_util.py
│   │   │   └── voters_list.py
│   │   ├── db.py
│   │   ├── event_log.py
│   │   ├── http_daemon.py
│   │   ├── lib/
│   │   │   ├── __init__.py
│   │   │   └── lockfile.py
│   │   ├── service/
│   │   │   ├── __init__.py
│   │   │   ├── backup_service.py
│   │   │   ├── logging.py
│   │   │   ├── remote_exec.py
│   │   │   └── service.py
│   │   ├── templates/
│   │   │   ├── ivxv_backup_crontab.jinja
│   │   │   ├── ivxv_detail_stats_crontab.jinja
│   │   │   ├── ivxv_service_rsyslog_conf.jinja
│   │   │   ├── ivxv_status.jinja
│   │   │   ├── ivxv_voting_facts_crontab.jinja
│   │   │   └── stats.json
│   │   └── wsgi.py
│   ├── site/
│   │   ├── cgi/
│   │   │   └── ivxv-admin.wsgi
│   │   ├── index.html
│   │   ├── ivxv/
│   │   │   ├── about.html
│   │   │   ├── config.html
│   │   │   ├── downloads.html
│   │   │   ├── index.html
│   │   │   ├── lists.html
│   │   │   ├── log.html
│   │   │   ├── services.html
│   │   │   ├── stats.html
│   │   │   └── users.html
│   │   └── js/
│   │       ├── config.js
│   │       ├── downloads.js
│   │       ├── index.js
│   │       ├── ivxv.js
│   │       ├── lists.js
│   │       ├── log.js
│   │       ├── services.js
│   │       ├── stats.js
│   │       └── users.js
│   └── sk-certs/
│       ├── EE-GovCA2018.pem.crt
│       └── esteid2018.pem.crt
├── common/
│   ├── README.rst
│   ├── collector/
│   │   ├── .gitignore
│   │   ├── Makefile
│   │   ├── README.md
│   │   ├── age/
│   │   │   ├── age.go
│   │   │   ├── age_test.go
│   │   │   └── log_desc.go
│   │   ├── auth/
│   │   │   ├── auth.go
│   │   │   ├── dummy/
│   │   │   │   ├── dummy.go
│   │   │   │   └── dummy_test.go
│   │   │   ├── log_desc.go
│   │   │   ├── ticket/
│   │   │   │   ├── log_desc.go
│   │   │   │   └── ticket.go
│   │   │   └── tls/
│   │   │       ├── log_desc.go
│   │   │       └── tls.go
│   │   ├── cmd/
│   │   │   └── verifier/
│   │   │       └── main.go
│   │   ├── command/
│   │   │   ├── command.go
│   │   │   ├── exit/
│   │   │   │   └── exit.go
│   │   │   ├── log_desc.go
│   │   │   └── status/
│   │   │       ├── isatty_linux.go
│   │   │       ├── isatty_other.go
│   │   │       └── status.go
│   │   ├── conf/
│   │   │   ├── conf.go
│   │   │   ├── conf_test.go
│   │   │   ├── log_desc.go
│   │   │   ├── testdata/
│   │   │   │   ├── election.dummy
│   │   │   │   ├── prefix.trust.dummy
│   │   │   │   ├── technical.dummy
│   │   │   │   └── trust.dummy
│   │   │   └── version/
│   │   │       ├── log_desc.go
│   │   │       └── version.go
│   │   ├── config/
│   │   │   ├── Makefile
│   │   │   ├── rsyslog-ivxv-templates.conf
│   │   │   ├── rsyslog-logcollector.conf
│   │   │   └── sudoers
│   │   ├── container/
│   │   │   ├── bdoc/
│   │   │   │   ├── asice.go
│   │   │   │   ├── asice_test.go
│   │   │   │   ├── bdoc.go
│   │   │   │   ├── bdoc_test.go
│   │   │   │   ├── c14n.go
│   │   │   │   ├── c14n_test.go
│   │   │   │   ├── log_desc.go
│   │   │   │   ├── mapstack.go
│   │   │   │   ├── pool.go
│   │   │   │   ├── reader.go
│   │   │   │   ├── reader_test.go
│   │   │   │   ├── testdata/
│   │   │   │   │   ├── canonicalSignedInfoCompact
│   │   │   │   │   ├── canonicalSignedInfoEID
│   │   │   │   │   ├── canonicalSignedInfoMID
│   │   │   │   │   ├── confNoCheckTM.yaml
│   │   │   │   │   ├── signatures0Compact.xml
│   │   │   │   │   ├── signatures0EID.xml
│   │   │   │   │   ├── signatures0MID.xml
│   │   │   │   │   ├── testEIDBES.bdoc
│   │   │   │   │   ├── testEIDTM.bdoc
│   │   │   │   │   ├── testEIDTS.bdoc
│   │   │   │   │   ├── testMIDTM.bdoc
│   │   │   │   │   ├── testMIDTS.bdoc
│   │   │   │   │   ├── testMultipleFiles.bdoc
│   │   │   │   │   ├── testMultipleSigners.bdoc
│   │   │   │   │   ├── testNoFiles.bdoc
│   │   │   │   │   ├── testNoManifest.bdoc
│   │   │   │   │   ├── testNoSignatures.bdoc
│   │   │   │   │   ├── testOCSPDelayed.bdoc
│   │   │   │   │   ├── testOCSPOld.bdoc
│   │   │   │   │   ├── trustBES.yaml
│   │   │   │   │   ├── trustTM.yaml
│   │   │   │   │   └── trustTS.yaml
│   │   │   │   ├── xades.go
│   │   │   │   ├── xml.go
│   │   │   │   └── xml_test.go
│   │   │   ├── container.go
│   │   │   ├── dummy/
│   │   │   │   ├── dummy.go
│   │   │   │   └── dummy_test.go
│   │   │   ├── log_desc.go
│   │   │   └── registry.go
│   │   ├── cookie/
│   │   │   ├── cookie.go
│   │   │   ├── cookie_test.go
│   │   │   └── log_desc.go
│   │   ├── crypto/
│   │   │   └── elgamal/
│   │   │       ├── ciphertext.go
│   │   │       ├── ciphertext_test.go
│   │   │       ├── elgamal.go
│   │   │       ├── log_desc.go
│   │   │       ├── x509.go
│   │   │       └── x509_test.go
│   │   ├── cryptoutil/
│   │   │   ├── cryptoutil.go
│   │   │   ├── cryptoutil_test.go
│   │   │   ├── log_desc.go
│   │   │   ├── rdn.go
│   │   │   ├── rdn_test.go
│   │   │   └── testdata/
│   │   │       ├── certificate-trailing-data.pem
│   │   │       ├── certificate-with-header.pem
│   │   │       ├── certificate-wrong-type.pem
│   │   │       ├── certificate.der
│   │   │       └── certificate.pem
│   │   ├── errors/
│   │   │   ├── errors.go
│   │   │   └── errors_test.go
│   │   ├── go.mod
│   │   ├── go.sum
│   │   ├── identity/
│   │   │   ├── identity.go
│   │   │   └── log_desc.go
│   │   ├── log/
│   │   │   ├── log.go
│   │   │   ├── log_test.go
│   │   │   └── testdata/
│   │   │       └── certificate.der
│   │   ├── mid/
│   │   │   ├── authenticate.go
│   │   │   ├── certificate.go
│   │   │   ├── http.go
│   │   │   ├── log_desc.go
│   │   │   ├── mid.go
│   │   │   ├── mid_test.go
│   │   │   ├── session.go
│   │   │   ├── sign.go
│   │   │   └── testdata/
│   │   │       ├── TEST_of_EE_Certification_Centre_Root_CA.pem
│   │   │       ├── TEST_of_ESTEID-SK_2015.pem
│   │   │       ├── TEST_of_SK_OCSP_RESPONDER_2020.pem
│   │   │       └── signer.pem
│   │   ├── ocsp/
│   │   │   ├── log_desc.go
│   │   │   ├── ocsp.go
│   │   │   ├── ocsp_test.go
│   │   │   ├── testdata/
│   │   │   │   ├── DEMO_of_KLASS3-SK_2016_SSL_OCSP_RESPONDER_2018.pem
│   │   │   │   ├── ESTEID-SK_2011.pem
│   │   │   │   ├── ESTEID-SK_2015.pem
│   │   │   │   ├── ID-PNOEE-39605244244.pem
│   │   │   │   ├── ID-PNOEE-41602290078.pem
│   │   │   │   ├── MID-PNOEE-60001018800.pem
│   │   │   │   ├── TEST_of_ESTEID-SK_2015.pem
│   │   │   │   ├── TEST_of_KLASS3-SK_2016.pem
│   │   │   │   ├── TEST_of_SK_OCSP_RESPONDER_2020.pem
│   │   │   │   ├── demo-of-klass3-sk-2016-ssl-ocsp-responder-2018.pem
│   │   │   │   ├── esteid2018.pem
│   │   │   │   ├── good.pem
│   │   │   │   ├── revoked.pem
│   │   │   │   ├── test_nonce
│   │   │   │   ├── test_response
│   │   │   │   ├── test_response_old
│   │   │   │   └── unknown.pem
│   │   │   └── types.go
│   │   ├── q11n/
│   │   │   ├── log_desc.go
│   │   │   ├── ocsp/
│   │   │   │   ├── log_desc.go
│   │   │   │   └── ocsp.go
│   │   │   ├── q11n.go
│   │   │   └── tsp/
│   │   │       ├── log_desc.go
│   │   │       └── tsp.go
│   │   ├── safereader/
│   │   │   ├── example_test.go
│   │   │   ├── log_desc.go
│   │   │   ├── reader.go
│   │   │   └── reader_test.go
│   │   ├── scripts/
│   │   │   ├── Makefile
│   │   │   ├── ivxv-admin-helper.sh
│   │   │   └── ivxv-admin-sudo.sh
│   │   ├── server/
│   │   │   ├── .gitignore
│   │   │   ├── codec.go
│   │   │   ├── codec_test.go
│   │   │   ├── context.go
│   │   │   ├── controller.go
│   │   │   ├── errors.go
│   │   │   ├── filter.go
│   │   │   ├── log_desc.go
│   │   │   ├── proxy.go
│   │   │   ├── server.go
│   │   │   ├── status.go
│   │   │   ├── tlsciphersuites
│   │   │   ├── util.go
│   │   │   ├── util_test.go
│   │   │   └── wait.go
│   │   ├── smartid/
│   │   │   ├── authenticate.go
│   │   │   ├── certificate.go
│   │   │   ├── http.go
│   │   │   ├── log_desc.go
│   │   │   ├── session.go
│   │   │   ├── sign.go
│   │   │   ├── smartid.go
│   │   │   ├── smartid_test.go
│   │   │   └── testdata/
│   │   │       ├── TEST_of_EE_Certification_Centre_Root_CA.pem
│   │   │       ├── TEST_of_EID-SK_2016.pem
│   │   │       └── TEST_of_SK_OCSP_RESPONDER_2020.pem
│   │   ├── status/
│   │   │   ├── client/
│   │   │   │   ├── client.go
│   │   │   │   └── rpc/
│   │   │   │       ├── builder.go
│   │   │   │       ├── builder_test.go
│   │   │   │       ├── client.go
│   │   │   │       ├── dto.go
│   │   │   │       ├── log_desc.go
│   │   │   │       ├── util.go
│   │   │   │       └── util_test.go
│   │   │   ├── conf.go
│   │   │   └── status.go
│   │   ├── storage/
│   │   │   ├── batch.go
│   │   │   ├── etcd/
│   │   │   │   ├── etcd.go
│   │   │   │   ├── log_desc.go
│   │   │   │   ├── logger.go
│   │   │   │   ├── status.go
│   │   │   │   └── txn.go
│   │   │   ├── file/
│   │   │   │   └── file.go
│   │   │   ├── log_desc.go
│   │   │   ├── memory/
│   │   │   │   └── memory.go
│   │   │   ├── registry.go
│   │   │   ├── status.go
│   │   │   ├── storage.go
│   │   │   ├── storage_dev.go
│   │   │   └── txn.go
│   │   ├── token/
│   │   │   ├── custom/
│   │   │   │   ├── bearer_test.go
│   │   │   │   ├── empty_bearer.go
│   │   │   │   ├── empty_bearer_test.go
│   │   │   │   ├── empty_builder.go
│   │   │   │   ├── existing_bearer.go
│   │   │   │   ├── existing_builder.go
│   │   │   │   ├── log_desc.go
│   │   │   │   ├── raw_bearer.go
│   │   │   │   ├── raw_bearer_test.go
│   │   │   │   ├── raw_builder.go
│   │   │   │   ├── util.go
│   │   │   │   └── util_test.go
│   │   │   ├── token.go
│   │   │   └── webeid/
│   │   │       ├── log_desc.go
│   │   │       ├── raw_builder.go
│   │   │       ├── raw_webeid.go
│   │   │       ├── raw_webeid_test.go
│   │   │       ├── testdata/
│   │   │       │   ├── token.example.json
│   │   │       │   ├── voter.auth.key
│   │   │       │   └── voter.auth.pem
│   │   │       ├── testdata.go
│   │   │       ├── util.go
│   │   │       ├── util_test.go
│   │   │       └── webeid_test.go
│   │   ├── tsp/
│   │   │   ├── cms.go
│   │   │   ├── log_desc.go
│   │   │   ├── testdata/
│   │   │   │   ├── DEMO_SK_TIMESTAMPING_AUTHORITY_2020.pem
│   │   │   │   ├── demo_tsu_ecc_2023.pem.crt
│   │   │   │   ├── test_response
│   │   │   │   └── test_response_08-11-2023
│   │   │   ├── tsp.go
│   │   │   ├── tsp_test.go
│   │   │   └── types.go
│   │   ├── yaml/
│   │   │   ├── ast.go
│   │   │   ├── ast_test.go
│   │   │   ├── doc.go
│   │   │   ├── lexer.go
│   │   │   ├── lexer_test.go
│   │   │   ├── log_desc.go
│   │   │   ├── parser.go
│   │   │   ├── parser_test.go
│   │   │   ├── testdata/
│   │   │   │   └── unmarshal.yaml
│   │   │   ├── unmarshal.go
│   │   │   └── unmarshal_test.go
│   │   └── zip/
│   │       ├── testdata/
│   │       │   ├── container1.asice
│   │       │   ├── container2.asice
│   │       │   ├── container3_general_purpose_bit3.bdoc
│   │       │   ├── mid1.bdoc
│   │       │   ├── mid2.bdoc
│   │       │   ├── smartid1.bdoc
│   │       │   └── smartid2.bdoc
│   │       ├── zip.go
│   │       └── zip_test.go
│   ├── external/
│   │   └── .gitignore
│   ├── go/
│   │   ├── common.mk
│   │   ├── golangci-lint.yaml
│   │   └── govar.mk
│   ├── java/
│   │   ├── .gitignore
│   │   ├── Makefile
│   │   ├── build.gradle
│   │   ├── common-build.gradle
│   │   ├── common-buildscript.gradle
│   │   ├── common.mk
│   │   ├── javavar.mk
│   │   ├── settings.gradle
│   │   ├── src/
│   │   │   ├── integration-test/
│   │   │   │   └── java/
│   │   │   │       └── ee/
│   │   │   │           └── ivxv/
│   │   │   │               └── common/
│   │   │   │                   ├── cli/
│   │   │   │                   │   └── TestContextFactory.java
│   │   │   │                   └── service/
│   │   │   │                       └── smartcard/
│   │   │   │                           └── dummy/
│   │   │   │                               ├── DummyCardService.java
│   │   │   │                               └── DummyPKCS15Card.java
│   │   │   └── main/
│   │   │       ├── java/
│   │   │       │   └── ee/
│   │   │       │       └── ivxv/
│   │   │       │           └── common/
│   │   │       │               ├── M.java
│   │   │       │               ├── asn1/
│   │   │       │               │   ├── ASN1Decodable.java
│   │   │       │               │   ├── ASN1DecodingException.java
│   │   │       │               │   ├── ASN1Encodable.java
│   │   │       │               │   ├── Ciphertext.java
│   │   │       │               │   ├── Field.java
│   │   │       │               │   ├── PKCS8PrivateKey.java
│   │   │       │               │   ├── RSAParams.java
│   │   │       │               │   ├── Sequence.java
│   │   │       │               │   └── X509PublicKey.java
│   │   │       │               ├── cli/
│   │   │       │               │   ├── App.java
│   │   │       │               │   ├── AppContext.java
│   │   │       │               │   ├── AppHelper.java
│   │   │       │               │   ├── AppRunner.java
│   │   │       │               │   ├── Arg.java
│   │   │       │               │   ├── Args.java
│   │   │       │               │   ├── CommandLine.java
│   │   │       │               │   ├── CommonArgs.java
│   │   │       │               │   ├── ContextFactory.java
│   │   │       │               │   ├── InitialContext.java
│   │   │       │               │   ├── Msg.java
│   │   │       │               │   ├── Option.java
│   │   │       │               │   ├── ParseException.java
│   │   │       │               │   ├── Tool.java
│   │   │       │               │   ├── ValidationResult.java
│   │   │       │               │   ├── VerifyTool.java
│   │   │       │               │   ├── YamlData.java
│   │   │       │               │   └── YamlDataExtension.java
│   │   │       │               ├── conf/
│   │   │       │               │   ├── Conf.java
│   │   │       │               │   ├── ConfBuilder.java
│   │   │       │               │   ├── ConfLoader.java
│   │   │       │               │   ├── ConfVerifier.java
│   │   │       │               │   ├── LocaleConf.java
│   │   │       │               │   ├── LocaleConfLoader.java
│   │   │       │               │   └── Msg.java
│   │   │       │               ├── crypto/
│   │   │       │               │   ├── CorrectnessUtil.java
│   │   │       │               │   ├── CryptoUtil.java
│   │   │       │               │   ├── Plaintext.java
│   │   │       │               │   ├── SignatureUtil.java
│   │   │       │               │   ├── elgamal/
│   │   │       │               │   │   ├── ElGamalCiphertext.java
│   │   │       │               │   │   ├── ElGamalDecryptionProof.java
│   │   │       │               │   │   ├── ElGamalParameters.java
│   │   │       │               │   │   ├── ElGamalPrivateKey.java
│   │   │       │               │   │   └── ElGamalPublicKey.java
│   │   │       │               │   ├── hash/
│   │   │       │               │   │   ├── HashFunction.java
│   │   │       │               │   │   ├── HashType.java
│   │   │       │               │   │   └── Sha256.java
│   │   │       │               │   └── rnd/
│   │   │       │               │       ├── CombineRnd.java
│   │   │       │               │       ├── DPRNG.java
│   │   │       │               │       ├── FileRnd.java
│   │   │       │               │       ├── NativeRnd.java
│   │   │       │               │       ├── Rnd.java
│   │   │       │               │       └── UserRnd.java
│   │   │       │               ├── math/
│   │   │       │               │   ├── ECGroup.java
│   │   │       │               │   ├── ECGroupElement.java
│   │   │       │               │   ├── Group.java
│   │   │       │               │   ├── GroupElement.java
│   │   │       │               │   ├── IntegerConstructor.java
│   │   │       │               │   ├── LagrangeInterpolation.java
│   │   │       │               │   ├── MathException.java
│   │   │       │               │   ├── MathUtil.java
│   │   │       │               │   ├── ModPGroup.java
│   │   │       │               │   ├── ModPGroupElement.java
│   │   │       │               │   ├── Polynomial.java
│   │   │       │               │   ├── ProductGroup.java
│   │   │       │               │   └── ProductGroupElement.java
│   │   │       │               ├── model/
│   │   │       │               │   ├── AnonymousBallotBox.java
│   │   │       │               │   ├── Ballot.java
│   │   │       │               │   ├── BallotBox.java
│   │   │       │               │   ├── CandidateList.java
│   │   │       │               │   ├── District.java
│   │   │       │               │   ├── DistrictList.java
│   │   │       │               │   ├── IBallotBox.java
│   │   │       │               │   ├── LName.java
│   │   │       │               │   ├── Proof.java
│   │   │       │               │   ├── Region.java
│   │   │       │               │   ├── RevocationList.java
│   │   │       │               │   ├── SkipCommand.java
│   │   │       │               │   ├── Voter.java
│   │   │       │               │   ├── VoterBallots.java
│   │   │       │               │   └── VoterList.java
│   │   │       │               ├── service/
│   │   │       │               │   ├── bbox/
│   │   │       │               │   │   ├── BboxHelper.java
│   │   │       │               │   │   ├── InvalidBboxException.java
│   │   │       │               │   │   ├── Ref.java
│   │   │       │               │   │   ├── Result.java
│   │   │       │               │   │   └── impl/
│   │   │       │               │   │       ├── AbstractStage.java
│   │   │       │               │   │       ├── BboxHelperImpl.java
│   │   │       │               │   │       ├── FileName.java
│   │   │       │               │   │       ├── FileSource.java
│   │   │       │               │   │       ├── IvxvBboxLoader.java
│   │   │       │               │   │       ├── IvxvRegDataLoader.java
│   │   │       │               │   │       ├── LoaderHelper.java
│   │   │       │               │   │       ├── Profile.java
│   │   │       │               │   │       ├── Record.java
│   │   │       │               │   │       ├── ResultException.java
│   │   │       │               │   │       ├── TspProfile.java
│   │   │       │               │   │       ├── ZipSource.java
│   │   │       │               │   │       ├── ZipSourceRaw.java
│   │   │       │               │   │       └── verify/
│   │   │       │               │   │           ├── TsSignature.java
│   │   │       │               │   │           └── TsVerifier.java
│   │   │       │               │   ├── console/
│   │   │       │               │   │   ├── BlockingQueueConsole.java
│   │   │       │               │   │   ├── Console.java
│   │   │       │               │   │   ├── InfiniteProgressImpl.java
│   │   │       │               │   │   ├── Progress.java
│   │   │       │               │   │   ├── ProgressImpl.java
│   │   │       │               │   │   └── TextFormatter.java
│   │   │       │               │   ├── container/
│   │   │       │               │   │   ├── Container.java
│   │   │       │               │   │   ├── ContainerReader.java
│   │   │       │               │   │   ├── DataFile.java
│   │   │       │               │   │   ├── InvalidContainerException.java
│   │   │       │               │   │   ├── Signature.java
│   │   │       │               │   │   ├── Subject.java
│   │   │       │               │   │   └── bdoc/
│   │   │       │               │   │       ├── BdocContainerReader.java
│   │   │       │               │   │       └── DataConverter.java
│   │   │       │               │   ├── i18n/
│   │   │       │               │   │   ├── Cal10nI18nImpl.java
│   │   │       │               │   │   ├── DefaultI18n.java
│   │   │       │               │   │   ├── I18n.java
│   │   │       │               │   │   ├── Message.java
│   │   │       │               │   │   ├── MessageException.java
│   │   │       │               │   │   └── Translatable.java
│   │   │       │               │   ├── report/
│   │   │       │               │   │   ├── CsvReporterImpl.java
│   │   │       │               │   │   ├── DefaultReporter.java
│   │   │       │               │   │   └── Reporter.java
│   │   │       │               │   └── smartcard/
│   │   │       │               │       ├── Apdu.java
│   │   │       │               │       ├── Card.java
│   │   │       │               │       ├── CardInfo.java
│   │   │       │               │       ├── CardService.java
│   │   │       │               │       ├── Cards.java
│   │   │       │               │       ├── IndexedBlob.java
│   │   │       │               │       ├── Msg.java
│   │   │       │               │       ├── SmartCardException.java
│   │   │       │               │       ├── TerminalUtil.java
│   │   │       │               │       └── pkcs15/
│   │   │       │               │           ├── PKCS15Card.java
│   │   │       │               │           ├── PKCS15CardService.java
│   │   │       │               │           ├── PKCS15Exception.java
│   │   │       │               │           └── PKCS15IndexedBlob.java
│   │   │       │               ├── util/
│   │   │       │               │   ├── ByteArrayWrapper.java
│   │   │       │               │   ├── CandidatesUtil.java
│   │   │       │               │   ├── ContainerHelper.java
│   │   │       │               │   ├── DistrictsUtil.java
│   │   │       │               │   ├── I18nConsole.java
│   │   │       │               │   ├── Json.java
│   │   │       │               │   ├── NameHolder.java
│   │   │       │               │   ├── PdfDoc.java
│   │   │       │               │   ├── SkipCommandUtil.java
│   │   │       │               │   ├── ToolHelper.java
│   │   │       │               │   ├── Util.java
│   │   │       │               │   └── log/
│   │   │       │               │       ├── LogJsonFormatter.java
│   │   │       │               │       └── PerformanceLog.java
│   │   │       │               └── zip/
│   │   │       │                   ├── Zip.java
│   │   │       │                   └── ZipFileCommentException.java
│   │   │       └── resources/
│   │   │           ├── bootstrap-i18n/
│   │   │           │   └── common-conf-localeconfloader-msg_et.properties
│   │   │           ├── log4j.properties
│   │   │           └── logback.xml
│   │   └── translations/
│   │       ├── i18n/
│   │       │   ├── audit-msg_et.properties
│   │       │   ├── common-cli-msg_et.properties
│   │       │   ├── common-conf-msg_et.properties
│   │       │   ├── common-model-bb-type_et.properties
│   │       │   ├── common-msg_et.properties
│   │       │   ├── common-smartcard-msg_et.properties
│   │       │   ├── key-msg_et.properties
│   │       │   └── processor-msg_et.properties
│   │       └── lang.properties
│   └── tools/
│       ├── go/
│       │   ├── .gitignore
│       │   ├── Makefile
│       │   ├── cmd/
│       │   │   └── gen/
│       │   │       ├── .gitignore
│       │   │       ├── description.go
│       │   │       ├── gen.tmpl
│       │   │       ├── gen_test.go
│       │   │       ├── generate.go
│       │   │       ├── gentmpl.sh
│       │   │       ├── main.go
│       │   │       ├── resolve.go
│       │   │       ├── testdata/
│       │   │       │   ├── declared/
│       │   │       │   │   └── declared.go
│       │   │       │   ├── duplicate/
│       │   │       │   │   └── duplicate.go
│       │   │       │   ├── empty/
│       │   │       │   │   └── empty.go
│       │   │       │   ├── local/
│       │   │       │   │   └── local.go
│       │   │       │   ├── nodescription/
│       │   │       │   │   └── nodescription.go
│       │   │       │   ├── nodescriptionempty/
│       │   │       │   │   └── nodescriptionempty.go
│       │   │       │   ├── nokeys/
│       │   │       │   │   └── nokeys.go
│       │   │       │   ├── single/
│       │   │       │   │   └── single.go
│       │   │       │   ├── unexportedkeys/
│       │   │       │   │   └── unexportedkeys.go
│       │   │       │   └── withtests/
│       │   │       │       ├── withtests.go
│       │   │       │       └── withtests_test.go
│       │   │       └── walk.go
│       │   └── go.mod
│       ├── pylintrc
│       ├── update_project_version.py
│       └── win32/
│           └── entropy/
│               ├── Aggregator.cpp
│               ├── Aggregator.h
│               ├── Counter.cpp
│               ├── Counter.h
│               ├── CounterManager.cpp
│               ├── CounterManager.h
│               ├── Error.cpp
│               ├── Error.h
│               ├── Makefile
│               ├── Network.cpp
│               ├── Protocol.cpp
│               ├── Protocol.h
│               ├── Slotter.cpp
│               ├── Slotter.h
│               ├── astylerc
│               ├── client.c
│               ├── resources.rc
│               └── server.cpp
├── core/
│   ├── .editorconfig
│   ├── .gitignore
│   ├── .golangci.yml
│   ├── Makefile
│   ├── README.md
│   ├── cmd/
│   │   ├── cms/
│   │   │   └── main.go
│   │   ├── errorgen/
│   │   │   ├── .gitignore
│   │   │   ├── Makefile
│   │   │   ├── gen.tmpl
│   │   │   ├── gen_test.go
│   │   │   ├── generate.go
│   │   │   ├── gentmpl.sh
│   │   │   ├── main.go
│   │   │   ├── resolve.go
│   │   │   ├── testdata/
│   │   │   │   ├── declared/
│   │   │   │   │   └── declared.go
│   │   │   │   ├── duplicate/
│   │   │   │   │   └── duplicate.go
│   │   │   │   ├── empty/
│   │   │   │   │   └── empty.go
│   │   │   │   ├── exists/
│   │   │   │   │   └── exists.go
│   │   │   │   ├── local/
│   │   │   │   │   └── local.go
│   │   │   │   ├── nokeys/
│   │   │   │   │   └── nokeys.go
│   │   │   │   ├── single/
│   │   │   │   │   └── single.go
│   │   │   │   ├── unexportedkeys/
│   │   │   │   │   └── unexportedkeys.go
│   │   │   │   └── withtests/
│   │   │   │       ├── withtests.go
│   │   │   │       └── withtests_test.go
│   │   │   └── walk.go
│   │   └── ts/
│   │       └── main.go
│   ├── common/
│   │   ├── files/
│   │   │   └── files.go
│   │   └── tar/
│   │       ├── tar.go
│   │       └── tar_test.go
│   ├── crypto/
│   │   ├── asn1/
│   │   │   └── asn1.go
│   │   ├── cades/
│   │   │   ├── cades-b.go
│   │   │   ├── cades-t.go
│   │   │   ├── cades_test.go
│   │   │   └── testdata/
│   │   │       ├── demo-ca-cert.pem
│   │   │       ├── demo-user-cert.pem
│   │   │       ├── plain-signed-attr.cms
│   │   │       └── plain-unsigned.txt
│   │   ├── cms/
│   │   │   ├── cms.go
│   │   │   ├── cms_test.go
│   │   │   ├── conf.go
│   │   │   └── testdata/
│   │   │       ├── nottrusted.pem
│   │   │       ├── test1.txt
│   │   │       ├── test1.txt.pk7
│   │   │       ├── test2.txt.pk7
│   │   │       └── trusted.pem
│   │   ├── crypto.go
│   │   ├── ecdsa/
│   │   │   ├── ecdsa.go
│   │   │   └── ecdsa_test.go
│   │   ├── elgamal/
│   │   │   ├── ciphertext.go
│   │   │   ├── decryption.go
│   │   │   ├── distributed/
│   │   │   │   ├── distributed.go
│   │   │   │   ├── distributed_test.go
│   │   │   │   ├── parameters.go
│   │   │   │   └── x509/
│   │   │   │       ├── pkcs8.go
│   │   │   │       └── x509.go
│   │   │   ├── elgamal.go
│   │   │   ├── elgamal_test.go
│   │   │   ├── homomorphic/
│   │   │   │   ├── homomorphic.go
│   │   │   │   └── homomorphic_test.go
│   │   │   ├── internal/
│   │   │   │   └── x509/
│   │   │   │       └── x509.go
│   │   │   ├── nizkp/
│   │   │   │   ├── ciphertext/
│   │   │   │   │   └── ciphertext.go
│   │   │   │   ├── key/
│   │   │   │   │   └── key.go
│   │   │   │   └── nizkp.go
│   │   │   ├── parameters.go
│   │   │   ├── proof.go
│   │   │   ├── shamir/
│   │   │   │   └── doc.go
│   │   │   └── x509/
│   │   │       ├── pkcs8.go
│   │   │       └── x509.go
│   │   ├── ocsp/
│   │   │   ├── conf.go
│   │   │   ├── ocsp.go
│   │   │   ├── ocsp_test.go
│   │   │   └── testdata/
│   │   │       ├── TESTCERT_GOOD_12345678901-sign.pem
│   │   │       ├── TESTCERT_REVOKED_12345678902-sign.pem
│   │   │       ├── TESTCERT_UNKNOWN_12345678903-sign.pem
│   │   │       ├── TEST_of_SK_OCSP_RESPONDER_2020.pem
│   │   │       ├── intermediate.pem
│   │   │       ├── response-good.der
│   │   │       ├── response-revoked.der
│   │   │       └── response-unknown.der
│   │   ├── timestamp/
│   │   │   ├── conf.go
│   │   │   ├── testdata/
│   │   │   │   ├── DEMO_SK_TIMESTAMPING_AUTHORITY_2020.pem
│   │   │   │   ├── response_1_test
│   │   │   │   ├── response_2_test
│   │   │   │   ├── response_3_test
│   │   │   │   ├── response_4_test
│   │   │   │   ├── response_5_test
│   │   │   │   ├── test_file_1
│   │   │   │   ├── test_file_2
│   │   │   │   ├── test_file_3
│   │   │   │   ├── test_file_4
│   │   │   │   └── test_file_5
│   │   │   ├── timestamp.go
│   │   │   └── timestamp_test.go
│   │   ├── util/
│   │   │   └── util.go
│   │   └── x509/
│   │       ├── encrypted_pkcs8.go
│   │       ├── internal/
│   │       │   ├── internal.go
│   │       │   ├── pem.go
│   │       │   └── pki.go
│   │       ├── marshal/
│   │       │   └── marshal.go
│   │       ├── pkcs8.go
│   │       ├── x509.go
│   │       └── x509_test.go
│   ├── encoding/
│   │   └── asn1/
│   │       └── asn1.go
│   ├── go.mod
│   ├── go.sum
│   ├── govar.mk
│   ├── math/
│   │   ├── group/
│   │   │   ├── all/
│   │   │   │   └── all.go
│   │   │   ├── ecqp/
│   │   │   │   ├── ecqp.go
│   │   │   │   ├── element.go
│   │   │   │   ├── element_test.go
│   │   │   │   ├── group.go
│   │   │   │   ├── group_encode_p384_7_test.go
│   │   │   │   ├── group_pad_byte_p384_7_test.go
│   │   │   │   ├── group_test.go
│   │   │   │   └── wellknown.go
│   │   │   ├── edwards25519/
│   │   │   │   └── edwards25519.go
│   │   │   ├── group.go
│   │   │   ├── group_test.go
│   │   │   ├── internal/
│   │   │   │   ├── errors.go
│   │   │   │   └── internal.go
│   │   │   ├── modqp/
│   │   │   │   ├── element.go
│   │   │   │   ├── group.go
│   │   │   │   ├── group_test.go
│   │   │   │   ├── modqp.go
│   │   │   │   └── wellknown.go
│   │   │   ├── padding.go
│   │   │   ├── registry.go
│   │   │   ├── scalar.go
│   │   │   └── scalar_test.go
│   │   ├── math.go
│   │   ├── math_test.go
│   │   └── polynomial/
│   │       ├── polynomial.go
│   │       └── polynomial_test.go
│   ├── test/
│   │   └── fixtures/
│   │       └── fixtures.go
│   ├── version.go
│   └── voterlist/
│       ├── persistence/
│       │   ├── bitcask.go
│       │   ├── bolt.go
│       │   └── factory.go
│       └── voterlist.go
├── debian/
│   ├── .gitignore
│   ├── changelog
│   ├── control
│   ├── copyright
│   ├── ivxv-admin.cron.d
│   ├── ivxv-admin.install
│   ├── ivxv-admin.ivxv-admin-agent.service
│   ├── ivxv-admin.lintian-overrides
│   ├── ivxv-admin.postinst
│   ├── ivxv-admin.postrm
│   ├── ivxv-admin.service
│   ├── ivxv-backup.install
│   ├── ivxv-backup.lintian-overrides
│   ├── ivxv-backup.postinst
│   ├── ivxv-backup.postrm
│   ├── ivxv-choices.install
│   ├── ivxv-choices.lintian-overrides
│   ├── ivxv-choices.postinst
│   ├── ivxv-choices.postrm
│   ├── ivxv-common.install
│   ├── ivxv-common.lintian-overrides
│   ├── ivxv-common.postinst
│   ├── ivxv-common.postrm
│   ├── ivxv-log.install
│   ├── ivxv-log.postinst
│   ├── ivxv-log.postrm
│   ├── ivxv-mid.install
│   ├── ivxv-mid.lintian-overrides
│   ├── ivxv-mid.postinst
│   ├── ivxv-mid.postrm
│   ├── ivxv-proxy.install
│   ├── ivxv-proxy.lintian-overrides
│   ├── ivxv-proxy.postinst
│   ├── ivxv-proxy.postrm
│   ├── ivxv-sessionstatus.install
│   ├── ivxv-sessionstatus.lintian-overrides
│   ├── ivxv-sessionstatus.postinst
│   ├── ivxv-sessionstatus.postrm
│   ├── ivxv-smartid.install
│   ├── ivxv-smartid.lintian-overrides
│   ├── ivxv-smartid.postinst
│   ├── ivxv-smartid.postrm
│   ├── ivxv-storage.install
│   ├── ivxv-storage.lintian-overrides
│   ├── ivxv-storage.postinst
│   ├── ivxv-storage.postrm
│   ├── ivxv-verification.install
│   ├── ivxv-verification.lintian-overrides
│   ├── ivxv-verification.postinst
│   ├── ivxv-verification.postrm
│   ├── ivxv-votesorder.install
│   ├── ivxv-votesorder.lintian-overrides
│   ├── ivxv-votesorder.postinst
│   ├── ivxv-votesorder.postrm
│   ├── ivxv-voting.install
│   ├── ivxv-voting.lintian-overrides
│   ├── ivxv-voting.postinst
│   ├── ivxv-voting.postrm
│   ├── ivxv-webeid.install
│   ├── ivxv-webeid.lintian-overrides
│   ├── ivxv-webeid.postinst
│   ├── ivxv-webeid.postrm
│   ├── python3-ivxv-common.install
│   ├── python3-ivxv-common.postinst
│   ├── python3-ivxv-common.prerm
│   └── rules
├── key/
│   ├── .gitignore
│   ├── Makefile
│   ├── README.rst
│   ├── build.gradle
│   ├── settings.gradle
│   ├── src/
│   │   └── main/
│   │       └── java/
│   │           └── ee/
│   │               └── ivxv/
│   │                   └── key/
│   │                       ├── Key.java
│   │                       ├── KeyApp.java
│   │                       ├── KeyContext.java
│   │                       ├── Msg.java
│   │                       ├── RandomSourceArg.java
│   │                       ├── model/
│   │                       │   ├── Invalid.java
│   │                       │   ├── PlainBallotBox.java
│   │                       │   ├── Tally.java
│   │                       │   └── Vote.java
│   │                       ├── protocol/
│   │                       │   ├── DecryptionProtocol.java
│   │                       │   ├── GenerationProtocol.java
│   │                       │   ├── ProtocolException.java
│   │                       │   ├── ProtocolUtil.java
│   │                       │   ├── SigningProtocol.java
│   │                       │   ├── ThresholdParameters.java
│   │                       │   ├── decryption/
│   │                       │   │   ├── desmedt/
│   │                       │   │   │   └── DesmedtDecryption.java
│   │                       │   │   └── recover/
│   │                       │   │       └── RecoverDecryption.java
│   │                       │   ├── generation/
│   │                       │   │   ├── desmedt/
│   │                       │   │   │   └── DesmedtGeneration.java
│   │                       │   │   ├── pedersen/
│   │                       │   │   │   └── NOTIMPLEMENTED
│   │                       │   │   └── shoup/
│   │                       │   │       └── ShoupGeneration.java
│   │                       │   └── signing/
│   │                       │       └── shoup/
│   │                       │           └── ShoupSigning.java
│   │                       ├── tool/
│   │                       │   ├── DecryptTool.java
│   │                       │   ├── GroupGenTool.java
│   │                       │   ├── InitTool.java
│   │                       │   ├── TestKeyTool.java
│   │                       │   └── UtilTool.java
│   │                       └── util/
│   │                           ├── ElectionResult.java
│   │                           └── QuorumUtil.java
│   └── tools/
│       └── pkcs15_initialization/
│           ├── README.rst
│           ├── card_options.conf
│           ├── erase_and_install.sh
│           └── erase_pkcs15.sh
├── mid/
│   ├── .gitignore
│   ├── Makefile
│   ├── README.rst
│   ├── go.mod
│   ├── go.sum
│   ├── internal/
│   │   └── sessionstatus/
│   │       └── rpc/
│   │           ├── client.go
│   │           └── log_desc.go
│   └── service/
│       └── mid/
│           ├── log_desc.go
│           └── main.go
├── processor/
│   ├── .gitignore
│   ├── Makefile
│   ├── README.rst
│   ├── build.gradle
│   ├── settings.gradle
│   └── src/
│       └── main/
│           └── java/
│               └── ee/
│                   └── ivxv/
│                       └── processor/
│                           ├── Msg.java
│                           ├── Processor.java
│                           ├── ProcessorApp.java
│                           ├── ProcessorContext.java
│                           ├── tool/
│                           │   ├── AnonymizeTool.java
│                           │   ├── CheckAndSquashTool.java
│                           │   ├── CheckTool.java
│                           │   ├── ExportTool.java
│                           │   ├── RevokeAndAnonymizeTool.java
│                           │   ├── RevokeTool.java
│                           │   ├── SquashTool.java
│                           │   ├── StatsDiffTool.java
│                           │   └── StatsTool.java
│                           └── util/
│                               ├── DistrictsMapper.java
│                               ├── ReportHelper.java
│                               ├── Statistics.java
│                               └── VotersUtil.java
├── proxy/
│   ├── .gitignore
│   ├── Makefile
│   ├── README.rst
│   ├── go.mod
│   └── service/
│       └── proxy/
│           ├── haproxy-rsyslog.conf
│           ├── haproxy.cfg.tmpl
│           ├── haproxy.go
│           ├── log_desc.go
│           └── main.go
├── scripts/
│   └── goimports.sh
├── sessionstatus/
│   ├── .gitignore
│   ├── Makefile
│   ├── README.rst
│   ├── api/
│   │   ├── Makefile
│   │   ├── README.rst
│   │   ├── go.mod
│   │   ├── go.sum
│   │   └── rpc/
│   │       ├── builder.go
│   │       ├── builder_test.go
│   │       ├── client.go
│   │       ├── dto.go
│   │       ├── endpoints.go
│   │       ├── log_desc.go
│   │       ├── rpc.go
│   │       ├── util.go
│   │       └── util_test.go
│   ├── go.mod
│   ├── go.sum
│   ├── internal/
│   │   └── rpc/
│   │       ├── log_desc.go
│   │       ├── repository.go
│   │       ├── server.go
│   │       ├── util.go
│   │       └── util_test.go
│   └── service/
│       └── sessionstatus/
│           ├── log_desc.go
│           └── main.go
├── setup.cfg
├── setup.py
├── smartid/
│   ├── .gitignore
│   ├── Makefile
│   ├── README.rst
│   ├── go.mod
│   ├── go.sum
│   ├── internal/
│   │   └── sessionstatus/
│   │       └── rpc/
│   │           ├── client.go
│   │           └── log_desc.go
│   └── service/
│       └── smartid/
│           ├── log_desc.go
│           └── main.go
├── storage/
│   ├── .gitignore
│   ├── Makefile
│   ├── README.rst
│   ├── cmd/
│   │   ├── storageidx/
│   │   │   ├── log_desc.go
│   │   │   └── main.go
│   │   └── storageorder/
│   │       ├── log_desc.go
│   │       └── main.go
│   ├── go.mod
│   ├── go.sum
│   └── service/
│       └── storage/
│           ├── cluster.go
│           ├── log_desc.go
│           ├── logger.go
│           └── main.go
├── systemd/
│   ├── .gitignore
│   ├── Makefile
│   ├── README.rst
│   └── ivxv-$service@.service.in
├── verification/
│   ├── .gitignore
│   ├── Makefile
│   ├── README.rst
│   ├── go.mod
│   ├── go.sum
│   ├── internal/
│   │   └── sessionstatus/
│   │       └── rpc/
│   │           ├── client.go
│   │           └── log_desc.go
│   └── service/
│       └── verification/
│           ├── log_desc.go
│           └── main.go
├── votesorder/
│   ├── .gitignore
│   ├── Makefile
│   ├── README.rst
│   ├── go.mod
│   ├── go.sum
│   └── service/
│       └── votesorder/
│           ├── log_desc.go
│           └── main.go
├── voting/
│   ├── .gitignore
│   ├── Makefile
│   ├── README.rst
│   ├── cmd/
│   │   ├── voteexp/
│   │   │   ├── log_desc.go
│   │   │   └── main.go
│   │   ├── voterstats/
│   │   │   ├── log_desc.go
│   │   │   ├── main.go
│   │   │   ├── period.go
│   │   │   └── period_test.go
│   │   └── voteunion/
│   │       ├── main.go
│   │       └── union_test.go
│   ├── go.mod
│   ├── go.sum
│   ├── internal/
│   │   ├── ciphertext.go
│   │   └── sessionstatus/
│   │       └── rpc/
│   │           ├── client.go
│   │           └── log_desc.go
│   └── service/
│       └── voting/
│           ├── log_desc.go
│           ├── main.go
│           ├── testdata/
│           │   ├── eligible.pem
│           │   └── ineligible.pem
│           └── voting_test.go
├── webeid/
│   ├── .gitignore
│   ├── Makefile
│   ├── go.mod
│   ├── go.sum
│   ├── internal/
│   │   └── sessionstatus/
│   │       └── rpc/
│   │           ├── client.go
│   │           └── log_desc.go
│   └── service/
│       └── webeid/
│           ├── handler.go
│           ├── log_desc.go
│           ├── main.go
│           └── util.go
└── xroad-service/
    ├── .gitignore
    ├── .goreleaser.yml
    ├── Makefile
    ├── README.rst
    ├── cmd/
    │   └── main.go
    ├── go.mod
    ├── go.sum
    ├── init/
    │   └── systemd/
    │       └── xroad-service.service
    ├── openapi/
    │   └── ehs-xroad-api.yaml
    ├── pkg/
    │   ├── conf/
    │   │   └── conf.go
    │   ├── configs/
    │   │   └── xroad-service.json
    │   ├── errors/
    │   │   ├── errors.go
    │   │   └── errors_test.go
    │   ├── server/
    │   │   └── handler.go
    │   └── service/
    │       └── service.go
    └── scripts/
        ├── postinstall.sh
        ├── postremove.sh
        └── preremove.sh

================================================
FILE CONTENTS
================================================

================================================
FILE: .editorconfig
================================================
# http://editorconfig.org

root = true

[*]
trim_trailing_whitespace = true
insert_final_newline = true
charset = utf-8
end_of_line = lf

[*.{conf,html,ini,jinja,sql,py}]
indent_style = space
indent_size = 4

[*.{json,schema,schema.example}]
indent_style = space
indent_size = 4
insert_final_newline = false

[*.{css,feature,js,pu,sh,yaml,yml}]
indent_style = space
indent_size = 2

[*.{inc,rst}]
indent_style = space
indent_size = 3

[Makefile]
indent_style = tab

[*.mk]
indent_style = tab

[debian/*{preinst,postinst,prerm,postrm}]
indent_style = space
indent_size = 4

[debian/changelog]
indent_style = space
indent_size = 2


================================================
FILE: .gitignore
================================================
*.swp
*.pyc
gen_types.go
gen_types_test.go
gen_import.go
gen_import_dev.go
__pycache__
.idea

# ivxv-admin
/build
/dist
/.pybuild
/collector-admin/IVXVCollectorAdminDaemon.egg-info


================================================
FILE: .gitmodules
================================================
[submodule "Documentation/public/liidesed/VIS3-EHS"]
  path = Documentation/public/liidesed/VIS3-EHS
  url = https://github.com/e-gov/VIS3-EHS.git
  branch = feature/tervikdokument


================================================
FILE: Documentation/.gitignore
================================================
_build
_master
*.mo


================================================
FILE: Documentation/Makefile
================================================
# This Makefile supports two different invocation "modes".
#
# The default mode, invoked via "all", "pdf", or "html", builds all of the
# documentation with a few exceptions, putting PDF files into $(DESTDIR)/pdf
# (_build/pdf by default) and HTML files into $(DESTDIR)/html (_build/html by
# default, "all" builds html only in development mode).
#
# Release mode, invoked via "release", builds only the release documents and
# puts the PDF files, examples, and PDF diffs into a release hierarchy created
# at $(DESTDIR) (_build/release by default).

# Can be overridden from the command line.
DESTDIR = _build

# Build all Estonian and English documentation with a few exceptions.
DOCS := $(wildcard internal/* public/* et/*)
DOCS := $(filter-out et/example-config,$(DOCS)) # Does not contain reST.
DOCS := $(filter-out internal/formal,$(DOCS))         # Does not contain reST.
DOCS := $(filter-out internal/ivxv-pyapi,$(DOCS))     # Too many Python dependencies.
DOCS := $(filter-out internal/entroopia,$(DOCS))      # Does not have a Makefile?
DOCS := $(filter-out internal/stresstesting,$(DOCS))  # Does not have a Makefile?

PDFDOCS   := $(DOCS:%=pdf-%)
DIFFDOCS   := $(DOCS:%=diff-%)
HTMLDOCS  := $(DOCS:%=html-%)

.PHONY: all
all: release

.PHONY: pdf
pdf: $(PDFDOCS)
	$(MAKE) -C public/arhitektuur install-en-pdf DESTDIR=$(abspath $(DESTDIR)/pdf)
	$(MAKE) -C public/liidesed install-en-pdf DESTDIR=$(abspath $(DESTDIR)/pdf)
	$(MAKE) -C public/protokollid install-en-pdf DESTDIR=$(abspath $(DESTDIR)/pdf)

.PHONY: $(PDFDOCS)
$(PDFDOCS): pdf-%:
	mkdir -p $(DESTDIR)/pdf
	$(MAKE) -C $* install-pdf DESTDIR=$(abspath $(DESTDIR)/pdf)


.PHONY: diff
diff: $(DIFFDOCS)

.PHONY: $(DIFFDOCS)
$(DIFFDOCS): diff-%:
	mkdir -p $(DESTDIR)/diff
	$(MAKE) -C $* install-diff DESTDIR=$(abspath $(DESTDIR)/diff)


.PHONY: html
html: $(HTMLDOCS)

.PHONY: $(HTMLDOCS)
$(HTMLDOCS): html-%:
	mkdir -p $(DESTDIR)/html/$(notdir $*) # Drop language prefix.
	$(MAKE) -C $* install-html DESTDIR=$(abspath $(DESTDIR)/html/$(notdir $*))


# Rules for generating release documentation.

RELEASE1 = "$(abspath $(DESTDIR))/1. Ülddokumendid"
DOCS1ET := public/uldsisukord

RELEASE2 = "$(abspath $(DESTDIR))/2. Spetsifikatsioonid"
DOCS2ET := \
	public/arhitektuur \
	public/liidesed \
	et/kasutusmall \
	public/protokollid \
	et/xteeteenus \
	et/votmerakendus
DOCS2EN := \
	public/arhitektuur \
	public/liidesed \
	public/protokollid \
	en/backendlogs

RELEASE3 = "$(abspath $(DESTDIR))/3. Juhendid"
DOCS3ET := \
	et/haldusteenus \
	et/kogumisteenuse_haldusjuhend \
	et/seadistuste_koostejuhend \
	et/audiitor

RELEASE4 = "$(abspath $(DESTDIR))/4. Näited"
DOCS4ET := \
	et/example-config \
	et/seadistuste_koostejuhend/config-examples/android-ios-config.json

RELEASE5 = "$(abspath $(DESTDIR))/5. Muudatused"

RELEASEDOCSET := $(patsubst %,release-et-%,$(DOCS1ET) $(DOCS2ET) $(DOCS3ET) $(DOCS4ET))
RELEASEDOCSEN := $(patsubst %,release-en-%,$(DOCS1EN) $(DOCS2EN))

# If releasing locally (i.e., no explicit DESTDIR is given), then use
# _build/release. RELEASE[1-5] must be recursively expanded for this to work.
$(RELEASEDOCSET): DESTDIR := $(DESTDIR)/release
$(RELEASEDOCSEN): DESTDIR := $(DESTDIR)/release

.PHONY: release
release: $(RELEASEDOCSET) $(RELEASEDOCSEN)

.PHONY: $(RELEASEDOCSET)
$(DOCS1ET:%=release-et-%): release-et-%:
	mkdir -p $(RELEASE1)
	$(MAKE) -C $* install-pdf DESTDIR=$(RELEASE1)
	mkdir -p $(RELEASE5)
	$(MAKE) -C $* install-diff DESTDIR=$(RELEASE5)

$(DOCS2ET:%=release-et-%): release-et-%:
	mkdir -p $(RELEASE2)
	$(MAKE) -C $* install-pdf DESTDIR=$(RELEASE2)
	mkdir -p $(RELEASE5)
	$(MAKE) -C $* install-diff DESTDIR=$(RELEASE5)

$(DOCS3ET:%=release-et-%): release-et-%:
	mkdir -p $(RELEASE3)
	$(MAKE) -C $* install-pdf DESTDIR=$(RELEASE3)
	mkdir -p $(RELEASE5)
	$(MAKE) -C $* install-diff DESTDIR=$(RELEASE5)

$(DOCS4ET:%=release-et-%): release-et-%:
	mkdir -p $(RELEASE4)
	cp --recursive --update $* $(RELEASE4)


.PHONY: $(RELEASEDOCSEN)
$(DOCS2EN:%=release-en-%): release-en-%:
	mkdir -p $(RELEASE2)
	$(MAKE) -C $* install-en-pdf DESTDIR=$(RELEASE2)


# Cleanup.

# DOCS already contains DOCS[1-3].
CLEANDOCS := $(DOCS:%=clean-%)

.PHONY: clean
clean: $(CLEANDOCS)
	-git worktree remove --force _master
	rm -rf $(DESTDIR) _master
	py3clean .

.PHONY: $(CLEANDOCS)
$(CLEANDOCS): clean-%:
	$(MAKE) -C $* clean


================================================
FILE: Documentation/_static/custom.css
================================================
/*
 * IVXV Internet voting framework
 *
 * Sphinx stylesheet for HTML documentation
 */

.figure {
  background-color: rgba(128, 128, 128, 0.1);
  border: thin dotted gray;
}

.caption {
  border-bottom: thin solid gray;
}

/* Highlight target section */

.section:target {
  background-color: rgba(220, 220, 255, 0.2);
  box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.2);
  padding: 10px 5px 5px 5px;
}

/*
 * vim:foldmethod=syntax:
 */


================================================
FILE: Documentation/common/examples/id.rpc.vote.query.json
================================================
{
    "id": 0.0,
    "method": "RPC.Vote",
    "params": [
        {
            "AuthMethod": "tls",
            "Choices": "0140.1",
            "SessionID": "ec3a0cab353d552952289f2c7ad52e27",
            "OS": "Operating System,2,0",
            "Type": "bdoc",
            "Vote": "UEsDBAoABgAAAAIAAAAbWltZXR5cGVhcHBsaWNhdGlv\nbi92bmQuZX..."
        }
    ]
}


================================================
FILE: Documentation/common/examples/id.rpc.vote.response.json
================================================
{
    "error": null,
    "id": 0.0,
    "result": {
        "Qualification": {
            "ocsp": "MIIFTAoBAKCCBUUwggVBBgkrBgEFBQcwAQEEggUyMIIFLjCB5qFMME...",
            "tspreg": "MIIDsAYJKoZIhvcNAQcCoIIDoTCCA50CAQMxCzAJBgUrDgMCGgQS..."
        },
        "SessionID": "ec3a0cab353d552952289f2c7ad52e27",
        "TestVote": true,
        "VoteID": "VM/cUIU4n7VjxpUx1fC00Q=="
    }
}


================================================
FILE: Documentation/common/examples/id.rpc.voterchoices.query.json
================================================
{
    "id": 0.0,
    "method": "RPC.VoterChoices",
    "params": [
        {
            "AuthMethod": "tls",
            "OS": "Operating System,2,0"
        }
    ]
}


================================================
FILE: Documentation/common/examples/id.rpc.voterchoices.response.json
================================================
{
    "error": null,
    "id": 0.0,
    "result": {
        "Choices": "0140.1",
        "List": "ew0KICAgICAgICAgICAgIkVyYWtvbmQgMSI6IHsNCiAgICAgICAgICAgIC...",
        "SessionID": "ec3a0cab353d552952289f2c7ad52e27",
        "Voted": true
    }
}


================================================
FILE: Documentation/common/examples/json.rpc.method.query.json
================================================
{
    "id": 0.0,
    "method": "RPC.Method",
    "params": [
        {
            "MethodParam": "value",
            "SessionID": "ec3a0cab353d552952289f2c7ad52e27"
        }
    ]
}


================================================
FILE: Documentation/common/examples/json.rpc.method.response.json
================================================
{
    "error": null,
    "id": 0.0,
    "result": {
        "ResultParam": "value",
        "SessionID": "ec3a0cab353d552952289f2c7ad52e27"
    }
}


================================================
FILE: Documentation/common/examples/mid.rpc.authenticate.query.json
================================================
{
    "id": 0.0,
    "method": "RPC.Authenticate",
    "params": [
        {
            "OS": "Operating System,2,0",
            "IDCode": "60001019906",
            "PhoneNo": "+37200000766"
        }
    ]
}


================================================
FILE: Documentation/common/examples/mid.rpc.authenticate.response.json
================================================
{
    "error": null,
    "id": 0.0,
    "result": {
        "Challenge": "EtsTur4XV7xEGS9LBjHSfF9Cc5PQxtYW+YAOysRIt2r...",
        "SessionCode": "2127729011",
        "SessionID": "057229fdfa2df7d3c7f4ced81b02760b",
        "DataToken": "G1GTSqBSBKrzqReuKYrmFUFXWFPkisjJjdiZi6zqAnaK3OvrT2Qu6..."
    }
}


================================================
FILE: Documentation/common/examples/mid.rpc.authenticatestatus.query.json
================================================
{
    "id": 0.0,
    "method": "RPC.AuthenticateStatus",
    "params": [
        {
            "OS": "Operating System,2,0",
            "SessionCode": "2127729011",
            "SessionID": "057229fdfa2df7d3c7f4ced81b02760b"
        }
    ]
}


================================================
FILE: Documentation/common/examples/mid.rpc.authenticatestatus.response.json
================================================
{
    "error": null,
    "id": 0.0,
    "result": {
        "AuthToken": null,
        "GivenName": "",
        "PersonalCode": "",
        "SessionID": "057229fdfa2df7d3c7f4ced81b02760b",
        "Status": "POLL",
        "Surname": ""
    }
}


================================================
FILE: Documentation/common/examples/mid.rpc.authenticatestatus2.query.json
================================================
{
    "id": 0.0,
    "method": "RPC.AuthenticateStatus",
    "params": [
        {
            "OS": "Operating System,2,0",
            "SessionCode": "2127729011",
            "SessionID": "057229fdfa2df7d3c7f4ced81b02760b"
        }
    ]
}


================================================
FILE: Documentation/common/examples/mid.rpc.authenticatestatus2.response.json
================================================
{
    "error": null,
    "id": 0.0,
    "result": {
        "AuthToken": "G1RTZqBSBKrzqReuKYrmFUFXWFPvaxhJjdiZi6zqAnaK3OvrT2Qu6...",
        "GivenName": "MARY \u00c4NN",
        "PersonalCode": "60001019906",
        "SessionID": "057229fdfa2df7d3c7f4ced81b02760b",
        "Status": "OK",
        "Surname": "O\u2019CONNE\u017d-\u0160USLIK"
    }
}


================================================
FILE: Documentation/common/examples/mid.rpc.getcertificate.query.json
================================================
{
    "id": 0.0,
    "method": "RPC.GetCertificate",
    "params": [
        {
            "AuthMethod": "ticket",
            "AuthToken": "G1RTZqBSBKrzqReuKYrmFUFXWFPvaxhJjdiZi6zqAnaK3OvrT...",
            "DataToken": "G1GTSqBSBKrzqReuKYrmFUFXWFPkisjJjdiZi6zqAnaK3OvrT2Qu6...",
            "OS": "Operating System,2,0",
            "SessionID": "057229fdfa2df7d3c7f4ced81b02760b"
        }
    ]
}


================================================
FILE: Documentation/common/examples/mid.rpc.getcertificate.response.json
================================================
{
    "error": null,
    "id": 0.0,
    "result": {
        "Certificate": "MIIEVjCCAz6gAwIBAgIQRfmbsIcpkQ9UhxScCwG6VDANBgkqhki...",
        "SessionID": "057229fdfa2df7d3c7f4ced81b02760b"
    }
}


================================================
FILE: Documentation/common/examples/mid.rpc.sign.query.json
================================================
{
    "id": 0.0,
    "method": "RPC.Sign",
    "params": [
        {
            "AuthMethod": "ticket",
            "AuthToken": "G1RTZqBSBKrzqReuKYrmFUFXWFPvaxhJjdiZi6zqAnaK3OvrT...",
            "DataToken": "G1GTSqBSBKrzqReuKYrmFUFXWFPkisjJjdiZi6zqAnaK3OvrT2Qu6...",
            "Hash": "9IBrA05ylt2StdjxKkSTYMW/rQXY3Vub4upzShdfEzo=",
            "HashType": "SHA256",
            "OS": "Operating System,2,0",
            "SessionID": "057229fdfa2df7d3c7f4ced81b02760b"
        }
    ]
}


================================================
FILE: Documentation/common/examples/mid.rpc.sign.response.json
================================================
{
    "error": null,
    "id": 0.0,
    "result": {
        "SessionCode": "E663A711BB9447EAD82491F9372F4CA",
        "SessionID": "057229fdfa2df7d3c7f4ced81b02760b"
    }
}


================================================
FILE: Documentation/common/examples/mid.rpc.signstatus.query.json
================================================
{
    "id": 0.0,
    "method": "RPC.SignStatus",
    "params": [
        {
            "OS": "Operating System,2,0",
            "SessionCode": "E663A711BB9447EAD82491F9372F4CA",
            "SessionID": "057229fdfa2df7d3c7f4ced81b02760b"
        }
    ]
}


================================================
FILE: Documentation/common/examples/mid.rpc.signstatus.response.json
================================================
{
    "error": null,
    "id": 0.0,
    "result": {
        "SessionID": "057229fdfa2df7d3c7f4ced81b02760b",
        "Signature": null,
        "Status": "POLL"
    }
}


================================================
FILE: Documentation/common/examples/mid.rpc.signstatus2.query.json
================================================
{
    "id": 0.0,
    "method": "RPC.SignStatus",
    "params": [
        {
            "OS": "Operating System,2,0",
            "SessionCode": "E663A711BB9447EAD82491F9372F4CA",
            "SessionID": "057229fdfa2df7d3c7f4ced81b02760b"
        }
    ]
}


================================================
FILE: Documentation/common/examples/mid.rpc.signstatus2.response.json
================================================
{
    "error": null,
    "id": 0.0,
    "result": {
        "SessionID": "057229fdfa2df7d3c7f4ced81b02760b",
        "Signature": "MOj+8xQ9DmZPr/ItHlm0tHNMCuTgn6dT9jcXjPLf0+2sVjsS11jRI...",
        "Algorithm": "SHA256WithECEncryption",
        "Status": "OK"
    }
}


================================================
FILE: Documentation/common/examples/mid.rpc.vote.query.json
================================================
{
    "id": 0.0,
    "method": "RPC.Vote",
    "params": [
        {
            "AuthMethod": "ticket",
            "AuthToken": "G1RTZqBSBKrzqReuKYrmFUFXWFPvaxhJjdiZi6zqAnaK3OvrT...",
            "Choices": "0919.1",
            "SessionID": "057229fdfa2df7d3c7f4ced81b02760b",
            "OS": "Operating System,2,0",
            "Type": "bdoc",
            "Vote": "UEsDBAoAAAAAAAAAAACKIflFHwAAAB8AAAAIAAAAbWltZXR5cGVhcHB..."
        }
    ]
}


================================================
FILE: Documentation/common/examples/mid.rpc.vote.response.json
================================================
{
    "error": null,
    "id": 0.0,
    "result": {
        "Qualification": {
            "ocsp": "MIIG7QoBAKCCBuYwggbiBgkrBgEFBQcwAQEEggbTMIIGzzCCASGhgY...",
            "tspreg": "MIIE0QYJKoZIhvcNAQcCoIIEwjCCBL4CAQMxDzANBglghkgBZQMEA..."
        },
        "SessionID": "057229fdfa2df7d3c7f4ced81b02760b",
        "TestVote": true,
        "VoteID": "dWf/HUQVqXili7BeX2JAZQ=="
    }
}


================================================
FILE: Documentation/common/examples/mid.rpc.voterchoices.query.json
================================================
{
    "id": 0.0,
    "method": "RPC.VoterChoices",
    "params": [
        {
            "AuthMethod": "ticket",
            "AuthToken": "G1RTZqBSBKrzqReuKYrmFUFXWFPvaxhJjdiZi6zqAnaK3OvrT...",
            "OS": "Operating System,2,0",
            "SessionID": "057229fdfa2df7d3c7f4ced81b02760b"
        }
    ]
}


================================================
FILE: Documentation/common/examples/mid.rpc.voterchoices.response.json
================================================
{
    "error": null,
    "id": 0.0,
    "result": {
        "Choices": "0919.1",
        "List": "ew0KICAgICAgICAgICAgIsOca3Npa2thbmRpZGFhZGlkIjogew0KICAgIC...",
        "SessionID": "057229fdfa2df7d3c7f4ced81b02760b",
        "Voted": true
    }
}


================================================
FILE: Documentation/common/examples/smartid.rpc.authenticate.query.json
================================================
{
    "id": 0.0,
    "method": "RPC.Authenticate",
    "params": [
        {
            "OS": "Operating System,2,0",
            "XSmartIDAuth": "4wesTurtYW+66BjHSfF9CcAQEB56It2rW+11112018Reji==...",
            "SessionID": "057229fdfa2df7d3c7f4ced81b02760b",
            "Identifier": "60001019906"
        }
    ]
}


================================================
FILE: Documentation/common/examples/smartid.rpc.authenticate.response.json
================================================
{
    "error": null,
    "id": 0.0,
    "result": {
        "XSmartIDAuth": "4wesTurtYW+66BjHSfF9CcAQEB56It2rW+11112018Reji==...",
        "SessionID": "057229fdfa2df7d3c7f4ced81b02760b",
        "SessionCode": "2127729011",
    }
}


================================================
FILE: Documentation/common/examples/smartid.rpc.authenticatestatus.query.json
================================================
{
    "id": 0.0,
    "method": "RPC.AuthenticateStatus",
    "params": [
        {
            "OS": "Operating System,2,0",
            "SessionCode": "2127729011",
            "XSmartIDAuth": "4wesTurtYW+66BjHSfF9CcAQEB56It2rW+11112018Reji==...",
            "SessionID": "057229fdfa2df7d3c7f4ced81b02760b"
        }
    ]
}


================================================
FILE: Documentation/common/examples/smartid.rpc.authenticatestatus.response.json
================================================
{
    "error": null,
    "id": 0.0,
    "result": {
        "AuthToken": null,
        "DataToken": null,
        "GivenName": "",
        "PersonalCode": "",
        "SessionID": "057229fdfa2df7d3c7f4ced81b02760b",
        "XSmartIDAuth": "4wesTurtYW+66BjHSfF9CcAQEB56It2rW+11112018Reji==...",
        "Status": "POLL",
        "Surname": ""
    }
}


================================================
FILE: Documentation/common/examples/smartid.rpc.authenticatestatus2.query.json
================================================
{
    "id": 0.0,
    "method": "RPC.AuthenticateStatus",
    "params": [
        {
            "OS": "Operating System,2,0",
            "SessionCode": "2127729011",
            "XSmartIDAuth": "4wesTurtYW+66BjHSfF9CcAQEB56It2rW+11112018Reji==...",
            "SessionID": "057229fdfa2df7d3c7f4ced81b02760b"
        }
    ]
}


================================================
FILE: Documentation/common/examples/smartid.rpc.authenticatestatus2.response.json
================================================
{
    "error": null,
    "id": 0.0,
    "result": {
        "AuthToken": "G1RTZqBSBKrzqReuKYrmFUFXWFPvaxhJjdiZi6zqAnaK3OvrT2Qu6...",
        "DataToken": "G1RTZqBSBKrzqReuKYrmFUFXWkajsdhaiuhdaksdj62vrT2Qu6...",
        "GivenName": "MARY \u00c4NN",
        "PersonalCode": "60001019906",
        "SessionID": "057229fdfa2df7d3c7f4ced81b02760b",
        "Status": "OK",
        "Surname": "O\u2019CONNE\u017d-\u0160USLIK"
    }
}


================================================
FILE: Documentation/common/examples/smartid.rpc.challenge.query.json
================================================
{
    "id": 0.0,
    "method": "RPC.Challenge",
    "params": [
        {
            "OS": "Operating System,2,0",
        }
    ]
}


================================================
FILE: Documentation/common/examples/smartid.rpc.challenge.response.json
================================================
{
    "error": null,
    "id": 0.0,
    "result": {
        "Challenge": "EtsTur4XV7xEGS9LBjHSfF9Cc5PQxtYW+YAOysRIt2r...",
        "XSmartIDAuth": "4wesTurtYW+66BjHSfF9CcAQEB56It2rW+11112018Reji==...",
        "SessionID": "057229fdfa2df7d3c7f4ced81b02760b"
    }
}


================================================
FILE: Documentation/common/examples/smartid.rpc.getcertificatechoice.query.json
================================================
{
    "id": 0.0,
    "method": "RPC.GetCertificateChoice",
    "params": [
        {
            "AuthMethod": "ticket",
            "AuthToken": "G1RTZqBSBKrzqReuKYrmFUFXWFPvaxhJjdiZi6zqAnaK3OvrT...",
            "DataToken": "G1RTZqBSBKrzqReuKYrmFUFXWkajsdhaiuhdaksdj62vrT2Qu6...",
            "OS": "Operating System,2,0",
            "SessionID": "057229fdfa2df7d3c7f4ced81b02760b"
        }
    ]
}


================================================
FILE: Documentation/common/examples/smartid.rpc.getcertificatechoice.response.json
================================================
{
    "error": null,
    "id": 0.0,
    "result": {
        "SessionID": "057229fdfa2df7d3c7f4ced81b02760b",
        "SessionCode": "2127729011"
    }
}


================================================
FILE: Documentation/common/examples/smartid.rpc.getcertificatechoicestatus.query.json
================================================
{
    "id": 0.0,
    "method": "RPC.GetCertificateChoiceStatus",
    "params": [
        {
            "SessionCode": "2127729011",
            "SessionID": "057229fdfa2df7d3c7f4ced81b02760b",
            "OS": "Operating System,2,0"
        }
    ]
}


================================================
FILE: Documentation/common/examples/smartid.rpc.getcertificatechoicestatus.response.json
================================================
{
    "error": null,
    "id": 0.0,
    "result": {
        "Certificate": null,
        "SessionID": "057229fdfa2df7d3c7f4ced81b02760b",
        "Status": "POLL"
    }
}


================================================
FILE: Documentation/common/examples/smartid.rpc.getcertificatechoicestatus2.response.json
================================================
{
    "error": null,
    "id": 0.0,
    "result": {
        "Certificate": "MIIEVjCCAz6gAwIBAgIQRfmbsIcpkQ9UhxScCwG6VDANBgkqhki...",
        "SessionID": "057229fdfa2df7d3c7f4ced81b02760b",
        "Status": "OK"
    }
}


================================================
FILE: Documentation/common/examples/smartid.rpc.sign.query.json
================================================
{
    "id": 0.0,
    "method": "RPC.Sign",
    "params": [
        {
            "AuthMethod": "ticket",
            "AuthToken": "G1RTZqBSBKrzqReuKYrmFUFXWFPvaxhJjdiZi6zqAnaK3OvrT...",
            "DataToken": "G1RTZqBSBKrzqReuKYrmFUFXWkajsdhaiuhdaksdj62vrT2Qu6...",
            "Hash": "9IBrA05ylt2StdjxKkSTYMW/rQXY3Vub4upzShdfEzo=",
            "HashType": "SHA256",
            "OS": "Operating System,2,0",
            "SessionID": "057229fdfa2df7d3c7f4ced81b02760b"
        }
    ]
}


================================================
FILE: Documentation/common/examples/smartid.rpc.sign.response.json
================================================
{
    "error": null,
    "id": 0.0,
    "result": {
        "SessionCode": "E663A711BB9447EAD82491F9372F4CA",
        "SessionID": "057229fdfa2df7d3c7f4ced81b02760b"
    }
}


================================================
FILE: Documentation/common/examples/smartid.rpc.signstatus.query.json
================================================
{
    "id": 0.0,
    "method": "RPC.SignStatus",
    "params": [
        {
            "OS": "Operating System,2,0",
            "SessionCode": "E663A711BB9447EAD82491F9372F4CA",
            "SessionID": "057229fdfa2df7d3c7f4ced81b02760b"
        }
    ]
}


================================================
FILE: Documentation/common/examples/smartid.rpc.signstatus.response.json
================================================
{
    "error": null,
    "id": 0.0,
    "result": {
        "SessionID": "057229fdfa2df7d3c7f4ced81b02760b",
        "Signature": null,
        "Status": "POLL"
    }
}


================================================
FILE: Documentation/common/examples/smartid.rpc.signstatus2.query.json
================================================
{
    "id": 0.0,
    "method": "RPC.SignStatus",
    "params": [
        {
            "OS": "Operating System,2,0",
            "SessionCode": "E663A711BB9447EAD82491F9372F4CA",
            "SessionID": "057229fdfa2df7d3c7f4ced81b02760b"
        }
    ]
}


================================================
FILE: Documentation/common/examples/smartid.rpc.signstatus2.response.json
================================================
{
    "error": null,
    "id": 0.0,
    "result": {
        "SessionID": "057229fdfa2df7d3c7f4ced81b02760b",
        "Signature": "MOj+8xQ9DmZPr/ItHlm0tHNMCuTgn6dT9jcXjPLf0+2sVjsS11jRI...",
        "Algorithm": "sha256WithRSAEncryption",
        "Status": "OK"
    }
}


================================================
FILE: Documentation/common/examples/smartid.rpc.vote.query.json
================================================
{
    "id": 0.0,
    "method": "RPC.Vote",
    "params": [
        {
            "AuthMethod": "ticket",
            "AuthToken": "G1RTZqBSBKrzqReuKYrmFUFXWFPvaxhJjdiZi6zqAnaK3OvrT...",
            "Choices": "0919.1",
            "SessionID": "057229fdfa2df7d3c7f4ced81b02760b",
            "OS": "Operating System,2,0",
            "Type": "bdoc",
            "Vote": "UEsDBAoAAAAAAAAAAACKIflFHwAAAB8AAAAIAAAAbWltZXR5cGVhcHB..."
        }
    ]
}


================================================
FILE: Documentation/common/examples/smartid.rpc.vote.response.json
================================================
{
    "error": null,
    "id": 0.0,
    "result": {
        "Qualification": {
            "ocsp": "MIIG7QoBAKCCBuYwggbiBgkrBgEFBQcwAQEEggbTMIIGzzCCASGhgY...",
            "tspreg": "MIIE0QYJKoZIhvcNAQcCoIIEwjCCBL4CAQMxDzANBglghkgBZQMEA..."
        },
        "SessionID": "057229fdfa2df7d3c7f4ced81b02760b",
        "TestVote": true,
        "VoteID": "dWf/HUQVqXili7BeX2JAZQ=="
    }
}


================================================
FILE: Documentation/common/examples/smartid.rpc.voterchoices.query.json
================================================
{
    "id": 0.0,
    "method": "RPC.VoterChoices",
    "params": [
        {
            "AuthMethod": "ticket",
            "AuthToken": "G1RTZqBSBKrzqReuKYrmFUFXWFPvaxhJjdiZi6zqAnaK3OvrT...",
            "OS": "Operating System,2,0",
            "SessionID": "057229fdfa2df7d3c7f4ced81b02760b"
        }
    ]
}


================================================
FILE: Documentation/common/examples/smartid.rpc.voterchoices.response.json
================================================
{
    "error": null,
    "id": 0.0,
    "result": {
        "Choices": "0919.1",
        "List": "ew0KICAgICAgICAgICAgIsOca3Npa2thbmRpZGFhZGlkIjogew0KICAgIC...",
        "SessionID": "057229fdfa2df7d3c7f4ced81b02760b",
        "Voted": true
    }
}


================================================
FILE: Documentation/common/examples/ver.rpc.verify.query.json
================================================
{
    "id": 1,
    "method": "RPC.Verify",
    "params": [
        {
            "OS": "Operating System,2,0",
            "SessionID": "ec3a0cab353d552952289f2c7ad52e27",
            "VoteID": "VM/cUIU4n7VjxpUx1fC00Q=="
        }
    ]
}


================================================
FILE: Documentation/common/examples/ver.rpc.verify.response.json
================================================
{
    "error": null,
    "id": 1,
    "result": {
        "Qualification": {
            "ocsp": "MIIG8woBAKCCBuwwggboBgkrBgEFBQcwAQEEggbZMIIG1TCCASehgY...",
            "tspreg": "MIIE0QYJKoZIhvcNAQcCoIIEwjCCBL4CAQMxDzANBglghkgBDQEJE..."
        },
        "SessionID": "027ab451969d9d3f044ea2cb2675b503",
        "Type": "bdoc",
        "Vote": "UEsDBAoAAAAAAAAAAACKIflFHwAAAB8AAAAIAAAAbWltZXR5cGVhcHB...",
        "ChoicesList": "ew0KICAgICAgICAgICAgIkVyYWtvbmQgMSI6IHsNCiAgICAgICAgICAgIC..."
    }
}


================================================
FILE: Documentation/common/examples/votesorder.rpc.votes.query.json
================================================
{
    "id": 0.0,
    "method": "RPC.Votes",
    "params": [
        {
            "VotesFrom": 1,
            "BatchMaxSize": 1000
        }
    ]
}


================================================
FILE: Documentation/common/examples/votesorder.rpc.votes.response.json
================================================
{
    "error": null,
    "id": 0.0,
    "result": {
        "SessionID": "057229fdfa2df7d3c7f4ced81b02760b",
        "batchRecords": [
            {
                "seqNo": 1,
                "idCode": "37123097845",
                "voterName": "NIMI NIMESTE1",
                "kovCode": "0123",
                "electoralDistrictNo": 1
            },
            {
                "seqNo": 2,
                "idCode": "37123097653",
                "voterName": "NIMI NIMESTE2",
                "kovCode": "0444",
                "electoralDistrictNo": 1
            }
        ]
    }
}


================================================
FILE: Documentation/common/examples/votesorder.rpc.votesseqno.query.json
================================================
{
    "id": 0.0,
    "method": "RPC.VotesSeqNo",
    "params": [
        {
        }
    ]
}


================================================
FILE: Documentation/common/examples/votesorder.rpc.votesseqno.response.json
================================================
{
    "error": null,
    "id": 0.0,
    "result": {
        "SessionID": "057229fdfa2df7d3c7f4ced81b02760b",
        "SeqNo": 10
    }
}


================================================
FILE: Documentation/common/examples/webeid.rpc.challenge.query.json
================================================
{
    "id": 0.0,
    "method": "RPC.Challenge",
    "params": [
        {
            "OS": "Operating System,2,0"
        }
    ]
}


================================================
FILE: Documentation/common/examples/webeid.rpc.challenge.response.json
================================================
{
    "error": null,
    "id": 0.0,
    "result": {
        "Challenge": "EtsTur4XV7xEGS9LBjHSfF9Cc5PQxtYW+YAOysRIt2r...",
        "SessionID": "057229fdfa2df7d3c7f4ced81b02760b",
        "Bearer": "xtYW+YAOyXV7xEGS9YWxtYW+YAOtsTur4XV7xEGS9LB1..."
    }
}


================================================
FILE: Documentation/common/examples/webeid.rpc.token.query.json
================================================
{
    "id": 0.0,
    "method": "RPC.Token",
    "params": [
        {
            "OS": "Operating System,2,0",
            "Token": "{\"unverifiedCertificate":"MIICnDCCA...",
            "SessionID": "057229fdfa2df7d3c7f4ced81b02760b",
            "Bearer": "xtYW+YAOyXV7xEGS9YWxtYW+YAOtsTur4XV7xEGS9LB1..."
        }
    ]
}


================================================
FILE: Documentation/common/examples/webeid.rpc.token.response.json
================================================
{
    "error": null,
    "id": 0.0,
    "result": {
        "AuthToken": "G1RTZqBSBKrzqReuKYrmFUFXWFPvaxhJjdiZi6zqAnaK3OvrT2Qu6...",
        "GivenName": "MARY \u00c4NN",
        "PersonalCode": "60001019906",
        "SessionID": "057229fdfa2df7d3c7f4ced81b02760b",
        "Status": "OK",
        "Surname": "O\u2019CONNE\u017d-\u0160USLIK"
    }
}


================================================
FILE: Documentation/common/examples/webeid.rpc.vote.query.json
================================================
{
    "id": 0.0,
    "method": "RPC.Vote",
    "params": [
        {
            "AuthMethod": "ticket",
            "AuthToken": "G1RTZqBSBKrzqReuKYrmFUFXWFPvaxhJjdiZi6zqAnaK3OvrT...",
            "Choices": "0919.1",
            "SessionID": "057229fdfa2df7d3c7f4ced81b02760b",
            "OS": "Operating System,2,0",
            "Type": "bdoc",
            "Vote": "UEsDBAoAAAAAAAAAAACKIflFHwAAAB8AAAAIAAAAbWltZXR5cGVhcHB..."
        }
    ]
}


================================================
FILE: Documentation/common/examples/webeid.rpc.vote.response.json
================================================
{
    "error": null,
    "id": 0.0,
    "result": {
        "Qualification": {
            "ocsp": "MIIG7QoBAKCCBuYwggbiBgkrBgEFBQcwAQEEggbTMIIGzzCCASGhgY...",
            "tspreg": "MIIE0QYJKoZIhvcNAQcCoIIEwjCCBL4CAQMxDzANBglghkgBZQMEA..."
        },
        "SessionID": "057229fdfa2df7d3c7f4ced81b02760b",
        "TestVote": true,
        "VoteID": "dWf/HUQVqXili7BeX2JAZQ=="
    }
}


================================================
FILE: Documentation/common/examples/webeid.rpc.voterchoices.query.json
================================================
{
    "id": 0.0,
    "method": "RPC.VoterChoices",
    "params": [
        {
            "AuthMethod": "ticket",
            "AuthToken": "G1RTZqBSBKrzqReuKYrmFUFXWFPvaxhJjdiZi6zqAnaK3OvrT...",
            "OS": "Operating System,2,0",
            "SessionID": "057229fdfa2df7d3c7f4ced81b02760b"
        }
    ]
}


================================================
FILE: Documentation/common/examples/webeid.rpc.voterchoices.response.json
================================================
{
    "error": null,
    "id": 0.0,
    "result": {
        "Choices": "0919.1",
        "List": "ew0KICAgICAgICAgICAgIsOca3Npa2thbmRpZGFhZGlkIjogew0KICAgIC...",
        "SessionID": "057229fdfa2df7d3c7f4ced81b02760b",
        "Voted": true
    }
}


================================================
FILE: Documentation/common/schema/Makefile
================================================
.PHONY: validate
validate:
	python3 validate_schema.py


================================================
FILE: Documentation/common/schema/ivxv.anon-bb.schema
================================================
{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "definitions": {
        "results": {
            "type": "array",
            "items": {
                "type": "string"
            },
            "additionalItems": false
        },
        "questions": {
            "type": "object",
            "additionalProperties": {
                "$ref": "#/definitions/results"
            },
            "minProperties": 1
        },
        "parish": {
            "type": "object",
            "patternProperties": {
                "^[0-9]{4}$|^(FOREIGN)$": {
                    "$ref": "#/definitions/questions"
                }
            },
            "additionalProperties": false,
            "minProperties": 1
        },
        "districts": {
            "type": "object",
            "patternProperties": {
                "^[0-9]{4}\\.[0-9]{1,2}$": {
                    "$ref": "#/definitions/parish"
                }
            },
            "additionalProperties": false,
            "minProperties": 1
        }
    },
    "type": "object",
    "properties": {
        "election": {
            "type": "string"
        },
        "districts": {
            "$ref": "#/definitions/districts"
        }
    },
    "required": [
        "election",
        "districts"
    ],
    "additionalProperties": false
}


================================================
FILE: Documentation/common/schema/ivxv.anon-bb.schema.example
================================================
{
    "election": "TESTKOV",
    "districts": {
        "0164.1": {
            "0164": {
                "TESTKOV.1": [
                    "MDkxOS4xMDUK",
                    "MDkxOS4xMDQK",
                    "MDkxOS4xMDEK",
                    "MDkxOS4xMDMK"
                ]
            }
        },
        "0296.1": {
            "0296": {
                "TESTKOV.1": [
                    "MDkxOS4xMDQK",
                    "MDkxOS4xMDQK"
                ]
            }
        }
    }
}


================================================
FILE: Documentation/common/schema/ivxv.choices.schema
================================================
{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "definitions": {
        "choice": {
            "type": "string",
            "description": "Candidate's name in case of RK, EP, KOV. Possible answer in case of RH"
        },
        "list_choices": {
            "type": "object",
            "patternProperties": {
                "^[0-9]{4}\\.[0-9]{3,4}$": {
                    "$ref": "#/definitions/choice"
                }
            },
            "additionalProperties": false,
            "minProperties": 1
        },
        "district_choices": {
            "type": "object",
            "additionalProperties": {
                "$ref": "#/definitions/list_choices"
            },
            "minProperties": 1,
            "description": "Political unions and independent candidates in district, in case of RH - question"
        },
        "district_dict": {
            "type": "object",
            "patternProperties": {
                "^[0-9]{4}\\.[0-9]{1,2}$": {
                    "$ref": "#/definitions/district_choices"
                }
            },
            "additionalProperties": false,
            "minProperties": 1
        }
    },
    "type": "object",
    "properties": {
        "election": {
            "type": "string",
            "pattern": "^[ \\-,\\+\\.:;=!?&%#<>_/\\'\\*()\\[\\]{}|^A-Za-z0-9]{1,28}$"
        },
        "choices": {
            "$ref": "#/definitions/district_dict"
        }
    },
    "required": [
        "election",
        "choices"
    ],
    "additionalProperties": false
}


================================================
FILE: Documentation/common/schema/ivxv.choices.schema.example
================================================
{
    "choices": {
        "0164.1": {
            "Nimi Valimisliit": {
                "0164.126": "Nimi Kandidaat",
                "0164.127": "Nimi Kandidaat"
            }
        },
        "0296.1": {
            "Nimi Erakond": {
                "0296.198": "Nimi Kandidaat",
                "0296.199": "Nimi Kandidaat",
                "0296.200": "Nimi Kandidaat"
            },
            "Nimi Valimisliit": {
                "0296.115": "Nimi Kandidaat",
                "0296.116": "Nimi Kandidaat",
                "0296.117": "Nimi Kandidaat"
            },
            "Üksikkandidaadid": {
                "0296.101": "Nimi Kandidaat",
                "0296.102": "Nimi Kandidaat"
            }
        }
    },
    "election": "TESTKOV"
}


================================================
FILE: Documentation/common/schema/ivxv.districts.schema
================================================
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "definitions": {
    "region": {
      "type": "object",
      "properties": {
        "state": {
          "type": "string"
        },
        "county": {
          "type": "string"
        },
        "parish": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "minProperties": 1,
      "description": "Value - parish - is absent in case of Tallinn and Tartu cities as they are marked as counties. Parish represents city district in case of Tallinn. Parish and county are absent in case of Välisriik and RK, EP and RH elections"
    },
    "region_dict": {
      "type": "object",
      "patternProperties": {
        "^[0-9]{4}$": {
          "$ref": "#/definitions/region"
        }
      },
      "additionalProperties": false,
      "minProperties": 1,
      "description": "Parishes EHAK code; city district code in case of Tallinn; 0000 for foreign state in case of RK, EP and RH elections"
    },
    "parish": {
      "type": "string",
      "pattern": "^[0-9]{4}$",
      "description": "Parishes in election district of county. 0000 value in represents foreign state in case of RK, EP and RH elections for each election district in districts block"
    },
    "district": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "parish": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/parish"
          }
        }
      },
      "required": [
        "parish"
      ],
      "description": "Object includes parishes or city districts that belong to this election district"
    },
    "district_dict": {
      "type": "object",
      "patternProperties": {
        "^[0-9]{4}.[0-9]{1,2}$": {
          "$ref": "#/definitions/district"
        }
      },
      "additionalProperties": false,
      "minProperties": 1
    },
    "counties": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/parish"
      },
      "description": "Object includes parishes or city districts that belong into this election district",
      "additionalProperties": false,
      "minProperties": 1
    },
    "county_dict": {
      "type": "object",
      "patternProperties": {
        "^[0-9]{4}$": {
          "$ref": "#/definitions/counties"
        }
      },
      "description": "Object contains parishes or city districts inside county. Tallinn is defined as county and contains city districts, Tartu linn is both county and parish",
      "additionalProperties": false,
      "minProperties": 1
    }
  },
  "type": "object",
  "properties": {
    "election": {
      "type": "string",
      "pattern": "^[ \\-,\\+\\.:;=!?&%#<>_/\\'\\*()\\[\\]{}|^A-Za-z0-9]{1,28}$"
    },
    "districts": {
      "$ref": "#/definitions/district_dict"
    },
    "regions": {
      "$ref": "#/definitions/region_dict"
    },
    "counties": {
      "$ref": "#/definitions/county_dict"
    }
  },
  "required": [
    "districts",
    "regions",
    "counties",
    "election"
  ],
  "additionalProperties": false
}


================================================
FILE: Documentation/common/schema/ivxv.districts.schema.example
================================================
{
  "election": "KOV2034",
  "regions": {
    "0809": {
      "parish": "Tori vald",
      "county": "Pärnu maakond",
      "state": "Eesti Vabariik"
    },
    "0624": {
      "parish": "Pärnu linn",
      "county": "Pärnu maakond",
      "state": "Eesti Vabariik"
    },
    "0524": {
      "parish": "Nõmme linnaosa",
      "county": "Tallinn",
      "state": "Eesti Vabariik"
    },
    "0784": {
      "county": "Tallinn",
      "state": "Eesti Vabariik"
    },
    "0796": {
      "parish": "Tartu vald",
      "county": "Tartu maakond",
      "state": "Eesti Vabariik"
    },
    "0793": {
      "county": "Tartu linn",
      "state": "Eesti Vabariik"
    }
  },
  "districts": {
    "0809.1": {
      "name": "Valimisringkond nr. 1",
      "parish": [
        "0809"
      ]
    },
    "0809.2": {
      "name": "Valimisringkond nr. 2",
      "parish": [
        "0809"
      ]
    },
    "0624.1": {
      "name": "Valimisringkond nr. 1",
      "parish": [
        "0624"
      ]
    },
    "0784.6": {
      "name": "Valimisringkond nr. 6",
      "parish": [
        "0524"
      ]
    },
    "0796.1": {
      "name": "Valimisringkond nr. 1",
      "parish": [
        "0796"
      ]
    },
    "0793.1": {
      "name": "Valimisringkond nr. 1",
      "parish": [
        "0793"
      ]
    }
  },
  "counties": {
    "0068": [
      "0809",
      "0624"
    ],
    "0784": [
      "0524"
    ],
    "0079": [
      "0796"
    ],
    "0793": [
      "0793"
    ]
  }
}


================================================
FILE: Documentation/common/schema/ivxv.result.schema
================================================
{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "definitions": {
        "results": {
            "type": "object",
            "properties": {
                "invalid": {
                    "type": "integer",
                    "description": "Number of invalid votes"
                }
            },
            "patternProperties": {
                "^[0-9]{4}\\.[0-9]{3,4}$": {
                    "type": "integer"
                }
            },
            "additionalProperties": false,
            "required": [
                "invalid"
            ]
        },
        "parish": {
            "type": "object",
            "patternProperties": {
                "^[0-9]{4}$": {
                    "$ref": "#/definitions/results"
                }
            },
            "additionalProperties": false,
            "minProperties": 1
        },
        "district_dict": {
            "type": "object",
            "patternProperties": {
                "^[0-9]{4}\\.[0-9]{1,2}$": {
                    "$ref": "#/definitions/results"
                }
            },
            "additionalProperties": false,
            "minProperties": 1
        },
        "parish_dict": {
            "type": "object",
            "patternProperties": {
                "^[0-9]{4}\\.[0-9]{1,2}$": {
                    "$ref": "#/definitions/parish"
                }
            },
            "additionalProperties": false,
            "minProperties": 1
        }
    },
    "type": "object",
    "properties": {
        "election": {
            "type": "string",
            "pattern": "^[ \\-,\\+\\.:;=!?&%#<>_/\\'\\*()\\[\\]{}|^A-Za-z0-9]{1,28}$"
        },
        "bydistrict": {
            "$ref": "#/definitions/district_dict"
        },
        "byparish": {
            "$ref": "#/definitions/parish_dict"
        }
    },
    "required": ["election", "bydistrict", "byparish"],
    "additionalProperties": false
}


================================================
FILE: Documentation/common/schema/ivxv.result.schema.example
================================================
{
    "bydistrict": {
        "0164.1": {
            "0164.126": 0,
            "0164.127": 0,
            "invalid": 0
        },
        "0296.1": {
            "0296.101": 0,
            "0296.102": 0,
            "0296.115": 0,
            "0296.116": 0,
            "0296.117": 0,
            "0296.198": 0,
            "0296.199": 0,
            "0296.200": 0,
            "invalid": 0
        }
    },
    "byparish": {
        "0164.1": {
            "0164": {
                "0164.126": 0,
                "0164.127": 0,
                "invalid": 0
            }
        },
        "0296.1": {
            "0296": {
                "0296.101": 0,
                "0296.102": 0,
                "0296.115": 0,
                "0296.116": 0,
                "0296.117": 0,
                "0296.198": 0,
                "0296.199": 0,
                "0296.200": 0,
                "invalid": 0
            },
            "0296": {
                "0296.101": 0,
                "0296.102": 0,
                "0296.115": 0,
                "0296.116": 0,
                "0296.117": 0,
                "0296.198": 0,
                "0296.199": 0,
                "0296.200": 0,
                "invalid": 0
            }
        }
    },
    "election": "TESTKOV"
}


================================================
FILE: Documentation/common/schema/ivxv.revoke.schema
================================================
{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "definitions": {
        "rev_entry": {
            "type": "string",
            "pattern": "^[0-9]{11}$",
            "description": "Personal code of onlinevoter to be revoked"
        }
    },
    "type": "object",
    "properties": {
        "election": {
            "type": "string",
            "pattern": "^[ \\-,\\+\\.:;=!?&%#<>_/\\'\\*()\\[\\]{}|^A-Za-z0-9]{1,28}$"
        },
        "type": {"enum": ["revoke", "restore"]},
        "persons": {
            "type": "array",
            "items": {
                "$ref": "#/definitions/rev_entry"
            }
        }
    },
    "required": [
        "election",
        "persons",
        "type"
    ],
    "additionalProperties": false
}


================================================
FILE: Documentation/common/schema/ivxv.revoke.schema.example
================================================
{
    "election": "TESTKOV",
    "persons": [
        "11412090004",
        "11412090005",
        "11412090006"
    ],
    "type": "revoke"
}


================================================
FILE: Documentation/common/schema/ivxv.voterlist.schema
================================================
{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "definitions": {
        "onlinevoters_entry": {
            "type": "string",
            "pattern": "^[0-9]{11}$",
            "additionalItems": false
        },

        "onlinevoters": {
            "type": "array",
            "items": {
                "$ref": "#/definitions/onlinevoters_entry"
            },
            "additionalItems": false
        },

        "parish": {
            "type": "object",
            "patternProperties": {
                "^[0-9]{4}$": {
                    "$ref": "#/definitions/onlinevoters"
                }
            },
            "additionalProperties": false,
            "minProperties": 1
        },

        "districts": {
            "type": "object",
            "patternProperties": {
                "^[0-9]{4}\\.[0-9]{1,2}$": {
                    "$ref": "#/definitions/parish"
                }
            },
            "additionalProperties": false,
            "minProperties": 1
        }
    },
    "type": "object",
    "properties": {
        "election": {
            "type": "string",
            "pattern": "^[ \\-,\\+\\.:;=!?&%#<>_/\\'\\*()\\[\\]{}|^A-Za-z0-9]{1,28}$"
        },
        "onlinevoters": {
            "$ref": "#/definitions/districts"
        }
    },
    "required": [
        "election",
        "onlinevoters"
    ],
    "additionalProperties": false
}


================================================
FILE: Documentation/common/schema/ivxv.voterlist.schema.example
================================================
{
  "election": "RK2030",
  "onlinevoters": {
    "0000.1": {
      "0176": [
        "11412090001"
      ],
      "0339": [
        "11412090002",
        "11412090003"
      ],
      "0614": [
        "11412090004"
      ],
      "0000": [
        "11412090005"
      ]
    },
    "0000.10": {
      "0793": [
        "11412090006",
        "11412090007",
        "11412090008"
      ],
      "0000": [
        "11412090009"
      ]
    }
  }
}


================================================
FILE: Documentation/common/schema/validate_schema.py
================================================
# IVXV Internet voting framework
"""Validate jsonschema example files."""

import json
import logging
import os
import sys

import jsonschema

log = logging.getLogger()
logging.basicConfig(level=logging.INFO)


def main():
    """Main routine."""
    for schema_filename in sorted(os.listdir(".")):
        if schema_filename.endswith(".schema"):
            log.info("Loading schema %s", schema_filename)
            with open(schema_filename) as fd:
                schema = json.load(fd)
            log.info("Schema file %s is valid", schema_filename)

            example_filename = f"{schema_filename}.example"
            log.info("Validating file %s", example_filename)
            with open(example_filename) as fd:
                example = json.load(fd)

            try:
                jsonschema.validate(instance=example, schema=schema)
            except jsonschema.exceptions.ValidationError as err:
                log.error(
                    "Schema validation error while validating %r: %s",
                    example_filename,
                    err,
                )
                return 1
            log.info("File %s is valid", example_filename)

    return 0


if __name__ == "__main__":
    sys.exit(main())


================================================
FILE: Documentation/common/xmltemplates/si.template
================================================
<ds:SignedInfo xmlns:asic="http://uri.etsi.org/02918/v1.2.1#" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xades="http://uri.etsi.org/01903/v1.3.2#">
  <ds:CanonicalizationMethod Algorithm="%CANON_ALG%"></ds:CanonicalizationMethod>
  <ds:SignatureMethod Algorithm="%SIG_ALG%"></ds:SignatureMethod>
  <ds:Reference Id="%VOTE_REF%" URI="%VOTE_URI%">
    <ds:DigestMethod Algorithm="%DIGEST_ALG%"></ds:DigestMethod>
    <ds:DigestValue>%VOTE_DIGEST%</ds:DigestValue>
  </ds:Reference>
  <ds:Reference Id="%SP_REF%" Type="http://uri.etsi.org/01903#SignedProperties" URI="#%SP_URI%">
    <ds:Transforms>
      <ds:Transform Algorithm="%CANON_ALG%"></ds:Transform>
    </ds:Transforms>
    <ds:DigestMethod Algorithm="%DIGEST_ALG%"></ds:DigestMethod>
    <ds:DigestValue>%SP_DIGEST%</ds:DigestValue>
  </ds:Reference>
</ds:SignedInfo>


================================================
FILE: Documentation/common/xmltemplates/sig.template
================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<asic:XAdESSignatures xmlns:asic="http://uri.etsi.org/02918/v1.2.1#">
    <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="S0">
        %SI_XML%
        %SV_XML%
    <ds:KeyInfo>
      <ds:X509Data>
          <ds:X509Certificate>%X509_CERT%</ds:X509Certificate>
      </ds:X509Data>
    </ds:KeyInfo>
    <ds:Object>
        <xades:QualifyingProperties xmlns:xades="http://uri.etsi.org/01903/v1.3.2#" Target="#S0">
            %SP_XML%
      </xades:QualifyingProperties>
    </ds:Object>
  </ds:Signature>
</asic:XAdESSignatures>


================================================
FILE: Documentation/common/xmltemplates/sp.template
================================================
<xades:SignedProperties xmlns:asic="http://uri.etsi.org/02918/v1.2.1#" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xades="http://uri.etsi.org/01903/v1.3.2#" Id="%SP_URI%">
<xades:SignedSignatureProperties>
  <xades:SigningTime>%SIGNING_TIME%</xades:SigningTime>
  <xades:SigningCertificate>
    <xades:Cert>
      <xades:CertDigest>
        <ds:DigestMethod Algorithm="%DIGEST_ALG%"></ds:DigestMethod>
        <ds:DigestValue>%CERT_DIGEST%</ds:DigestValue>
      </xades:CertDigest>
      <xades:IssuerSerial>
        <ds:X509IssuerName>%ISSUER_NAME%</ds:X509IssuerName>
        <ds:X509SerialNumber>%ISSUER_SERIAL%</ds:X509SerialNumber>
      </xades:IssuerSerial>
    </xades:Cert>
  </xades:SigningCertificate>
</xades:SignedSignatureProperties>
<xades:SignedDataObjectProperties>
  <xades:DataObjectFormat ObjectReference="#%VOTE_REF%">
    <xades:MimeType>application/octet-stream</xades:MimeType>
  </xades:DataObjectFormat>
</xades:SignedDataObjectProperties>
</xades:SignedProperties>


================================================
FILE: Documentation/common/xmltemplates/sv.template
================================================
<ds:SignatureValue xmlns:asic="http://uri.etsi.org/02918/v1.2.1#" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xades="http://uri.etsi.org/01903/v1.3.2#" Id="%SV_URI%">%SIG_VALUE%</ds:SignatureValue>


================================================
FILE: Documentation/common-model.mk
================================================
PLANTUML=env -u DISPLAY plantuml
PLANTUML_EN=env -u DISPLAY plantuml -I./en/lang.pu
PLANTUML_ET=env -u DISPLAY plantuml -I./et/lang.pu

LANGUAGES=et en

DIAGRAMS=$(SRC_DIAG) $(SUB_DIAG)

# We process each diagram in all languages, so that the variables are set properly
TARGETS=$(foreach DIAGRAM,$(DIAGRAMS),$(patsubst %, img/$(DIAGRAM).%.png, $(LANGUAGES)))

all:
	@echo "Dry run, make model to apply changes"
	$(MAKE) -n model

model: $(TARGETS)

# Process manually translated diagrams
img/%.png: %.pu
	$(PLANTUML) $<
	mv $*.png $@


# Process source diagrams
img/%.et.png: %.pu
	$(PLANTUML_ET) $<
	mv $*.png $@

img/%.en.png: %.pu
	$(PLANTUML_EN) $<
	mv $*.png $@


# Process sub-diagrams of major diagram
img/%.et.png: $(PARENT).pu %.env
	$(PLANTUML_ET) $(DIAGRAM_DEF) $<
	mv $(PARENT).png $@

img/%.en.png: $(PARENT).pu %.env
	$(PLANTUML_EN) $(DIAGRAM_DEF) $<
	mv $(PARENT).png $@


================================================
FILE: Documentation/common.mk
================================================
# common.mk: Common recipes for Documentation.
#
# Defines a catch-all recipe which routes unknown targets to Sphinx in "make
# mode". If $(DEPENDENCIES) is defined, then it will be set as a prerequisite
# of the catch-all and removed on clean. In addition, if the source directory
# contains a "model" subdirectory, then it invokes make in it to build and
# clean that too.
#
# Defines a "diff" recipe which generates a PDF that highlights differences
# between the current and latest released version of the document. If there are
# no differences, then no PDF is produced.
#
# Defines "install-pdf", "install-html", and "install-diff" recipes which build
# the specified type of documentation and install it to $(DESTDIR).

common.mk := $(lastword $(MAKEFILE_LIST))
Makefile  := $(lastword $(filter-out $(common.mk),$(MAKEFILE_LIST)))

# You can set these variables from the command line, and also
# from the environment for the first two.
SPHINXOPTS    ?= -c $(dir $(common.mk))
SPHINXBUILD   ?= sphinx-build
SOURCEDIR     = $(dir $(Makefile))
BUILDDIR      = $(SOURCEDIR)_build
SPHINXINTL    ?= sphinx-intl

# Set IVXV_DOCUMENT to the name of the source directory. This will be used as
# the key to look up configuration from documents.py.
export IVXV_DOCUMENT := $(notdir $(patsubst %/,%,$(abspath $(SOURCEDIR))))

# Special case the help target: set as default and skip prerequisites.
.DEFAULT_GOAL := help
.PHONY: help
help:
	@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

translation-et:
	@$(SPHINXBUILD) -M gettext "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
	@$(SPHINXINTL) update -p _build/gettext -l et

translation:
	@$(SPHINXBUILD) -M gettext "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
	@$(SPHINXINTL) update -p _build/gettext -l en

spelling:
	@$(SPHINXBUILD) -M spelling "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

english: clean $(DEPENDENCIES)
	export SPHINXOPTS="-D language='en'" && $(SPHINXBUILD) -M latexpdf "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

estonian: clean $(DEPENDENCIES)
	@$(SPHINXBUILD) -M latexpdf "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)


# Special case the clean target: skip prerequisites and perform extra steps.
.PHONY: clean
clean:
	#if [ -d "model" ]; then $(MAKE) -C model clean; fi
	@$(SPHINXBUILD) -M clean "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
	rm -rf $(BUILDDIR) $(DEPENDENCIES)

# Do not regenerate the Makefiles.
$(common.mk) $(Makefile): ;

# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).
%: $(DEPENDENCIES)
	if [ -d "model" ]; then $(MAKE) -C model; fi
	$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

# Variables and rules for diffing.
differ.sh := $(dir $(common.mk))differ.sh
master    := $(dir $(common.mk))_master/
gitdir    := $(patsubst $(shell git rev-parse --show-toplevel)%,%,$(abspath $(SOURCEDIR)))
olddir    := $(master)$(gitdir)

ifeq ("$(olddir)", "../../_master//Documentation/public/protokollid")
	olddir := "../../_master//Documentation/et/protokollid"
endif

ifeq ("$(olddir)", "../../_master//Documentation/public/uldsisukord")
	olddir := "../../_master//Documentation/et/uldsisukord"
endif

ifeq ("$(olddir)", "../../_master//Documentation/public/arhitektuur")
	olddir := "../../_master//Documentation/et/arhitektuur"
endif

.PHONY: diff
diff: latex master-latex
	# latexmk attempts to proceed even though errors may be present
	# pdflatex attempts to proceed with errors and is silent (batchmode)
	LATEXMKOPTS="-f -interaction=batchmode" $(differ.sh) $(BUILDDIR)/master $(BUILDDIR)

.PHONY: master-latex
master-latex: $(master)
	if [ -d $(olddir) ]; then \
		$(MAKE) -C $(olddir) BUILDDIR=$(abspath $(BUILDDIR))/master latex; \
	fi

$(master):
	git worktree add $@ 1.9.10

# Installation rules.
.PHONY: install-pdf
install-pdf: estonian
	cp --update $(filter-out %-diff.pdf,$(wildcard $(BUILDDIR)/latex/*.pdf)) "$(DESTDIR)"

.PHONY: install-en-pdf
install-en-pdf: english
	cp --update $(filter-out %-diff.pdf,$(wildcard $(BUILDDIR)/latex/*.pdf)) "$(DESTDIR)"

.PHONY: install-html
install-html: html
	cp --recursive --update $(BUILDDIR)/html/** "$(DESTDIR)"

.PHONY: install-diff
install-diff: diff
	$(eval diff.pdf = $(wildcard $(BUILDDIR)/latex/*-diff.pdf))
	$(if $(diff.pdf),cp --update $(diff.pdf) "$(DESTDIR)")


================================================
FILE: Documentation/conf.py
================================================
# Configuration file for the Sphinx documentation builder.
#
# This file only contains a selection of the most common options. For a full
# list see the documentation:
# https://www.sphinx-doc.org/en/master/usage/configuration.html

# -- Path setup --------------------------------------------------------------

# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
#
import os
import sys
sys.path.insert(0, os.path.abspath('.'))

import documents

# -- Project information -----------------------------------------------------

def detect_language():
    opts = os.environ.get('SPHINXOPTS')
    # expecting "-D language='en'"
    if opts is not None and 'en' in opts:
        return 'en'
    return 'et'


language = detect_language()

project = documents.project
copyright = documents.copyright
author = documents.author
release = documents.release

document = os.environ['IVXV_DOCUMENT']

version = documents.get(document, 'version', language)
today = documents.get(document, 'changed', language)
document_prefix = documents.get(document, 'document_prefix', language)
document_type = documents.get(document, 'document_type', language)
document_title = documents.get(document, 'document_title', language)
document_target_name = documents.get(document, 'document_target_name', language)

document_number = f'{document_prefix}-{version}'

today_fmt = "%d.%m.%Y"

numfig = True
numfig_format = {
    'section': '{name} (ptk. {number})'
}

# sphinx-intl
locale_dirs = ['locales/']
gettext_compact = False


# -- General configuration ---------------------------------------------------

# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
    'sphinx.ext.autodoc',
    'sphinx.ext.autosummary',
    'sphinx.ext.imgmath',
    'sphinx.ext.todo',
    'sphinx_rtd_theme',
    'sphinxcontrib.spelling',
    'myst_parser',
]


spelling_lang='et_EE'

spelling_word_list_filename = ['../../spelling_wordlist.txt', 'spelling_wordlist.txt']

# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']

# The suffix(es) of source filenames.
# You can specify multiple suffix as a list of string:
#
# source_suffix = ['.rst', '.md']
source_suffix = {
    '.rst': 'restructuredtext',
    '.md': 'markdown',
}

# The master toctree document.
master_doc = 'index'

# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
#
# This is also used if you do content translation via gettext catalogs.
# Usually you set "language" from the command line for these cases.

# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
# This pattern also affects html_static_path and html_extra_path.
exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']

# If true, `todo` and `todoList` produce output, else they produce nothing.
todo_include_todos = False

# -- Options for HTML output -------------------------------------------------

# The theme to use for HTML and HTML Help pages.  See the documentation for
# a list of builtin themes.
#
html_theme = 'sphinx_rtd_theme'

# Add any paths that contain custom themes here, relative to this directory.
# html_theme_path = []

# The name for this set of Sphinx documents.
# "<project> v<release> documentation" by default.
#
html_title = f'{document_title} v{release}'

# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']

# List of CSS files.
html_css_files = ['custom.css']

# HTML logo image.
html_logo = '_static/ivxv.png'

# -- Options for LaTeX output ------------------------------------------------

latex_preamble_lines = [
    '\\makeatletter',
    '\\IVXVDefineDocumentVersion{%s}' % version,
    '\\IVXVDefineDocumentNumber{%s}' % document_number,
    '\\IVXVDefineDocumentType{%s}' % document_type,
    '\\IVXVDefineDocumentSecurity{}',
    '\\pagestyle{IVXVFancy}',
    '\\makeatother',
    '\\newcommand{\\tablecontinued}{\\sphinxtablecontinued}',
]

latex_elements = {
    # The paper size ('letterpaper' or 'a4paper').
    'papersize': 'a4paper',
    'preamble': ''.join(latex_preamble_lines),

    # The font size ('10pt', '11pt' or '12pt').
    'pointsize': '12pt',

    # Additional stuff for the LaTeX preamble.
    # 'preamble': '',

    # Latex figure (float) alignment
    # 'figure_align': 'htbp',
}

# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title,
#  author, documentclass [howto, manual, or own class]).
latex_documents = [
    (master_doc,
     f'{document_target_name}.tex',
     document_title,
     author,
     'ivxv-technical'),
]

latex_additional_files = [
    'ivxv-technical/ivxv-common.cls',
    'ivxv-technical/ivxv-technical.cls'
]

# The name of an image file (relative to this directory) to place at the top of
# the title page.
#
latex_logo = html_logo

# If true, show page references after internal links.
#
latex_show_pagerefs = False

# If true, show URL addresses after external links.
#

latex_show_urls = 'footnote'


# -- Options for Texinfo output ----------------------------------------------

# Grouping the document tree into Texinfo files. List of tuples
# (source start file, target name, title, author,
#  dir menu entry, description, category)
texinfo_documents = [
    (master_doc,
     document_target_name,
     document_title,
     author,
     document_target_name,
     'One line description of project.',
     'Miscellaneous'),
]


================================================
FILE: Documentation/differ.sh
================================================
#!/bin/bash
# differ.sh: Generate LaTeX differences between two Sphinx build directories.

set -eu

old="$1/latex/"
new="$2/latex/"

shopt -s nullglob
for oldfile in ${old}*.tex; do
  basename="$(basename "${oldfile}" .tex)"
  newfile="${new}${basename}.tex"
  difffile="${new}${basename}-diff.tex"
  if [[ "${basename}" != "*-diff" && -f "${newfile}" ]]; then
    latexdiff --replace-context2cmd="none" --config VERBATIMENV=sphinxVerbatim "${oldfile}" "${newfile}" > "${difffile}"

    # Only generate the -diff.pdf if there are any actual differences.
    if grep --invert-match "%DIF PREAMBLE" "${difffile}" | grep --quiet '\\DIF'; then
      # latexdiff can mess up latex sometimes, but output is still visually fine
      make --directory "${new}" "${basename}-diff.pdf" || true
    else
      # Remove any existing -diff.pdf to signal that there were no changes.
      rm --force "${new}${basename}-diff.pdf"
    fi
  fi
done

exit 0


================================================
FILE: Documentation/documents.py
================================================
#!/usr/bin/python3
"""
IVXV documents
"""

project = 'Elektroonilise hääletamise infosüsteem'
copyright = '2016-2025, Cybernetica AS'
author = 'Cybernetica AS'

release = '1.10'

META = {

    'audiitor': {
        'et':{
            'version': '1.10',
            'changed': "25.09.2025",
            'document_prefix': 'IVXV-JAJ',
            'document_type': 'Juhend',
            'document_title': 'IVXV audiitori juhend',
            'document_target_name': 'IVXV-audiitor'
         }
    },

    'arhitektuur': {
        'et':{
            'version': '1.10',
            'changed': "25.09.2025",
            'document_prefix': 'IVXV-AR',
            'document_type': 'Arhitektuuridokument',
            'document_title': 'IVXV arhitektuur',
            'document_target_name': 'IVXV-arhitektuur'
         },
        'en':{
            'version': '1.10',
            'changed': "25.09.2025",
            'document_prefix': 'IVXV-AR-EN',
            'document_type': 'Architecture document',
            'document_title': 'IVXV architecture',
            'document_target_name': 'IVXV-architecture'
         }
    },

    'protokollid': {
        'et':{
            'lang': 'et',
            'version': '1.10',
            'changed': "25.09.2025",
            'document_prefix': 'IVXV-PR',
            'document_type': 'Spetsifikatsioon',
            'document_title': 'IVXV protokollide kirjeldus',
            'document_target_name': 'IVXV-protokollid'
         },
        'en':{
            'version': '1.10',
            'changed': "25.09.2025",
            'document_prefix': 'IVXV-PR-EN',
            'document_type': 'Specification',
            'document_title': 'IVXV protocols',
            'document_target_name': 'IVXV-protocols'
         }
    },

    'haldusteenus': {
        'et':{
            'version': '1.10',
            'changed': "25.09.2025",
            'document_prefix': 'IVXV-JHT',
            'document_type': 'Juhend',
            'document_title': 'IVXV haldusteenuse kasutusjuhend',
            'document_target_name': 'IVXV-haldusteenuse-juhend'
         }
    },

    'kasutusmall': {
        'et':{
            'version': '1.8.1',
            'changed': "16.12.2022",
            'document_prefix': 'IVXV-KM',
            'document_type': 'Analüüsidokument',
            'document_title': 'IVXV kasutusmallid',
            'document_target_name': 'IVXV-kasutusmallid'
         }
    },

    'votmerakendus': {
        'et':{
            'version': '1.8.0',
            'changed': "01.12.2022",
            'document_prefix': 'IVXV-SVR',
            'document_type': 'Spetsifikatsioon',
            'document_title': 'IVXV võtmerakendus',
            'document_target_name': 'IVXV-votmerakendus'
         }
    },

    'ivxvapi': {
        'et':{
            'version': '1.8.0',
            'changed': "01.12.2022",
            'document_prefix': 'IVXV-API',
            'document_type': 'API-dokument',
            'document_title': 'IVXV API',
            'document_target_name': 'IVXV-API'
         }
    },

    'seadistuste_koostejuhend': {
        'et':{
            'version': '1.10',
            'changed': "25.09.2025",
            'document_prefix': 'IVXV-JSK',
            'document_type': 'Juhend',
            'document_title': 'IVXV seadistuste koostamise juhend',
            'document_target_name': 'IVXV-seadistuste-koostejuhend'
         }
    },
    'kogumisteenuse_haldusjuhend': {
        'et':{
            'version': '1.10',
            'changed': "25.09.2025",
            'document_prefix': 'IVXV-JSH',
            'document_type': 'Juhend',
            'document_title': 'IVXV kogumisteenuse haldusjuhend',
            'document_target_name': 'IVXV-kogumisteenuse-haldusjuhend'
         }
    },
    'uldsisukord': {
        'et':{
            'version': '1.10',
            'changed': "25.09.2025",
            'document_prefix': 'IVXV-YS',
            'document_type': '',
            'document_title': 'IVXV dokumentatsiooni üldsisukord',
            'document_target_name': 'IVXV-dokumentatsiooni-uldsisukord'
         },
        'en':{
            'version': '1.10',
            'changed': "25.09.2025",
            'document_prefix': 'IVXV-YS-EN',
            'document_type': '',
            'document_title': 'IVXV documentation overview',
            'document_target_name': 'IVXV-documentation-overview'
         }

    },
    'valijarakendus': {
        'et':{
            'version': '1.10',
            'changed': "25.09.2025",
            'document_prefix': 'IVXV-JVR',
            'document_type': 'Juhend',
            'document_title': 'IVXV valijarakendus',
            'document_target_name': 'IVXV-valijarakendus'
         }
    },
    'valijarakenduse_pakendamine': {
        'et':{
            'version': '1.10',
            'changed': "25.09.2025",
            'document_prefix': 'IVXV-JVP',
            'document_type': 'Juhend',
            'document_title': 'IVXV valijarakenduse pakendamine',
            'document_target_name': 'IVXV-valijarakenduse-pakendamine'
         }
    },
    'tarne': {
        'et':{
            'version': '1.8.0',
            'changed': "01.12.2022",
            'document_prefix': 'IVXV-T',
            'document_type': 'Juhend',
            'document_title': 'IVXV tarnejuhend',
            'document_target_name': 'IVXV-tarnejuhend'
         }
    },
    'eriomadused': {
        'et':{
            'version': '1.8.0',
            'changed': "01.12.2022",
            'document_prefix': 'IVXV-EO',
            'document_type': 'Analüüsidokument',
            'document_title': 'IVXV eriomadused',
            'document_target_name': 'IVXV-eriomadused'
         }
    },
    'testimisplaan': {
        'et':{
            'version': '1.8.0',
            'changed': "01.12.2022",
            'document_prefix': 'IVXV-TP',
            'document_type': 'Testimisplaan',
            'document_title': 'IVXV testimisplaan',
            'document_target_name': 'IVXV-testimisplaan'
         }
    },
    'regteenus': {
        'et':{
            'version': '1.8.0',
            'changed': "01.12.2022",
            'document_prefix': 'IVXV-SRT',
            'document_type': 'Spetsifikatsioon',
            'document_title': 'IVXV registreerimisteenuse kirjeldus',
            'document_target_name': 'IVXV-registreerimisteenus'
         }
    },
    'liidesed': {
        'et': {
            'version': '1.10',
            'changed': "25.09.2025",
            'document_prefix': 'IVXV-VIS-EHS',
            'document_type': 'Spetsifikatsioon',
            'document_title': 'VIS3-EHS liidesed',
            'document_target_name': 'IVXV-liidesed'
        },
        'en': {
            'version': '1.10',
            'changed': "25.09.2025",
            'document_prefix': 'IVXV-VIS-EHS-EN',
            'document_type': 'Specification',
            'document_title': 'VIS3-EHS interfaces',
            'document_target_name': 'IVXV-interfaces'
        }
    },
    'xteeteenus': {
        'et':{
             'version': '1.10',
             'changed': "25.09.2025",
             'document_prefix': 'IVXV-XTEE',
             'document_type': 'Spetsifikatsioon',
             'document_title': 'IVXV X-tee teenuse kirjeldus',
             'document_target_name': 'IVXV-xteeteenus'
         }
     },
    'ivxv-pyapi': {
        'et':{
            'version': '1.8.0',
            'changed': "01.12.2022",
            'document_prefix': 'IVXV-PYAPI',
            'document_type': 'API-dokument',
            'document_title': 'IVXV Python API',
            'document_target_name': 'IVXV-python-api'
         }
    },
    'backendlogs': {
        'en':{
            'version': '1.10',
            'changed': "25.09.2025",
            'document_prefix': 'IVXV-LOGS-EN',
            'document_type': 'Technical documentation',
            'document_title': 'IVXV Backend Log Messages',
            'document_target_name': 'IVXV-backend-log-messages'
         }
    }
}


def get(doc, meta, language):
    return META[doc][language][meta]


def print_table_header():

    print("")
    print(".. list-table::")
    print("   :widths: 47 20 13 15")
    print("   :header-rows: 1")
    print("")
    print("   *  - Nimi")
    print("      - ID")
    print("      - Versioon")
    print("      - Kuupäev")
    print("")


def print_document(doc, lang='et'):

    title = get(doc, 'document_title', lang)
    prefix = get(doc, 'document_prefix', lang)
    version = get(doc, 'version', lang)
    changed = get(doc, 'changed', lang)

    print(f"   *  - {title}")
    print(f"      - {prefix}-{version}")
    print(f"      - {version}")
    print(f"      - {changed}")
    print("")


if __name__ == "__main__":

    print("..  IVXV dokumentatsiooni üldsisukord")
    print("")

    print("Dokumendid")
    print("==========")
    print("")

    print("Ülddokumendid")
    print("-------------")
    print("")

    print_table_header()
    print_document('uldsisukord')

    print("Spetsifikatsioonid")
    print("------------------")
    print("")

    print_table_header()

    print_document('kasutusmall')
    print_document('protokollid')
    print_document('arhitektuur')
    print_document('votmerakendus')

    print("Ingliskeelsed dokumendid")
    print("------------------------")
    print("")

    print_table_header()

    print_document('protokollid', 'en')
    print_document('arhitektuur', 'en')
    print_document('liidesed', 'en')
    print_document('backendlogs', 'en')

    print("Juhendid")
    print("--------")
    print("")

    print_table_header()

    print_document('seadistuste_koostejuhend')
    print_document('kogumisteenuse_haldusjuhend')
    print_document('haldusteenus')
    print_document('ivxvapi')
    print_document('audiitor')
    print_document('valijarakendus')
    print_document('valijarakenduse_pakendamine')


================================================
FILE: Documentation/en/backendlogs/.gitignore
================================================
index.rst


================================================
FILE: Documentation/en/backendlogs/Makefile
================================================

DEPENDENCIES := index.rst
include ../../common.mk

index.rst:
	./create_rst.py


================================================
FILE: Documentation/en/backendlogs/create_rst.py
================================================
#!/usr/bin/env python3

"""
Generate log-event reference doc from source code
"""


import os
import re

from rstcloth import RstCloth


def rstescape(txt):
    """
    Escape RST formatting symbols from text
    """
    return txt.replace("*", r"\*")


def parse_structs(file_content):
    """
    Parse information about a particular struct in the generated file
    """
    pattern = re.compile(
        r"// BEGIN (\w+)\n\n"  # Match typename
        r"// auto-generated.*\n"  # Match warning
        r"//\s*([\w./]+)\.\1\s*\n"  # Match package
        r"((?:\s*//.*\n)+)"  # Match comments
        r"(type\s+\1\s+struct\s*{(?:.|\n)+?})\s*"  # Match typedef
        r"// END \1",  # Match end
        re.MULTILINE,
    )

    structs = []

    for match in pattern.finditer(file_content):
        typename = match.group(1)
        packagename = match.group(2)
        comments = match.group(3).replace("//", "").strip()
        typedef = match.group(4).strip()

        struct_info = {
            "typename": typename,
            "packagename": packagename,
            "fullcomment": comments,
            "typedef": typedef,
        }

        structs.append(struct_info)

    return structs


def output_section_common(common_modules, rst, h2_common, h3_common, text):
    """
    Output section with common modules
    """

    rst.h2(h2_common)

    sorted_modules = sorted(common_modules.keys())
    for module in sorted_modules:
        rst.h3(f"{h3_common} {module.replace('ivxv.ee/', '')}")

        sorted_events = sorted(common_modules[module].keys())
        for event in sorted_events:
            data = common_modules[module][event]
            rst.definition(event, text)
            _, val = next(iter(data.items()))
            rst.codeblock(val["typedef"], indent=3)
            rst.newline()
            for mod in data:
                rst.li(rstescape(f"{mod}.{event}: {data[mod]['fullcomment']}"))

            rst.newline()


def output_section_unique(unique_modules, rst, h2_unique, h3_unique):
    """
    Output section with unique models
    """

    rst.h2(h2_unique)
    sorted_modules = sorted(unique_modules.keys())
    for module in sorted_modules:
        rst.h3(f"{h3_unique} {module.replace('ivxv.ee/', '')}")

        sorted_events = sorted(unique_modules[module].keys())
        for event in sorted_events:
            data = unique_modules[module][event]
            rst.definition(
                f"{data['packagename']}.{event}", rstescape(data["fullcomment"])
            )
            rst.codeblock(data["typedef"], indent=3)
            rst.newline()


def output_intro(rst, h1, content_file):
    """
    Output introduction
    """

    rst.h1(h1)
    with open(content_file, "r", encoding="ascii") as inf:
        for line in inf.readlines():
            if line.startswith("*"):
                rst.li(line.replace("* ", ""))
            else:
                rst.content(line)
        rst.newline()


def categorize_event(pkg, evt, item, exclusions, events_dicts):
    """
    Analyze each event to a category
    """

    if exclusions and pkg in exclusions:
        return
    if "/cmd/" in pkg:
        events_dicts["cmd_events"].setdefault(pkg, {})[evt] = item
    elif "/service/" in pkg:
        events_dicts["srv_events"].setdefault(pkg, {})[evt] = item
    elif "/internal/" in pkg:
        events_dicts["int_events"].setdefault(pkg, {})[evt] = item
    else:
        events_dicts["events"].setdefault(pkg, {})[evt] = item


def analyze_src(src_dir, target_file, exclusions=None):
    """
    Walk the source tree and analyze generated code
    """

    events_dicts = {"events": {}, "cmd_events": {}, "int_events": {}, "srv_events": {}}

    for dirpath, _, filenames in os.walk(src_dir):
        if target_file in filenames:
            full_path = os.path.join(dirpath, target_file)

            with open(full_path, "r", encoding="utf8") as file:
                parsed_structs = parse_structs(file.read())

                for item in parsed_structs:
                    categorize_event(
                        item["packagename"],
                        item["typename"],
                        item,
                        exclusions,
                        events_dicts,
                    )

    return tuple(
        events_dicts[key]
        for key in ["events", "cmd_events", "int_events", "srv_events"]
    )


def remove_common(events):
    """
    Remove common events from unique set
    """

    common_events = {}
    unique_events = {}

    all_events = {}

    for module, mod_events in events.items():
        for event in mod_events:
            all_events.setdefault(event, set([]))
            all_events[event].add(module)

    for event, modules in all_events.items():
        if len(modules) > 1:
            by_types = {}
            for mod in modules:
                typedef = events[mod][event]["typedef"]
                by_types.setdefault(typedef, set([]))
                by_types[typedef].add(mod)

            if len(by_types) > 1:
                pass
                # This should not happen often. This means that same identifiers
                # do not have equal typedefs and we may even have several different
                # clusters with same identifier
                # TODO
                # print(event,file=sys.stderr)
                # print(by_types, file=sys.stderr)

            for _, val in by_types.items():
                if len(val) > 1:

                    printable = ""
                    for mod in sorted(val):
                        printable += mod
                        printable += ", "

                    printable = printable[:-2]

                    common_events.setdefault(printable, {})

                    common_events[printable][event] = {}
                    for mod in sorted(val):
                        common_events[printable][event][mod] = events[mod][event]

                else:
                    mod = next(iter(val))
                    unique_events.setdefault(mod, {})
                    unique_events[mod][event] = events[mod][event]
        else:
            mod = next(iter(modules))
            unique_events.setdefault(mod, {})
            unique_events[mod][event] = events[mod][event]

    return common_events, unique_events


if __name__ == "__main__":

    SRC_DIR = os.path.abspath("../../../")
    print(SRC_DIR)
    TARGET_FILE = "gen_types.go"

    OUT_FILE = "index.rst"

    EXCLUSIONS = set(
        [
            "ivxv.ee/common/collector/auth/dummy",
            "ivxv.ee/common/collector/container/dummy",
            "ivxv.ee/common/collector/storage/file",
            "ivxv.ee/common/collector/storage/memory",
        ]
    )

    MOD_EVENTS, CMD_EVENTS, INT_EVENTS, SRV_EVENTS = analyze_src(
        SRC_DIR, TARGET_FILE, EXCLUSIONS
    )

    with open(OUT_FILE, "w") as output_file:

        RST = RstCloth(output_file)
        RST.title("IVXV Backend Log Messages")

        RST.newline()
        RST.content(".. raw:: html")
        RST.newline()
        RST.content('   <p style="background-color: #f99; padding: 20px;">')
        RST.content("     <strong>NB!</strong>")
        RST.content("     See on HTML-versioon dokumendist.")
        RST.content("     Tellijale antakse üle PDF-versioon.")
        RST.content("   </p>")
        RST.newline()
        RST.content(".. toctree::")
        RST.content("   :maxdepth: 4")
        RST.newline()

        output_intro(RST, "Overview", "introduction.inc")

        CMD_COMMON, CMD_UNIQUE = remove_common(CMD_EVENTS)
        SRV_COMMON, SRV_UNIQUE = remove_common(SRV_EVENTS)
        MOD_COMMON, MOD_UNIQUE = remove_common(MOD_EVENTS)
        INT_COMMON, INT_UNIQUE = remove_common(INT_EVENTS)

        RST.h1("Commands")
        output_section_common(
            CMD_COMMON, RST, "Common events", "Commands", "Typedef for common event"
        )
        output_section_unique(CMD_UNIQUE, RST, "Specific events", "Command")

        RST.h1("Services")
        output_section_common(
            SRV_COMMON, RST, "Common events", "Services", "Typedef for common event"
        )
        output_section_unique(SRV_UNIQUE, RST, "Specific events", "Service")

        RST.h1("Modules")
        output_section_common(
            MOD_COMMON, RST, "Common events", "Modules", "Typedef for common event"
        )
        output_section_unique(MOD_UNIQUE, RST, "Specific events", "Module")

        RST.h1("Internal modules")
        output_section_common(
            INT_COMMON, RST, "Common events", "Modules", "Typedef for common event"
        )
        output_section_unique(INT_UNIQUE, RST, "Specific events", "Module")


================================================
FILE: Documentation/en/backendlogs/introduction.inc
================================================
The purpose of this document is to provide a reference to all possible log
messages in the IVXV backend.

This document is partially auto-generated from the comments in the source code.
This is necessary to keep the document up to date through the evolution of the
software. The document is written in english, since the source code is written
in english for improved readability and availability to wider audiences.


IVXV systematically logs based on the protocol description and the service
status diagram. We describe general principles that are followed.

At a minimum, the following should be logged:

* The fact of receiving each request and the start of processing

* The handover of processing to an external component

* The return of the processing sequence to the component

* The end of the request processing and the result

* Additionally, passing through significant stages in the process state model together with important facts about the process


General Principles:

* The rsyslog service is used for logging, which records the timestamp of the log message with millisecond precision.

* At the start of each session, the system generates a unique identifier, which the client application uses in its requests to the central system.

* All log entries belonging to a single session contain the same session identifier. Validity of the session identifier is checked, requests with unknown, invalid or expired session identifiers are not served.

* Each log entry must be uniquely identifiable.

* For each log message, it must be possible to unambiguously identify the location in the source code where the message originated. To ensure this, each logged message must have a unique phrasing or contain a unique identifier. In IVXV all event identifiers and corresponding data structures are generated before the compilation. This makes it easier to follow unified pattern.

* The log entry should preferably be in JSON format, where machine readability is primary and human readability is secondary for automated monitoring.

* The log entries may be stacked, to include information from more technical contexts.

* If in doubt - log, one can filter unnecessary information, but cannot regenerate missing information.

Requirements:

* The information logged must be sanitized (e.g., URL encoding) and subject to length restrictions (both overall and per parameter).

* Information originating from outside the system perimeter must only be logged in a sanitized form and within a predefined length.

* Certificates and the agreed cipher used during TLS handshake must be logged.

* Sensitive data must not be logged Directly, it must be protected by e.g. hashing.


================================================
FILE: Documentation/et/audiitor/Makefile
================================================
include ../../common.mk


================================================
FILE: Documentation/et/audiitor/annotatsioon.rst
================================================
..  IVXV kogumisteenuse haldusteenuse kirjeldus

Annotatsioon
------------

Juhend annab suunised IVXV andmeauditi teostamiseks Ubuntu 20.04 platvormil.
Kasulik on tutvuda järgmiste dokumentidega.

* https://www.valimised.ee/sites/default/files/uploads/eh/IVXV_raamistiku_yldkirjeldus_29052017.pdf
* https://www.valimised.ee/sites/default/files/uploads/eh/IVXV-seadistuste-koostejuhend.pdf
* https://www.valimised.ee/sites/default/files/uploads/eh/IVXV-protokollid.pdf

Juhendiga kaasneb näidisandmekomplekt ning vabas vormis `history` fail.




================================================
FILE: Documentation/et/audiitor/audit.rst
================================================

================================================================================
IVXV juhend audiitorile
================================================================================

Rakenduste kompileerimine
================================================================================


EELDUSED
--------------------------------------------------------------------------------

Kõik tegevused viime läbi tavakasutaja -- näidetes `ubuntu` -- õigustes,
kasutades vajadusel käsklust `sudo`.

Üldjuhul viime kõik tegevused läbi kasutaja kodukaustas::

  cd $HOME

Paigaldame tarkvara, mis on vajalik audiitori tööriistade ehitamiseks::

  sudo apt-get install --no-install-recommends -y autoconf automake build-essential libgmp-dev libtool git openjdk-11-jdk-headless python unzip zip wget make


INTCHECK
--------------------------------------------------------------------------------

Verificatum miksneti tervikluskontroll toimub rakendusega `intcheck`::

  wget https://github.com/vvk-ehk/intcheck/archive/master.zip
  unzip master.zip
  rm master.zip
  mv intcheck-master intcheck
  chmod +x intcheck/src/intcheck.py

Veendume et rakendus on paigaldatud korrektselt::

  ./intcheck/src/intcheck.py -h


JAVA RAKENDUSED
--------------------------------------------------------------------------------

Andmeauditi läbiviimiseks läheb vaja rakendust `auditor`, mille lähtekood on
avalikustatud IVXV repositooriumis::

  wget https://github.com/vvk-ehk/ivxv/archive/master.zip
  unzip master.zip
  rm master.zip
  mv ivxv-master ivxv


Paigaldame Java sõltuvuspaketid::

  cd $HOME/ivxv/common/external
  wget -O gradle-8.11.zip https://services.gradle.org/distributions/gradle-8.11-bin.zip
  unzip gradle-8.11.zip
  rm gradle-8.11.zip
  cd $HOME/ivxv/common/java
  make sync

Veendume, et ettevalmistused on tehtud korrektselt::

  cd $HOME/ivxv
  make clean-java

Ehitame Java rakendused::

  make java

RVT'le tarnitavad rakendused::

  $HOME/ivxv/auditor/build/distributions/auditor-1.10.3.zip
  $HOME/ivxv/key/build/distributions/key-1.10.3.zip
  $HOME/ivxv/processor/build/distributions/processor-1.10.3.zip

Käivitatavad failid::

  $HOME/ivxv/auditor/build/install/auditor/bin/auditor
  $HOME/ivxv/key/build/install/key/bin/key
  $HOME/ivxv/processor/build/install/processor/bin/processor


VERIFICATUM
--------------------------------------------------------------------------------

Verificatum miksneti adapter on vajalik miksimistõendi kontrolliks::

  cd $HOME
  wget https://github.com/vvk-ehk/ivxv-mixnet-adapter/archive/master.zip
  unzip master.zip
  rm master.zip
  mv ivxv-mixnet-adapter-master ivxv-verificatum

Verificatum tarkvara allalaadmine::

  git clone https://github.com/verificatum/verificatum-gmpmee gmpmee
  git clone https://github.com/verificatum/vmgj
  git clone https://github.com/verificatum/vcr
  git clone https://github.com/verificatum/vmn

Tarkvara täpse versiooni hankimine ning tervikluse kontroll::

  cd gmpmee
  git checkout 4aafc31
  rm -rf .git/
  cd ..
  ./intcheck/src/intcheck.py verify gmpmee ivxv-verificatum/doc/gmpmee.dirsha256sum

  cd vmgj
  git checkout 8d7d412
  rm -rf .git/
  cd ..
  ./intcheck/src/intcheck.py verify vmgj ivxv-verificatum/doc/vmgj.dirsha256sum

  cd vcr
  git checkout af9fd82
  rm -rf .git/
  cd ..
  ./intcheck/src/intcheck.py verify vcr ivxv-verificatum/doc/vcr.dirsha256sum

  cd vmn
  git checkout bb00543
  rm -rf .git/
  cd ..
  ./intcheck/src/intcheck.py verify vmn ivxv-verificatum/doc/vmn.dirsha256sum

Verificatumi adapteri ehitamine::

  cd $HOME/ivxv-verificatum
  make zipext

Juhuarvugeneraatori initsialiseerimine Verificatumi jaoks::

  cd $HOME
  ./vcr/bin/vog -rndinit RandomDevice /dev/urandom


Auditeerimine
================================================================================

Siit edasi eeldame, et lugeja on tuttav dokumendiga "IVXV seadistuste
koostamise juhend" järgmises ulatuses:

* Ptk. 2, IVXV seadistused valimise korraldamise protsessis
* Ptk. 3, IVXV rakendused
* Ptk. 6, Auditirakendus
* Ptk. 10, E-häälte miksimine

Olgu samuti paigaldatud pakk `audit-examples.tar`, millel on järgmine
struktuur::

   audit-conv
   |-- auditor.yaml -- konfinäide
   |-- inputs
   |   |-- <RVT poolt tarnitavad sisendid>
   |-- process
   |   |-- <Töökataloog koos seadistustega>
   |
   audit-mix
   |-- auditor.yaml -- konfinäide
   |-- inputs
   |   |-- <RVT poolt tarnitavad sisendid>
   |-- process
   |   |-- <Töökataloog koos seadistustega>
   |
   audit-mixver
   |-- inputs
   |   |-- <RVT poolt tarnitavad sisendid>
   |
   audit-pdec
   |-- auditor.yaml -- konfinäide
   |-- inputs
   |   |-- <RVT poolt tarnitavad sisendid>
   |-- process
   |   |-- <Töökataloog koos seadistustega>
   |
   audit-vertally
   |-- inputs
   |   |-- <RVT poolt tarnitavad sisendid>
   |
   processor
   |-- <Töötlemisrakenduse sisendid ja väljundid>

Tegutsemine on üldjuhul järgmine:

* Tutvuge konfinäitega
* Veenduge, et on olemas vajalik RVT sisend
* Tehke kausta `process` konfinäitest lähtuv failistruktuur
* Käivitage kaustas `process` rakendus ja tööriist (eelvalmendatud seadistused on seal
  juba ees)

Täpsemad juhised järgnevad.

Genereeritud avalike võtmete kooskõlalisuse kontroll
--------------------------------------------------------------------------------

Võtmete genereerimise ajal tekib kaks võtit - tulemusfaili signeerimisvõti ja
häälte salastamise võti.

Tulemusfaili signeerimisvõti on kodeeritud X509 sertifikaadina failis
`RK2051-sign.pem`. Häälte salastamise võti on antud kolmes kodeeringus:

* X509 sertifikaadina failis `RK2051-enc.pem`
* DER-kodeeritud avaliku võtmena failis `RK2051-pub.der`
* PEM-kodeeritud avaliku võtmena failis `RK2051-pub.pem`

On võimalik kontrollida, et sertifikaat, mis sisaldab tulemusfaili
signeerimisvõtit, on korrektselt isesigneeritud. Seda saab teha järgnevalt::

    openssl verify -CAfile RK2051-sign.pem -check_ss_sig RK2051-sign.pem

Korrektse sertifikaadi korral on väljund::

    RK2051-sign.pem: OK

On võimalik kontrollida, et sertifikaat, mis sisaldab häälte salastamise võtit,
on korrektselt signeeritud tulemusfaili signeerimisvõtmega. Seda saab
teha järgnevalt::

    openssl verify -CAfile RK2051-sign.pem -check_ss_sig RK2051-enc.pem

Korrektselt allkirjastatud sertifikaadi korral on väljund::

    RK2051-enc.pem: OK

.. note:: Teadaoleva OpenSSL vea tõttu ei suuda OpenSSL versioonist `1.1.1b`
   vanemad versioonid sertifikaadi usaldusahelat kontrollida. Eelneva kontrolli
   õnnestumise jaoks on eelduseks vähemalt OpenSSL versioon `1.1.1b`.

Lisaks on võimalik kontrollida, et häälte salastamise võtme eri kodeeringud
vastavad üksteisele. Me kontrollime, et X509 sertifikaadis olev võti vastab
DER-kodeeritud võtmele ning lisaks, et PEM-kodeeritud võti vastab DER-kodeeritud
võtmele. Transitiivsuse tõttu on seega kõik kolm kodeeringut kooskõlalised.

Esiteks tuleb eraldada häälte salastamise võti vastavast sertifikaadist. Kuna
OpenSSL ei toeta kasutatavad ElGamali krüptoskeemi, siis tuleb avaliku võtme
eksportimiseks kasutada OpenSSL `asn1parse` tööriista.

Kõigepealt tuleb leida avaliku võtme nihe sertifikaadis::

    openssl asn1parse -in RK2051-enc.pem

Avalik võti on vastavas `SubjectPublicKeyInfo` väljal::

    156:d=2  hl=4 l= 816 cons: SEQUENCE
    160:d=3  hl=4 l= 415 cons: SEQUENCE
    164:d=4  hl=2 l=   9 prim: OBJECT            :1.3.6.1.4.1.3029.2.1
    175:d=4  hl=4 l= 400 cons: SEQUENCE
    179:d=5  hl=4 l= 385 prim: INTEGER           :FFFFFFFFFFFFFFFFC90FDA
        A22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08
        798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B5
        76625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24
        117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163F
        A8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C35
        4E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783
        A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D226
        1898FA051015728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64ECFB85
        0458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94
        E04A25619DCEE3D2261AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B
        18177B200CBBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5B
        FCE0FD108E4B82D120A93AD2CAFFFFFFFFFFFFFFFF
    568:d=5  hl=2 l=   1 prim: INTEGER           :02
    571:d=5  hl=2 l=   6 prim: GENERALSTRING
    579:d=3  hl=4 l= 393 prim: BIT STRING

Näeme, et `SubjectPublicKeyInfo` välja  nihe on 156 baiti. Eraldame avaliku
võtme ja kontrollime vastavust väljastatud avaliku võtmega::

    openssl asn1parse -in RK2051-enc.pem -strparse 156 -noout -out extracted.der
    diff -s extracted.der RK2051-pub.der

Samaväärsete võtmete korral on väljundiks::

    Files extracted.der and RK2051-pub.der are identical

Teiseks kontrollime DER-kodeeritud võtme vastavust PEM-kodeeritud võtmele.
Selleks teisendame PEM-kodeeritud võtme DER-kodeeringusse ja võrdleme::

    openssl asn1parse -in RK2051-pub.pem -noout -out converted.der
    diff -s converted.der RK2051-pub.der

Samaväärsete võtme korral on väljundiks::

    Files converted.der and RK2051-pub.der are identical

Hääletamistulemuse allkirja verifitseerimine
--------------------------------------------------------------------------------

Nii tavalise dekrüpteerimise kui tõestatava dekrüpteerimise käigus tekib kaks
faili:

* Tulemusfail `RK2051.1.tally`
* Signatuurifail `RK2051.1.tally.signature`

Koos häälte salastamise võtmega genereeritakse tulemusfaili signeerimisvõti ja
vastav sertifikaat (`RK2051-sign.pem`). Dekrüpteeritud tulemusele antakse selle
võtmega signatuur, mida tuleb kontrollida.

Eraldame signeerimisvõtme sertifikaadist avaliku võtme::

  openssl x509 -in RK2051-sign.pem -noout -pubkey > sign.pub

Kasutame avalikku võtit tulemusfaili allkirja kontrollimiseks::

  openssl dgst -sha256 -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:32 -sigopt rsa_mgf1_md:sha256 -verify sign.pub -signature RK2051.1.tally.signature RK2051.1.tally

NB! Tavalise dekrüpteerimise ja tõestatava dekrüpteerimise käigus tekkivad
tulemusfailid peavad olema identsed. Kontrollimiseks UNIXi tööriist `diff`::

  diff decout/RK2051.1.tally pdecout/RK2051.1.tally

Näitefailid on pakis::

  cd $HOME/audit-examples/audit-vertally


IVXV <-> Verificatum teisenduste korrektsuse kontroll
--------------------------------------------------------------------------------

Teisenduste korrektsuse kontroll toimub tööriistaga `convert`. NB! Kaust
`process` tuleb `auditor.yaml` põhjal sisenditest ettevalmistada::

  cd $HOME/audit-examples/audit-conv/process
  $HOME/ivxv/auditor/build/install/auditor/bin/auditor convert -c conf.bdoc -p auditor.yaml.bdoc

Miksimistõendi kontroll tööriistaga `auditor`
--------------------------------------------------------------------------------

Miksimistõendi kontroll toimub tööriistaga `mixer`. NB! Kaust `process` tuleb
`auditor.yaml` põhjal sisenditest ettevalmistada::

  cd $HOME/audit-examples/audit-mix/process
  $HOME/ivxv/auditor/build/install/auditor/bin/auditor mixer -c conf.bdoc -p auditor.yaml.bdoc

Lugemistõendi kontroll
--------------------------------------------------------------------------------

Lugemistõendi kontroll toimub tööriistaga `decrypt`. NB! Kaust `process` tuleb
`auditor.yaml` põhjal sisenditest ettevalmistada::

  cd $HOME/audit-examples/audit-pdec/process
  $HOME/ivxv/auditor/build/install/auditor/bin/auditor decrypt -c conf.bdoc -p auditor.yaml.bdoc

Miksimistõendi kontroll Verificatumi originaaltööriistaga
--------------------------------------------------------------------------------

Miksimistõendi kontroll Verificatumi abil::

  cd $HOME/audit-examples/audit-mixver
  $HOME/ivxv-verificatum/release/mixer/bin/mix.py verify --proof-zipfile shuffle_proof.zip

Töötlemise audit
--------------------------------------------------------------------------------

Täiendavalt on lisatud pakki kõik töötlemisrakenduse sisendid ja väljundid
lihtsustamaks töötlemisprotsessi auditit. Täiendavad auditeerimistööriistad,
nt. `integrity` on kirjeldatud dokumendis "IVXV seadistuste koostamise juhend".


================================================
FILE: Documentation/et/audiitor/history.rst
================================================

`.history`
---------------

.. literalinclude:: history.txt
   :linenos:



================================================
FILE: Documentation/et/audiitor/history.txt
================================================
sudo apt update
sudo apt upgrade
tar xvf audit-examples.tar
sudo apt-get install --no-install-recommends -y autoconf automake build-essential libgmp-dev libtool git openjdk-11-jdk-headless python unzip zip wget make
java -version
javac -version
sudo apt install openjdk-11-jre-headless
sudo update-alternatives --config java
java -version
javac -version
wget https://github.com/vvk-ehk/intcheck/archive/master.zip
unzip master.zip
rm master.zip
mv intcheck-master/ intcheck
chmod +x intcheck/src/intcheck.py
./intcheck/src/intcheck.py -h
./intcheck/src/intcheck.py verify -h
wget https://github.com/vvk-ehk/ivxv/archive/master.zip
unzip master.zip
rm master.zip
mv ivxv-master/ ivxv
cd ivxv/common/external/
wget -O gradle-8.11.zip https://services.gradle.org/distributions/gradle-8.11-bin.zip
unzip gradle-8.11.zip
rm gradle-8.11.zip
cd ..
cd java/
make sync
ls ../external/
cd ..
cd ..
make clean-java
make java
auditor/build/install/auditor/bin/auditor -h
ls auditor/build/distributions/*.zip
ls key/build/distributions/*.zip
ls processor/build/distributions/*.zip
ls processor/build/install/processor/bin/processor
ls key/build/install/key/bin/key
ls auditor/build/install/auditor/bin/auditor
cd ..
wget https://github.com/vvk-ehk/ivxv-mixnet-adapter/archive/master.zip
unzip master.zip
rm master.zip
mv ivxv-mixnet-adapter-master ivxv-verificatum
git clone https://github.com/verificatum/verificatum-gmpmee gmpmee
git clone https://github.com/verificatum/vmgj
git clone https://github.com/verificatum/vcr
git clone https://github.com/verificatum/vmn
cd gmpmee/
git checkout 4aafc31
rm -rf .git/
cd ..
./intcheck/src/intcheck.py verify gmpmee ivxv-verificatum/doc/gmpmee.dirsha256sum
cd vmgj/
git checkout 8d7d412
rm -rf .git/
cd ..
./intcheck/src/intcheck.py verify vmgj ivxv-verificatum/doc/vmgj.dirsha256sum
cd vcr/
git checkout af9fd82
rm -rf .git/
cd ..
./intcheck/src/intcheck.py verify vcr ivxv-verificatum/doc/vcr.dirsha256sum
cd vmn/
git checkout bb00543
rm -rf .git
cd ..
./intcheck/src/intcheck.py verify vmn ivxv-verificatum/doc/vmn.dirsha256sum
cd ivxv-verificatum/
make zipext
cd ..
./vcr/bin/vog -rndinit RandomDevice /dev/urandom
openssl verify -CAfile initout/RK2051-sign.pem -check_ss_sig initout/RK2051-sign.pem
openssl verify -CAfile initout/RK2051-sign.pem -check_ss_sig initout/RK2051-enc.pem
openssl asn1parse -in initout/RK2051-enc.pem
openssl asn1parse -in initout/RK2051-enc.pem -strparse 156 -noout -out extracted.der
diff -s extracted.der initout/RK2051-pub.der
openssl asn1parse -in initout/RK2051-pub.pem -noout -out converted.der
diff -s converted.der initout/RK2051-pub.der
diff decout/RK2051.1.tally pdecout/RK2051.1.tally
openssl x509 -in initout/RK2051-sign.pem -noout -pubkey > sign.pub
openssl dgst -sha256 -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:32 -sigopt rsa_mgf1_md:sha256 -verify sign.pub -signature decout/RK2051.1.tally.signature decout/RK2051.1.tally
cd $HOME/audit-examples/audit-conv
cd process
$HOME/ivxv/auditor/build/install/auditor/bin/auditor
$HOME/ivxv/auditor/build/install/auditor/bin/auditor convert  -c conf.bdoc -p auditor.yaml.bdoc
cat ../auditor.yaml
cp ../inputs/bb-4.json* .
mkdir initout
cp ../inputs/RK2051-pub.pem initout/
cp ../inputs/shuffled.json .
$HOME/ivxv/auditor/build/install/auditor/bin/auditor convert  -c conf.bdoc -p auditor.yaml.bdoc
unzip -l ../inputs/shuffle_proof.zip
cd ..
unzip inputs/shuffle_proof.zip
cd process/
$HOME/ivxv/auditor/build/install/auditor/bin/auditor convert  -c conf.bdoc -p auditor.yaml.bdoc
$HOME/ivxv/auditor/build/install/auditor/bin/auditor mixer -c conf.bdoc -p auditor.yaml.bdoc
$HOME/ivxv/auditor/build/install/auditor/bin/auditor decrypt -c conf.bdoc -p auditor.yaml.bdoc
$HOME/ivxv-verificatum/release/mixer/bin/mix.py verify --proof-zipfile shuffle_proof.zip
$HOME/ivxv/processor/build/install/processor/bin/processor


================================================
FILE: Documentation/et/audiitor/index.rst
================================================
..  IVXV seadistuste koostamise juhend

IVXV audiitori juhend
==========================================================================

.. raw:: html

   <p style="background-color: #f99; padding: 20px;">
     <strong>NB!</strong>
     See on HTML-versioon dokumendist.
     Tellijale antakse üle PDF-versioon.
   </p>

.. toctree::
   :maxdepth: 2
   :numbered:

   ylevaade
   annotatsioon
   audit
   history


================================================
FILE: Documentation/et/audiitor/spelling_wordlist.txt
================================================

PEM
RVT'le

konfinäitega
konfinäitest

ubuntu


================================================
FILE: Documentation/et/audiitor/ylevaade.rst
================================================
Miksimistõendi ülevaade
=======================

Ilma juhuslikkust kasutamata oleks iga krüpteerimise algoritm deterministlik,
st. valija valiku krüpteerimisel oleks tulemuseks alati sama väljund. See
lubaks ründajal tuvastada esialgse valiku, kui ta krüpteeriks kõikvõimalikud
valikud ja võrdleks seda nimekirja nähtud krüpteeritud valikuga.  Seega,
krüpteerimine peab kasutama juhuslikkust.

Juhuslikkuse kasutamine teeb krüptogrammid unikaalseks - isegi kui kaks korda
on krüpteeritud sama valik, siis krüptogrammid on erinevad. See tähendab, et
kui ründaja on võimeline mingil ajahetkel seostama krüptogrammi ja selle
krüpteerinud isikut, siis on tal võimalik hiljem ainult krüptogrammi nähes
tuletada seda andnud isik. Kuna sobivate parameetrite kasutamisel on ElGamali
avaliku võtme krüptosüsteem pikaajaliselt turvaline, siis see ei ole otseselt
probleemiks.

Probleem tekib siis, kui on tarvis tõestada, et krüptogramm on korrektselt
dekrüpteeritud. Kui kasutatav valikute agregeerimise algoritm töötab avateksti
kujul sõnede peal (nagu see IVXVs on), siis iga krüptogrammi kohta tekib üks
dekrüpteeritud avatekst. Korrektse dekrüpteerimise tõestus peab nii
krüptogrammi kui dekrüpteeritud avateksti siduma. Seega on võimalik ründajal
tekitada seos isiku ja krüptogrammi, ning krüptogrammi ja vastava avateksti
vahel, st. ta saab teada, mis valiku isik tegi.

Et seda seost eemaldada, kasutatakse IVXVs krüptogrammide segamist (miksnet).
Miksnet teeb korraga kahte operatsiooni -- järjestab sisendkrüptogrammid ümber
(permuteerib) ja uuendab krüptogrammis olevad juhuslikkust (rerandomiseerib).
See tähendab, et krüptogrammid, mis lähevad miksneti sisse on väliselt täiesti
sõltumatud krüptogrammidest, mis tulevad miksnetist välja. Kuna välise
sõltumatuse tõttu võiks teoreetiliselt miksnet krüptogramme asendada, siis on
tarvis lisada miksimistõend, mis tõestab krüptograafiliselt, et operatsioonid
on tehtud korrektselt ja ühtegi täiendavat operatsiooni pole tehtud.
Kontrollides miksimistõendit, on võimalik garanteerida, et miksnet on töötanud
korrektselt.

Väikeste parameetritega kirjutatud näide
----------------------------------------

IVXV kasutab valikute krüpteerimiseks ElGamali avaliku võtme krüptosüsteemi.
ElGamali krüptosüsteemi korral on fikseeritud algebralise rühma parameetrid
koos generaatoriga :math:`g`. Salajane võti :math:`x` valitakse vahemikus
:math:`[0, q-1]` ühtlase jaotusega, kus :math:`q` on rühma multiplikatiivse
alamrühma järk. Salajasele võtmele avalik võti on defineeritud:

.. math::
   pk = (g, g^x) = (g, y).

Krüpteerimaks sõne kujul valikut `V`, tuleb see kõigepealt kodeerida rühma
elemendiks

.. math::
   m = encode(V)

ja seejärel arvutatakse krüptogramm kasutades ühekordset juhuarvu
:math:`0<=r<q`

.. math::
   c = (c_1, c_2) = (m y^r, g^r).

Sellisel juhul piisab rerandomiseerimiseks teise ühekordse juhuarvuga
:math:`t` arvutada

.. math::
   c' = c * (y^t, g^t) = (m y^{r + t}, g^{r + t}).

Paneme veel tähele, et eelmises võrrandis :math:`(y^t, g^t)` on krüpteering
elemendist :math:`1`.

Dekrüpteerimiseks arvutatakse

.. math::
   d = c_1 / c_2^x,

ja dekoreeritakse :math:`S = decode(d)`.

Juhul kui krüptogramm on korrektselt konstrueeritud ja dekrüpteerimine on
korrektselt läbi viidud, siis :math:`d=m`, kuna

.. math::
   d = c_1 / c_2^x = (m y^r) / (g^{rx}) = (m y^r) / (y^r) = m.

Näiteks, oletame et rühm on täisarvud mooduli :math:`p = 227` järgi. Sellisel
juhul genereerib generaator :math:`g = 4` alamrühma järguga :math:`q = 113`.
Valime suvalise salajase võtme :math:`x = 100` ja sellele vastav avalik võti on
:math:`pk = (g, g^x) = (4, 21)`.

Oletame, et on neli erinevat valikut ning nende kodeeringud alarühma on
järgnevad:

===== =========
valik kodeering
===== =========
orav     16
jänes    64
hunt     29
kits    116
===== =========

Järgnevate valikute ja ühekordsete juhuarvude korral on krüptogrammid
järgnevad:

===== ========= ======= =============
valik kodeering juhuarv  krüptogramm
===== ========= ======= =============
kits     116       71    (62, 205)
hunt     29        80    (161, 221)
kits     116       64    (7, 147)
kits     116       47    (139, 36)
orav     16        76    (26, 172)
hunt     29        86    (30, 212)
kits     116       88    (155, 175)
orav     16        85    (87, 212)
orav     16        32    (132, 104)
jänes    64        22    (113, 171)
===== ========= ======= =============


Olgu miksneti kasutatav permutatsioon :math:`\pi` defineeritud järgnevalt:

====== =======
indeks väärtus
====== =======
   1      5
   2      8
   3      3
   4      6
   5      7
   6      2
   7      9
   8     10
   9      4
  10      1
====== =======

Olgu miksneti rerandomiseerimiseks kasutatavad juhuarvud:

====== ================
indeks täiendav juhuarv
====== ================
   1         43
   2        107
   3          6
   4         86
   5         56
   6         48
   7         35
   8        112
   9         55
  10        101
====== ================

Sellisel juhul pärast ümberjärjestamist on krüptogrammid järgnevas järjekorras:

==========   ==========  =============
 esialgne    uus indeks  permuteeritud
==========   ==========  =============
(62, 205)       5         (113, 171)
(161, 221)      8         (30, 212)
(7, 147)        3         (7, 147)
(139, 36)       6         (132, 104)
(26, 172)       7         (62, 205)
(30, 212)       2         (139, 36)
(155, 175)      9         (26, 172)
(87, 212)      10         (161, 221)
(132, 104)      4         (155, 175)
(113, 171)      1         (87, 212)
==========   ==========  =============

Pärast rerandomiseerimist on krüptogrammid järgnevad:

==========  ================  ==================  =================
 esialgne   täiendav juhuarv  korrutatav väärtus  rerandomiseeritud
==========  ================  ==================  =================
(113, 171)         43              (10, 103)         (222, 134)
(30, 212)         107              (28, 159)         (159, 112)
(7, 147)            6              (73, 10)          (57, 108)
(132, 104)         86              (100, 167)        (34, 116)
(62, 205)          56              (207, 113)        (122, 11)
(139, 36)          48              (78, 144)         (173, 190)
(26, 172)          35              (188, 73)         (121, 71)
(161, 221)        113              (173, 57)         (159, 112)
(155, 175)         55              (172, 85)         (101, 120)
(87, 212)         101              (103, 84)         (108, 102)
==========  ================  ==================  =================

Kontrollime, kuidas permuteeritud ja rerandomiseeritud krüptogrammid
dekrüpteeruvad:

===========  ==============  ============
krüptogramm  dekrüpteeritud  dekodeeritud
===========  ==============  ============
(222, 134)        64            jänes
(159, 112)        29            hunt
(57, 108)         116           kits
(34, 116)         16            orav
(122, 11)         116           kits
(173, 190)        116           kits
(121, 71)         16            orav
(159, 112)        29            hunt
(101, 120)        116           kits
(108, 102)        16            orav
===========  ==============  ============


================================================
FILE: Documentation/et/example-config/DEMO_auditor/DEMO_auditor.yaml
================================================
# Mixneti teisenduse kontrollimine
convert:
# IVXV segamise-eelse e-valimiskasti asukoht.
  input_bb: DEMO_bb-4.json
# IVXV segamise-järgse e-valimiskasti asukoht.
  output_bb: DEMO_shuffled.json
  pub: DEMO_pub.pem
#  Verificatumi miksimistõendi protokollifaili asukoht.
  protinfo: DEMO_proof/prot.xml
# Verificatumi miksimistõendi asukoht.
  proofdir: DEMO_proof/mixnet/

# Miksimistõendi kontrollimine
# Tööriist mixer kontrollib Verificatumi miksimistõendi korrektsust.
mixer:
  protinfo: DEMO_proof/prot.xml
  proofdir: DEMO_proof/mixnet/
# Kasuta mitmelõimelist implementatsiooni. Kasutatavate lõimede arv sõltub rakenduse argumentidest
  threaded: true


# Dekrüpteerimistõestuste verifitseerimine
#Tööriist decrypt kontrollib dekrüpteerimistõendi korrektsust.
decrypt:
  input: DEMO_decout_true/DEMO-proof
  pub: DEMO_pub.pem
  out: DEMO_auditout


================================================
FILE: Documentation/et/example-config/DEMO_election/DEMO.election.yaml
================================================
# Valimiste seadistus DEMO

identifier: DEMO
questions:
  - question-1

period:
  servicestart: 2018-12-03T10:20:00+03:00
  electionstart: 2018-12-03T10:30:00+03:00
  electionstop: 2018-12-20T18:00:00+03:00
  servicestop: 2018-12-20T18:15:00+03:00
  verificationstop: 2018-12-20T18:20:00+03:00

voting:
  ratelimitstart: 15
  ratelimitminutes: 5

verification:
  count: 3
  minutes: 30

#ignorevoterlist Ringkonna identifikaator, mille valikud esitada kõigile valijatele.
#Kui see väärtus ei ole tühi, siis kogumisteenus ei kasuta valijate
#nimekirja ning esitab kõigile valijatele määratud ringkonna valikud ja
#lubab kõigil, kellel õnnestub isikutuvastus ning hääle allkirja kontrollimine,
#hääletada.
# NB! Siin on vaja kasutada !!str märgendit, et parserid ei peaks seda väärtust
# arvuks ning ei kaotaks esimest nulli ära.

# Kasutusel ainult testimiseks
# ignorevoterlist: !!str 0284.1

voterlist:
# Tegu on suvalise failiga
  key: !container DEMO_valijate_nimekiri.pem
auth:
  # Mobiil-ID autentimine on lubatud sest ticket on olemas
  ticket:
  tls:
    roots:
      - !container EE_Certification_Centre_Root_CA.pem.crt
      - !container EE-GovCA2018.pem.crt
    intermediates:
      - !container ESTEID-SK_2015.pem.crt
      - !container esteid2018.pem.crt
    ocsp:
      url: http://aia.sk.ee/esteid2015
      # respondereid ei tohiks enam vaja minna
      responders:
      #  - !container ESTEID-SK_2015_AIA_OCSP_RESPONDER_201808.pem.cer
      # Proovime ainult 1 korra, vea korral uuesti ei lähe, see on ka
      # vaikeväärtus
      retry: 0

identity: pnoee

age:
  method: estpic
  timezone: Europe/Tallinn
  # Mõnel valimisel on vanus 16!
  limit: 18

vote:
  bdoc:
    filecount: 4
    bdocsize: 32768  # 32 KiB
    filesize: 32768  # 32 KiB
    roots:
      - !container EE_Certification_Centre_Root_CA.pem.crt
      - !container EE-GovCA2018.pem.crt
    intermediates:
      - !container ESTEID-SK_2015.pem.crt
      - !container esteid2018.pem.crt
    profile: BES

# enne oli ria asemel EHS

mid:
  url: https://mid.sk.ee/mid-api/
  relyingpartyuuid: 00000000-0000-0000-0000-000000000000
  relyingpartyname: DEMO
  language: EST
  authmessage: Mobiil-ID isikutuvastus
  signmessage: Mobiil-ID hääle allkirjastamine
  messageformat: GSM-7
  authchallengesize: 64
  statustimeoutms: 5000
  roots:
    - !container EE_Certification_Centre_Root_CA.pem.crt
  intermediates:
    - !container ESTEID-SK_2015.pem.crt
  ocsp:
    url: http://aia.sk.ee/esteid2015
    responders:
      - !container SK_OCSP_RESPONDER_2011.pem.cer

qualification:
  - protocol: tspreg
    conf:
      url: http://tsa.sk.ee
      signers:
        - !container SK_TIMESTAMPING_AUTHORITY.pem.cer
# manualis 1
# See aeg oli 3600, mis lubaks, et TSA vastuse loomise ja
# allkirjastamise ajavahe on 1h. Ei ole usutav. Jätame 10sek, mis
# võiks olla enam kui piisav.
      delaytime: 10
# Lubame ühe korra peale päringu ebaõnnestumist veel proovida
      retry: 1
  - protocol: ocsp
    conf:
      url: http://aia.sk.ee/esteid2015
      responders:
      #  - !container ESTEID-SK_2015_AIA_OCSP_RESPONDER_201808.pem.cer
# Lubame ühe korra peale päringu ebaõnnestumist veel proovida
      retry: 1


================================================
FILE: Documentation/et/example-config/DEMO_election/DEMO_valijate_nimekiri.pem
================================================
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvw9xOr556u2oqnn5x743
0Zva6Ef7HnUQ0Gc+BU1XP9ByORiVGe9aBh/KIa0fAt6HM/e3BaZuSwD5PQ+NaPYa
Bc8NUVJtKrGoQcbaHIf6gNCavWiaKdzeanTZFsCOktSL4A8HjtFu+V00WnxsTWe2
zxnCQ+B6u8fWVZiqIJzCUgeFzOmivATVfMAxpbIJe6wiNBtsYLVzMyztJfhUH8wn
iS9rz4U7B1EuKdBqNLrG1DymYjEnDpUg6YQ4RW6jOi4hmt9Y4vqMYsDuozrq8OLX
zWaZWmh1lvQkkjY+ailmrL1Iberp6Pyad0CyRKTkVK3359QtkCUWgTmWNtvEEJYQ
CwIDAQAB
-----END PUBLIC KEY-----


================================================
FILE: Documentation/et/example-config/DEMO_election/EE-GovCA2018.pem.crt
================================================
-----BEGIN CERTIFICATE-----
MIIE+DCCBFmgAwIBAgIQMLOwlXoR0oFbj52nmRsnezAKBggqhkjOPQQDBDBaMQsw
CQYDVQQGEwJFRTEbMBkGA1UECgwSU0sgSUQgU29sdXRpb25zIEFTMRcwFQYDVQRh
DA5OVFJFRS0xMDc0NzAxMzEVMBMGA1UEAwwMRUUtR292Q0EyMDE4MB4XDTE4MDkw
NTA5MTEwM1oXDTMzMDkwNTA5MTEwM1owWjELMAkGA1UEBhMCRUUxGzAZBgNVBAoM
ElNLIElEIFNvbHV0aW9ucyBBUzEXMBUGA1UEYQwOTlRSRUUtMTA3NDcwMTMxFTAT
BgNVBAMMDEVFLUdvdkNBMjAxODCBmzAQBgcqhkjOPQIBBgUrgQQAIwOBhgAEAMcb
/dmAcVo/b2azEPS6CfW7fEA2KuHKC53D7ShVNvLz4QUjCdTXjds/4u99jUoYEQec
luVVzMlgEJR1nkN2eOrLAZYxPjwG5HiI1iZEyW9QKVdeEgyvhzWWTNHGjV3HdZRv
7L9o4533PtJAyqJq9OTs6mjsqwFXjH49bfZ6CGmzUJsHo4ICvDCCArgwEgYDVR0T
AQH/BAgwBgEB/wIBATAOBgNVHQ8BAf8EBAMCAQYwNAYDVR0lAQH/BCowKAYIKwYB
BQUHAwkGCCsGAQUFBwMCBggrBgEFBQcDBAYIKwYBBQUHAwEwHQYDVR0OBBYEFH4p
Vuc0knhOd+FvLjMqmHHB/TSfMB8GA1UdIwQYMBaAFH4pVuc0knhOd+FvLjMqmHHB
/TSfMIICAAYDVR0gBIIB9zCCAfMwCAYGBACPegECMAkGBwQAi+xAAQIwMgYLKwYB
BAGDkSEBAQEwIzAhBggrBgEFBQcCARYVaHR0cHM6Ly93d3cuc2suZWUvQ1BTMA0G
CysGAQQBg5EhAQECMA0GCysGAQQBg5F/AQEBMA0GCysGAQQBg5EhAQEFMA0GCysG
AQQBg5EhAQEGMA0GCysGAQQBg5EhAQEHMA0GCysGAQQBg5EhAQEDMA0GCysGAQQB
g5EhAQEEMA0GCysGAQQBg5EhAQEIMA0GCysGAQQBg5EhAQEJMA0GCysGAQQBg5Eh
AQEKMA0GCysGAQQBg5EhAQELMA0GCysGAQQBg5EhAQEMMA0GCysGAQQBg5EhAQEN
MA0GCysGAQQBg5EhAQEOMA0GCysGAQQBg5EhAQEPMA0GCysGAQQBg5EhAQEQMA0G
CysGAQQBg5EhAQERMA0GCysGAQQBg5EhAQESMA0GCysGAQQBg5EhAQETMA0GCysG
AQQBg5EhAQEUMA0GCysGAQQBg5F/AQECMA0GCysGAQQBg5F/AQEDMA0GCysGAQQB
g5F/AQEEMA0GCysGAQQBg5F/AQEFMA0GCysGAQQBg5F/AQEGMDEGCisGAQQBg5Eh
CgEwIzAhBggrBgEFBQcCARYVaHR0cHM6Ly93d3cuc2suZWUvQ1BTMBgGCCsGAQUF
BwEDBAwwCjAIBgYEAI5GAQEwCgYIKoZIzj0EAwQDgYwAMIGIAkIBk698EqetY9Tt
6HwO50CfzdIIjKmlfCI34xKdU7J+wz1tNVu2tHJwEhdsH0e92i969sRDp1RNPlVh
4XFJzI3oQFQCQgGVxmcuVnsy7NUscDZ0erwovmbFOsNxELCANxNSWx5xMqzEIhV8
46opxu10UFDIBBPzkbBenL4h+g/WU7lG78fIhA==
-----END CERTIFICATE-----


================================================
FILE: Documentation/et/example-config/DEMO_election/EE_Certification_Centre_Root_CA.pem.crt
================================================
-----BEGIN CERTIFICATE-----
MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1
MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1
czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG
CSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIwMTAxMDMwMTAxMDMwWhgPMjAzMDEy
MTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNl
ZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBS
b290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEB
AQUAA4IBDwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUy
euuOF0+W2Ap7kaJjbMeMTC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvO
bntl8jixwKIy72KyaOBhU8E2lf/slLo2rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIw
WFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw93X2PaRka9ZP585ArQ/d
MtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtNP2MbRMNE
1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYD
VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/
zQas8fElyalL1BSZMEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYB
BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEF
BQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+RjxY6hUFaTlrg4wCQiZrxTFGGV
v9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqMlIpPnTX/dqQG
E5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u
uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIW
iAYLtqZLICjU3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/v
GVCJYMzpJJUPwssd8m92kMfMdcGWxZ0=
-----END CERTIFICATE-----


================================================
FILE: Documentation/et/example-config/DEMO_election/ESTEID-SK_2015.pem.crt
================================================
-----BEGIN CERTIFICATE-----
MIIGcDCCBVigAwIBAgIQRUgJC4ec7yFWcqzT3mwbWzANBgkqhkiG9w0BAQwFADB1
MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1
czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG
CSqGSIb3DQEJARYJcGtpQHNrLmVlMCAXDTE1MTIxNzEyMzg0M1oYDzIwMzAxMjE3
MjM1OTU5WjBjMQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVy
aW1pc2tlc2t1czEXMBUGA1UEYQwOTlRSRUUtMTA3NDcwMTMxFzAVBgNVBAMMDkVT
VEVJRC1TSyAyMDE1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0oH6
1NDxbdW9k8nLA1qGaL4B7vydod2Ewp/STBZB3wEtIJCLdkpEsS8pXfFiRqwDVsgG
Gbu+Q99trlb5LI7yi7rIkRov5NftBdSNPSU5rAhYPQhvZZQgOwRaHa5Ey+BaLJHm
LqYQS9hQvQsCYyws+xVvNFUpK0pGD64iycqdMuBl/nWq3fLuZppwBh0VFltm4nhr
/1S0R9TRJpqFUGbGr4OK/DwebQ5PjhdS40gCUNwmC7fPQ4vIH+x+TCk2aG+u3MoA
z0IrpVWqiwzG/vxreuPPAkgXeFCeYf6fXLsGz4WivsZFbph2pMjELu6sltlBXfAG
3fGv43t91VXicyzR/eT5dsB+zFsW1sHV+1ONPr+qzgDxCH2cmuqoZNfIIq+buob3
eA8ee+XpJKJQr+1qGrmhggjvAhc7m6cU4x/QfxwRYhIVNhJf+sKVThkQhbJ9XxuK
k3c18wymwL1mpDD0PIGJqlssMeiuJ4IzagFbgESGNDUd4icm0hQT8CmQeUm1GbWe
BYseqPhMQX97QFBLXJLVy2SCyoAz7Bq1qA43++EcibN+yBc1nQs2Zoq8ck9MK0bC
xDMeUkQUz6VeQGp69ImOQrsw46qTz0mtdQrMSbnkXCuLan5dPm284J9HmaqiYi6j
6KLcZ2NkUnDQFesBVlMEm+fHa2iR6lnAFYZ06UECAwEAAaOCAgowggIGMB8GA1Ud
IwQYMBaAFBLyWj7qVhy/zQas8fElyalL1BSZMB0GA1UdDgQWBBSzq4i8mdVipIUq
CM20HXI7g3JHUTAOBgNVHQ8BAf8EBAMCAQYwdwYDVR0gBHAwbjAIBgYEAI96AQIw
CQYHBACL7EABAjAwBgkrBgEEAc4fAQEwIzAhBggrBgEFBQcCARYVaHR0cHM6Ly93
d3cuc2suZWUvQ1BTMAsGCSsGAQQBzh8BAjALBgkrBgEEAc4fAQMwCwYJKwYBBAHO
HwEEMBIGA1UdEwEB/wQIMAYBAf8CAQAwQQYDVR0eBDowOKE2MASCAiIiMAqHCAAA
AAAAAAAAMCKHIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCcGA1Ud
JQQgMB4GCCsGAQUFBwMJBggrBgEFBQcDAgYIKwYBBQUHAwQwfAYIKwYBBQUHAQEE
cDBuMCAGCCsGAQUFBzABhhRodHRwOi8vb2NzcC5zay5lZS9DQTBKBggrBgEFBQcw
AoY+aHR0cDovL3d3dy5zay5lZS9jZXJ0cy9FRV9DZXJ0aWZpY2F0aW9uX0NlbnRy
ZV9Sb290X0NBLmRlci5jcnQwPQYDVR0fBDYwNDAyoDCgLoYsaHR0cDovL3d3dy5z
ay5lZS9yZXBvc2l0b3J5L2NybHMvZWVjY3JjYS5jcmwwDQYJKoZIhvcNAQEMBQAD
ggEBAHRWDGI3P00r2sOnlvLHKk9eE7X93eT+4e5TeaQsOpE5zQRUTtshxN8Bnx2T
oQ9rgi18q+MwXm2f0mrGakYYG0bix7ZgDQvCMD/kuRYmwLGdfsTXwh8KuL6uSHF+
U/ZTss6qG7mxCHG9YvebkN5Yj/rYRvZ9/uJ9rieByxw4wo7b19p22PXkAkXP5y3+
qK/Oet98lqwI97kJhiS2zxFYRk+dXbazmoVHnozYKmsZaSUvoYNNH19tpS7BLdsg
i9KpbvQLb5ywIMq9ut3+b2Xvzq8yzmHMFtLIJ6Afu1jJpqD82BUAFcvi5vhnP8M7
b974R18WCOpgNQvXDI+2/8ZINeU=
-----END CERTIFICATE-----


================================================
FILE: Documentation/et/example-config/DEMO_election/SK_OCSP_RESPONDER_2011.pem.cer
================================================
-----BEGIN CERTIFICATE-----
MIIEvDCCA6SgAwIBAgIQcpyVmdruRVxNgzI3N/NZQTANBgkqhkiG9w0BAQUFADB1
MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1
czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG
CSqGSIb3DQEJARYJcGtpQHNrLmVlMB4XDTExMDMxODEwMjE0M1oXDTI0MDMxODEw
MjE0M1owgZ0xCzAJBgNVBAYTAkVFMQ4wDAYDVQQIEwVIYXJqdTEQMA4GA1UEBxMH
VGFsbGlubjEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czENMAsG
A1UECxMET0NTUDEfMB0GA1UEAxMWU0sgT0NTUCBSRVNQT05ERVIgMjAxMTEYMBYG
CSqGSIb3DQEJARYJcGtpQHNrLmVlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
CgKCAQEAihvGyhMVrgReHluKln1za6gvCE/mlSREmWjJFpL9llvuEUZoPFIypYA8
g5u1VfgkeW5gDq25jAOq4FyXeDGIa+pJn2h0o2Wc2aeppVG/emfGm/jA8jjeyMrw
H8fAJrqVQ7c9X2xSwJEch/P2d8CfMZt5YF6gqLtPvG1b+n6otBZA5wjIFfJ/inJB
MUvqHSz3+PLfxO2/T3Wyk/c8M9HIMqTelqyiMGRgWehiU1OsL9armv3dQrHs1wm6
vHaxfpfWB9YAFpeo9aYqhPCxVt/zo2NQB6vxyZS0hsOrXL7SxRToOJaqsnvlbf0e
rPPFtRHUvbojYYgl+fzlz0Jt6QJoNwIDAQABo4IBHTCCARkwEwYDVR0lBAwwCgYI
KwYBBQUHAwkwHQYDVR0OBBYEFKWhSGFt537NmJ50nCm7vYrecgxZMIGCBgNVHSAE
ezB5MHcGCisGAQQBzh8EAQIwaTA+BggrBgEFBQcCAjAyHjAAUwBLACAAdABpAG0A
ZQAgAHMAdABhAG0AcABpAG4AZwAgAHAAbwBsAGkAYwB5AC4wJwYIKwYBBQUHAgEW
G2h0dHBzOi8vd3d3LnNrLmVlL2FqYXRlbXBlbDAfBgNVHSMEGDAWgBQS8lo+6lYc
v80GrPHxJcmpS9QUmTA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vd3d3LnNrLmVl
L3JlcG9zaXRvcnkvY3Jscy9lZWNjcmNhLmNybDANBgkqhkiG9w0BAQUFAAOCAQEA
w2sKwvTHtYGtD8Jw9mNUuj/mWiBSBEBeY2LhW8V6tjBPAPp3s6iWOh0FbVR2LUyr
qRwgT3fyWiGsiDm/6cIqM+IblLp/8ztfRQjquhW6XCD9SK02OQ9ZSdBwcmoAApZL
GXQC34wdgmV/hLTTNxONnDACBKz9U+Dy9a4ZT4tpNkbH8jq/BMne8FzbvRt1bjpX
BP7gjLX+zdx8/hp0Wq4tD+f9NVX0+vm9ahEKuzx4QzPnSB7hhWM9OnLZT7noRQa+
KWk5c+e5VoR5R2t7MjVl8Cd+2llxiSxqMSbU5/23BzAKgN+NQdrBZAzpZ7lfaAuL
FaICP+bAm6uW2JUrM6abOw==
-----END CERTIFICATE-----


================================================
FILE: Documentation/et/example-config/DEMO_election/SK_TIMESTAMPING_AUTHORITY.pem.cer
================================================
-----BEGIN CERTIFICATE-----
MIIEDTCCAvWgAwIBAgIQJK/s6xJo0AJUF/eG7W8BWTANBgkqhkiG9w0BAQsFADB1
MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1
czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG
CSqGSIb3DQEJARYJcGtpQHNrLmVlMB4XDTE0MDkxNjA4NDAzOFoXDTE5MDkxNjA4
NDAzOFowYzELMAkGA1UEBhMCRUUxIjAgBgNVBAoMGUFTIFNlcnRpZml0c2Vlcmlt
aXNrZXNrdXMxDDAKBgNVBAsMA1RTQTEiMCAGA1UEAwwZU0sgVElNRVNUQU1QSU5H
IEFVVEhPUklUWTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJPa/dQK
emSKCNSwlMUp9YKQY6zQOfs9vgUnbzTRHCRBRdsabZYknxTI4DqQ5+JPqw8MTkDv
b6nfDZGd15t4oY4tHXXoCfRrbMjJ9+DV+M7bd+vrBI8vi7DBCM59/VAjxBAuZ9P7
Tsg8o8BrVqqB9c0ezlSCtFg8X0x2ET3ZBtZ49UARh/XP07I7eRk/DtSLYauxJDPz
XVEZmSJCIybclox93u8F5/o8GySbD5GYMhffOJgXmul/Vz7eR0d5SxCMvJIRrP7W
fiJYaUjLYqL2wjFQe/nUltcGCn2KtqGCyH7vl+Xzefea6Xjc8ebTgan2FJ0UH0mH
v98lWADKuTI2fXcCAwEAAaOBqjCBpzAOBgNVHQ8BAf8EBAMCBsAwFgYDVR0lAQH/
BAwwCgYIKwYBBQUHAwgwHQYDVR0OBBYEFLGwvffmoGkWbCDlUftc9DBic1cnMB8G
A1UdIwQYMBaAFBLyWj7qVhy/zQas8fElyalL1BSZMD0GA1UdHwQ2MDQwMqAwoC6G
LGh0dHA6Ly93d3cuc2suZWUvcmVwb3NpdG9yeS9jcmxzL2VlY2NyY2EuY3JsMA0G
CSqGSIb3DQEBCwUAA4IBAQCopcU932wVPD6eed+sDBht4zt+kMPPFXv1pIX0Rgbi
zaKvHWU4oHpRH8zcgo/gpotRLlLhZbHtu94pLFN6enpiyHNwevkmUyvrBWylONR1
Yhwb4dLS8pBGGFR6eRdhGzoKAUF4B4dIoXOj4p26q1yYULF5ZkZHxhQFNi5uxak9
tgCFlGtzXumjL5jBmtWeDTGE4YSa34pzDXjz8VAjPJ9sVuOmK2E0gyWxUTLXF9Ye
vrWzRLzVFqw+qewBV2I4of/6miZOOT2wlA/meL7zr3hnfo7KSJQmMNUjZ6lh6RBI
VvYI0t+A/fpTKiZfviz/Xn2e4PC6i57wmH5EgOOav0UK
-----END CERTIFICATE-----


================================================
FILE: Documentation/et/example-config/DEMO_election/esteid2018.pem.crt
================================================
-----BEGIN CERTIFICATE-----
MIIFVzCCBLigAwIBAgIQdUf6rBR0S4tbo2bU/mZV7TAKBggqhkjOPQQDBDBaMQsw
CQYDVQQGEwJFRTEbMBkGA1UECgwSU0sgSUQgU29sdXRpb25zIEFTMRcwFQYDVQRh
DA5OVFJFRS0xMDc0NzAxMzEVMBMGA1UEAwwMRUUtR292Q0EyMDE4MB4XDTE4MDky
MDA5MjIyOFoXDTMzMDkwNTA5MTEwM1owWDELMAkGA1UEBhMCRUUxGzAZBgNVBAoM
ElNLIElEIFNvbHV0aW9ucyBBUzEXMBUGA1UEYQwOTlRSRUUtMTA3NDcwMTMxEzAR
BgNVBAMMCkVTVEVJRDIwMTgwgZswEAYHKoZIzj0CAQYFK4EEACMDgYYABAHHOBlv
7UrRPYP1yHhOb7RA/YBDbtgynSVMqYdxnFrKHUXh6tFkghvHuA1k2DSom1hE5kqh
B5VspDembwWDJBOQWQGOI/0t3EtccLYjeM7F9xOPdzUbZaIbpNRHpQgVBpFX0xpL
TgW27MpIMhU8DHBWFpeAaNX3eUpD4gC5cvhsK0RFEqOCAx0wggMZMB8GA1UdIwQY
MBaAFH4pVuc0knhOd+FvLjMqmHHB/TSfMB0GA1UdDgQWBBTZrHDbX36+lPig5L5H
otA0rZoqEjAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADCCAc0G
A1UdIASCAcQwggHAMAgGBgQAj3oBAjAJBgcEAIvsQAECMDIGCysGAQQBg5EhAQEB
MCMwIQYIKwYBBQUHAgEWFWh0dHBzOi8vd3d3LnNrLmVlL0NQUzANBgsrBgEEAYOR
IQEBAjANBgsrBgEEAYORfwEBATANBgsrBgEEAYORIQEBBTANBgsrBgEEAYORIQEB
BjANBgsrBgEEAYORIQEBBzANBgsrBgEEAYORIQEBAzANBgsrBgEEAYORIQEBBDAN
BgsrBgEEAYORIQEBCDANBgsrBgEEAYORIQEBCTANBgsrBgEEAYORIQEBCjANBgsr
BgEEAYORIQEBCzANBgsrBgEEAYORIQEBDDANBgsrBgEEAYORIQEBDTANBgsrBgEE
AYORIQEBDjANBgsrBgEEAYORIQEBDzANBgsrBgEEAYORIQEBEDANBgsrBgEEAYOR
IQEBETANBgsrBgEEAYORIQEBEjANBgsrBgEEAYORIQEBEzANBgsrBgEEAYORIQEB
FDANBgsrBgEEAYORfwEBAjANBgsrBgEEAYORfwEBAzANBgsrBgEEAYORfwEBBDAN
BgsrBgEEAYORfwEBBTANBgsrBgEEAYORfwEBBjAqBgNVHSUBAf8EIDAeBggrBgEF
BQcDCQYIKwYBBQUHAwIGCCsGAQUFBwMEMGoGCCsGAQUFBwEBBF4wXDApBggrBgEF
BQcwAYYdaHR0cDovL2FpYS5zay5lZS9lZS1nb3ZjYTIwMTgwLwYIKwYBBQUHMAKG
I2h0dHA6Ly9jLnNrLmVlL0VFLUdvdkNBMjAxOC5kZXIuY3J0MBgGCCsGAQUFBwED
BAwwCjAIBgYEAI5GAQEwMAYDVR0fBCkwJzAloCOgIYYfaHR0cDovL2Muc2suZWUv
RUUtR292Q0EyMDE4LmNybDAKBggqhkjOPQQDBAOBjAAwgYgCQgDeuUY4HczUbFKS
002HZ88gclgYdztHqglENyTMtXE6dMBRnCbgUmhBCAA0mJSHbyFJ8W9ikLiSyurm
kJM0hDE9KgJCASOqA405Ia5nKjTJPNsHQlMi7KZsIcTHOoBccx+54N8ZX1MgBozJ
mT59rZY/2/OeE163BAwD0UdUQAnMPP6+W3Vd
-----END CERTIFICATE-----


================================================
FILE: Documentation/et/example-config/DEMO_ivxv/EE-GovCA2018.pem.crt
================================================
-----BEGIN CERTIFICATE-----
MIIE+DCCBFmgAwIBAgIQMLOwlXoR0oFbj52nmRsnezAKBggqhkjOPQQDBDBaMQsw
CQYDVQQGEwJFRTEbMBkGA1UECgwSU0sgSUQgU29sdXRpb25zIEFTMRcwFQYDVQRh
DA5OVFJFRS0xMDc0NzAxMzEVMBMGA1UEAwwMRUUtR292Q0EyMDE4MB4XDTE4MDkw
NTA5MTEwM1oXDTMzMDkwNTA5MTEwM1owWjELMAkGA1UEBhMCRUUxGzAZBgNVBAoM
ElNLIElEIFNvbHV0aW9ucyBBUzEXMBUGA1UEYQwOTlRSRUUtMTA3NDcwMTMxFTAT
BgNVBAMMDEVFLUdvdkNBMjAxODCBmzAQBgcqhkjOPQIBBgUrgQQAIwOBhgAEAMcb
/dmAcVo/b2azEPS6CfW7fEA2KuHKC53D7ShVNvLz4QUjCdTXjds/4u99jUoYEQec
luVVzMlgEJR1nkN2eOrLAZYxPjwG5HiI1iZEyW9QKVdeEgyvhzWWTNHGjV3HdZRv
7L9o4533PtJAyqJq9OTs6mjsqwFXjH49bfZ6CGmzUJsHo4ICvDCCArgwEgYDVR0T
AQH/BAgwBgEB/wIBATAOBgNVHQ8BAf8EBAMCAQYwNAYDVR0lAQH/BCowKAYIKwYB
BQUHAwkGCCsGAQUFBwMCBggrBgEFBQcDBAYIKwYBBQUHAwEwHQYDVR0OBBYEFH4p
Vuc0knhOd+FvLjMqmHHB/TSfMB8GA1UdIwQYMBaAFH4pVuc0knhOd+FvLjMqmHHB
/TSfMIICAAYDVR0gBIIB9zCCAfMwCAYGBACPegECMAkGBwQAi+xAAQIwMgYLKwYB
BAGDkSEBAQEwIzAhBggrBgEFBQcCARYVaHR0cHM6Ly93d3cuc2suZWUvQ1BTMA0G
CysGAQQBg5EhAQECMA0GCysGAQQBg5F/AQEBMA0GCysGAQQBg5EhAQEFMA0GCysG
AQQBg5EhAQEGMA0GCysGAQQBg5EhAQEHMA0GCysGAQQBg5EhAQEDMA0GCysGAQQB
g5EhAQEEMA0GCysGAQQBg5EhAQEIMA0GCysGAQQBg5EhAQEJMA0GCysGAQQBg5Eh
AQEKMA0GCysGAQQBg5EhAQELMA0GCysGAQQBg5EhAQEMMA0GCysGAQQBg5EhAQEN
MA0GCysGAQQBg5EhAQEOMA0GCysGAQQBg5EhAQEPMA0GCysGAQQBg5EhAQEQMA0G
CysGAQQBg5EhAQERMA0GCysGAQQBg5EhAQESMA0GCysGAQQBg5EhAQETMA0GCysG
AQQBg5EhAQEUMA0GCysGAQQBg5F/AQECMA0GCysGAQQBg5F/AQEDMA0GCysGAQQB
g5F/AQEEMA0GCysGAQQBg5F/AQEFMA0GCysGAQQBg5F/AQEGMDEGCisGAQQBg5Eh
CgEwIzAhBggrBgEFBQcCARYVaHR0cHM6Ly93d3cuc2suZWUvQ1BTMBgGCCsGAQUF
BwEDBAwwCjAIBgYEAI5GAQEwCgYIKoZIzj0EAwQDgYwAMIGIAkIBk698EqetY9Tt
6HwO50CfzdIIjKmlfCI34xKdU7J+wz1tNVu2tHJwEhdsH0e92i969sRDp1RNPlVh
4XFJzI3oQFQCQgGVxmcuVnsy7NUscDZ0erwovmbFOsNxELCANxNSWx5xMqzEIhV8
46opxu10UFDIBBPzkbBenL4h+g/WU7lG78fIhA==
-----END CERTIFICATE-----


================================================
FILE: Documentation/et/example-config/DEMO_ivxv/ESTEID-SK_2015.pem.crt
================================================
-----BEGIN CERTIFICATE-----
MIIGcDCCBVigAwIBAgIQRUgJC4ec7yFWcqzT3mwbWzANBgkqhkiG9w0BAQwFADB1
MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1
czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG
CSqGSIb3DQEJARYJcGtpQHNrLmVlMCAXDTE1MTIxNzEyMzg0M1oYDzIwMzAxMjE3
MjM1OTU5WjBjMQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVy
aW1pc2tlc2t1czEXMBUGA1UEYQwOTlRSRUUtMTA3NDcwMTMxFzAVBgNVBAMMDkVT
VEVJRC1TSyAyMDE1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0oH6
1NDxbdW9k8nLA1qGaL4B7vydod2Ewp/STBZB3wEtIJCLdkpEsS8pXfFiRqwDVsgG
Gbu+Q99trlb5LI7yi7rIkRov5NftBdSNPSU5rAhYPQhvZZQgOwRaHa5Ey+BaLJHm
LqYQS9hQvQsCYyws+xVvNFUpK0pGD64iycqdMuBl/nWq3fLuZppwBh0VFltm4nhr
/1S0R9TRJpqFUGbGr4OK/DwebQ5PjhdS40gCUNwmC7fPQ4vIH+x+TCk2aG+u3MoA
z0IrpVWqiwzG/vxreuPPAkgXeFCeYf6fXLsGz4WivsZFbph2pMjELu6sltlBXfAG
3fGv43t91VXicyzR/eT5dsB+zFsW1sHV+1ONPr+qzgDxCH2cmuqoZNfIIq+buob3
eA8ee+XpJKJQr+1qGrmhggjvAhc7m6cU4x/QfxwRYhIVNhJf+sKVThkQhbJ9XxuK
k3c18wymwL1mpDD0PIGJqlssMeiuJ4IzagFbgESGNDUd4icm0hQT8CmQeUm1GbWe
BYseqPhMQX97QFBLXJLVy2SCyoAz7Bq1qA43++EcibN+yBc1nQs2Zoq8ck9MK0bC
xDMeUkQUz6VeQGp69ImOQrsw46qTz0mtdQrMSbnkXCuLan5dPm284J9HmaqiYi6j
6KLcZ2NkUnDQFesBVlMEm+fHa2iR6lnAFYZ06UECAwEAAaOCAgowggIGMB8GA1Ud
IwQYMBaAFBLyWj7qVhy/zQas8fElyalL1BSZMB0GA1UdDgQWBBSzq4i8mdVipIUq
CM20HXI7g3JHUTAOBgNVHQ8BAf8EBAMCAQYwdwYDVR0gBHAwbjAIBgYEAI96AQIw
CQYHBACL7EABAjAwBgkrBgEEAc4fAQEwIzAhBggrBgEFBQcCARYVaHR0cHM6Ly93
d3cuc2suZWUvQ1BTMAsGCSsGAQQBzh8BAjALBgkrBgEEAc4fAQMwCwYJKwYBBAHO
HwEEMBIGA1UdEwEB/wQIMAYBAf8CAQAwQQYDVR0eBDowOKE2MASCAiIiMAqHCAAA
AAAAAAAAMCKHIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCcGA1Ud
JQQgMB4GCCsGAQUFBwMJBggrBgEFBQcDAgYIKwYBBQUHAwQwfAYIKwYBBQUHAQEE
cDBuMCAGCCsGAQUFBzABhhRodHRwOi8vb2NzcC5zay5lZS9DQTBKBggrBgEFBQcw
AoY+aHR0cDovL3d3dy5zay5lZS9jZXJ0cy9FRV9DZXJ0aWZpY2F0aW9uX0NlbnRy
ZV9Sb290X0NBLmRlci5jcnQwPQYDVR0fBDYwNDAyoDCgLoYsaHR0cDovL3d3dy5z
ay5lZS9yZXBvc2l0b3J5L2NybHMvZWVjY3JjYS5jcmwwDQYJKoZIhvcNAQEMBQAD
ggEBAHRWDGI3P00r2sOnlvLHKk9eE7X93eT+4e5TeaQsOpE5zQRUTtshxN8Bnx2T
oQ9rgi18q+MwXm2f0mrGakYYG0bix7ZgDQvCMD/kuRYmwLGdfsTXwh8KuL6uSHF+
U/ZTss6qG7mxCHG9YvebkN5Yj/rYRvZ9/uJ9rieByxw4wo7b19p22PXkAkXP5y3+
qK/Oet98lqwI97kJhiS2zxFYRk+dXbazmoVHnozYKmsZaSUvoYNNH19tpS7BLdsg
i9KpbvQLb5ywIMq9ut3+b2Xvzq8yzmHMFtLIJ6Afu1jJpqD82BUAFcvi5vhnP8M7
b974R18WCOpgNQvXDI+2/8ZINeU=
-----END CERTIFICATE-----


================================================
FILE: Documentation/et/example-config/DEMO_ivxv/ESTEID2018.pem.crt
================================================
-----BEGIN CERTIFICATE-----
MIIFVzCCBLigAwIBAgIQdUf6rBR0S4tbo2bU/mZV7TAKBggqhkjOPQQDBDBaMQsw
CQYDVQQGEwJFRTEbMBkGA1UECgwSU0sgSUQgU29sdXRpb25zIEFTMRcwFQYDVQRh
DA5OVFJFRS0xMDc0NzAxMzEVMBMGA1UEAwwMRUUtR292Q0EyMDE4MB4XDTE4MDky
MDA5MjIyOFoXDTMzMDkwNTA5MTEwM1owWDELMAkGA1UEBhMCRUUxGzAZBgNVBAoM
ElNLIElEIFNvbHV0aW9ucyBBUzEXMBUGA1UEYQwOTlRSRUUtMTA3NDcwMTMxEzAR
BgNVBAMMCkVTVEVJRDIwMTgwgZswEAYHKoZIzj0CAQYFK4EEACMDgYYABAHHOBlv
7UrRPYP1yHhOb7RA/YBDbtgynSVMqYdxnFrKHUXh6tFkghvHuA1k2DSom1hE5kqh
B5VspDembwWDJBOQWQGOI/0t3EtccLYjeM7F9xOPdzUbZaIbpNRHpQgVBpFX0xpL
TgW27MpIMhU8DHBWFpeAaNX3eUpD4gC5cvhsK0RFEqOCAx0wggMZMB8GA1UdIwQY
MBaAFH4pVuc0knhOd+FvLjMqmHHB/TSfMB0GA1UdDgQWBBTZrHDbX36+lPig5L5H
otA0rZoqEjAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADCCAc0G
A1UdIASCAcQwggHAMAgGBgQAj3oBAjAJBgcEAIvsQAECMDIGCysGAQQBg5EhAQEB
MCMwIQYIKwYBBQUHAgEWFWh0dHBzOi8vd3d3LnNrLmVlL0NQUzANBgsrBgEEAYOR
IQEBAjANBgsrBgEEAYORfwEBATANBgsrBgEEAYORIQEBBTANBgsrBgEEAYORIQEB
BjANBgsrBgEEAYORIQEBBzANBgsrBgEEAYORIQEBAzANBgsrBgEEAYORIQEBBDAN
BgsrBgEEAYORIQEBCDANBgsrBgEEAYORIQEBCTANBgsrBgEEAYORIQEBCjANBgsr
BgEEAYORIQEBCzANBgsrBgEEAYORIQEBDDANBgsrBgEEAYORIQEBDTANBgsrBgEE
AYORIQEBDjANBgsrBgEEAYORIQEBDzANBgsrBgEEAYORIQEBEDANBgsrBgEEAYOR
IQEBETANBgsrBgEEAYORIQEBEjANBgsrBgEEAYORIQEBEzANBgsrBgEEAYORIQEB
FDANBgsrBgEEAYORfwEBAjANBgsrBgEEAYORfwEBAzANBgsrBgEEAYORfwEBBDAN
BgsrBgEEAYORfwEBBTANBgsrBgEEAYORfwEBBjAqBgNVHSUBAf8EIDAeBggrBgEF
BQcDCQYIKwYBBQUHAwIGCCsGAQUFBwMEMGoGCCsGAQUFBwEBBF4wXDApBggrBgEF
BQcwAYYdaHR0cDovL2FpYS5zay5lZS9lZS1nb3ZjYTIwMTgwLwYIKwYBBQUHMAKG
I2h0dHA6Ly9jLnNrLmVlL0VFLUdvdkNBMjAxOC5kZXIuY3J0MBgGCCsGAQUFBwED
BAwwCjAIBgYEAI5GAQEwMAYDVR0fBCkwJzAloCOgIYYfaHR0cDovL2Muc2suZWUv
RUUtR292Q0EyMDE4LmNybDAKBggqhkjOPQQDBAOBjAAwgYgCQgDeuUY4HczUbFKS
002HZ88gclgYdztHqglENyTMtXE6dMBRnCbgUmhBCAA0mJSHbyFJ8W9ikLiSyurm
kJM0hDE9KgJCASOqA405Ia5nKjTJPNsHQlMi7KZsIcTHOoBccx+54N8ZX1MgBozJ
mT59rZY/2/OeE163BAwD0UdUQAnMPP6+W3Vd
-----END CERTIFICATE-----


================================================
FILE: Documentation/et/example-config/DEMO_ivxv/SK_OCSP_RESPONDER_2011.pem.crt
================================================
-----BEGIN CERTIFICATE-----
MIIEvDCCA6SgAwIBAgIQcpyVmdruRVxNgzI3N/NZQTANBgkqhkiG9w0BAQUFADB1
MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1
czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG
CSqGSIb3DQEJARYJcGtpQHNrLmVlMB4XDTExMDMxODEwMjE0M1oXDTI0MDMxODEw
MjE0M1owgZ0xCzAJBgNVBAYTAkVFMQ4wDAYDVQQIEwVIYXJqdTEQMA4GA1UEBxMH
VGFsbGlubjEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czENMAsG
A1UECxMET0NTUDEfMB0GA1UEAxMWU0sgT0NTUCBSRVNQT05ERVIgMjAxMTEYMBYG
CSqGSIb3DQEJARYJcGtpQHNrLmVlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
CgKCAQEAihvGyhMVrgReHluKln1za6gvCE/mlSREmWjJFpL9llvuEUZoPFIypYA8
g5u1VfgkeW5gDq25jAOq4FyXeDGIa+pJn2h0o2Wc2aeppVG/emfGm/jA8jjeyMrw
H8fAJrqVQ7c9X2xSwJEch/P2d8CfMZt5YF6gqLtPvG1b+n6otBZA5wjIFfJ/inJB
MUvqHSz3+PLfxO2/T3Wyk/c8M9HIMqTelqyiMGRgWehiU1OsL9armv3dQrHs1wm6
vHaxfpfWB9YAFpeo9aYqhPCxVt/zo2NQB6vxyZS0hsOrXL7SxRToOJaqsnvlbf0e
rPPFtRHUvbojYYgl+fzlz0Jt6QJoNwIDAQABo4IBHTCCARkwEwYDVR0lBAwwCgYI
KwYBBQUHAwkwHQYDVR0OBBYEFKWhSGFt537NmJ50nCm7vYrecgxZMIGCBgNVHSAE
ezB5MHcGCisGAQQBzh8EAQIwaTA+BggrBgEFBQcCAjAyHjAAUwBLACAAdABpAG0A
ZQAgAHMAdABhAG0AcABpAG4AZwAgAHAAbwBsAGkAYwB5AC4wJwYIKwYBBQUHAgEW
G2h0dHBzOi8vd3d3LnNrLmVlL2FqYXRlbXBlbDAfBgNVHSMEGDAWgBQS8lo+6lYc
v80GrPHxJcmpS9QUmTA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vd3d3LnNrLmVl
L3JlcG9zaXRvcnkvY3Jscy9lZWNjcmNhLmNybDANBgkqhkiG9w0BAQUFAAOCAQEA
w2sKwvTHtYGtD8Jw9mNUuj/mWiBSBEBeY2LhW8V6tjBPAPp3s6iWOh0FbVR2LUyr
qRwgT3fyWiGsiDm/6cIqM+IblLp/8ztfRQjquhW6XCD9SK02OQ9ZSdBwcmoAApZL
GXQC34wdgmV/hLTTNxONnDACBKz9U+Dy9a4ZT4tpNkbH8jq/BMne8FzbvRt1bjpX
BP7gjLX+zdx8/hp0Wq4tD+f9NVX0+vm9ahEKuzx4QzPnSB7hhWM9OnLZT7noRQa+
KWk5c+e5VoR5R2t7MjVl8Cd+2llxiSxqMSbU5/23BzAKgN+NQdrBZAzpZ7lfaAuL
FaICP+bAm6uW2JUrM6abOw==
-----END CERTIFICATE-----


================================================
FILE: Documentation/et/example-config/DEMO_ivxv/SK_TIMESTAMPING_AUTHORITY_2019.pem.crt
================================================
-----BEGIN CERTIFICATE-----
MIIEFjCCAv6gAwIBAgIQftdGTujTD01cG10EjrASbDANBgkqhkiG9w0BAQsFADB1
MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1
czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG
CSqGSIb3DQEJARYJcGtpQHNrLmVlMB4XDTE5MDEwMTIxMDAwMFoXDTI0MDEwMTIx
MDAwMFowejEnMCUGA1UEAwweU0sgVElNRVNUQU1QSU5HIEFVVEhPUklUWSAyMDE5
MRcwFQYDVQRhDA5OVFJFRS0xMDc0NzAxMzEMMAoGA1UECwwDVFNBMRswGQYDVQQK
DBJTSyBJRCBTb2x1dGlvbnMgQVMxCzAJBgNVBAYTAkVFMIIBIjANBgkqhkiG9w0B
AQEFAAOCAQ8AMIIBCgKCAQEAqfl9D1lK8LveyTb3tlOJZfc0J+W3uG7czOZuQKig
wkxq2JXrqndigVtSZWzNnoO+somaNgXqw0lpu+8P0NdUw+y1a4znJntvf7HK4WNr
HO94DcrcxIJRdRkxRH/e3/0SE1FpX8B96IgyjeQj9Y3tgHYAfSMo0Sj2ANYc/NpF
59NWf0nBzJ5QvXD80N1ybiVVu4NALKFxTOEHPRmdFdptNNEaipwHyLwaSDpXCtnX
xBz6zV/jIsMYCxNl0cXlx+mkD97scmLhGB27rmI8qEPM6Tue0iGp1Tb6hIFdEQF2
gZ8VPOsyJl3cpQd5GRkT63bOtHUm54TYCfw/P7NhO7pFLwIDAQABo4GcMIGZMA4G
A1UdDwEB/wQEAwIGwDAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAdBgNVHQ4EFgQU
nUvt/uXDNtWuqmMvTSBvDyrTJxYwHwYDVR0jBBgwFoAUEvJaPupWHL/NBqzx8SXJ
qUvUFJkwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUFBzABhhNodHRwOi8vYWlhLnNr
LmVlL0NBMA0GCSqGSIb3DQEBCwUAA4IBAQApC2BNnwqlgm3KsBMbp0lWw2uGVzUX
iu4Cfsol6290Jzn6UftA3HjOG33vg5Dl3SV9Z97AfqgbE4A9Czms8veHwtNRLIaA
HuRVm6C/GWa4+nuzNFoAK1pjjBGoPWvfYhud/bAlbYY1qF6nHA50/tFT0GGixrnm
I9YsZ0tuXM9pQaoO0YnoCvw8cvMIt68WqIEST+OoCZipgdQRZ5IEJTmvE+LLBDuE
87orGfxxswsy+jnOfHX8MLBOhWglrJ7RrXLNdKXOlbvhcU3vXl89gKtWWfr+OdVG
dJc+/A3wdtTFhNdy7Ce0VIiZvmEx/UtUmfF41g/y+3lXOb3h6ipk037x
-----END CERTIFICATE-----


================================================
FILE: Documentation/et/example-config/DEMO_ivxv/SK_TIMESTAMPING_AUTHORITY_2020.pem.crt
================================================
-----BEGIN CERTIFICATE-----
MIIEFjCCAv6gAwIBAgIQYjZ9dFrZQ6tdpFC5Xj/6bjANBgkqhkiG9w0BAQsFADB1
MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1
czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG
CSqGSIb3DQEJARYJcGtpQHNrLmVlMB4XDTE5MTIzMTIyMDAwMFoXDTI0MTIzMTIy
MDAwMFowejEnMCUGA1UEAwweU0sgVElNRVNUQU1QSU5HIEFVVEhPUklUWSAyMDIw
MRcwFQYDVQRhDA5OVFJFRS0xMDc0NzAxMzEMMAoGA1UECwwDVFNBMRswGQYDVQQK
DBJTSyBJRCBTb2x1dGlvbnMgQVMxCzAJBgNVBAYTAkVFMIIBIjANBgkqhkiG9w0B
AQEFAAOCAQ8AMIIBCgKCAQEAxdOHoO/xEAXVYd6m64QhKHoNZhT5L+wEkO59DH4K
8lW1r//kEJusfY60zDY8o9s96HYACcQOR9Yltg3T3neqRZJ5GEPt5uFzCWzuSdyx
IWMacxu/sSYaln4bqbCd97ML4qVdvwPGLNGRu8Utuy0JyhyuoBICHUcgyw1O2ATl
c+95zdhGvKq15gazGXTpVUYgLpInkChp1ojZCv/WFdKN3dNGB5tqn3xsdfUfGDWx
e4gLFFLeXjxo0pT2Y+5hJF1+r+PllZRnu1LKXEcrHxeyyZ+KL6wSLUyvfxZ++5hd
0wR1pCnVgZ+hfYaGZ+YGRJXtiIA8DFqeKZ6qAhA8a6v99QIDAQABo4GcMIGZMA4G
A1UdDwEB/wQEAwIGwDAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAdBgNVHQ4EFgQU
qD4KKP6RKqGdYfXNlT35pc1GkjEwHwYDVR0jBBgwFoAUEvJaPupWHL/NBqzx8SXJ
qUvUFJkwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUFBzABhhNodHRwOi8vYWlhLnNr
LmVlL0NBMA0GCSqGSIb3DQEBCwUAA4IBAQAJ06Qp/kiOhcNbEsDUVGfLuVycKjEb
rGGMWnAj18S08aWx7ijXtDD9mY5CxtRUl9IbjB/eyl/Rt8RDVURtIioiNckkxC/b
OHxiCj2WNCvRxo8GT/qn4M1vV/Sy8vwx/ZlYsZrlRnuo7/dqPsQyxIgRGbUp12bV
KO4KQb4DNOcA6KDwcPd2zv4nBT/4XW7qD07spW9LPVKEvsOU1MV1tznjD0lC5ZL6
7FdB8kKEJCbbNfqVLVBOYjBopct5qzTLLPB5LTmV8I281XzTEqeFxbFy+wo7VOT6
K36OYSd+9CnPn2M/l6VfrSCi3OvaWcq+lggGR1kQzDsS4lN1JoyZqd39
-----END CERTIFICATE-----


================================================
FILE: Documentation/et/example-config/DEMO_ivxv/SK_TIMESTAMPING_AUTHORITY_2021.pem.crt
================================================
-----BEGIN CERTIFICATE-----
MIIEWjCCA0KgAwIBAgIQCrITQgwdM4hfdZRtSgVwszANBgkqhkiG9w0BAQsFADB1
MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1
czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG
CSqGSIb3DQEJARYJcGtpQHNrLmVlMB4XDTIwMTIzMTIyMDAwMVoXDTI1MTIzMTIy
MDAwMVowejEnMCUGA1UEAwweU0sgVElNRVNUQU1QSU5HIEFVVEhPUklUWSAyMDIx
MRcwFQYDVQRhDA5OVFJFRS0xMDc0NzAxMzEMMAoGA1UECwwDVFNBMRswGQYDVQQK
DBJTSyBJRCBTb2x1dGlvbnMgQVMxCzAJBgNVBAYTAkVFMIIBIjANBgkqhkiG9w0B
AQEFAAOCAQ8AMIIBCgKCAQEAwmZuFcXZ3UGPjIEX0mldGSTiUxMcfG8Fh0f4VlAg
6aN/buuRVaEpwrS7UfTD/HF7JojcJidFf7wTBd+B52oqYhya7rT/d11exeDtwIZp
ymksqC+F8bWoleJ3HkSByyGfuGcGGSnowaCjcZqTT2YCT40PdfJfPIaUqobjNC9i
dFP/FOzgHWu8hUiOAixZ+X22r0CVgTnNW0/xiaRPq/PgpgDAsxlYDABonFKiCEfH
yK5T1rjV585lfwWBcPo5jnI9tIyT3fSB06QZ0i4rmFcPli/0XvyHrGNNpJNPJ9lb
9d0VhcPwktoDr2nBFgBzpjRufwVPjQCBuDVidkuMEjLOTwIDAQABo4HgMIHdMA4G
A1UdDwEB/wQEAwIGwDAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAdBgNVHQ4EFgQU
EDIBfAAH5r+iCV+irQKE3Tk2/h8wHwYDVR0jBBgwFoAUEvJaPupWHL/NBqzx8SXJ
qUvUFJkwcwYIKwYBBQUHAQEEZzBlMB8GCCsGAQUFBzABhhNodHRwOi8vYWlhLnNr
LmVlL0NBMEIGCCsGAQUFBzAChjZodHRwOi8vYy5zay5lZS9FRV9DZXJ0aWZpY2F0
aW9uX0NlbnRyZV9Sb290X0NBLmRlci5jcnQwDQYJKoZIhvcNAQELBQADggEBACnG
Dxtyt0EmeLyGhwW01/rg6q9KStXW65qwNnTdW7QpY+3Q8Oc64zJAAOAkfcaSa1Bq
lJmO7QMkSnpeEa5AH//48bdfZ0RYRGnEpoqq6L5Qi6iCHBduRDxrea0bR7s/UaIB
9PMR6jNU7Y4hSlAZCTxZvsuOwgbYzU1kJipc5mh4nSDU3qyL7vPefgQAgLMOhMI7
8ZFSHGxGJf+BNOaHzD4IYBRd81Facnr5+hfD2gNFPcuf9DPFVinKUG9c4XuKj6V3
0fGBBZoSfju53Jk6/aGfKwKWLpN13Sh4RMb+KL2S/mDIMKRVCst901nPorgq58Bj
d/zm6CptMqABrIpGRl8=
-----END CERTIFICATE-----


================================================
FILE: Documentation/et/example-config/DEMO_ivxv/ivxv.properties
================================================
ca = EE-GovCA2018.pem.crt, ESTEID2018.pem.crt, ESTEID-SK_2015.pem.crt
ocsp = SK_OCSP_RESPONDER_2011.pem.crt
tsa = SK_TIMESTAMPING_AUTHORITY_2019.pem.crt, SK_TIMESTAMPING_AUTHORITY_2020.pem.crt, SK_TIMESTAMPING_AUTHORITY_2021.pem.crt


================================================
FILE: Documentation/et/example-config/DEMO_key.decrypt_f/DEMO_key.decrypt_f.yaml
================================================
util:
  listreaders: true

testkey:
    identifier: DEMO
    out: initout
    threshold: 5
    parties: 9
# Kaartidele automaatne terminalide määramine. Vaikimise väärtus on tõene.
    fastmode: true

decrypt:
# Valimise unikaalne identifikaator.
  identifier: DEMO
# Küsimuste arv anonüümistatud e-valimiskastis. Vaikimisi väärtus on 1.
  questioncount: 1
  protocol:
    recover:
      threshold: 5
      parties: 9
# decrypt.anonballotbox Töötlemisrakenduse või miksimisrakenduse poolt loodud e-valimiskast anonüümistatud häältega.
  anonballotbox: DEMO_bb-4.json
  anonballotbox_checksum: DEMO_bb-4.json.sha256sum.bdoc
  candidates: DEMO_valikud.bdoc
  districts: DEMO_jaoskonnad.bdoc
# Krüptogrammide korrektsuse kontrollimine enne dekrüpteerimist. Juhul kui krüptogrammide sisend ei tule usaldatud allikast, siis tuleb kontrollida krüptogrammide korrektsust.
# Usaldatud allikad on töötlemisrakendus ning miksija. Vaikimisi väärus on väär.
  check_decodable: false
# decrypt.provable Valikuline korrektse dekrüpteerimise tõestuse väljastamine. Vaikimisi väärtus on tõene.
  provable: false
  out: DEMO_decout_false


================================================
FILE: Documentation/et/example-config/DEMO_key.decrypt_t/DEMO_key.decrypt_t.yaml
================================================
util:
  listreaders: true

testkey:
    identifier: DEMO
    out: initout
    threshold: 5
    parties: 9
# Kaartidele automaatne terminalide määramine. Vaikimise väärtus on tõene.
    fastmode: true

decrypt:
# Valimise unikaalne identifikaator.
  identifier: DEMO
# Küsimuste arv anonüümistatud e-valimiskastis. Vaikimisi väärtus on 1.
  questioncount: 1
  protocol:
    recover:
      threshold: 5
      parties: 9
# decrypt.anonballotbox Töötlemisrakenduse või miksimisrakenduse poolt loodud e-valimiskast anonüümistatud häältega.
  anonballotbox: DEMO_shuffled.json
  anonballotbox_checksum: DEMO_shuffled.json.sha256sum.bdoc
  candidates: DEMO_valikud.bdoc
  districts: DEMO_jaoskonnad.bdoc
# Krüptogrammide korrektsuse kontrollimine enne dekrüpteerimist. Juhul kui krüptogrammide sisend ei tule usaldatud allikast, siis tuleb kontrollida krüptogrammide korrektsust.
# Usaldatud allikad on töötlemisrakendus ning miksija. Vaikimisi väärus on väär.
  check_decodable: false
# decrypt.provable Valikuline korrektse dekrüpteerimise tõestuse väljastamine. Vaikimisi väärtus on tõene.
  provable: true
  out: DEMO_decout_true


================================================
FILE: Documentation/et/example-config/DEMO_key.groupgen/key.groupgen.yaml
================================================
groupgen:
 paramtype: mod
 length: 3072
 init_template: key.init.template.yaml
 random_source:
   - random_source_type: system
#  - random_source_type: file
#    random_source_path: randomness_file
#  - random_source_type: DPRNG
#    random_source_path: seed_file
#  - random_source_type: stream
#    random_source_path: /dev/urandom
   - random_source_type: user
     random_source_path: server.exe


================================================
FILE: Documentation/et/example-config/DEMO_key.init/key.init.yaml
================================================
init:
  identifier: DEMO
  paramtype:
    mod:
      p: 5809605995369958062791915965639201402176612226902900533702900882779736177890990861472094774477339581147373410185646378328043729800750470098210924487866935059164371588168047540943981644516632755067501626434556398193186628990071248660819361205119793693985433297036118232914410171876807536457391277857011849897410207519105333355801121109356897459426271845471397952675959440793493071628394122780510124618488232602464649876850458861245784240929258426287699705312584509625419513463605155428017165714465363094021609290561084025893662561222573202082865797821865270991145082200656978177192827024538990239969175546190770645685893438011714430426409338676314743571154537142031573004276428701433036381801705308659830751190352946025482059931306571004727362479688415574702596946457770284148435989129632853918392117997472632693078113129886487399347796982772784615865232621289656944284216824611318709764535152507354116344703769998514148343807
      g: 2
  out: initout
  skiptest: true
  fastmode: true
  signaturekeylen: 2048
  signcn: SIGNATURE-DEMO
  signsn: 1
  enccn: ENCRYPTION-DEMO
  encsn: 2
  required_randomness: 128
  random_source:
#  - random_source_type: file
#    random_source_path: randomness_file
  - random_source_type: system
#  - random_source_type: DPRNG
#    random_source_path: seed_file
#  - random_source_type: stream
#    random_source_path: /dev/urandom
  - random_source_type: user
    random_source_path: server.exe

  genprotocol:
    desmedt:
      threshold: 5
      parties: 9

util:
  listreaders: true

testkey:
  out: initout
  threshold: 5
  parties: 9


================================================
FILE: Documentation/et/example-config/DEMO_processor_TS/DEMO_processor_TS.yaml
================================================
# check         - I etapp: e-valimiskasti tervikluse kontroll ja e-hääletanute nimekirja väljastamine
check:
# Hääled - tulevad Kogujalt ehk RIA-st ************ KONTROLLI FAILI NIME **************
  ballotbox: DEMO_votes.zip
  ballotbox_checksum: DEMO_votes.zip.sha256sum.bdoc

# ajatemplid, tulevad SK-st ************ KONTROLLI FAILI NIME **************
# Registreerimisteenusest pärit registreerimisandmed.
# Kui määramata, siis ei kontrollita e-valimiskastis sisalduvate häälte vastavust registreerimisandmetega.
  registrationlist: exporter_output_20181221.zip
  registrationlist_checksum: exporter_output_20181221.zip.sha256sum.bdoc

# tskey annab RIA (registreerimispäringute tegemise sert)
  tskey: DEMO_tskey.pem

# Kahtlane, kas on vajalik kui nimekirju pole.
  districts: DEMO_jaoskonnad.bdoc
#  DEMO puhul valijate nimekirju pole
  vlkey: DEMO_valijate_nimekiri.pem
  voterlists:
    -  path: DEMO_valijate_nimekiri.txt
       signature: DEMO_valijate_nimekiri.txt.signature
# check.districts_mapping Valijate nimekirjas oleva ringkonna ja jaoskonna
# teisendusfail (valikuline). csv
  election_start: 2018-12-17T09:00:00+02:00
  out: DEMO_out-1

#  squash        - II etapp: korduvate e-häälte tühistamine
squash:
  ballotbox: DEMO_out-1/DEMO-bb-1.json
  ballotbox_checksum: DEMO_out-1/DEMO-bb-1.json.sha256sum.bdoc
  districts: DEMO_jaoskonnad.bdoc
  # Tühistus- ja ennistusnimekirjade loend. Võib olla tühi.
  # revocationlists:
  out: DEMO_out-2

#  revoke        - III etapp: topelthääletanute häälte tühistamine (tühistus- ja ennistusnimekirjade rakendamine) ja lugemisele minevate e-hääletanute nimekirja väljastamine

revoke:
  ballotbox: DEMO_out-2/DEMO-bb-2.json
  ballotbox_checksum: DEMO_out-2/DEMO-bb-2.json.sha256sum.bdoc
  districts: DEMO_jaoskonnad.bdoc
  revocationlists:
#   - DEMO_tuhistusnimekiri.bdoc
  out: DEMO_out-3

#  anonymize     - IV etapp: e-häälte anonüümistamine

anonymize:
  ballotbox: DEMO_out-3/DEMO-bb-3.json
  ballotbox_checksum: DEMO_out-3/DEMO-bb-3.json.sha256sum.bdoc
  enckey: DEMO_pub.pem
  out: DEMO_out-4

#  verify        - Abifunktsioon: allkirjastatud konteineri verifitseerimine
verify:
  file: processor.yaml.bdoc

#  export        - Valimissedelite allkirjastatud konteinerite eksportimine
export:
  ballotbox: DEMO_votes.zip
  ballotbox_checksum: DEMO_votes.zip.sha256sum.bdoc
  out: DEMO_fullvotes

#  stats         - E-valimiskasti statistika genereerimine
stats:
  ballotbox: DEMO_votes.zip
  #election_day Valimispäev. Kõikide e-hääletanute vanused arvutatakse statistika tarbeks selle kuupäeva suhtes.
  election_day: 2018-12-24
  #Statistikaperioodi algusaeg (valikuline). Sellest varasema hääletusajaga hääli statistikasse ei kaasata.
  period_start: 2018-12-17T09:00:00+02:00
  #Statistikaperioodi lõppaeg (valikuline). Sellest hilisema hääletusajaga hääli statistikasse ei kaasata.
#  period_end: 2018-12-20T18:00:00+02:00
# POLE VAJALIKUD kui valijate nimekirja pole
  districts: DEMO_jaoskonnad.bdoc
  vlkey: DEMO_valijate_nimekiri.pem
  voterlists:
    -  path: DEMO_valijate_nimekiri.txt
       signature: DEMO_valijate_nimekiri.txt.signature
  out: DEMO_stats

#  statsdiff     - E-valimiskasti statistika võrdlemine
statsdiff:
#Statistika võrdluse alusfail JSON-vormingus.
  compare: DEMO_stats/DEMO-stats.json
#Võrreldav statistika fail JSON-vormingus.
  to: misaganes.json
#Tööriista väljundfail. Sellesse faili salvestatakse statistikate vahe JSON-vormingus.
  diff: stats_versus_misiganes.json


================================================
FILE: Documentation/et/example-config/DEMO_technical/ca.pem
================================================
-----BEGIN CERTIFICATE-----
MIIDcDCCAligAwIBAgIJANLdelAg8Qa9MA0GCSqGSIb3DQEBCwUAMEwxCzAJBgNV
BAYTAkVFMQwwCgYDVQQKDANSSUExGjAYBgNVBAsMEUlWWFYgQ2VydGlmaWNhdGVz
MRMwEQYDVQQDDApTZXJ2aWNlIENBMCAXDTE4MTIwNjEyMDYwMVoYDzIxMTgxMTEy
MTIwNjAxWjBMMQswCQYDVQQGEwJFRTEMMAoGA1UECgwDUklBMRowGAYDVQQLDBFJ
VlhWIENlcnRpZmljYXRlczETMBEGA1UEAwwKU2VydmljZSBDQTCCASIwDQYJKoZI
hvcNAQEBBQADggEPADCCAQoCggEBAO0TzgHFg3Ka1xWV2mFCOf7EwNLuyZ2HW0yC
+85twpJh0FZxyg+aqyIX6u2zUVUfco+d6EeMkyaWMmwL/vD2/aTBa2pMKlKzWXnM
IVpoowtvNvFG3E9i+FDLDh8VerRRrBpb61IBmDDG/GwQosPLCe3Nd/Lfj3AYYmCO
msw3wV+bzvrEdAvhBwOvnZLLmiQsaF2fX2txPGi2tcmleVLlAPtCfLVNts91mAyf
qk0Z/5RsNudPOuMxFffp1Qyw3V1LkK80Eh5gRdTiptd5KeIbf+TuhKrLlSBRu394
+Wp6kLioo6hjccOFpaYizEy1zZG4JYiCTyC2ViGZ2hhbZ63pDFcCAwEAAaNTMFEw
HQYDVR0OBBYEFETA+enwqYHW9VgmSlY5ZY7BmiE/MB8GA1UdIwQYMBaAFETA+enw
qYHW9VgmSlY5ZY7BmiE/MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQAD
ggEBAJAqwsvprdjIfoamXx6HjPioVko5UIWqy0X6Q8Cy92IGv7BjEmEvTM0I8BGq
KCQAZO+t3BddmngIZeZD/Re4QUZtHnzoJni+42NhN7Sm9Xc7hkJkqhs0qyJqLuqG
SIxrQMV+fb3faJFqvqGKEsdRJL6OTd3ovKQNnZjBy8MkyoPLzeQwZHCAg0ZjU2on
st23dPvhKDNZoZpZ5XX47mcGe+L0JHb9zTARwhuy4x/cwwzAMy0lVhxyFKVQ0bjK
sNyXXvDAkerkeBxdXzXYJzEBxse7+DFKt6y3s28RBJK26TFXru6M7SkioCpen2lM
OLq/43IJmvzMjtUNQbt6a0dXysc=
-----END CERTIFICATE-----


================================================
FILE: Documentation/et/example-config/DEMO_technical/technical.yaml
================================================
debug: true

snidomain: inttest.ivxv.ee

filter:
  tls:
    handshaketimeout: 20
    ciphersuites:
      - TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
      - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
      # Vanemate nutiseadmete tugi.
      - TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
      - TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
  codec:
    rwtimeout: 10
    requestsize: 16384  # 16 KiB
    logrequests: true

network:
  - id: zone1
    services:
      proxy:
        - id:          proxy@proxy1.ivxv.ee
          address:     ivxv-rp1:443
      mid:
        - id:          mid@mid1.ivxv.ee
          address:     ivxv1:4441
      choices:
        - id:          choices@choices1.ivxv.ee
          address:     ivxv1:4442
      voting:
        - id:          voting@voting1.ivxv.ee
          address:     ivxv1:4443
      verification:
        - id:          verification@verification1.ivxv.ee
          address:     ivxv1:4444
      storage:
        - id:          storage@storage1.ivxv.ee
          address:     ivxv1:2379
          peeraddress: ivxv1:2380
  - id: zone2
    services:
      proxy:
        - id:          proxy@proxy2.ivxv.ee
          address:     ivxv-rp2:443
      mid:
        - id:          mid@mid2.ivxv.ee
          address:     ivxv2:4441
      choices:
        - id:          choices@choices2.ivxv.ee
          address:     ivxv2:4442
      voting:
        - id:          voting@voting2.ivxv.ee
          address:     ivxv2:4443
      verification:
        - id:          verification@verification2.ivxv.ee
          address:     ivxv2:4444
      storage:
        - id:          storage@storage2.ivxv.ee
          address:     ivxv2:2379
          peeraddress: ivxv2:2380
  - id: zone3
    services:
      proxy:
        - id:          proxy@proxy3.ivxv.ee
          address:     ivxv-rp3:443
      mid:
        - id:          mid@mid3.ivxv.ee
          address:     ivxv3:4441
      choices:
        - id:          choices@choices3.ivxv.ee
          address:     ivxv3:4442
      voting:
        - id:          voting@voting3.ivxv.ee
          address:     ivxv3:4443
      verification:
        - id:          verification@verification3.ivxv.ee
          address:     ivxv3:4444
      storage:
        - id:          storage@storage3.ivxv.ee
          address:     ivxv3:2379
          peeraddress: ivxv3:2380
  - id: zone4
    services:
      log:
        - id:          log@log1.ivxv.ee
          address:     log1:20514
      backup:
        - id:          backup@backup.ivxv.ee
          address:     backup

logging:
  - address: logmon
    port: 20514


storage:
  protocol: etcd
  conf:
    ca: !container ca.pem
    conntimeout: 5
    optimeout: 10
    size: 16777216 # bytes
    bootstrap:
      - storage@storage1.ivxv.ee
      - storage@storage2.ivxv.ee
      - storage@storage3.ivxv.ee
backup: ["03:00", "09:00", "15:00", "21:00"]


================================================
FILE: Documentation/et/example-config/DEMO_trust/DEMO.trust.yaml
================================================
# Usaldusjuure seadistus DEMO
container:
  bdoc:
    filecount: 50
    bdocsize: 104857600  # 100 MiB
    filesize: 104857600  # 100 MiB
    roots:
      - !container EE_Certification_Centre_Root_CA.pem.crt
      - !container EE-GovCA2018.pem.crt
    intermediates:
      - !container ESTEID-SK_2015.pem.crt
      - !container esteid2018.pem.crt
    profile: TS
    tsp:
      signers:
        - !container SK_TIMESTAMPING_AUTHORITY.pem.cer
      delaytime: 10
    tsdelaytime: 60
authorizations:
    - M,T,3
    - L,I,3
    - M,L,3


================================================
FILE: Documentation/et/example-config/DEMO_trust/EE-GovCA2018.pem.crt
================================================
-----BEGIN CERTIFICATE-----
MIIE+DCCBFmgAwIBAgIQMLOwlXoR0oFbj52nmRsnezAKBggqhkjOPQQDBDBaMQsw
CQYDVQQGEwJFRTEbMBkGA1UECgwSU0sgSUQgU29sdXRpb25zIEFTMRcwFQYDVQRh
DA5OVFJFRS0xMDc0NzAxMzEVMBMGA1UEAwwMRUUtR292Q0EyMDE4MB4XDTE4MDkw
NTA5MTEwM1oXDTMzMDkwNTA5MTEwM1owWjELMAkGA1UEBhMCRUUxGzAZBgNVBAoM
ElNLIElEIFNvbHV0aW9ucyBBUzEXMBUGA1UEYQwOTlRSRUUtMTA3NDcwMTMxFTAT
BgNVBAMMDEVFLUdvdkNBMjAxODCBmzAQBgcqhkjOPQIBBgUrgQQAIwOBhgAEAMcb
/dmAcVo/b2azEPS6CfW7fEA2KuHKC53D7ShVNvLz4QUjCdTXjds/4u99jUoYEQec
luVVzMlgEJR1nkN2eOrLAZYxPjwG5HiI1iZEyW9QKVdeEgyvhzWWTNHGjV3HdZRv
7L9o4533PtJAyqJq9OTs6mjsqwFXjH49bfZ6CGmzUJsHo4ICvDCCArgwEgYDVR0T
AQH/BAgwBgEB/wIBATAOBgNVHQ8BAf8EBAMCAQYwNAYDVR0lAQH/BCowKAYIKwYB
BQUHAwkGCCsGAQUFBwMCBggrBgEFBQcDBAYIKwYBBQUHAwEwHQYDVR0OBBYEFH4p
Vuc0knhOd+FvLjMqmHHB/TSfMB8GA1UdIwQYMBaAFH4pVuc0knhOd+FvLjMqmHHB
/TSfMIICAAYDVR0gBIIB9zCCAfMwCAYGBACPegECMAkGBwQAi+xAAQIwMgYLKwYB
BAGDkSEBAQEwIzAhBggrBgEFBQcCARYVaHR0cHM6Ly93d3cuc2suZWUvQ1BTMA0G
CysGAQQBg5EhAQECMA0GCysGAQQBg5F/AQEBMA0GCysGAQQBg5EhAQEFMA0GCysG
AQQBg5EhAQEGMA0GCysGAQQBg5EhAQEHMA0GCysGAQQBg5EhAQEDMA0GCysGAQQB
g5EhAQEEMA0GCysGAQQBg5EhAQEIMA0GCysGAQQBg5EhAQEJMA0GCysGAQQBg5Eh
AQEKMA0GCysGAQQBg5EhAQELMA0GCysGAQQBg5EhAQEMMA0GCysGAQQBg5EhAQEN
MA0GCysGAQQBg5EhAQEOMA0GCysGAQQBg5EhAQEPMA0GCysGAQQBg5EhAQEQMA0G
CysGAQQBg5EhAQERMA0GCysGAQQBg5EhAQESMA0GCysGAQQBg5EhAQETMA0GCysG
AQQBg5EhAQEUMA0GCysGAQQBg5F/AQECMA0GCysGAQQBg5F/AQEDMA0GCysGAQQB
g5F/AQEEMA0GCysGAQQBg5F/AQEFMA0GCysGAQQBg5F/AQEGMDEGCisGAQQBg5Eh
CgEwIzAhBggrBgEFBQcCARYVaHR0cHM6Ly93d3cuc2suZWUvQ1BTMBgGCCsGAQUF
BwEDBAwwCjAIBgYEAI5GAQEwCgYIKoZIzj0EAwQDgYwAMIGIAkIBk698EqetY9Tt
6HwO50CfzdIIjKmlfCI34xKdU7J+wz1tNVu2tHJwEhdsH0e92i969sRDp1RNPlVh
4XFJzI3oQFQCQgGVxmcuVnsy7NUscDZ0erwovmbFOsNxELCANxNSWx5xMqzEIhV8
46opxu10UFDIBBPzkbBenL4h+g/WU7lG78fIhA==
-----END CERTIFICATE-----


================================================
FILE: Documentation/et/example-config/DEMO_trust/EE_Certification_Centre_Root_CA.pem.crt
================================================
-----BEGIN CERTIFICATE-----
MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1
MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1
czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG
CSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIwMTAxMDMwMTAxMDMwWhgPMjAzMDEy
MTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNl
ZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBS
b290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEB
AQUAA4IBDwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUy
euuOF0+W2Ap7kaJjbMeMTC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvO
bntl8jixwKIy72KyaOBhU8E2lf/slLo2rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIw
WFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw93X2PaRka9ZP585ArQ/d
MtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtNP2MbRMNE
1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYD
VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/
zQas8fElyalL1BSZMEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYB
BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEF
BQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+RjxY6hUFaTlrg4wCQiZrxTFGGV
v9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqMlIpPnTX/dqQG
E5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u
uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIW
iAYLtqZLICjU3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/v
GVCJYMzpJJUPwssd8m92kMfMdcGWxZ0=
-----END CERTIFICATE-----


================================================
FILE: Documentation/et/example-config/DEMO_trust/ESTEID-SK_2015.pem.crt
================================================
-----BEGIN CERTIFICATE-----
MIIGcDCCBVigAwIBAgIQRUgJC4ec7yFWcqzT3mwbWzANBgkqhkiG9w0BAQwFADB1
MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1
czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG
CSqGSIb3DQEJARYJcGtpQHNrLmVlMCAXDTE1MTIxNzEyMzg0M1oYDzIwMzAxMjE3
MjM1OTU5WjBjMQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVy
aW1pc2tlc2t1czEXMBUGA1UEYQwOTlRSRUUtMTA3NDcwMTMxFzAVBgNVBAMMDkVT
VEVJRC1TSyAyMDE1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0oH6
1NDxbdW9k8nLA1qGaL4B7vydod2Ewp/STBZB3wEtIJCLdkpEsS8pXfFiRqwDVsgG
Gbu+Q99trlb5LI7yi7rIkRov5NftBdSNPSU5rAhYPQhvZZQgOwRaHa5Ey+BaLJHm
LqYQS9hQvQsCYyws+xVvNFUpK0pGD64iycqdMuBl/nWq3fLuZppwBh0VFltm4nhr
/1S0R9TRJpqFUGbGr4OK/DwebQ5PjhdS40gCUNwmC7fPQ4vIH+x+TCk2aG+u3MoA
z0IrpVWqiwzG/vxreuPPAkgXeFCeYf6fXLsGz4WivsZFbph2pMjELu6sltlBXfAG
3fGv43t91VXicyzR/eT5dsB+zFsW1sHV+1ONPr+qzgDxCH2cmuqoZNfIIq+buob3
eA8ee+XpJKJQr+1qGrmhggjvAhc7m6cU4x/QfxwRYhIVNhJf+sKVThkQhbJ9XxuK
k3c18wymwL1mpDD0PIGJqlssMeiuJ4IzagFbgESGNDUd4icm0hQT8CmQeUm1GbWe
BYseqPhMQX97QFBLXJLVy2SCyoAz7Bq1qA43++EcibN+yBc1nQs2Zoq8ck9MK0bC
xDMeUkQUz6VeQGp69ImOQrsw46qTz0mtdQrMSbnkXCuLan5dPm284J9HmaqiYi6j
6KLcZ2NkUnDQFesBVlMEm+fHa2iR6lnAFYZ06UECAwEAAaOCAgowggIGMB8GA1Ud
IwQYMBaAFBLyWj7qVhy/zQas8fElyalL1BSZMB0GA1UdDgQWBBSzq4i8mdVipIUq
CM20HXI7g3JHUTAOBgNVHQ8BAf8EBAMCAQYwdwYDVR0gBHAwbjAIBgYEAI96AQIw
CQYHBACL7EABAjAwBgkrBgEEAc4fAQEwIzAhBggrBgEFBQcCARYVaHR0cHM6Ly93
d3cuc2suZWUvQ1BTMAsGCSsGAQQBzh8BAjALBgkrBgEEAc4fAQMwCwYJKwYBBAHO
HwEEMBIGA1UdEwEB/wQIMAYBAf8CAQAwQQYDVR0eBDowOKE2MASCAiIiMAqHCAAA
AAAAAAAAMCKHIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCcGA1Ud
JQQgMB4GCCsGAQUFBwMJBggrBgEFBQcDAgYIKwYBBQUHAwQwfAYIKwYBBQUHAQEE
cDBuMCAGCCsGAQUFBzABhhRodHRwOi8vb2NzcC5zay5lZS9DQTBKBggrBgEFBQcw
AoY+aHR0cDovL3d3dy5zay5lZS9jZXJ0cy9FRV9DZXJ0aWZpY2F0aW9uX0NlbnRy
ZV9Sb290X0NBLmRlci5jcnQwPQYDVR0fBDYwNDAyoDCgLoYsaHR0cDovL3d3dy5z
ay5lZS9yZXBvc2l0b3J5L2NybHMvZWVjY3JjYS5jcmwwDQYJKoZIhvcNAQEMBQAD
ggEBAHRWDGI3P00r2sOnlvLHKk9eE7X93eT+4e5TeaQsOpE5zQRUTtshxN8Bnx2T
oQ9rgi18q+MwXm2f0mrGakYYG0bix7ZgDQvCMD/kuRYmwLGdfsTXwh8KuL6uSHF+
U/ZTss6qG7mxCHG9YvebkN5Yj/rYRvZ9/uJ9rieByxw4wo7b19p22PXkAkXP5y3+
qK/Oet98lqwI97kJhiS2zxFYRk+dXbazmoVHnozYKmsZaSUvoYNNH19tpS7BLdsg
i9KpbvQLb5ywIMq9ut3+b2Xvzq8yzmHMFtLIJ6Afu1jJpqD82BUAFcvi5vhnP8M7
b974R18WCOpgNQvXDI+2/8ZINeU=
-----END CERTIFICATE-----


================================================
FILE: Documentation/et/example-config/DEMO_trust/SK_OCSP_RESPONDER_2011.pem.cer
================================================
-----BEGIN CERTIFICATE-----
MIIEvDCCA6SgAwIBAgIQcpyVmdruRVxNgzI3N/NZQTANBgkqhkiG9w0BAQUFADB1
MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1
czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG
CSqGSIb3DQEJARYJcGtpQHNrLmVlMB4XDTExMDMxODEwMjE0M1oXDTI0MDMxODEw
MjE0M1owgZ0xCzAJBgNVBAYTAkVFMQ4wDAYDVQQIEwVIYXJqdTEQMA4GA1UEBxMH
VGFsbGlubjEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czENMAsG
A1UECxMET0NTUDEfMB0GA1UEAxMWU0sgT0NTUCBSRVNQT05ERVIgMjAxMTEYMBYG
CSqGSIb3DQEJARYJcGtpQHNrLmVlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
CgKCAQEAihvGyhMVrgReHluKln1za6gvCE/mlSREmWjJFpL9llvuEUZoPFIypYA8
g5u1VfgkeW5gDq25jAOq4FyXeDGIa+pJn2h0o2Wc2aeppVG/emfGm/jA8jjeyMrw
H8fAJrqVQ7c9X2xSwJEch/P2d8CfMZt5YF6gqLtPvG1b+n6otBZA5wjIFfJ/inJB
MUvqHSz3+PLfxO2/T3Wyk/c8M9HIMqTelqyiMGRgWehiU1OsL9armv3dQrHs1wm6
vHaxfpfWB9YAFpeo9aYqhPCxVt/zo2NQB6vxyZS0hsOrXL7SxRToOJaqsnvlbf0e
rPPFtRHUvbojYYgl+fzlz0Jt6QJoNwIDAQABo4IBHTCCARkwEwYDVR0lBAwwCgYI
KwYBBQUHAwkwHQYDVR0OBBYEFKWhSGFt537NmJ50nCm7vYrecgxZMIGCBgNVHSAE
ezB5MHcGCisGAQQBzh8EAQIwaTA+BggrBgEFBQcCAjAyHjAAUwBLACAAdABpAG0A
ZQAgAHMAdABhAG0AcABpAG4AZwAgAHAAbwBsAGkAYwB5AC4wJwYIKwYBBQUHAgEW
G2h0dHBzOi8vd3d3LnNrLmVlL2FqYXRlbXBlbDAfBgNVHSMEGDAWgBQS8lo+6lYc
v80GrPHxJcmpS9QUmTA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vd3d3LnNrLmVl
L3JlcG9zaXRvcnkvY3Jscy9lZWNjcmNhLmNybDANBgkqhkiG9w0BAQUFAAOCAQEA
w2sKwvTHtYGtD8Jw9mNUuj/mWiBSBEBeY2LhW8V6tjBPAPp3s6iWOh0FbVR2LUyr
qRwgT3fyWiGsiDm/6cIqM+IblLp/8ztfRQjquhW6XCD9SK02OQ9ZSdBwcmoAApZL
GXQC34wdgmV/hLTTNxONnDACBKz9U+Dy9a4ZT4tpNkbH8jq/BMne8FzbvRt1bjpX
BP7gjLX+zdx8/hp0Wq4tD+f9NVX0+vm9ahEKuzx4QzPnSB7hhWM9OnLZT7noRQa+
KWk5c+e5VoR5R2t7MjVl8Cd+2llxiSxqMSbU5/23BzAKgN+NQdrBZAzpZ7lfaAuL
FaICP+bAm6uW2JUrM6abOw==
-----END CERTIFICATE-----


================================================
FILE: Documentation/et/example-config/DEMO_trust/SK_TIMESTAMPING_AUTHORITY.pem.cer
================================================
-----BEGIN CERTIFICATE-----
MIIEDTCCAvWgAwIBAgIQJK/s6xJo0AJUF/eG7W8BWTANBgkqhkiG9w0BAQsFADB1
MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1
czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG
CSqGSIb3DQEJARYJcGtpQHNrLmVlMB4XDTE0MDkxNjA4NDAzOFoXDTE5MDkxNjA4
NDAzOFowYzELMAkGA1UEBhMCRUUxIjAgBgNVBAoMGUFTIFNlcnRpZml0c2Vlcmlt
aXNrZXNrdXMxDDAKBgNVBAsMA1RTQTEiMCAGA1UEAwwZU0sgVElNRVNUQU1QSU5H
IEFVVEhPUklUWTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJPa/dQK
emSKCNSwlMUp9YKQY6zQOfs9vgUnbzTRHCRBRdsabZYknxTI4DqQ5+JPqw8MTkDv
b6nfDZGd15t4oY4tHXXoCfRrbMjJ9+DV+M7bd+vrBI8vi7DBCM59/VAjxBAuZ9P7
Tsg8o8BrVqqB9c0ezlSCtFg8X0x2ET3ZBtZ49UARh/XP07I7eRk/DtSLYauxJDPz
XVEZmSJCIybclox93u8F5/o8GySbD5GYMhffOJgXmul/Vz7eR0d5SxCMvJIRrP7W
fiJYaUjLYqL2wjFQe/nUltcGCn2KtqGCyH7vl+Xzefea6Xjc8ebTgan2FJ0UH0mH
v98lWADKuTI2fXcCAwEAAaOBqjCBpzAOBgNVHQ8BAf8EBAMCBsAwFgYDVR0lAQH/
BAwwCgYIKwYBBQUHAwgwHQYDVR0OBBYEFLGwvffmoGkWbCDlUftc9DBic1cnMB8G
A1UdIwQYMBaAFBLyWj7qVhy/zQas8fElyalL1BSZMD0GA1UdHwQ2MDQwMqAwoC6G
LGh0dHA6Ly93d3cuc2suZWUvcmVwb3NpdG9yeS9jcmxzL2VlY2NyY2EuY3JsMA0G
CSqGSIb3DQEBCwUAA4IBAQCopcU932wVPD6eed+sDBht4zt+kMPPFXv1pIX0Rgbi
zaKvHWU4oHpRH8zcgo/gpotRLlLhZbHtu94pLFN6enpiyHNwevkmUyvrBWylONR1
Yhwb4dLS8pBGGFR6eRdhGzoKAUF4B4dIoXOj4p26q1yYULF5ZkZHxhQFNi5uxak9
tgCFlGtzXumjL5jBmtWeDTGE4YSa34pzDXjz8VAjPJ9sVuOmK2E0gyWxUTLXF9Ye
vrWzRLzVFqw+qewBV2I4of/6miZOOT2wlA/meL7zr3hnfo7KSJQmMNUjZ6lh6RBI
VvYI0t+A/fpTKiZfviz/Xn2e4PC6i57wmH5EgOOav0UK
-----END CERTIFICATE-----


================================================
FILE: Documentation/et/example-config/DEMO_trust/esteid2018.pem.crt
================================================
-----BEGIN CERTIFICATE-----
MIIFVzCCBLigAwIBAgIQdUf6rBR0S4tbo2bU/mZV7TAKBggqhkjOPQQDBDBaMQsw
CQYDVQQGEwJFRTEbMBkGA1UECgwSU0sgSUQgU29sdXRpb25zIEFTMRcwFQYDVQRh
DA5OVFJFRS0xMDc0NzAxMzEVMBMGA1UEAwwMRUUtR292Q0EyMDE4MB4XDTE4MDky
MDA5MjIyOFoXDTMzMDkwNTA5MTEwM1owWDELMAkGA1UEBhMCRUUxGzAZBgNVBAoM
ElNLIElEIFNvbHV0aW9ucyBBUzEXMBUGA1UEYQwOTlRSRUUtMTA3NDcwMTMxEzAR
BgNVBAMMCkVTVEVJRDIwMTgwgZswEAYHKoZIzj0CAQYFK4EEACMDgYYABAHHOBlv
7UrRPYP1yHhOb7RA/YBDbtgynSVMqYdxnFrKHUXh6tFkghvHuA1k2DSom1hE5kqh
B5VspDembwWDJBOQWQGOI/0t3EtccLYjeM7F9xOPdzUbZaIbpNRHpQgVBpFX0xpL
TgW27MpIMhU8DHBWFpeAaNX3eUpD4gC5cvhsK0RFEqOCAx0wggMZMB8GA1UdIwQY
MBaAFH4pVuc0knhOd+FvLjMqmHHB/TSfMB0GA1UdDgQWBBTZrHDbX36+lPig5L5H
otA0rZoqEjAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADCCAc0G
A1UdIASCAcQwggHAMAgGBgQAj3oBAjAJBgcEAIvsQAECMDIGCysGAQQBg5EhAQEB
MCMwIQYIKwYBBQUHAgEWFWh0dHBzOi8vd3d3LnNrLmVlL0NQUzANBgsrBgEEAYOR
IQEBAjANBgsrBgEEAYORfwEBATANBgsrBgEEAYORIQEBBTANBgsrBgEEAYORIQEB
BjANBgsrBgEEAYORIQEBBzANBgsrBgEEAYORIQEBAzANBgsrBgEEAYORIQEBBDAN
BgsrBgEEAYORIQEBCDANBgsrBgEEAYORIQEBCTANBgsrBgEEAYORIQEBCjANBgsr
BgEEAYORIQEBCzANBgsrBgEEAYORIQEBDDANBgsrBgEEAYORIQEBDTANBgsrBgEE
AYORIQEBDjANBgsrBgEEAYORIQEBDzANBgsrBgEEAYORIQEBEDANBgsrBgEEAYOR
IQEBETANBgsrBgEEAYORIQEBEjANBgsrBgEEAYORIQEBEzANBgsrBgEEAYORIQEB
FDANBgsrBgEEAYORfwEBAjANBgsrBgEEAYORfwEBAzANBgsrBgEEAYORfwEBBDAN
BgsrBgEEAYORfwEBBTANBgsrBgEEAYORfwEBBjAqBgNVHSUBAf8EIDAeBggrBgEF
BQcDCQYIKwYBBQUHAwIGCCsGAQUFBwMEMGoGCCsGAQUFBwEBBF4wXDApBggrBgEF
BQcwAYYdaHR0cDovL2FpYS5zay5lZS9lZS1nb3ZjYTIwMTgwLwYIKwYBBQUHMAKG
I2h0dHA6Ly9jLnNrLmVlL0VFLUdvdkNBMjAxOC5kZXIuY3J0MBgGCCsGAQUFBwED
BAwwCjAIBgYEAI5GAQEwMAYDVR0fBCkwJzAloCOgIYYfaHR0cDovL2Muc2suZWUv
RUUtR292Q0EyMDE4LmNybDAKBggqhkjOPQQDBAOBjAAwgYgCQgDeuUY4HczUbFKS
002HZ88gclgYdztHqglENyTMtXE6dMBRnCbgUmhBCAA0mJSHbyFJ8W9ikLiSyurm
kJM0hDE9KgJCASOqA405Ia5nKjTJPNsHQlMi7KZsIcTHOoBccx+54N8ZX1MgBozJ
mT59rZY/2/OeE163BAwD0UdUQAnMPP6+W3Vd
-----END CERTIFICATE-----


================================================
FILE: Documentation/et/haldusteenus/Makefile
================================================
include ../../common.mk


================================================
FILE: Documentation/et/haldusteenus/allalaadimised.rst
================================================
..  IVXV kogumisteenuse haldusliidese kasutusjuhend

.. _allalaadimised:

Väljavõtete allalaadimised
==========================

Väljavõtete allalaadimise leht avaneb menüüvalikust ``Allalaadimised``.


Hääletamise detailstatistika allalaadimine
------------------------------------------

Detailstatistika on JSON-vormingus ja see genereeritakse hääletamisteenuses.


Hääletamise seansside väljavõtte allalaadimine
----------------------------------------------

Hääletamise ja hääle kontrollimise seansside väljavõte on CSV-vormingus ja see
koostatakse logiseire teenuses.


E-valimiskasti allalaadimine
----------------------------

E-valimiskasti allalaadimise vormil on võimalik:

* Algatada e-valimiskasti koostamist;

* Koostatud e-valimiskaste alla laadida.

E-valimiskasti on võimalik koostada konsolideerimata ja konsolideeritud kujul.
Konsolideerimine on ressursinõudlik tegevus ja seda on vaja kasutada vaid
juhul, kui häälte kogumisel on esinenud probleeme talletusteenusega.

Enne hääletamisperioodi lõppu allalaaditav e-valimiskast on mõeldud varundamiseks,
pärast hääletusperioodi lõppu allalaaditud e-valimiskast on mõeldud häälte
kokkulugemiseks.

.. attention::

   E-valimiskasti koostamine võib olla aeganõudev tegevus! See sõltub kogutud häälte
   arvust, varundatud e-valimiskastide arvust, teenusmasinate riistvaralisest
   võimekusest, teenusmasinaid ühendava võrgu läbilaskevõimest ja süsteemi
   koormusest.


Töötlemisrakenduse sisendi aluse allalaadimine
----------------------------------------------

Töötlemisrakenduse sisendi alus on häälte töötlemiseks vajalike sisendfailide
komplekt ZIP-vormingus konteinerina ja see koostatakse haldusteenuses.


================================================
FILE: Documentation/et/haldusteenus/annotatsioon.rst
================================================
..  IVXV kogumisteenuse haldusliidese kasutusjuhend

Annotatsioon
------------

IVXV kogumisteenuse haldusteenuse
kasutajaliidese kasutusjuhend.

Käesolev juhend on mõeldud kogumisteenuse haldamisega tegelevatele kasutajatele
ning katab järgnevaid valdkondi:

* Kogumisteenusele seadistuste, nimekirjade ja volituste rakendamine;

* Kogumisteenuse seisundi jälgimine;

* Kogumisteenuse väljavõtete allalaadimine
  (e-valimiskast, hääletamise detailstatistika, hääletamisseansside nimekiri);

* Kogumisteenuse haldussündmuste logi jälgimine.


================================================
FILE: Documentation/et/haldusteenus/index.rst
================================================
..  IVXV kogumisteenuse haldusliidese kasutusjuhend

IVXV kogumisteenuse haldusliidese kasutusjuhend
=======================================================================================

.. raw:: html

   <p style="background-color: #f99; padding: 20px;">
     <strong>NB!</strong>
     See on HTML-versioon dokumendist.
     Tellijale antakse üle PDF-versioon.
   </p>


.. toctree::
   :maxdepth: 2

   annotatsioon
   ylevaade
   yldseisund
   nimekirjad
   statistika
   kasutajad
   teenused
   allalaadimised
   seadistused
   logi


================================================
FILE: Documentation/et/haldusteenus/kasutajad.rst
================================================
..  IVXV kogumisteenuse haldusliidese kasutusjuhend

Kasutajate haldus
=================

Kasutajate halduse leht avaneb menüüvalikust ``Kasutajad``.


Kasutajate nimekiri
-------------------

Kasutajate nimekirjas kuvatakse kõigi haldusteenuses registreeritud kasutajate
andmeid sordituna kasutaja ID-kaardi üldnime (CN - *Common Name*) järgi:

#. Järjekorranumber nimekirjas;

#. Üldnimi;

#. Kasutaja rollid.

Kasutaja volituste laadimise vorm
---------------------------------

Kasutaja volituste laadimiseks kogumisteenusesse on lehe allosas laadimisvorm.
Laadida on lubatud ainult volitatud kasutajate poolt digitaalselt signeeritud
volitusi.


================================================
FILE: Documentation/et/haldusteenus/logi.rst
================================================
..  IVXV kogumisteenuse haldusliidese kasutusjuhend

Haldussündmuste logi jälgimine
==============================

Kogumisteenuse sündmuste logi sirvimise leht avaneb menüüvalikust
``Logiraamat``.

Logis on järgmised väljad:

#. ``Aeg`` - sündmuse registreerimise aeg;

#. ``Teenus`` - teenuse identifikaator;

#. ``Tase`` - logisündmuse tase (``INFO`` või ``ERROR``);

#. ``Sündmus`` - sündmuse liigi identifikaator;

#. ``Kirjeldus`` - sündmuse tekstiline kirjeldus.

Logi on võimalik filtreerida ja välja väärtuse järgi sortida.

Logisündmused
-------------

Kogumisteenuse olekud:

:COLLECTOR_INIT:
   Kogumisteenuse lähtestamine (käsuga :command:`ivxv-collector-init`);

:COLLECTOR_RESET:
   Kogumisteenuse seadistuste lähtestamine (usaldusjuure laadimine);

:COLLECTOR_STATE_CHANGE:
   Kogumisteenuse olekumuutus;

Korralduste laadimine:

:CMD_LOAD:
   Korraldusfaili haldusteenusesse laadimine;

:CMD_LOADED:
   Edukalt laaditud korraldusfaili registreerimine haldusteenuses;

:CMD_REMOVED:
   Korraldusfaili eemaldamine haldusteenusest;

:VOTER_LIST_DOWNLOADED:
   Valijate muudatusnimekirja allalaadimine;

:VOTER_LIST_DOWNLOAD_FAILED:
   Valijate muudatusnimekirja nurjunud allalaadimine;

:VOTER_LIST_NOT_FOUND:
   Valijate järgmist muudatusnimekirja ei leitud Valimiste Infosüsteemis;

Kasutajaõiguste muutused:

:PERMISSION_SET:
   Kasutajale õiguse määramine;

:PERMISSION_RESET:
   Kasutaja õiguste lähtestamine;

Hääletusperioodi registreerimine:

:SET_ELECTION_TIME:
   Hääletusperioodi algus- ja lõpuaegade registreerimine;

Mikroteenuste haldus:

:SERVICE_REGISTER:
   Teenuse registreerimine haldusteenuses;

:SERVICE_CONFIG_APPLY:
   Seadistuse rakendamine teenusele;

:SERVICE_STATE_CHANGE:
   Teenuse olekumuutus;

:SECRET_INSTALL:
   Saladuse laadimine teenusele.


================================================
FILE: Documentation/et/haldusteenus/nimekirjad.rst
================================================
..  IVXV kogumisteenuse haldusliidese kasutusjuhend

Nimekirjade haldamine
=====================

Nimekirjade haldamise leht avaneb menüüvalikust ``Nimekirjad``.


Valikute nimekiri
-----------------

Valikute nimekirja kohta kuvatakse nimekirja seisundit ja laaditud nimekirja
korral selle versiooni (nimekirja signeerija andmed koos digiallkirja
ajatempliga).

Nimekirja võimalikud seisundid on:

#. Laadimata;

#. Laaditud haldusteenusesse;

#. Rakendatud kogumisteenusele.


Valijate nimekirjad
-------------------

Valijate nimekirjade kohta kuvatakse nimekirjade koguarvu, nimekirjade arvu
seisundi kaupa ning loetelu kõigi kogumisteenuses registreeritud nimekirjade
kohta (versioon ja seisund).

Valijate algnimekirja korral on nimekirja versioon nimekirja signeerija andmed
koos digiallkirja ajatempliga; muudatusnimekirja korral nimekirja allalaadimise
URL koos allalaadimise hetke ajatempliga.

Nimekirja võimalikud seisundid on:

#. Rakendamise ootel;

#. Rakendatud kogumisteenusele;

#. Vigane;

#. Vahele jäetud.


Ringkondade nimekiri
--------------------

Ringkondade nimekirja kohta kuvatakse nimekirja seisundit ja laaditud nimekirja
korral selle versiooni (nimekirja signeerija andmed koos digiallkirja
ajatempliga).

Nimekirja võimalikud seisundid on:

#. Laadimata;

#. Laaditud haldusteenusesse;

#. Rakendatud kogumisteenusele.


Nimekirjade laadimine kogumisteenusesse
---------------------------------------

Nimekirjade laadimiseks kogumisteenusesse on lehe allosas laadimisvorm. Laadida
on lubatud ainult volitatud kasutajate poolt digitaalselt signeeritud
nimekirju.

.. note::

   Nimekirjade laadimise järjekord ei ole oluline. Enne nimekirjade laadimist
   tuleb laadida valimiste seadistused.

.. important::

   Valikute nimekirja on võimalik kogumisteenusele rakendada ainult üks kord!


================================================
FILE: Documentation/et/haldusteenus/seadistused.rst
================================================
..  IVXV kogumisteenuse haldusliidese kasutusjuhend

Seadistuste rakendamise seisundid
=================================

Seadistuste seisundite jälgimise leht avaneb menüüvalikust ``Seadistused``.

Seisundit kuvatakse järgmiste seadistuste kohta:

* Usaldusjuure seadistused;

* Tehniline seadistus;

* Valimiste seadistus;

* Valikute nimekiri;

* Ringkondade nimekiri;

* Valijate nimekirjad.

Seisundit ei kuvata järgmiste seadistuste kohta:

* Kasutaja volitused (on laadimisel kohe rakendatud).

Haldusteenusesse laaditud seadistuste kohta kuvatakse:

* Seadistuse rakendamise seisundit;

* Aktiivse seadistuse versiooni;

* Seadistuste rakendamise katsete arvu;

* Rakendamisele saadetud seadistuse kohta ka rakendamise logi.


Seadistuste laadimine kogumisteenusesse
---------------------------------------

Tehnilise seadistuse ja valimiste seadistuste laadimiseks kogumisteenusesse on
lehe allosas laadimisvorm. Laadida on lubatud ainult volitatud kasutajate poolt
digitaalselt signeeritud seadistuspakke. Seadistuste laadimise järjekord ei ole
oluline. Valimiste seadistuse laadimine on eelduseks valimiste nimekirjade
laadimisele.

.. note::

   Usaldusjuure seadistuse laadib kogumisteenuse haldur käsurealt. Enne
   usaldusjuure laadimist pole kogumisteenuse haldusliidest võimalik kasutada.


================================================
FILE: Documentation/et/haldusteenus/spelling_wordlist.txt
================================================


================================================
FILE: Documentation/et/haldusteenus/statistika.rst
================================================
..  IVXV kogumisteenuse haldusliidese kasutusjuhend

Statistika jälgimine
====================

Statistika jälgimise leht avaneb menüüvalikust ``Statistika``.
Hääletamise detailstatistika allalaadimine on kirjeldatud lõigus
:ref:`allalaadimised`.


Statistika genereerimine
------------------------

Statistika vaates kuvatavad andmed genereeritakse ja uuendatakse korrapäraselt
logimonitoris ning laaditakse automaatselt haldusliidesesse.

Haldusliideses kuvatav statistika kajastab kogumisteenuse seisundit mõningase
viivitusega (harilikult kuni 10 minutit).


Statistika sisu
---------------

Kuvatavad andmed on järgmised:

#. Kogutud häälte arv;

#. Hääletajate arv;

#. Kontrollitud häälte arv;

#. Hääle kontrollijate arv;

#. Hääletajate jaotumine:

   #. Sugude kaupa;

   #. Vanusegruppide kaupa;

   #. Autentimisvahendite kaupa;

   #. Operatsioonisüsteemide kaupa;

   #. Riikide kaupa (vastavalt hääletaja IP-aadressile).

#. Korduvhääletamiste statistika.

Statistikat on võimalik filtreerida ringkondade ja jaoskondade kaupa (juhul,
kui ringkondade nimekiri on laaditud haldusteenusesse).


================================================
FILE: Documentation/et/haldusteenus/teenused.rst
================================================
..  IVXV kogumisteenuse haldusliidese kasutusjuhend

Teenuste haldus
===============

Teenuste haldamise leht avaneb menüüvalikust ``Teenused``.


Teenuste kokkuvõte
------------------

Teenuste kokkuvõttes kuvatakse kõikide registreeritud teenuste ülevaadet
seisundi kaupa. Iga seisundi järel kuvatakse selles seisundis olevate teenuste
arvu:

#. Paigaldamata – teenus pole paigaldatud;

#. Paigaldatud – teenus on paigaldatud ja sellele on rakendatud usaldusjuure
   seadistus, kogumisteenuse tehniline seadistus. Valimiste seadistus on
   teenusele rakendamata;

#. Seadistatud – teenusele on rakendatud kõik seadistused ja teenus on töökorras;

#. Tõrge – teenuse toimimises on avastatud tõrge;

#. Eemaldatud – teenuse on kogumisteenuse koosseisust eemaldatud.


Teenuste nimekiri
-----------------

Teenuste nimekirjas kuvatakse kõiki haldusteenuses registreeritud teenuseid.
Iga teenuse kohta kuvatakse:

Teenuste halduse vaates kuvatakse alamteenuste nimekirja, mis on sorditud
teenuse identifikaatori järgi:

#. Teenuse identifikaator;

#. Teenuse alamvõrk;

#. Teenuse liik;

#. Teenuse seisund;

Kui haldusteenus on alamteenuse kohta tuvastanud seadistuste puudumise või
veaolukorra, siis vastav teave kuvatakse teenuse all. Iga teenuse kohta
kuvatakse korraga vaid ühte teadet.

Nimekirjas teenuse kirjel klõpsates avaneb kirje all tabel täpsema infoga:

#. Teenuse korrasoleku kontrolli poolt tuvastatud järjestikune vigade arv
   (ainult teenustel, mis on olekus ``seadistatud`` või ``tõrge``);

#. Teenuse korrasoleku kontrolli viimase läbiviimise aeg
   (ainult teenustel, mis on olekus ``seadistatud`` või ``tõrge``);

#. Teenusele rakendadud tehnilise seadistuse versioon;

#. Teenusele rakendadud valimiste seadistuse versioon;

#. Teenuse IP-aadress ja port;

#. Teenuse TLS-sertifikaadi kontrollsumma (SHA256);

#. Teenuse TLS-sertifikaadile vastava võtme kontrollsumma (SHA256);

#. Mobiil-ID/Smart-ID/Web eID tugiteenuste jagatud krüptimissaladuse kontrollsumma
   (SHA256);


================================================
FILE: Documentation/et/haldusteenus/yldseisund.rst
================================================
..  IVXV kogumisteenuse haldusliidese kasutusjuhend

Üldseisund
==========

Üldseisundi leht avaneb menüüvalikust ``Üldseisund``.

Kogumisteenuse üldseisund
-------------------------

Kogumisteenuse üldseisundi vaates kuvatakse järgnevaid andmeid:

#. Valimiste identifikaator;

#. Kogumisteenuse seisund;

#. Käimasolev hääletusetapp;

#. Kogumisteenusele rakendatud seadistuste ja nimekirjade versioonid;

#. Mikroteenuste seisundite kokkuvõte;

#. Kogumisteenuse tarkvarapakkide seisund;

#. Kogumisteenuses registreeritud kasutajate arv;

#. Kogumisteenusesse laaditud korralduste arv.

Kogumisteenuse üldseisundi tuvastamiseks kogub haldusteenus korrapäraselt
alamteenustelt nende seisundi kohta andmeid ja peab selle üle arvestust.

.. note::

   Kogumisteenusesse laaditud korraldused jagunevad aktiivseteks ja
   arhiveeritud korraldusteks. Aktiivsed korraldused on hetkel teenusele
   rakendatud. Arhiveeritud korraldused on süsteemi laaditud, kuid pole
   rakendatud - näiteks uuema versiooniga asendatud korraldused.


================================================
FILE: Documentation/et/haldusteenus/ylevaade.rst
================================================
..  IVXV kogumisteenuse haldusliidese kasutusjuhend

Ülevaade
========

Haldusliidese funktsionaalsus
-----------------------------

Haldusliides on kogumisteenuse haldamise teenuse veebipõhine kasutajaliides ja
sellel on järgmised funktsioonid:

* Kogumisteenuse seisundi ja ajaloo kohta ülevaate esitamine:

   * Koondülevaade;

   * Teenuste seisund;

   * Valmisnimekirjade seisund;

   * Üldstatistika;

   * Kogumisteenuse haldussündmuste logi;

* Korralduste laadimine kogumisteenusesse;

* Kasutajate haldamine;

* Väljavõtete allalaadimine:

  * Hääletamise detailstatistika allalaadimine;

  * Hääletamisseansside nimekirja allalaadimine;

  * E-valimiskasti allalaadimine.


Ligipääse haldusliidesele
-------------------------

Kogumisteenuse haldusliides on kasutatav veebisirviku abil. Haldusliidesele
ligipääsuks vajaliku ``URL-i`` annab kasutajatele IVXV süsteemihaldur.

Haldusliidesele pääsevad ligi ainult volitatud kasutajad, kes on ennast
autentinud ID-kaardiga. Kasutajale pakutavate funktsioonide hulk sõltub
kasutaja volitustest.


Kasutajaliidese ülevaade
------------------------

Lehe ülaosas asub lehe päis, kus on kirjas haldusliidese nimi ja ikoon
sisselogitud kasutaja andmete vaatamiseks.

Lehe vasakus servas asub menüüriba, mille abil saab navigeerida alamlehtede vahel.

.. note::

   Kasutajaliides skaleerub ka madala resolutsiooniga ekraanidele, siis
   peidetakse menüüosa vaikimisi vaatest ja see on avatav lehe päisest.


Seadistuste, nimekirjade ja volituste koostamine ning laadimine
---------------------------------------------------------------

Kasutajaliides kaudu on võimalik süsteemi laadida kogumisteenuse seadistusi,
valikute- ja valijate nimekirju ning kasutajate volitusi.

Nende andmete peavad olema vormistatud digitaalselt signeeritud korraldusena.
Seadistuspakkide ettevalmistamine on kirjeldatud dokumendis ``IVXV seadistuste
koostamise juhend``.

Süsteemi laaditud seadistuspakke on võimalik alla laadida, kui klõpsata
kasutajaliideses seadistuspaki versiooniandmetel.


================================================
FILE: Documentation/et/kasutusmall/Makefile
================================================
include ../../common.mk


================================================
FILE: Documentation/et/kasutusmall/index.rst
================================================
..  IVXV kasutusmallid

IVXV kasutusmallid
==========================================================

.. raw:: html

   <p style="background-color: #f99; padding: 20px;">
     <strong>NB!</strong>
     See on HTML-versioon dokumendist.
     Tellijale antakse üle PDF-versioon.
   </p>

.. toctree::
   :maxdepth: 3
   :numbered:

   sissejuhatus
   tegijad
   kasutusmallid


================================================
FILE: Documentation/et/kasutusmall/kasutusmallid.rst
================================================
..  IVXV kasutusmallid

Kasutusmallid
=============

Hääletamiseelne etapp
---------------------

Korraldaja - Valimise defineerimine
```````````````````````````````````

Kirjeldus
'''''''''

Rangelt võttes ei ole tegemist elektroonilise hääletamise infosüsteemi kasutusmalliga, kuid see on elektroonilise hääletamise alguspunkt - Korraldaja kirjeldab valimise, küsimused, ringkonnad, valijad ning erinevate rollide täitjad e-hääletamise põhiprotsessides - Lugeja, Koguja, Töötleja jt.

Lugeja - Häälte salastamise ja avamise võtme genereerimine
``````````````````````````````````````````````````````````

Kirjeldus
'''''''''

Lugeja genereerib võtmepaari e-häälte salastamiseks ja avamiseks. Avamisvõtme osakud jagatakse Võtmehaldurite vahel.

Eeltingimus
'''''''''''

#. Lugejal on olemas Võtmerakendus.
#. Läviskeemi tehniline seadistus on olemas.
#. Leidub Läviskeemi rakendamiseks vajalik hulk Võtmehaldureid ning võtmekandjaid.

Päästik
'''''''

Lugeja algatab võtmepaari genereerimise Võtmerakenduses.

Põhiprotsess
''''''''''''

#. Võtmerakendus verifitseerib konfiguratsiooni digitaalallkirja.
#. Võtmerakendus genereerib võtmeosakud vastavalt läviskeemi spetsifikatsioonile.
#. Võtmerakendus küsib Lugejalt võtmekandjaid osakute talletamiseks.
#. Võtmerakendus talletab osakud võtmekandjatele.
#. Võtmerakendus kasutab häälte salastamise võtit sõnumi krüpteerimiseks.
#. Võtmerakendus testib võtmekandjaid ning taastab 2 erineva kvoorumiga võtme sõnumi dekrüpteerimiseks.
#. Võtmerakendus allkirjastab krüpteerimisvõtme allkirjastamisvõtmega.

Laiendid
''''''''

- Tehniliste vigade tekkimisel kõigis põhivoo sammudes logitakse sündmus tehniliste vigade logisse. Kasutajale väljastatakse  teade veasituatsiooni kohta..

Järeltingimus
'''''''''''''

Häälte salastamise ja avamise võtmepaar on edukalt genereeritud, avamise võti on talletatud osakutena võtmekandjatel.


Korraldaja - Valijarakenduse seadistuse loomine
```````````````````````````````````````````````

Kirjeldus
'''''''''

Korraldaja konfigureerib Valijarakenduse poolt kasutatavad tekstid, sertifikaadid, ikoonid ja valimise parameetrid.

Eeltingimus
'''''''''''
Seadistamiseks on täidetud järgmised tingimused:

- Korraldaja on Valijarakenduse tekstid ette valmistanud
- Korraldaja on valimise parameetrid ette valmistanud
- Häälte salastamise võti on olemas.

Põhiprotsess
''''''''''''
#. Korraldaja käivitab Seadistamisrakenduse.
#. Korraldaja sisestab valimise ja küsimuste identifikaatorid ning tüübid.
#. Korraldaja sisestab valimise küsimused.
#. Korraldaja laadib häälte salastamise võtme.
#. Korraldaja konfigureerib Valijarakenduse kasutajaliidese – tekstid, fondid, värvid, ikoonid.
#. Korraldaja kontrollib kõigi Valijarakenduse vaadete vastavust soovitule.
#. Korraldaja salvestab loodud konfiguratsiooni.

Laiendid
''''''''

Järeltingimus
'''''''''''''
Seadistamise lõpuks on olemas Valijarakenduse konfiguratsioon, millest on puudu Kogumisteenuse tehniline info.

Korraldaja - Kontrollrakenduse seadistuse loomine
`````````````````````````````````````````````````

Eeltingimus
'''''''''''
Korraldajal on olemas

#. Hääletaja allkirja kontrolliks vajalikud sertifikaadid
#. Registreerimisteenuse kinnituse kontrolliks vajalikud sertifikaadid
#. Kogumisteenuse allkirja kontrolliks vajalikud sertifikaadid
#. Käimasoleval valimisel häälte krüpteerimiseks kasutatav avalik võti
#. Kontrollrakenduse tekstid HTML kujul
#. Kontrollrakenduse fondid
#. Kontrollrakenduse värvid
#. Käimasoleva valimise identifikaator ja küsimused

Põhiprotsess
''''''''''''
1. Korraldaja loob Kontrollrakenduse seadistuse
2. Korraldaja veendub seadistamise õnnestumises vaadates läbi rakenduse vaated

Laiendid
''''''''
1. Vaadete mittesobivuse korral muudab Korraldaja seadistusi ning alustab põhiprotsessi algusest.


Koguja - Kogumisteenuse seadistamine
````````````````````````````````````

Kirjeldus
'''''''''
Koguja valmistab Kogumisteenuse valimiseks ette.

Eeltingimus
'''''''''''
#. Kogumisteenuse operatsioonisüsteem on paigaldatud
#. Kogumisteenuse tarkvarapakid on paigaldatud.

Päästik
'''''''
Kasutusmall algab kui Koguja logib enne hääletamisperioodi algust Kogumisteenusesse.

Põhiprotsess
''''''''''''
1. Koguja viib läbi alljärgnevad sammud:

    a. Laeb konfiguratsioonipakkide verifitseerimiseks vajaliku sertifikaatide konfiguratsiooni.
    b. Laeb Tuvastusteenuse konfiguratsiooni.
    c. Laeb Allkirjastamisteenuse konfiguratsiooni.
    d. Laeb Registreerimisteenuse konfiguratsiooni.
    e. Laeb mikroteenuste võrgukonfiguratsiooni.
    f. Laeb talletustehnoloogia konfiguratsiooni.
    g. Laeb volitatud nimekirjade laadijate konfiguratsiooni.
    h. Laeb digitaalselt allkirjastatud jaoskondade/ringkondade nimekirja.
    i. Laeb digitaalselt allkirjastatud valikute nimekirja.
    j. Laeb signeeritud valijate nimekirja.
    k. Kogumisteenus kontrollib digitaalallkirju konfiguratsioonipakkidel ja nimekirjadel (tehniline kasutusmall Digitaalallkirja kehtivuse kontroll Kogumisteenuses).
    l. Kogumisteenus kontrollib tuvastatud allkirjastaja volitusi süsteemis.
    m. Kogumisteenus kontrollib konfiguratsiooni vormilist ja sisulist kooskõlalisust ning initsialiseerib sisemised andmestruktuurid.

Laiendid
''''''''
- Kui põhiprotsessi sammus 1.k  ei tuvastata digitaalallkirja  kehtivust, siis väljastatakse veateade, sündmus logitakse vigade logisse, ühtegi muudatust ei rakendata.
- Kui põhiprotsessi sammus 1.l  ei tuvastata  digitaalallkirjastaja vastavat volitust volitatud isikute nimekirjast, siis väljastatakse veateade, sündmus logitakse vigade logisse, ühtegi muudatust ei rakendata.
- Kui põhivoo sammus 1.m tuvastatakse vorminguprobleemid, siis väljastatakse veateade, sündmus logitakse vigade logisse, ühtegi muudatust ei rakendata.
- Kui põhivoo sammus 1.m tuvastatakse ebakooskõla konfiguratsioonis – valed valimised, korduv jaoskond, korduv ringkond, jaoskond olematus ringkonnas, korduv kandidaat, olematu ringkonnaga kandidaat, korduv valija, olematu jaoskonnaga Hääletaja vms. – siis väljastatakse veateade, sündmus logitakse vigade logisse, ühtegi muudatust ei rakendata.
- Tehniliste vigade tekkimisel kõigis põhivoo sammudes logitakse sündmus tehniliste vigade logisse. Kasutajale väljastatakse  teade veasituatsiooni kohta..

Järeltingimus
'''''''''''''
Kogumisteenus on kooskõlaliselt seadistatud ning seda on võimalik viia hääletamisetappi.


Koguja - Valijarakenduse valmendamine
`````````````````````````````````````

Kirjeldus
'''''''''
Koguja valmendab Valijarakenduse.

Eeltingimus
'''''''''''
Valmendamiseks on täidetud järgmised tingimused:

- Korraldaja on loonud omapoolse Valijarakenduse konfiguratsioonifaili
- Valijarakendus on kompileeritud kõigi toetatavate platvormide jaoks.
- Valijarakendus on seadistamata.
- Kogumisteenuse TLS-sertifikaadi usaldamiseks vajalikud sertifikaadid on olemas.
- Kogumisteenuse URI on teada.

Põhiprotsess
''''''''''''
#. Koguja käivitab Seadistamisrakenduse.
#. Koguja laadib Korraldaja loodud Valijarakenduse konfiguratsioonifaili.
#. Koguja laadib Kogumisteenuse TLS-sertifikaadi usaldamiseks vajalikud sertifikaadid.
#. Koguja rakendab loodud seadistuse Valijarakendusele.
#. Koguja kontrollib kõigi Valijarakenduse vaadete vastavust soovitule.

Laiendid
''''''''
Mõne vajaliku ressurssi puudumisel seadistamine katkestatakse ning protsessi alustatakse uuesti kui kõik eeltingimused on täidetud.

Järeltingimus
'''''''''''''
Seadistamise lõpuks Valijarakendus käivitub ning kasutab seadistatud ressursse.


Koguja - Kontrollrakenduse valmendamine
```````````````````````````````````````

Eeltingimus
'''''''''''
Kogujal on olemas

1. Kompileeritud Kontrollrakendus
2. Kontrollrakenduse allkirjastamiseks sobiv võtmepaar
3. Kogumisteenuse võrguaadress
4. Kogumisteenuse sertifikaadi verifitseerimiseks vajalikud sertifikaadid

Põhiprotsess
''''''''''''
1. Koguja seadistab Kontrollrakenduse Kogumisteenuse võrguaadressi ja vastavate sertifikaatidega.
2. Koguja pakendab rakenduse
3. Koguja allkirjastab pakendatud rakenduse

Korraldaja - Proovihääletamine
``````````````````````````````

Kirjeldus
'''''''''

Korraldaja koostöös Koguja, Töötleja, Lugeja ning Võtmehalduritega veendub Kogumisteenuse valmisolekus elektrooniliseks hääletamiseks ning kõigi komponentide kooskõlalises seadistatuses.

Eeltingimus
'''''''''''

#. e-häälte salastamise võti on loodud ja testitud
#. Kogumisteenus on seadistatud
#. Valijarakendus on seadistatud
#. Kontrollrakendus on seadistatud

Põhiprotsess
''''''''''''
1. Korraldaja viib läbi testhääletamise

   #. Koguja viib Kogumisteenuse hääletamisetappi
   #. Korraldaja annab Valijarakenduse abil ühe või mitu häält
   #. Korraldaja kontrollib Kontrollrakenduse abil hääli
   #. Koguja peatab Kogumisteenuse ja väljastab e-valimiskasti
   #. Töötleja genereerib e-hääletanute nimekirja
   #. Töötleja loob lugemisele minevate anonüümistatud e-häälte nimekirja
   #. Lugeja koos Võtmehalduritega aktiveerib Võtmerakenduse ja häälte avamise võtme
   #. Lugeja dekrüpteerib anonüümistatud hääled ja väljastab hääletamistulemuse

2. Koguja lõpetab testhääletamise ning viib Kogumisteenuse algsesse olekusse, kus talletatud häälte andmebaas on tühi.

Laiendid
''''''''

- Testhääletamine võib sisaldada ka miksimise ja auditeerimise töövooge.

Järeltingimus
'''''''''''''
Elektroonilise hääletamise süsteemi komponendid on kontrollitult kooskõlaliselt seadistatud.

Hääletamisetapp
---------------

Korraldaja - Hääletamise alustamine
```````````````````````````````````

Kirjeldus
'''''''''
Hääletamise alustamine viib Kogumisteenuse hääletamisetappi - algab valikute nimekirjade väljastamine, häälte talletamine ja kontrollpäringutele vastamine.

Päästik
'''''''

#. Valimise seadistustes näidatud hääletamise algusaeg jõuab kätte.
#. Korraldaja edastab Haldusteenuse vahendusel digitaalallkirjastatud korralduse hääletamise alustamiseks.

Põhiprotsess
''''''''''''

1. Kogumisteenus alustab valikute nimekirjade väljastamist, häälte talletamist ja kontrollpäringutele vastamist.

Järeltingimus
'''''''''''''

Kogumisteenus väljastab valikute nimekirju, talletab hääli ning vastab kontrollpäringutele.

Hääletaja - Elektrooniline hääletamine Valijarakendusega
````````````````````````````````````````````````````````

Kirjeldus
'''''''''
Hääletaja kasutab Valijarakendust elektroonilise hääle andmiseks käimasoleval valimisel, mille valijate nimekirja ta kuulub.

Eeltingimus
'''''''''''
Hääletaja on laadinud oma arvutisse käimasoleva valimise jaoks seadistatud Valijarakenduse.

Pääs
Download .txt
gitextract_eag_ui9l/

├── .editorconfig
├── .gitignore
├── .gitmodules
├── Documentation/
│   ├── .gitignore
│   ├── Makefile
│   ├── _static/
│   │   └── custom.css
│   ├── common/
│   │   ├── examples/
│   │   │   ├── id.rpc.vote.query.json
│   │   │   ├── id.rpc.vote.response.json
│   │   │   ├── id.rpc.voterchoices.query.json
│   │   │   ├── id.rpc.voterchoices.response.json
│   │   │   ├── json.rpc.method.query.json
│   │   │   ├── json.rpc.method.response.json
│   │   │   ├── mid.rpc.authenticate.query.json
│   │   │   ├── mid.rpc.authenticate.response.json
│   │   │   ├── mid.rpc.authenticatestatus.query.json
│   │   │   ├── mid.rpc.authenticatestatus.response.json
│   │   │   ├── mid.rpc.authenticatestatus2.query.json
│   │   │   ├── mid.rpc.authenticatestatus2.response.json
│   │   │   ├── mid.rpc.getcertificate.query.json
│   │   │   ├── mid.rpc.getcertificate.response.json
│   │   │   ├── mid.rpc.sign.query.json
│   │   │   ├── mid.rpc.sign.response.json
│   │   │   ├── mid.rpc.signstatus.query.json
│   │   │   ├── mid.rpc.signstatus.response.json
│   │   │   ├── mid.rpc.signstatus2.query.json
│   │   │   ├── mid.rpc.signstatus2.response.json
│   │   │   ├── mid.rpc.vote.query.json
│   │   │   ├── mid.rpc.vote.response.json
│   │   │   ├── mid.rpc.voterchoices.query.json
│   │   │   ├── mid.rpc.voterchoices.response.json
│   │   │   ├── smartid.rpc.authenticate.query.json
│   │   │   ├── smartid.rpc.authenticate.response.json
│   │   │   ├── smartid.rpc.authenticatestatus.query.json
│   │   │   ├── smartid.rpc.authenticatestatus.response.json
│   │   │   ├── smartid.rpc.authenticatestatus2.query.json
│   │   │   ├── smartid.rpc.authenticatestatus2.response.json
│   │   │   ├── smartid.rpc.challenge.query.json
│   │   │   ├── smartid.rpc.challenge.response.json
│   │   │   ├── smartid.rpc.getcertificatechoice.query.json
│   │   │   ├── smartid.rpc.getcertificatechoice.response.json
│   │   │   ├── smartid.rpc.getcertificatechoicestatus.query.json
│   │   │   ├── smartid.rpc.getcertificatechoicestatus.response.json
│   │   │   ├── smartid.rpc.getcertificatechoicestatus2.response.json
│   │   │   ├── smartid.rpc.sign.query.json
│   │   │   ├── smartid.rpc.sign.response.json
│   │   │   ├── smartid.rpc.signstatus.query.json
│   │   │   ├── smartid.rpc.signstatus.response.json
│   │   │   ├── smartid.rpc.signstatus2.query.json
│   │   │   ├── smartid.rpc.signstatus2.response.json
│   │   │   ├── smartid.rpc.vote.query.json
│   │   │   ├── smartid.rpc.vote.response.json
│   │   │   ├── smartid.rpc.voterchoices.query.json
│   │   │   ├── smartid.rpc.voterchoices.response.json
│   │   │   ├── ver.rpc.verify.query.json
│   │   │   ├── ver.rpc.verify.response.json
│   │   │   ├── votesorder.rpc.votes.query.json
│   │   │   ├── votesorder.rpc.votes.response.json
│   │   │   ├── votesorder.rpc.votesseqno.query.json
│   │   │   ├── votesorder.rpc.votesseqno.response.json
│   │   │   ├── webeid.rpc.challenge.query.json
│   │   │   ├── webeid.rpc.challenge.response.json
│   │   │   ├── webeid.rpc.token.query.json
│   │   │   ├── webeid.rpc.token.response.json
│   │   │   ├── webeid.rpc.vote.query.json
│   │   │   ├── webeid.rpc.vote.response.json
│   │   │   ├── webeid.rpc.voterchoices.query.json
│   │   │   └── webeid.rpc.voterchoices.response.json
│   │   ├── schema/
│   │   │   ├── Makefile
│   │   │   ├── ivxv.anon-bb.schema
│   │   │   ├── ivxv.anon-bb.schema.example
│   │   │   ├── ivxv.choices.schema
│   │   │   ├── ivxv.choices.schema.example
│   │   │   ├── ivxv.districts.schema
│   │   │   ├── ivxv.districts.schema.example
│   │   │   ├── ivxv.result.schema
│   │   │   ├── ivxv.result.schema.example
│   │   │   ├── ivxv.revoke.schema
│   │   │   ├── ivxv.revoke.schema.example
│   │   │   ├── ivxv.voterlist.schema
│   │   │   ├── ivxv.voterlist.schema.example
│   │   │   └── validate_schema.py
│   │   └── xmltemplates/
│   │       ├── si.template
│   │       ├── sig.template
│   │       ├── sp.template
│   │       └── sv.template
│   ├── common-model.mk
│   ├── common.mk
│   ├── conf.py
│   ├── differ.sh
│   ├── documents.py
│   ├── en/
│   │   └── backendlogs/
│   │       ├── .gitignore
│   │       ├── Makefile
│   │       ├── create_rst.py
│   │       └── introduction.inc
│   ├── et/
│   │   ├── audiitor/
│   │   │   ├── Makefile
│   │   │   ├── annotatsioon.rst
│   │   │   ├── audit.rst
│   │   │   ├── history.rst
│   │   │   ├── history.txt
│   │   │   ├── index.rst
│   │   │   ├── spelling_wordlist.txt
│   │   │   └── ylevaade.rst
│   │   ├── example-config/
│   │   │   ├── DEMO_auditor/
│   │   │   │   └── DEMO_auditor.yaml
│   │   │   ├── DEMO_election/
│   │   │   │   ├── DEMO.election.yaml
│   │   │   │   ├── DEMO_valijate_nimekiri.pem
│   │   │   │   ├── EE-GovCA2018.pem.crt
│   │   │   │   ├── EE_Certification_Centre_Root_CA.pem.crt
│   │   │   │   ├── ESTEID-SK_2015.pem.crt
│   │   │   │   ├── SK_OCSP_RESPONDER_2011.pem.cer
│   │   │   │   ├── SK_TIMESTAMPING_AUTHORITY.pem.cer
│   │   │   │   └── esteid2018.pem.crt
│   │   │   ├── DEMO_ivxv/
│   │   │   │   ├── EE-GovCA2018.pem.crt
│   │   │   │   ├── ESTEID-SK_2015.pem.crt
│   │   │   │   ├── ESTEID2018.pem.crt
│   │   │   │   ├── SK_OCSP_RESPONDER_2011.pem.crt
│   │   │   │   ├── SK_TIMESTAMPING_AUTHORITY_2019.pem.crt
│   │   │   │   ├── SK_TIMESTAMPING_AUTHORITY_2020.pem.crt
│   │   │   │   ├── SK_TIMESTAMPING_AUTHORITY_2021.pem.crt
│   │   │   │   └── ivxv.properties
│   │   │   ├── DEMO_key.decrypt_f/
│   │   │   │   └── DEMO_key.decrypt_f.yaml
│   │   │   ├── DEMO_key.decrypt_t/
│   │   │   │   └── DEMO_key.decrypt_t.yaml
│   │   │   ├── DEMO_key.groupgen/
│   │   │   │   └── key.groupgen.yaml
│   │   │   ├── DEMO_key.init/
│   │   │   │   └── key.init.yaml
│   │   │   ├── DEMO_processor_TS/
│   │   │   │   └── DEMO_processor_TS.yaml
│   │   │   ├── DEMO_technical/
│   │   │   │   ├── ca.pem
│   │   │   │   └── technical.yaml
│   │   │   └── DEMO_trust/
│   │   │       ├── DEMO.trust.yaml
│   │   │       ├── EE-GovCA2018.pem.crt
│   │   │       ├── EE_Certification_Centre_Root_CA.pem.crt
│   │   │       ├── ESTEID-SK_2015.pem.crt
│   │   │       ├── SK_OCSP_RESPONDER_2011.pem.cer
│   │   │       ├── SK_TIMESTAMPING_AUTHORITY.pem.cer
│   │   │       └── esteid2018.pem.crt
│   │   ├── haldusteenus/
│   │   │   ├── Makefile
│   │   │   ├── allalaadimised.rst
│   │   │   ├── annotatsioon.rst
│   │   │   ├── index.rst
│   │   │   ├── kasutajad.rst
│   │   │   ├── logi.rst
│   │   │   ├── nimekirjad.rst
│   │   │   ├── seadistused.rst
│   │   │   ├── spelling_wordlist.txt
│   │   │   ├── statistika.rst
│   │   │   ├── teenused.rst
│   │   │   ├── yldseisund.rst
│   │   │   └── ylevaade.rst
│   │   ├── kasutusmall/
│   │   │   ├── Makefile
│   │   │   ├── index.rst
│   │   │   ├── kasutusmallid.rst
│   │   │   ├── sissejuhatus.rst
│   │   │   └── tegijad.rst
│   │   ├── kogumisteenuse_haldusjuhend/
│   │   │   ├── Makefile
│   │   │   ├── algseadistamine.rst
│   │   │   ├── annotatsioon.rst
│   │   │   ├── genereeritud-failid/
│   │   │   │   ├── e-valimiskasti_koostamine.inc
│   │   │   │   ├── haldusteenus-laadi_kogumisteenuse_tehnilised_seadistused.inc
│   │   │   │   ├── haldusteenus-laadi_ringkondade_nimekiri.inc
│   │   │   │   ├── haldusteenus-laadi_usaldusjuure_seadistused.inc
│   │   │   │   ├── haldusteenus-laadi_valijate_nimekiri.inc
│   │   │   │   ├── haldusteenus-laadi_valikute_nimekiri.inc
│   │   │   │   ├── haldusteenus-laadi_valimiste_seadistused.inc
│   │   │   │   ├── haldusteenuse_paigaldamine.inc
│   │   │   │   ├── haldusteenuse_soltuvuste_paigaldamine.inc
│   │   │   │   ├── kasutaja_lisamine.inc
│   │   │   │   ├── mikroteenuse_kaivitamine.inc
│   │   │   │   ├── mikroteenuse_seiskamine.inc
│   │   │   │   ├── mikroteenuse_seisundi_tuvastamine.inc
│   │   │   │   └── töötlemisrakenduse_sisendi_koostamine.inc
│   │   │   ├── haldusteenus.rst
│   │   │   ├── haldustoimingud.rst
│   │   │   ├── index.rst
│   │   │   ├── krahhitaaste.rst
│   │   │   ├── lisad.rst
│   │   │   ├── protseduurid.rst
│   │   │   ├── recovery/
│   │   │   │   ├── recovery_backupservice.inc
│   │   │   │   ├── recovery_fullstorage.inc
│   │   │   │   ├── recovery_logcollection.inc
│   │   │   │   ├── recovery_stateless.inc
│   │   │   │   └── recovery_storageservice.inc
│   │   │   ├── seadistused.rst
│   │   │   ├── spelling_wordlist.txt
│   │   │   ├── utiliitide-abiteave/
│   │   │   │   ├── ivxv-admin-helper.inc
│   │   │   │   ├── ivxv-admin-sudo.inc
│   │   │   │   ├── ivxv-agent-daemon.inc
│   │   │   │   ├── ivxv-backup-crontab.inc
│   │   │   │   ├── ivxv-backup.inc
│   │   │   │   ├── ivxv-cmd-load.inc
│   │   │   │   ├── ivxv-collector-init.inc
│   │   │   │   ├── ivxv-config-apply.inc
│   │   │   │   ├── ivxv-config-validate.inc
│   │   │   │   ├── ivxv-copy-log-to-logmon.inc
│   │   │   │   ├── ivxv-create-data-dirs.inc
│   │   │   │   ├── ivxv-db-dump.inc
│   │   │   │   ├── ivxv-db-reset.inc
│   │   │   │   ├── ivxv-eventlog-dump.inc
│   │   │   │   ├── ivxv-export-votes.inc
│   │   │   │   ├── ivxv-generate-processor-input.inc
│   │   │   │   ├── ivxv-secret-load.inc
│   │   │   │   ├── ivxv-service.inc
│   │   │   │   ├── ivxv-status.inc
│   │   │   │   ├── ivxv-update-packages.inc
│   │   │   │   ├── ivxv-users-list.inc
│   │   │   │   ├── ivxv-voter-list-download.inc
│   │   │   │   ├── ivxv-voterstats.inc
│   │   │   │   └── ivxv-voting-sessions.inc
│   │   │   └── ylevaade.rst
│   │   ├── seadistuste_koostejuhend/
│   │   │   ├── Makefile
│   │   │   ├── annotatsioon.rst
│   │   │   ├── auditirakendus.rst
│   │   │   ├── config-examples/
│   │   │   │   ├── DEMO_SK_TIMESTAMPING_AUTHORITY_2020.pem
│   │   │   │   ├── Stats_Server_Certificate.pem
│   │   │   │   ├── TEST_of_EE_Certification_Centre_Root_CA.pem
│   │   │   │   ├── TEST_of_ESTEID-SK_2015.pem
│   │   │   │   ├── TEST_of_SK_OCSP_RESPONDER_2020.pem
│   │   │   │   ├── android-ios-config.json
│   │   │   │   ├── auditor.convert.yaml
│   │   │   │   ├── auditor.decrypt.yaml
│   │   │   │   ├── auditor.integrity.yaml
│   │   │   │   ├── auditor.mixer.yaml
│   │   │   │   ├── etcd_CA.pem
│   │   │   │   ├── example.election.yaml
│   │   │   │   ├── example.technical.yaml
│   │   │   │   ├── example.trust.yaml
│   │   │   │   ├── example.voters.skip.yaml
│   │   │   │   ├── ivxv.properties.real
│   │   │   │   ├── key.decrypt.yaml
│   │   │   │   ├── key.groupgen.yaml
│   │   │   │   ├── key.init.original.yaml
│   │   │   │   ├── key.init.yaml
│   │   │   │   ├── key.testkey.yaml
│   │   │   │   ├── key.util.yaml
│   │   │   │   ├── processor.anonymize.yaml
│   │   │   │   ├── processor.check.yaml
│   │   │   │   ├── processor.checkAndSquash.yaml
│   │   │   │   ├── processor.export.yaml
│   │   │   │   ├── processor.revoke.yaml
│   │   │   │   ├── processor.revokeAndAnonymize.yaml
│   │   │   │   ├── processor.squash.yaml
│   │   │   │   ├── processor.stats.yaml
│   │   │   │   ├── processor.statsdiff.yaml
│   │   │   │   ├── processor.verify.yaml
│   │   │   │   ├── rnd.groupgen.yaml
│   │   │   │   ├── rnd.init.yaml
│   │   │   │   ├── rr_pub.key
│   │   │   │   ├── vote_enc_pkey.pem
│   │   │   │   └── xroadservice_ca.pem
│   │   │   ├── genparam.py
│   │   │   ├── index.rst
│   │   │   ├── kogumisteenus.rst
│   │   │   ├── kontrollrakendus.rst
│   │   │   ├── kt-krypto.inc
│   │   │   ├── kt-tehniline.inc
│   │   │   ├── kt-usaldusjuur.inc
│   │   │   ├── kt-valijate-nimekirja-vahelejätmine.inc
│   │   │   ├── kt-valimised.inc
│   │   │   ├── kt-volitused.inc
│   │   │   ├── kt-ylevaade.inc
│   │   │   ├── mixnet.rst
│   │   │   ├── rakendused.rst
│   │   │   ├── spelling_wordlist.txt
│   │   │   ├── tootlemisrakendus.rst
│   │   │   ├── valijarakendus.rst
│   │   │   ├── votmerakendus.rst
│   │   │   └── ylevaade.rst
│   │   ├── votmerakendus/
│   │   │   ├── Makefile
│   │   │   ├── index.rst
│   │   │   ├── sissejuhatus.rst
│   │   │   ├── viited.rst
│   │   │   └── votmeosakute_protokollid.rst
│   │   └── xteeteenus/
│   │       ├── Makefile
│   │       ├── index.rst
│   │       ├── jooksevnimekiri.rst
│   │       ├── model/
│   │       │   ├── Makefile
│   │       │   ├── xteeivxv.pu
│   │       │   └── xteevotesorder.pu
│   │       ├── seadistamine.rst
│   │       └── sissejuhatus.rst
│   ├── ivxv-technical/
│   │   ├── ivxv-common.cls
│   │   ├── ivxv-technical.cls
│   │   └── pandoc-extras.sty
│   ├── podl/
│   │   ├── .gitignore
│   │   ├── podl.py
│   │   ├── requirements.in
│   │   └── requirements.txt
│   ├── public/
│   │   ├── arhitektuur/
│   │   │   ├── Makefile
│   │   │   ├── etcd.rst
│   │   │   ├── index.rst
│   │   │   ├── kogumisteenus.rst
│   │   │   ├── locales/
│   │   │   │   └── en/
│   │   │   │       └── LC_MESSAGES/
│   │   │   │           ├── etcd.po
│   │   │   │           ├── index.po
│   │   │   │           ├── kogumisteenus.po
│   │   │   │           ├── tehnoloogiad.po
│   │   │   │           ├── vallasrezhiim.po
│   │   │   │           ├── viited.po
│   │   │   │           └── yldpohimotted.po
│   │   │   ├── model/
│   │   │   │   ├── Makefile
│   │   │   │   ├── actors.pu
│   │   │   │   ├── collector-if.pu
│   │   │   │   ├── collector-in.pu
│   │   │   │   ├── development.pu
│   │   │   │   ├── elec-vote.pu
│   │   │   │   ├── election.pu
│   │   │   │   ├── en/
│   │   │   │   │   └── lang.pu
│   │   │   │   ├── et/
│   │   │   │   │   └── lang.pu
│   │   │   │   ├── example.pu
│   │   │   │   ├── general.pu
│   │   │   │   ├── ms-collector-status.pu
│   │   │   │   ├── ms-management-service-components.en.pu
│   │   │   │   ├── ms-management-service-components.et.pu
│   │   │   │   ├── ms-service-status-changes.en.pu
│   │   │   │   ├── ms-service-status-changes.et.pu
│   │   │   │   ├── ms-service-status.en.pu
│   │   │   │   ├── ms-service-status.et.pu
│   │   │   │   ├── ms-upload-command.en.pu
│   │   │   │   ├── ms-upload-command.et.pu
│   │   │   │   ├── ms-voter-list-status.en.pu
│   │   │   │   ├── ms-voter-list-status.et.pu
│   │   │   │   ├── skin.inc
│   │   │   │   ├── uc-audit.pu
│   │   │   │   ├── uc-offline.pu
│   │   │   │   ├── uc-online.pu
│   │   │   │   ├── uc-prep.pu
│   │   │   │   ├── uc-tootleja.pu
│   │   │   │   └── uc-votmerakendus.pu
│   │   │   ├── spelling_wordlist.txt
│   │   │   ├── tehnoloogiad.rst
│   │   │   ├── vallasrezhiim.rst
│   │   │   ├── viited.rst
│   │   │   └── yldpohimotted.rst
│   │   ├── liidesed/
│   │   │   ├── Makefile
│   │   │   ├── examples.rst
│   │   │   ├── index.rst
│   │   │   ├── locales/
│   │   │   │   ├── en/
│   │   │   │   │   └── LC_MESSAGES/
│   │   │   │   │       ├── VIS3-EHS/
│   │   │   │   │       │   ├── 1_Valimisringkondade_nimekiri/
│   │   │   │   │       │   │   └── SPEC.po
│   │   │   │   │       │   ├── 2_Valikute_nimekiri/
│   │   │   │   │       │   │   └── SPEC.po
│   │   │   │   │       │   ├── 3_Valijate_nimekiri/
│   │   │   │   │       │   │   └── SPEC.po
│   │   │   │   │       │   ├── 4_e_haaletanute_nimekiri/
│   │   │   │   │       │   │   └── SPEC.po
│   │   │   │   │       │   ├── 5_Tyhistusnimekiri/
│   │   │   │   │       │   │   └── SPEC.po
│   │   │   │   │       │   ├── 6_e_haaletamise_tulemus/
│   │   │   │   │       │   │   └── SPEC.po
│   │   │   │   │       │   ├── 7_e_haaletamise_yldstatistika/
│   │   │   │   │       │   │   └── SPEC.po
│   │   │   │   │       │   ├── 8_e_haaletamise_detailstatistika/
│   │   │   │   │       │   │   └── SPEC.po
│   │   │   │   │       │   ├── 9_e_haaletamiste_nimekiri/
│   │   │   │   │       │   │   └── SPEC.po
│   │   │   │   │       │   ├── README.po
│   │   │   │   │       │   ├── Taustateave/
│   │   │   │   │       │   │   └── README.po
│   │   │   │   │       │   └── valimissündmuse_identifikaator.po
│   │   │   │   │       ├── examples.po
│   │   │   │   │       └── index.po
│   │   │   │   └── et/
│   │   │   │       └── LC_MESSAGES/
│   │   │   │           ├── VIS3-EHS/
│   │   │   │           │   ├── 1_Valimisringkondade_nimekiri/
│   │   │   │           │   │   └── SPEC.po
│   │   │   │           │   ├── 2_Valikute_nimekiri/
│   │   │   │           │   │   └── SPEC.po
│   │   │   │           │   ├── 3_Valijate_nimekiri/
│   │   │   │           │   │   └── SPEC.po
│   │   │   │           │   ├── 4_e_haaletanute_nimekiri/
│   │   │   │           │   │   └── SPEC.po
│   │   │   │           │   ├── 5_Tyhistusnimekiri/
│   │   │   │           │   │   └── SPEC.po
│   │   │   │           │   ├── 6_e_haaletamise_tulemus/
│   │   │   │           │   │   └── SPEC.po
│   │   │   │           │   ├── 7_e_haaletamise_yldstatistika/
│   │   │   │           │   │   └── SPEC.po
│   │   │   │           │   ├── 8_e_haaletamise_detailstatistika/
│   │   │   │           │   │   └── SPEC.po
│   │   │   │           │   ├── 9_e_haaletamiste_nimekiri/
│   │   │   │           │   │   └── SPEC.po
│   │   │   │           │   ├── README.po
│   │   │   │           │   ├── Taustateave/
│   │   │   │           │   │   └── README.po
│   │   │   │           │   └── valimissündmuse_identifikaator.po
│   │   │   │           ├── examples.po
│   │   │   │           └── index.po
│   │   │   └── spelling_wordlist.txt
│   │   ├── protokollid/
│   │   │   ├── 01-annotatsioon.rst
│   │   │   ├── 02-ylevaade.rst
│   │   │   ├── 04-seadistus.rst
│   │   │   ├── 05-ehaal.rst
│   │   │   ├── 06-talletamine.rst
│   │   │   ├── 06a-regteenus.rst
│   │   │   ├── 07-kontrollimine.rst
│   │   │   ├── 08-haaletamine.rst
│   │   │   ├── 09-tootlemine.rst
│   │   │   ├── 11-audit.rst
│   │   │   ├── 12-lisad.rst
│   │   │   ├── Makefile
│   │   │   ├── index.rst
│   │   │   ├── ivxv-elgamal-ecc.asn1
│   │   │   ├── ivxv-elgamal-general.asn1
│   │   │   ├── ivxv-elgamal-modp.asn1
│   │   │   ├── locales/
│   │   │   │   └── en/
│   │   │   │       └── LC_MESSAGES/
│   │   │   │           ├── 01-annotatsioon.po
│   │   │   │           ├── 02-ylevaade.po
│   │   │   │           ├── 04-seadistus.po
│   │   │   │           ├── 05-ehaal.po
│   │   │   │           ├── 06-talletamine.po
│   │   │   │           ├── 06a-regteenus.po
│   │   │   │           ├── 07-kontrollimine.po
│   │   │   │           ├── 08-haaletamine.po
│   │   │   │           ├── 09-tootlemine.po
│   │   │   │           ├── 11-audit.po
│   │   │   │           ├── 12-lisad.po
│   │   │   │           └── index.po
│   │   │   ├── model/
│   │   │   │   ├── Makefile
│   │   │   │   ├── en/
│   │   │   │   │   └── lang.pu
│   │   │   │   ├── et/
│   │   │   │   │   └── lang.pu
│   │   │   │   └── sequence.pu
│   │   │   ├── paragraph.txt
│   │   │   └── spelling_wordlist.txt
│   │   └── uldsisukord/
│   │       ├── .gitignore
│   │       ├── Makefile
│   │       ├── annotatsioon.rst
│   │       ├── index.rst
│   │       ├── locales/
│   │       │   └── en/
│   │       │       └── LC_MESSAGES/
│   │       │           ├── annotatsioon.po
│   │       │           ├── index.po
│   │       │           ├── nimekiri.po
│   │       │           └── tarned.po
│   │       ├── spelling_wordlist.txt
│   │       └── tarned.rst
│   └── spelling_wordlist.txt
├── LICENSE
├── Makefile
├── README.md
├── README.rst
├── auditor/
│   ├── .gitignore
│   ├── Makefile
│   ├── README.rst
│   ├── build.gradle
│   ├── settings.gradle
│   └── src/
│       └── main/
│           └── java/
│               └── ee/
│                   └── ivxv/
│                       └── audit/
│                           ├── Audit.java
│                           ├── AuditApp.java
│                           ├── AuditContext.java
│                           ├── Msg.java
│                           ├── model/
│                           │   ├── PlainBallotBox.java
│                           │   └── Tally.java
│                           ├── shuffle/
│                           │   ├── ByteTree.java
│                           │   ├── DataParser.java
│                           │   ├── PRNG.java
│                           │   ├── ProtocolInformation.java
│                           │   ├── RO.java
│                           │   ├── ShuffleConsole.java
│                           │   ├── ShuffleException.java
│                           │   ├── ShuffleParameters.java
│                           │   ├── ShuffleProof.java
│                           │   ├── ThreadedVerifier.java
│                           │   └── Verifier.java
│                           ├── tools/
│                           │   ├── ConvertTool.java
│                           │   ├── DecryptTool.java
│                           │   ├── IntegrityTool.java
│                           │   └── MixerTool.java
│                           └── util/
│                               ├── DiscardedBallot.java
│                               ├── InvalidDecProofs.java
│                               └── RawBallotWithDigest.java
├── choices/
│   ├── .gitignore
│   ├── Makefile
│   ├── README.rst
│   ├── cmd/
│   │   ├── choiceimp/
│   │   │   ├── log_desc.go
│   │   │   └── main.go
│   │   ├── districtimp/
│   │   │   ├── district_test.go
│   │   │   ├── log_desc.go
│   │   │   └── main.go
│   │   └── voterimp/
│   │       ├── container.go
│   │       ├── log_desc.go
│   │       ├── main.go
│   │       └── voterimp_test.go
│   ├── go.mod
│   ├── go.sum
│   ├── internal/
│   │   └── client/
│   │       └── sessionstatus/
│   │           └── rpc/
│   │               ├── client.go
│   │               └── log_desc.go
│   └── service/
│       └── choices/
│           ├── log_desc.go
│           └── main.go
├── collector-admin/
│   ├── Makefile
│   ├── README.rst
│   ├── config/
│   │   ├── ivxv-admin-ui.conf
│   │   └── rsyslog.conf
│   ├── ivxv-collector-admin.conf
│   ├── ivxv_admin/
│   │   ├── __init__.py
│   │   ├── agent_daemon.py
│   │   ├── cli_utils/
│   │   │   ├── __init__.py
│   │   │   ├── admin_storage_utils.py
│   │   │   ├── backup_utils.py
│   │   │   ├── config_utils/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── command_load.py
│   │   │   │   ├── config_apply.py
│   │   │   │   ├── config_validate.py
│   │   │   │   ├── load_secret_data_file.py
│   │   │   │   └── voter_list_download.py
│   │   │   ├── service_utils.py
│   │   │   └── status_utils.py
│   │   ├── collector_state.py
│   │   ├── command_file.py
│   │   ├── config.py
│   │   ├── config_validator/
│   │   │   ├── __init__.py
│   │   │   ├── choices_list.py
│   │   │   ├── districts_list.py
│   │   │   ├── election_conf.py
│   │   │   ├── fields.py
│   │   │   ├── schemas.py
│   │   │   ├── tech_conf.py
│   │   │   ├── trust_conf.py
│   │   │   ├── user_management.py
│   │   │   ├── validator_util.py
│   │   │   └── voters_list.py
│   │   ├── db.py
│   │   ├── event_log.py
│   │   ├── http_daemon.py
│   │   ├── lib/
│   │   │   ├── __init__.py
│   │   │   └── lockfile.py
│   │   ├── service/
│   │   │   ├── __init__.py
│   │   │   ├── backup_service.py
│   │   │   ├── logging.py
│   │   │   ├── remote_exec.py
│   │   │   └── service.py
│   │   ├── templates/
│   │   │   ├── ivxv_backup_crontab.jinja
│   │   │   ├── ivxv_detail_stats_crontab.jinja
│   │   │   ├── ivxv_service_rsyslog_conf.jinja
│   │   │   ├── ivxv_status.jinja
│   │   │   ├── ivxv_voting_facts_crontab.jinja
│   │   │   └── stats.json
│   │   └── wsgi.py
│   ├── site/
│   │   ├── cgi/
│   │   │   └── ivxv-admin.wsgi
│   │   ├── index.html
│   │   ├── ivxv/
│   │   │   ├── about.html
│   │   │   ├── config.html
│   │   │   ├── downloads.html
│   │   │   ├── index.html
│   │   │   ├── lists.html
│   │   │   ├── log.html
│   │   │   ├── services.html
│   │   │   ├── stats.html
│   │   │   └── users.html
│   │   └── js/
│   │       ├── config.js
│   │       ├── downloads.js
│   │       ├── index.js
│   │       ├── ivxv.js
│   │       ├── lists.js
│   │       ├── log.js
│   │       ├── services.js
│   │       ├── stats.js
│   │       └── users.js
│   └── sk-certs/
│       ├── EE-GovCA2018.pem.crt
│       └── esteid2018.pem.crt
├── common/
│   ├── README.rst
│   ├── collector/
│   │   ├── .gitignore
│   │   ├── Makefile
│   │   ├── README.md
│   │   ├── age/
│   │   │   ├── age.go
│   │   │   ├── age_test.go
│   │   │   └── log_desc.go
│   │   ├── auth/
│   │   │   ├── auth.go
│   │   │   ├── dummy/
│   │   │   │   ├── dummy.go
│   │   │   │   └── dummy_test.go
│   │   │   ├── log_desc.go
│   │   │   ├── ticket/
│   │   │   │   ├── log_desc.go
│   │   │   │   └── ticket.go
│   │   │   └── tls/
│   │   │       ├── log_desc.go
│   │   │       └── tls.go
│   │   ├── cmd/
│   │   │   └── verifier/
│   │   │       └── main.go
│   │   ├── command/
│   │   │   ├── command.go
│   │   │   ├── exit/
│   │   │   │   └── exit.go
│   │   │   ├── log_desc.go
│   │   │   └── status/
│   │   │       ├── isatty_linux.go
│   │   │       ├── isatty_other.go
│   │   │       └── status.go
│   │   ├── conf/
│   │   │   ├── conf.go
│   │   │   ├── conf_test.go
│   │   │   ├── log_desc.go
│   │   │   ├── testdata/
│   │   │   │   ├── election.dummy
│   │   │   │   ├── prefix.trust.dummy
│   │   │   │   ├── technical.dummy
│   │   │   │   └── trust.dummy
│   │   │   └── version/
│   │   │       ├── log_desc.go
│   │   │       └── version.go
│   │   ├── config/
│   │   │   ├── Makefile
│   │   │   ├── rsyslog-ivxv-templates.conf
│   │   │   ├── rsyslog-logcollector.conf
│   │   │   └── sudoers
│   │   ├── container/
│   │   │   ├── bdoc/
│   │   │   │   ├── asice.go
│   │   │   │   ├── asice_test.go
│   │   │   │   ├── bdoc.go
│   │   │   │   ├── bdoc_test.go
│   │   │   │   ├── c14n.go
│   │   │   │   ├── c14n_test.go
│   │   │   │   ├── log_desc.go
│   │   │   │   ├── mapstack.go
│   │   │   │   ├── pool.go
│   │   │   │   ├── reader.go
│   │   │   │   ├── reader_test.go
│   │   │   │   ├── testdata/
│   │   │   │   │   ├── canonicalSignedInfoCompact
│   │   │   │   │   ├── canonicalSignedInfoEID
│   │   │   │   │   ├── canonicalSignedInfoMID
│   │   │   │   │   ├── confNoCheckTM.yaml
│   │   │   │   │   ├── signatures0Compact.xml
│   │   │   │   │   ├── signatures0EID.xml
│   │   │   │   │   ├── signatures0MID.xml
│   │   │   │   │   ├── testEIDBES.bdoc
│   │   │   │   │   ├── testEIDTM.bdoc
│   │   │   │   │   ├── testEIDTS.bdoc
│   │   │   │   │   ├── testMIDTM.bdoc
│   │   │   │   │   ├── testMIDTS.bdoc
│   │   │   │   │   ├── testMultipleFiles.bdoc
│   │   │   │   │   ├── testMultipleSigners.bdoc
│   │   │   │   │   ├── testNoFiles.bdoc
│   │   │   │   │   ├── testNoManifest.bdoc
│   │   │   │   │   ├── testNoSignatures.bdoc
│   │   │   │   │   ├── testOCSPDelayed.bdoc
│   │   │   │   │   ├── testOCSPOld.bdoc
│   │   │   │   │   ├── trustBES.yaml
│   │   │   │   │   ├── trustTM.yaml
│   │   │   │   │   └── trustTS.yaml
│   │   │   │   ├── xades.go
│   │   │   │   ├── xml.go
│   │   │   │   └── xml_test.go
│   │   │   ├── container.go
│   │   │   ├── dummy/
│   │   │   │   ├── dummy.go
│   │   │   │   └── dummy_test.go
│   │   │   ├── log_desc.go
│   │   │   └── registry.go
│   │   ├── cookie/
│   │   │   ├── cookie.go
│   │   │   ├── cookie_test.go
│   │   │   └── log_desc.go
│   │   ├── crypto/
│   │   │   └── elgamal/
│   │   │       ├── ciphertext.go
│   │   │       ├── ciphertext_test.go
│   │   │       ├── elgamal.go
│   │   │       ├── log_desc.go
│   │   │       ├── x509.go
│   │   │       └── x509_test.go
│   │   ├── cryptoutil/
│   │   │   ├── cryptoutil.go
│   │   │   ├── cryptoutil_test.go
│   │   │   ├── log_desc.go
│   │   │   ├── rdn.go
│   │   │   ├── rdn_test.go
│   │   │   └── testdata/
│   │   │       ├── certificate-trailing-data.pem
│   │   │       ├── certificate-with-header.pem
│   │   │       ├── certificate-wrong-type.pem
│   │   │       ├── certificate.der
│   │   │       └── certificate.pem
│   │   ├── errors/
│   │   │   ├── errors.go
│   │   │   └── errors_test.go
│   │   ├── go.mod
│   │   ├── go.sum
│   │   ├── identity/
│   │   │   ├── identity.go
│   │   │   └── log_desc.go
│   │   ├── log/
│   │   │   ├── log.go
│   │   │   ├── log_test.go
│   │   │   └── testdata/
│   │   │       └── certificate.der
│   │   ├── mid/
│   │   │   ├── authenticate.go
│   │   │   ├── certificate.go
│   │   │   ├── http.go
│   │   │   ├── log_desc.go
│   │   │   ├── mid.go
│   │   │   ├── mid_test.go
│   │   │   ├── session.go
│   │   │   ├── sign.go
│   │   │   └── testdata/
│   │   │       ├── TEST_of_EE_Certification_Centre_Root_CA.pem
│   │   │       ├── TEST_of_ESTEID-SK_2015.pem
│   │   │       ├── TEST_of_SK_OCSP_RESPONDER_2020.pem
│   │   │       └── signer.pem
│   │   ├── ocsp/
│   │   │   ├── log_desc.go
│   │   │   ├── ocsp.go
│   │   │   ├── ocsp_test.go
│   │   │   ├── testdata/
│   │   │   │   ├── DEMO_of_KLASS3-SK_2016_SSL_OCSP_RESPONDER_2018.pem
│   │   │   │   ├── ESTEID-SK_2011.pem
│   │   │   │   ├── ESTEID-SK_2015.pem
│   │   │   │   ├── ID-PNOEE-39605244244.pem
│   │   │   │   ├── ID-PNOEE-41602290078.pem
│   │   │   │   ├── MID-PNOEE-60001018800.pem
│   │   │   │   ├── TEST_of_ESTEID-SK_2015.pem
│   │   │   │   ├── TEST_of_KLASS3-SK_2016.pem
│   │   │   │   ├── TEST_of_SK_OCSP_RESPONDER_2020.pem
│   │   │   │   ├── demo-of-klass3-sk-2016-ssl-ocsp-responder-2018.pem
│   │   │   │   ├── esteid2018.pem
│   │   │   │   ├── good.pem
│   │   │   │   ├── revoked.pem
│   │   │   │   ├── test_nonce
│   │   │   │   ├── test_response
│   │   │   │   ├── test_response_old
│   │   │   │   └── unknown.pem
│   │   │   └── types.go
│   │   ├── q11n/
│   │   │   ├── log_desc.go
│   │   │   ├── ocsp/
│   │   │   │   ├── log_desc.go
│   │   │   │   └── ocsp.go
│   │   │   ├── q11n.go
│   │   │   └── tsp/
│   │   │       ├── log_desc.go
│   │   │       └── tsp.go
│   │   ├── safereader/
│   │   │   ├── example_test.go
│   │   │   ├── log_desc.go
│   │   │   ├── reader.go
│   │   │   └── reader_test.go
│   │   ├── scripts/
│   │   │   ├── Makefile
│   │   │   ├── ivxv-admin-helper.sh
│   │   │   └── ivxv-admin-sudo.sh
│   │   ├── server/
│   │   │   ├── .gitignore
│   │   │   ├── codec.go
│   │   │   ├── codec_test.go
│   │   │   ├── context.go
│   │   │   ├── controller.go
│   │   │   ├── errors.go
│   │   │   ├── filter.go
│   │   │   ├── log_desc.go
│   │   │   ├── proxy.go
│   │   │   ├── server.go
│   │   │   ├── status.go
│   │   │   ├── tlsciphersuites
│   │   │   ├── util.go
│   │   │   ├── util_test.go
│   │   │   └── wait.go
│   │   ├── smartid/
│   │   │   ├── authenticate.go
│   │   │   ├── certificate.go
│   │   │   ├── http.go
│   │   │   ├── log_desc.go
│   │   │   ├── session.go
│   │   │   ├── sign.go
│   │   │   ├── smartid.go
│   │   │   ├── smartid_test.go
│   │   │   └── testdata/
│   │   │       ├── TEST_of_EE_Certification_Centre_Root_CA.pem
│   │   │       ├── TEST_of_EID-SK_2016.pem
│   │   │       └── TEST_of_SK_OCSP_RESPONDER_2020.pem
│   │   ├── status/
│   │   │   ├── client/
│   │   │   │   ├── client.go
│   │   │   │   └── rpc/
│   │   │   │       ├── builder.go
│   │   │   │       ├── builder_test.go
│   │   │   │       ├── client.go
│   │   │   │       ├── dto.go
│   │   │   │       ├── log_desc.go
│   │   │   │       ├── util.go
│   │   │   │       └── util_test.go
│   │   │   ├── conf.go
│   │   │   └── status.go
│   │   ├── storage/
│   │   │   ├── batch.go
│   │   │   ├── etcd/
│   │   │   │   ├── etcd.go
│   │   │   │   ├── log_desc.go
│   │   │   │   ├── logger.go
│   │   │   │   ├── status.go
│   │   │   │   └── txn.go
│   │   │   ├── file/
│   │   │   │   └── file.go
│   │   │   ├── log_desc.go
│   │   │   ├── memory/
│   │   │   │   └── memory.go
│   │   │   ├── registry.go
│   │   │   ├── status.go
│   │   │   ├── storage.go
│   │   │   ├── storage_dev.go
│   │   │   └── txn.go
│   │   ├── token/
│   │   │   ├── custom/
│   │   │   │   ├── bearer_test.go
│   │   │   │   ├── empty_bearer.go
│   │   │   │   ├── empty_bearer_test.go
│   │   │   │   ├── empty_builder.go
│   │   │   │   ├── existing_bearer.go
│   │   │   │   ├── existing_builder.go
│   │   │   │   ├── log_desc.go
│   │   │   │   ├── raw_bearer.go
│   │   │   │   ├── raw_bearer_test.go
│   │   │   │   ├── raw_builder.go
│   │   │   │   ├── util.go
│   │   │   │   └── util_test.go
│   │   │   ├── token.go
│   │   │   └── webeid/
│   │   │       ├── log_desc.go
│   │   │       ├── raw_builder.go
│   │   │       ├── raw_webeid.go
│   │   │       ├── raw_webeid_test.go
│   │   │       ├── testdata/
│   │   │       │   ├── token.example.json
│   │   │       │   ├── voter.auth.key
│   │   │       │   └── voter.auth.pem
│   │   │       ├── testdata.go
│   │   │       ├── util.go
│   │   │       ├── util_test.go
│   │   │       └── webeid_test.go
│   │   ├── tsp/
│   │   │   ├── cms.go
│   │   │   ├── log_desc.go
│   │   │   ├── testdata/
│   │   │   │   ├── DEMO_SK_TIMESTAMPING_AUTHORITY_2020.pem
│   │   │   │   ├── demo_tsu_ecc_2023.pem.crt
│   │   │   │   ├── test_response
│   │   │   │   └── test_response_08-11-2023
│   │   │   ├── tsp.go
│   │   │   ├── tsp_test.go
│   │   │   └── types.go
│   │   ├── yaml/
│   │   │   ├── ast.go
│   │   │   ├── ast_test.go
│   │   │   ├── doc.go
│   │   │   ├── lexer.go
│   │   │   ├── lexer_test.go
│   │   │   ├── log_desc.go
│   │   │   ├── parser.go
│   │   │   ├── parser_test.go
│   │   │   ├── testdata/
│   │   │   │   └── unmarshal.yaml
│   │   │   ├── unmarshal.go
│   │   │   └── unmarshal_test.go
│   │   └── zip/
│   │       ├── testdata/
│   │       │   ├── container1.asice
│   │       │   ├── container2.asice
│   │       │   ├── container3_general_purpose_bit3.bdoc
│   │       │   ├── mid1.bdoc
│   │       │   ├── mid2.bdoc
│   │       │   ├── smartid1.bdoc
│   │       │   └── smartid2.bdoc
│   │       ├── zip.go
│   │       └── zip_test.go
│   ├── external/
│   │   └── .gitignore
│   ├── go/
│   │   ├── common.mk
│   │   ├── golangci-lint.yaml
│   │   └── govar.mk
│   ├── java/
│   │   ├── .gitignore
│   │   ├── Makefile
│   │   ├── build.gradle
│   │   ├── common-build.gradle
│   │   ├── common-buildscript.gradle
│   │   ├── common.mk
│   │   ├── javavar.mk
│   │   ├── settings.gradle
│   │   ├── src/
│   │   │   ├── integration-test/
│   │   │   │   └── java/
│   │   │   │       └── ee/
│   │   │   │           └── ivxv/
│   │   │   │               └── common/
│   │   │   │                   ├── cli/
│   │   │   │                   │   └── TestContextFactory.java
│   │   │   │                   └── service/
│   │   │   │                       └── smartcard/
│   │   │   │                           └── dummy/
│   │   │   │                               ├── DummyCardService.java
│   │   │   │                               └── DummyPKCS15Card.java
│   │   │   └── main/
│   │   │       ├── java/
│   │   │       │   └── ee/
│   │   │       │       └── ivxv/
│   │   │       │           └── common/
│   │   │       │               ├── M.java
│   │   │       │               ├── asn1/
│   │   │       │               │   ├── ASN1Decodable.java
│   │   │       │               │   ├── ASN1DecodingException.java
│   │   │       │               │   ├── ASN1Encodable.java
│   │   │       │               │   ├── Ciphertext.java
│   │   │       │               │   ├── Field.java
│   │   │       │               │   ├── PKCS8PrivateKey.java
│   │   │       │               │   ├── RSAParams.java
│   │   │       │               │   ├── Sequence.java
│   │   │       │               │   └── X509PublicKey.java
│   │   │       │               ├── cli/
│   │   │       │               │   ├── App.java
│   │   │       │               │   ├── AppContext.java
│   │   │       │               │   ├── AppHelper.java
│   │   │       │               │   ├── AppRunner.java
│   │   │       │               │   ├── Arg.java
│   │   │       │               │   ├── Args.java
│   │   │       │               │   ├── CommandLine.java
│   │   │       │               │   ├── CommonArgs.java
│   │   │       │               │   ├── ContextFactory.java
│   │   │       │               │   ├── InitialContext.java
│   │   │       │               │   ├── Msg.java
│   │   │       │               │   ├── Option.java
│   │   │       │               │   ├── ParseException.java
│   │   │       │               │   ├── Tool.java
│   │   │       │               │   ├── ValidationResult.java
│   │   │       │               │   ├── VerifyTool.java
│   │   │       │               │   ├── YamlData.java
│   │   │       │               │   └── YamlDataExtension.java
│   │   │       │               ├── conf/
│   │   │       │               │   ├── Conf.java
│   │   │       │               │   ├── ConfBuilder.java
│   │   │       │               │   ├── ConfLoader.java
│   │   │       │               │   ├── ConfVerifier.java
│   │   │       │               │   ├── LocaleConf.java
│   │   │       │               │   ├── LocaleConfLoader.java
│   │   │       │               │   └── Msg.java
│   │   │       │               ├── crypto/
│   │   │       │               │   ├── CorrectnessUtil.java
│   │   │       │               │   ├── CryptoUtil.java
│   │   │       │               │   ├── Plaintext.java
│   │   │       │               │   ├── SignatureUtil.java
│   │   │       │               │   ├── elgamal/
│   │   │       │               │   │   ├── ElGamalCiphertext.java
│   │   │       │               │   │   ├── ElGamalDecryptionProof.java
│   │   │       │               │   │   ├── ElGamalParameters.java
│   │   │       │               │   │   ├── ElGamalPrivateKey.java
│   │   │       │               │   │   └── ElGamalPublicKey.java
│   │   │       │               │   ├── hash/
│   │   │       │               │   │   ├── HashFunction.java
│   │   │       │               │   │   ├── HashType.java
│   │   │       │               │   │   └── Sha256.java
│   │   │       │               │   └── rnd/
│   │   │       │               │       ├── CombineRnd.java
│   │   │       │               │       ├── DPRNG.java
│   │   │       │               │       ├── FileRnd.java
│   │   │       │               │       ├── NativeRnd.java
│   │   │       │               │       ├── Rnd.java
│   │   │       │               │       └── UserRnd.java
│   │   │       │               ├── math/
│   │   │       │               │   ├── ECGroup.java
│   │   │       │               │   ├── ECGroupElement.java
│   │   │       │               │   ├── Group.java
│   │   │       │               │   ├── GroupElement.java
│   │   │       │               │   ├── IntegerConstructor.java
│   │   │       │               │   ├── LagrangeInterpolation.java
│   │   │       │               │   ├── MathException.java
│   │   │       │               │   ├── MathUtil.java
│   │   │       │               │   ├── ModPGroup.java
│   │   │       │               │   ├── ModPGroupElement.java
│   │   │       │               │   ├── Polynomial.java
│   │   │       │               │   ├── ProductGroup.java
│   │   │       │               │   └── ProductGroupElement.java
│   │   │       │               ├── model/
│   │   │       │               │   ├── AnonymousBallotBox.java
│   │   │       │               │   ├── Ballot.java
│   │   │       │               │   ├── BallotBox.java
│   │   │       │               │   ├── CandidateList.java
│   │   │       │               │   ├── District.java
│   │   │       │               │   ├── DistrictList.java
│   │   │       │               │   ├── IBallotBox.java
│   │   │       │               │   ├── LName.java
│   │   │       │               │   ├── Proof.java
│   │   │       │               │   ├── Region.java
│   │   │       │               │   ├── RevocationList.java
│   │   │       │               │   ├── SkipCommand.java
│   │   │       │               │   ├── Voter.java
│   │   │       │               │   ├── VoterBallots.java
│   │   │       │               │   └── VoterList.java
│   │   │       │               ├── service/
│   │   │       │               │   ├── bbox/
│   │   │       │               │   │   ├── BboxHelper.java
│   │   │       │               │   │   ├── InvalidBboxException.java
│   │   │       │               │   │   ├── Ref.java
│   │   │       │               │   │   ├── Result.java
│   │   │       │               │   │   └── impl/
│   │   │       │               │   │       ├── AbstractStage.java
│   │   │       │               │   │       ├── BboxHelperImpl.java
│   │   │       │               │   │       ├── FileName.java
│   │   │       │               │   │       ├── FileSource.java
│   │   │       │               │   │       ├── IvxvBboxLoader.java
│   │   │       │               │   │       ├── IvxvRegDataLoader.java
│   │   │       │               │   │       ├── LoaderHelper.java
│   │   │       │               │   │       ├── Profile.java
│   │   │       │               │   │       ├── Record.java
│   │   │       │               │   │       ├── ResultException.java
│   │   │       │               │   │       ├── TspProfile.java
│   │   │       │               │   │       ├── ZipSource.java
│   │   │       │               │   │       ├── ZipSourceRaw.java
│   │   │       │               │   │       └── verify/
│   │   │       │               │   │           ├── TsSignature.java
│   │   │       │               │   │           └── TsVerifier.java
│   │   │       │               │   ├── console/
│   │   │       │               │   │   ├── BlockingQueueConsole.java
│   │   │       │               │   │   ├── Console.java
│   │   │       │               │   │   ├── InfiniteProgressImpl.java
│   │   │       │               │   │   ├── Progress.java
│   │   │       │               │   │   ├── ProgressImpl.java
│   │   │       │               │   │   └── TextFormatter.java
│   │   │       │               │   ├── container/
│   │   │       │               │   │   ├── Container.java
│   │   │       │               │   │   ├── ContainerReader.java
│   │   │       │               │   │   ├── DataFile.java
│   │   │       │               │   │   ├── InvalidContainerException.java
│   │   │       │               │   │   ├── Signature.java
│   │   │       │               │   │   ├── Subject.java
│   │   │       │               │   │   └── bdoc/
│   │   │       │               │   │       ├── BdocContainerReader.java
│   │   │       │               │   │       └── DataConverter.java
│   │   │       │               │   ├── i18n/
│   │   │       │               │   │   ├── Cal10nI18nImpl.java
│   │   │       │               │   │   ├── DefaultI18n.java
│   │   │       │               │   │   ├── I18n.java
│   │   │       │               │   │   ├── Message.java
│   │   │       │               │   │   ├── MessageException.java
│   │   │       │               │   │   └── Translatable.java
│   │   │       │               │   ├── report/
│   │   │       │               │   │   ├── CsvReporterImpl.java
│   │   │       │               │   │   ├── DefaultReporter.java
│   │   │       │               │   │   └── Reporter.java
│   │   │       │               │   └── smartcard/
│   │   │       │               │       ├── Apdu.java
│   │   │       │               │       ├── Card.java
│   │   │       │               │       ├── CardInfo.java
│   │   │       │               │       ├── CardService.java
│   │   │       │               │       ├── Cards.java
│   │   │       │               │       ├── IndexedBlob.java
│   │   │       │               │       ├── Msg.java
│   │   │       │               │       ├── SmartCardException.java
│   │   │       │               │       ├── TerminalUtil.java
│   │   │       │               │       └── pkcs15/
│   │   │       │               │           ├── PKCS15Card.java
│   │   │       │               │           ├── PKCS15CardService.java
│   │   │       │               │           ├── PKCS15Exception.java
│   │   │       │               │           └── PKCS15IndexedBlob.java
│   │   │       │               ├── util/
│   │   │       │               │   ├── ByteArrayWrapper.java
│   │   │       │               │   ├── CandidatesUtil.java
│   │   │       │               │   ├── ContainerHelper.java
│   │   │       │               │   ├── DistrictsUtil.java
│   │   │       │               │   ├── I18nConsole.java
│   │   │       │               │   ├── Json.java
│   │   │       │               │   ├── NameHolder.java
│   │   │       │               │   ├── PdfDoc.java
│   │   │       │               │   ├── SkipCommandUtil.java
│   │   │       │               │   ├── ToolHelper.java
│   │   │       │               │   ├── Util.java
│   │   │       │               │   └── log/
│   │   │       │               │       ├── LogJsonFormatter.java
│   │   │       │               │       └── PerformanceLog.java
│   │   │       │               └── zip/
│   │   │       │                   ├── Zip.java
│   │   │       │                   └── ZipFileCommentException.java
│   │   │       └── resources/
│   │   │           ├── bootstrap-i18n/
│   │   │           │   └── common-conf-localeconfloader-msg_et.properties
│   │   │           ├── log4j.properties
│   │   │           └── logback.xml
│   │   └── translations/
│   │       ├── i18n/
│   │       │   ├── audit-msg_et.properties
│   │       │   ├── common-cli-msg_et.properties
│   │       │   ├── common-conf-msg_et.properties
│   │       │   ├── common-model-bb-type_et.properties
│   │       │   ├── common-msg_et.properties
│   │       │   ├── common-smartcard-msg_et.properties
│   │       │   ├── key-msg_et.properties
│   │       │   └── processor-msg_et.properties
│   │       └── lang.properties
│   └── tools/
│       ├── go/
│       │   ├── .gitignore
│       │   ├── Makefile
│       │   ├── cmd/
│       │   │   └── gen/
│       │   │       ├── .gitignore
│       │   │       ├── description.go
│       │   │       ├── gen.tmpl
│       │   │       ├── gen_test.go
│       │   │       ├── generate.go
│       │   │       ├── gentmpl.sh
│       │   │       ├── main.go
│       │   │       ├── resolve.go
│       │   │       ├── testdata/
│       │   │       │   ├── declared/
│       │   │       │   │   └── declared.go
│       │   │       │   ├── duplicate/
│       │   │       │   │   └── duplicate.go
│       │   │       │   ├── empty/
│       │   │       │   │   └── empty.go
│       │   │       │   ├── local/
│       │   │       │   │   └── local.go
│       │   │       │   ├── nodescription/
│       │   │       │   │   └── nodescription.go
│       │   │       │   ├── nodescriptionempty/
│       │   │       │   │   └── nodescriptionempty.go
│       │   │       │   ├── nokeys/
│       │   │       │   │   └── nokeys.go
│       │   │       │   ├── single/
│       │   │       │   │   └── single.go
│       │   │       │   ├── unexportedkeys/
│       │   │       │   │   └── unexportedkeys.go
│       │   │       │   └── withtests/
│       │   │       │       ├── withtests.go
│       │   │       │       └── withtests_test.go
│       │   │       └── walk.go
│       │   └── go.mod
│       ├── pylintrc
│       ├── update_project_version.py
│       └── win32/
│           └── entropy/
│               ├── Aggregator.cpp
│               ├── Aggregator.h
│               ├── Counter.cpp
│               ├── Counter.h
│               ├── CounterManager.cpp
│               ├── CounterManager.h
│               ├── Error.cpp
│               ├── Error.h
│               ├── Makefile
│               ├── Network.cpp
│               ├── Protocol.cpp
│               ├── Protocol.h
│               ├── Slotter.cpp
│               ├── Slotter.h
│               ├── astylerc
│               ├── client.c
│               ├── resources.rc
│               └── server.cpp
├── core/
│   ├── .editorconfig
│   ├── .gitignore
│   ├── .golangci.yml
│   ├── Makefile
│   ├── README.md
│   ├── cmd/
│   │   ├── cms/
│   │   │   └── main.go
│   │   ├── errorgen/
│   │   │   ├── .gitignore
│   │   │   ├── Makefile
│   │   │   ├── gen.tmpl
│   │   │   ├── gen_test.go
│   │   │   ├── generate.go
│   │   │   ├── gentmpl.sh
│   │   │   ├── main.go
│   │   │   ├── resolve.go
│   │   │   ├── testdata/
│   │   │   │   ├── declared/
│   │   │   │   │   └── declared.go
│   │   │   │   ├── duplicate/
│   │   │   │   │   └── duplicate.go
│   │   │   │   ├── empty/
│   │   │   │   │   └── empty.go
│   │   │   │   ├── exists/
│   │   │   │   │   └── exists.go
│   │   │   │   ├── local/
│   │   │   │   │   └── local.go
│   │   │   │   ├── nokeys/
│   │   │   │   │   └── nokeys.go
│   │   │   │   ├── single/
│   │   │   │   │   └── single.go
│   │   │   │   ├── unexportedkeys/
│   │   │   │   │   └── unexportedkeys.go
│   │   │   │   └── withtests/
│   │   │   │       ├── withtests.go
│   │   │   │       └── withtests_test.go
│   │   │   └── walk.go
│   │   └── ts/
│   │       └── main.go
│   ├── common/
│   │   ├── files/
│   │   │   └── files.go
│   │   └── tar/
│   │       ├── tar.go
│   │       └── tar_test.go
│   ├── crypto/
│   │   ├── asn1/
│   │   │   └── asn1.go
│   │   ├── cades/
│   │   │   ├── cades-b.go
│   │   │   ├── cades-t.go
│   │   │   ├── cades_test.go
│   │   │   └── testdata/
│   │   │       ├── demo-ca-cert.pem
│   │   │       ├── demo-user-cert.pem
│   │   │       ├── plain-signed-attr.cms
│   │   │       └── plain-unsigned.txt
│   │   ├── cms/
│   │   │   ├── cms.go
│   │   │   ├── cms_test.go
│   │   │   ├── conf.go
│   │   │   └── testdata/
│   │   │       ├── nottrusted.pem
│   │   │       ├── test1.txt
│   │   │       ├── test1.txt.pk7
│   │   │       ├── test2.txt.pk7
│   │   │       └── trusted.pem
│   │   ├── crypto.go
│   │   ├── ecdsa/
│   │   │   ├── ecdsa.go
│   │   │   └── ecdsa_test.go
│   │   ├── elgamal/
│   │   │   ├── ciphertext.go
│   │   │   ├── decryption.go
│   │   │   ├── distributed/
│   │   │   │   ├── distributed.go
│   │   │   │   ├── distributed_test.go
│   │   │   │   ├── parameters.go
│   │   │   │   └── x509/
│   │   │   │       ├── pkcs8.go
│   │   │   │       └── x509.go
│   │   │   ├── elgamal.go
│   │   │   ├── elgamal_test.go
│   │   │   ├── homomorphic/
│   │   │   │   ├── homomorphic.go
│   │   │   │   └── homomorphic_test.go
│   │   │   ├── internal/
│   │   │   │   └── x509/
│   │   │   │       └── x509.go
│   │   │   ├── nizkp/
│   │   │   │   ├── ciphertext/
│   │   │   │   │   └── ciphertext.go
│   │   │   │   ├── key/
│   │   │   │   │   └── key.go
│   │   │   │   └── nizkp.go
│   │   │   ├── parameters.go
│   │   │   ├── proof.go
│   │   │   ├── shamir/
│   │   │   │   └── doc.go
│   │   │   └── x509/
│   │   │       ├── pkcs8.go
│   │   │       └── x509.go
│   │   ├── ocsp/
│   │   │   ├── conf.go
│   │   │   ├── ocsp.go
│   │   │   ├── ocsp_test.go
│   │   │   └── testdata/
│   │   │       ├── TESTCERT_GOOD_12345678901-sign.pem
│   │   │       ├── TESTCERT_REVOKED_12345678902-sign.pem
│   │   │       ├── TESTCERT_UNKNOWN_12345678903-sign.pem
│   │   │       ├── TEST_of_SK_OCSP_RESPONDER_2020.pem
│   │   │       ├── intermediate.pem
│   │   │       ├── response-good.der
│   │   │       ├── response-revoked.der
│   │   │       └── response-unknown.der
│   │   ├── timestamp/
│   │   │   ├── conf.go
│   │   │   ├── testdata/
│   │   │   │   ├── DEMO_SK_TIMESTAMPING_AUTHORITY_2020.pem
│   │   │   │   ├── response_1_test
│   │   │   │   ├── response_2_test
│   │   │   │   ├── response_3_test
│   │   │   │   ├── response_4_test
│   │   │   │   ├── response_5_test
│   │   │   │   ├── test_file_1
│   │   │   │   ├── test_file_2
│   │   │   │   ├── test_file_3
│   │   │   │   ├── test_file_4
│   │   │   │   └── test_file_5
│   │   │   ├── timestamp.go
│   │   │   └── timestamp_test.go
│   │   ├── util/
│   │   │   └── util.go
│   │   └── x509/
│   │       ├── encrypted_pkcs8.go
│   │       ├── internal/
│   │       │   ├── internal.go
│   │       │   ├── pem.go
│   │       │   └── pki.go
│   │       ├── marshal/
│   │       │   └── marshal.go
│   │       ├── pkcs8.go
│   │       ├── x509.go
│   │       └── x509_test.go
│   ├── encoding/
│   │   └── asn1/
│   │       └── asn1.go
│   ├── go.mod
│   ├── go.sum
│   ├── govar.mk
│   ├── math/
│   │   ├── group/
│   │   │   ├── all/
│   │   │   │   └── all.go
│   │   │   ├── ecqp/
│   │   │   │   ├── ecqp.go
│   │   │   │   ├── element.go
│   │   │   │   ├── element_test.go
│   │   │   │   ├── group.go
│   │   │   │   ├── group_encode_p384_7_test.go
│   │   │   │   ├── group_pad_byte_p384_7_test.go
│   │   │   │   ├── group_test.go
│   │   │   │   └── wellknown.go
│   │   │   ├── edwards25519/
│   │   │   │   └── edwards25519.go
│   │   │   ├── group.go
│   │   │   ├── group_test.go
│   │   │   ├── internal/
│   │   │   │   ├── errors.go
│   │   │   │   └── internal.go
│   │   │   ├── modqp/
│   │   │   │   ├── element.go
│   │   │   │   ├── group.go
│   │   │   │   ├── group_test.go
│   │   │   │   ├── modqp.go
│   │   │   │   └── wellknown.go
│   │   │   ├── padding.go
│   │   │   ├── registry.go
│   │   │   ├── scalar.go
│   │   │   └── scalar_test.go
│   │   ├── math.go
│   │   ├── math_test.go
│   │   └── polynomial/
│   │       ├── polynomial.go
│   │       └── polynomial_test.go
│   ├── test/
│   │   └── fixtures/
│   │       └── fixtures.go
│   ├── version.go
│   └── voterlist/
│       ├── persistence/
│       │   ├── bitcask.go
│       │   ├── bolt.go
│       │   └── factory.go
│       └── voterlist.go
├── debian/
│   ├── .gitignore
│   ├── changelog
│   ├── control
│   ├── copyright
│   ├── ivxv-admin.cron.d
│   ├── ivxv-admin.install
│   ├── ivxv-admin.ivxv-admin-agent.service
│   ├── ivxv-admin.lintian-overrides
│   ├── ivxv-admin.postinst
│   ├── ivxv-admin.postrm
│   ├── ivxv-admin.service
│   ├── ivxv-backup.install
│   ├── ivxv-backup.lintian-overrides
│   ├── ivxv-backup.postinst
│   ├── ivxv-backup.postrm
│   ├── ivxv-choices.install
│   ├── ivxv-choices.lintian-overrides
│   ├── ivxv-choices.postinst
│   ├── ivxv-choices.postrm
│   ├── ivxv-common.install
│   ├── ivxv-common.lintian-overrides
│   ├── ivxv-common.postinst
│   ├── ivxv-common.postrm
│   ├── ivxv-log.install
│   ├── ivxv-log.postinst
│   ├── ivxv-log.postrm
│   ├── ivxv-mid.install
│   ├── ivxv-mid.lintian-overrides
│   ├── ivxv-mid.postinst
│   ├── ivxv-mid.postrm
│   ├── ivxv-proxy.install
│   ├── ivxv-proxy.lintian-overrides
│   ├── ivxv-proxy.postinst
│   ├── ivxv-proxy.postrm
│   ├── ivxv-sessionstatus.install
│   ├── ivxv-sessionstatus.lintian-overrides
│   ├── ivxv-sessionstatus.postinst
│   ├── ivxv-sessionstatus.postrm
│   ├── ivxv-smartid.install
│   ├── ivxv-smartid.lintian-overrides
│   ├── ivxv-smartid.postinst
│   ├── ivxv-smartid.postrm
│   ├── ivxv-storage.install
│   ├── ivxv-storage.lintian-overrides
│   ├── ivxv-storage.postinst
│   ├── ivxv-storage.postrm
│   ├── ivxv-verification.install
│   ├── ivxv-verification.lintian-overrides
│   ├── ivxv-verification.postinst
│   ├── ivxv-verification.postrm
│   ├── ivxv-votesorder.install
│   ├── ivxv-votesorder.lintian-overrides
│   ├── ivxv-votesorder.postinst
│   ├── ivxv-votesorder.postrm
│   ├── ivxv-voting.install
│   ├── ivxv-voting.lintian-overrides
│   ├── ivxv-voting.postinst
│   ├── ivxv-voting.postrm
│   ├── ivxv-webeid.install
│   ├── ivxv-webeid.lintian-overrides
│   ├── ivxv-webeid.postinst
│   ├── ivxv-webeid.postrm
│   ├── python3-ivxv-common.install
│   ├── python3-ivxv-common.postinst
│   ├── python3-ivxv-common.prerm
│   └── rules
├── key/
│   ├── .gitignore
│   ├── Makefile
│   ├── README.rst
│   ├── build.gradle
│   ├── settings.gradle
│   ├── src/
│   │   └── main/
│   │       └── java/
│   │           └── ee/
│   │               └── ivxv/
│   │                   └── key/
│   │                       ├── Key.java
│   │                       ├── KeyApp.java
│   │                       ├── KeyContext.java
│   │                       ├── Msg.java
│   │                       ├── RandomSourceArg.java
│   │                       ├── model/
│   │                       │   ├── Invalid.java
│   │                       │   ├── PlainBallotBox.java
│   │                       │   ├── Tally.java
│   │                       │   └── Vote.java
│   │                       ├── protocol/
│   │                       │   ├── DecryptionProtocol.java
│   │                       │   ├── GenerationProtocol.java
│   │                       │   ├── ProtocolException.java
│   │                       │   ├── ProtocolUtil.java
│   │                       │   ├── SigningProtocol.java
│   │                       │   ├── ThresholdParameters.java
│   │                       │   ├── decryption/
│   │                       │   │   ├── desmedt/
│   │                       │   │   │   └── DesmedtDecryption.java
│   │                       │   │   └── recover/
│   │                       │   │       └── RecoverDecryption.java
│   │                       │   ├── generation/
│   │                       │   │   ├── desmedt/
│   │                       │   │   │   └── DesmedtGeneration.java
│   │                       │   │   ├── pedersen/
│   │                       │   │   │   └── NOTIMPLEMENTED
│   │                       │   │   └── shoup/
│   │                       │   │       └── ShoupGeneration.java
│   │                       │   └── signing/
│   │                       │       └── shoup/
│   │                       │           └── ShoupSigning.java
│   │                       ├── tool/
│   │                       │   ├── DecryptTool.java
│   │                       │   ├── GroupGenTool.java
│   │                       │   ├── InitTool.java
│   │                       │   ├── TestKeyTool.java
│   │                       │   └── UtilTool.java
│   │                       └── util/
│   │                           ├── ElectionResult.java
│   │                           └── QuorumUtil.java
│   └── tools/
│       └── pkcs15_initialization/
│           ├── README.rst
│           ├── card_options.conf
│           ├── erase_and_install.sh
│           └── erase_pkcs15.sh
├── mid/
│   ├── .gitignore
│   ├── Makefile
│   ├── README.rst
│   ├── go.mod
│   ├── go.sum
│   ├── internal/
│   │   └── sessionstatus/
│   │       └── rpc/
│   │           ├── client.go
│   │           └── log_desc.go
│   └── service/
│       └── mid/
│           ├── log_desc.go
│           └── main.go
├── processor/
│   ├── .gitignore
│   ├── Makefile
│   ├── README.rst
│   ├── build.gradle
│   ├── settings.gradle
│   └── src/
│       └── main/
│           └── java/
│               └── ee/
│                   └── ivxv/
│                       └── processor/
│                           ├── Msg.java
│                           ├── Processor.java
│                           ├── ProcessorApp.java
│                           ├── ProcessorContext.java
│                           ├── tool/
│                           │   ├── AnonymizeTool.java
│                           │   ├── CheckAndSquashTool.java
│                           │   ├── CheckTool.java
│                           │   ├── ExportTool.java
│                           │   ├── RevokeAndAnonymizeTool.java
│                           │   ├── RevokeTool.java
│                           │   ├── SquashTool.java
│                           │   ├── StatsDiffTool.java
│                           │   └── StatsTool.java
│                           └── util/
│                               ├── DistrictsMapper.java
│                               ├── ReportHelper.java
│                               ├── Statistics.java
│                               └── VotersUtil.java
├── proxy/
│   ├── .gitignore
│   ├── Makefile
│   ├── README.rst
│   ├── go.mod
│   └── service/
│       └── proxy/
│           ├── haproxy-rsyslog.conf
│           ├── haproxy.cfg.tmpl
│           ├── haproxy.go
│           ├── log_desc.go
│           └── main.go
├── scripts/
│   └── goimports.sh
├── sessionstatus/
│   ├── .gitignore
│   ├── Makefile
│   ├── README.rst
│   ├── api/
│   │   ├── Makefile
│   │   ├── README.rst
│   │   ├── go.mod
│   │   ├── go.sum
│   │   └── rpc/
│   │       ├── builder.go
│   │       ├── builder_test.go
│   │       ├── client.go
│   │       ├── dto.go
│   │       ├── endpoints.go
│   │       ├── log_desc.go
│   │       ├── rpc.go
│   │       ├── util.go
│   │       └── util_test.go
│   ├── go.mod
│   ├── go.sum
│   ├── internal/
│   │   └── rpc/
│   │       ├── log_desc.go
│   │       ├── repository.go
│   │       ├── server.go
│   │       ├── util.go
│   │       └── util_test.go
│   └── service/
│       └── sessionstatus/
│           ├── log_desc.go
│           └── main.go
├── setup.cfg
├── setup.py
├── smartid/
│   ├── .gitignore
│   ├── Makefile
│   ├── README.rst
│   ├── go.mod
│   ├── go.sum
│   ├── internal/
│   │   └── sessionstatus/
│   │       └── rpc/
│   │           ├── client.go
│   │           └── log_desc.go
│   └── service/
│       └── smartid/
│           ├── log_desc.go
│           └── main.go
├── storage/
│   ├── .gitignore
│   ├── Makefile
│   ├── README.rst
│   ├── cmd/
│   │   ├── storageidx/
│   │   │   ├── log_desc.go
│   │   │   └── main.go
│   │   └── storageorder/
│   │       ├── log_desc.go
│   │       └── main.go
│   ├── go.mod
│   ├── go.sum
│   └── service/
│       └── storage/
│           ├── cluster.go
│           ├── log_desc.go
│           ├── logger.go
│           └── main.go
├── systemd/
│   ├── .gitignore
│   ├── Makefile
│   ├── README.rst
│   └── ivxv-$service@.service.in
├── verification/
│   ├── .gitignore
│   ├── Makefile
│   ├── README.rst
│   ├── go.mod
│   ├── go.sum
│   ├── internal/
│   │   └── sessionstatus/
│   │       └── rpc/
│   │           ├── client.go
│   │           └── log_desc.go
│   └── service/
│       └── verification/
│           ├── log_desc.go
│           └── main.go
├── votesorder/
│   ├── .gitignore
│   ├── Makefile
│   ├── README.rst
│   ├── go.mod
│   ├── go.sum
│   └── service/
│       └── votesorder/
│           ├── log_desc.go
│           └── main.go
├── voting/
│   ├── .gitignore
│   ├── Makefile
│   ├── README.rst
│   ├── cmd/
│   │   ├── voteexp/
│   │   │   ├── log_desc.go
│   │   │   └── main.go
│   │   ├── voterstats/
│   │   │   ├── log_desc.go
│   │   │   ├── main.go
│   │   │   ├── period.go
│   │   │   └── period_test.go
│   │   └── voteunion/
│   │       ├── main.go
│   │       └── union_test.go
│   ├── go.mod
│   ├── go.sum
│   ├── internal/
│   │   ├── ciphertext.go
│   │   └── sessionstatus/
│   │       └── rpc/
│   │           ├── client.go
│   │           └── log_desc.go
│   └── service/
│       └── voting/
│           ├── log_desc.go
│           ├── main.go
│           ├── testdata/
│           │   ├── eligible.pem
│           │   └── ineligible.pem
│           └── voting_test.go
├── webeid/
│   ├── .gitignore
│   ├── Makefile
│   ├── go.mod
│   ├── go.sum
│   ├── internal/
│   │   └── sessionstatus/
│   │       └── rpc/
│   │           ├── client.go
│   │           └── log_desc.go
│   └── service/
│       └── webeid/
│           ├── handler.go
│           ├── log_desc.go
│           ├── main.go
│           └── util.go
└── xroad-service/
    ├── .gitignore
    ├── .goreleaser.yml
    ├── Makefile
    ├── README.rst
    ├── cmd/
    │   └── main.go
    ├── go.mod
    ├── go.sum
    ├── init/
    │   └── systemd/
    │       └── xroad-service.service
    ├── openapi/
    │   └── ehs-xroad-api.yaml
    ├── pkg/
    │   ├── conf/
    │   │   └── conf.go
    │   ├── configs/
    │   │   └── xroad-service.json
    │   ├── errors/
    │   │   ├── errors.go
    │   │   └── errors_test.go
    │   ├── server/
    │   │   └── handler.go
    │   └── service/
    │       └── service.go
    └── scripts/
        ├── postinstall.sh
        ├── postremove.sh
        └── preremove.sh
Download .txt
Showing preview only (588K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (6421 symbols across 627 files)

FILE: Documentation/common/schema/validate_schema.py
  function main (line 15) | def main():

FILE: Documentation/conf.py
  function detect_language (line 21) | def detect_language():

FILE: Documentation/documents.py
  function get (line 258) | def get(doc, meta, language):
  function print_table_header (line 262) | def print_table_header():
  function print_document (line 276) | def print_document(doc, lang='et'):

FILE: Documentation/en/backendlogs/create_rst.py
  function rstescape (line 14) | def rstescape(txt):
  function parse_structs (line 21) | def parse_structs(file_content):
  function output_section_common (line 55) | def output_section_common(common_modules, rst, h2_common, h3_common, text):
  function output_section_unique (line 79) | def output_section_unique(unique_modules, rst, h2_unique, h3_unique):
  function output_intro (line 99) | def output_intro(rst, h1, content_file):
  function categorize_event (line 114) | def categorize_event(pkg, evt, item, exclusions, events_dicts):
  function analyze_src (line 131) | def analyze_src(src_dir, target_file, exclusions=None):
  function remove_common (line 160) | def remove_common(events):

FILE: Documentation/podl/podl.py
  class Translator (line 33) | class Translator:
    method __init__ (line 35) | def __init__(self, api, source, target, force):
    method translate (line 41) | def translate(self, source_msg):
  function process_file (line 51) | def process_file(filename, translator, fuzzy):

FILE: auditor/src/main/java/ee/ivxv/audit/Audit.java
  class Audit (line 5) | public class Audit {
    method main (line 7) | public static void main(String[] args) {

FILE: auditor/src/main/java/ee/ivxv/audit/AuditApp.java
  class AuditApp (line 19) | class AuditApp extends App<AuditContext> {
    method AuditApp (line 21) | AuditApp() {
    method createTools (line 25) | private static List<Tool<AuditContext, ?>> createTools() {
    method createContext (line 33) | @Override

FILE: auditor/src/main/java/ee/ivxv/audit/AuditContext.java
  class AuditContext (line 8) | public class AuditContext extends AppContext<Conf> {
    method AuditContext (line 10) | public AuditContext(InitialContext i, Conf conf, CommonArgs args) {

FILE: auditor/src/main/java/ee/ivxv/audit/Msg.java
  type Msg (line 7) | @BaseName("i18n.audit-msg")
    method Msg (line 68) | Msg() {
    method Msg (line 72) | Msg(String shortName) {
    method getShortName (line 76) | @Override
    method getName (line 81) | @Override
    method getKey (line 86) | @Override

FILE: auditor/src/main/java/ee/ivxv/audit/model/PlainBallotBox.java
  method PlainBallotBox (line 17) | @JsonCreator
  method computeByDistrict (line 26) | public Map<String, List<String>> computeByDistrict() {

FILE: auditor/src/main/java/ee/ivxv/audit/model/Tally.java
  class Tally (line 16) | public class Tally {
    method Tally (line 23) | @JsonCreator Tally(@JsonProperty("election") String election,
    method getElection (line 36) | public String getElection() {
    method getByParish (line 44) | public Map<String, Map<String, Map<String, Integer>>> getByParish() {
    method getByDistrict (line 52) | public Map<String, Map<String, Integer>> getByDistrict() {
    method computeByDistrict (line 56) | public Map<String, Map<String, Integer>> computeByDistrict() {

FILE: auditor/src/main/java/ee/ivxv/audit/shuffle/ByteTree.java
  class ByteTree (line 24) | public class ByteTree {
    method getLength (line 25) | public int getLength() {
    method getEncodedLength (line 29) | public int getEncodedLength() {
    method getEncoded (line 33) | public byte[] getEncoded() {
    method writeEncoded (line 37) | public void writeEncoded(OutputStream out) throws IOException {
    method isLeaf (line 41) | public boolean isLeaf() {
    method getPrefix (line 45) | public String getPrefix() {
    method toString (line 49) | public String toString(int indent) {
    method toString (line 53) | @Override
    class Node (line 61) | public static class Node extends ByteTree {
      method Node (line 71) | public Node(ByteTree[] nodes) {
      method Node (line 80) | public Node(BigInteger[] ints) {
      method Node (line 92) | public Node(GroupElement[] elements) {
      method Node (line 112) | public Node(ProductGroupElement element) {
      method Node (line 133) | public Node(ECGroupElement ec) {
      method getNodes (line 151) | public ByteTree[] getNodes() {
      method getLength (line 160) | @Override
      method getEncodedLength (line 170) | @Override
      method getEncoded (line 184) | @Override
      method writeEncoded (line 204) | @Override
      method isLeaf (line 216) | @Override
      method parse (line 228) | public static Node parse(byte[] b, int offset) {
      method parse (line 250) | public static Node parse(DataInputStream is) throws IOException {
      method getPrefix (line 263) | @Override
      method toString (line 274) | @Override
      method ecFieldElementToLeaf (line 295) | private byte[] ecFieldElementToLeaf(final int fieldSize, final ECFie...
    class Leaf (line 316) | public static class Leaf extends ByteTree {
      method Leaf (line 325) | public Leaf(byte[] value) {
      method Leaf (line 334) | public Leaf(String value) {
      method Leaf (line 349) | public Leaf(BigInteger value) {
      method Leaf (line 358) | public Leaf(GroupElement value) {
      method getValue (line 375) | public byte[] getValue() {
      method getString (line 384) | public String getString() {
      method getBigInteger (line 393) | public BigInteger getBigInteger() {
      method getLength (line 402) | @Override
      method getEncodedLength (line 412) | @Override
      method getEncoded (line 422) | @Override
      method writeEncoded (line 437) | @Override
      method getEncoded (line 444) | private byte[] getEncoded(ModPGroupElement value) {
      method getEncoded (line 454) | private byte[] getEncoded(ECGroupElement v) {
      method isLeaf (line 461) | @Override
      method parse (line 473) | public static Leaf parse(byte[] b, int offset) {
      method parse (line 489) | public static Leaf parse(DataInputStream is) throws IOException {
      method getPrefix (line 504) | @Override
      method toString (line 514) | @Override
    method parse (line 530) | public static ByteTree parse(byte[] b, int offset) {
    method parse (line 556) | public static ByteTree parse(DataInputStream is) throws IOException {
    method parse (line 575) | public static ByteTree parse(byte[] b) {
    method parse (line 591) | public static ByteTree parse(Path path) throws IOException {
    method parse_int (line 605) | private static int parse_int(byte[] b, int offset) {
    method parse_int_fullbytes (line 612) | private static int parse_int_fullbytes(byte[] b, int offset) {
    method parse_from_int (line 617) | private static byte[] parse_from_int(int v) {
    method read_length (line 621) | private static int read_length(DataInputStream is) throws IOException {

FILE: auditor/src/main/java/ee/ivxv/audit/shuffle/DataParser.java
  class DataParser (line 21) | public class DataParser {
    method unmarshalGroup (line 42) | public static ByteTree[] unmarshalGroup(String pgroup) throws ShuffleE...
    method parseECGroupGenerator (line 75) | public static ECGroupElement parseECGroupGenerator(ByteTree groupRoot)
    method parseECGroup (line 96) | public static ECGroup parseECGroup(ByteTree groupRoot)
    method parseModPGroupGenerator (line 112) | public static ModPGroupElement parseModPGroupGenerator(ByteTree groupR...
    method parseModPGroup (line 146) | public static ModPGroup parseModPGroup(ByteTree groupRoot) throws Shuf...
    method parseGroupGenerator (line 161) | public static GroupElement parseGroupGenerator(String pgroup) throws S...
    method getAsElement (line 194) | public static GroupElement getAsElement(Group group, ByteTree bt)
    method getAsElement (line 221) | public static GroupElement getAsElement(Group group, ByteTree bt, int ...
    method getAsElement (line 241) | public static ModPGroupElement getAsElement(ModPGroup group, ByteTree bt)
    method getAsElement (line 258) | public static ECGroupElement getAsElement(ECGroup group, ByteTree bt) {
    method getAsElement (line 276) | public static ProductGroupElement getAsElement(ProductGroup group, Byt...
    method getAsElementArray (line 303) | public static GroupElement[] getAsElementArray(Group group, ByteTree bt)
    method getAsElementArray (line 335) | public static GroupElement[] getAsElementArray(ProductGroup group, Byt...
    method getAsElementArray (line 368) | public static GroupElement[] getAsElementArray(Group group, ByteTree b...
    method getAsInteger (line 387) | public static BigInteger getAsInteger(ByteTree bt, int index) throws I...
    method getAsIntegerArray (line 410) | public static BigInteger[] getAsIntegerArray(ByteTree bt, int index)
    method getAsScalar (line 444) | public static BigInteger[] getAsScalar(Group group, ByteTree bt, int i...
    method getHash (line 475) | public static MessageDigest getHash(String hashname) throws IllegalArg...
    method toArray (line 496) | public static ProductGroupElement toArray(GroupElement[] elements)
    method toArray (line 517) | public static ProductGroupElement toArray(ProductGroupElement[] elemen...
    method toArray_first (line 525) | private static ProductGroupElement toArray_first(ProductGroupElement i...
    method toArray_second (line 540) | private static void toArray_second(ProductGroupElement out, ProductGro...

FILE: auditor/src/main/java/ee/ivxv/audit/shuffle/PRNG.java
  class PRNG (line 10) | public class PRNG {
    method PRNG (line 23) | PRNG(String hashname, byte[] seed) {
    method read (line 36) | public void read(byte[] out) {
    method refill (line 49) | private void refill() {
    method init_hash (line 65) | static MessageDigest init_hash(String hashname, byte[] seed) {

FILE: auditor/src/main/java/ee/ivxv/audit/shuffle/ProtocolInformation.java
  class ProtocolInformation (line 19) | public class ProtocolInformation {
    method ProtocolInformation (line 44) | public ProtocolInformation(String version, String sid, String name, St...
    method ProtocolInformation (line 67) | public ProtocolInformation(Path protinfo) throws ShuffleException {
    method get_element (line 117) | private static String get_element(Element node, String name) {
    method get_version (line 138) | public String get_version() {
    method get_sid (line 142) | public String get_sid() {
    method get_auxsid (line 146) | public String get_auxsid() {
    method get_name (line 150) | public String get_name() {
    method get_pgroup (line 154) | public String get_pgroup() {
    method get_parsed_pgroup (line 158) | public Group get_parsed_pgroup() {
    method get_parsed_generator (line 162) | public GroupElement get_parsed_generator() {
    method get_keywidth (line 166) | public int get_keywidth() {
    method get_vbitlenro (line 170) | public int get_vbitlenro() {
    method get_ebitlenro (line 174) | public int get_ebitlenro() {
    method get_prg (line 178) | public String get_prg() {
    method get_rohash (line 182) | public String get_rohash() {
    method get_width (line 186) | public int get_width() {
    method get_statdist (line 190) | public int get_statdist() {
    method get_type (line 194) | public String get_type() {

FILE: auditor/src/main/java/ee/ivxv/audit/shuffle/RO.java
  class RO (line 11) | public class RO extends OutputStream {
    method RO (line 23) | public RO(String hashname, byte[] seed) {
    method RO (line 37) | public RO(String hashname) {
    method flush (line 46) | public void flush() {
    method setAmount (line 59) | public void setAmount(int amount) {
    method readOut (line 66) | private void readOut(byte[] out) {
    method read (line 88) | public void read(byte[] out, int amount) {
    method write (line 110) | @Override
    method write (line 125) | @Override
    method write (line 141) | @Override

FILE: auditor/src/main/java/ee/ivxv/audit/shuffle/ShuffleConsole.java
  class ShuffleConsole (line 11) | public class ShuffleConsole {
    method ShuffleConsole (line 14) | public ShuffleConsole(I18nConsole console) {
    method enter (line 18) | public void enter(ShuffleStep step) {
    method enter (line 34) | public Progress enter(ShuffleStep step, long length) {
    type ShuffleStep (line 39) | public static enum ShuffleStep {
      method ShuffleStep (line 60) | ShuffleStep(Translatable msg) {
      method ShuffleStep (line 66) | ShuffleStep(String msg) {
      method ShuffleStep (line 72) | ShuffleStep(ShuffleStep parent, Translatable msg) {
      method getDepth (line 79) | int getDepth() {
      method appendSubStep (line 89) | void appendSubStep(ShuffleStep substep) {
      method subStepCount (line 93) | int subStepCount() {
      method nextSubStep (line 97) | int nextSubStep() {

FILE: auditor/src/main/java/ee/ivxv/audit/shuffle/ShuffleException.java
  class ShuffleException (line 3) | @SuppressWarnings("serial")
    method ShuffleException (line 5) | public ShuffleException(Throwable t) {
    method ShuffleException (line 9) | public ShuffleException(String msg) {
    method ShuffleException (line 13) | public ShuffleException(String msg, Throwable t) {

FILE: auditor/src/main/java/ee/ivxv/audit/shuffle/ShuffleParameters.java
  class ShuffleParameters (line 9) | public class ShuffleParameters {
    method ShuffleParameters (line 21) | ShuffleParameters(String version, String auxsid, int width, String typ...
    method ShuffleParameters (line 35) | ShuffleParameters(Path proofdir) throws IOException {
    method read_parameters (line 47) | private static String read_parameters(Path loc) throws IOException {
    method get_version (line 55) | public String get_version() {
    method get_auxsid (line 59) | public String get_auxsid() {
    method get_width (line 63) | public int get_width() {
    method get_type (line 67) | public String get_type() {

FILE: auditor/src/main/java/ee/ivxv/audit/shuffle/ShuffleProof.java
  class ShuffleProof (line 19) | public class ShuffleProof {
    method ShuffleProof (line 68) | public ShuffleProof(ProtocolInformation prot, PermutationCommitment pc...
    method ShuffleProof (line 90) | public ShuffleProof(ProtocolInformation prot, PermutationCommitment pc...
    method ShuffleProof (line 121) | public ShuffleProof(Path protpath, Path proofdir, ShuffleConsole conso...
    method get_ProtocolInformation (line 156) | public ProtocolInformation get_ProtocolInformation() {
    method get_PermutationCommitment (line 160) | public PermutationCommitment get_PermutationCommitment() {
    method get_PoSCommitment (line 164) | public PoSCommitment get_PoSCommitment() {
    method get_PoSReply (line 168) | public PoSReply get_PoSReply() {
    method get_ciphertexts (line 172) | public GroupElement[] get_ciphertexts() {
    method get_shuffled_ciphertexts (line 176) | public GroupElement[] get_shuffled_ciphertexts() {
    method get_publickey (line 180) | public GroupElement get_publickey() {
    method get_ciphertext_group (line 184) | private static ProductGroup get_ciphertext_group(ProtocolInformation p...
    class PermutationCommitment (line 193) | public static class PermutationCommitment {
      method PermutationCommitment (line 201) | PermutationCommitment(ProtocolInformation prot, byte[] bt) {
      method PermutationCommitment (line 214) | PermutationCommitment(ProtocolInformation prot, Path path) throws IO...
      method get_u (line 218) | public GroupElement[] get_u() {
    class PoSCommitment (line 226) | public static class PoSCommitment {
      method PoSCommitment (line 236) | PoSCommitment(ProtocolInformation prot, byte[] bt) {
      method PoSCommitment (line 255) | PoSCommitment(ProtocolInformation prot, Path path) throws IOException {
      method get_A_prim (line 259) | public GroupElement get_A_prim() {
      method get_C_prim (line 263) | public GroupElement get_C_prim() {
      method get_D_prim (line 267) | public GroupElement get_D_prim() {
      method get_B (line 271) | public GroupElement[] get_B() {
      method get_B_prim (line 275) | public GroupElement[] get_B_prim() {
      method get_F_prim (line 279) | public ProductGroupElement get_F_prim() {
    class PoSReply (line 287) | public static class PoSReply {
      method PoSReply (line 297) | PoSReply(ProtocolInformation prot, byte[] bt) {
      method PoSReply (line 316) | PoSReply(ProtocolInformation prot, Path path) throws IOException {
      method get_kA (line 320) | public BigInteger get_kA() {
      method get_kC (line 324) | public BigInteger get_kC() {
      method get_kD (line 328) | public BigInteger get_kD() {
      method get_kB (line 332) | public BigInteger[] get_kB() {
      method get_kE (line 336) | public BigInteger[] get_kE() {
      method get_kF (line 340) | public BigInteger[] get_kF() {

FILE: auditor/src/main/java/ee/ivxv/audit/shuffle/ThreadedVerifier.java
  class ThreadedVerifier (line 22) | public class ThreadedVerifier extends Verifier {
    method ThreadedVerifier (line 28) | public ThreadedVerifier(ShuffleConsole console, ShuffleProof proof, in...
    method compute_A_threaded (line 34) | public GroupElement compute_A_threaded(Progress progress, BigInteger[] e)
    method compute_F_threaded (line 40) | public GroupElement compute_F_threaded(Progress progress, BigInteger[] e)
    method verify_A_threaded (line 45) | public boolean verify_A_threaded(Progress progress, BigInteger v, Grou...
    method verify_B_threaded (line 53) | public boolean verify_B_threaded(Progress progress, BigInteger v, Grou...
    method verify_F_threaded (line 62) | public boolean verify_F_threaded(Progress progress, BigInteger v, Grou...
    method verify_all (line 70) | public boolean verify_all() throws ShuffleException, MathException {
    method compute_A (line 136) | private GroupElement compute_A(Progress progress, GroupElement[] u, Bi...
    method get_compute_A_worker (line 159) | private static Callable<GroupElement> get_compute_A_worker(Progress pr...
    method compute_F (line 176) | public GroupElement compute_F(Progress progress, GroupElement[] w, Big...
    method get_compute_F_worker (line 199) | private static Callable<GroupElement> get_compute_F_worker(Progress pr...
    method verify_A (line 216) | private boolean verify_A(Progress progress, BigInteger v, GroupElement...
    method get_verify_A_worker (line 245) | private static Callable<GroupElement> get_verify_A_worker(Progress pro...
    method verify_B (line 261) | private boolean verify_B(Progress progress, BigInteger v, GroupElement...
    method get_verify_B_worker (line 294) | private static Callable<Boolean> get_verify_B_worker(Progress progress...
    method verify_F (line 317) | private boolean verify_F(Progress progress, BigInteger v, GroupElement...
    method get_verify_F_worker (line 357) | private static Callable<GroupElement> get_verify_F_worker(Progress pro...

FILE: auditor/src/main/java/ee/ivxv/audit/shuffle/Verifier.java
  class Verifier (line 20) | public class Verifier {
    method Verifier (line 30) | public Verifier(ShuffleProof proof) {
    method Verifier (line 35) | public Verifier(ShuffleConsole console, ShuffleProof proof) {
    method get_proof (line 40) | public ShuffleProof get_proof() {
    method compute_rho (line 50) | public byte[] compute_rho() {
    method compute_RO_seed (line 77) | public byte[] compute_RO_seed(byte[] rho, GroupElement[] h) {
    method compute_e (line 125) | public BigInteger[] compute_e(byte[] s) {
    method compute_h (line 149) | public GroupElement[] compute_h(byte[] rho) {
    method compute_v (line 205) | public BigInteger compute_v(byte[] rho, byte[] s) {
    method compute_A (line 254) | public GroupElement compute_A(Progress progress, BigInteger[] e) throw...
    method compute_C (line 274) | public GroupElement compute_C(Progress progress, GroupElement[] h)
    method compute_D (line 309) | public GroupElement compute_D(Progress progress, GroupElement[] h, Big...
    method compute_F (line 346) | public GroupElement compute_F(Progress progress, BigInteger[] e) throw...
    method verify_A (line 371) | public boolean verify_A(Progress progress, BigInteger v, GroupElement ...
    method verify_B (line 400) | public boolean verify_B(Progress progress, BigInteger v, GroupElement[...
    method verify_C (line 430) | public boolean verify_C(Progress progress, BigInteger v, GroupElement ...
    method verify_D (line 451) | public boolean verify_D(Progress progress, BigInteger v, GroupElement ...
    method verify_F (line 472) | public boolean verify_F(Progress progress, BigInteger v, GroupElement ...
    method verify_all (line 518) | public boolean verify_all() throws ShuffleException, MathException {
    method verify_all (line 565) | public boolean verify_all(boolean throwexception) {

FILE: auditor/src/main/java/ee/ivxv/audit/tools/ConvertTool.java
  class ConvertTool (line 36) | public class ConvertTool implements Tool.Runner<ConvertArgs> {
    class ConvertArgs (line 37) | public static class ConvertArgs extends Args {
      method ConvertArgs (line 44) | public ConvertArgs() {
    method ConvertTool (line 59) | public ConvertTool(AuditContext ctx) {
    method run (line 66) | @Override
    method verifyPublickey (line 99) | public static boolean verifyPublickey(ElGamalPublicKey pk, ShuffleProo...
    method verifyBallotboxToBytetree (line 110) | public static boolean verifyBallotboxToBytetree(ElGamalPublicKey pk, A...
    method verifyBytetreeToBallotbox (line 137) | public static boolean verifyBytetreeToBallotbox(ElGamalPublicKey pk, S...
    method convertBallotboxToBytetree (line 199) | private static GroupElement[] convertBallotboxToBytetree(ElGamalPublic...
    method convertStringToProductGroupElement (line 222) | private static ProductGroupElement convertStringToProductGroupElement(...
    method convertBytetreeToBallotbox (line 237) | private static AnonymousBallotBox convertBytetreeToBallotbox(ElGamalPu...
    method convertProductGroupElementToString (line 291) | private static String convertProductGroupElementToString(ElGamalPublic...
    method convertPublickeyToBytetree (line 301) | private static GroupElement convertPublickeyToBytetree(ElGamalPublicKe...

FILE: auditor/src/main/java/ee/ivxv/audit/tools/DecryptTool.java
  class DecryptTool (line 46) | public class DecryptTool implements Tool.Runner<DecryptArgs> {
    method DecryptTool (line 53) | public DecryptTool(AuditContext ctx) {
    method run (line 59) | @Override
    method getYesNoMessage (line 225) | private Msg getYesNoMessage(boolean success) {
    method printFailure (line 230) | private void printFailure() {
    method isAnonBBEmpty (line 236) | private boolean isAnonBBEmpty(AnonymousBallotBox abb) {
    method getDiscardedCiphers (line 260) | private Bag<String> getDiscardedCiphers(Path path) throws Exception {
    method processVerification (line 292) | private boolean processVerification(Proof proofs, ElGamalPublicKey pub...
    method verifyPlaintexts (line 330) | private boolean verifyPlaintexts(ElGamalPublicKey pub, AnonymousBallot...
    method verifyTally (line 393) | private boolean verifyTally(PlainBallotBox pbb, Path tallyPath) throws...
    method isValidChoice (line 459) | private boolean isValidChoice(Plaintext pt, String district, Candidate...
    method verifyDecryption (line 493) | private InvalidDecProofs verifyDecryption(Proof input, ElGamalPublicKe...
    method getVerifyConsumer (line 520) | private Consumer<Proof.ProofJson> getVerifyConsumer(ElGamalPublicKey pub,
    method verifyCiphersInBb (line 553) | private boolean verifyCiphersInBb(AnonymousBallotBox abb, Bag<String> ...
    method verifyInvalidConsistency (line 580) | private boolean verifyInvalidConsistency(Bag<String> discardedCiphers,...
    method logMissingBallots (line 600) | private void logMissingBallots(Collection<String> b64CTs) {
    method verifyValidConsistency (line 617) | private boolean verifyValidConsistency(ElGamalPublicKey pub, Proof pro...
    method verifyInputFiles (line 663) | private boolean verifyInputFiles(DecryptArgs args) {
    class DecryptArgs (line 688) | public static class DecryptArgs extends Args {
      method DecryptArgs (line 701) | public DecryptArgs() {
    class WorkManager (line 717) | private class WorkManager implements Callable<Void> {
      method WorkManager (line 723) | WorkManager(Proof in, Consumer<Proof.ProofJson> consumer, ExecutorSe...
      method call (line 731) | @Override

FILE: auditor/src/main/java/ee/ivxv/audit/tools/IntegrityTool.java
  class IntegrityTool (line 31) | public class IntegrityTool implements Tool.Runner<IntegrityArgs> {
    method IntegrityTool (line 49) | public IntegrityTool(AuditContext ctx) {
    method run (line 54) | @Override
    method getYesNoMessage (line 165) | private Msg getYesNoMessage(boolean success) {
    method getBallots (line 170) | private List<RawBallotWithDigest> getBallots(IntegrityArgs args) {
    method getBallotContainerId (line 215) | private static String getBallotContainerId(String fileName) throws Exc...
    method getValidInvalidSums (line 234) | private BbDigests getValidInvalidSums(List<RawBallotWithDigest> bb,
    method getBallotDigestsFromLog (line 312) | private List<byte[]> getBallotDigestsFromLog(Path path) throws Excepti...
    method getErroredBallotsNames (line 335) | private Set<String> getErroredBallotsNames(Path path) throws Exception {
    method sumHashes (line 353) | private static BigInteger sumHashes(List<byte[]> hashes) {
    method sumBbHashes (line 363) | private static BigInteger sumBbHashes(List<RawBallotWithDigest> bb) {
    method getAnonBbDigests (line 373) | private AnonBbDigests getAnonBbDigests(AnonymousBallotBox bb) {
    method matchHashesToBb (line 400) | private boolean matchHashesToBb(List<byte[]> digests, List<RawBallotWi...
    method verifyInputFiles (line 421) | private boolean verifyInputFiles(IntegrityArgs args) {
    class IntegrityArgs (line 443) | public static class IntegrityArgs extends Args {
      method IntegrityArgs (line 453) | public IntegrityArgs() {

FILE: auditor/src/main/java/ee/ivxv/audit/tools/MixerTool.java
  class MixerTool (line 20) | public class MixerTool implements Tool.Runner<MixerArgs> {
    class MixerArgs (line 24) | public static class MixerArgs extends Args {
      method MixerArgs (line 29) | public MixerArgs() {
    method MixerTool (line 37) | public MixerTool(AuditContext ctx) {
    method run (line 42) | @Override

FILE: auditor/src/main/java/ee/ivxv/audit/util/DiscardedBallot.java
  class DiscardedBallot (line 9) | public class DiscardedBallot {
    method DiscardedBallot (line 14) | @JsonCreator
    method getDiscarded (line 22) | public List<VoteJson> getDiscarded() {
    method getCount (line 26) | @JsonIgnore
    class VoteJson (line 31) | public static class VoteJson {
      method VoteJson (line 37) | @JsonCreator
      method getVote (line 49) | public byte[] getVote() {

FILE: auditor/src/main/java/ee/ivxv/audit/util/InvalidDecProofs.java
  class InvalidDecProofs (line 15) | public class InvalidDecProofs {
    method InvalidDecProofs (line 26) | public InvalidDecProofs(String electionName) {
    method getResultWorker (line 35) | public InvalidProofHandler getResultWorker() {
    method setEot (line 42) | public void setEot() {
    method addInvalidProof (line 51) | public void addInvalidProof(ElGamalDecryptionProof proof) {
    method getCount (line 60) | public int getCount() {
    method outputFailedProofsOfValidity (line 70) | public void outputFailedProofsOfValidity(Path outDir) throws Exception {
    method outputFailedProofsOfInvalidity (line 80) | public void outputFailedProofsOfInvalidity(Path outDir) throws Excepti...
    class InvalidProofHandler (line 84) | private class InvalidProofHandler implements Callable<Void> {
      method call (line 86) | @Override

FILE: auditor/src/main/java/ee/ivxv/audit/util/RawBallotWithDigest.java
  class RawBallotWithDigest (line 6) | public class RawBallotWithDigest {
    method RawBallotWithDigest (line 13) | public RawBallotWithDigest(byte[] ballot, String id) {
    method getId (line 19) | public String getId() {
    method getBallot (line 23) | public byte[] getBallot() {
    method getRawDigest (line 27) | public byte[] getRawDigest() {

FILE: choices/cmd/choiceimp/log_desc.go
  constant _CHOICES_VERSION_FROM_DB (line 4) | _CHOICES_VERSION_FROM_DB           = "Cannot fetch choices list version ...
  constant _CHOICES_LIST_BDOC_OPEN (line 5) | _CHOICES_LIST_BDOC_OPEN            = "Failed to open choices list BDOC c...
  constant _CHOICES_LIST_BDOC_NO_SIG (line 6) | _CHOICES_LIST_BDOC_NO_SIG          = "No signatures found in choices lis...
  constant _CHOICES_LIST_BDOC_SIG_INFO (line 7) | _CHOICES_LIST_BDOC_SIG_INFO        = "Choices list BDOC container signat...
  constant _CHOICES_LIST_BDOC_SIG_TO_JSON (line 8) | _CHOICES_LIST_BDOC_SIG_TO_JSON     = "Failed to JSON marshal choices lis...
  constant _CHOICES_LIST_BDOC_HAS_MANY_FILES (line 9) | _CHOICES_LIST_BDOC_HAS_MANY_FILES  = "Choices list BDOC container should...
  constant _CHOICES_LIST_READ (line 10) | _CHOICES_LIST_READ                 = "Reading choices list"
  constant _CHOICES_LIST_TO_DB_UPLOAD (line 11) | _CHOICES_LIST_TO_DB_UPLOAD         = "Failed to upload choices list to d...
  constant _CHOICES_LIST_INVALID_JSON (line 12) | _CHOICES_LIST_INVALID_JSON         = "Choices list has an invalid JSON f...
  constant _CHOICES_LIST_ID_MISMATCH (line 13) | _CHOICES_LIST_ID_MISMATCH          = "Choices list ID doesn't match the ...
  constant _CHOICES_LIST_PREPARE_UPLOAD_TO_DB (line 14) | _CHOICES_LIST_PREPARE_UPLOAD_TO_DB = "Choices list is ready to uploaded ...
  constant _CHOICES_LIST_UPLOAD_TO_DB_FAIL (line 15) | _CHOICES_LIST_UPLOAD_TO_DB_FAIL    = "Unable to upload choices list to d...

FILE: choices/cmd/choiceimp/main.go
  constant usage (line 26) | usage = `choiceimp loads choice lists into the collector's storage servi...
  function main (line 38) | func main() {
  function choiceimpmain (line 45) | func choiceimpmain() (code int) {
  type choicelist (line 130) | type choicelist struct
  function choiceimp (line 137) | func choiceimp(ctx context.Context, until int, c *conf.C, s *storage.Cli...

FILE: choices/cmd/districtimp/district_test.go
  function testDistrictsLookupFormatError (line 10) | func testDistrictsLookupFormatError(t *testing.T, id string) {
  function TestDistrictsLookupFormatError (line 20) | func TestDistrictsLookupFormatError(t *testing.T) {
  function TestDistrictsLookupMultipleCodes (line 27) | func TestDistrictsLookupMultipleCodes(t *testing.T) {
  function assertDistricts (line 45) | func assertDistricts(t *testing.T, districts map[string][]byte,
  function TestDistrictsLookup (line 61) | func TestDistrictsLookup(t *testing.T) {

FILE: choices/cmd/districtimp/log_desc.go
  constant _DISTRICTS_VERSION_FROM_DB (line 4) | _DISTRICTS_VERSION_FROM_DB                          = "Cannot fetch dist...
  constant _DISTRICTS_LIST_BDOC_OPEN (line 5) | _DISTRICTS_LIST_BDOC_OPEN                           = "Failed to open di...
  constant _DISTRICTS_LIST_BDOC_NO_SIG (line 6) | _DISTRICTS_LIST_BDOC_NO_SIG                         = "No signatures fou...
  constant _DISTRICTS_LIST_BDOC_SIG_INFO (line 7) | _DISTRICTS_LIST_BDOC_SIG_INFO                       = "Districts list BD...
  constant _DISTRICTS_LIST_BDOC_SIG_TO_JSON (line 8) | _DISTRICTS_LIST_BDOC_SIG_TO_JSON                    = "Failed to JSON ma...
  constant _DISTRICTS_LIST_BDOC_HAS_MANY_FILES (line 9) | _DISTRICTS_LIST_BDOC_HAS_MANY_FILES                 = "Districts list BD...
  constant _DISTRICTS_LIST_READ (line 10) | _DISTRICTS_LIST_READ                                = "Reading districts...
  constant _DISTRICTS_LIST_TO_DB_UPLOAD (line 11) | _DISTRICTS_LIST_TO_DB_UPLOAD                        = "Failed to upload ...
  constant _DISTRICTS_LIST_INVALID_JSON (line 12) | _DISTRICTS_LIST_INVALID_JSON                        = "Choices list has ...
  constant _DISTRICTS_LIST_ID_MISMATCH (line 13) | _DISTRICTS_LIST_ID_MISMATCH                         = "Choices list ID d...
  constant _DISTRICTS_LIST_INVALID_COUNTIES_JSON (line 14) | _DISTRICTS_LIST_INVALID_COUNTIES_JSON               = "District list has...
  constant _DISTRICTS_LIST_PREPARE_UPLOAD_TO_DB (line 15) | _DISTRICTS_LIST_PREPARE_UPLOAD_TO_DB                = "Choices list is r...
  constant _DISTRICTS_LIST_UPLOAD_TO_DB_FAIL (line 16) | _DISTRICTS_LIST_UPLOAD_TO_DB_FAIL                   = "Unable to upload ...
  constant _DISTRICTS_LIST_INVALID_DISTRICT_ID (line 17) | _DISTRICTS_LIST_INVALID_DISTRICT_ID                 = "District ID has a...
  constant _DISTRICTS_LIST_PARISH_CONTAINS_SAME_DISTRICT_CODES (line 18) | _DISTRICTS_LIST_PARISH_CONTAINS_SAME_DISTRICT_CODES = "Only 1 district c...

FILE: choices/cmd/districtimp/main.go
  constant usage (line 27) | usage = `districtimp loads district lists into the collector's storage s...
  function main (line 39) | func main() {
  function districtimpmain (line 46) | func districtimpmain() (code int) {
  type districtlist (line 131) | type districtlist struct
  type district (line 137) | type district struct
  function districtimp (line 144) | func districtimp(ctx context.Context, until int, c *conf.C, s *storage.C...
  function districtsLookup (line 191) | func districtsLookup(list districtlist) (map[string][]byte, error) {

FILE: choices/cmd/voterimp/container.go
  function openContainer (line 18) | func openContainer(opener container.Opener, path string) (
  type zipContainer (line 60) | type zipContainer struct
    method Close (line 66) | func (z zipContainer) Close() error {
    method Signatures (line 71) | func (z zipContainer) Signatures() []container.Signature {
    method Data (line 76) | func (z zipContainer) Data() map[string][]byte {
  function containerVersion (line 85) | func containerVersion(cnt container.Container) (string, error) {

FILE: choices/cmd/voterimp/log_desc.go
  constant _VOTERS_LIST_OPEN_ZIP_CONTAINER (line 4) | _VOTERS_LIST_OPEN_ZIP_CONTAINER            = "Failed to open .zip contai...
  constant _VOTERS_LIST_OPEN_ZIPPED_FILE (line 5) | _VOTERS_LIST_OPEN_ZIPPED_FILE              = "Cannot open a file from .z...
  constant _VOTERS_LIST_READ_ZIPPED_FILE (line 6) | _VOTERS_LIST_READ_ZIPPED_FILE              = "Failed to read a file from...
  constant _VOTERS_LIST_UNABLE_TO_EXTRACT_ZIP_VERSION (line 7) | _VOTERS_LIST_UNABLE_TO_EXTRACT_ZIP_VERSION = ".zip container doesn't hav...
  constant _VOTERS_LIST_VERSION_FROM_DB (line 8) | _VOTERS_LIST_VERSION_FROM_DB               = "Cannot fetch voters list v...
  constant _VOTERS_LIST_VERSION_TO_JSON (line 9) | _VOTERS_LIST_VERSION_TO_JSON               = "Cannot JSON marshal voters...
  constant _VOTERS_LIST_BDOC_OPEN (line 10) | _VOTERS_LIST_BDOC_OPEN                     = "Failed to open voters list...
  constant _VOTERS_LIST_BDOC_NO_SIG (line 11) | _VOTERS_LIST_BDOC_NO_SIG                   = "No signatures found in vot...
  constant _VOTERS_LIST_BDOC_SIG_INFO (line 12) | _VOTERS_LIST_BDOC_SIG_INFO                 = "Districts list BDOC contai...
  constant _VOTERS_LIST_BDOC_SIG_TO_JSON (line 13) | _VOTERS_LIST_BDOC_SIG_TO_JSON              = "Failed to JSON marshal vot...
  constant _VOTERS_LIST_BDOC_INVALID_DATA (line 14) | _VOTERS_LIST_BDOC_INVALID_DATA             = "Voters list BDOC container...
  constant _VOTERS_LIST_UTF_AND_SIG_VERIFY (line 15) | _VOTERS_LIST_UTF_AND_SIG_VERIFY            = ".sig signature doesn't cor...
  constant _VOTERS_LIST_CURRENT_VERSION (line 16) | _VOTERS_LIST_CURRENT_VERSION               = "Fetched from a database cu...
  constant _VOTERS_LIST_CREATE_MAP_OF_ALL_CHANGES (line 17) | _VOTERS_LIST_CREATE_MAP_OF_ALL_CHANGES     = "Failed to construct a map ...
  constant _VOTERS_LIST_TO_DB_UPLOAD (line 18) | _VOTERS_LIST_TO_DB_UPLOAD                  = "Uploading voters list to d...
  constant _VOTERS_LIST_TO_DB_UPLOAD_FAIL (line 19) | _VOTERS_LIST_TO_DB_UPLOAD_FAIL             = "Failed to upload voters li...
  constant _VOTERS_LIST_BDOC_HAS_MORE_THAN_2_FILES (line 20) | _VOTERS_LIST_BDOC_HAS_MORE_THAN_2_FILES    = "Voters list BDOC container...
  constant _VOTERS_LIST_NO_UTF_FILE (line 21) | _VOTERS_LIST_NO_UTF_FILE                   = "Voters list BDOC container...
  constant _VOTERS_LIST_NO_SIG_FILE (line 22) | _VOTERS_LIST_NO_SIG_FILE                   = "Voters list BDOC container...
  constant _VOTERS_LIST_PUB_KEY_INVALID_PEM (line 23) | _VOTERS_LIST_PUB_KEY_INVALID_PEM           = "Voters list public key is ...
  constant _VOTERS_LIST_PUB_KEY_INVALID_PKIX (line 24) | _VOTERS_LIST_PUB_KEY_INVALID_PKIX          = "Voters list public key, af...
  constant _VOTERS_LIST_PUB_KEY_INVALID_ECDSA (line 25) | _VOTERS_LIST_PUB_KEY_INVALID_ECDSA         = "Voters list public key alg...
  constant _VOTERS_LIST_ASN1_SIG_ASN1_UNMARSHAL (line 26) | _VOTERS_LIST_ASN1_SIG_ASN1_UNMARSHAL       = "Cannot ASN.1 unmarshal .si...
  constant _VOTERS_LIST_SIG_VERIFY_FAIL (line 27) | _VOTERS_LIST_SIG_VERIFY_FAIL               = "Failed to verify .sig cont...
  constant _VOTERS_LIST_READ (line 28) | _VOTERS_LIST_READ                          = "Reading voters list"
  constant _VOTERS_LIST_READ_CTX_CANCEL (line 29) | _VOTERS_LIST_READ_CTX_CANCEL               = "Context has been cancelled...
  constant _VOTERS_LIST_UTF_INVALID_COLUMNS_COUNT (line 30) | _VOTERS_LIST_UTF_INVALID_COLUMNS_COUNT     = ".utf has invalid columns c...
  constant _VOTERS_LIST_UTF_UNKNOWN_COLUMN (line 31) | _VOTERS_LIST_UTF_UNKNOWN_COLUMN            = ".utf contains unknown column"
  constant _VOTERS_LIST_READING_ERRORS (line 32) | _VOTERS_LIST_READING_ERRORS                = "Report of all errors occur...
  constant _VOTERS_LIST_READING_ERRORS_COUNT (line 33) | _VOTERS_LIST_READING_ERRORS_COUNT          = "Report errors count during...
  constant _VOTERS_LIST_READ_UTF_FORMAT_VERSION (line 34) | _VOTERS_LIST_READ_UTF_FORMAT_VERSION       = "Failed to read .utf format...
  constant _VOTERS_LIST_UTF_FORMAT_VERSION (line 35) | _VOTERS_LIST_UTF_FORMAT_VERSION            = "Invalid .utf format version"
  constant _VOTERS_LIST_READ_UTF_ELECTION_ID (line 36) | _VOTERS_LIST_READ_UTF_ELECTION_ID          = "Failed to read .utf electi...
  constant _VOTERS_LIST_UTF_ELECTION_ID (line 37) | _VOTERS_LIST_UTF_ELECTION_ID               = ".utf election ID doesn't m...
  constant _VOTERS_LIST_READ_UTF_VOTERS_LIST_VERSION (line 38) | _VOTERS_LIST_READ_UTF_VOTERS_LIST_VERSION  = "Failed to read .utf voters...
  constant _VOTERS_LIST_UTF_VOTERS_LIST_VERSION (line 39) | _VOTERS_LIST_UTF_VOTERS_LIST_VERSION       = ".utf voters list version i...
  constant _VOTERS_LIST_UTF_VOTERS_LIST_VERSION_0 (line 40) | _VOTERS_LIST_UTF_VOTERS_LIST_VERSION_0     = "Current .utf voters list t...
  constant _VOTERS_LIST_INITIAL_NOT_UPLOADED_YET (line 41) | _VOTERS_LIST_INITIAL_NOT_UPLOADED_YET      = "Voters list with version 0...
  constant _VOTERS_LIST_UPLOAD_OLD_VERSION (line 42) | _VOTERS_LIST_UPLOAD_OLD_VERSION            = "Trying to upload old voter...
  constant _VOTERS_LIST_READ_ELECTION_FROM_PERIOD (line 43) | _VOTERS_LIST_READ_ELECTION_FROM_PERIOD     = "Failed to read .utf electi...
  constant _VOTERS_LIST_ELECTION_FROM_PERIOD (line 44) | _VOTERS_LIST_ELECTION_FROM_PERIOD          = ".utf election 'from' value...
  constant _VOTERS_LIST_READ_ELECTION_TO_PERIOD (line 45) | _VOTERS_LIST_READ_ELECTION_TO_PERIOD       = "Failed to read .utf electi...
  constant _VOTERS_LIST_ELECTION_TO_PERIOD (line 46) | _VOTERS_LIST_ELECTION_TO_PERIOD            = ".utf election 'to' value i...
  constant _VOTERS_LIST_UTF_VOTER_ID_EMPTY (line 47) | _VOTERS_LIST_UTF_VOTER_ID_EMPTY            = ".utf voters list contains ...
  constant _VOTERS_LIST_UTF_INITIAL_ACTION (line 48) | _VOTERS_LIST_UTF_INITIAL_ACTION            = ".utf voters list initial a...
  constant _VOTERS_LIST_UTF_ADMIN_CODE_EMPTY (line 49) | _VOTERS_LIST_UTF_ADMIN_CODE_EMPTY          = ".utf voters list contains ...
  constant _VOTERS_LIST_UTF_DISTRICT_EMPTY (line 50) | _VOTERS_LIST_UTF_DISTRICT_EMPTY            = ".utf voters list contains ...
  constant _VOTERS_LIST_UTF_ADD_SAME_VOTER (line 51) | _VOTERS_LIST_UTF_ADD_SAME_VOTER            = ".utf voters list attempts ...
  constant _VOTERS_LIST_MODIFY_WITH_PREVIOUS_ERRORS (line 52) | _VOTERS_LIST_MODIFY_WITH_PREVIOUS_ERRORS   = "Trying to process next lin...
  constant _VOTERS_LIST_GET_VOTER_FROM_DB (line 53) | _VOTERS_LIST_GET_VOTER_FROM_DB             = "Cannot fetch voter ID from...
  constant _VOTERS_LIST_NON_EXISTING_VOTER (line 54) | _VOTERS_LIST_NON_EXISTING_VOTER            = "Voter doesn't exist in a d...
  constant _VOTERS_LIST_DELETE_JUST_ADDED_VOTER (line 55) | _VOTERS_LIST_DELETE_JUST_ADDED_VOTER       = "Voters list has 'lisamine'...
  constant _VOTERS_LIST_UNKNOWN_ACTION (line 56) | _VOTERS_LIST_UNKNOWN_ACTION                = "Voters list contains unkno...
  constant _VOTERS_LIST_READ_FILE_PROGRESS (line 57) | _VOTERS_LIST_READ_FILE_PROGRESS            = "Reading voters file progre...
  constant _VOTERS_LIST_READ_LINE_ERROR (line 58) | _VOTERS_LIST_READ_LINE_ERROR               = "Cannot read voters file line"
  constant _VOTERS_LIST_UTF_COLUMNS_COUNT (line 59) | _VOTERS_LIST_UTF_COLUMNS_COUNT             = "Voters file has invalid co...

FILE: choices/cmd/voterimp/main.go
  constant usage (line 39) | usage = `voterimp loads voter lists into the collector's storage service...
  function main (line 57) | func main() {
  function voterimpmain (line 64) | func voterimpmain() (code int) {
  function containerData (line 198) | func containerData(data map[string][]byte) (list, signature []byte, err ...
  function verifyECDSA (line 237) | func verifyECDSA(pub string, data, sig []byte) error {
  constant delim (line 266) | delim = '\n'
  constant sep (line 267) | sep   = '\t'
  type linefunc (line 275) | type linefunc
  function preprocess (line 280) | func preprocess(ctx context.Context, list []byte, version, election stri...
  function header (line 358) | func header(b *bytes.Buffer, election, oldver string) (newver string, lf...
  function initial (line 441) | func initial(_ context.Context, voter, action, adminCode, district string,
  function changes (line 482) | func changes(ctx context.Context, voter, action, adminCode, district str...
  function stepadd (line 564) | func stepadd(ctx context.Context, add status.Add, count, step uint64) {
  function next (line 573) | func next(b *bytes.Buffer) (action, voter, adminCode, district string, e...
  function report (line 608) | func report(ctx context.Context, entry log.ErrorEntry) {
  function readString (line 616) | func readString(b *bytes.Buffer, delim byte) (string, error) {

FILE: choices/cmd/voterimp/voterimp_test.go
  function TestZIPVersion (line 5) | func TestZIPVersion(t *testing.T) {

FILE: choices/internal/client/sessionstatus/rpc/client.go
  constant Empty (line 16) | Empty = ""
  constant AuthenticateStatus (line 19) | AuthenticateStatus = "RPC.AuthenticateStatus"
  constant Token (line 22) | Token = "RPC.Token"
  constant VoterChoices (line 25) | VoterChoices = "RPC.VoterChoices"
  constant exitCodeOK (line 28) | exitCodeOK = 0
  type RPC (line 30) | type RPC struct
    method Verify (line 49) | func (r *RPC) Verify(dto interface{}) (bool, error) {
    method verifyAndUpdateSessionStatus (line 80) | func (r *RPC) verifyAndUpdateSessionStatus(serviceMethod string, h ser...
  function NewClient (line 36) | func NewClient(c *command.C) (client.Verifier, int) {
  function verifyStatusReadResp (line 202) | func verifyStatusReadResp(r *api.StatusReadResp,
  function voterChoicesHandler (line 209) | func voterChoicesHandler(r *api.StatusReadResp) (bool, error) {

FILE: choices/internal/client/sessionstatus/rpc/log_desc.go
  constant _SESSIONSTATUS_CAST_ANY_TO_VERIFYREQ (line 4) | _SESSIONSTATUS_CAST_ANY_TO_VERIFYREQ          = "Cannot cast any to Veri...
  constant _SESSIONSTATUS_CAST_VERIFYREQ_TO_SERVERHEADER (line 5) | _SESSIONSTATUS_CAST_VERIFYREQ_TO_SERVERHEADER = "Cannot cast VerifyReq t...
  constant _SESSIONSTATUS_SEND_UPDATE_REQ_AND_VERIFY_IT (line 6) | _SESSIONSTATUS_SEND_UPDATE_REQ_AND_VERIFY_IT  = "SessionID verification ...
  constant _SESSIONSTATUS_AUTHMETHOD_FROM_CTX (line 7) | _SESSIONSTATUS_AUTHMETHOD_FROM_CTX            = "Unable to parse server....
  constant _SESSIONSTATUS_AUTHMETHOD_EMPTY (line 8) | _SESSIONSTATUS_AUTHMETHOD_EMPTY               = "server.AuthMethod parse...
  constant _SESSIONSTATUS_TLS_DIAL (line 9) | _SESSIONSTATUS_TLS_DIAL                       = "TLS dial to sessionstat...
  constant _SESSIONSTATUS_RESP_VERIFY (line 10) | _SESSIONSTATUS_RESP_VERIFY                    = "Sessionstatus service r...
  constant _SESSIONSTATUS_IDCARD (line 11) | _SESSIONSTATUS_IDCARD                         = "Empty server.AuthMethod...
  constant _SESSIONSTATUS_UPDATE_FAIL (line 12) | _SESSIONSTATUS_UPDATE_FAIL                    = "Sessionstatus service h...
  constant _SESSIONSTATUS_MALFORMED_SESSION_ID (line 13) | _SESSIONSTATUS_MALFORMED_SESSION_ID           = "SessionID has been atte...

FILE: choices/service/choices/log_desc.go
  constant _CHOICES_CHOICESREQ (line 4) | _CHOICES_CHOICESREQ              = "RPC.ChoicesReq"
  constant _CHOICES_ADMIN_CODE (line 5) | _CHOICES_ADMIN_CODE              = "Unable to fetch admin code from data...
  constant _CHOICES_NO_FOR_VOTER (line 6) | _CHOICES_NO_FOR_VOTER            = "No choices for this voter ID"
  constant _CHOICES_FROM_DB (line 7) | _CHOICES_FROM_DB                 = "Unable to fetch choices for this vot...
  constant _CHOICES_CHOICESRESP (line 8) | _CHOICES_CHOICESRESP             = "RPC.ChoicesResp"
  constant _CHOICES_VOTERCHOICESREQ (line 9) | _CHOICES_VOTERCHOICESREQ         = "RPC.VoterChoicesReq"
  constant _CHOICES_VOTER_NO_AUTH (line 10) | _CHOICES_VOTER_NO_AUTH           = "Voter has not been authenticated"
  constant _CHOICES_SESSION_ID (line 11) | _CHOICES_SESSION_ID              = "Malformed SessionID"
  constant _CHOICES_SESSION_ID_EXPIRED (line 12) | _CHOICES_SESSION_ID_EXPIRED      = "SessionID has been expired"
  constant _CHOICES_NO_VOTER_IN_VOTERS_LIST (line 13) | _CHOICES_NO_VOTER_IN_VOTERS_LIST = "No such voter ID in a voters list"
  constant _CHOICES_DB (line 14) | _CHOICES_DB                      = "Successfully got choices for this vo...
  constant _CHOICES_CHECK_VOTED (line 15) | _CHOICES_CHECK_VOTED             = "Unable to get a response from databa...
  constant _CHOICES_VOTERCHOICESRESP (line 16) | _CHOICES_VOTERCHOICESRESP        = "RPC.VoterChoicesResp"
  constant _CHOICES_START (line 17) | _CHOICES_START                   = "Failed to transform service start ti...
  constant _CHOICES_STOP (line 18) | _CHOICES_STOP                    = "Failed to transform service stop tim...
  constant _CHOICES_AUTH (line 19) | _CHOICES_AUTH                    = "Failed to parse authentication confi...
  constant _CHOICES_SERVER (line 20) | _CHOICES_SERVER                  = "Failed to parse server configuration...
  constant _CHOICES_SERVER_SERVE (line 21) | _CHOICES_SERVER_SERVE            = "Failed to serve choices service to c...

FILE: choices/service/choices/main.go
  type RPC (line 27) | type RPC struct
    method Choices (line 58) | func (r *RPC) Choices(args ChoicesArgs, resp *Response) (err error) {
    method VoterChoices (line 82) | func (r *RPC) VoterChoices(args VoterArgs, resp *Response) (err error) {
  type ChoicesArgs (line 35) | type ChoicesArgs struct
  type VoterArgs (line 43) | type VoterArgs struct
  type Response (line 48) | type Response struct
  function main (line 154) | func main() {
  function choicesmain (line 160) | func choicesmain() (code int) {

FILE: collector-admin/ivxv_admin/agent_daemon.py
  function main_loop (line 55) | def main_loop():
  function generate_state_data (line 124) | def generate_state_data():
  function get_cfg_applying_state (line 175) | def get_cfg_applying_state(cfg_key, state):
  function get_agent_metadata (line 204) | def get_agent_metadata():
  function apply_cfg (line 211) | def apply_cfg(state) -> typing.Set[subprocess.Popen]:
  function apply_cfg_for_services (line 235) | def apply_cfg_for_services(cfg_type, cfg_key, state) -> subprocess.Popen...
  function ping_service (line 275) | def ping_service(service_id, service_data):
  function generate_stats_data (line 328) | def generate_stats_data(force=False):
  function normalize_stats (line 377) | def normalize_stats(stats_data):
  function query_logmon_stats (line 414) | def query_logmon_stats(address):
  function check_management_db (line 460) | def check_management_db():
  function get_collector_data (line 479) | def get_collector_data():
  function get_logmon_data (line 500) | def get_logmon_data():
  function register_collector_state (line 516) | def register_collector_state(db):
  function is_db_accessible (line 534) | def is_db_accessible(check_value):

FILE: collector-admin/ivxv_admin/cli_utils/__init__.py
  function init_cli_util (line 18) | def init_cli_util(docstr, allow_root=False):
  function ask_user_confirmation (line 50) | def ask_user_confirmation(question):

FILE: collector-admin/ivxv_admin/cli_utils/admin_storage_utils.py
  function ivxv_create_data_dirs_util (line 31) | def ivxv_create_data_dirs_util():
  function ivxv_collector_init_util (line 58) | def ivxv_collector_init_util():
  function database_util (line 93) | def database_util():
  function database_dump_util (line 123) | def database_dump_util():
  function database_reset_util (line 143) | def database_reset_util():
  function init_data_directories (line 177) | def init_data_directories():
  function init_management_database (line 203) | def init_management_database():
  function init_management_datafiles (line 212) | def init_management_datafiles():

FILE: collector-admin/ivxv_admin/cli_utils/backup_utils.py
  function insert_backup_crontab (line 20) | def insert_backup_crontab(data: str, crontab: str) -> str:
  function __get_backup_crontab_block (line 35) | def __get_backup_crontab_block(data: str) -> (str, bool):
  function remove_backup_crontab (line 75) | def remove_backup_crontab(data: str) -> str:
  function backup_crontab_generator_util (line 89) | def backup_crontab_generator_util():
  function backup_util (line 175) | def backup_util():
  function exec_backup_service_cmd (line 268) | def exec_backup_service_cmd(backup_service, *cmd):
  function backup_management_cfg (line 281) | def backup_management_cfg(backup_service):

FILE: collector-admin/ivxv_admin/cli_utils/config_utils/command_load.py
  function main (line 38) | def main():
  function register_cfg (line 152) | def register_cfg(
  function register_cfg_in_fs (line 252) | def register_cfg_in_fs(cmd_type,
  function check_cmd_loading_state (line 303) | def check_cmd_loading_state(cmd_type):
  function check_signer_permissions (line 333) | def check_signer_permissions(cmd_type, filename):
  function register_user_permissions (line 365) | def register_user_permissions(db, user_cn, roles):
  function validate_lists_consistency (line 375) | def validate_lists_consistency(cmd_type, cmd_filepath):

FILE: collector-admin/ivxv_admin/cli_utils/config_utils/config_apply.py
  function main (line 23) | def main():
  function get_cfg_data (line 95) | def get_cfg_data(db):
  function load_tech_cfg (line 139) | def load_tech_cfg(tech_cfg_ver, election_cfg_ver, has_election_cfg):
  function prepare_service_list (line 171) | def prepare_service_list(services, service_ids):
  function apply_cfg (line 197) | def apply_cfg(cfg_types, services, tech_cfg, cfg_data):
  function apply_cfg_to_services (line 236) | def apply_cfg_to_services(services, cfg_type, tech_cfg, cfg_data):
  function aggregate_results (line 357) | def aggregate_results(results):

FILE: collector-admin/ivxv_admin/cli_utils/config_utils/config_validate.py
  function main (line 12) | def main():
  function validate_cfg_consistency (line 61) | def validate_cfg_consistency(
  function validate_cfg_election_id (line 102) | def validate_cfg_election_id(validated_cfg):
  function validate_cfg_files (line 133) | def validate_cfg_files(cfg_files, plain):
  function validate_voters_lists_consistency (line 149) | def validate_voters_lists_consistency(cfg_objects):
  function validate_lists_consistency (line 220) | def validate_lists_consistency(cfg_objects, voterforeignehak):
  function validate_choices_consistency (line 252) | def validate_choices_consistency(districts, choices_cfg):
  function validate_voters_consistency (line 274) | def validate_voters_consistency(

FILE: collector-admin/ivxv_admin/cli_utils/config_utils/load_secret_data_file.py
  function main (line 19) | def main():
  function validate_secret_file (line 143) | def validate_secret_file(secret_type, file_content, service_id):

FILE: collector-admin/ivxv_admin/cli_utils/config_utils/voter_list_download.py
  function main (line 23) | def main():
  function write_voter_list_zip (line 187) | def write_voter_list_zip(content, version, output_filepath):
  function register_voter_list (line 207) | def register_voter_list(filepath, timestamp, version):

FILE: collector-admin/ivxv_admin/cli_utils/service_utils.py
  function export_votes_util (line 52) | def export_votes_util():
  function export_votes (line 75) | def export_votes(must_consolidate, output_filename):
  function generate_processor_input_util (line 133) | def generate_processor_input_util():
  function generate_processor_check_cfg (line 161) | def generate_processor_check_cfg():
  function generate_processor_input (line 240) | def generate_processor_input(election_id, processor_check_cfg, output_fi...
  function copy_logs_to_logmon_util (line 357) | def copy_logs_to_logmon_util():
  function copy_logs_from_host_to_logmon (line 441) | def copy_logs_from_host_to_logmon(hostname, logmon_account):
  function update_software_pkg_util (line 477) | def update_software_pkg_util():
  function manage_service (line 585) | def manage_service():
  function voterstats_util (line 643) | def voterstats_util():
  function import_voterstats (line 727) | def import_voterstats(stats_type, service, filepath, log_level):
  function export_voterstats (line 755) | def export_voterstats(stats_type, filepath):
  function voting_sessions_util (line 793) | def voting_sessions_util():
  function import_voting_sessions (line 853) | def import_voting_sessions(
  function remove_ivxv_admin_crontab (line 883) | def remove_ivxv_admin_crontab():
  function generate_detail_stats_crontab (line 890) | def generate_detail_stats_crontab(cfg: dict):
  function detail_stats_crontab_editor (line 924) | def detail_stats_crontab_editor() -> int:
  function remove_detail_stats_crontab (line 984) | def remove_detail_stats_crontab(data: str) -> str:
  function insert_detail_stats_crontab (line 998) | def insert_detail_stats_crontab(data: str, crontab: str) -> str:
  function __get_detail_stats_crontab_block (line 1013) | def __get_detail_stats_crontab_block(data: str) -> (str, bool):
  function install_detail_stats_crontab (line 1053) | def install_detail_stats_crontab():
  function generate_voting_facts_crontab (line 1059) | def generate_voting_facts_crontab(cfg: dict):
  function voting_facts_crontab_editor (line 1093) | def voting_facts_crontab_editor() -> int:
  function remove_voting_facts_crontab (line 1153) | def remove_voting_facts_crontab(data: str) -> str:
  function insert_voting_facts_crontab (line 1167) | def insert_voting_facts_crontab(data: str, crontab: str) -> str:
  function __get_voting_facts_crontab_block (line 1182) | def __get_voting_facts_crontab_block(data: str) -> (str, bool):
  function install_voting_facts_crontab (line 1222) | def install_voting_facts_crontab():
  function voting_facts_util (line 1228) | def voting_facts_util():
  function create_voter_list_download_crontab (line 1325) | def create_voter_list_download_crontab(cfg: dict):

FILE: collector-admin/ivxv_admin/cli_utils/status_utils.py
  function users_list_util (line 14) | def users_list_util():
  function status_util (line 36) | def status_util():
  function cfg_state_filters (line 117) | def cfg_state_filters(filters, state):

FILE: collector-admin/ivxv_admin/collector_state.py
  function generate_collector_state (line 27) | def generate_collector_state(db):
  function detect_collector_state (line 89) | def detect_collector_state(state):
  function generate_voter_list_state (line 140) | def generate_voter_list_state(state):
  function generate_election_state (line 175) | def generate_election_state(state):

FILE: collector-admin/ivxv_admin/command_file.py
  function load_collector_cmd_file (line 30) | def load_collector_cmd_file(cmd_type, filename, plain=False):
  function load_cfg_file_content (line 102) | def load_cfg_file_content(cmd_type, cfg_filename, cmd_filename):
  function ck_json_dict_key_uniqueness (line 175) | def ck_json_dict_key_uniqueness(args):
  function load_plain_cfg_file (line 188) | def load_plain_cfg_file(cmd_type, dirpath, filename):
  function get_command_filename (line 216) | def get_command_filename(cmd_type, filenames_in_bdoc):
  function check_cmd_signature (line 266) | def check_cmd_signature(cmd_type, filename):
  function exec_container_verifier (line 344) | def exec_container_verifier(trust_container_filepath, filepath):
  function log_cfg_validation_errors (line 381) | def log_cfg_validation_errors(items, prefix="/"):
  function load_yaml_file (line 390) | def load_yaml_file(fp):

FILE: collector-admin/ivxv_admin/config.py
  function cfg_path (line 74) | def cfg_path(cfg_path_name, filename):

FILE: collector-admin/ivxv_admin/config_validator/choices_list.py
  class ChoicesListSchema (line 13) | class ChoicesListSchema(Model):
    method validate (line 18) | def validate(self, partial=False, convert=True, app_data=None, **kwargs):

FILE: collector-admin/ivxv_admin/config_validator/districts_list.py
  class DistrictsListSchema (line 12) | class DistrictsListSchema(Model):
    class DistrictSchema (line 15) | class DistrictSchema(Model):
    class RegionSchema (line 20) | class RegionSchema(Model):

FILE: collector-admin/ivxv_admin/config_validator/election_conf.py
  class ElectionConfigSchema (line 25) | class ElectionConfigSchema(Model):
    class ElectionVerificationSchema (line 30) | class ElectionVerificationSchema(Model):
    class ElectionVotingSchema (line 38) | class ElectionVotingSchema(Model):
      method validate_ratelimitminutes (line 43) | def validate_ratelimitminutes(self, data, value):
    class ElectionPeriodSchema (line 56) | class ElectionPeriodSchema(Model):
    class VoterListSchema (line 68) | class VoterListSchema(Model):
    class VisSchema (line 74) | class VisSchema(Model):
    class XroadSchema (line 83) | class XroadSchema(Model):
    class BallotSchema (line 90) | class BallotSchema(Model):
    class AuthSchema (line 98) | class AuthSchema(Model):
      class TicketAuthSchema (line 102) | class TicketAuthSchema(Model):
      class TLSAuthSchema (line 107) | class TLSAuthSchema(Model):
    class AgeSchema (line 120) | class AgeSchema(Model):
    class MIDSchema (line 130) | class MIDSchema(Model):
      method validate_phonerequired (line 147) | def validate_phonerequired(self, data, value):
    class SmartIDSchema (line 159) | class SmartIDSchema(Model):
    class StatsSchema (line 185) | class StatsSchema(Model):
      class DetailStatsSchema (line 187) | class DetailStatsSchema(Model):
        class SchedulerSchema (line 188) | class SchedulerSchema(Model):
          class CronSchema (line 189) | class CronSchema(Model):
      class VotingFactsSchema (line 200) | class VotingFactsSchema(Model):
        class SchedulerSchema (line 201) | class SchedulerSchema(Model):
          class CronSchema (line 202) | class CronSchema(Model):
    method validate_questions (line 215) | def validate_questions(self, data, value):
    method validate_period (line 221) | def validate_period(self, data, value):

FILE: collector-admin/ivxv_admin/config_validator/fields.py
  class ElectionIdType (line 15) | class ElectionIdType(StringType):
    method validate (line 18) | def validate(self, value, context=None):
  class CertificateType (line 33) | class CertificateType(StringType):
    method validate (line 36) | def validate(self, value, context=None):
  class PublicKeyType (line 49) | class PublicKeyType(StringType):
    method validate (line 52) | def validate(self, value, context=None):

FILE: collector-admin/ivxv_admin/config_validator/schemas.py
  function protocol_cfg (line 18) | def protocol_cfg(mapping, **kwargs):
  class DummySchema (line 52) | class DummySchema(Model):
  class OCSPSchema (line 57) | class OCSPSchema(Model):
  class OCSPSchemaNoURL (line 67) | class OCSPSchemaNoURL(Model):
  class TSPSchema (line 74) | class TSPSchema(Model):
  class TSPSchemaNoURL (line 84) | class TSPSchemaNoURL(Model):
  class BDocSchema (line 92) | class BDocSchema(Model):
    method validate_tsp (line 104) | def validate_tsp(self, data, value):
  class ContainerSchema (line 114) | class ContainerSchema(Model):

FILE: collector-admin/ivxv_admin/config_validator/tech_conf.py
  class ServicesSchema (line 17) | class ServicesSchema(Model):
    class BackupServiceSchema (line 20) | class BackupServiceSchema(Model):
    class ServiceSchema (line 25) | class ServiceSchema(Model):
  class CollectorTechnicalConfigSchema (line 46) | class CollectorTechnicalConfigSchema(Model):
    class FilterSchema (line 51) | class FilterSchema(Model):
      class TLSFilterSchema (line 54) | class TLSFilterSchema(Model):
      class CodecFilterSchema (line 76) | class CodecFilterSchema(Model):
    class SegmentSchema (line 86) | class SegmentSchema(Model):
    class LogServerSchema (line 93) | class LogServerSchema(Model):
    class StatusServerSchema (line 100) | class StatusServerSchema(Model):
      class SessionServiceSchema (line 102) | class SessionServiceSchema(Model):
    class FileStorageServiceSchema (line 113) | class FileStorageServiceSchema(Model):
    class EtcdStorageServiceSchema (line 117) | class EtcdStorageServiceSchema(Model):
    class BackupTimeType (line 135) | class BackupTimeType(StringType):
      method validate (line 138) | def validate(self, value, context=None):

FILE: collector-admin/ivxv_admin/config_validator/trust_conf.py
  class TrustRootSchema (line 12) | class TrustRootSchema(Model):

FILE: collector-admin/ivxv_admin/config_validator/user_management.py
  class UserManagementCommandSchema (line 13) | class UserManagementCommandSchema(Model):
    method validate (line 19) | def validate(self, partial=False, convert=True, app_data=None, **kwargs):

FILE: collector-admin/ivxv_admin/config_validator/validator_util.py
  function validate_cfg (line 19) | def validate_cfg(cfg, schema_name):

FILE: collector-admin/ivxv_admin/config_validator/voters_list.py
  class VoterListChangesetSkipSchema (line 15) | class VoterListChangesetSkipSchema(Model):
  function parse_voters_list (line 23) | def parse_voters_list(list_content):
  function validate_voter_record (line 93) | def validate_voter_record(fields, is_original_list):

FILE: collector-admin/ivxv_admin/db.py
  class IVXVManagerDb (line 105) | class IVXVManagerDb:
    method __init__ (line 117) | def __init__(self, for_update=False, retries=30, retry_delay=0.1):
    method __enter__ (line 133) | def __enter__(self, mode=None):
    method __exit__ (line 160) | def __exit__(self, *args):
    method get_value (line 165) | def get_value(self, key):
    method set_value (line 169) | def set_value(self, key, value, safe=False):
    method rm_value (line 243) | def rm_value(self, key):
    method get_all_values (line 250) | def get_all_values(self, section=None):
    method reset (line 277) | def reset(cls):
    method dump (line 289) | def dump(self, filter_keys=None):
    method keys (line 300) | def keys(self):
  function check_db_dir (line 305) | def check_db_dir():

FILE: collector-admin/ivxv_admin/event_log.py
  function init_event_log (line 15) | def init_event_log():
  function register_service_event (line 24) | def register_service_event(event, level='INFO', service=None, params=None):
  function event_log_dump_util (line 40) | def event_log_dump_util():

FILE: collector-admin/ivxv_admin/http_daemon.py
  function index (line 24) | def index():
  function upload_cmd_file (line 34) | def upload_cmd_file():
  function download_ballots (line 67) | def download_ballots():
  function download_voter_stats (line 96) | def download_voter_stats():
  function download_processor_input (line 123) | def download_processor_input():
  function download_voting_sessions (line 158) | def download_voting_sessions():
  function skip_voters_lists (line 199) | def skip_voters_lists():
  function daemon (line 224) | def daemon():

FILE: collector-admin/ivxv_admin/lib/__init__.py
  class IvxvError (line 28) | class IvxvError(Exception):
  function register_tech_cfg_items (line 32) | def register_tech_cfg_items(cfg, cfg_version):
  function register_removed_services (line 48) | def register_removed_services(db, cfg, cfg_version):
  function reset_list_loading_state (line 107) | def reset_list_loading_state(db, list_type, list_descr, log_msg):
  function gen_service_record_defaults (line 152) | def gen_service_record_defaults(db, cfg):
  function set_tech_cfg_service_cond_values (line 196) | def set_tech_cfg_service_cond_values(db, cfg):
  function manage_db_cond_value (line 213) | def manage_db_cond_value(db, service_id, key, set_value, value=None):
  function manage_db_mobileid_fields (line 228) | def manage_db_mobileid_fields(db):
  function manage_db_tsp_fields (line 249) | def manage_db_tsp_fields(db):
  function gen_host_record_defaults (line 268) | def gen_host_record_defaults(db, cfg):
  function gen_logmon_data (line 297) | def gen_logmon_data(db, logging_params):
  function cfg_type_verbose (line 307) | def cfg_type_verbose(cfg_type):
  function get_services (line 315) | def get_services(db=None,
  function clean_dir (line 381) | def clean_dir(path):
  function populate_user_permissions (line 389) | def populate_user_permissions(db):
  function get_current_voter_list_changeset_no (line 414) | def get_current_voter_list_changeset_no(db):
  function get_loaded_cfg_file_path (line 428) | def get_loaded_cfg_file_path(cfg_type):

FILE: collector-admin/ivxv_admin/lib/lockfile.py
  class PidLocker (line 22) | class PidLocker:
    method __init__ (line 38) | def __init__(self, pidfile_name, timeout=0):
    method acquire_lock_with_timeout (line 51) | def acquire_lock_with_timeout(self, to):
    method rm_pid (line 78) | def rm_pid(self):
    method get_pidfile_path (line 88) | def get_pidfile_path(cls, pidfile_name):
    method pidfile_exists (line 94) | def pidfile_exists(cls, pidfile_name):
    method rm_stale_pidfile (line 100) | def rm_stale_pidfile(cls, pidfile_name):
  function main (line 122) | def main():

FILE: collector-admin/ivxv_admin/service/__init__.py
  function get_service_cfg_state (line 13) | def get_service_cfg_state(db, cfg):
  function generate_service_list (line 93) | def generate_service_list(service_networks, service_id_filter=None):
  function generate_service_hints (line 133) | def generate_service_hints(services):

FILE: collector-admin/ivxv_admin/service/backup_service.py
  function install_backup_crontab (line 7) | def install_backup_crontab():

FILE: collector-admin/ivxv_admin/service/logging.py
  class ServiceLogger (line 10) | class ServiceLogger(logging.LoggerAdapter):
    method process (line 17) | def process(self, msg, kwargs):
    method log (line 24) | def log(self, level, msg, *args, **kwargs):

FILE: collector-admin/ivxv_admin/service/remote_exec.py
  function exec_remote_cmd (line 9) | def exec_remote_cmd(cmd, **kw):

FILE: collector-admin/ivxv_admin/service/service.py
  class Service (line 39) | class Service:
    method __init__ (line 47) | def __init__(self, service_id, service_data):
    method __enter__ (line 64) | def __enter__(self):
    method __exit__ (line 67) | def __exit__(self, *args):
    method __repr__ (line 70) | def __repr__(self):
    method close (line 74) | def close(self):
    method hostname (line 79) | def hostname(self):
    method service_type (line 84) | def service_type(self):
    method service_account_name (line 89) | def service_account_name(self):
    method service_systemctl_id (line 98) | def service_systemctl_id(self):
    method service_data_dir (line 103) | def service_data_dir(self):
    method deb_pkg_name (line 108) | def deb_pkg_name(self):
    method get_db_key (line 112) | def get_db_key(self, name):
    method register_event (line 116) | def register_event(self, event, params, level='INFO'):
    method register_bg_info (line 121) | def register_bg_info(self, bg_info):
    method remove_root_access (line 129) | def remove_root_access(self):
    method install_service (line 153) | def install_service(self):
    method install_service_pkg (line 196) | def install_service_pkg(self, is_update=False, package=None):
    method update_ivxv_common_pkg (line 255) | def update_ivxv_common_pkg(self):
    method init_service (line 284) | def init_service(self):
    method init_service_host (line 310) | def init_service_host(self):
    method install_ivxv_common_pkg (line 383) | def install_ivxv_common_pkg(self, pkg_path, remote_path):
    method remove_service_pkg (line 413) | def remove_service_pkg(self):
    method restart_service (line 462) | def restart_service(self):
    method stop_service (line 503) | def stop_service(self):
    method configure_logging (line 522) | def configure_logging(self, tech_cfg):
    method load_apply_state (line 591) | def load_apply_state(self, filepath, attempt_no=0):
    method update_apply_state (line 611) | def update_apply_state(self, **kw):
    method apply_tech_cfg (line 620) | def apply_tech_cfg(self, cfg_ver, tech_cfg):
    method apply_election_cfg (line 692) | def apply_election_cfg(self, cfg_ver):
    method apply_list (line 743) | def apply_list(self, list_type, changeset_no=None):
    method load_secret_file (line 785) | def load_secret_file(self, secret_type, filepath, checksum):
    method copy_cfg_to_service (line 837) | def copy_cfg_to_service(self, cfg_type, changeset_no=None):
    method register_cfg_version (line 888) | def register_cfg_version(self, cfg_type, cfg_ver, service_state):
    method register_state (line 902) | def register_state(self, db, state, bg_info=None):
    method ping (line 930) | def ping(self):
    method _get_cfg_versions_from_service (line 996) | def _get_cfg_versions_from_service(self):
    method _verify_cfg_version (line 1082) | def _verify_cfg_version(self):
    method scp (line 1152) | def scp(self,
    method ssh (line 1195) | def ssh(self, cmd, account=None, fwd_auth_agent=False, **kw):
    method get_log_buffer (line 1217) | def get_log_buffer(self):

FILE: collector-admin/ivxv_admin/wsgi.py
  function abort (line 41) | def abort(code=500, text='Unknown Error.'):
  function log_query (line 53) | def log_query():
  function context (line 63) | def context():
  function fwd_request (line 145) | def fwd_request():
  function upload_cfg (line 174) | def upload_cfg():
  function eventlog (line 213) | def eventlog():
  function get_ballot_box_state (line 239) | def get_ballot_box_state():

FILE: collector-admin/site/js/config.js
  function loadPageData (line 10) | function loadPageData() {
  function display_cfg_panel (line 81) | function display_cfg_panel(id_prefix, state, cfg, title) {
  function toggle_apply_log (line 177) | function toggle_apply_log(toggle_button) {
  function refresh_log (line 191) | function refresh_log(logbox, filename) {
  function reset_upload_form (line 210) | function reset_upload_form() {
  function prepareUpload (line 221) | function prepareUpload(event) {
  function uploadFiles (line 230) | function uploadFiles(event) {

FILE: collector-admin/site/js/downloads.js
  function loadPageData (line 10) | function loadPageData() {
  function downloadBallot (line 122) | function downloadBallot(consolidate) {

FILE: collector-admin/site/js/index.js
  function loadPageData (line 10) | function loadPageData() {

FILE: collector-admin/site/js/ivxv.js
  function getContextData (line 14) | function getContextData() {
  function showErrorMessage (line 82) | function showErrorMessage(msg, retain_content) {
  function hideErrorMessage (line 97) | function hideErrorMessage() {
  function userHasPermission (line 110) | function userHasPermission(permission) {
  function copyObjectToHtml (line 120) | function copyObjectToHtml(object_val, targetPrefix) {
  function formatTime (line 134) | function formatTime(dateTime, offset) {
  function outputCmdVersion (line 155) | function outputCmdVersion(selector, cfg_type, cfg) {
  function fillVoterListStateCounters (line 196) | function fillVoterListStateCounters(list_state) {
  function sanitizeJSON (line 218) | function sanitizeJSON(context) {
  function sanitizePrimitive (line 240) | function sanitizePrimitive(context) {

FILE: collector-admin/site/js/lists.js
  function loadPageData (line 10) | function loadPageData() {
  function reset_upload_form (line 99) | function reset_upload_form() {
  function prepareUpload (line 110) | function prepareUpload(event) {
  function uploadFiles (line 119) | function uploadFiles(event) {

FILE: collector-admin/site/js/log.js
  function loadPageData (line 10) | function loadPageData() {

FILE: collector-admin/site/js/services.js
  function loadPageData (line 10) | function loadPageData() {

FILE: collector-admin/site/js/stats.js
  function loadPageData (line 10) | function loadPageData() {

FILE: collector-admin/site/js/users.js
  function loadPageData (line 10) | function loadPageData() {
  function reset_upload_form (line 61) | function reset_upload_form() {
  function prepareUpload (line 72) | function prepareUpload(event) {
  function uploadFiles (line 81) | function uploadFiles(event) {

FILE: common/collector/age/age.go
  type Method (line 22) | type Method
  constant EstPIC (line 26) | EstPIC Method = "estpic"
  type Getter (line 31) | type Getter
  function Register (line 42) | func Register(m Method, g Getter) {
  type Conf (line 49) | type Conf struct
  type Checker (line 57) | type Checker struct
    method Check (line 83) | func (c *Checker) Check(voter string) (err error) {
  function New (line 65) | func New(c *Conf) (checker *Checker, err error) {
  function estpic (line 108) | func estpic(voter string) (dob time.Time, err error) {

FILE: common/collector/age/age_test.go
  function TestCheck (line 11) | func TestCheck(t *testing.T) {
  function TestEstPIC (line 62) | func TestEstPIC(t *testing.T) {

FILE: common/collector/age/log_desc.go
  constant _AGE_CHECKER_UNKNOWN (line 4) | _AGE_CHECKER_UNKNOWN = "Unknown voter age checking utility"
  constant _AGE_TZ (line 5) | _AGE_TZ              = "Failed to parse timezone from configuration file"
  constant _AGE_DOF (line 6) | _AGE_DOF             = "Unable to calculate voter date of birth from vot...
  constant _AGE_YOUNG (line 7) | _AGE_YOUNG           = "Voter is too young"
  constant _AGE_ID (line 8) | _AGE_ID              = "Non-Estonian voter ID"
  constant _AGE_DOF_FORMAT (line 9) | _AGE_DOF_FORMAT      = "Invalid format of voter date of birth"

FILE: common/collector/auth/auth.go
  type Type (line 16) | type Type
  constant Dummy (line 20) | Dummy  Type = "dummy"
  constant TLS (line 21) | TLS    Type = "tls"
  constant Ticket (line 22) | Ticket Type = "ticket"
  type Verifier (line 45) | type Verifier interface
  type VoteIdentifier (line 64) | type VoteIdentifier interface
  type TokenData (line 72) | type TokenData interface
  type NewFunc (line 78) | type NewFunc
  function Register (line 88) | func Register(t Type, n NewFunc) {
  type Conf (line 98) | type Conf
  type Auther (line 101) | type Auther
    method Verify (line 136) | func (a Auther) Verify(ctx context.Context, t Type, token []byte) (
    method Data (line 155) | func (a Auther) Data(t Type, token []byte) (data []byte, err error) {
  function Configure (line 105) | func Configure(c Conf) (a Auther, err error) {

FILE: common/collector/auth/dummy/dummy.go
  function init (line 22) | func init() {
  type Conf (line 33) | type Conf struct
    method Verify (line 40) | func (c *Conf) Verify(_ context.Context, token []byte) (name *pkix.Nam...

FILE: common/collector/auth/dummy/dummy_test.go
  constant authenticatedDN (line 11) | authenticatedDN = "\x30\x1f\x31\x1d\x30\x1b\x06\x03\x55\x04\x03\x13" +
  constant unauthenticatedDN (line 15) | unauthenticatedDN = "\x30\x21\x31\x1f\x30\x1d\x06\x03\x55\x04\x03" +
  function TestVerify (line 20) | func TestVerify(t *testing.T) {

FILE: common/collector/auth/log_desc.go
  constant _AUTH_MALFORMED (line 4) | _AUTH_MALFORMED  = "Wraps errors which are cause by malformed authentica...
  constant _AUTH_CERT (line 5) | _AUTH_CERT       = "Wraps errors which are cause by invalid authenticati...
  constant _AUTH_AUTHORIZED (line 6) | _AUTH_AUTHORIZED = "Wraps errors where authentication succeeded, but the...
  constant _AUTH_UNKNOWN (line 7) | _AUTH_UNKNOWN    = "Unknown authentication method"
  constant _AUTH_CFG (line 8) | _AUTH_CFG        = "Failed to configure authentication utility"

FILE: common/collector/auth/ticket/log_desc.go
  constant _TICKET_NEW_COOKIE (line 4) | _TICKET_NEW_COOKIE = "Failed to create new cookie from provided AES key"
  constant _TICKET_KEY (line 5) | _TICKET_KEY        = "Failed to read AES key file from file system"
  constant _TICKET_NEW (line 6) | _TICKET_NEW        = "Failed to create authentication ticket (cookie)"
  constant _TICKET_VOTEID (line 7) | _TICKET_VOTEID     = "Failed to create vote ID (16-byte random value)"
  constant _TICKET_JSON (line 8) | _TICKET_JSON       = "Failed to JSON marshal authentication ticket content"
  constant _TICKET_VERIFY (line 9) | _TICKET_VERIFY     = "Failed to verify authentication ticket passed by a...
  constant _TICKET_UJSON (line 10) | _TICKET_UJSON      = "Failed to JSON unmarshal authentication ticket con...

FILE: common/collector/auth/ticket/ticket.go
  function init (line 28) | func init() {
  type Conf (line 36) | type Conf struct
  type T (line 41) | type T struct
    method Create (line 83) | func (t *T) Create(subject pkix.Name) (ticket []byte, err error) {
    method Verify (line 100) | func (t *T) Verify(_ context.Context, token []byte) (name *pkix.Name, ...
    method VoteIdentifier (line 113) | func (t *T) VoteIdentifier(token []byte) (voteID []byte, err error) {
    method CreateData (line 123) | func (t *T) CreateData(plain []byte) (ticket []byte, err error) {
    method TokenData (line 130) | func (t *T) TokenData(token []byte) (data []byte, err error) {
    method open (line 134) | func (t *T) open(token []byte) (ticket tt, err error) {
    method openplain (line 151) | func (t *T) openplain(token []byte) (plain []byte, err error) {
  function New (line 46) | func New(key cookie.Key) (t *T, err error) {
  function NewFromSystem (line 56) | func NewFromSystem() (t *T, err error) {
  function NewFromSystemAsCookie (line 69) | func NewFromSystemAsCookie() (*cookie.C, error) {
  type tt (line 77) | type tt struct

FILE: common/collector/auth/tls/log_desc.go
  constant _TLS_CFG (line 4) | _TLS_CFG                   = "Cannot YAML parse TLS authentication confi...
  constant _TLS_NEW (line 5) | _TLS_NEW                   = "Failed to configure TLS authentication uti...
  constant _TLS_CA (line 6) | _TLS_CA                    = "No CA certificate that would verify client...
  constant _TLS_CA_PARSE (line 7) | _TLS_CA_PARSE              = "Failed to parse CA certificate"
  constant _TLS_INTERMEDIATE_CA_PARSE (line 8) | _TLS_INTERMEDIATE_CA_PARSE = "Failed to parse intermediate CA certificate"
  constant _TLS_OCSP (line 9) | _TLS_OCSP                  = "Failed to configure OCSP client for voter ...
  constant _TLS_TICKET (line 10) | _TLS_TICKET                = "TLS authenticated client should not suppor...
  constant _TLS_CERT (line 11) | _TLS_CERT                  = "Voter hasn't provided certificates on TLS ...
  constant _TLS_CERT_VERIFY (line 12) | _TLS_CERT_VERIFY           = "Voter certificate verification failed"
  constant _TLS_CERT_VERIFY_OCSP (line 13) | _TLS_CERT_VERIFY_OCSP      = "Voter certificate OCSP verification failed"
  constant _TLS_CERT_VERIFY_OCSP_BAD (line 14) | _TLS_CERT_VERIFY_OCSP_BAD  = "Voter certificate OCSP status is not good"

FILE: common/collector/auth/tls/tls.go
  function init (line 27) | func init() {
  type Conf (line 42) | type Conf struct
  type V (line 49) | type V struct
    method Verify (line 81) | func (v *V) Verify(ctx context.Context, token []byte) (*pkix.Name, err...
  function New (line 56) | func New(c *Conf) (v *V, err error) {

FILE: common/collector/cmd/verifier/main.go
  function main (line 17) | func main() {
  function verifierMain (line 25) | func verifierMain() (int, error) {

FILE: common/collector/command/command.go
  function mkflag (line 21) | func mkflag(name, value, desc string) *string {
  function mkusage (line 28) | func mkusage(usage string, args ...string) func() {
  constant CheckTrust (line 53) | CheckTrust   = iota
  constant CheckConf (line 54) | CheckConf
  constant CheckVersion (line 55) | CheckVersion
  constant CheckInput (line 56) | CheckInput
  constant Execute (line 57) | Execute
  type C (line 61) | type C struct
    method Cleanup (line 241) | func (c *C) Cleanup(code int) int {
    method Error (line 256) | func (c *C) Error(code int, err log.ErrorEntry, a ...interface{}) int {
  function New (line 106) | func New(tag string, usage string, args ...string) (c *C) {
  function NewWithoutStorage (line 113) | func NewWithoutStorage(tag string, usage string, args ...string) (c *C) {
  function newC (line 117) | func newC(tag string, usage string, withStorage bool, args ...string) (c...

FILE: common/collector/command/exit/exit.go
  constant OK (line 12) | OK = 0
  constant Usage (line 17) | Usage = 64
  constant DataErr (line 21) | DataErr = 65
  constant NoInput (line 26) | NoInput = 66
  constant NoUser (line 30) | NoUser = 67
  constant NoHost (line 34) | NoHost = 68
  constant Unavailable (line 40) | Unavailable = 69
  constant Software (line 45) | Software = 70
  constant OSErr (line 52) | OSErr = 71
  constant OSFile (line 57) | OSFile = 72
  constant CantCreate (line 60) | CantCreate = 73
  constant IOErr (line 63) | IOErr = 74
  constant TempFail (line 69) | TempFail = 75
  constant Protocol (line 73) | Protocol = 76
  constant NoPerm (line 79) | NoPerm = 77
  constant Config (line 81) | Config = 78

FILE: common/collector/command/log_desc.go
  constant _COMMAND_START (line 4) | _COMMAND_START    = "Logger for the command-line application has been co...
  constant _COMMAND_OS (line 5) | _COMMAND_OS       = "OS killed application with either SIGINT or SIGTERM"
  constant _COMMAND_CFG (line 6) | _COMMAND_CFG      = "Failed to read application configuration file"
  constant _COMMAND_INSTANCE (line 7) | _COMMAND_INSTANCE = "Application is being loaded on an instance which id...
  constant _COMMAND_STORAGE (line 8) | _COMMAND_STORAGE  = "Failed to configure storage service client for the ...
  constant _COMMAND_STOP (line 9) | _COMMAND_STOP     = "Application is being stopped, cleanup in progress"

FILE: common/collector/command/status/isatty_linux.go
  function isatty (line 11) | func isatty(fd uintptr) bool {

FILE: common/collector/command/status/isatty_other.go
  function isatty (line 5) | func isatty(fd uintptr) bool {

FILE: common/collector/command/status/status.go
  type Line (line 22) | type Line struct
    method Redraw (line 35) | func (l *Line) Redraw() {
    method redraw (line 44) | func (l *Line) redraw() {
    method setLine (line 48) | func (l *Line) setLine(s string) {
    method Static (line 65) | func (l *Line) Static(s string) {
    method Updatable (line 81) | func (l *Line) Updatable(initial string, redraw bool) Update {
    method Count (line 119) | func (l *Line) Count(total uint64, redraw bool) Add {
    method Percent (line 158) | func (l *Line) Percent(total uint64, redraw bool) Add {
    method push (line 201) | func (l *Line) push(stringer fmt.Stringer) {
    method Pop (line 206) | func (l *Line) Pop() {
    method Hide (line 221) | func (l *Line) Hide() {
    method Show (line 235) | func (l *Line) Show() {
    method Keep (line 251) | func (l *Line) Keep() {
  function New (line 30) | func New() *Line {
  type Update (line 76) | type Update
  type updatable (line 92) | type updatable struct
    method update (line 98) | func (u *updatable) update(s string) string {
    method String (line 109) | func (u updatable) String() string { return u.s }
  type Add (line 113) | type Add
  type count (line 134) | type count struct
    method add (line 141) | func (c *count) add(count uint64) uint64 {
    method String (line 151) | func (c count) String() string { return fmt.Sprintf(c.format, c.curren...
  type percent (line 174) | type percent struct
    method add (line 184) | func (p *percent) add(count uint64) uint64 {
    method String (line 199) | func (p percent) String() string { return fmt.Sprintf("%3d%%", p.perce...

FILE: common/collector/conf/conf.go
  type C (line 36) | type C struct
    method trust (line 282) | func (c *C) trust(ctx context.Context, path string) (code int, err err...
    method parse (line 342) | func (c *C) parse(ctx context.Context, path, key string, v interface{}) (
  type Election (line 44) | type Election struct
    method ServiceStartTime (line 117) | func (e Election) ServiceStartTime() (time.Time, error) {
    method ElectionStartTime (line 122) | func (e Election) ElectionStartTime() (time.Time, error) {
    method ElectionStopTime (line 127) | func (e Election) ElectionStopTime() (time.Time, error) {
    method ServiceStopTime (line 132) | func (e Election) ServiceStopTime() (time.Time, error) {
    method VerificationStopTime (line 137) | func (e Election) VerificationStopTime() (time.Time, error) {
    method VoterForeignEHAKDefault (line 143) | func (e Election) VoterForeignEHAKDefault() string {
  type Technical (line 151) | type Technical struct
    method Services (line 183) | func (t Technical) Services(network string) *Services {
    method Service (line 201) | func (t Technical) Service(id string) (network string, service *Servic...
  type Services (line 169) | type Services struct
  type Service (line 193) | type Service struct
  function Sensitive (line 219) | func Sensitive(id string) string {
  function TLS (line 225) | func TLS(sensitive string) (cert, key string) {
  function New (line 251) | func New(ctx context.Context, trust, election, technical string) (c *C, ...
  function unmarshal (line 381) | func unmarshal(key string, data map[string][]byte, v interface{}) (err e...

FILE: common/collector/conf/conf_test.go
  function TestNew (line 12) | func TestNew(t *testing.T) {

FILE: common/collector/conf/log_desc.go
  constant _CONF_START (line 4) | _CONF_START               = "Starting to parse configuration .bdoc conta...
  constant _CONF_TRUST (line 5) | _CONF_TRUST               = "Failed to parse trust configuration .bdoc c...
  constant _CONF_ELECTION (line 6) | _CONF_ELECTION            = "Failed to parse election configuration .bdo...
  constant _CONF_TECH (line 7) | _CONF_TECH                = "Failed to parse technical configuration .bd...
  constant _CONF_TRUST_READ (line 8) | _CONF_TRUST_READ          = "Failed to read trust configuration .bdoc co...
  constant _CONF_TRUST_BDOC_EXT (line 9) | _CONF_TRUST_BDOC_EXT      = "trust configuration container doesn't have ...
  constant _CONF_TRUST_OPEN (line 10) | _CONF_TRUST_OPEN          = "Failed to open trust configuration .bdoc co...
  constant _CONF_TRUST_CONF (line 11) | _CONF_TRUST_CONF          = "Failed to read trust configuration file"
  constant _CONF_BDOC_OPENER (line 12) | _CONF_BDOC_OPENER         = "Configure container opener based on a trust...
  constant _CONF_REWIND (line 13) | _CONF_REWIND              = "Rewind (back to beginning) trust configurat...
  constant _CONF_BDOC_VERIFY (line 14) | _CONF_BDOC_VERIFY         = "Failed to verify .bdoc container"
  constant _CONF_TRUST_NO_SIG (line 15) | _CONF_TRUST_NO_SIG        = "No signatures found in trust configuration ...
  constant _CONF_TRUST_BDOC_SIG_INFO (line 16) | _CONF_TRUST_BDOC_SIG_INFO = "Summary info of trust configuration .bdoc c...
  constant _CONF_BDOC_READ (line 17) | _CONF_BDOC_READ           = "Unable to read .bdoc container"
  constant _CONF_BDOC_NO_SIG (line 18) | _CONF_BDOC_NO_SIG         = "No signatures found in .bdoc container"
  constant _CONF_BDOC_SIG_INFO (line 19) | _CONF_BDOC_SIG_INFO       = "Summary info of .bdoc container"
  constant _CONF_BDOC_DATA (line 20) | _CONF_BDOC_DATA           = "Failed to read .bdoc container data"
  constant _CONF_YAML_READ (line 21) | _CONF_YAML_READ           = "Failed to unmarshal YAML data from a .bdoc ...
  constant _CONF_YAML_NO_DATA (line 22) | _CONF_YAML_NO_DATA        = "No such data in a .bdoc container"

FILE: common/collector/conf/version/log_desc.go
  constant _VERSION_JSON (line 4) | _VERSION_JSON     = "Failed to JSON marshal signature as {<CN> <timestam...
  constant _VERSION_JSON_ALL (line 5) | _VERSION_JSON_ALL = "Failed to JSON marshal all signatures as [{'<CN> <t...

FILE: common/collector/conf/version/version.go
  type V (line 21) | type V struct
  type Signatures (line 33) | type Signatures
    method MarshalJSON (line 36) | func (s Signatures) MarshalJSON() ([]byte, error) {
  function Container (line 57) | func Container(c container.Container) (version string, err error) {

FILE: common/collector/container/bdoc/asice.go
  constant metainf (line 16) | metainf = "META-INF/"
  type asiceFile (line 22) | type asiceFile struct
    method signature (line 29) | func (f asiceFile) signature() bool {
    method close (line 34) | func (f *asiceFile) close() {
  function openASiCE (line 50) | func openASiCE(r io.Reader, fileCount, zipLimit, fileLimit int64, readSi...
  constant magic (line 207) | magic = "mimetype"
  constant mimetype (line 210) | mimetype = "application/vnd.etsi.asic-e+zip"
  function asiceMagic (line 215) | func asiceMagic(rat io.ReaderAt) error {
  function asiceMagicCentral (line 255) | func asiceMagicCentral(file *zip.File) error {
  function decompress (line 292) | func decompress(file *zip.File, limit int64) (*asiceFile, error) {
  type manifest (line 320) | type manifest struct
  type fileEntry (line 328) | type fileEntry struct
  function readManifest (line 341) | func readManifest(data []byte, files map[string]*asiceFile) error {

FILE: common/collector/container/bdoc/asice_test.go
  function TestASiCEMagic (line 12) | func TestASiCEMagic(t *testing.T) {
  function TestReadManifest (line 93) | func TestReadManifest(t *testing.T) {

FILE: common/collector/container/bdoc/bdoc.go
  function init (line 26) | func init() {
  function configure (line 31) | func configure(n yaml.Node) (container.OpenFunc, error) {
  function unverifiedOpen (line 51) | func unverifiedOpen(encoded io.Reader) (container.Container, error) {
  type Profile (line 64) | type Profile
  constant BES (line 68) | BES Profile = "BES"
  constant TS (line 69) | TS  Profile = "TS"
  type Conf (line 75) | type Conf struct
  type Opener (line 111) | type Opener struct
    method Open (line 190) | func (o *Opener) Open(encoded io.Reader) (bdoc *BDOC, err error) {
    method check (line 369) | func (o *Opener) check(
    method verifyCertificate (line 745) | func (o *Opener) verifyCertificate(c *x509.Certificate, time time.Time) (
  function New (line 124) | func New(c *Conf) (*Opener, error) {
  type BDOC (line 182) | type BDOC struct
    method Signatures (line 319) | func (b *BDOC) Signatures() []container.Signature {
    method Data (line 324) | func (b *BDOC) Data() map[string][]byte {
    method Close (line 333) | func (b *BDOC) Close() error {
    method SignatureValue (line 347) | func (b *BDOC) SignatureValue(id string) ([]byte, error) {
    method TimestampData (line 358) | func (b *BDOC) TimestampData(id string) ([]byte, error) {
  constant xmlc14n11 (line 367) | xmlc14n11 = "http://www.w3.org/2006/12/xml-c14n11"
  function checkSignatureValue (line 427) | func checkSignatureValue(s *signature, c *x509.Certificate) (signature [...
  function checkReferences (line 472) | func checkReferences(s *signature, files map[string]*asiceFile) error {
  function findReference (line 559) | func findReference(refs []reference, uri string) (reference, error) {
  function findDataObjectFormat (line 577) | func findDataObjectFormat(dofs []dataObjectFormat, ref string) (dataObje...
  function checkSignedProperties (line 587) | func checkSignedProperties(p *signedProperties, c *x509.Certificate) err...
  function checkSigningCertificate (line 613) | func checkSigningCertificate(s *signingCertificate, c *x509.Certificate)...
  function checkOCSP (line 652) | func checkOCSP(values *ocspValues, c, issuer *x509.Certificate,
  function checkTimestamp (line 681) | func checkTimestamp(timestamp *xadesTimeStamp, sigval *signatureValue, t...
  function checkXMLDigest (line 722) | func checkXMLDigest(method digestMethod, data []byte, digest digestValue...
  function b64d (line 773) | func b64d(data string) ([]byte, error) {

FILE: common/collector/container/bdoc/bdoc_test.go
  constant trustConfTS (line 18) | trustConfTS = "testdata/trustTS.yaml"
  constant trustConfTM (line 20) | trustConfTM = "testdata/trustTM.yaml"
  constant trustConfBES (line 22) | trustConfBES = "testdata/trustBES.yaml"
  constant dataKey (line 24) | dataKey   = "test.txt"
  constant dataValue (line 25) | dataValue = "Test data"
  constant TM (line 39) | TM = "TM"
  constant signatureIDS0 (line 42) | signatureIDS0 = "S0"
  constant signatureIDS1 (line 44) | signatureIDS1 = "S1"
  constant expectedEqualObjects (line 47) | expectedEqualObjects = "Expected o1 == o2, got o1: %v, o2: %v\n"
  type Supplier (line 50) | type Supplier
  function unsupportedProfileErrorMessageSupplier (line 52) | func unsupportedProfileErrorMessageSupplier(profile Profile) Supplier {
  function tsProfileOCSPDelayedErrorMessageSupplier (line 61) | func tsProfileOCSPDelayedErrorMessageSupplier(signatureID string) Suppli...
  function tsProfileOCSPOldErrorMessageSupplier (line 75) | func tsProfileOCSPOldErrorMessageSupplier(signatureID string) Supplier {
  function noDataFilesErrorMessageSupplier (line 89) | func noDataFilesErrorMessageSupplier() Supplier {
  function noSignatureErrorMessageSupplier (line 100) | func noSignatureErrorMessageSupplier() Supplier {
  function manifestErrorMessageSupplier (line 111) | func manifestErrorMessageSupplier() Supplier {
  function tmProfilePolicyErrorMessageSupplier (line 122) | func tmProfilePolicyErrorMessageSupplier(signatureID string) Supplier {
  function tmProfileTimestampErrorMessageSupplier (line 135) | func tmProfileTimestampErrorMessageSupplier(signatureID string) Supplier {
  function loadTrustConf (line 148) | func loadTrustConf(profile Profile) (*Opener, error) {
  function testLoadConf (line 164) | func testLoadConf(confPath string) (o *Opener, err error) {
  function TestOpen (line 182) | func TestOpen(t *testing.T) {
  function testCompareNames (line 304) | func testCompareNames(signatures []container.Signature, signers []string...

FILE: common/collector/container/bdoc/c14n.go
  type c14n (line 11) | type c14n struct
    method isPresent (line 30) | func (c c14n) isPresent() bool {
  function c14nHeader (line 37) | func c14nHeader(v reflect.Value) *c14n {
  type writer (line 54) | type writer struct
    method write (line 68) | func (w *writer) write(v reflect.Value, root bool) {
    method writeAttributes (line 102) | func (w *writer) writeAttributes(header *c14n, root bool) {
    method writeAttribute (line 142) | func (w *writer) writeAttribute(a attr) {
    method writeSubelements (line 152) | func (w *writer) writeSubelements(v reflect.Value, header *c14n) {
    method writeString (line 223) | func (w *writer) writeString(s string, attr bool) {
    method writeRaw (line 241) | func (w *writer) writeRaw(str ...string) {
  function sortAttr (line 248) | func sortAttr(attrs []attr) {
  function lessAttr (line 260) | func lessAttr(a, b attr) bool {
  function writeXML (line 282) | func writeXML(v interface{}, b *bytes.Buffer) {

FILE: common/collector/container/bdoc/c14n_test.go
  function TestWriteXML (line 12) | func TestWriteXML(t *testing.T) {
  function TestWriteXMLSignedInfo (line 382) | func TestWriteXMLSignedInfo(t *testing.T) {

FILE: common/collector/container/bdoc/log_desc.go
  constant _CONTAINER_READER_TO_READER_AT (line 4) | _CONTAINER_READER_TO_READER_AT      = "Cannot convert from io.Reader to ...
  constant _CONTAINER_ASICE_MAGIC (line 5) | _CONTAINER_ASICE_MAGIC              = "Failed to read ASiCE magic number"
  constant _CONTAER_ZIP_READER (line 6) | _CONTAER_ZIP_READER                 = "Failed to read zip container"
  constant _CONTAINER_DUP (line 7) | _CONTAINER_DUP                      = "Duplicate file found in a zip con...
  constant _CONTAINER_ASICE_CENTRAL_MAGIC (line 8) | _CONTAINER_ASICE_CENTRAL_MAGIC      = "We have checked that the first fi...
  constant _CONTAINER_ZIP_MANIFEST (line 9) | _CONTAINER_ZIP_MANIFEST             = "Failed to unzip manifest.xml"
  constant _CONTAINER_META (line 10) | _CONTAINER_META                     = "META-INF/ directory contains unkn...
  constant _CONTAINER_DIRS (line 11) | _CONTAINER_DIRS                     = "Container contains directories, b...
  constant _CONTAINER_UNZIP_FILE (line 12) | _CONTAINER_UNZIP_FILE               = "Unzipping file failed"
  constant _CONTAINER_EOCD (line 13) | _CONTAINER_EOCD                     = "Failed to locate .ZIP end of cent...
  constant _CONTAINER_MALFORMED_ZIP (line 14) | _CONTAINER_MALFORMED_ZIP            = ".ZIP has appended bytes at the end"
  constant _CONTAINER_BDOC_MANI (line 15) | _CONTAINER_BDOC_MANI                = "No manifest.xml file found in a ....
  constant _CONTAINER_BDOC_SIG (line 16) | _CONTAINER_BDOC_SIG                 = "No signature*.xml file found in a...
  constant _CONTAINER_BDOC_DATA (line 17) | _CONTAINER_BDOC_DATA                = "No data in a .bdoc container"
  constant _CONTAINER_BDOC_MANI_READ (line 18) | _CONTAINER_BDOC_MANI_READ           = "Reading manifest.xml failed"
  constant _CONTAINER_ZIP_MAGIC (line 19) | _CONTAINER_ZIP_MAGIC                = "Failed to read ZIP magic number"
  constant _CONTAINER_ZIP_MAGIC_LEN (line 20) | _CONTAINER_ZIP_MAGIC_LEN            = "ZIP magic incorrect length"
  constant _CONTAINER_ASICE_MAGIC_FORMAT (line 21) | _CONTAINER_ASICE_MAGIC_FORMAT       = "Not an ASiCE magic"
  constant _CONTAINER_ZIP_MIME (line 22) | _CONTAINER_ZIP_MIME                 = "Invalid compressed MIME type"
  constant _CONTAINER_ZIP_EXTRA (line 23) | _CONTAINER_ZIP_EXTRA                = "No extra data allowed in a .bdoc ...
  constant _CONTAINER_ZIP_MIME_LEN (line 24) | _CONTAINER_ZIP_MIME_LEN             = "Invalid MIME type length"
  constant _CONTAINER_ASICE_MIME (line 25) | _CONTAINER_ASICE_MIME               = "Not an ASiCE MIME type"
  constant CONTAINER_MIME (line 26) | CONTAINER_MIME                      = "File name is not 'mimetype'"
  constant _CONTAINER_MIME_OFF (line 27) | _CONTAINER_MIME_OFF                 = "Offset of mimetype file is wrong ...
  constant _CONTAINER_MIME_C_OFF (line 28) | _CONTAINER_MIME_C_OFF               = "Central offset of mimetype type i...
  constant _CONTAINER_HEADER_COMPRESS (line 29) | _CONTAINER_HEADER_COMPRESS          = "Checking directory header compres...
  constant _CONTAINER_MIME_CONTENT (line 30) | _CONTAINER_MIME_CONTENT             = "'mimetype' file content is not 'a...
  constant _CONTAINER_MIME_CONTENT_EXT (line 31) | _CONTAINER_MIME_CONTENT_EXT         = "Extra data found in 'mimetype' file"
  constant _CONTAINER_ZIP_OPEN (line 32) | _CONTAINER_ZIP_OPEN                 = "Failed to open zipped file"
  constant _CONTAINER_ZIP_READ (line 33) | _CONTAINER_ZIP_READ                 = "Failed to read zipped file"
  constant _CONTAINER_ZIP_DIFF (line 34) | _CONTAINER_ZIP_DIFF                 = "Uncompressed file size differs fr...
  constant _CONTAINER_ZIP_XML (line 35) | _CONTAINER_ZIP_XML                  = "XML parse manifest.xml error"
  constant _CONTAINER_ZIP_XML_MANY (line 36) | _CONTAINER_ZIP_XML_MANY             = "Multiple manifest.xml found"
  constant _CONTAINER_MIME_ROOT (line 37) | _CONTAINER_MIME_ROOT                = "manifest.xml should have a root M...
  constant _CONTAINER_FILE_FROM_MANI (line 38) | _CONTAINER_FILE_FROM_MANI           = "Reading ZIP container files list ...
  constant _CONTAINER_SIG_FROM_MANI (line 39) | _CONTAINER_SIG_FROM_MANI            = "Reading ZIP container signatures ...
  constant _CONTAINER_SIG_FILE_MANI (line 40) | _CONTAINER_SIG_FILE_MANI            = "No signature for a given file fou...
  constant _CONTAINER_BDOC_CFG (line 41) | _CONTAINER_BDOC_CFG                 = "Failed to read YAML configuration...
  constant _CONTAINER_BDOC_NEW (line 42) | _CONTAINER_BDOC_NEW                 = "Failed to create .bdoc container ...
  constant _CONTAINER_BDOC_OPEN (line 43) | _CONTAINER_BDOC_OPEN                = "Failed to open .bdoc container"
  constant _CONTAINER_BDOC_FILE_COUNT (line 44) | _CONTAINER_BDOC_FILE_COUNT          = ".bdoc files count <= 0"
  constant _CONTAINER_BDOC_SIZE (line 45) | _CONTAINER_BDOC_SIZE                = ".bdoc container size <= 0"
  constant _CONTAINER_BDOC_DATA_SIZE (line 46) | _CONTAINER_BDOC_DATA_SIZE           = ".bdoc container data size <= 0"
  constant _CONTAINER_BDOC_CA (line 47) | _CONTAINER_BDOC_CA                  = "No CA certificates provided that ...
  constant _CONTAINER_BDOC_CA_PARSE (line 48) | _CONTAINER_BDOC_CA_PARSE            = "Failed to parse CA certificates"
  constant _CONTAINER_BDOC_ICA_PARSE (line 49) | _CONTAINER_BDOC_ICA_PARSE           = "Failed to parse intermediate CA c...
  constant _CONTAINER_BDOC_TSA (line 50) | _CONTAINER_BDOC_TSA                 = "Failed to create a TSA provider's...
  constant _CONTAINER_BDOC_OCSP (line 51) | _CONTAINER_BDOC_OCSP                = "Failed to create a OCSP provider'...
  constant _CONTAINER_BDOC_PROFILE (line 52) | _CONTAINER_BDOC_PROFILE             = "Unknown .bdoc profile"
  constant _CONTAINER_BDOC_XADES_SIG_TIME (line 53) | _CONTAINER_BDOC_XADES_SIG_TIME      = ".bdoc container xades signature n...
  constant _CONTAINER_BDOC_XADES_SIG (line 54) | _CONTAINER_BDOC_XADES_SIG           = "Failed to parse .bdoc container x...
  constant _CONTAINER_BDOC_CERT_SIG (line 55) | _CONTAINER_BDOC_CERT_SIG            = "Failed to parse certificate of a ...
  constant _CONTAINER_BDOC_CERT_SIG_VERIFY (line 56) | _CONTAINER_BDOC_CERT_SIG_VERIFY     = "Failed to verify certificate of a...
  constant _CONTAINER_BDOC_SIG_B64 (line 57) | _CONTAINER_BDOC_SIG_B64             = "Failed to base-64 decode signature"
  constant _CONTAINER_BDOC_CERT_OCSP (line 58) | _CONTAINER_BDOC_CERT_OCSP           = "Failed to check voter certificate...
  constant _CONTAINER_BDOC_OCSP_ID (line 59) | _CONTAINER_BDOC_OCSP_ID             = "No OCSP response found for this s...
  constant _CONTAINER_BDOC_TSA_ID (line 60) | _CONTAINER_BDOC_TSA_ID              = "No TSA response found for this si...
  constant _CONTAINER_BDOC_Q (line 61) | _CONTAINER_BDOC_Q                   = "QualifyingProperties in XML signa...
  constant _CONTAINER_BDOC_TS (line 62) | _CONTAINER_BDOC_TS                  = "OCSP producedAt > (TSA timestamp ...
  constant _CONTAINER_BDOC_SIG_ALG (line 63) | _CONTAINER_BDOC_SIG_ALG             = "Unsupported signing algorithm"
  constant _CONTAINER_BDOC_SIG_CALG (line 64) | _CONTAINER_BDOC_SIG_CALG            = "Unsupported canonicalized signing...
  constant _CONTAINER_BDOC_XML2ASN1 (line 65) | _CONTAINER_BDOC_XML2ASN1            = "Failed to transform signature fro...
  constant _CONTAINER_BDOC_SIG_VERIFY (line 66) | _CONTAINER_BDOC_SIG_VERIFY          = "Failed to verify signature"
  constant _CONTAINER_BDOC_REF (line 67) | _CONTAINER_BDOC_REF                 = "Invalid signed properties referen...
  constant _CONTAINER_BDOC_SIG_PROP_CALG (line 68) | _CONTAINER_BDOC_SIG_PROP_CALG       = "Unsupported signed properties can...
  constant _CONTAINER_BDOC_SIG_PROP_DIG (line 69) | _CONTAINER_BDOC_SIG_PROP_DIG        = "Signed properties reference diges...
  constant _CONTAINER_BDOC_FILE_REF (line 70) | _CONTAINER_BDOC_FILE_REF            = "File reference with transforms"
  constant _CONTAINER_BDOC_FILE_DIG (line 71) | _CONTAINER_BDOC_FILE_DIG            = "File reference digest error"
  constant _CONTAINER_BDOC_DO (line 72) | _CONTAINER_BDOC_DO                  = "Data object format mismatches MIM...
  constant _CONTAINER_BDOC_N_REF (line 73) | _CONTAINER_BDOC_N_REF               = "References to unprocessed files e...
  constant _CONTAINER_BDOC_DO_EX (line 74) | _CONTAINER_BDOC_DO_EX               = "Extra data object formats error"
  constant _CONTAINER_BDOC_REF_URI (line 75) | _CONTAINER_BDOC_REF_URI             = "Reference URI unescape error"
  constant _CONTAINER_BDOC_REF_N_URI (line 76) | _CONTAINER_BDOC_REF_N_URI           = "No reference with URI found"
  constant _CONTAINER_BDOC_REF_NO (line 77) | _CONTAINER_BDOC_REF_NO              = "No data object format with refere...
  constant _CONTAINER_BDOC_SIG_POLICY (line 78) | _CONTAINER_BDOC_SIG_POLICY          = "Unexpected signature policy ident...
  constant _CONTAINER_BDOC_SIG_PARSE (line 79) | _CONTAINER_BDOC_SIG_PARSE           = "Signing certificate digest error"
  constant _CONTAINER_BDOC_SIG_SER (line 80) | _CONTAINER_BDOC_SIG_SER             = "Checking signing certificate seri...
  constant _CONTAINER_BDOC_CERT_ISS (line 81) | _CONTAINER_BDOC_CERT_ISS            = "Parsing issuer from certificate f...
  constant _CONTAINER_BDOC_CERT_ISS_VERIFY (line 82) | _CONTAINER_BDOC_CERT_ISS_VERIFY     = "Failed to verify issuer from cert...
  constant _CONTAINER_BDOC_CERT_N_OCSP (line 83) | _CONTAINER_BDOC_CERT_N_OCSP         = "No OCSP response found in a certi...
  constant _CONTAINER_BDOC_CERT_OCSP_B64 (line 84) | _CONTAINER_BDOC_CERT_OCSP_B64       = "Failed to base-64 decode OCSP res...
  constant _CONTAINER_BDOC_CERT_OCSP_VERIFY (line 85) | _CONTAINER_BDOC_CERT_OCSP_VERIFY    = "OCSP response verification failed"
  constant _CONTAINER_BDOC_CERT_OCSP_BAD (line 86) | _CONTAINER_BDOC_CERT_OCSP_BAD       = "OCSP response status is not good"
  constant _CONTAINER_BDOC_CERT_TSA_CALG (line 87) | _CONTAINER_BDOC_CERT_TSA_CALG       = "Unsupported TSA canonicalization ...
  constant _CONTAINER_BDOC_CERT_N_TSA (line 88) | _CONTAINER_BDOC_CERT_N_TSA          = "No TSA response found in a certif...
  constant _CONTAINER_BDOC_CERT_TSA_B64 (line 89) | _CONTAINER_BDOC_CERT_TSA_B64        = "Failed to base-64 decode TSA resp...
  constant _CONTAINER_BDOC_CERT_VALIDATE (line 90) | _CONTAINER_BDOC_CERT_VALIDATE       = "Failed to validate TSA response"
  constant _CONTAINER_DIG_ALG (line 91) | _CONTAINER_DIG_ALG                  = "Unsupported digest algorithm"
  constant _CONTAINER_DIG_ALG_B64 (line 92) | _CONTAINER_DIG_ALG_B64              = "base-64 decoding digest failed"
  constant _CONTAINER_DIG_ALG_VERIFY (line 93) | _CONTAINER_DIG_ALG_VERIFY           = "Digest verification failed"
  constant _CONTAINER_KEY_USAGE_CONTENT_COMMIT (line 94) | _CONTAINER_KEY_USAGE_CONTENT_COMMIT = "Not a non repudiation certificate"
  constant _CONTAINER_READER (line 95) | _CONTAINER_READER                   = "Reading into in-memory io.ReaderA...
  constant _CONTAINER_READER_REWIND (line 96) | _CONTAINER_READER_REWIND            = "Rewind io.ReaderAt pointer at cur...
  constant _CONTAINER_READER_REWIND_END (line 97) | _CONTAINER_READER_REWIND_END        = "Rewind io.ReaderAt pointer at end...
  constant _CONTAINER_READER_REWIND_START (line 98) | _CONTAINER_READER_REWIND_START      = "Rewind io.ReaderAt pointer at sta...
  constant _CONTAINER_READER_BUF (line 99) | _CONTAINER_READER_BUF               = "Cannot read io.ReaderAt buffer size"
  constant _CONTAINER_READER_BUF_LIM (line 100) | _CONTAINER_READER_BUF_LIM           = "io.ReaderAt buffer size exceeds l...
  constant _CONTAINER_XML_EOF (line 101) | _CONTAINER_XML_EOF                  = "XML current token is EOF, but sti...
  constant _CONTAINER_XML_TOKEN_PARSE (line 102) | _CONTAINER_XML_TOKEN_PARSE          = "Failed to parse XML token"
  constant _CONTAINER_XML_ATTR_DUP (line 103) | _CONTAINER_XML_ATTR_DUP             = "Duplicate XML attributes found"
  constant _CONTAINER_XML_ATTR_EMPTY (line 104) | _CONTAINER_XML_ATTR_EMPTY           = "Empty XML attribute found"
  constant _CONTAINER_XML_NS (line 105) | _CONTAINER_XML_NS                   = "Undeclared XML namespace prefix e...
  constant _CONTAINER_XML_NS_EMPTY (line 106) | _CONTAINER_XML_NS_EMPTY             = "Empty XML namespace prefix"
  constant _CONTAINER_XML_NS_INNER (line 107) | _CONTAINER_XML_NS_INNER             = "No inner xmlns namespace allowed"
  constant _CONTAINER_XML_NS_UNDEC (line 108) | _CONTAINER_XML_NS_UNDEC             = "Undeclared namespace found"
  constant _CONTAINER_XML_NS_COLON (line 109) | _CONTAINER_XML_NS_COLON             = "Namespace or prefix contain semic...
  constant _CONTAINER_XML_END (line 110) | _CONTAINER_XML_END                  = "Unexpected XML end element"
  constant _CONTAINER_XML_TAGS (line 111) | _CONTAINER_XML_TAGS                 = "Mismatching XML element tags"
  constant _CONTAINER_XML_START_TOKEN (line 112) | _CONTAINER_XML_START_TOKEN          = "Parse XML start token error"
  constant _CONTAINER_XML_START_TOKEN_FAIL (line 113) | _CONTAINER_XML_START_TOKEN_FAIL     = "Parsed XML start token, but found...
  constant _CONTAINER_XML_TOKEN (line 114) | _CONTAINER_XML_TOKEN                = "Parsed XML token, but found unexp...
  constant _CONTAINER_XML_END_TOKEN (line 115) | _CONTAINER_XML_END_TOKEN            = "Parse XML end token error"
  constant _CONTAINER_XML_TOKEN_TRAIL_EL (line 116) | _CONTAINER_XML_TOKEN_TRAIL_EL       = "Parsed XML token, but found trail...
  constant _CONTAINER_XML_TOKEN_TRAIL (line 117) | _CONTAINER_XML_TOKEN_TRAIL          = "Parsed XML token, but found trail...
  constant _CONTAINER_XML_TOKEN_ATTR (line 118) | _CONTAINER_XML_TOKEN_ATTR           = "Parsed XML token, but found missi...
  constant _CONTAINER_XML_TOKEN_ATTR_UNIQ (line 119) | _CONTAINER_XML_TOKEN_ATTR_UNIQ      = "Parse XML token, but found non-un...
  constant _CONTAINER_XML_TOKEN_ATTR_EX (line 120) | _CONTAINER_XML_TOKEN_ATTR_EX        = "Parse extra XML attribute error"
  constant _CONTAINER_XML_TOKEN_CHAR_DATA (line 121) | _CONTAINER_XML_TOKEN_CHAR_DATA      = "Parse XML character data token er...
  constant _CONTAINER_XML_EL_STRUCT (line 122) | _CONTAINER_XML_EL_STRUCT            = "Failed to parse XML struct element"
  constant _CONTAINER_XML_EL_SLICE (line 123) | _CONTAINER_XML_EL_SLICE             = "Failed to parse XML slice element"

FILE: common/collector/container/bdoc/mapstack.go
  type mapstack (line 6) | type mapstack
    method push (line 9) | func (s *mapstack) push() {
    method set (line 14) | func (s *mapstack) set(key, value string) {
    method pop (line 25) | func (s *mapstack) pop() {
    method get (line 30) | func (s *mapstack) get(key string) (string, bool) {
    method flatten (line 40) | func (s *mapstack) flatten() map[string]string {

FILE: common/collector/container/bdoc/pool.go
  function buffer (line 17) | func buffer() *bytes.Buffer {
  function release (line 21) | func release(buf *bytes.Buffer) {

FILE: common/collector/container/bdoc/reader.go
  type readAtCloser (line 12) | type readAtCloser struct
    method close (line 17) | func (ratc *readAtCloser) close() {
  function toReaderAt (line 35) | func toReaderAt(r io.Reader, limit int64) (ratc *readAtCloser, size int6...

FILE: common/collector/container/bdoc/reader_test.go
  type testReader (line 10) | type testReader
    method Read (line 16) | func (r *testReader) Read(p []byte) (int, error) {
  function newReader (line 12) | func newReader(data []byte) *testReader {
  type testReaderAt (line 21) | type testReaderAt struct
    method ReadAt (line 27) | func (r *testReaderAt) ReadAt(p []byte, off int64) (int, error) {
  function newReaderAt (line 23) | func newReaderAt(data []byte) testReaderAt {
  type testReadAtSeeker (line 32) | type testReadAtSeeker struct
    method Seek (line 34) | func (r testReadAtSeeker) Seek(offset int64, whence int) (int64, error) {
  type testReadAtSizer (line 39) | type testReadAtSizer struct
    method Size (line 41) | func (r testReadAtSizer) Size() int64 {
  function TestToReaderAt (line 47) | func TestToReaderAt(t *testing.T) {

FILE: common/collector/container/bdoc/xades.go
  type xadesSignatures (line 5) | type xadesSignatures struct
  type signature (line 11) | type signature struct
  type signedInfo (line 21) | type signedInfo struct
  type canonicalizationMethod (line 30) | type canonicalizationMethod struct
  type signatureMethod (line 36) | type signatureMethod struct
  type reference (line 42) | type reference struct
  type transforms (line 54) | type transforms struct
  type transform (line 59) | type transform struct
  type digestMethod (line 65) | type digestMethod struct
  type digestValue (line 71) | type digestValue struct
  type signatureValue (line 77) | type signatureValue struct
  type keyInfo (line 84) | type keyInfo struct
  type x509Data (line 91) | type x509Data struct
  type x509Certificate (line 96) | type x509Certificate struct
  type object (line 102) | type object struct
  type qualifyingProperties (line 112) | type qualifyingProperties struct
  type signedProperties (line 122) | type signedProperties struct
  type signedSignatureProperties (line 131) | type signedSignatureProperties struct
  type signingTime (line 147) | type signingTime struct
  type signingCertificate (line 153) | type signingCertificate struct
  type cert (line 158) | type cert struct
  type certDigest (line 166) | type certDigest struct
  type issuerSerial (line 172) | type issuerSerial struct
  type x509IssuerName (line 179) | type x509IssuerName struct
  type x509SerialNumber (line 184) | type x509SerialNumber struct
  type signaturePolicyIdentifier (line 190) | type signaturePolicyIdentifier struct
  type signaturePolicyID (line 197) | type signaturePolicyID struct
  type sigPolicyID (line 205) | type sigPolicyID struct
  type identifier (line 213) | type identifier struct
  type description (line 219) | type description struct
  type sigPolicyHash (line 225) | type sigPolicyHash struct
  type sigPolicyQualifiers (line 231) | type sigPolicyQualifiers struct
  type sigPolicyQualifier (line 237) | type sigPolicyQualifier struct
  type spURI (line 243) | type spURI struct
  type signatureProductionPlace (line 249) | type signatureProductionPlace struct
  type city (line 258) | type city struct
  type stateOrProvince (line 263) | type stateOrProvince struct
  type postalCode (line 268) | type postalCode struct
  type countryName (line 273) | type countryName struct
  type signerRole (line 279) | type signerRole struct
  type claimedRoles (line 285) | type claimedRoles struct
  type claimedRole (line 290) | type claimedRole struct
  type signedDataObjectProperties (line 296) | type signedDataObjectProperties struct
  type dataObjectFormat (line 306) | type dataObjectFormat struct
  type mimeType (line 316) | type mimeType struct
  type unsignedProperties (line 322) | type unsignedProperties struct
  type unsignedSignatureProperties (line 331) | type unsignedSignatureProperties struct
  type xadesTimeStamp (line 343) | type xadesTimeStamp struct
  type encapsulatedTimeStamp (line 351) | type encapsulatedTimeStamp struct
  type certificateValues (line 358) | type certificateValues struct
  type encapsulatedX509Certificate (line 366) | type encapsulatedX509Certificate struct
  type revocationValues (line 375) | type revocationValues struct
  type ocspValues (line 384) | type ocspValues struct
  type encapsulatedOCSPValue (line 390) | type encapsulatedOCSPValue struct

FILE: common/collector/container/bdoc/xml.go
  constant xmlns (line 12) | xmlns = "xmlns"
  constant digidocManifestExtraSpace (line 18) | digidocManifestExtraSpace = "manifest"
  constant digidocManifestExtraLocal (line 24) | digidocManifestExtraLocal = "version"
  type parser (line 35) | type parser struct
    method token (line 58) | func (p *parser) token() (xml.Token, error) {
    method translate (line 142) | func (p *parser) translate(space *string, attr bool) error {
    method push (line 168) | func (p *parser) push(start *xml.StartElement) error {
    method pop (line 211) | func (p *parser) pop(name xml.Name) error {
    method readToken (line 227) | func (p *parser) readToken() (xml.Token, error) {
    method unreadToken (line 236) | func (p *parser) unreadToken(token xml.Token, err error) {
    method readCharacterData (line 250) | func (p *parser) readCharacterData() (string, error) {
    method readWhitespace (line 270) | func (p *parser) readWhitespace() string {
    method parse (line 369) | func (p *parser) parse(v reflect.Value, optional bool) (match bool, er...
    method parseAttributes (line 435) | func (p *parser) parseAttributes(v reflect.Value, s startElement) (n i...
    method parseSubelements (line 481) | func (p *parser) parseSubelements(v reflect.Value, header *c14n, attrn...
  function newParser (line 48) | func newParser(r io.Reader) *parser {
  type attr (line 122) | type attr struct
    method namespace (line 127) | func (a attr) namespace() bool {
  type startElement (line 136) | type startElement struct
  function findAttr (line 157) | func findAttr(attrs []attr, name xml.Name) *attr {
  constant xmlx (line 554) | xmlx = "xmlx"
  constant xmlxC14NRoot (line 557) | xmlxC14NRoot = 1 << iota
  constant xmlxAttr (line 558) | xmlxAttr
  constant xmlxOptional (line 559) | xmlxOptional
  constant xmlxUnique (line 560) | xmlxUnique
  constant xmlxCharData (line 561) | xmlxCharData
  function xmlxElement (line 564) | func xmlxElement(f reflect.StructField) (name xml.Name, c14nroot bool) {
  function xmlxAttribute (line 573) | func xmlxAttribute(f reflect.StructField) (name xml.Name, attr, optional...
  function xmlxCharacterData (line 592) | func xmlxCharacterData(f reflect.StructField) bool {
  function xmlxSubelement (line 612) | func xmlxSubelement(f reflect.StructField) (optional bool) {
  function xmlxTag (line 628) | func xmlxTag(f reflect.StructField, allowed int) (name xml.Name, flags i...
  function parseXML (line 672) | func parseXML(data []byte, v interface{}) error {
  function valueOfPtr (line 703) | func valueOfPtr(v interface{}) reflect.Value {

FILE: common/collector/container/bdoc/xml_test.go
  function TestParserToken (line 13) | func TestParserToken(t *testing.T) {
  function TestParseXML (line 205) | func TestParseXML(t *testing.T) {

FILE: common/collector/container/container.go
  type Signature (line 20) | type Signature struct
    method CommonName (line 27) | func (s *Signature) CommonName() string {
  type Container (line 41) | type Container interface
  type Conf (line 70) | type Conf
  type Opener (line 73) | type Opener
    method Open (line 113) | func (o Opener) Open(t Type, container io.Reader) (c Container, err er...
    method OpenFile (line 124) | func (o Opener) OpenFile(path string) (c Container, err error) {
  function Configure (line 77) | func Configure(c Conf) (o Opener, err error) {
  function UnverifiedOpen (line 146) | func UnverifiedOpen(t Type, container io.Reader) (c Container, err error) {

FILE: common/collector/container/dummy/dummy.go
  function init (line 39) | func init() {
  type Conf (line 60) | type Conf struct
    method Open (line 69) | func (c *Conf) Open(encoded io.Reader) (cnt container.Container, err e...
    method trusted (line 131) | func (c *Conf) trusted(cn string) bool {
  function decode (line 146) | func decode(s string) ([]byte, error) {
  type dummy (line 156) | type dummy struct
    method Signatures (line 161) | func (d *dummy) Signatures() []container.Signature {
    method Data (line 165) | func (d *dummy) Data() map[string][]byte {
    method Close (line 169) | func (d *dummy) Close() error {
    method SignatureValue (line 176) | func (d *dummy) SignatureValue(id string) ([]byte, error) {
    method TimestampData (line 183) | func (d *dummy) TimestampData(id string) ([]byte, error) {
    method checkID (line 187) | func (d *dummy) checkID(id string) error {

FILE: common/collector/container/dummy/dummy_test.go
  constant dataKey (line 12) | dataKey   = "signed data"
  constant dataValue (line 13) | dataValue = `this is some data that is "signed" in the container`
  constant signerCN (line 14) | signerCN  = "dummy container test certificate"
  constant issuerCN (line 15) | issuerCN  = "dummy container test issuer"
  constant encoded (line 17) | encoded = `
  function TestDummy (line 50) | func TestDummy(t *testing.T) {
  function TestTrusted (line 77) | func TestTrusted(t *testing.T) {

FILE: common/collector/container/log_desc.go
  constant _CONTAINER_PARSE (line 4) | _CONTAINER_PARSE  = "Unsupported .bdoc container parser"
  constant _CONTAINER_CNAME (line 5) | _CONTAINER_CNAME  = ".bdoc container parser has no canonical name"
  constant _CONTAINER_PARSER (line 6) | _CONTAINER_PARSER = "Failed to configure .bdoc container parser"
  constant _CONTAINER_OPEN (line 7) | _CONTAINER_OPEN   = "Failed to open .bdoc container"
  constant _CONTAINER_EXT (line 8) | _CONTAINER_EXT    = "Missing .bdoc container extension"

FILE: common/collector/container/registry.go
  type Type (line 12) | type Type
  constant Dummy (line 16) | Dummy Type = "dummy"
  constant BDOC (line 17) | BDOC  Type = "bdoc"
  constant ASiCE (line 18) | ASiCE Type = "asice"
  type OpenFunc (line 23) | type OpenFunc
  type NewFunc (line 27) | type NewFunc
  type UnverifiedOpenFunc (line 31) | type UnverifiedOpenFunc
  type regentry (line 33) | type regentry struct
  function Register (line 57) | func Register(t Type, n NewFunc, o UnverifiedOpenFunc, aliases ...Type) {

FILE: common/collector/cookie/cookie.go
  type Key (line 19) | type Key
  type C (line 22) | type C struct
    method Create (line 54) | func (c *C) Create(data []byte) (cookie []byte) {
    method Open (line 77) | func (c *C) Open(cookie []byte) (data []byte, err error) {
  function New (line 30) | func New(key Key) (c *C, err error) {

FILE: common/collector/cookie/cookie_test.go
  function zero (line 10) | func zero(t *testing.T) *C {
  function TestCreate (line 28) | func TestCreate(t *testing.T) {
  function TestOpen (line 34) | func TestOpen(t *testing.T) {
  function TestIncrementNonce (line 42) | func TestIncrementNonce(t *testing.T) {

FILE: common/collector/cookie/log_desc.go
  constant _COOKIE_AES (line 4) | _COOKIE_AES   = "Failed to create AES cipher"
  constant _COOKIE_NONCE (line 5) | _COOKIE_NONCE = "Failed to create a nonce (random value)"
  constant _COOKIE_SHORT (line 6) | _COOKIE_SHORT = "Cookie size is too short"
  constant _COOKIE_READ (line 7) | _COOKIE_READ  = "Failed to verify a cookie"

FILE: common/collector/crypto/elgamal/ciphertext.go
  function UnmarshalCiphertext (line 57) | func UnmarshalCiphertext(g group.Group, data asn_11.DER) (*elgamal.Ciphe...

FILE: common/collector/crypto/elgamal/ciphertext_test.go
  constant modP3072Group (line 12) | modP3072Group = "RFC3526ModPGroup3072"
  constant ecP384Group (line 13) | ecP384Group   = "NIST-P384"
  constant base64DERModP3072Ciphertext (line 15) | base64DERModP3072Ciphertext = "MIIDGjALBgkrBgEEAZdVAgEwggMJAoIBgQCDkyKlA...
  constant base64DERECp384Ciphertext (line 16) | base64DERECp384Ciphertext   = "MIHWMAsGCSsGAQQBho0fATCBxgRhBI/cd6M0Dyjed...
  function TestASN1CiphertextVerify (line 19) | func TestASN1CiphertextVerify(t *testing.T) {

FILE: common/collector/crypto/elgamal/log_desc.go
  constant _CIP_SEQ (line 4) | _CIP_SEQ          = "Failed to read ElGamal ciphertext ASN.1 sequence"
  constant _CIP_AID (line 5) | _CIP_AID          = "Failed to read ElGamal ciphertext AlgorithmIdentifier"
  constant _CIP_AID_OID (line 6) | _CIP_AID_OID      = "Failed to read ElGamal ciphertext AlgorithmIdentifi...
  constant _CIP_OID_MISMATCH (line 7) | _CIP_OID_MISMATCH = "Ciphertext oid is not ElGamal oid"
  constant _CIP_DATA (line 8) | _CIP_DATA         = "Failed to read ElGamal ciphertext data ASN.1 sequence"
  constant _CIP_A (line 9) | _CIP_A            = "Failed to read ElGamal ciphertext A ASN.1 element"
  constant _CIP_B (line 10) | _CIP_B            = "Failed to read ElGamal ciphertext B ASN.1 element"
  constant _CIP_TRAIL (line 11) | _CIP_TRAIL        = "Trailing bytes left while reading ASN.1 ElGamal cip...
  constant _CIP_MARSHAL (line 12) | _CIP_MARSHAL      = "Failed to ASN.1 marshal ElGamal ciphertext"
  constant _CIP_VERIFY (line 13) | _CIP_VERIFY       = "Failed to verify ASN.1 ElGamal ciphertext"
  constant _PUB_MODP_PARAMS (line 14) | _PUB_MODP_PARAMS  = "Failed to ASN.1 unmarshal x509 key ModP group param...
  constant _PUB_ECP_PARAMS (line 15) | _PUB_ECP_PARAMS   = "Failed to ASN.1 unmarshal x509 key ECp group parame...
  constant _PUB_ALGO (line 16) | _PUB_ALGO         = "Unknown ASN.1 unmarshalled x509 key parameters algo...
  constant _PUB_PARAMS (line 17) | _PUB_PARAMS       = "Failed to ASN.1 unmarshal x509 key parameters"
  constant _PUB_DATA (line 18) | _PUB_DATA         = "Failed to ASN.1 unmarshal x509 key data"
  constant _PUB_TRAIL (line 19) | _PUB_TRAIL        = "ASN.1 unmarshalling x509 key data left trailing byt...
  constant _PUB_EL (line 20) | _PUB_EL           = "Failed to ASN.1 unmarshal ElGamal public key element"
  constant _MODP_LEN (line 21) | _MODP_LEN         = "Unsupported ModP element length"
  constant _MODP_G (line 22) | _MODP_G           = "Unknown ModP group"
  constant _ECP_LEN (line 23) | _ECP_LEN          = "Unsupported ECp element length"
  constant _ECP_G (line 24) | _ECP_G            = "Unknown ECp group"

FILE: common/collector/crypto/elgamal/x509.go
  type ECpGroupParameters (line 17) | type ECpGroupParameters struct
    method IVXVECpGroupParser (line 127) | func (p *ECpGroupParameters) IVXVECpGroupParser() (G group.Group, err ...
  type ModPGroupParameters (line 22) | type ModPGroupParameters struct
    method IVXVModPGroupParser (line 105) | func (p *ModPGroupParameters) IVXVModPGroupParser() (G group.Group, er...
  type X509Unmarshaller (line 28) | type X509Unmarshaller struct
    method UnmarshalKeyParameters (line 38) | func (x509 *X509Unmarshaller) UnmarshalKeyParameters(algorithmIdentifi...
    method UnmarshalKeyElement (line 82) | func (x509 *X509Unmarshaller) UnmarshalKeyElement(g group.Group, der a...
  function NewX509Unmarshaller (line 32) | func NewX509Unmarshaller() *X509Unmarshaller {

FILE: common/collector/crypto/elgamal/x509_test.go
  constant modP3072IVXVPEMPublicKey (line 11) | modP3072IVXVPEMPublicKey = "-----BEGIN PUBLIC KEY-----\nMIIDMjCCAaEGCSsG...
  constant ecP384IVXVPEMPublicKey (line 12) | ecP384IVXVPEMPublicKey   = "-----BEGIN PUBLIC KEY-----\nMIGGMBwGCSsGAQQB...
  function TestX509Unmarshaller (line 15) | func TestX509Unmarshaller(t *testing.T) {

FILE: common/collector/cryptoutil/cryptoutil.go
  constant entropy256bit (line 19) | entropy256bit uint64 = 32
  function DigestInfo (line 49) | func DigestInfo(h crypto.Hash, data []byte) []byte {
  function PEMDecode (line 63) | func PEMDecode(encoded, blockType string) (decoded []byte, err error) {
  function PEMCertificates (line 87) | func PEMCertificates(pems ...string) (certs []*x509.Certificate, err err...
  function PEMCertificate (line 104) | func PEMCertificate(p string) (cert *x509.Certificate, err error) {
  function Base64Certificate (line 119) | func Base64Certificate(b string) (cert *x509.Certificate, err error) {
  function PEMCertificatePool (line 135) | func PEMCertificatePool(pems ...string) (pool *x509.CertPool, err error) {
  function CertificatePool (line 150) | func CertificatePool(certs ...*x509.Certificate) (pool *x509.CertPool) {
  function ReEncodeECDSASignature (line 162) | func ReEncodeECDSASignature(signature []byte) (recode []byte, err error) {
  function IsECDSAASN1EncodedSignature (line 178) | func IsECDSAASN1EncodedSignature(signature []byte) error {
  function ParseECDSAXMLSignature (line 205) | func ParseECDSAXMLSignature(signature []byte) (r, s *big.Int, err error) {
  function ParseECDSAASN1Signature (line 221) | func ParseECDSAASN1Signature(der []byte) (r, s *big.Int, err error) {
  function AlgorithmIdentifierCmp (line 238) | func AlgorithmIdentifierCmp(a, b pkix.AlgorithmIdentifier) bool {
  function Nonce44Bytes (line 258) | func Nonce44Bytes() (string, error) {

FILE: common/collector/cryptoutil/cryptoutil_test.go
  function TestDigestInfo (line 17) | func TestDigestInfo(t *testing.T) {
  function TestPEMDecode (line 76) | func TestPEMDecode(t *testing.T) {
  function TestNonce44Bytes (line 103) | func TestNonce44Bytes(t *testing.T) {

FILE: common/collector/cryptoutil/log_desc.go
  constant _CUTIL_PEM (line 4) | _CUTIL_PEM               = "Failed to PEM decode"
  constant _CUTIL_PEM_H (line 5) | _CUTIL_PEM_H             = "Unexpected PEM header"
  constant _CUTIL_PEM_H_BAD (line 6) | _CUTIL_PEM_H_BAD         = "Invalid PEM header"
  constant _CUTIL_CERT_PEM (line 7) | _CUTIL_CERT_PEM          = "Failed to parse PEM certificate"
  constant _CUTIL_CERT_B64 (line 8) | _CUTIL_CERT_B64          = "base-64 decoding of a certificate content fa...
  constant _CUTIL_CERT_PARSE (line 9) | _CUTIL_CERT_PARSE        = "Failed to parse certificate content"
  constant _CUTIL_ECDSA2XML (line 10) | _CUTIL_ECDSA2XML         = "Failed to convert ECDSA signature to XML for...
  constant _CUTIL_ASN1ECDSA (line 11) | _CUTIL_ASN1ECDSA         = "ASN.1 marshalling of ECDSA signature failed"
  constant _CUTIL_UASN1ECDSA (line 12) | _CUTIL_UASN1ECDSA        = "ASN.1 unmarshalling of ECDSA signature failed"
  constant _CUTIL_ECDSA_SIZE (line 13) | _CUTIL_ECDSA_SIZE        = "ECDSA signature has invalid size"
  constant _CUTIL_44B_RAND (line 14) | _CUTIL_44B_RAND          = "Cannot generate 44-byte random value"
  constant _CUTIL_ATTR_ASN1 (line 15) | _CUTIL_ATTR_ASN1         = "Attribute value ASN.1 marshalling failed"
  constant _CUTIL_RDN_PREFIX (line 16) | _CUTIL_RDN_PREFIX        = "Missing ',' prefix in relative distinguish n...
  constant _CUTIL_RDN_NO (line 17) | _CUTIL_RDN_NO            = "Missing relative distinguish name string"
  constant _CUTIL_RDN_ATTR_NO (line 18) | _CUTIL_RDN_ATTR_NO       = "Missing relative distinguish name attribute"
  constant _CUTIL_RDN_EQ (line 19) | _CUTIL_RDN_EQ            = "Missing '=' in relative distinguish name str...
  constant _CUTIL_ATTR_UNKNOWN (line 20) | _CUTIL_ATTR_UNKNOWN      = "Unknown relative distinguish name attribute"
  constant _CUTIL_ATTR_SHORT (line 21) | _CUTIL_ATTR_SHORT        = "Relative distinguish name attribute's Object...
  constant _CUTIL_ATTR_HEX (line 22) | _CUTIL_ATTR_HEX          = "Missing relative distinguish name attribute ...
  constant _CUTIL_ATTR_HEX_DEC (line 23) | _CUTIL_ATTR_HEX_DEC      = "Failed to base-16 decode relative distinguis...
  constant _CUTIL_ATTR_UASN1 (line 24) | _CUTIL_ATTR_UASN1        = "Failed to ASN.1 unmarshal relative distingui...
  constant _CUTIL_ATTR_UTF8 (line 25) | _CUTIL_ATTR_UTF8         = "Relative distinguish name attribute value is...
  constant _CUTIL_ATTR_SLASH (line 26) | _CUTIL_ATTR_SLASH        = "Relative distinguish name attribute value ha...
  constant _CUTIL_ATTR_1_CHAR (line 27) | _CUTIL_ATTR_1_CHAR       = "Relative distinguish name attribute value's ...
  constant _CUTIL_ATTR_HEX_PAIR (line 28) | _CUTIL_ATTR_HEX_PAIR     = "Invalid relative distinguish name attribute ...
  constant _CUTIL_ATTR_UNKNOWN_CHAR (line 29) | _CUTIL_ATTR_UNKNOWN_CHAR = "Relative distinguish name attribute value co...
  constant _CUTIL_ATTR_CHAR_EMPTY (line 30) | _CUTIL_ATTR_CHAR_EMPTY   = "Relative distinguish name attribute value ha...
  constant _CUTIL_ATTR_SPACE (line 31) | _CUTIL_ATTR_SPACE        = "Relative distinguish name attribute value ha...

FILE: common/collector/cryptoutil/rdn.go
  function RDNSequenceEqual (line 26) | func RDNSequenceEqual(a, b pkix.RDNSequence) bool {
  function rdnEqual (line 39) | func rdnEqual(a, b pkix.RelativeDistinguishedNameSET) bool {
  function init (line 100) | func init() {
  function EncodeRDNSequence (line 109) | func EncodeRDNSequence(dn pkix.RDNSequence) (string, error) {
  function encodeATV (line 132) | func encodeATV(buf *bytes.Buffer, atv pkix.AttributeTypeAndValue) error {
  function DecodeRDNSequence (line 162) | func DecodeRDNSequence(encoded string) (pkix.RDNSequence, error) {
  function decodeATV (line 210) | func decodeATV(encoded string) (atv pkix.AttributeTypeAndValue, rest str...
  function decodeHexString (line 254) | func decodeHexString(encoded string, value *interface{}) (rest string, e...
  function decodeEscaped (line 296) | func decodeEscaped(encoded string) (value, rest string, err error) {

FILE: common/collector/cryptoutil/rdn_test.go
  function TestRDNSequenceEqual (line 9) | func TestRDNSequenceEqual(t *testing.T) {
  function TestEncodeDecodeRDNSequence (line 124) | func TestEncodeDecodeRDNSequence(t *testing.T) {

FILE: common/collector/errors/errors.go
  type Causer (line 16) | type Causer interface
  function Walk (line 24) | func Walk(err error, f func(error) error) error {
  function CausedBy (line 42) | func CausedBy(err error, v interface{}) (found error) {

FILE: common/collector/errors/errors_test.go
  function ExampleWalk (line 8) | func ExampleWalk() {
  function ExampleCausedBy (line 22) | func ExampleCausedBy() {

FILE: common/collector/identity/identity.go
  type Type (line 14) | type Type
  constant CommonName (line 18) | CommonName   Type = "commonname"
  constant SerialNumber (line 19) | SerialNumber Type = "serialnumber"
  constant PNOEE (line 20) | PNOEE        Type = "pnoee"
  type Identifier (line 25) | type Identifier
  function Register (line 38) | func Register(t Type, i Identifier) {
  function Get (line 45) | func Get(t Type) (i Identifier, err error) {
  function commonName (line 56) | func commonName(name *pkix.Name) (id string, err error) {
  function serialNumber (line 70) | func serialNumber(name *pkix.Name) (id string, err error) {
  function pnoee (line 88) | func pnoee(name *pkix.Name) (id string, err error) {

FILE: common/collector/identity/log_desc.go
  constant _IDENTITY_UNKNOWN (line 4) | _IDENTITY_UNKNOWN      = "Unknown identity checking utility type"
  constant _IDENTITY_NO_DN (line 5) | _IDENTITY_NO_DN        = "Empty x509 certificate distinguished name (DN)"
  constant _IDENTITY_NO_CN (line 6) | _IDENTITY_NO_CN        = "Empty x509 certificate common name (CN)"
  constant _IDENTITY_NO_DN_SERIAL (line 7) | _IDENTITY_NO_DN_SERIAL = "Empty x509 certificate distinguished name (DN)...
  constant _IDENTITY_NO_CN_SERIAL (line 8) | _IDENTITY_NO_CN_SERIAL = "Empty x509 certificate common name (CN) serial...
  constant _IDENTITY_NO_VOTER_ID (line 9) | _IDENTITY_NO_VOTER_ID  = "Empty x509 certificate PKIX voter name"

FILE: common/collector/log/log.go
  constant timefmt (line 27) | timefmt = "2006-01-02T15:04:05.000000000Z07:00"
  type key (line 37) | type key
  constant loggerKey (line 40) | loggerKey key = iota
  constant connIDKey (line 41) | connIDKey
  constant sessIDKey (line 42) | sessIDKey
  type logger (line 45) | type logger struct
  type writer (line 54) | type writer interface
  type noopWriter (line 62) | type noopWriter struct
    method Debug (line 64) | func (w noopWriter) Debug(string) error { return nil }
    method Info (line 65) | func (w noopWriter) Info(string) error  { return nil }
    method Err (line 66) | func (w noopWriter) Err(string) error   { return nil }
    method Alert (line 67) | func (w noopWriter) Alert(string) error { return nil }
    method Close (line 68) | func (w noopWriter) Close() error       { return nil }
  function NewContext (line 73) | func NewContext(ctx context.Context, tag string) (context.Context, error) {
  function TestContext (line 89) | func TestContext(ctx context.Context) context.Context {
  function SetDebug (line 94) | func SetDebug(ctx context.Context, debug bool) {
  function Close (line 103) | func Close(ctx context.Context) error {
  function WithConnectionID (line 114) | func WithConnectionID(ctx context.Context, cid string) context.Context {
  function WithSessionID (line 120) | func WithSessionID(ctx context.Context, sid string) context.Context {
  function fromctx (line 124) | func fromctx(ctx context.Context) *logger {
  type Entry (line 133) | type Entry interface
  type ErrorEntry (line 138) | type ErrorEntry interface
  type Sensitive (line 149) | type Sensitive
  function Debug (line 153) | func Debug(ctx context.Context, entry Entry) {
  function Log (line 235) | func Log(ctx context.Context, entry Entry) {
  function Error (line 247) | func Error(ctx context.Context, entry ErrorEntry) {
  type alert (line 256) | type alert struct
    method Cause (line 260) | func (a alert) Cause() error  { return a.err }
    method Error (line 261) | func (a alert) Error() string { return a.err.Error() }
  function Alert (line 264) | func Alert(err error) error {
  type message (line 268) | type message struct
  function format (line 277) | func format(ctx context.Context, entry Entry) string {
  type encoder (line 327) | type encoder struct
    method encode (line 343) | func (e *encoder) encode(v reflect.Value, nest bool) (err error) {
    method encodeSensitive (line 419) | func (e *encoder) encodeSensitive(sensitive Sensitive) (err error) {
    method encodeRDNSequence (line 431) | func (e *encoder) encodeRDNSequence(rdns pkix.RDNSequence) (err error) {
    method encodeCertificate (line 441) | func (e *encoder) encodeCertificate(c *x509.Certificate) (err error) {
    method encodeString (line 461) | func (e *encoder) encodeString(s string) (err error) {
    method encodeArray (line 476) | func (e *encoder) encodeArray(v reflect.Value) (err error) {
    method encodeMap (line 492) | func (e *encoder) encodeMap(v reflect.Value) (err error) {
    method encodeStruct (line 521) | func (e *encoder) encodeStruct(v reflect.Value) (err error) {
    method encodeNested (line 544) | func (e *encoder) encodeNested(n Entry) (err error) {
  function empty (line 570) | func empty(b []byte) bool {
  type reqMessage (line 577) | type reqMessage struct
  function Request (line 590) | func Request(ctx context.Context, request []byte) error {

FILE: common/collector/log/log_test.go
  constant nowstr (line 16) | nowstr = "2016-11-03T13:42:24.123000000Z"
  type testWriter (line 19) | type testWriter struct
    method Debug (line 23) | func (t testWriter) Debug(m string) error {
    method Info (line 28) | func (t testWriter) Info(m string) error {
    method Err (line 33) | func (t testWriter) Err(m string) error {
    method Alert (line 38) | func (t testWriter) Alert(m string) error {
    method Close (line 43) | func (t testWriter) Close() error {
  function testContext (line 48) | func testContext(ctx context.Context, b *bytes.Buffer, now time.Time, ci...
  type testEmpty (line 64) | type testEmpty struct
    method EntryID (line 66) | func (t *testEmpty) EntryID() string { return "TestEmpty" }
  type testString (line 68) | type testString
    method EntryID (line 70) | func (t testString) EntryID() string { return "TestString" }
  type testNumber (line 72) | type testNumber
    method EntryID (line 74) | func (t testNumber) EntryID() string { return "TestNumber" }
  type testArray (line 76) | type testArray
    method EntryID (line 78) | func (t testArray) EntryID() string { return "TestArray" }
  type testSlice (line 80) | type testSlice
    method EntryID (line 82) | func (t testSlice) EntryID() string { return "TestSlice" }
  type testBase64 (line 84) | type testBase64
    method EntryID (line 86) | func (t testBase64) EntryID() string { return "TestBase64" }
  type testMap (line 88) | type testMap
    method EntryID (line 90) | func (t testMap) EntryID() string { return "TestMap" }
  type testStruct (line 92) | type testStruct struct
    method EntryID (line 96) | func (t testStruct) EntryID() string { return "TestStruct" }
  type testStringer (line 98) | type testStringer
    method String (line 100) | func (t testStringer) String() string { return string(t) + ".String" }
  type testError (line 102) | type testError
    method Error (line 104) | func (t testError) Error() string { return string(t) + ".Error" }
  type testNested (line 106) | type testNested struct
    method EntryID (line 110) | func (t testNested) EntryID() string { return "TestNested" }
  type testSensitive (line 112) | type testSensitive struct
    method EntryID (line 116) | func (t testSensitive) EntryID() string { return "TestSensitive" }
  type testErrorEntry (line 118) | type testErrorEntry struct
    method EntryID (line 122) | func (t testErrorEntry) EntryID() string { return "TestErrorEntry" }
    method Cause (line 123) | func (t testErrorEntry) Cause() error    { return t.Err }
    method Error (line 124) | func (t testErrorEntry) Error() string   { return t.Err.Error() }
  type testTime (line 126) | type testTime struct
    method EntryID (line 130) | func (t testTime) EntryID() string { return "TestTime" }
  type testCertificate (line 132) | type testCertificate struct
    method EntryID (line 136) | func (t testCertificate) EntryID() string { return "TestCertificate" }
  function TestSeverity (line 138) | func TestSeverity(t *testing.T) {
  function TestDebug (line 166) | func TestDebug(t *testing.T) {
  function TestFormat (line 187) | func TestFormat(t *testing.T) {

FILE: common/collector/mid/authenticate.go
  method MobileAuthenticate (line 12) | func (c *Client) MobileAuthenticate(ctx context.Context, idCode, phone s...
  method GetMobileAuthenticateStatus (line 45) | func (c *Client) GetMobileAuthenticateStatus(ctx context.Context, sessco...
  method parseAndVerify (line 65) | func (c *Client) parseAndVerify(ctx context.Context, certDER []byte) (
  function VerifyAuthenticationSignature (line 124) | func VerifyAuthenticationSignature(cert *x509.Certificate, algorithm str...

FILE: common/collector/mid/certificate.go
  type getMobileCertificate (line 9) | type getMobileCertificate struct
  type getMobileCertificateResponse (line 17) | type getMobileCertificateResponse struct
  method GetMobileCertificate (line 25) | func (c *Client) GetMobileCertificate(ctx context.Context, id, phone str...

FILE: common/collector/mid/http.go
  constant maxResponseSize (line 16) | maxResponseSize = 10240
  type errorResponse (line 19) | type errorResponse struct
  function httpGet (line 25) | func httpGet(ctx context.Context, url string, resp interface{}) error {
  function httpPost (line 36) | func httpPost(ctx context.Context, url string, req interface{}, resp int...
  function httpDo (line 55) | func httpDo(ctx context.Context, tag string, httpReq *http.Request, resp...

FILE: common/collector/mid/log_desc.go
  constant _MID_RAND (line 4) | _MID_RAND             = "Generate random value for Mobile-ID challenge"
  constant _MID_SESS (line 5) | _MID_SESS             = "Cannot create Mobile-ID session via Mobile-ID p...
  constant _MID_SESS_STAT (line 6) | _MID_SESS_STAT        = "HTTP get session status from Mobile-ID provider...
  constant _MID_CERT (line 7) | _MID_CERT             = "Parsing client Mobile-ID certificate failed"
  constant _MID_CERT_VERIFY (line 8) | _MID_CERT_VERIFY      = "Failed to verify client Mobile-ID certificate"
  constant _MID_OCSP (line 9) | _MID_OCSP             = "Failed to check client Mobile-ID certificate ag...
  constant _MID_OCSP_N_GOOD (line 10) | _MID_OCSP_N_GOOD      = "OCSP status of client Mobile-ID certificate is ...
  constant _MID_ALG (line 11) | _MID_ALG              = "Unsupported Mobile-ID signature algorithm"
  constant _MID_XML2ASN1 (line 12) | _MID_XML2ASN1         = "Mobile-ID signature is failed to be converted f...
  constant _MID_SIG (line 13) | _MID_SIG              = "Failed to verify signature of a Mobile-ID client"
  constant _MID_N_ID (line 14) | _MID_N_ID             = "No voter ID"
  constant _MID_N_PNO (line 15) | _MID_N_PNO            = "No voter phone nr."
  constant _MID_HTTP_CERT (line 16) | _MID_HTTP_CERT        = "Failed to get Mobile-ID certificate from Mobile...
  constant _MID_RESP_NFOUND (line 17) | _MID_RESP_NFOUND      = "Mobile-ID provider responded with NOT_FOUND"
  constant _MID_RESP_NACTIVE (line 18) | _MID_RESP_NACTIVE     = "Mobile-ID provider responded with NOT_ACTIVE"
  constant _MID_RESP_UNKNOWN_ERR (line 19) | _MID_RESP_UNKNOWN_ERR = "Mobile-ID provider responded with unknown error...
  constant _MID_URI (line 20) | _MID_URI              = "Failed to prepare request URI for Mobile-ID pro...
  constant _MID_JSON (line 21) | _MID_JSON             = "JSON marshalling request for Mobile-ID provider...
  constant _MID_HTTP (line 22) | _MID_HTTP             = "Failed to prepare HTTP request URI for Mobile-I...
  constant _MID_HTTP_READY (line 23) | _MID_HTTP_READY       = "HTTP request for Mobile-ID provider has been pr...
  constant _MID_HTTP_SEND (line 24) | _MID_HTTP_SEND        = "Sending HTTP request to Mobile-ID provider"
  constant _MID_RESP_ERR (line 25) | _MID_RESP_ERR         = "Mobile-ID provider responded with error"
  constant _MID_CLOSE (line 26) | _MID_CLOSE            = "Cannot gracefully close HTTP connection with Mo...
  constant _MID_RESP (line 27) | _MID_RESP             = "Successfully received Mobile-ID provider response"
  constant _MID_RESP_PARSE (line 28) | _MID_RESP_PARSE       = "Cannot parse HTTP Mobile-ID provider response"
  constant _MID_RESP_PARSE_OK (line 29) | _MID_RESP_PARSE_OK    = "Successfully parsed HTTP Mobile-ID provider res...
  constant _MID_RESP_READ (line 30) | _MID_RESP_READ        = "Failed to read Mobile-ID response"
  constant _MID_RESP_READ_OK (line 31) | _MID_RESP_READ_OK     = "Successfully read Mobile-ID response"
  constant _MID_RESP_JSONCODE (line 32) | _MID_RESP_JSONCODE    = "JSON unmarshalling error code from Mobile-ID pr...
  constant _MID_ERRCODE (line 33) | _MID_ERRCODE          = "Error status code from Mobile-ID provider"
  constant _MID_RESP_JSON (line 34) | _MID_RESP_JSON        = "JSON unmarshalling response for Mobile-ID provi...
  constant _MID_IN (line 35) | _MID_IN               = "This error wraps errors which are caused by bad...
  constant _MID_USER (line 36) | _MID_USER             = "Error returned if the submitted phone number do...
  constant _MID_SIM (line 37) | _MID_SIM              = "Error returned if there is a problem with user'...
  constant _MID_ABS (line 38) | _MID_ABS              = "Error returned if the voter's phone is absent (...
  constant _MID_CANCEL (line 39) | _MID_CANCEL           = "Error returned if the voter canceled the operat...
  constant _MID_EXP (line 40) | _MID_EXP              = "Error returned if the session expired before th...
  constant _MID_CERT_ERR (line 41) | _MID_CERT_ERR         = "Wraps errors which are caused by errors with th...
  constant _MID_STAT_ERR (line 42) | _MID_STAT_ERR         = "Wraps errors which are caused by an unexpected ...
  constant _MID_N_HASH (line 43) | _MID_N_HASH           = "No hashing algorithm provided"
  constant _MID_N_HASH_T (line 44) | _MID_N_HASH_T         = "No hashing type provided"
  constant _MID_SESS_STATE (line 45) | _MID_SESS_STATE       = "Unknown Mobile-ID session state"
  constant _MID_SESS_RES (line 46) | _MID_SESS_RES         = "Unknown Mobile-ID session result"
  constant _MID_CA (line 47) | _MID_CA               = "No CA certificates provided to verify Mobile-ID...
  constant _MID_CA_PARSE (line 48) | _MID_CA_PARSE         = "Failed to parse Mobile-ID CA certificate"
  constant _MID_ICA_PARSE (line 49) | _MID_ICA_PARSE        = "Failed to parse Mobile-ID intermediate CA certi...
  constant _MID_OCSP_CFG (line 50) | _MID_OCSP_CFG         = "Failed to configure Mobile-ID OCSP client"
  constant _MID_HASH (line 51) | _MID_HASH             = "Unsupported hash algorithm"

FILE: common/collector/mid/mid.go
  type Conf (line 60) | type Conf struct
  type Client (line 87) | type Client struct
  function New (line 100) | func New(conf *Conf) (c *Client, err error) {
  function findAuthHashFunction (line 130) | func findAuthHashFunction(size int64) (crypto.Hash, error) {

FILE: common/collector/mid/mid_test.go
  constant testID (line 19) | testID     = "60001018800"
  constant testSerial (line 20) | testSerial = "PNOEE-60001018800"
  constant testPhone (line 21) | testPhone  = "+37200000566"
  function TestMain (line 29) | func TestMain(m *testing.M) {
  function TestAuthentication (line 65) | func TestAuthentication(t *testing.T) {
  function TestCertificate (line 97) | func TestCertificate(t *testing.T) {
  function TestSigning (line 114) | func TestSigning(t *testing.T) {

FILE: common/collector/mid/session.go
  type sessType (line 10) | type sessType
  constant sessAuth (line 13) | sessAuth sessType = "authentication"
  constant sessSign (line 14) | sessSign sessType = "signature"
  type startSessionRequest (line 40) | type startSessionRequest struct
  type startSessionResponse (line 53) | type startSessionResponse struct
  method startSession (line 59) | func (c *Client) startSession(ctx context.Context, t sessType, idCode, p...
  type sessionStatusResponse (line 110) | type sessionStatusResponse struct
  type signatureResponse (line 119) | type signatureResponse struct
  method getSessionStatus (line 126) | func (c *Client) getSessionStatus(ctx context.Context, t sessType, sessc...

FILE: common/collector/mid/sign.go
  method MobileSignHash (line 8) | func (c *Client) MobileSignHash(ctx context.Context, idCode, phone strin...
  method GetMobileSignHashStatus (line 23) | func (c *Client) GetMobileSignHashStatus(ctx context.Context, sesscode s...

FILE: common/collector/ocsp/log_desc.go
  constant _OCSP_RESPONDER (line 4) | _OCSP_RESPONDER        = "Failed to parse OCSP response intermediate cer...
  constant _OCSP_URI (line 5) | _OCSP_URI              = "No OCSP provider URI"
  constant _OCSP_REQ (line 6) | _OCSP_REQ              = "Failed to create OCSP client request"
  constant _OCSP_CONN (line 7) | _OCSP_CONN             = "Could not contact OCSP provider, trying again"
  constant _OCSP_FAIL (line 8) | _OCSP_FAIL             = "OCSP provider responded with error"
  constant _OCSP_RESP (line 9) | _OCSP_RESP             = "Failed to verify OCSP provider response"
  constant _OCSP_PARSE (line 10) | _OCSP_PARSE            = "Could not parse OCSP response"
  constant _OCSP_RAW2BS (line 11) | _OCSP_RAW2BS           = "Failed to parse OCSP response to basic OCSP re...
  constant _OCSP_ASN1 (line 12) | _OCSP_ASN1             = "ASN.1 marshalling OCSP client request failed"
  constant _OCSP_REQ_PREP (line 13) | _OCSP_REQ_PREP         = "Failed to prepare OCSP client request"
  constant _OCSP_REQ_HTTP (line 14) | _OCSP_REQ_HTTP         = "Failed to create HTTP request to be sent to OC...
  constant _OCSP_REQ_INFO (line 15) | _OCSP_REQ_INFO         = "Info about HTTP request to OCSP provider"
  constant _OCSP_REQ_SEND (line 16) | _OCSP_REQ_SEND         = "Sending OCSP request to OCSP provider over HTTP"
  constant _OCSP_REQ_FAIL (line 17) | _OCSP_REQ_FAIL         = "OCSP provider responded with error"
  constant _OCSP_REQ_CLOSE (line 18) | _OCSP_REQ_CLOSE        = "Failed to close HTTP connection between OCSP c...
  constant _OCSP_REQ_RESP (line 19) | _OCSP_REQ_RESP         = "Successfully received OCSP response from OCSP ...
  constant _OCSP_RESP_DUMP (line 20) | _OCSP_RESP_DUMP        = "Failed to parse HTTP OCSP response"
  constant _OCSP_RESP_OK (line 21) | _OCSP_RESP_OK          = "Successfully parsed OCSP response"
  constant _OCSP_RESP_STAT (line 22) | _OCSP_RESP_STAT        = "OCSP response has non-OK status"
  constant _OCSP_RESP_HTTP_HEADER (line 23) | _OCSP_RESP_HTTP_HEADER = "OCSP response 'Content-Type' HTTP header is no...
  constant _OCSP_RESP_READ (line 24) | _OCSP_RESP_READ        = "Failed to read OCSP response"
  constant _OCSP_RESP_READ_OK (line 25) | _OCSP_RESP_READ_OK     = "Successfully read OCSP response"
  constant _OCSP_RESP_BASIC (line 26) | _OCSP_RESP_BASIC       = "Failed to parse OCSP response as basic OCSP re...
  constant _OCSP_AUTHKID (line 27) | _OCSP_AUTHKID          = "Missing 'AuthorityKeyId' field in a x509 certi...
  constant _OCSP_RESP_ASN1 (line 28) | _OCSP_RESP_ASN1        = "ASN.1 unmarshalling OCSP response failed"
  constant _OCSP_RESP_TYPE (line 29) | _OCSP_RESP_TYPE        = "OCSP response type is not basic"
  constant _OCSP_RESP_B_ASN1 (line 30) | _OCSP_RESP_B_ASN1      = "ASN.1 unmarshalling basic OCSP response failed"
  constant _OCSP_COMMON_CHECKS (line 31) | _OCSP_COMMON_CHECKS    = "Failed to perform common OCSP checks"
  constant _OCSP_OFF (line 32) | _OCSP_OFF              = "OCSP thisUpdate value > now + (OCSP allowed of...
  constant _OCSP_EXPIRED (line 33) | _OCSP_EXPIRED          = "OCSP is response is expired"
  constant _OCSP_BETWEEN (line 34) | _OCSP_BETWEEN          = "OCSP response producedAt is not between thisUp...
  constant _OCSP_STORED (line 35) | _OCSP_STORED           = "Check stored in .bdoc container OCSP response ...
  constant _OCSP_PAT (line 36) | _OCSP_PAT              = "OCSP producedAt >= thisUpdate"
  constant _OCSP_SUB (line 37) | _OCSP_SUB              = "(producedAt - thisUpdate) > OCSP allowed offset"
  constant _OCSP_UNIQ (line 38) | _OCSP_UNIQ             = "Only 1 OCSP response is allowed"
  constant _OCSP_CERT (line 39) | _OCSP_CERT             = "User certificate from OCSP response doesn't ma...
  constant _OCSP_NONCE (line 40) | _OCSP_NONCE            = "Nonce calculated not equal to nonce from OCSP ...
  constant _OCSP_RESPONDER_GET (line 41) | _OCSP_RESPONDER_GET    = "Fetching all responder certificates from an el...
  constant _OCSP_ALG_UNKNOWN (line 42) | _OCSP_ALG_UNKNOWN      = "Unsupported signature algorithm from OCSP resp...
  constant _OCSP_SIG_VERIFY (line 43) | _OCSP_SIG_VERIFY       = "Checking signature from OCSP response failed"
  constant _OCSP_CERT_PARSE (line 44) | _OCSP_CERT_PARSE       = "Parsing OCSP responder certificate from an OCS...
  constant _OCSP_CERT_VERIFY (line 45) | _OCSP_CERT_VERIFY      = "Verify OCSP responder certificate against OCSP...
  constant _OCSP_N_ISSUER (line 46) | _OCSP_N_ISSUER         = "No OCSP CA certificate provided to verify OCSP...

FILE: common/collector/ocsp/ocsp.go
  constant maxSkew (line 29) | maxSkew = 300 * time.Millisecond
  constant maxAge (line 33) | maxAge = 1 * time.Minute
  constant maxResponseSize (line 36) | maxResponseSize = 10240
  type Conf (line 56) | type Conf struct
  type Client (line 84) | type Client struct
    method Check (line 133) | func (c *Client) Check(ctx context.Context, cert, issuer *x509.Certifi...
    method CheckFullResponse (line 211) | func (c *Client) CheckFullResponse(response []byte, cert, issuer *x509...
    method CheckResponse (line 226) | func (c *Client) CheckResponse(response []byte, cert, issuer *x509.Cer...
    method submitRequest (line 296) | func (c *Client) submitRequest(ctx context.Context, cert *x509.Certifi...
    method checkResponse (line 455) | func (c *Client) checkResponse(resp *basicOCSPResponse,
    method checkStoredResponse (line 499) | func (c *Client) checkStoredResponse(resp *basicOCSPResponse,
    method checkResponseCommon (line 531) | func (c *Client) checkResponseCommon(resp *basicOCSPResponse,
    method responder (line 587) | func (c *Client) responder(resp *basicOCSPResponse, issuer *x509.Certi...
  function New (line 93) | func New(conf *Conf) (c *Client, err error) {
  type CertStatus (line 115) | type CertStatus struct
  type LiveCertStatus (line 125) | type LiveCertStatus struct
  function shouldRetry (line 182) | func shouldRetry(err error) bool {
  function ParseTime (line 267) | func ParseTime(response []byte) (time.Time, error) {
  function ExtractProducedAtTimeFromRawOcspResponse (line 277) | func ExtractProducedAtTimeFromRawOcspResponse(rawOcspResponse []byte) (t...
  function unpackResponse (line 411) | func unpackResponse(der []byte) (response []byte, err error) {
  function unmarshalResponse (line 441) | func unmarshalResponse(der []byte, basic *basicOCSPResponse) (err error) {

FILE: common/collector/ocsp/ocsp_test.go
  constant demoSkEeOCSPResponderIssuer (line 17) | demoSkEeOCSPResponderIssuer = "TEST_of_KLASS3-SK_2016.pem"
  constant demoSkEeOCSPResponder (line 18) | demoSkEeOCSPResponder       = "DEMO_of_KLASS3-SK_2016_SSL_OCSP_RESPONDER...
  constant demoSkEeOcspURL (line 19) | demoSkEeOcspURL             = "http://demo.sk.ee/ocsp"
  constant esteid2018 (line 21) | esteid2018 = "esteid2018.pem"
  constant testOfEsteidsk2015 (line 23) | testOfEsteidsk2015 = "TEST_of_ESTEID-SK_2015.pem"
  constant esteidsk2015 (line 24) | esteidsk2015       = "esteidsk2015.pem"
  constant eidsk2016 (line 26) | eidsk2016 = "eidsk2016.pem"
  function TestCheckOCSPOfIDCardWithParsingOCSPURLFromConf (line 29) | func TestCheckOCSPOfIDCardWithParsingOCSPURLFromConf(t *testing.T) {
  function TestCheckOCSPWithParsingOCSPURLFromCert (line 66) | func TestCheckOCSPWithParsingOCSPURLFromCert(t *testing.T) {
  function TestCheck (line 105) | func TestCheck(t *testing.T) {
  function TestCheckResponse (line 208) | func TestCheckResponse(t *testing.T) {
  function testCert (line 249) | func testCert(cert string) (*x509.Certificate, error) {

FILE: common/collector/ocsp/types.go
  type ocspRequest (line 31) | type ocspRequest struct
  type tbsRequest (line 36) | type tbsRequest struct
  type request (line 43) | type request struct
  type certID (line 48) | type certID struct
    method equal (line 73) | func (c *certID) equal(other *certID) bool {
  function newCertID (line 55) | func newCertID(cert *x509.Certificate) (id *certID, err error) {
  type ocspResponse (line 83) | type ocspResponse struct
  constant ocspResponseStatusSuccessful (line 89) | ocspResponseStatusSuccessful = 0
  type responseBytes (line 103) | type responseBytes struct
  type basicOCSPResponse (line 109) | type basicOCSPResponse struct
  type responseData (line 118) | type responseData struct
  type singleResponse (line 133) | type singleResponse struct
  type revokedInfo (line 148) | type revokedInfo struct
  constant ReasonUnspecified (line 158) | ReasonUnspecified = iota
  constant ReasonKeyCompromise (line 159) | ReasonKeyCompromise
  constant ReasonCACompromise (line 160) | ReasonCACompromise
  constant ReasonAffiliationChanged (line 161) | ReasonAffiliationChanged
  constant ReasonSuperseded (line 162) | ReasonSuperseded
  constant ReasonCessationOfOperation (line 163) | ReasonCessationOfOperation
  constant ReasonCertificateHold (line 164) | ReasonCertificateHold
  constant _ (line 165) | _
  constant ReasonRemoveFromCRL (line 166) | ReasonRemoveFromCRL
  constant ReasonPrivilegeWithdrawn (line 167) | ReasonPrivilegeWithdrawn
  constant ReasonAACompromise (line 168) | ReasonAACompromise

FILE: common/collector/q11n/log_desc.go
  constant _Q11N_BAD (line 4) | _Q11N_BAD           = "Bad certificate"
  constant _Q11N_NO (line 5) | _Q11N_NO            = "'qualification:' section in election configuratio...
  constant _Q11N_PROT (line 6) | _Q11N_PROT          = "Unknown qualification properties protocol"
  constant _Q11N_Q (line 7) | _Q11N_Q             = "Failed to configure qualification properties veri...
  constant _Q11N_CTIME (line 8) | _Q11N_CTIME         = "Unknown qualification properties canonical time v...
  constant _Q11N_PARSE_CTIME (line 9) | _Q11N_PARSE_CTIME   = "Failed to parse a canonical time of a qualificati...
  constant _Q11N_TIME_CMP (line 10) | _Q11N_TIME_CMP      = "Unknown qualification properties' time comparator"
  constant _Q11N_PARSE_TIME (line 11) | _Q11N_PARSE_TIME    = "Failed to parse a time of a qualification property"
  constant _Q11N_TIME_CMP_FAIL (line 12) | _Q11N_TIME_CMP_FAIL = "Qualification time of previous protocol > qualifi...

FILE: common/collector/q11n/ocsp/log_desc.go
  constant _OCSP_CFG (line 4) | _OCSP_CFG     = "Reading YAMl configuration of OCSP client failed"
  constant _OCPS_NEW (line 5) | _OCPS_NEW     = "Failed to create new OCSP client"
  constant _OCSP_NO_SIG (line 6) | _OCSP_NO_SIG  = "No signatures in a .bdoc container"
  constant _OCSP_VERIFY (line 7) | _OCSP_VERIFY  = "Failed to verify OCSP response of a .bdoc container"
  constant _OCSP_UNKNOWN (line 8) | _OCSP_UNKNOWN = "Unknown OCSP response status"
  constant _OCSP_REVOKED (line 9) | _OCSP_REVOKED = "OCSP response status is 'revoked'"

FILE: common/collector/q11n/ocsp/ocsp.go
  function init (line 22) | func init() {
  type client (line 26) | type client struct
    method Qualify (line 49) | func (c *client) Qualify(ctx context.Context, container container.Cont...
  function newreg (line 30) | func newreg() func(yaml.Node, string) (q11n.Qualifier, error) {
  type SignatureValuer (line 80) | type SignatureValuer interface

FILE: common/collector/q11n/q11n.go
  type Protocol (line 21) | type Protocol
  constant OCSP (line 25) | OCSP   Protocol = "ocsp"
  constant TSP (line 26) | TSP    Protocol = "tsp"
  constant TSPREG (line 27) | TSPREG Protocol = "tspreg"
  type Qualifier (line 38) | type Qualifier interface
  type NewFunc (line 75) | type NewFunc
  type ParseTimeFunc (line 80) | type ParseTimeFunc
  type regentry (line 82) | type regentry struct
  function Register (line 100) | func Register(p Protocol, newFunc NewFunc, parseTimeFunc ParseTimeFunc) {
  type Conf (line 110) | type Conf
  type Qualifiers (line 118) | type Qualifiers
  function Configure (line 126) | func Configure(c Conf, sensitive string) (qs Qualifiers, err error) {
  type Properties (line 154) | type Properties
  function CanonicalTime (line 161) | func CanonicalTime(properties Properties) (time.Time, error) {
  function CompareQualificationTimes (line 197) | func CompareQualificationTimes(qualifiers Qualifiers, properties Propert...

FILE: common/collector/q11n/tsp/log_desc.go
  constant _TSA_CFG (line 4) | _TSA_CFG           = "Reading YAMl configuration of OCSP client failed"
  constant _TSA_NEW (line 5) | _TSA_NEW           = "Failed to create new OCSP client"
  constant _TSA_KEY (line 6) | _TSA_KEY           = "Failed to read TSA client private key from file sy...
  constant _TSA_KEY_PARSE (line 7) | _TSA_KEY_PARSE     = "Failed to parse PEM TSA client private key"
  constant _TSA_KEY_PARSE_RSA (line 8) | _TSA_KEY_PARSE_RSA = "Failed to parse RSA TSA client private key"
  constant _TSA_NO_SIG (line 9) | _TSA_NO_SIG        = "No signatures in a .bdoc container"
  constant _TSA_DATAER (line 10) | _TSA_DATAER        = ".bdoc container cannot be casted to TimestampDatae...
  constant _TSA_SIG_VERIFY (line 11) | _TSA_SIG_VERIFY    = "Failed to verify .bdoc signature timestamp"
  constant _TSA_SIG_TS (line 12) | _TSA_SIG_TS        = "Failed to sign .bdoc signature timestamp"
  constant _TSA_REQ (line 13) | _TSA_REQ           = "Failed to create client timestamp request to TSA p...
  constant _TSA_RSA_SIG (line 14) | _TSA_RSA_SIG       = "Failed to sign data using RSA algorithm"
  constant _TSA_VERIFY (line 15) | _TSA_VERIFY        = "Failed to verify OCSP response of a .bdoc container"
  constant _TSA_UNKNOWN (line 16) | _TSA_UNKNOWN       = "Unknown OCSP response status"
  constant _TSA_REVOKED (line 17) | _TSA_REVOKED       = "OCSP response status is 'revoked'"

FILE: common/collector/q11n/tsp/tsp.go
  function init (line 38) | func init() {
  type client (line 43) | type client struct
    method Qualify (line 83) | func (c *client) Qualify(ctx context.Context, container container.Cont...
    method sign (line 120) | func (c *client) sign(data []byte) (signature []byte, err error) {
  function newreg (line 48) | func newreg(reg bool) func(yaml.Node, string) (q11n.Qualifier, error) {
  type TimestampDataer (line 144) | type TimestampDataer interface

FILE: common/collector/safereader/example_test.go
  function ParseBigEndian (line 13) | func ParseBigEndian(r io.Reader) (u uint64, err error) {
  function Example (line 25) | func Example() {

FILE: common/collector/safereader/log_desc.go
  constant _SAFEREADER_LIMIT (line 4) | _SAFEREADER_LIMIT = "Reading more data from a stream that has been speci...

FILE: common/collector/safereader/reader.go
  type safereader (line 14) | type safereader struct
    method Read (line 38) | func (s *safereader) Read(p []byte) (n int, err error) {
  function New (line 32) | func New(r io.Reader, n int64) io.Reader {

FILE: common/collector/safereader/reader_test.go
  type infinite (line 11) | type infinite struct
    method Read (line 13) | func (i *infinite) Read(p []byte) (n int, err error) {
  function TestRead (line 17) | func TestRead(t *testing.T) {
  function TestReadError (line 98) | func TestReadError(t *testing.T) {

FILE: common/collector/server/codec.go
  type wrappedConn (line 24) | type wrappedConn struct
    method Read (line 29) | func (w wrappedConn) Read(p []byte) (n int, err error) {
  type serverCodec (line 45) | type serverCodec struct
    method ReadRequestHeader (line 86) | func (s *serverCodec) ReadRequestHeader(req *rpc.Request) error {
    method ReadRequestBody (line 127) | func (s *serverCodec) ReadRequestBody(x interface{}) error {
    method WriteResponse (line 233) | func (s *serverCodec) WriteResponse(resp *rpc.Response, x interface{})...
  function newCodec (line 56) | func newCodec(ctx context.Context, conf *CodecConf, conn net.Conn,
  function checkSize (line 166) | func checkSize(v reflect.Value) error {

FILE: common/collector/server/codec_test.go
  function TestCheckSize (line 10) | func TestCheckSize(t *testing.T) {

FILE: common/collector/server/context.go
  type Header (line 11) | type Header struct
    method header (line 57) | func (h *Header) header() *Header {
  type header (line 53) | type header interface
  type key (line 62) | type key
  constant tlsClientKey (line 65) | tlsClientKey  key = iota
  constant authClientKey (line 66) | authClientKey
  constant voteIDKey (line 67) | voteIDKey
  constant voterIDKey (line 68) | voterIDKey
  constant voterIDNumber (line 69) | voterIDNumber
  constant addrKey (line 72) | addrKey
  constant authMethod (line 74) | authMethod
  function TLSClient (line 83) | func TLSClient(ctx context.Context) []*x509.Certificate {
  function TLSClientKey (line 91) | func TLSClientKey(ctx context.Context, val any) context.Context {
  function AuthenticatedClient (line 97) | func AuthenticatedClient(ctx context.Context) *pkix.Name {
  function WithAuthMethod (line 104) | func WithAuthMethod(ctx context.Context, auth string) context.Context {
  function AuthMethod (line 108) | func AuthMethod(ctx context.Context) (string, error) {
  function VoteIdentifier (line 119) | func VoteIdentifier(ctx context.Context) []byte {
  function VoterIdentity (line 128) | func VoterIdentity(ctx context.Context) string {
  function VoterNumber (line 137) | func VoterNumber(ctx context.Context) string {

FILE: common/collector/server/controller.go
  type Controller (line 12) | type Controller struct
    method Control (line 45) | func (c *Controller) Control(ctx context.Context) error {
    method ControlAt (line 106) | func (c *Controller) ControlAt(ctx context.Context, start time.Time) e...
  function NewController (line 26) | func NewController(v *version.V, startfn, checkfn, stopfn func(context.C...

FILE: common/collector/server/filter.go
  type connFilter (line 23) | type connFilter interface
  type connFilters (line 33) | type connFilters
    method next (line 38) | func (cfs connFilters) next(ctx context.Context, c net.Conn) context.C...
    method optional (line 117) | func (cfs connFilters) optional(auth auth.Auther, id identity.Identifi...
  type connFilterFunc (line 46) | type connFilterFunc
    method filter (line 48) | func (f connFilterFunc) filter(ctx context.Context, c net.Conn, chain ...
  type headerFilter (line 53) | type headerFilter interface
  type headerFilters (line 66) | type headerFilters
    method next (line 70) | func (hfs headerFilters) next(header *Header) error {
  type headerFilterFunc (line 78) | type headerFilterFunc
    method filter (line 80) | func (f headerFilterFunc) filter(header *Header, chain headerFilters) ...
  type FilterConf (line 85) | type FilterConf struct
  function newFilters (line 91) | func newFilters(conf *FilterConf, r *rpc.Server, cert tls.Certificate, e...
  function close (line 140) | func close(ctx context.Context, c io.Closer, err log.ErrorEntry) { //nol...
  function logFilter (line 152) | func logFilter(ctx context.Context, c net.Conn, chain connFilters) conte...
  function connIDFilter (line 163) | func connIDFilter(ctx context.Context, c net.Conn, chain connFilters) co...
  function proxyFilter (line 187) | func proxyFilter(ctx context.Context, c net.Conn, chain connFilters) con...
  type TLSConf (line 215) | type TLSConf struct
  type tlsFilter (line 223) | type tlsFilter struct
    method filter (line 251) | func (f *tlsFilter) filter(ctx context.Context, c net.Conn, chain conn...
  function newTLSFilter (line 229) | func newTLSFilter(conf *TLSConf, cert tls.Certificate) (*tlsFilter, erro...
  type CodecConf (line 294) | type CodecConf struct
  type codecFilter (line 303) | type codecFilter struct
    method filter (line 309) | func (f *codecFilter) filter(ctx context.Context, c net.Conn, _ connFi...
  type endFilter (line 355) | type endFilter
    method filter (line 357) | func (e endFilter) filter(header *Header, chain headerFilters) error {
  function sessIDFilter (line 368) | func sessIDFilter(header *Header, chain headerFilters) error {
  function addrFilter (line 403) | func addrFilter(header *Header, chain headerFilters) error {
  function infoFilter (line 412) | func infoFilter(header *Header, chain headerFilters) error {
  type authFilter (line 422) | type authFilter
    method filter (line 424) | func (a authFilter) filter(header *Header, chain headerFilters) error {
  type identityFilter (line 494) | type identityFilter
    method filter (line 496) | func (i identityFilter) filter(header *Header, chain headerFilters) er...
  type ageFilter (line 514) | type ageFilter
    method filter (line 516) | func (a *ageFilter) filter(header *Header, chain headerFilters) error {

FILE: common/collector/server/log_desc.go
  constant _SERVER_LOGGER (line 4) | _SERVER_LOGGER                   = "Cannot create JSON logger from a cli...
  constant _SERVER_SET_TIMEOUT (line 5) | _SERVER_SET_TIMEOUT              = "Failed to set timeout for client RPC...
  constant _SERVER_HEADER (line 6) | _SERVER_HEADER                   = "Failed to read RPC header"
  constant _SERVER_BODY (line 7) | _SERVER_BODY                     = "Failed to read RPC body"
  constant _SERVER_REQ_SIZE (line 8) | _SERVER_REQ_SIZE                 = "RPC request size is too large"
  constant _SERVER_REQ_FIELD_STRUCT_SIZE (line 9) | _SERVER_REQ_FIELD_STRUCT_SIZE    = "RPC request field size of a type str...
  constant _SERVER_REQ_FIELD_SIZE (line 10) | _SERVER_REQ_FIELD_SIZE           = "RPC request field size is too large"
  constant _SERVER_RESP_ERR (line 11) | _SERVER_RESP_ERR                 = "RPC server registered an error"
  constant _SERVER_SET_RESP_TIMEOUT (line 12) | _SERVER_SET_RESP_TIMEOUT         = "Failed to set timeout for client RPC...
  constant _SERVER_RESP (line 13) | _SERVER_RESP                     = "Failed to write RPC response"
  constant _SERVER_AUTHMETHOD (line 14) | _SERVER_AUTHMETHOD               = "Unable to get AuthMethod from contex...
  constant _SERVER_STAT (line 15) | _SERVER_STAT                     = "Cannot create JSON status to be repo...
  constant _SERVER_SYSD_START (line 16) | _SERVER_SYSD_START               = "Starting service under systemd"
  constant _SERVER_SYSD_START_FAIL (line 17) | _SERVER_SYSD_START_FAIL          = "Cannot start service under systemd"
  constant _SERVER_SYSD_STARTED (line 18) | _SERVER_SYSD_STARTED             = "Successfully started service under s...
  constant _SERVER_SYSD_SERVE (line 19) | _SERVER_SYSD_SERVE               = "Failed to serve a systemd service"
  constant _SERVER_SYSD_CHECK (line 20) | _SERVER_SYSD_CHECK               = "Cannot check systemd service status"
  constant _SERVER_SYSD_ATTEMPT (line 21) | _SERVER_SYSD_ATTEMPT             = "systemd service has been attempted t...
  constant _SERVER_SYSD_STOP (line 22) | _SERVER_SYSD_STOP                = "Stopping systemd service"
  constant _SERVER_SYSD_STOP_FAIL (line 23) | _SERVER_SYSD_STOP_FAIL           = "Failed to stop systemd service"
  constant _SERVER_SYSD_STOPPED (line 24) | _SERVER_SYSD_STOPPED             = "systemd service stopped"
  constant _SERVER_SYSD_WAIT (line 25) | _SERVER_SYSD_WAIT                = "Failed to wait for systemd service t...
  constant _SERVER_FILTER_TLS (line 26) | _SERVER_FILTER_TLS               = "Failed to configure TLS connection f...
  constant _SERVER_CLOSE (line 27) | _SERVER_CLOSE                    = "Cannot close client connection grace...
  constant _SERVER_FILTER_LOG (line 28) | _SERVER_FILTER_LOG               = "Client TCP connection accessed log f...
  constant _SERVER_FILTER_LOG_CLOSE (line 29) | _SERVER_FILTER_LOG_CLOSE         = "Server has closed log filter"
  constant _SERVER_FILTER_CONNID (line 30) | _SERVER_FILTER_CONNID            = "Cannot create random value for Conne...
  constant _SERVER_FILTER_CONNID_OK (line 31) | _SERVER_FILTER_CONNID_OK         = "ConnectionID filter assigned Connect...
  constant _SERVER_FILTER_PROXY_HEADER (line 32) | _SERVER_FILTER_PROXY_HEADER      = "TCP proxy filter detected that clien...
  constant _SERVER_FILTER_PROXY_HC (line 33) | _SERVER_FILTER_PROXY_HC          = "Health check by machine proxy"
  constant _SERVER_FILTER_PROXY_CLIENT_ADDR (line 34) | _SERVER_FILTER_PROXY_CLIENT_ADDR = "Reporting remote client address behi...
  constant _SERVER_FILTER_TLS_CIPHERS (line 35) | _SERVER_FILTER_TLS_CIPHERS       = "Technical configuration contains uns...
  constant _SERVER_FILTER_TLS_HSHAKE (line 36) | _SERVER_FILTER_TLS_HSHAKE        = "TLS connection has been closed befor...
  constant _SERVER_FILTER_TLS_HSHAKE_TIME (line 37) | _SERVER_FILTER_TLS_HSHAKE_TIME   = "Cannot set TLS handshake timeout"
  constant _SERVER_FILTER_TLS_HSHAKE_ERR (line 38) | _SERVER_FILTER_TLS_HSHAKE_ERR    = "TLS handshake error"
  constant _SERVER_FILTER_TLS_HSHAKE_OK (line 39) | _SERVER_FILTER_TLS_HSHAKE_OK     = "Handshake is successfully done in a ...
  constant _SERVER_FILTER_END (line 40) | _SERVER_FILTER_END               = "Client RPC connection is after 'elec...
  constant _SERVER_FILTER_SESSID (line 41) | _SERVER_FILTER_SESSID            = "Cannot create random value for Sessi...
  constant _SERVER_FILTER_SESSID_OK (line 42) | _SERVER_FILTER_SESSID_OK         = "Successfully generated new SessionID...
  constant _SERVER_FILTER_SESSID_REUSE (line 43) | _SERVER_FILTER_SESSID_REUSE      = "Reusing existing SessionID for a cli...
  constant _SERVER_FILTER_SESSID_REGEX (line 44) | _SERVER_FILTER_SESSID_REGEX      = "Invalid SessionID regex"
  constant _SERVER_FILTER_ADDR (line 45) | _SERVER_FILTER_ADDR              = "Address filter reporting RPC client ...
  constant _SERVER_FILTER_OS (line 46) | _SERVER_FILTER_OS                = "Info filter reporting RPC client con...
  constant _SERVER_FILTER_AUTH (line 47) | _SERVER_FILTER_AUTH              = "Starting RPC client authentication"
  constant _SERVER_FILTER_AUTH_FAIL (line 48) | _SERVER_FILTER_AUTH_FAIL         = "RPC client authentication failed"
  constant _SERVER_FILTER_AUTH_OK (line 49) | _SERVER_FILTER_AUTH_OK           = "Client RPC connection has been succe...
  constant _SERVER_FILTER_AUTH_VID (line 50) | _SERVER_FILTER_AUTH_VID          = "Fetching voter ID from a client RPC ...
  constant _SERVER_FILTER_AUTH_DTOKEN (line 51) | _SERVER_FILTER_AUTH_DTOKEN       = "DataToken present in a client RPC co...
  constant _SERVER_FILTER_AUTH_DTOKEN_FAIL (line 52) | _SERVER_FILTER_AUTH_DTOKEN_FAIL  = "DataToken authentication failed"
  constant _SERVER_FILTER_AUTH_DTOKEN_OK (line 53) | _SERVER_FILTER_AUTH_DTOKEN_OK    = "DataToken authentication succeeded"
  constant _SERVER_FILTER_IDENTITY (line 54) | _SERVER_FILTER_IDENTITY          = "Cannot fetch and identify voter ID f...
  constant _SERVER_FILTER_IDENTITY_OK (line 55) | _SERVER_FILTER_IDENTITY_OK       = "Voter ID has been identified for a c...
  constant _SERVER_FILTER_AGE (line 56) | _SERVER_FILTER_AGE               = "Failed to check voter age fetched fr...
  constant _SERVER_PROXY (line 57) | _SERVER_PROXY                    = "Reading PROXY header from TCP connec...
  constant _SERVER_PROXY_CONN (line 58) | _SERVER_PROXY_CONN               = "Invalid PROXY connection version"
  constant _SERVER_PROXY_IP4 (line 59) | _SERVER_PROXY_IP4                = "Failed to read TCP IP4 address from ...
  constant _SERVER_PROXY_IP6 (line 60) | _SERVER_PROXY_IP6                = "Failed to read TCP IP6 address from ...
  constant _SERVER_PROXY_TRS (line 61) | _SERVER_PROXY_TRS                = "Invalid PROXY connection OSI level 4...
  constant _SERVER_PROXY_READ_EX (line 62) | _SERVER_PROXY_READ_EX            = "Failed to read extra bytes from a PR...
  constant _SERVER_PROXY_READ (line 63) | _SERVER_PROXY_READ               = "Failed to read PROXY data from TCP c...
  constant _SERVER_PROXY_TIME (line 64) | _SERVER_PROXY_TIME               = "Failed to set PROXY connection timeout"
  constant _SERVER_CERT_K (line 65) | _SERVER_CERT_K                   = "Failed to load server certificate an...
  constant _SERVER_CA (line 66) | _SERVER_CA                       = "Failed to load client connections CA...
  constant _SERVER_FILTERS (line 67) | _SERVER_FILTERS                  = "Failed to configure client connectio...
  constant _SERVER_ADDR (line 68) | _SERVER_ADDR                     = "Failed to resolve TCP server address"
  constant _SERVER_STATUS (line 69) | _SERVER_STATUS                   = "Failed to create server status JSON,...
  constant _SERVER_AUTH (line 70) | _SERVER_AUTH                     = "Failed to configure authenticator fo...
  constant _SERVER_ID_W_N_AUTH (line 71) | _SERVER_ID_W_N_AUTH              = "Identity checker cannot be set witho...
  constant _SERVER_IDENTITY (line 72) | _SERVER_IDENTITY                 = "Failed to configure identity checker...
  constant _SERVER_AGE_W_N_IDENTITY (line 73) | _SERVER_AGE_W_N_IDENTITY         = "Age checker cannot be set without id...
  constant _SERVER_AGE (line 74) | _SERVER_AGE                      = "Failed to configure age checker for ...
  constant _SERVER_LISTEN_TCP (line 75) | _SERVER_LISTEN_TCP               = "Cannot listen to TCP socket"
  constant _SERVER_CLOSED (line 76) | _SERVER_CLOSED                   = "Server connections closed unexpectedly"
  constant _SERVER_CLOSE_ALL (line 77) | _SERVER_CLOSE_ALL                = "All TCP connections are closed succe...
  constant _SERVER_ACC (line 78) | _SERVER_ACC                      = "Accepting TCP client connections"
  constant _SERVER_ACC_FAIL (line 79) | _SERVER_ACC_FAIL                 = "Failed to accept TCP connections"
  constant _SERVER_CONN_PANIC (line 80) | _SERVER_CONN_PANIC               = "Panic in client connection"
  constant _SERVER_CONN_FAIL (line 81) | _SERVER_CONN_FAIL                = "TCP connection with client failed"
  constant _SERVER_CONN_STOP (line 82) | _SERVER_CONN_STOP                = "Failed to stop systemd service (this...
  constant _SERVER_CLOSED_GRACE (line 83) | _SERVER_CLOSED_GRACE             = "Failed to close client connections g...
  constant _SERVER_SYSD_CLOSED (line 84) | _SERVER_SYSD_CLOSED              = "systemd socket closed"
  constant _SERVER_SYSD_VER (line 85) | _SERVER_SYSD_VER                 = "Failed to create JSON version that w...
  constant _SERVER_SYSD_NOTIFY (line 86) | _SERVER_SYSD_NOTIFY              = "Failed to create notify JSON message...
  constant _SERVER_UNIXGRAM (line 87) | _SERVER_UNIXGRAM                 = "Cannot setup unixgram connection for...
  constant _SERVER_UNIXGRAM_CLOSE (line 88) | _SERVER_UNIXGRAM_CLOSE           = "Failed to close unixgram connection"
  constant _SERVER_UNIXGRAM_TIME (line 89) | _SERVER_UNIXGRAM_TIME            = "Failed to set deadline for unixgram ...
  constant _SERVER_SYSD_NOTIFY_FAIL (line 90) | _SERVER_SYSD_NOTIFY_FAIL         = "Failed to notify systemd"
  constant _SERVER_WAIT (line 91) | _SERVER_WAIT                     = "Waiting for service start"
  constant _SERVER_WAIT_TIME (line 92) | _SERVER_WAIT_TIME                = "Deadline exceeded for waiting a serv...

FILE: common/collector/server/proxy.go
  function readPROXY (line 18) | func readPROXY(c net.Conn) (wc net.Conn, addr net.Addr, health bool, err...
  function readTCPAddr (line 97) | func readTCPAddr(c net.Conn, size int) (net.Addr, error) {
  function readTimeout (line 108) | func readTimeout(c net.Conn, buf []byte) error {
  type prefixConn (line 120) | type prefixConn struct
    method Read (line 125) | func (c *prefixConn) Read(b []byte) (n int, err error) {

FILE: common/collector/server/server.go
  type S (line 27) | type S struct
    method WithAuth (line 143) | func (s *S) WithAuth(conf AuthConf) *S {
    method Serve (line 152) | func (s *S) Serve(ctx context.Context) error {
    method ServeAt (line 246) | func (s *S) ServeAt(ctx context.Context, start time.Time) error {
  type Conf (line 35) | type Conf struct
  function New (line 55) | func New(c *Conf, handler interface{}) (*S, error) {
  type AuthConf (line 97) | type AuthConf struct
  function NewAuthConf (line 104) | func NewAuthConf(a auth.Conf, i identity.Type, g *age.Conf) (AuthConf, e...

FILE: common/collector/server/status.go
  type message (line 14) | type message struct
  type status (line 20) | type status struct
    method waiting (line 51) | func (s *status) waiting() error { return s.set("waiting", "READY=1") }
    method serving (line 55) | func (s *status) serving() error {
    method ended (line 60) | func (s *status) ended() error { return s.set("ended") }
    method stopping (line 64) | func (s *status) stopping() error { return s.set("stopping", "STOPPING...
    method set (line 68) | func (s *status) set(status string, extra ...string) (err error) {
  function newStatus (line 28) | func newStatus(v *version.V) (*status, error) {

FILE: common/collector/server/util.go
  function VerifyHTTPSOrigin (line 9) | func VerifyHTTPSOrigin(origin string) bool {

FILE: common/collector/server/util_test.go
  function TestVerifyOriginValid (line 42) | func TestVerifyOriginValid(t *testing.T) {
  function TestVerifyOriginInValid (line 51) | func TestVerifyOriginInValid(t *testing.T) {

FILE: common/collector/server/wait.go
  function wait (line 14) | func wait(ctx context.Context, t time.Time, f func(context.Context) erro...
  function waitStart (line 43) | func waitStart(ctx context.Context, start time.Time, f func(context.Cont...

FILE: common/collector/smartid/authenticate.go
  method Challenge (line 18) | func (c *Client) Challenge() ([]byte, []byte, error) {
  method Authenticate (line 31) | func (c *Client) Authenticate(ctx context.Context, identifer string, cha...
  method GetAuthenticateStatus (line 54) | func (c *Client) GetAuthenticateStatus(ctx context.Context, sesscode str...
  method parseAndVerify (line 73) | func (c *Client) parseAndVerify(ctx context.Context, certDER []byte) (
  function VerifyAuthenticationSignature (line 162) | func VerifyAuthenticationSignature(cert *x509.Certificate, algorithm str...
  function convertToETSI (line 181) | func convertToETSI(identifier string) string {

FILE: common/collector/smartid/certificate.go
  type getCertificate (line 9) | type getCertificate struct
  method GetCertificateChoice (line 18) | func (c *Client) GetCertificateChoice(ctx context.Context, documentNo st...
  method GetCertificateChoiceStatus (line 45) | func (c *Client) GetCertificateChoiceStatus(ctx context.Context, sesscod...

FILE: common/collector/smartid/http.go
  constant maxResponseSize (line 16) | maxResponseSize = 10240
  type errorResponse (line 19) | type errorResponse struct
  function httpGet (line 23) | func httpGet(ctx context.Context, url string, resp interface{}) error {
  function httpPost (line 34) | func httpPost(ctx context.Context, url string, req interface{}, resp int...
  function httpDo (line 53) | func httpDo(ctx context.Context, tag string, httpReq *http.Request, resp...

FILE: common/collector/smartid/log_desc.go
  constant _SID_RAND (line 4) | _SID_RAND          = "Generate random value for Smart-ID challenge"
  constant _SID_SESS (line 5) | _SID_SESS          = "Cannot create Smart-ID session via Smart-ID provider"
  constant _SID_SESS_STAT (line 6) | _SID_SESS_STAT     = "HTTP get session status from Smart-ID provider fai...
  constant _SID_CERT (line 7) | _SID_CERT          = "Parsing client Smart-ID certificate failed"
  constant _SID_EXTKEY_SK (line 8) | _SID_EXTKEY_SK     = "Not an SK x509 extended key usage"
  constant _SID_EXTKEY (line 9) | _SID_EXTKEY        = "Unknown x509 extended key usage"
  constant _SID_CERT_VERIFY (line 10) | _SID_CERT_VERIFY   = "Failed to verify client Smart-ID certificate"
  constant _SID_OCSP (line 11) | _SID_OCSP          = "Failed to check client Smart-ID certificate agains...
  constant _SID_OCSP_N_GOOD (line 12) | _SID_OCSP_N_GOOD   = "OCSP status of client Smart-ID certificate is not ...
  constant _SID_ALG (line 13) | _SID_ALG           = "Unsupported Smart-ID signature algorithm"
  constant _SID_SIG (line 14) | _SID_SIG           = "Failed to verify signature of a Smart-ID client"
  constant _SID_N_ID (line 15) | _SID_N_ID          = "No voter ID"
  constant _SID_HTTP_CERT (line 16) | _SID_HTTP_CERT     = "Failed to get Smart-ID certificate from Smart-ID p...
  constant _SID_URI (line 17) | _SID_URI           = "Failed to prepare request URI for Smart-ID provider"
  constant _SID_JSON (line 18) | _SID_JSON          = "JSON marshalling request for Smart-ID provider fai...
  constant _SID_HTTP (line 19) | _SID_HTTP          = "Failed to prepare HTTP request URI for Smart-ID pr...
  constant _SID_HTTP_READY (line 20) | _SID_HTTP_READY    = "HTTP request for Smart-ID provider has been prepar...
  constant _SID_HTTP_SEND (line 21) | _SID_HTTP_SEND     = "Sending HTTP request to Smart-ID provider"
  constant _SID_RESP_ERR (line 22) | _SID_RESP_ERR      = "Smart-ID provider responded with error"
  constant _SID_CLOSE (line 23) | _SID_CLOSE         = "Cannot gracefully close HTTP connection with Smart...
  constant _SID_RESP (line 24) | _SID_RESP          = "Successfully received Smart-ID provider response"
  constant _SID_RESP_PARSE (line 25) | _SID_RESP_PARSE    = "Cannot parse HTTP Smart-ID provider response"
  constant _SID_RESP_PARSE_OK (line 26) | _SID_RESP_PARSE_OK = "Successfully parsed HTTP Smart-ID provider response"
  constant _SID_RESP_READ (line 27) | _SID_RESP_READ     = "Failed to read Smart-ID response"
  constant _SID_RESP_READ_OK (line 28) | _SID_RESP_READ_OK  = "Successfully read Smart-ID response"
  constant _SID_RESP_JSONCODE (line 29) | _SID_RESP_JSONCODE = "JSON unmarshalling error code from Smart-ID provid...
  constant _SID_ERRCODE (line 30) | _SID_ERRCODE       = "Error status code from Smart-ID provider"
  constant _SID_RESP_JSON (line 31) | _SID_RESP_JSON     = "JSON unmarshalling response for Smart-ID provider ...
  constant _SID_N_HASH (line 32) | _SID_N_HASH        = "No hashing algorithm provided"
  constant _SID_N_HASH_T (line 33) | _SID_N_HASH_T      = "No hashing type provided"
  constant _SID_SESS_STATE (line 34) | _SID_SESS_STATE    = "Unknown Smart-ID session state"
  constant _SID_SESS_RES (line 35) | _SID_SESS_RES      = "Unknown Smart-ID session result"
  constant _SID_IN (line 36) | _SID_IN            = "Wraps errors which are caused by bad input to smar...
  constant _SID_VERIF_CODE (line 37) | _SID_VERIF_CODE    = "Error returned if the voter 3 different code was d...
  constant _SID_ACC (line 38) | _SID_ACC           = "Error returned that are caused by user account con...
  constant _SID_CANCEL (line 39) | _SID_CANCEL        = "Error returned if the voter canceled the operation"
  constant _SID_EXP (line 40) | _SID_EXP           = "Error returned if the session expired before the v...
  constant _SID_CERT_ERR (line 41) | _SID_CERT_ERR      = "Wraps errors which are caused by errors with the v...
  constant _SID_STAT_ERR (line 42) | _SID_STAT_ERR      = "Wraps errors which are caused by an unexpected ses...
  constant _SID_CA (line 43) | _SID_CA            = "No CA certificates provided to verify Smart-ID pro...
  constant _SID_CA_PARSE (line 44) | _SID_CA_PARSE      = "Failed to parse Smart-ID CA certificate"
  constant _SID_ICA_PARSE (line 45) | _SID_ICA_PARSE     = "Failed to parse Smart-ID intermediate CA certificate"
  constant _SID_OCSP_CFG (line 46) | _SID_OCSP_CFG      = "Failed to configure Smart-ID OCSP client"
  constant _SID_HASH (line 47) | _SID_HASH          = "Unsupported hash algorithm"

FILE: common/collector/smartid/session.go
  type sessType (line 10) | type sessType
  constant sessAuth (line 13) | sessAuth  sessType = "authentication/etsi"
  constant sessSign (line 14) | sessSign  sessType = "signature/document"
  constant QSCD (line 15) | QSCD      string   = "QSCD"
  constant QUALIFIED (line 16) | QUALIFIED string   = "QUALIFIED"
  type startSessionRequest (line 38) | type startSessionRequest struct
  type allowedInteractionsOrder (line 50) | type allowedInteractionsOrder struct
  type startSessionResponse (line 57) | type startSessionResponse struct
  method startSession (line 63) | func (c *Client) startSession(ctx context.Context, t sessType, identifie...
  type sessionStatusResponse (line 109) | type sessionStatusResponse struct
  type resultResponse (line 119) | type resultResponse struct
  type certResponse (line 124) | type certResponse struct
  type signatureResponse (line 129) | type signatureResponse struct
  method getSessionStatus (line 136) | func (c *Client) getSessionStatus(ctx context.Context, sesscode string) (

FILE: common/collector/smartid/sign.go
  method SignHash (line 8) | func (c *Client) SignHash(ctx context.Context, documentno string, hash [...
  method GetSignHashStatus (line 23) | func (c *Client) GetSignHashStatus(ctx context.Context, sesscode string) (

FILE: common/collector/smartid/smartid.go
  type Conf (line 55) | type Conf struct
  type Client (line 73) | type Client struct
  function New (line 86) | func New(conf *Conf) (c *Client, err error) {
  function findAuthHashFunction (line 114) | func findAuthHashFunction(size int64) (crypto.Hash, error) {

FILE: common/collector/smartid/smartid_test.go
  constant testIdentifier (line 19) | testIdentifier = "30303039914"
  constant testDocumentNo (line 21) | testDocumentNo = "PNOEE-30303039914-MOCK-Q"
  function TestMain (line 29) | func TestMain(m *testing.M) {
  function authenticate (line 70) | func authenticate(t *testing.T) (string, error) {
  function TestAuthentication (line 104) | func TestAuthentication(t *testing.T) {
  function TestCertificate (line 115) | func TestCertificate(t *testing.T) {
  function TestSigning (line 146) | func TestSigning(t *testing.T) {

FILE: common/collector/status/client/client.go
  constant IDcardAuth (line 7) | IDcardAuth   = "id"
  constant MobileIDAuth (line 8) | MobileIDAuth = "mid"
  constant SmartIDAuth (line 9) | SmartIDAuth  = "sid"
  constant WebeIDAuth (line 10) | WebeIDAuth   = "wid"
  constant NoAuth (line 11) | NoAuth       = ""
  type Verifier (line 16) | type Verifier interface
  type TLSDialer (line 28) | type TLSDialer interface

FILE: common/collector/status/client/rpc/builder.go
  type StatusReqBuilder (line 3) | type StatusReqBuilder struct
    method WithServiceMethod (line 14) | func (srb *StatusReqBuilder) WithServiceMethod(s string) *StatusReqBui...
    method WithRequest (line 19) | func (srb *StatusReqBuilder) WithRequest(r any) *StatusReqBuilder {
    method Build (line 25) | func (srb *StatusReqBuilder) Build() StatusReq {
  function NewStatusReqBuilder (line 10) | func NewStatusReqBuilder() *StatusReqBuilder {
  type StatusRespBuilder (line 32) | type StatusRespBuilder struct
    method WithResponse (line 42) | func (srb *StatusRespBuilder) WithResponse(r any) *StatusRespBuilder {
    method Build (line 52) | func (srb *StatusRespBuilder) Build() StatusResp {
  function NewStatusRespBuilder (line 38) | func NewStatusRespBuilder() *StatusRespBuilder {
  type VerifyReqBuilder (line 58) | type VerifyReqBuilder struct
    method WithServiceMethod (line 69) | func (vrb *VerifyReqBuilder) WithServiceMethod(s string) *VerifyReqBui...
    method WithRequest (line 74) | func (vrb *VerifyReqBuilder) WithRequest(r any) *VerifyReqBuilder {
    method Build (line 80) | func (vrb *VerifyReqBuilder) Build() VerifyReq {
  function NewVerifyReqBuilder (line 65) | func NewVerifyReqBuilder() *VerifyReqBuilder {

FILE: common/collector/status/client/rpc/builder_test.go
  constant msgTwoStructsNotEqual (line 13) | msgTwoStructsNotEqual   = "Two structs are not equal. Expected %v, got %...
  constant someServiceMethod (line 14) | someServiceMethod       = "RPC.SomeServiceMethod"
  constant someCallerServiceMethod (line 15) | someCallerServiceMethod = "RPC.SomeCallerServiceMethod"
  function TestStatusReqBuilder (line 126) | func TestStatusReqBuilder(t *testing.T) {
  function TestStatusRespBuilder (line 144) | func TestStatusRespBuilder(t *testing.T) {
  function TestVerifyReqBuilder (line 160) | func TestVerifyReqBuilder(t *testing.T) {

FILE: common/collector/status/client/rpc/client.go
  constant tcp (line 10) | tcp = "tcp"
  type tlsClient (line 14) | type tlsClient struct
    method TLSDial (line 36) | func (r *tlsClient) TLSDial(req interface{}) (interface{}, error) {
  function NewTLSClient (line 29) | func NewTLSClient(addr string, conf *tls.Config) status.TLSDialer {

FILE: common/collector/status/client/rpc/dto.go
  type VerifyReq (line 4) | type VerifyReq struct
  type StatusReq (line 13) | type StatusReq struct
  type StatusResp (line 22) | type StatusResp struct

FILE: common/collector/status/client/rpc/log_desc.go
  constant _RPC_TLS (line 4) | _RPC_TLS              = "Failed to TLS deal to RPC server"
  constant _RPC_ANY_TO_STATUSREQ (line 5) | _RPC_ANY_TO_STATUSREQ = "Failed to cast any to StatusReq"
  constant _RPC_CALL (line 6) | _RPC_CALL             = "RPC server has responded with error"
  constant _RPC_ANY_TO_VERIFYREQ (line 7) | _RPC_ANY_TO_VERIFYREQ = "Failed to cast any to VerifyReq"

FILE: common/collector/status/client/rpc/util.go
  constant expectedCastForStatusReq (line 6) | expectedCastForStatusReq = "*rpc.StatusReq"
  constant expectedCastForVerifyReq (line 7) | expectedCastForVerifyReq = "*rpc.VerifyReq"
  function castAnyToStatusReq (line 11) | func castAnyToStatusReq(req interface{}) (*StatusReq, error) {
  function CastAnyToVerifyReq (line 26) | func CastAnyToVerifyReq(req interface{}) (*VerifyReq, error) {

FILE: common/collector/status/client/rpc/util_test.go
  function TestCastAnyToRPCStatusReq (line 54) | func TestCastAnyToRPCStatusReq(t *testing.T) {

FILE: common/collector/status/conf.go
  type Conf (line 4) | type Conf struct
  type Observable (line 10) | type Observable struct

FILE: common/collector/status/status.go
  type Status (line 16) | type Status interface

FILE: common/collector/storage/batch.go
  method getAll (line 21) | func (c *Client) getAll(ctx context.Context, keys ...string) (values map...
  method getAllStrict (line 60) | func (c *Client) getAllStrict(ctx context.Context, keys ...string) (
  method putAll (line 89) | func (c *Client) putAll(ctx context.Context, prefix string,
  method ensureBatch (line 223) | func (c *Client) ensureBatch(ctx context.Context, batch []PutAllRequest,...

FILE: common/collector/storage/etcd/etcd.go
  function init (line 29) | func init() {
  type Conf (line 79) | type Conf struct
  type client (line 118) | type client struct
    method BatchSize (line 132) | func (c *client) BatchSize() int {
    method kv (line 138) | func (c *client) kv(ctx context.Context) (kv clientv3.KV, err error) {
    method Put (line 162) | func (c *client) Put(ctx context.Context, key string, value []byte) (e...
    method PutAll (line 181) | func (c *client) PutAll(ctx context.Context, reqs ...storage.PutAllReq...
    method put (line 207) | func (c *client) put(ctx context.Context, kv clientv3.KV, reqs ...stor...
    method Get (line 224) | func (c *client) Get(ctx context.Context, key string) (value []byte, e...
    method GetAll (line 248) | func (c *client) GetAll(ctx context.Context, keys ...string) (values m...
    method GetWithPrefix (line 278) | func (c *client) GetWithPrefix(ctx context.Context, prefix string) (
    method GetWithSerial (line 385) | func (c *client) GetWithSerial(ctx context.Context, key string) (
    method getRange (line 422) | func (c *client) getRange(ctx context.Context, kv clientv3.KV,
    method CAS (line 485) | func (c *client) CAS(ctx context.Context, cas string, old, new []byte)...
    method doRetry (line 539) | func (c *client) doRetry(ctx context.Context, f func(context.Context) ...
  constant blockSize (line 416) | blockSize = 6144
  function nextKey (line 481) | func nextKey(key []byte) string {

FILE: common/collector/storage/etcd/log_desc.go
  constant _ETCD_URI (line 4) | _ETCD_URI                   = "No etcd nodes URIs provided"
  constant _ETCD_CFG (line 5) | _ETCD_CFG                   = "Invalid 'etcd:' section in a YAML configu...
  constant _ETCD_CA (line 6) | _ETCD_CA                    = "Failed to parse TLS CA certificate to ver...
  constant _ETCD_KEY (line 7) | _ETCD_KEY                   = "Failed to parse etcd node TLS key"
  constant _ETCD_CERT (line 8) | _ETCD_CERT                  = "Failed to parse etcd node TLS certificate"
  constant _ETCD_CERT_VERIFY (line 9) | _ETCD_CERT_VERIFY           = "Failed to verify etcd node certificate ag...
  constant _ETCD_CLIENT_CONN (line 10) | _ETCD_CLIENT_CONN           = "Client is successfully connected to etcd ...
  constant _ETCD_CLIENT_N_CONN (line 11) | _ETCD_CLIENT_N_CONN         = "Client is not connected to etcd cluster"
  constant _ETCD_PUT (line 12) | _ETCD_PUT                   = "etcd put request"
  constant _ETCD_PUT_DB_FAIL (line 13) | _ETCD_PUT_DB_FAIL           = "etcd responded with error on put request"
  constant _ETCD_PUT_REQ_OK (line 14) | _ETCD_PUT_REQ_OK            = "etcd processed put request successfully"
  constant _ETCD_PUT_EXISTING (line 15) | _ETCD_PUT_EXISTING          = "Trying to put value into an existing key"
  constant _ETCD_PUT_ALL (line 16) | _ETCD_PUT_ALL               = "etcd put many values request"
  constant _ETCD_PUT_ALL_DB_FAIL (line 17) | _ETCD_PUT_ALL_DB_FAIL       = "etcd responded with error on put many val...
  constant _ETCD_PUT_ALL_REQ_OK (line 18) | _ETCD_PUT_ALL_REQ_OK        = "etcd processed put many values request su...
  constant _ETCD_PUT_ALL_EXISTING (line 19) | _ETCD_PUT_ALL_
Condensed preview — 1403 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (5,694K chars).
[
  {
    "path": ".editorconfig",
    "chars": 629,
    "preview": "# http://editorconfig.org\n\nroot = true\n\n[*]\ntrim_trailing_whitespace = true\ninsert_final_newline = true\ncharset = utf-8\n"
  },
  {
    "path": ".gitignore",
    "chars": 181,
    "preview": "*.swp\n*.pyc\ngen_types.go\ngen_types_test.go\ngen_import.go\ngen_import_dev.go\n__pycache__\n.idea\n\n# ivxv-admin\n/build\n/dist\n"
  },
  {
    "path": ".gitmodules",
    "chars": 181,
    "preview": "[submodule \"Documentation/public/liidesed/VIS3-EHS\"]\n  path = Documentation/public/liidesed/VIS3-EHS\n  url = https://git"
  },
  {
    "path": "Documentation/.gitignore",
    "chars": 20,
    "preview": "_build\n_master\n*.mo\n"
  },
  {
    "path": "Documentation/Makefile",
    "chars": 4312,
    "preview": "# This Makefile supports two different invocation \"modes\".\n#\n# The default mode, invoked via \"all\", \"pdf\", or \"html\", bu"
  },
  {
    "path": "Documentation/_static/custom.css",
    "chars": 430,
    "preview": "/*\n * IVXV Internet voting framework\n *\n * Sphinx stylesheet for HTML documentation\n */\n\n.figure {\n  background-color: r"
  },
  {
    "path": "Documentation/common/examples/id.rpc.vote.query.json",
    "chars": 365,
    "preview": "{\n    \"id\": 0.0,\n    \"method\": \"RPC.Vote\",\n    \"params\": [\n        {\n            \"AuthMethod\": \"tls\",\n            \"Choic"
  },
  {
    "path": "Documentation/common/examples/id.rpc.vote.response.json",
    "chars": 387,
    "preview": "{\n    \"error\": null,\n    \"id\": 0.0,\n    \"result\": {\n        \"Qualification\": {\n            \"ocsp\": \"MIIFTAoBAKCCBUUwggVB"
  },
  {
    "path": "Documentation/common/examples/id.rpc.voterchoices.query.json",
    "chars": 169,
    "preview": "{\n    \"id\": 0.0,\n    \"method\": \"RPC.VoterChoices\",\n    \"params\": [\n        {\n            \"AuthMethod\": \"tls\",\n          "
  },
  {
    "path": "Documentation/common/examples/id.rpc.voterchoices.response.json",
    "chars": 249,
    "preview": "{\n    \"error\": null,\n    \"id\": 0.0,\n    \"result\": {\n        \"Choices\": \"0140.1\",\n        \"List\": \"ew0KICAgICAgICAgICAgIk"
  },
  {
    "path": "Documentation/common/examples/json.rpc.method.query.json",
    "chars": 185,
    "preview": "{\n    \"id\": 0.0,\n    \"method\": \"RPC.Method\",\n    \"params\": [\n        {\n            \"MethodParam\": \"value\",\n            \""
  },
  {
    "path": "Documentation/common/examples/json.rpc.method.response.json",
    "chars": 148,
    "preview": "{\n    \"error\": null,\n    \"id\": 0.0,\n    \"result\": {\n        \"ResultParam\": \"value\",\n        \"SessionID\": \"ec3a0cab353d55"
  },
  {
    "path": "Documentation/common/examples/mid.rpc.authenticate.query.json",
    "chars": 212,
    "preview": "{\n    \"id\": 0.0,\n    \"method\": \"RPC.Authenticate\",\n    \"params\": [\n        {\n            \"OS\": \"Operating System,2,0\",\n "
  },
  {
    "path": "Documentation/common/examples/mid.rpc.authenticate.response.json",
    "chars": 305,
    "preview": "{\n    \"error\": null,\n    \"id\": 0.0,\n    \"result\": {\n        \"Challenge\": \"EtsTur4XV7xEGS9LBjHSfF9Cc5PQxtYW+YAOysRIt2r..."
  },
  {
    "path": "Documentation/common/examples/mid.rpc.authenticatestatus.query.json",
    "chars": 244,
    "preview": "{\n    \"id\": 0.0,\n    \"method\": \"RPC.AuthenticateStatus\",\n    \"params\": [\n        {\n            \"OS\": \"Operating System,2"
  },
  {
    "path": "Documentation/common/examples/mid.rpc.authenticatestatus.response.json",
    "chars": 245,
    "preview": "{\n    \"error\": null,\n    \"id\": 0.0,\n    \"result\": {\n        \"AuthToken\": null,\n        \"GivenName\": \"\",\n        \"Persona"
  },
  {
    "path": "Documentation/common/examples/mid.rpc.authenticatestatus2.query.json",
    "chars": 244,
    "preview": "{\n    \"id\": 0.0,\n    \"method\": \"RPC.AuthenticateStatus\",\n    \"params\": [\n        {\n            \"OS\": \"Operating System,2"
  },
  {
    "path": "Documentation/common/examples/mid.rpc.authenticatestatus2.response.json",
    "chars": 351,
    "preview": "{\n    \"error\": null,\n    \"id\": 0.0,\n    \"result\": {\n        \"AuthToken\": \"G1RTZqBSBKrzqReuKYrmFUFXWFPvaxhJjdiZi6zqAnaK3O"
  },
  {
    "path": "Documentation/common/examples/mid.rpc.getcertificate.query.json",
    "chars": 401,
    "preview": "{\n    \"id\": 0.0,\n    \"method\": \"RPC.GetCertificate\",\n    \"params\": [\n        {\n            \"AuthMethod\": \"ticket\",\n     "
  },
  {
    "path": "Documentation/common/examples/mid.rpc.getcertificate.response.json",
    "chars": 197,
    "preview": "{\n    \"error\": null,\n    \"id\": 0.0,\n    \"result\": {\n        \"Certificate\": \"MIIEVjCCAz6gAwIBAgIQRfmbsIcpkQ9UhxScCwG6VDAN"
  },
  {
    "path": "Documentation/common/examples/mid.rpc.sign.query.json",
    "chars": 493,
    "preview": "{\n    \"id\": 0.0,\n    \"method\": \"RPC.Sign\",\n    \"params\": [\n        {\n            \"AuthMethod\": \"ticket\",\n            \"Au"
  },
  {
    "path": "Documentation/common/examples/mid.rpc.sign.response.json",
    "chars": 174,
    "preview": "{\n    \"error\": null,\n    \"id\": 0.0,\n    \"result\": {\n        \"SessionCode\": \"E663A711BB9447EAD82491F9372F4CA\",\n        \"S"
  },
  {
    "path": "Documentation/common/examples/mid.rpc.signstatus.query.json",
    "chars": 257,
    "preview": "{\n    \"id\": 0.0,\n    \"method\": \"RPC.SignStatus\",\n    \"params\": [\n        {\n            \"OS\": \"Operating System,2,0\",\n   "
  },
  {
    "path": "Documentation/common/examples/mid.rpc.signstatus.response.json",
    "chars": 169,
    "preview": "{\n    \"error\": null,\n    \"id\": 0.0,\n    \"result\": {\n        \"SessionID\": \"057229fdfa2df7d3c7f4ced81b02760b\",\n        \"Si"
  },
  {
    "path": "Documentation/common/examples/mid.rpc.signstatus2.query.json",
    "chars": 257,
    "preview": "{\n    \"id\": 0.0,\n    \"method\": \"RPC.SignStatus\",\n    \"params\": [\n        {\n            \"OS\": \"Operating System,2,0\",\n   "
  },
  {
    "path": "Documentation/common/examples/mid.rpc.signstatus2.response.json",
    "chars": 268,
    "preview": "{\n    \"error\": null,\n    \"id\": 0.0,\n    \"result\": {\n        \"SessionID\": \"057229fdfa2df7d3c7f4ced81b02760b\",\n        \"Si"
  },
  {
    "path": "Documentation/common/examples/mid.rpc.vote.query.json",
    "chars": 449,
    "preview": "{\n    \"id\": 0.0,\n    \"method\": \"RPC.Vote\",\n    \"params\": [\n        {\n            \"AuthMethod\": \"ticket\",\n            \"Au"
  },
  {
    "path": "Documentation/common/examples/mid.rpc.vote.response.json",
    "chars": 388,
    "preview": "{\n    \"error\": null,\n    \"id\": 0.0,\n    \"result\": {\n        \"Qualification\": {\n            \"ocsp\": \"MIIG7QoBAKCCBuYwggbi"
  },
  {
    "path": "Documentation/common/examples/mid.rpc.voterchoices.query.json",
    "chars": 314,
    "preview": "{\n    \"id\": 0.0,\n    \"method\": \"RPC.VoterChoices\",\n    \"params\": [\n        {\n            \"AuthMethod\": \"ticket\",\n       "
  },
  {
    "path": "Documentation/common/examples/mid.rpc.voterchoices.response.json",
    "chars": 249,
    "preview": "{\n    \"error\": null,\n    \"id\": 0.0,\n    \"result\": {\n        \"Choices\": \"0919.1\",\n        \"List\": \"ew0KICAgICAgICAgICAgIs"
  },
  {
    "path": "Documentation/common/examples/smartid.rpc.authenticate.query.json",
    "chars": 321,
    "preview": "{\n    \"id\": 0.0,\n    \"method\": \"RPC.Authenticate\",\n    \"params\": [\n        {\n            \"OS\": \"Operating System,2,0\",\n "
  },
  {
    "path": "Documentation/common/examples/smartid.rpc.authenticate.response.json",
    "chars": 233,
    "preview": "{\n    \"error\": null,\n    \"id\": 0.0,\n    \"result\": {\n        \"XSmartIDAuth\": \"4wesTurtYW+66BjHSfF9CcAQEB56It2rW+11112018R"
  },
  {
    "path": "Documentation/common/examples/smartid.rpc.authenticatestatus.query.json",
    "chars": 327,
    "preview": "{\n    \"id\": 0.0,\n    \"method\": \"RPC.AuthenticateStatus\",\n    \"params\": [\n        {\n            \"OS\": \"Operating System,2"
  },
  {
    "path": "Documentation/common/examples/smartid.rpc.authenticatestatus.response.json",
    "chars": 351,
    "preview": "{\n    \"error\": null,\n    \"id\": 0.0,\n    \"result\": {\n        \"AuthToken\": null,\n        \"DataToken\": null,\n        \"Given"
  },
  {
    "path": "Documentation/common/examples/smartid.rpc.authenticatestatus2.query.json",
    "chars": 327,
    "preview": "{\n    \"id\": 0.0,\n    \"method\": \"RPC.AuthenticateStatus\",\n    \"params\": [\n        {\n            \"OS\": \"Operating System,2"
  },
  {
    "path": "Documentation/common/examples/smartid.rpc.authenticatestatus2.response.json",
    "chars": 429,
    "preview": "{\n    \"error\": null,\n    \"id\": 0.0,\n    \"result\": {\n        \"AuthToken\": \"G1RTZqBSBKrzqReuKYrmFUFXWFPvaxhJjdiZi6zqAnaK3O"
  },
  {
    "path": "Documentation/common/examples/smartid.rpc.challenge.query.json",
    "chars": 134,
    "preview": "{\n    \"id\": 0.0,\n    \"method\": \"RPC.Challenge\",\n    \"params\": [\n        {\n            \"OS\": \"Operating System,2,0\",\n    "
  },
  {
    "path": "Documentation/common/examples/smartid.rpc.challenge.response.json",
    "chars": 266,
    "preview": "{\n    \"error\": null,\n    \"id\": 0.0,\n    \"result\": {\n        \"Challenge\": \"EtsTur4XV7xEGS9LBjHSfF9Cc5PQxtYW+YAOysRIt2r..."
  },
  {
    "path": "Documentation/common/examples/smartid.rpc.getcertificatechoice.query.json",
    "chars": 404,
    "preview": "{\n    \"id\": 0.0,\n    \"method\": \"RPC.GetCertificateChoice\",\n    \"params\": [\n        {\n            \"AuthMethod\": \"ticket\","
  },
  {
    "path": "Documentation/common/examples/smartid.rpc.getcertificatechoice.response.json",
    "chars": 153,
    "preview": "{\n    \"error\": null,\n    \"id\": 0.0,\n    \"result\": {\n        \"SessionID\": \"057229fdfa2df7d3c7f4ced81b02760b\",\n        \"Se"
  },
  {
    "path": "Documentation/common/examples/smartid.rpc.getcertificatechoicestatus.query.json",
    "chars": 252,
    "preview": "{\n    \"id\": 0.0,\n    \"method\": \"RPC.GetCertificateChoiceStatus\",\n    \"params\": [\n        {\n            \"SessionCode\": \"2"
  },
  {
    "path": "Documentation/common/examples/smartid.rpc.getcertificatechoicestatus.response.json",
    "chars": 171,
    "preview": "{\n    \"error\": null,\n    \"id\": 0.0,\n    \"result\": {\n        \"Certificate\": null,\n        \"SessionID\": \"057229fdfa2df7d3c"
  },
  {
    "path": "Documentation/common/examples/smartid.rpc.getcertificatechoicestatus2.response.json",
    "chars": 221,
    "preview": "{\n    \"error\": null,\n    \"id\": 0.0,\n    \"result\": {\n        \"Certificate\": \"MIIEVjCCAz6gAwIBAgIQRfmbsIcpkQ9UhxScCwG6VDAN"
  },
  {
    "path": "Documentation/common/examples/smartid.rpc.sign.query.json",
    "chars": 490,
    "preview": "{\n    \"id\": 0.0,\n    \"method\": \"RPC.Sign\",\n    \"params\": [\n        {\n            \"AuthMethod\": \"ticket\",\n            \"Au"
  },
  {
    "path": "Documentation/common/examples/smartid.rpc.sign.response.json",
    "chars": 174,
    "preview": "{\n    \"error\": null,\n    \"id\": 0.0,\n    \"result\": {\n        \"SessionCode\": \"E663A711BB9447EAD82491F9372F4CA\",\n        \"S"
  },
  {
    "path": "Documentation/common/examples/smartid.rpc.signstatus.query.json",
    "chars": 257,
    "preview": "{\n    \"id\": 0.0,\n    \"method\": \"RPC.SignStatus\",\n    \"params\": [\n        {\n            \"OS\": \"Operating System,2,0\",\n   "
  },
  {
    "path": "Documentation/common/examples/smartid.rpc.signstatus.response.json",
    "chars": 169,
    "preview": "{\n    \"error\": null,\n    \"id\": 0.0,\n    \"result\": {\n        \"SessionID\": \"057229fdfa2df7d3c7f4ced81b02760b\",\n        \"Si"
  },
  {
    "path": "Documentation/common/examples/smartid.rpc.signstatus2.query.json",
    "chars": 257,
    "preview": "{\n    \"id\": 0.0,\n    \"method\": \"RPC.SignStatus\",\n    \"params\": [\n        {\n            \"OS\": \"Operating System,2,0\",\n   "
  },
  {
    "path": "Documentation/common/examples/smartid.rpc.signstatus2.response.json",
    "chars": 269,
    "preview": "{\n    \"error\": null,\n    \"id\": 0.0,\n    \"result\": {\n        \"SessionID\": \"057229fdfa2df7d3c7f4ced81b02760b\",\n        \"Si"
  },
  {
    "path": "Documentation/common/examples/smartid.rpc.vote.query.json",
    "chars": 449,
    "preview": "{\n    \"id\": 0.0,\n    \"method\": \"RPC.Vote\",\n    \"params\": [\n        {\n            \"AuthMethod\": \"ticket\",\n            \"Au"
  },
  {
    "path": "Documentation/common/examples/smartid.rpc.vote.response.json",
    "chars": 388,
    "preview": "{\n    \"error\": null,\n    \"id\": 0.0,\n    \"result\": {\n        \"Qualification\": {\n            \"ocsp\": \"MIIG7QoBAKCCBuYwggbi"
  },
  {
    "path": "Documentation/common/examples/smartid.rpc.voterchoices.query.json",
    "chars": 314,
    "preview": "{\n    \"id\": 0.0,\n    \"method\": \"RPC.VoterChoices\",\n    \"params\": [\n        {\n            \"AuthMethod\": \"ticket\",\n       "
  },
  {
    "path": "Documentation/common/examples/smartid.rpc.voterchoices.response.json",
    "chars": 249,
    "preview": "{\n    \"error\": null,\n    \"id\": 0.0,\n    \"result\": {\n        \"Choices\": \"0919.1\",\n        \"List\": \"ew0KICAgICAgICAgICAgIs"
  },
  {
    "path": "Documentation/common/examples/ver.rpc.verify.query.json",
    "chars": 239,
    "preview": "{\n    \"id\": 1,\n    \"method\": \"RPC.Verify\",\n    \"params\": [\n        {\n            \"OS\": \"Operating System,2,0\",\n         "
  },
  {
    "path": "Documentation/common/examples/ver.rpc.verify.response.json",
    "chars": 504,
    "preview": "{\n    \"error\": null,\n    \"id\": 1,\n    \"result\": {\n        \"Qualification\": {\n            \"ocsp\": \"MIIG8woBAKCCBuwwggboBg"
  },
  {
    "path": "Documentation/common/examples/votesorder.rpc.votes.query.json",
    "chars": 149,
    "preview": "{\n    \"id\": 0.0,\n    \"method\": \"RPC.Votes\",\n    \"params\": [\n        {\n            \"VotesFrom\": 1,\n            \"BatchMaxS"
  },
  {
    "path": "Documentation/common/examples/votesorder.rpc.votes.response.json",
    "chars": 592,
    "preview": "{\n    \"error\": null,\n    \"id\": 0.0,\n    \"result\": {\n        \"SessionID\": \"057229fdfa2df7d3c7f4ced81b02760b\",\n        \"ba"
  },
  {
    "path": "Documentation/common/examples/votesorder.rpc.votesseqno.query.json",
    "chars": 93,
    "preview": "{\n    \"id\": 0.0,\n    \"method\": \"RPC.VotesSeqNo\",\n    \"params\": [\n        {\n        }\n    ]\n}\n"
  },
  {
    "path": "Documentation/common/examples/votesorder.rpc.votesseqno.response.json",
    "chars": 137,
    "preview": "{\n    \"error\": null,\n    \"id\": 0.0,\n    \"result\": {\n        \"SessionID\": \"057229fdfa2df7d3c7f4ced81b02760b\",\n        \"Se"
  },
  {
    "path": "Documentation/common/examples/webeid.rpc.challenge.query.json",
    "chars": 133,
    "preview": "{\n    \"id\": 0.0,\n    \"method\": \"RPC.Challenge\",\n    \"params\": [\n        {\n            \"OS\": \"Operating System,2,0\"\n     "
  },
  {
    "path": "Documentation/common/examples/webeid.rpc.challenge.response.json",
    "chars": 256,
    "preview": "{\n    \"error\": null,\n    \"id\": 0.0,\n    \"result\": {\n        \"Challenge\": \"EtsTur4XV7xEGS9LBjHSfF9Cc5PQxtYW+YAOysRIt2r..."
  },
  {
    "path": "Documentation/common/examples/webeid.rpc.token.query.json",
    "chars": 327,
    "preview": "{\n    \"id\": 0.0,\n    \"method\": \"RPC.Token\",\n    \"params\": [\n        {\n            \"OS\": \"Operating System,2,0\",\n        "
  },
  {
    "path": "Documentation/common/examples/webeid.rpc.token.response.json",
    "chars": 351,
    "preview": "{\n    \"error\": null,\n    \"id\": 0.0,\n    \"result\": {\n        \"AuthToken\": \"G1RTZqBSBKrzqReuKYrmFUFXWFPvaxhJjdiZi6zqAnaK3O"
  },
  {
    "path": "Documentation/common/examples/webeid.rpc.vote.query.json",
    "chars": 449,
    "preview": "{\n    \"id\": 0.0,\n    \"method\": \"RPC.Vote\",\n    \"params\": [\n        {\n            \"AuthMethod\": \"ticket\",\n            \"Au"
  },
  {
    "path": "Documentation/common/examples/webeid.rpc.vote.response.json",
    "chars": 388,
    "preview": "{\n    \"error\": null,\n    \"id\": 0.0,\n    \"result\": {\n        \"Qualification\": {\n            \"ocsp\": \"MIIG7QoBAKCCBuYwggbi"
  },
  {
    "path": "Documentation/common/examples/webeid.rpc.voterchoices.query.json",
    "chars": 314,
    "preview": "{\n    \"id\": 0.0,\n    \"method\": \"RPC.VoterChoices\",\n    \"params\": [\n        {\n            \"AuthMethod\": \"ticket\",\n       "
  },
  {
    "path": "Documentation/common/examples/webeid.rpc.voterchoices.response.json",
    "chars": 249,
    "preview": "{\n    \"error\": null,\n    \"id\": 0.0,\n    \"result\": {\n        \"Choices\": \"0919.1\",\n        \"List\": \"ew0KICAgICAgICAgICAgIs"
  },
  {
    "path": "Documentation/common/schema/Makefile",
    "chars": 55,
    "preview": ".PHONY: validate\nvalidate:\n\tpython3 validate_schema.py\n"
  },
  {
    "path": "Documentation/common/schema/ivxv.anon-bb.schema",
    "chars": 1346,
    "preview": "{\n    \"$schema\": \"http://json-schema.org/draft-04/schema#\",\n    \"definitions\": {\n        \"results\": {\n            \"type\""
  },
  {
    "path": "Documentation/common/schema/ivxv.anon-bb.schema.example",
    "chars": 501,
    "preview": "{\n    \"election\": \"TESTKOV\",\n    \"districts\": {\n        \"0164.1\": {\n            \"0164\": {\n                \"TESTKOV.1\": ["
  },
  {
    "path": "Documentation/common/schema/ivxv.choices.schema",
    "chars": 1567,
    "preview": "{\n    \"$schema\": \"http://json-schema.org/draft-04/schema#\",\n    \"definitions\": {\n        \"choice\": {\n            \"type\":"
  },
  {
    "path": "Documentation/common/schema/ivxv.choices.schema.example",
    "chars": 761,
    "preview": "{\n    \"choices\": {\n        \"0164.1\": {\n            \"Nimi Valimisliit\": {\n                \"0164.126\": \"Nimi Kandidaat\",\n "
  },
  {
    "path": "Documentation/common/schema/ivxv.districts.schema",
    "chars": 3113,
    "preview": "{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"definitions\": {\n    \"region\": {\n      \"type\": \"object\",\n   "
  },
  {
    "path": "Documentation/common/schema/ivxv.districts.schema.example",
    "chars": 1480,
    "preview": "{\n  \"election\": \"KOV2034\",\n  \"regions\": {\n    \"0809\": {\n      \"parish\": \"Tori vald\",\n      \"county\": \"Pärnu maakond\",\n  "
  },
  {
    "path": "Documentation/common/schema/ivxv.result.schema",
    "chars": 1952,
    "preview": "{\n    \"$schema\": \"http://json-schema.org/draft-04/schema#\",\n    \"definitions\": {\n        \"results\": {\n            \"type\""
  },
  {
    "path": "Documentation/common/schema/ivxv.result.schema.example",
    "chars": 1278,
    "preview": "{\n    \"bydistrict\": {\n        \"0164.1\": {\n            \"0164.126\": 0,\n            \"0164.127\": 0,\n            \"invalid\": 0"
  },
  {
    "path": "Documentation/common/schema/ivxv.revoke.schema",
    "chars": 770,
    "preview": "{\n    \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n    \"definitions\": {\n        \"rev_entry\": {\n            \"typ"
  },
  {
    "path": "Documentation/common/schema/ivxv.revoke.schema.example",
    "chars": 144,
    "preview": "{\n    \"election\": \"TESTKOV\",\n    \"persons\": [\n        \"11412090004\",\n        \"11412090005\",\n        \"11412090006\"\n    ],"
  },
  {
    "path": "Documentation/common/schema/ivxv.voterlist.schema",
    "chars": 1416,
    "preview": "{\n    \"$schema\": \"http://json-schema.org/draft-04/schema#\",\n    \"definitions\": {\n        \"onlinevoters_entry\": {\n       "
  },
  {
    "path": "Documentation/common/schema/ivxv.voterlist.schema.example",
    "chars": 447,
    "preview": "{\n  \"election\": \"RK2030\",\n  \"onlinevoters\": {\n    \"0000.1\": {\n      \"0176\": [\n        \"11412090001\"\n      ],\n      \"0339"
  },
  {
    "path": "Documentation/common/schema/validate_schema.py",
    "chars": 1244,
    "preview": "# IVXV Internet voting framework\n\"\"\"Validate jsonschema example files.\"\"\"\n\nimport json\nimport logging\nimport os\nimport s"
  },
  {
    "path": "Documentation/common/xmltemplates/si.template",
    "chars": 836,
    "preview": "<ds:SignedInfo xmlns:asic=\"http://uri.etsi.org/02918/v1.2.1#\" xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\" xmlns:xades="
  },
  {
    "path": "Documentation/common/xmltemplates/sig.template",
    "chars": 601,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<asic:XAdESSignatures xmlns:asic=\"http://uri.etsi.org/02918/v1.2."
  },
  {
    "path": "Documentation/common/xmltemplates/sp.template",
    "chars": 1001,
    "preview": "<xades:SignedProperties xmlns:asic=\"http://uri.etsi.org/02918/v1.2.1#\" xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\" xml"
  },
  {
    "path": "Documentation/common/xmltemplates/sv.template",
    "chars": 206,
    "preview": "<ds:SignatureValue xmlns:asic=\"http://uri.etsi.org/02918/v1.2.1#\" xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\" xmlns:xa"
  },
  {
    "path": "Documentation/common-model.mk",
    "chars": 886,
    "preview": "PLANTUML=env -u DISPLAY plantuml\nPLANTUML_EN=env -u DISPLAY plantuml -I./en/lang.pu\nPLANTUML_ET=env -u DISPLAY plantuml "
  },
  {
    "path": "Documentation/common.mk",
    "chars": 4369,
    "preview": "# common.mk: Common recipes for Documentation.\n#\n# Defines a catch-all recipe which routes unknown targets to Sphinx in "
  },
  {
    "path": "Documentation/conf.py",
    "chars": 5953,
    "preview": "# Configuration file for the Sphinx documentation builder.\n#\n# This file only contains a selection of the most common op"
  },
  {
    "path": "Documentation/differ.sh",
    "chars": 940,
    "preview": "#!/bin/bash\n# differ.sh: Generate LaTeX differences between two Sphinx build directories.\n\nset -eu\n\nold=\"$1/latex/\"\nnew="
  },
  {
    "path": "Documentation/documents.py",
    "chars": 9858,
    "preview": "#!/usr/bin/python3\n\"\"\"\nIVXV documents\n\"\"\"\n\nproject = 'Elektroonilise hääletamise infosüsteem'\ncopyright = '2016-2025, Cy"
  },
  {
    "path": "Documentation/en/backendlogs/.gitignore",
    "chars": 10,
    "preview": "index.rst\n"
  },
  {
    "path": "Documentation/en/backendlogs/Makefile",
    "chars": 80,
    "preview": "\nDEPENDENCIES := index.rst\ninclude ../../common.mk\n\nindex.rst:\n\t./create_rst.py\n"
  },
  {
    "path": "Documentation/en/backendlogs/create_rst.py",
    "chars": 8683,
    "preview": "#!/usr/bin/env python3\n\n\"\"\"\nGenerate log-event reference doc from source code\n\"\"\"\n\n\nimport os\nimport re\n\nfrom rstcloth i"
  },
  {
    "path": "Documentation/en/backendlogs/introduction.inc",
    "chars": 2685,
    "preview": "The purpose of this document is to provide a reference to all possible log\nmessages in the IVXV backend.\n\nThis document "
  },
  {
    "path": "Documentation/et/audiitor/Makefile",
    "chars": 24,
    "preview": "include ../../common.mk\n"
  },
  {
    "path": "Documentation/et/audiitor/annotatsioon.rst",
    "chars": 544,
    "preview": "..  IVXV kogumisteenuse haldusteenuse kirjeldus\n\nAnnotatsioon\n------------\n\nJuhend annab suunised IVXV andmeauditi teost"
  },
  {
    "path": "Documentation/et/audiitor/audit.rst",
    "chars": 12169,
    "preview": "\n================================================================================\nIVXV juhend audiitorile\n=============="
  },
  {
    "path": "Documentation/et/audiitor/history.rst",
    "chars": 75,
    "preview": "\n`.history`\n---------------\n\n.. literalinclude:: history.txt\n   :linenos:\n\n"
  },
  {
    "path": "Documentation/et/audiitor/history.txt",
    "chars": 3848,
    "preview": "sudo apt update\nsudo apt upgrade\ntar xvf audit-examples.tar\nsudo apt-get install --no-install-recommends -y autoconf aut"
  },
  {
    "path": "Documentation/et/audiitor/index.rst",
    "chars": 414,
    "preview": "..  IVXV seadistuste koostamise juhend\n\nIVXV audiitori juhend\n=========================================================="
  },
  {
    "path": "Documentation/et/audiitor/spelling_wordlist.txt",
    "chars": 47,
    "preview": "\nPEM\nRVT'le\n\nkonfinäitega\nkonfinäitest\n\nubuntu\n"
  },
  {
    "path": "Documentation/et/audiitor/ylevaade.rst",
    "chars": 7171,
    "preview": "Miksimistõendi ülevaade\n=======================\n\nIlma juhuslikkust kasutamata oleks iga krüpteerimise algoritm determini"
  },
  {
    "path": "Documentation/et/example-config/DEMO_auditor/DEMO_auditor.yaml",
    "chars": 856,
    "preview": "# Mixneti teisenduse kontrollimine\nconvert:\n# IVXV segamise-eelse e-valimiskasti asukoht.\n  input_bb: DEMO_bb-4.json\n# I"
  },
  {
    "path": "Documentation/et/example-config/DEMO_election/DEMO.election.yaml",
    "chars": 3187,
    "preview": "# Valimiste seadistus DEMO\n\nidentifier: DEMO\nquestions:\n  - question-1\n\nperiod:\n  servicestart: 2018-12-03T10:20:00+03:0"
  },
  {
    "path": "Documentation/et/example-config/DEMO_election/DEMO_valijate_nimekiri.pem",
    "chars": 451,
    "preview": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvw9xOr556u2oqnn5x743\n0Zva6Ef7HnUQ0Gc+BU1XP9ByORiV"
  },
  {
    "path": "Documentation/et/example-config/DEMO_election/EE-GovCA2018.pem.crt",
    "chars": 1785,
    "preview": "-----BEGIN CERTIFICATE-----\nMIIE+DCCBFmgAwIBAgIQMLOwlXoR0oFbj52nmRsnezAKBggqhkjOPQQDBDBaMQsw\nCQYDVQQGEwJFRTEbMBkGA1UECgw"
  },
  {
    "path": "Documentation/et/example-config/DEMO_election/EE_Certification_Centre_Root_CA.pem.crt",
    "chars": 1452,
    "preview": "-----BEGIN CERTIFICATE-----\nMIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1\nMQswCQYDVQQGEwJFRTEiMCAGA1U"
  },
  {
    "path": "Documentation/et/example-config/DEMO_election/ESTEID-SK_2015.pem.crt",
    "chars": 2293,
    "preview": "-----BEGIN CERTIFICATE-----\nMIIGcDCCBVigAwIBAgIQRUgJC4ec7yFWcqzT3mwbWzANBgkqhkiG9w0BAQwFADB1\nMQswCQYDVQQGEwJFRTEiMCAGA1U"
  },
  {
    "path": "Documentation/et/example-config/DEMO_election/SK_OCSP_RESPONDER_2011.pem.cer",
    "chars": 1704,
    "preview": "-----BEGIN CERTIFICATE-----\nMIIEvDCCA6SgAwIBAgIQcpyVmdruRVxNgzI3N/NZQTANBgkqhkiG9w0BAQUFADB1\nMQswCQYDVQQGEwJFRTEiMCAGA1U"
  },
  {
    "path": "Documentation/et/example-config/DEMO_election/SK_TIMESTAMPING_AUTHORITY.pem.cer",
    "chars": 1464,
    "preview": "-----BEGIN CERTIFICATE-----\nMIIEDTCCAvWgAwIBAgIQJK/s6xJo0AJUF/eG7W8BWTANBgkqhkiG9w0BAQsFADB1\nMQswCQYDVQQGEwJFRTEiMCAGA1U"
  },
  {
    "path": "Documentation/et/example-config/DEMO_election/esteid2018.pem.crt",
    "chars": 1911,
    "preview": "-----BEGIN CERTIFICATE-----\nMIIFVzCCBLigAwIBAgIQdUf6rBR0S4tbo2bU/mZV7TAKBggqhkjOPQQDBDBaMQsw\nCQYDVQQGEwJFRTEbMBkGA1UECgw"
  },
  {
    "path": "Documentation/et/example-config/DEMO_ivxv/EE-GovCA2018.pem.crt",
    "chars": 1785,
    "preview": "-----BEGIN CERTIFICATE-----\nMIIE+DCCBFmgAwIBAgIQMLOwlXoR0oFbj52nmRsnezAKBggqhkjOPQQDBDBaMQsw\nCQYDVQQGEwJFRTEbMBkGA1UECgw"
  },
  {
    "path": "Documentation/et/example-config/DEMO_ivxv/ESTEID-SK_2015.pem.crt",
    "chars": 2293,
    "preview": "-----BEGIN CERTIFICATE-----\nMIIGcDCCBVigAwIBAgIQRUgJC4ec7yFWcqzT3mwbWzANBgkqhkiG9w0BAQwFADB1\nMQswCQYDVQQGEwJFRTEiMCAGA1U"
  },
  {
    "path": "Documentation/et/example-config/DEMO_ivxv/ESTEID2018.pem.crt",
    "chars": 1911,
    "preview": "-----BEGIN CERTIFICATE-----\nMIIFVzCCBLigAwIBAgIQdUf6rBR0S4tbo2bU/mZV7TAKBggqhkjOPQQDBDBaMQsw\nCQYDVQQGEwJFRTEbMBkGA1UECgw"
  },
  {
    "path": "Documentation/et/example-config/DEMO_ivxv/SK_OCSP_RESPONDER_2011.pem.crt",
    "chars": 1704,
    "preview": "-----BEGIN CERTIFICATE-----\nMIIEvDCCA6SgAwIBAgIQcpyVmdruRVxNgzI3N/NZQTANBgkqhkiG9w0BAQUFADB1\nMQswCQYDVQQGEwJFRTEiMCAGA1U"
  },
  {
    "path": "Documentation/et/example-config/DEMO_ivxv/SK_TIMESTAMPING_AUTHORITY_2019.pem.crt",
    "chars": 1500,
    "preview": "-----BEGIN CERTIFICATE-----\r\nMIIEFjCCAv6gAwIBAgIQftdGTujTD01cG10EjrASbDANBgkqhkiG9w0BAQsFADB1\r\nMQswCQYDVQQGEwJFRTEiMCAGA"
  },
  {
    "path": "Documentation/et/example-config/DEMO_ivxv/SK_TIMESTAMPING_AUTHORITY_2020.pem.crt",
    "chars": 1500,
    "preview": "-----BEGIN CERTIFICATE-----\r\nMIIEFjCCAv6gAwIBAgIQYjZ9dFrZQ6tdpFC5Xj/6bjANBgkqhkiG9w0BAQsFADB1\r\nMQswCQYDVQQGEwJFRTEiMCAGA"
  },
  {
    "path": "Documentation/et/example-config/DEMO_ivxv/SK_TIMESTAMPING_AUTHORITY_2021.pem.crt",
    "chars": 1596,
    "preview": "-----BEGIN CERTIFICATE-----\r\nMIIEWjCCA0KgAwIBAgIQCrITQgwdM4hfdZRtSgVwszANBgkqhkiG9w0BAQsFADB1\r\nMQswCQYDVQQGEwJFRTEiMCAGA"
  },
  {
    "path": "Documentation/et/example-config/DEMO_ivxv/ivxv.properties",
    "chars": 233,
    "preview": "ca = EE-GovCA2018.pem.crt, ESTEID2018.pem.crt, ESTEID-SK_2015.pem.crt\nocsp = SK_OCSP_RESPONDER_2011.pem.crt\ntsa = SK_TIM"
  },
  {
    "path": "Documentation/et/example-config/DEMO_key.decrypt_f/DEMO_key.decrypt_f.yaml",
    "chars": 1121,
    "preview": "util:\n  listreaders: true\n\ntestkey:\n    identifier: DEMO\n    out: initout\n    threshold: 5\n    parties: 9\n# Kaartidele a"
  },
  {
    "path": "Documentation/et/example-config/DEMO_key.decrypt_t/DEMO_key.decrypt_t.yaml",
    "chars": 1127,
    "preview": "util:\n  listreaders: true\n\ntestkey:\n    identifier: DEMO\n    out: initout\n    threshold: 5\n    parties: 9\n# Kaartidele a"
  },
  {
    "path": "Documentation/et/example-config/DEMO_key.groupgen/key.groupgen.yaml",
    "chars": 400,
    "preview": "groupgen:\n paramtype: mod\n length: 3072\n init_template: key.init.template.yaml\n random_source:\n   - random_source_type: "
  },
  {
    "path": "Documentation/et/example-config/DEMO_key.init/key.init.yaml",
    "chars": 1630,
    "preview": "init:\n  identifier: DEMO\n  paramtype:\n    mod:\n      p: 5809605995369958062791915965639201402176612226902900533702900882"
  },
  {
    "path": "Documentation/et/example-config/DEMO_processor_TS/DEMO_processor_TS.yaml",
    "chars": 3476,
    "preview": "# check         - I etapp: e-valimiskasti tervikluse kontroll ja e-hääletanute nimekirja väljastamine\ncheck:\n# Hääled - "
  },
  {
    "path": "Documentation/et/example-config/DEMO_technical/ca.pem",
    "chars": 1253,
    "preview": "-----BEGIN CERTIFICATE-----\nMIIDcDCCAligAwIBAgIJANLdelAg8Qa9MA0GCSqGSIb3DQEBCwUAMEwxCzAJBgNV\nBAYTAkVFMQwwCgYDVQQKDANSSUE"
  },
  {
    "path": "Documentation/et/example-config/DEMO_technical/technical.yaml",
    "chars": 2862,
    "preview": "debug: true\n\nsnidomain: inttest.ivxv.ee\n\nfilter:\n  tls:\n    handshaketimeout: 20\n    ciphersuites:\n      - TLS_ECDHE_ECD"
  },
  {
    "path": "Documentation/et/example-config/DEMO_trust/DEMO.trust.yaml",
    "chars": 533,
    "preview": "# Usaldusjuure seadistus DEMO\ncontainer:\n  bdoc:\n    filecount: 50\n    bdocsize: 104857600  # 100 MiB\n    filesize: 1048"
  },
  {
    "path": "Documentation/et/example-config/DEMO_trust/EE-GovCA2018.pem.crt",
    "chars": 1785,
    "preview": "-----BEGIN CERTIFICATE-----\nMIIE+DCCBFmgAwIBAgIQMLOwlXoR0oFbj52nmRsnezAKBggqhkjOPQQDBDBaMQsw\nCQYDVQQGEwJFRTEbMBkGA1UECgw"
  },
  {
    "path": "Documentation/et/example-config/DEMO_trust/EE_Certification_Centre_Root_CA.pem.crt",
    "chars": 1452,
    "preview": "-----BEGIN CERTIFICATE-----\nMIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1\nMQswCQYDVQQGEwJFRTEiMCAGA1U"
  },
  {
    "path": "Documentation/et/example-config/DEMO_trust/ESTEID-SK_2015.pem.crt",
    "chars": 2293,
    "preview": "-----BEGIN CERTIFICATE-----\nMIIGcDCCBVigAwIBAgIQRUgJC4ec7yFWcqzT3mwbWzANBgkqhkiG9w0BAQwFADB1\nMQswCQYDVQQGEwJFRTEiMCAGA1U"
  },
  {
    "path": "Documentation/et/example-config/DEMO_trust/SK_OCSP_RESPONDER_2011.pem.cer",
    "chars": 1704,
    "preview": "-----BEGIN CERTIFICATE-----\nMIIEvDCCA6SgAwIBAgIQcpyVmdruRVxNgzI3N/NZQTANBgkqhkiG9w0BAQUFADB1\nMQswCQYDVQQGEwJFRTEiMCAGA1U"
  },
  {
    "path": "Documentation/et/example-config/DEMO_trust/SK_TIMESTAMPING_AUTHORITY.pem.cer",
    "chars": 1464,
    "preview": "-----BEGIN CERTIFICATE-----\nMIIEDTCCAvWgAwIBAgIQJK/s6xJo0AJUF/eG7W8BWTANBgkqhkiG9w0BAQsFADB1\nMQswCQYDVQQGEwJFRTEiMCAGA1U"
  },
  {
    "path": "Documentation/et/example-config/DEMO_trust/esteid2018.pem.crt",
    "chars": 1911,
    "preview": "-----BEGIN CERTIFICATE-----\nMIIFVzCCBLigAwIBAgIQdUf6rBR0S4tbo2bU/mZV7TAKBggqhkjOPQQDBDBaMQsw\nCQYDVQQGEwJFRTEbMBkGA1UECgw"
  },
  {
    "path": "Documentation/et/haldusteenus/Makefile",
    "chars": 24,
    "preview": "include ../../common.mk\n"
  },
  {
    "path": "Documentation/et/haldusteenus/allalaadimised.rst",
    "chars": 1681,
    "preview": "..  IVXV kogumisteenuse haldusliidese kasutusjuhend\n\n.. _allalaadimised:\n\nVäljavõtete allalaadimised\n==================="
  },
  {
    "path": "Documentation/et/haldusteenus/annotatsioon.rst",
    "chars": 541,
    "preview": "..  IVXV kogumisteenuse haldusliidese kasutusjuhend\n\nAnnotatsioon\n------------\n\nIVXV kogumisteenuse haldusteenuse\nkasuta"
  },
  {
    "path": "Documentation/et/haldusteenus/index.rst",
    "chars": 541,
    "preview": "..  IVXV kogumisteenuse haldusliidese kasutusjuhend\n\nIVXV kogumisteenuse haldusliidese kasutusjuhend\n==================="
  },
  {
    "path": "Documentation/et/haldusteenus/kasutajad.rst",
    "chars": 649,
    "preview": "..  IVXV kogumisteenuse haldusliidese kasutusjuhend\n\nKasutajate haldus\n=================\n\nKasutajate halduse leht avaneb"
  },
  {
    "path": "Documentation/et/haldusteenus/logi.rst",
    "chars": 1789,
    "preview": "..  IVXV kogumisteenuse haldusliidese kasutusjuhend\n\nHaldussündmuste logi jälgimine\n==============================\n\nKogu"
  },
  {
    "path": "Documentation/et/haldusteenus/nimekirjad.rst",
    "chars": 1820,
    "preview": "..  IVXV kogumisteenuse haldusliidese kasutusjuhend\n\nNimekirjade haldamine\n=====================\n\nNimekirjade haldamise "
  },
  {
    "path": "Documentation/et/haldusteenus/seadistused.rst",
    "chars": 1306,
    "preview": "..  IVXV kogumisteenuse haldusliidese kasutusjuhend\n\nSeadistuste rakendamise seisundid\n================================="
  },
  {
    "path": "Documentation/et/haldusteenus/spelling_wordlist.txt",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "Documentation/et/haldusteenus/statistika.rst",
    "chars": 1105,
    "preview": "..  IVXV kogumisteenuse haldusliidese kasutusjuhend\n\nStatistika jälgimine\n====================\n\nStatistika jälgimise leh"
  },
  {
    "path": "Documentation/et/haldusteenus/teenused.rst",
    "chars": 1998,
    "preview": "..  IVXV kogumisteenuse haldusliidese kasutusjuhend\n\nTeenuste haldus\n===============\n\nTeenuste haldamise leht avaneb men"
  },
  {
    "path": "Documentation/et/haldusteenus/yldseisund.rst",
    "chars": 1028,
    "preview": "..  IVXV kogumisteenuse haldusliidese kasutusjuhend\n\nÜldseisund\n==========\n\nÜldseisundi leht avaneb menüüvalikust ``Ülds"
  },
  {
    "path": "Documentation/et/haldusteenus/ylevaade.rst",
    "chars": 2028,
    "preview": "..  IVXV kogumisteenuse haldusliidese kasutusjuhend\n\nÜlevaade\n========\n\nHaldusliidese funktsionaalsus\n------------------"
  },
  {
    "path": "Documentation/et/kasutusmall/Makefile",
    "chars": 24,
    "preview": "include ../../common.mk\n"
  },
  {
    "path": "Documentation/et/kasutusmall/index.rst",
    "chars": 375,
    "preview": "..  IVXV kasutusmallid\n\nIVXV kasutusmallid\n==========================================================\n\n.. raw:: html\n\n  "
  },
  {
    "path": "Documentation/et/kasutusmall/kasutusmallid.rst",
    "chars": 40295,
    "preview": "..  IVXV kasutusmallid\n\nKasutusmallid\n=============\n\nHääletamiseelne etapp\n---------------------\n\nKorraldaja - Valimise "
  },
  {
    "path": "Documentation/et/kasutusmall/sissejuhatus.rst",
    "chars": 3044,
    "preview": "..  IVXV kasutusmallid\n\nSissejuhatus\n============\n\nDokument kirjeldab elektroonilise hääletamise süsteemi kasutusmallimu"
  },
  {
    "path": "Documentation/et/kasutusmall/tegijad.rst",
    "chars": 7317,
    "preview": "..  IVXV kasutusmallid\n\nTegijad\n=======\n\nKorraldaja\n----------\n\n*Korraldaja* on isik, kes korraldab valimisi mille raami"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/Makefile",
    "chars": 24,
    "preview": "include ../../common.mk\n"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/algseadistamine.rst",
    "chars": 23774,
    "preview": "..  IVXV kogumisteenuse haldusjuhend\n\nSüsteemi algseadistamine\n========================\n\nSüsteemi algseadistamine tähend"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/annotatsioon.rst",
    "chars": 334,
    "preview": "..  IVXV kogumisteenuse haldusjuhend\n\nAnnotatsioon\n------------\n\nKäesolev juhend käsitleb tööd elektroonilise hääletamis"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/genereeritud-failid/e-valimiskasti_koostamine.inc",
    "chars": 1452,
    "preview": ".. Elektroonilise hääletamise infosüsteem IVXV\n\n.. SEE FAIL ON GENEREERITUD AUTOMAATTESTI POOLT:\n.. * steps/test_util/re"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/genereeritud-failid/haldusteenus-laadi_kogumisteenuse_tehnilised_seadistused.inc",
    "chars": 1622,
    "preview": ".. Elektroonilise hääletamise infosüsteem IVXV\n\n.. SEE FAIL ON GENEREERITUD AUTOMAATTESTI POOLT:\n.. * steps/test_util/re"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/genereeritud-failid/haldusteenus-laadi_ringkondade_nimekiri.inc",
    "chars": 2159,
    "preview": ".. Elektroonilise hääletamise infosüsteem IVXV\n\n.. SEE FAIL ON GENEREERITUD AUTOMAATTESTI POOLT:\n.. * steps/test_util/re"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/genereeritud-failid/haldusteenus-laadi_usaldusjuure_seadistused.inc",
    "chars": 1985,
    "preview": ".. Elektroonilise hääletamise infosüsteem IVXV\n\n.. SEE FAIL ON GENEREERITUD AUTOMAATTESTI POOLT:\n.. * steps/test_util/re"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/genereeritud-failid/haldusteenus-laadi_valijate_nimekiri.inc",
    "chars": 2140,
    "preview": ".. Elektroonilise hääletamise infosüsteem IVXV\n\n.. SEE FAIL ON GENEREERITUD AUTOMAATTESTI POOLT:\n.. * steps/test_util/re"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/genereeritud-failid/haldusteenus-laadi_valikute_nimekiri.inc",
    "chars": 1419,
    "preview": ".. Elektroonilise hääletamise infosüsteem IVXV\n\n.. SEE FAIL ON GENEREERITUD AUTOMAATTESTI POOLT:\n.. * steps/test_util/re"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/genereeritud-failid/haldusteenus-laadi_valimiste_seadistused.inc",
    "chars": 1635,
    "preview": ".. Elektroonilise hääletamise infosüsteem IVXV\n\n.. SEE FAIL ON GENEREERITUD AUTOMAATTESTI POOLT:\n.. * steps/test_util/re"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/genereeritud-failid/haldusteenuse_paigaldamine.inc",
    "chars": 1806,
    "preview": ".. Elektroonilise hääletamise infosüsteem IVXV\n\n.. SEE FAIL ON GENEREERITUD AUTOMAATTESTI POOLT:\n.. * steps/test_util/re"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/genereeritud-failid/haldusteenuse_soltuvuste_paigaldamine.inc",
    "chars": 2186,
    "preview": ".. Elektroonilise hääletamise infosüsteem IVXV\n\n.. SEE FAIL ON GENEREERITUD AUTOMAATTESTI POOLT:\n.. * steps/test_util/re"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/genereeritud-failid/kasutaja_lisamine.inc",
    "chars": 1659,
    "preview": ".. Elektroonilise hääletamise infosüsteem IVXV\n\n.. SEE FAIL ON GENEREERITUD AUTOMAATTESTI POOLT:\n.. * steps/test_util/re"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/genereeritud-failid/mikroteenuse_kaivitamine.inc",
    "chars": 949,
    "preview": ".. Elektroonilise hääletamise infosüsteem IVXV\n\n.. SEE FAIL ON GENEREERITUD AUTOMAATTESTI POOLT:\n.. * steps/test_util/re"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/genereeritud-failid/mikroteenuse_seiskamine.inc",
    "chars": 813,
    "preview": ".. Elektroonilise hääletamise infosüsteem IVXV\n\n.. SEE FAIL ON GENEREERITUD AUTOMAATTESTI POOLT:\n.. * steps/test_util/re"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/genereeritud-failid/mikroteenuse_seisundi_tuvastamine.inc",
    "chars": 930,
    "preview": ".. Elektroonilise hääletamise infosüsteem IVXV\n\n.. SEE FAIL ON GENEREERITUD AUTOMAATTESTI POOLT:\n.. * steps/test_util/re"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/genereeritud-failid/töötlemisrakenduse_sisendi_koostamine.inc",
    "chars": 1834,
    "preview": ".. Elektroonilise hääletamise infosüsteem IVXV\n\n.. SEE FAIL ON GENEREERITUD AUTOMAATTESTI POOLT:\n.. * steps/test_util/re"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/haldusteenus.rst",
    "chars": 2000,
    "preview": "..  IVXV kogumisteenuse haldusjuhend\n\n.. _haldusteenus:\n\nHaldusteenus\n============\n\nHaldusteenus on kogumisteenuse halda"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/haldustoimingud.rst",
    "chars": 16912,
    "preview": "..  IVXV kogumisteenuse haldusjuhend\n\nSüsteemi haldustoimingud\n========================\n\n.. _kogumisteenuse-oleku-jälgim"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/index.rst",
    "chars": 497,
    "preview": "..  IVXV kogumisteenuse haldusjuhend\n\nIVXV kogumisteenuse haldusjuhend\n================================================="
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/krahhitaaste.rst",
    "chars": 7758,
    "preview": "..  IVXV kogumisteenuse haldusjuhend\n\nKrahhitaaste\n============\n\nKogumisteenus on projekteeritud nii, et teenuse või sel"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/lisad.rst",
    "chars": 16327,
    "preview": "..  IVXV kogumisteenuse haldusjuhend\n\nLisad\n=====\n\n.. _utiliidid:\n\nUtiliidid\n---------\n\nKogumisteenuse haldamise käsurea"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/protseduurid.rst",
    "chars": 1001,
    "preview": "..  IVXV kogumisteenuse haldusjuhend\n\nProtseduurid\n============\n\n\n.. _recovery-stateless:\n\nJuhend: olekuvaba mikroteenus"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/recovery/recovery_backupservice.inc",
    "chars": 1736,
    "preview": "\nKrahhi toimumise indikaatorid\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nHaldusveebiliides.\nVali **Teenused** vasakult menüüst. Kui"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/recovery/recovery_fullstorage.inc",
    "chars": 2722,
    "preview": "Krahhi toimumise indikaatorid\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nHaldusveebiliides.\nVali **Teenused** vasakult menüüst. Kui "
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/recovery/recovery_logcollection.inc",
    "chars": 1592,
    "preview": "Krahhi toimumise indikaatorid\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nHaldusveebiliides.\nVali **Teenused** vasakult menüüst. Kui "
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/recovery/recovery_stateless.inc",
    "chars": 14523,
    "preview": "Krahhi toimumise indikaatorid\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nHaldusveebiliides.\nVali **Teenused** vasakult menüüst. Kui "
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/recovery/recovery_storageservice.inc",
    "chars": 3679,
    "preview": "Krahhi toimumise indikaatorid\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nHaldusveebiliides.\nVali **Teenused** vasakult menüüst. Kui "
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/seadistused.rst",
    "chars": 4845,
    "preview": "..  IVXV kogumisteenuse haldusjuhend\n\nKogumisteenuse seadistused\n==========================\n\nLogimise seadistused\n------"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/spelling_wordlist.txt",
    "chars": 527,
    "preview": "id\nx\n\napache\ncron\netcd\nhaproxy\nrsyslog\nrsyslogi\nsshd\nsystemd\nubuntu\nzabbix\nzabbixiga\n\nivxv\nvoter\nlist\ndownload\ndb\nreset\n"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/utiliitide-abiteave/ivxv-admin-helper.inc",
    "chars": 758,
    "preview": ".. Elektroonilise hääletamise infosüsteem IVXV\n\n.. Käsureautiliidi ivxv-admin-helper kasutusjuhend\n\n.. SEE FAIL ON GENER"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/utiliitide-abiteave/ivxv-admin-sudo.inc",
    "chars": 1443,
    "preview": ".. Elektroonilise hääletamise infosüsteem IVXV\n\n.. Käsureautiliidi ivxv-admin-sudo kasutusjuhend\n\n.. SEE FAIL ON GENEREE"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/utiliitide-abiteave/ivxv-agent-daemon.inc",
    "chars": 672,
    "preview": ".. Elektroonilise hääletamise infosüsteem IVXV\n\n.. Käsureautiliidi ivxv-agent-daemon kasutusjuhend\n\n.. SEE FAIL ON GENER"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/utiliitide-abiteave/ivxv-backup-crontab.inc",
    "chars": 556,
    "preview": ".. Elektroonilise hääletamise infosüsteem IVXV\n\n.. Käsureautiliidi ivxv-backup-crontab kasutusjuhend\n\n.. SEE FAIL ON GEN"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/utiliitide-abiteave/ivxv-backup.inc",
    "chars": 463,
    "preview": ".. Elektroonilise hääletamise infosüsteem IVXV\n\n.. Käsureautiliidi ivxv-backup kasutusjuhend\n\n.. SEE FAIL ON GENEREERITU"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/utiliitide-abiteave/ivxv-cmd-load.inc",
    "chars": 1077,
    "preview": ".. Elektroonilise hääletamise infosüsteem IVXV\n\n.. Käsureautiliidi ivxv-cmd-load kasutusjuhend\n\n.. SEE FAIL ON GENEREERI"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/utiliitide-abiteave/ivxv-collector-init.inc",
    "chars": 483,
    "preview": ".. Elektroonilise hääletamise infosüsteem IVXV\n\n.. Käsureautiliidi ivxv-collector-init kasutusjuhend\n\n.. SEE FAIL ON GEN"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/utiliitide-abiteave/ivxv-config-apply.inc",
    "chars": 804,
    "preview": ".. Elektroonilise hääletamise infosüsteem IVXV\n\n.. Käsureautiliidi ivxv-config-apply kasutusjuhend\n\n.. SEE FAIL ON GENER"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/utiliitide-abiteave/ivxv-config-validate.inc",
    "chars": 843,
    "preview": ".. Elektroonilise hääletamise infosüsteem IVXV\n\n.. Käsureautiliidi ivxv-config-validate kasutusjuhend\n\n.. SEE FAIL ON GE"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/utiliitide-abiteave/ivxv-copy-log-to-logmon.inc",
    "chars": 754,
    "preview": ".. Elektroonilise hääletamise infosüsteem IVXV\n\n.. Käsureautiliidi ivxv-copy-log-to-logmon kasutusjuhend\n\n.. SEE FAIL ON"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/utiliitide-abiteave/ivxv-create-data-dirs.inc",
    "chars": 529,
    "preview": ".. Elektroonilise hääletamise infosüsteem IVXV\n\n.. Käsureautiliidi ivxv-create-data-dirs kasutusjuhend\n\n.. SEE FAIL ON G"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/utiliitide-abiteave/ivxv-db-dump.inc",
    "chars": 405,
    "preview": ".. Elektroonilise hääletamise infosüsteem IVXV\n\n.. Käsureautiliidi ivxv-db-dump kasutusjuhend\n\n.. SEE FAIL ON GENEREERIT"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/utiliitide-abiteave/ivxv-db-reset.inc",
    "chars": 470,
    "preview": ".. Elektroonilise hääletamise infosüsteem IVXV\n\n.. Käsureautiliidi ivxv-db-reset kasutusjuhend\n\n.. SEE FAIL ON GENEREERI"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/utiliitide-abiteave/ivxv-eventlog-dump.inc",
    "chars": 447,
    "preview": ".. Elektroonilise hääletamise infosüsteem IVXV\n\n.. Käsureautiliidi ivxv-eventlog-dump kasutusjuhend\n\n.. SEE FAIL ON GENE"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/utiliitide-abiteave/ivxv-export-votes.inc",
    "chars": 612,
    "preview": ".. Elektroonilise hääletamise infosüsteem IVXV\n\n.. Käsureautiliidi ivxv-export-votes kasutusjuhend\n\n.. SEE FAIL ON GENER"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/utiliitide-abiteave/ivxv-generate-processor-input.inc",
    "chars": 769,
    "preview": ".. Elektroonilise hääletamise infosüsteem IVXV\n\n.. Käsureautiliidi ivxv-generate-processor-input kasutusjuhend\n\n.. SEE F"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/utiliitide-abiteave/ivxv-secret-load.inc",
    "chars": 1190,
    "preview": ".. Elektroonilise hääletamise infosüsteem IVXV\n\n.. Käsureautiliidi ivxv-secret-load kasutusjuhend\n\n.. SEE FAIL ON GENERE"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/utiliitide-abiteave/ivxv-service.inc",
    "chars": 470,
    "preview": ".. Elektroonilise hääletamise infosüsteem IVXV\n\n.. Käsureautiliidi ivxv-service kasutusjuhend\n\n.. SEE FAIL ON GENEREERIT"
  },
  {
    "path": "Documentation/et/kogumisteenuse_haldusjuhend/utiliitide-abiteave/ivxv-status.inc",
    "chars": 1494,
    "preview": ".. Elektroonilise hääletamise infosüsteem IVXV\n\n.. Käsureautiliidi ivxv-status kasutusjuhend\n\n.. SEE FAIL ON GENEREERITU"
  }
]

// ... and 1203 more files (download for full content)

About this extraction

This page contains the full source code of the vvk-ehk/ivxv GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1403 files (5.0 MB), approximately 1.4M tokens, and a symbol index with 6421 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!