def send_new_aes_key(self): self.aes_key = qcrypt.create_aes_key() k = qcrypt.pub_encrypt(self.aes_key, self.pub_key) signature = auth.sign_msg(self.partner_secret_hash, k) self.send('set_aes_key', k, signature) self.key_agreement = False print 'sending new aes session key' return self.aes_key
def verify_auth(self, new_auth_msg): vr = auth.verify_auth(self.secret, self.salt, self.auth_msg, new_auth_msg) msg = str(int(vr))+os.urandom(7) sig = auth.sign_msg(self.partner_secret_hash, msg) msg = qcrypt.normalize(msg) self.send('verification_result', msg, sig) self.authenticated = vr return vr
def set_aes_key(self, msg_e, signature): vr = auth.verify_signature(self.secret, self.salt, msg_e, signature) if vr: k = qcrypt.pub_decrypt(msg_e, self.pri_key) self.aes_key = k self.key_agreement = True msg = qcrypt.aes_encrypt(AES_SET_MSG, self.aes_key) signature = auth.sign_msg(self.partner_secret_hash, msg) self.send('confirm_aeskey', msg, signature) print 'set aes key. key agreement reached' else: k = None self.send('bad_aeskey', None) self.key_agreement = False print 'incorrect message signature' self.aes_key = k return k
def request_pub_key(self): k = self.pri_key.publickey().__getstate__() msg = qcrypt.normalize(nDDB.encode(k)) signature = auth.sign_msg(self.partner_secret_hash, msg) self.send('set_pub_key', msg, signature) print 'sent signed public key'