def message(self, args): line = [] # Üldvorming # aeg 14*14DIGIT if contains(args, 'timestamp'): line = [args['timestamp']] else: line = [time.strftime("%Y%m%d%H%M%S")] # Hääle räsi 28*28BASE64-CHAR if not contains(args, 'haal_rasi'): if contains(args, 'haal'): args['haal_rasi'] = ksum.votehash(args['haal']) line.append(args['haal_rasi']) # omavalitsuse-number 1*10DIGIT line.append(str(args['ringkond_omavalitsus'])) # suhteline-ringkonna-number 1*10DIGIT line.append(str(args['ringkond'])) # omavalitsuse-number 1*10DIGIT line.append(str(args['jaoskond_omavalitsus'])) # suhteline-valimisjaoskonna-number 1*10DIGIT line.append(str(args['jaoskond'])) if args['tyyp'] in [1, 2, 3]: #*1valija-andmed = #isikukood 11*11DIGIT line.append(str(args['isikukood'])) if args['tyyp'] == 2: # pohjus 1*100UTF-8-CHAR line.append(args['pohjus']) logstring = "\t".join(line) + "\n" return logstring
def __handle_valid(self, root, vote_file): code = root.split('/').pop() user_key = htscommon.get_user_key(code) fn = self._reg.path(user_key + [vote_file]) bdoc = bdocpythonutils.BDocContainer() bdoc.load(fn) profile = bdocpythonutils.ManifestProfile('TM') bdoc.validate(profile) haal = bdoc.documents["%s.evote" % self._elid] voter = htscommon.get_votefile_voter(vote_file) b64haal = base64.b64encode(haal).strip() self._log3.log_info(tyyp=3, haal_rasi=ksum.votehash(haal), jaoskond=voter['jaoskond'], jaoskond_omavalitsus=voter['jaoskond_omavalitsus'], ringkond=voter['ringkond'], ringkond_omavalitsus=voter['ringkond_omavalitsus'], isikukood=code) return [ voter['jaoskond_omavalitsus'], voter['jaoskond'], voter['ringkond_omavalitsus'], voter['ringkond'], b64haal ]
def __handle_valid(self, root, vote_file): code = root.split('/').pop() user_key = htscommon.get_user_key(code) fn = self._reg.path(user_key + [vote_file]) bdoc = bdocpythonutils.BDocContainer() bdoc.load(fn) profile = bdocpythonutils.ManifestProfile('TM') bdoc.validate(profile) haal = bdoc.documents["%s.evote" % self._elid] voter = htscommon.get_votefile_voter(vote_file) b64haal = base64.b64encode(haal).strip() self._log3.log_info( tyyp=3, haal_rasi=ksum.votehash(haal), jaoskond=voter['jaoskond'], jaoskond_omavalitsus=voter['jaoskond_omavalitsus'], ringkond=voter['ringkond'], ringkond_omavalitsus=voter['ringkond_omavalitsus'], isikukood=code) return [voter['jaoskond_omavalitsus'], voter['jaoskond'], voter['ringkond_omavalitsus'], voter['ringkond'], b64haal]
def talleta_haal(self, **args): haale_rasi = ksum.votehash(args['vote']) user_key = htscommon.get_user_key(args['signercode']) self._reg.ensure_key(user_key) voter = args['valija'] vote_file = htscommon.valid_votefile_name(args['timestamp']) user_key.append(vote_file) filename = self._reg.path(user_key) frm = evlog.EvLogFormat() logline = frm.logstring( tyyp=0, haal_rasi=haale_rasi, timestamp=args['timestamp'], jaoskond=voter['jaoskond'], jaoskond_omavalitsus=voter['jaoskond_omavalitsus'], ringkond=voter['ringkond'], ringkond_omavalitsus=voter['ringkond_omavalitsus'], isikukood=args['signercode'], nimi=voter['nimi'], reanumber=voter['reanumber']) outdata = StringIO.StringIO() outzip = zipfile.ZipFile(outdata, 'w') outzip.writestr(htscommon.ZIP_BDOCFILE, args['signedvote']) outzip.writestr(htscommon.ZIP_LOGFILE, logline) outzip.close() self._write_atomic(filename, outdata.getvalue())
def get_response(self): import binascii # load a random BDOC from the ones available otp_key = htscommon.get_verification_key(self._vote_id) elids = self._rreg.read_string_value(otp_key, "elids")\ .value.rstrip().split("\t") bdoc = self.__load_bdoc(random.choice(elids)) evlog.log("Sending BDOC %s with vote ID %s for verification" %\ (ksum.votehash(bdoc.get_bytes()), self._vote_id)) # check consistency bdoc_set = set([doc.split(".")[0] for doc in bdoc.documents]) elids_set = set(elids) if bdoc_set != elids_set: evlog.log_error("Votes in BDOC for vote ID %s are inconsistent " \ "with registry: %s, %s" % (self._vote_id, bdoc_set, elids_set)) raise HTSVerifyException, evcommon.VERIFY_ERROR # create question objects questions = [] for elid in elids: questions.append(question.Question(\ elid, "hts", Election().get_sub_reg(elid))) # start assembling the response ret = "" # append questions for quest in questions: ret += quest.qname() + ":" + str(quest.get_type()) + "\t" ret += "\n" # append election IDs and votes for votefile in bdoc.documents: elid = votefile.split(".")[0] ret += elid + "\t" + binascii.b2a_hex( bdoc.documents[votefile]) + "\n" ret += "\n" # append choices list for quest in questions: tv = quest.get_voter(self._voter_code) if tv: ret += quest.choices_to_voter(tv) else: evlog.log_error("Voter not found") self.__decrease_count() return ret
def get_response(self): import binascii # load a random BDOC from the ones available otp_key = htscommon.get_verification_key(self._vote_id) elids = self._rreg.read_string_value(otp_key, "elids")\ .value.rstrip().split("\t") bdoc = self.__load_bdoc(random.choice(elids)) evlog.log("Sending BDOC %s with vote ID %s for verification" %\ (ksum.votehash(bdoc.get_bytes()), self._vote_id)) # check consistency bdoc_set = set([doc.split(".")[0] for doc in bdoc.documents]) elids_set = set(elids) if bdoc_set != elids_set: evlog.log_error("Votes in BDOC for vote ID %s are inconsistent " \ "with registry: %s, %s" % (self._vote_id, bdoc_set, elids_set)) raise HTSVerifyException, evcommon.VERIFY_ERROR # create question objects questions = [] for elid in elids: questions.append(question.Question(\ elid, "hts", Election().get_sub_reg(elid))) # start assembling the response ret = "" # append questions for quest in questions: ret += quest.qname() + ":" + str(quest.get_type()) + "\t" ret += "\n" # append election IDs and votes for votefile in bdoc.documents: elid = votefile.split(".")[0] ret += elid + "\t" + binascii.b2a_hex(bdoc.documents[votefile]) + "\n" ret += "\n" # append choices list for quest in questions: tv = quest.get_voter(self._voter_code) if tv: ret += quest.choices_to_voter(tv) else: evlog.log_error("Voter not found") self.__decrease_count() return ret
def __tyhista_korduv_haal(self, code, haale_rasi): user_key = htscommon.get_user_key(code) if not self._reg.check(user_key): return flist = self._reg.list_keys(user_key) for elem in flist: if htscommon.VALID_VOTE_PATTERN.match(elem): rev_name = htscommon.change_votefile_name(\ elem, htscommon.BAUTOREVOKED) old_name = self._reg.path(user_key + [elem]) new_name = self._reg.path(user_key + [rev_name]) bdoc = bdocpythonutils.BDocContainer() bdoc.load(old_name) profile = bdocpythonutils.ManifestProfile('TM') bdoc.validate(profile) vote = bdoc.documents["%s.evote" % self._elid] voter = htscommon.get_votefile_voter(elem) vote_time = htscommon.get_votefile_time(elem) # logimine self._log2.log_info( tyyp=2, haal_rasi=ksum.votehash(vote), jaoskond=voter['jaoskond'], jaoskond_omavalitsus=voter['jaoskond_omavalitsus'], ringkond=voter['ringkond'], ringkond_omavalitsus=voter['ringkond_omavalitsus'], isikukood=code, pohjus='korduv e-hääl: ' + haale_rasi) self._revlog.log_info( tegevus='korduv e-hääl', isikukood=code, nimi=voter['nimi'], timestamp=vote_time, operaator='', pohjus=haale_rasi) os.rename(old_name, new_name)
def __tyhista_korduv_haal(self, code, haale_rasi): user_key = htscommon.get_user_key(code) if not self._reg.check(user_key): return flist = self._reg.list_keys(user_key) for elem in flist: if htscommon.VALID_VOTE_PATTERN.match(elem): rev_name = htscommon.change_votefile_name(\ elem, htscommon.BAUTOREVOKED) old_name = self._reg.path(user_key + [elem]) new_name = self._reg.path(user_key + [rev_name]) bdoc = bdocpythonutils.BDocContainer() bdoc.load(old_name) profile = bdocpythonutils.ManifestProfile('TM') bdoc.validate(profile) vote = bdoc.documents["%s.evote" % self._elid] voter = htscommon.get_votefile_voter(elem) vote_time = htscommon.get_votefile_time(elem) # logimine self._log2.log_info( tyyp=2, haal_rasi=ksum.votehash(vote), jaoskond=voter['jaoskond'], jaoskond_omavalitsus=voter['jaoskond_omavalitsus'], ringkond=voter['ringkond'], ringkond_omavalitsus=voter['ringkond_omavalitsus'], isikukood=code, pohjus='korduv e-hääl: ' + haale_rasi) self._revlog.log_info(tegevus='korduv e-hääl', isikukood=code, nimi=voter['nimi'], timestamp=vote_time, operaator='', pohjus=haale_rasi) os.rename(old_name, new_name)
def __talleta(self, binvote): store = HTSStore() new_otp = False try: store.verify_vote(binvote) evlog.log('Hääle allkirjastaja: %s' % store.signercode) store.extract_questions() store.create_actions() store.revoke_vote_id() vote_id = store.issue_vote_id() evlog.log("Issued vote ID %s to %s for BDOC %s" % \ (vote_id, store.signercode, ksum.votehash(store.signed_vote))) new_otp = True store.store_votes() except HTSStoreException as e: evlog.log_error(store.log_msg) if new_otp: store.revoke_vote_id() return e.ret, store.user_msg return evcommon.EVOTE_OK, vote_id
def talleta_haal(self, **args): # Hääle tühistamisel on põhjuseks # tühistamise põhjustanud hääle räsi haale_rasi = ksum.votehash(args['vote']) self.__tyhista_korduv_haal(args['signercode'], haale_rasi) user_key = htscommon.get_user_key(args['signercode']) self._reg.ensure_key(user_key) voter = args['valija'] vote_file = htscommon.valid_votefile_name(args['timestamp'], voter) user_key.append(vote_file) filename = self._reg.path(user_key) try: _f = file(filename, 'w') fcntl.lockf(_f, fcntl.LOCK_EX) _f.write(args['signedvote']) _f.flush() _f.close() except Exception, (errno, errstr): evlog.log_error("Faili '%s' kirjutamine nurjus" % filename) raise Exception(errno, errstr)
def message(self, args): line = [] # Üldvorming # aeg 14*14DIGIT if contains(args, "timestamp"): line = [args["timestamp"]] else: line = [time.strftime("%Y%m%d%H%M%S")] # Hääle räsi 28*28BASE64-CHAR if not contains(args, "haal_rasi"): if contains(args, "haal"): args["haal_rasi"] = ksum.votehash(args["haal"]) line.append(args["haal_rasi"]) # omavalitsuse-number 1*10DIGIT line.append(str(args["ringkond_omavalitsus"])) # suhteline-ringkonna-number 1*10DIGIT line.append(str(args["ringkond"])) if contains(args, "jaoskond_omavalitsus"): # omavalitsuse-number 1*10DIGIT line.append(str(args["jaoskond_omavalitsus"])) if contains(args, "jaoskond"): # suhteline-valimisjaoskonna-number 1*10DIGIT line.append(str(args["jaoskond"])) if args["tyyp"] in [0, 1, 2, 3]: # *1valija-andmed = # isikukood 11*11DIGIT line.append(str(args["isikukood"])) if args["tyyp"] == 2: # pohjus 1*100UTF-8-CHAR line.append(args["pohjus"]) if args["tyyp"] == 0: line.append(args["nimi"]) line.append(args["reanumber"]) logstring = "\t".join(line) return logstring
def __handle_userrevoked(self, root, vote_file): code = root.split('/').pop() user_key = htscommon.get_user_key(code) fn = self._reg.path(user_key + [vote_file]) bdoc = bdocpythonutils.BDocContainer() bdoc.load(fn) profile = bdocpythonutils.ManifestProfile('TM') bdoc.validate(profile) haal = bdoc.documents["%s.evote" % self._elid] voter = htscommon.get_votefile_voter(vote_file) pohjus = self._reg.read_string_value(user_key, 'reason').value self._log2.log_info(tyyp=2, haal_rasi=ksum.votehash(haal), jaoskond=voter['jaoskond'], jaoskond_omavalitsus=voter['jaoskond_omavalitsus'], ringkond=voter['ringkond'], ringkond_omavalitsus=voter['ringkond_omavalitsus'], isikukood=code, pohjus=pohjus)
def __handle_userrevoked(self, root, vote_file): code = root.split('/').pop() user_key = htscommon.get_user_key(code) fn = self._reg.path(user_key + [vote_file]) bdoc = bdocpythonutils.BDocContainer() bdoc.load(fn) profile = bdocpythonutils.ManifestProfile('TM') bdoc.validate(profile) haal = bdoc.documents["%s.evote" % self._elid] voter = htscommon.get_votefile_voter(vote_file) pohjus = self._reg.read_string_value(user_key, 'reason').value self._log2.log_info( tyyp=2, haal_rasi=ksum.votehash(haal), jaoskond=voter['jaoskond'], jaoskond_omavalitsus=voter['jaoskond_omavalitsus'], ringkond=voter['ringkond'], ringkond_omavalitsus=voter['ringkond_omavalitsus'], isikukood=code, pohjus=pohjus)