def set_password(self, new_password, password_key): dev = self._descriptor.open_device(TRANSPORT.CCID) controller = OathController(dev.driver) if controller.locked and password_key is not None: controller.validate(a2b_hex(password_key)) if new_password is not None: key = derive_key(controller.id, new_password) controller.set_password(key) else: controller.clear_password()
def set_password(self, new_password, remember=False): dev = self._descriptor.open_device(TRANSPORT.CCID) controller = OathController(dev.driver) self._unlock(controller) keys = self.settings.setdefault('keys', {}) if new_password is not None: self._key = controller.set_password(new_password) if remember: keys[controller.id] = b2a_hex(self._key).decode() elif controller.id in keys: del keys[controller.id] else: controller.clear_password() del keys[controller.id] self._key = None self.settings.write()