class SessionContext: def __init__(self, sessid): if not sessid: raise ValueError("Missing sessid") self.__key = [evcommon.IDSPOOL, sessid] self.__reg = Election().get_root_reg() def store_session(self, cert): self.__reg.ensure_key(self.__key) self.__reg.create_value(self.__key, "cert", cert) self.__reg.create_integer_value(self.__key, "start", int(time.time())) def check_session(self, cert): if not self.__reg.check(self.__key): return evcommon.EVOTE_ERROR, evmessage.EV_ERRORS.SEANSS_PUUDUB start = self.__reg.read_integer_value(self.__key, "start").value length = Election().get_session_length() * 60 if start + length < int(time.time()): return evcommon.EVOTE_ERROR, evmessage.EV_ERRORS.SEANSS_PUUDUB if self.__reg.read_value(self.__key, "cert").value != cert: evlog.log_error('Sertifikaat muutus') return evcommon.EVOTE_CERT_ERROR, evmessage.EV_ERRORS.TEHNILINE_VIGA return evcommon.EVOTE_OK, None def kill(self): self.__reg.ensure_no_key(self.__key)
class MobileIDContext: phoneno = None lang = None challenge = None midsess = None origvote = None votefiles = {} __sessid = None __reg = None def __init__(self, sessid): if sessid is None: raise Exception('Puuduv sessiooniidentifikaator') self.__sessid = sessid self.__reg = Election().get_root_reg() self.lang = 'EST' def sessid(self): return self.__sessid def kill(self): self.__reg.ensure_no_key([evcommon.MIDSPOOL, self.__sessid]) def set_phone(self, phone): self.phoneno = phone def set_origvote(self, hv): self.origvote = hv def get_origvote(self): self.origvote = self.__reg.read_value( [evcommon.MIDSPOOL, self.__sessid], 'origvote').value return self.origvote def add_votefile(self, filename, data): self.votefiles[filename] = data def get_votefiles(self): for key in self.__reg.list_keys( [evcommon.MIDSPOOL, self.__sessid, 'votefiles']): self.votefiles[key] = self.__reg.read_value( [evcommon.MIDSPOOL, self.__sessid, 'votefiles'], key).value return self.votefiles def generate_challenge(self): self.challenge = binascii.b2a_hex(os.urandom(10)) def verify_challenge(self, signature): return challenge_ok(self.certificate(), self.mychallenge(), self.ourchallenge(), signature) def mychallenge(self): return self.__reg.read_value([evcommon.MIDSPOOL, self.__sessid], 'mychallenge').value def ourchallenge(self): return self.__reg.read_value([evcommon.MIDSPOOL, self.__sessid], 'ourchallenge').value def certificate(self): return self.__reg.read_value([evcommon.MIDSPOOL, self.__sessid], 'cert').value def set_auth_succ(self): self.__reg.ensure_key([evcommon.MIDSPOOL, self.__sessid, 'authsucc']) def auth_succ(self): return self.__reg.check([evcommon.MIDSPOOL, self.__sessid, 'authsucc']) def check_session(self): if not self.__reg.check([evcommon.MIDSPOOL, self.__sessid]): return False start = self.__reg.read_integer_value( [evcommon.MIDSPOOL, self.__sessid], 'start').value length = Election().get_session_length() * 60 return start + length >= int(time.time()) and self.auth_succ() def save_post_auth(self, rsp): self.__reg.reset_key([evcommon.MIDSPOOL, self.__sessid]) self.__reg.create_value([evcommon.MIDSPOOL, self.__sessid], 'cert', rsp._CertificateData) self.__reg.create_value([evcommon.MIDSPOOL, self.__sessid], 'phone', self.phoneno) self.__reg.create_value([evcommon.MIDSPOOL, self.__sessid], 'midsess', rsp._Sesscode) self.__reg.create_value([evcommon.MIDSPOOL, self.__sessid], 'mychallenge', self.challenge) self.__reg.create_value([evcommon.MIDSPOOL, self.__sessid], 'ourchallenge', rsp._Challenge) self.__reg.create_integer_value([evcommon.MIDSPOOL, self.__sessid], 'start', int(time.time())) def load_pre_sign(self): self.phoneno = self.__reg.read_value( [evcommon.MIDSPOOL, self.__sessid], 'phone').value def save_post_sign(self, midsess): self.__reg.create_value([evcommon.MIDSPOOL, self.__sessid], 'midsess', midsess) self.__reg.create_value([evcommon.MIDSPOOL, self.__sessid], 'origvote', self.origvote) self.__reg.ensure_key([evcommon.MIDSPOOL, self.__sessid, 'votefiles']) for el in self.votefiles: self.__reg.create_value( [evcommon.MIDSPOOL, self.__sessid, 'votefiles'], el, self.votefiles[el]) def load_pre_poll(self): self.midsess = int( self.__reg.read_value([evcommon.MIDSPOOL, self.__sessid], 'midsess').value)
class MobileIDContext: phoneno = None lang = None challenge = None midsess = None origvote = None votefiles = {} __sessid = None __reg = None def __init__(self, sessid): if sessid == None: raise Exception('Puuduv sessiooniidentifikaator') self.__sessid = sessid self.__reg = Election().get_root_reg() self.lang = 'EST' def sessid(self): return self.__sessid def kill(self): self.__reg.ensure_no_key([evcommon.MIDSPOOL, self.__sessid]) def set_phone(self, phone): self.phoneno = phone def set_origvote(self, hv): self.origvote = hv def get_origvote(self): self.origvote = self.__reg.read_value(\ [evcommon.MIDSPOOL, self.__sessid], \ 'origvote').value return self.origvote def add_votefile(self, filename, data): self.votefiles[filename] = data def get_votefiles(self): for key in self.__reg.list_keys([evcommon.MIDSPOOL, self.__sessid, \ 'votefiles']): self.votefiles[key] = self.__reg.read_value(\ [evcommon.MIDSPOOL, self.__sessid, 'votefiles'], key).value return self.votefiles def generate_challenge(self): self.challenge = binascii.b2a_hex(os.urandom(10)) def verify_challenge(self, signature): return challenge_ok(self.certificate(), self.mychallenge(), \ self.ourchallenge(), signature) def mychallenge(self): return self.__reg.read_value(\ [evcommon.MIDSPOOL, self.__sessid], \ 'mychallenge').value def ourchallenge(self): return self.__reg.read_value(\ [evcommon.MIDSPOOL, self.__sessid], \ 'ourchallenge').value def certificate(self): return self.__reg.read_value(\ [evcommon.MIDSPOOL, self.__sessid], \ 'cert').value def set_auth_succ(self): self.__reg.ensure_key([evcommon.MIDSPOOL, self.__sessid, 'authsucc']) def auth_succ(self): return self.__reg.check(\ [evcommon.MIDSPOOL, self.__sessid, 'authsucc']) def save_post_auth(self, rsp): self.__reg.reset_key([evcommon.MIDSPOOL, self.__sessid]) self.__reg.create_value([evcommon.MIDSPOOL, self.__sessid], \ 'cert', rsp._CertificateData) self.__reg.create_value([evcommon.MIDSPOOL, self.__sessid], \ 'phone', self.phoneno) self.__reg.create_value([evcommon.MIDSPOOL, self.__sessid], \ 'midsess', rsp._Sesscode) self.__reg.create_value([evcommon.MIDSPOOL, self.__sessid], \ 'mychallenge', self.challenge) self.__reg.create_value([evcommon.MIDSPOOL, self.__sessid], \ 'ourchallenge', rsp._Challenge) def load_pre_sign(self): self.phoneno = self.__reg.read_value(\ [evcommon.MIDSPOOL, self.__sessid], 'phone').value def save_post_sign(self, midsess): self.__reg.create_value([evcommon.MIDSPOOL, self.__sessid], \ 'midsess', midsess) self.__reg.create_value([evcommon.MIDSPOOL, self.__sessid], \ 'origvote', self.origvote) self.__reg.ensure_key([evcommon.MIDSPOOL, self.__sessid, 'votefiles']) for el in self.votefiles: self.__reg.create_value(\ [evcommon.MIDSPOOL, self.__sessid, 'votefiles'],\ el, self.votefiles[el]) def load_pre_poll(self): self.midsess = int(self.__reg.read_value(\ [evcommon.MIDSPOOL, self.__sessid], 'midsess').value)
class MobileIDContext: phoneno = None lang = None challenge = None midsess = None origvote = None votefiles = {} __sessid = None __reg = None def __init__(self, sessid): if sessid is None: raise Exception("Puuduv sessiooniidentifikaator") self.__sessid = sessid self.__reg = Election().get_root_reg() self.lang = "EST" def sessid(self): return self.__sessid def kill(self): self.__reg.ensure_no_key([evcommon.MIDSPOOL, self.__sessid]) def set_phone(self, phone): self.phoneno = phone def set_origvote(self, hv): self.origvote = hv def get_origvote(self): self.origvote = self.__reg.read_value([evcommon.MIDSPOOL, self.__sessid], "origvote").value return self.origvote def add_votefile(self, filename, data): self.votefiles[filename] = data def get_votefiles(self): for key in self.__reg.list_keys([evcommon.MIDSPOOL, self.__sessid, "votefiles"]): self.votefiles[key] = self.__reg.read_value([evcommon.MIDSPOOL, self.__sessid, "votefiles"], key).value return self.votefiles def generate_challenge(self): self.challenge = binascii.b2a_hex(os.urandom(10)) def verify_challenge(self, signature): return challenge_ok(self.certificate(), self.mychallenge(), self.ourchallenge(), signature) def mychallenge(self): return self.__reg.read_value([evcommon.MIDSPOOL, self.__sessid], "mychallenge").value def ourchallenge(self): return self.__reg.read_value([evcommon.MIDSPOOL, self.__sessid], "ourchallenge").value def certificate(self): return self.__reg.read_value([evcommon.MIDSPOOL, self.__sessid], "cert").value def set_auth_succ(self): self.__reg.ensure_key([evcommon.MIDSPOOL, self.__sessid, "authsucc"]) def auth_succ(self): return self.__reg.check([evcommon.MIDSPOOL, self.__sessid, "authsucc"]) def check_session(self): if not self.__reg.check([evcommon.MIDSPOOL, self.__sessid]): return False start = self.__reg.read_integer_value([evcommon.MIDSPOOL, self.__sessid], "start").value length = Election().get_session_length() * 60 return start + length >= int(time.time()) and self.auth_succ() def save_post_auth(self, rsp): self.__reg.reset_key([evcommon.MIDSPOOL, self.__sessid]) self.__reg.create_value([evcommon.MIDSPOOL, self.__sessid], "cert", rsp._CertificateData) self.__reg.create_value([evcommon.MIDSPOOL, self.__sessid], "phone", self.phoneno) self.__reg.create_value([evcommon.MIDSPOOL, self.__sessid], "midsess", rsp._Sesscode) self.__reg.create_value([evcommon.MIDSPOOL, self.__sessid], "mychallenge", self.challenge) self.__reg.create_value([evcommon.MIDSPOOL, self.__sessid], "ourchallenge", rsp._Challenge) self.__reg.create_integer_value([evcommon.MIDSPOOL, self.__sessid], "start", int(time.time())) def load_pre_sign(self): self.phoneno = self.__reg.read_value([evcommon.MIDSPOOL, self.__sessid], "phone").value def save_post_sign(self, midsess): self.__reg.create_value([evcommon.MIDSPOOL, self.__sessid], "midsess", midsess) self.__reg.create_value([evcommon.MIDSPOOL, self.__sessid], "origvote", self.origvote) self.__reg.ensure_key([evcommon.MIDSPOOL, self.__sessid, "votefiles"]) for el in self.votefiles: self.__reg.create_value([evcommon.MIDSPOOL, self.__sessid, "votefiles"], el, self.votefiles[el]) def load_pre_poll(self): self.midsess = int(self.__reg.read_value([evcommon.MIDSPOOL, self.__sessid], "midsess").value)