From 51e1b7546089f566768028e7e28e19d0bc9d2394 Mon Sep 17 00:00:00 2001 From: Sergey Kolupaev Date: Sat, 13 Dec 2025 12:30:05 -0800 Subject: [PATCH 01/10] Failed to get enterprise node name --- keepercommander/commands/enterprise_common.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keepercommander/commands/enterprise_common.py b/keepercommander/commands/enterprise_common.py index ef421c234..bab17dc19 100644 --- a/keepercommander/commands/enterprise_common.py +++ b/keepercommander/commands/enterprise_common.py @@ -293,7 +293,7 @@ def get_enterprise_ids(params, num_ids=1): def get_node_path(self, params, node_id, omit_root=False): if self._node_map is None: self._node_map = { - x['node_id']: (x['data'].get('displayname') or x['name'] or str(x['node_id']) if x.get('parent_id', 0) > 0 else params.enterprise['enterprise_name'], x.get('parent_id', 0)) + x['node_id']: (x['data'].get('displayname') or x.get('name') or str(x['node_id']) if x.get('parent_id', 0) > 0 else params.enterprise['enterprise_name'], x.get('parent_id', 0)) for x in params.enterprise['nodes']} path = '' node = self._node_map.get(node_id) From 0fccbbf0a34e12a618d3ce1c80dfc4c6b2c4f48a Mon Sep 17 00:00:00 2001 From: Sergey Kolupaev Date: Mon, 15 Dec 2025 14:48:54 -0800 Subject: [PATCH 02/10] whoami command returns incorrect status for MC Business --- keepercommander/commands/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keepercommander/commands/utils.py b/keepercommander/commands/utils.py index 2a359ae19..4d2feb96a 100644 --- a/keepercommander/commands/utils.py +++ b/keepercommander/commands/utils.py @@ -1308,7 +1308,7 @@ def execute(self, params, **kwargs): elif product_type_id in (11, 12): plan = 'Keeper MSP' elif product_type_id == 8: - plan = 'MC ' + 'Enterprise' if tier == 1 else 'Business' + plan = 'MC ' + ('Enterprise' if tier == 1 else 'Business') else: plan = 'Unknown' if product_type_id in (5, 10, 12): From 8045ffbf53866b81d1c92e2b7f976e5449f7bf9e Mon Sep 17 00:00:00 2001 From: Sergey Kolupaev Date: Tue, 16 Dec 2025 16:45:12 -0800 Subject: [PATCH 03/10] Add KEPM addon definition for MSPs --- keepercommander/constants.py | 1 + 1 file changed, 1 insertion(+) diff --git a/keepercommander/constants.py b/keepercommander/constants.py index 3874ac1e4..6417c3aec 100644 --- a/keepercommander/constants.py +++ b/keepercommander/constants.py @@ -46,6 +46,7 @@ ('password_rotation', 'Password Rotation', False, 'Rotation'), ('remote_browser_isolation', 'Remote Browser Isolation', False, 'Browser Isolation'), ('privileged_access_manager', 'Privileged Access Manager (PAM)', True, 'PAM'), + ('keeper_endpoint_privilege_manager', 'Keeper Endpoint Privilege Manager (KEPM)', True, 'KEPM'), ] From 3ce3ca710de91eb872154d78605d78c21c313e57 Mon Sep 17 00:00:00 2001 From: amangalampalli-ks Date: Wed, 17 Dec 2025 16:16:53 +0530 Subject: [PATCH 04/10] Fix share-record command raising error when email sent --- keepercommander/commands/register.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/keepercommander/commands/register.py b/keepercommander/commands/register.py index 76e4d56e3..538c9eb63 100644 --- a/keepercommander/commands/register.py +++ b/keepercommander/commands/register.py @@ -141,7 +141,7 @@ def register_command_info(aliases, command_info): record_permission_parser = argparse.ArgumentParser(prog='record-permission', description='Modify the permissions of a record') record_permission_parser.add_argument('--dry-run', dest='dry_run', action='store_true', help='Display the permissions changes without committing them') -record_permission_parser.add_argument('--force', dest='force', action='store_true', +record_permission_parser.add_argument('-f', '--force', dest='force', action='store_true', help='Apply permission changes without any confirmation') record_permission_parser.add_argument('-R', '--recursive', dest='recursive', action='store_true', help='Apply permission changes to all sub-folders') @@ -750,9 +750,17 @@ def prep_request(params, kwargs): # type: (KeeperParams, Dict[str, Any]) -> Un raise CommandError('share-record', 'You can transfer ownership to a single account only') all_users = set((x.casefold() for x in emails)) + + # Validate email format before attempting to share or send invitations + invalid_emails = [email for email in all_users if not is_email(email)] + if invalid_emails: + raise CommandError('share-record', f'Invalid email format: {", ".join(invalid_emails)}') + + invitations_sent = False if not dry_run and action in ('grant', 'owner'): invited = api.load_user_public_keys(params, list(all_users), send_invites=True) if invited: + invitations_sent = True for email in invited: logging.warning('Share invitation has been sent to \'%s\'', email) logging.warning('Please repeat this command when invitation is accepted.') @@ -760,6 +768,9 @@ def prep_request(params, kwargs): # type: (KeeperParams, Dict[str, Any]) -> Un all_users.intersection_update(params.key_cache.keys()) if len(all_users) == 0: + if invitations_sent: + # Invitations were sent, this is a success case - return None to indicate no further action needed + return None raise CommandError('share-record', 'Nothing to do.') can_edit = kwargs.get('can_edit') or False From 678c658f43380e34eb4a3257f0c691598ba40c6d Mon Sep 17 00:00:00 2001 From: amangalampalli-ks Date: Thu, 18 Dec 2025 11:10:43 +0530 Subject: [PATCH 05/10] QRC implementation using keeper-mlkem (#1638) * QRC implementation using MLKEM (for dev env) * Fix unit-tests in github * Update requirements.txt and error handling * Remove internal library and fix fallback to EC encryption * Remove local library usage * Add keeper-mlkem external library and update server handling logic * Update README.md for QRC * Update mlkem to 1024 from 768 implementation and add qa, staging and prod keys * Update mlkem keys * Update comments * Update README.md --- keepercommander/crypto.py | 1 - keepercommander/params.py | 71 +- keepercommander/proto/APIRequest_pb2.py | 792 ++++++++++++----------- keepercommander/proto/APIRequest_pb2.pyi | 527 ++++++++------- keepercommander/qrc/README.md | 102 +++ keepercommander/qrc/__init__.py | 0 keepercommander/qrc/qrc_crypto.py | 83 +++ keepercommander/rest_api.py | 75 ++- requirements.txt | 3 +- setup.cfg | 1 + 10 files changed, 1029 insertions(+), 626 deletions(-) create mode 100644 keepercommander/qrc/README.md create mode 100644 keepercommander/qrc/__init__.py create mode 100644 keepercommander/qrc/qrc_crypto.py diff --git a/keepercommander/crypto.py b/keepercommander/crypto.py index c24ee67b4..98f1a7e56 100644 --- a/keepercommander/crypto.py +++ b/keepercommander/crypto.py @@ -91,7 +91,6 @@ def unload_ec_public_key(public_key): return public_key.public_bytes(encoding=serialization.Encoding.X962, format=serialization.PublicFormat.UncompressedPoint) - def encrypt_aes_v1(data, key, iv=None, use_padding=True): iv = iv or get_random_bytes(16) cipher = Cipher(AES(key), CBC(iv), backend=_CRYPTO_BACKEND) diff --git a/keepercommander/params.py b/keepercommander/params.py index 7f6363055..3a988aa64 100644 --- a/keepercommander/params.py +++ b/keepercommander/params.py @@ -40,11 +40,23 @@ def __init__(self, server='https://keepersecurity.com/api/v2/', locale='en_US'): self.server_base = server self.transmission_key = None self.__server_key_id = 7 + self.__qrc_key_id = -1 # -1 = not determined, None = not available self.locale = locale self.__store_server_key = False self.proxies = None self._certificate_check = True self.fail_on_throttle = False + self.client_ec_private_key = None # EC private key for QRC ECDH exchange + + def reset_qrc_key(self): + """Reset QRC key ID to re-determine on next access (called on server change or logout)""" + self.__qrc_key_id = -1 + self.client_ec_private_key = None + + def disable_qrc(self): + """Disable QRC and fall back to EC-only encryption""" + self.__qrc_key_id = None + self.client_ec_private_key = None def __get_server_base(self): return self.__server_base @@ -53,7 +65,13 @@ def __set_server_base(self, value): # type: (str) -> None if not value.startswith('http'): value = 'https://' + value p = urlparse(value) - self.__server_base = urlunparse((p.scheme or 'https', p.netloc, '/api/rest/', None, None, None)) + new_server_base = urlunparse((p.scheme or 'https', p.netloc, '/api/rest/', None, None, None)) + + # Reset QRC key ID if server changed + if hasattr(self, '_RestApiContext__server_base') and self.__server_base != new_server_base: + self.__qrc_key_id = -1 + + self.__server_base = new_server_base def __get_server_key_id(self): return self.__server_key_id @@ -62,8 +80,57 @@ def __set_server_key_id(self, key_id): self.__server_key_id = key_id self.__store_server_key = True + def __get_qrc_key_id(self): + if self.__qrc_key_id == -1: + self._determine_qrc_key() + return self.__qrc_key_id + def __get_store_server_key(self): return self.__store_server_key + + def _determine_qrc_key(self): + import sys + + if sys.version_info < (3, 11) or not self.__server_base: + self.__qrc_key_id = None + return + + try: + hostname = urlparse(self.__server_base).netloc.lower().split(':')[0] + + # Hostname to QRC key ID mapping + qrc_key_map = { + 'qa.keepersecurity.com': 107, + 'staging.keepersecurity.com': 124, + 'keepersecurity.com': 136, + } + + # Check exact match first + qrc_key_id = qrc_key_map.get(hostname) + + # Check govcloud pattern if no exact match + if qrc_key_id is None and 'govcloud.keepersecurity.us' in hostname: + qrc_key_id = 148 if hostname.startswith('dev.') else 160 + + # Check IL5 pattern + if qrc_key_id is None and 'il5.keepersecurity.us' in hostname: + qrc_key_id = 172 if hostname.startswith('dev.') else 186 + + # If still no match, QRC not available + if qrc_key_id is None: + self.__qrc_key_id = None + return + + from .rest_api import SERVER_PUBLIC_KEYS + if qrc_key_id in SERVER_PUBLIC_KEYS: + self.__qrc_key_id = qrc_key_id + else: + import logging + logging.debug(f"QRC key {qrc_key_id} not available, will use EC key 7") + self.__qrc_key_id = None + + except Exception: + self.__qrc_key_id = None def set_proxy(self, proxy_server): if proxy_server: @@ -89,6 +156,7 @@ def certificate_check(self, value): server_base = property(__get_server_base, __set_server_base) server_key_id = property(__get_server_key_id, __set_server_key_id) + qrc_key_id = property(__get_qrc_key_id) store_server_key = property(__get_store_server_key) @@ -183,6 +251,7 @@ def clear_session(self): self.session_token = None self.salt = None self.iterations = 0 + self.__rest_context.reset_qrc_key() self.data_key = None self.client_key = None self.rsa_key = None diff --git a/keepercommander/proto/APIRequest_pb2.py b/keepercommander/proto/APIRequest_pb2.py index 8d306176d..4167880b6 100644 --- a/keepercommander/proto/APIRequest_pb2.py +++ b/keepercommander/proto/APIRequest_pb2.py @@ -14,398 +14,412 @@ from . import enterprise_pb2 as enterprise__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10\x41PIRequest.proto\x12\x0e\x41uthentication\x1a\x10\x65nterprise.proto\"\xb0\x01\n\nApiRequest\x12 \n\x18\x65ncryptedTransmissionKey\x18\x01 \x01(\x0c\x12\x13\n\x0bpublicKeyId\x18\x02 \x01(\x05\x12\x0e\n\x06locale\x18\x03 \x01(\t\x12\x18\n\x10\x65ncryptedPayload\x18\x04 \x01(\x0c\x12\x16\n\x0e\x65ncryptionType\x18\x05 \x01(\x05\x12\x11\n\trecaptcha\x18\x06 \x01(\t\x12\x16\n\x0esubEnvironment\x18\x07 \x01(\t\"j\n\x11\x41piRequestPayload\x12\x0f\n\x07payload\x18\x01 \x01(\x0c\x12\x1d\n\x15\x65ncryptedSessionToken\x18\x02 \x01(\x0c\x12\x11\n\ttimeToken\x18\x03 \x01(\x0c\x12\x12\n\napiVersion\x18\x04 \x01(\x05\"6\n\tTransform\x12\x0b\n\x03key\x18\x01 \x01(\x0c\x12\x1c\n\x14\x65ncryptedDeviceToken\x18\x02 \x01(\x0c\"\x8e\x01\n\rDeviceRequest\x12\x15\n\rclientVersion\x18\x01 \x01(\t\x12\x12\n\ndeviceName\x18\x02 \x01(\t\x12\x16\n\x0e\x64\x65vicePlatform\x18\x03 \x01(\t\x12:\n\x10\x63lientFormFactor\x18\x04 \x01(\x0e\x32 .Authentication.ClientFormFactor\"T\n\x0b\x41uthRequest\x12\x15\n\rclientVersion\x18\x01 \x01(\t\x12\x10\n\x08username\x18\x02 \x01(\t\x12\x1c\n\x14\x65ncryptedDeviceToken\x18\x03 \x01(\x0c\"\xc3\x01\n\x14NewUserMinimumParams\x12\x19\n\x11minimumIterations\x18\x01 \x01(\x05\x12\x1a\n\x12passwordMatchRegex\x18\x02 \x03(\t\x12 \n\x18passwordMatchDescription\x18\x03 \x03(\t\x12\x1a\n\x12isEnterpriseDomain\x18\x04 \x01(\x08\x12\x1e\n\x16\x65nterpriseEccPublicKey\x18\x05 \x01(\x0c\x12\x16\n\x0e\x66orbidKeyType2\x18\x06 \x01(\x08\"\x89\x01\n\x0fPreLoginRequest\x12\x30\n\x0b\x61uthRequest\x18\x01 \x01(\x0b\x32\x1b.Authentication.AuthRequest\x12,\n\tloginType\x18\x02 \x01(\x0e\x32\x19.Authentication.LoginType\x12\x16\n\x0etwoFactorToken\x18\x03 \x01(\x0c\"\x80\x02\n\x0cLoginRequest\x12\x30\n\x0b\x61uthRequest\x18\x01 \x01(\x0b\x32\x1b.Authentication.AuthRequest\x12,\n\tloginType\x18\x02 \x01(\x0e\x32\x19.Authentication.LoginType\x12\x1f\n\x17\x61uthenticationHashPrime\x18\x03 \x01(\x0c\x12\x1b\n\x13\x65ncryptedLoginToken\x18\x04 \x01(\x0c\x12\x14\n\x0c\x61uthResponse\x18\x05 \x01(\x0c\x12\x16\n\x0emcEnterpriseId\x18\x06 \x01(\x05\x12\x12\n\npush_token\x18\x07 \x01(\t\x12\x10\n\x08platform\x18\x08 \x01(\t\"\\\n\x0e\x44\x65viceResponse\x12\x1c\n\x14\x65ncryptedDeviceToken\x18\x01 \x01(\x0c\x12,\n\x06status\x18\x02 \x01(\x0e\x32\x1c.Authentication.DeviceStatus\"V\n\x04Salt\x12\x12\n\niterations\x18\x01 \x01(\x05\x12\x0c\n\x04salt\x18\x02 \x01(\x0c\x12\x11\n\talgorithm\x18\x03 \x01(\x05\x12\x0b\n\x03uid\x18\x04 \x01(\x0c\x12\x0c\n\x04name\x18\x05 \x01(\t\" \n\x10TwoFactorChannel\x12\x0c\n\x04type\x18\x01 \x01(\x05\"\xfc\x02\n\x11StartLoginRequest\x12\x1c\n\x14\x65ncryptedDeviceToken\x18\x01 \x01(\x0c\x12\x10\n\x08username\x18\x02 \x01(\t\x12\x15\n\rclientVersion\x18\x03 \x01(\t\x12\x19\n\x11messageSessionUid\x18\x04 \x01(\x0c\x12\x1b\n\x13\x65ncryptedLoginToken\x18\x05 \x01(\x0c\x12,\n\tloginType\x18\x06 \x01(\x0e\x32\x19.Authentication.LoginType\x12\x16\n\x0emcEnterpriseId\x18\x07 \x01(\x05\x12\x30\n\x0bloginMethod\x18\x08 \x01(\x0e\x32\x1b.Authentication.LoginMethod\x12\x15\n\rforceNewLogin\x18\t \x01(\x08\x12\x11\n\tcloneCode\x18\n \x01(\x0c\x12\x18\n\x10v2TwoFactorToken\x18\x0b \x01(\t\x12\x12\n\naccountUid\x18\x0c \x01(\x0c\x12\x18\n\x10\x66romSessionToken\x18\r \x01(\x0c\"\xa7\x04\n\rLoginResponse\x12.\n\nloginState\x18\x01 \x01(\x0e\x32\x1a.Authentication.LoginState\x12\x12\n\naccountUid\x18\x02 \x01(\x0c\x12\x17\n\x0fprimaryUsername\x18\x03 \x01(\t\x12\x18\n\x10\x65ncryptedDataKey\x18\x04 \x01(\x0c\x12\x42\n\x14\x65ncryptedDataKeyType\x18\x05 \x01(\x0e\x32$.Authentication.EncryptedDataKeyType\x12\x1b\n\x13\x65ncryptedLoginToken\x18\x06 \x01(\x0c\x12\x1d\n\x15\x65ncryptedSessionToken\x18\x07 \x01(\x0c\x12:\n\x10sessionTokenType\x18\x08 \x01(\x0e\x32 .Authentication.SessionTokenType\x12\x0f\n\x07message\x18\t \x01(\t\x12\x0b\n\x03url\x18\n \x01(\t\x12\x36\n\x08\x63hannels\x18\x0b \x03(\x0b\x32$.Authentication.TwoFactorChannelInfo\x12\"\n\x04salt\x18\x0c \x03(\x0b\x32\x14.Authentication.Salt\x12\x11\n\tcloneCode\x18\r \x01(\x0c\x12\x1a\n\x12stateSpecificValue\x18\x0e \x01(\t\x12\x18\n\x10ssoClientVersion\x18\x0f \x01(\t\x12 \n\x18sessionTokenTypeModifier\x18\x10 \x01(\t\"_\n\x11SwitchListElement\x12\x10\n\x08username\x18\x01 \x01(\t\x12\x10\n\x08\x66ullName\x18\x02 \x01(\t\x12\x14\n\x0c\x61uthRequired\x18\x03 \x01(\x08\x12\x10\n\x08isLinked\x18\x04 \x01(\x08\"I\n\x12SwitchListResponse\x12\x33\n\x08\x65lements\x18\x01 \x03(\x0b\x32!.Authentication.SwitchListElement\"\x8c\x01\n\x0bSsoUserInfo\x12\x13\n\x0b\x63ompanyName\x18\x01 \x01(\t\x12\x13\n\x0bsamlRequest\x18\x02 \x01(\t\x12\x17\n\x0fsamlRequestType\x18\x03 \x01(\t\x12\x15\n\rssoDomainName\x18\x04 \x01(\t\x12\x10\n\x08loginUrl\x18\x05 \x01(\t\x12\x11\n\tlogoutUrl\x18\x06 \x01(\t\"\xd6\x01\n\x10PreLoginResponse\x12\x32\n\x0c\x64\x65viceStatus\x18\x01 \x01(\x0e\x32\x1c.Authentication.DeviceStatus\x12\"\n\x04salt\x18\x02 \x03(\x0b\x32\x14.Authentication.Salt\x12\x38\n\x0eOBSOLETE_FIELD\x18\x03 \x03(\x0b\x32 .Authentication.TwoFactorChannel\x12\x30\n\x0bssoUserInfo\x18\x04 \x01(\x0b\x32\x1b.Authentication.SsoUserInfo\"&\n\x12LoginAsUserRequest\x12\x10\n\x08username\x18\x01 \x01(\t\"W\n\x13LoginAsUserResponse\x12\x1d\n\x15\x65ncryptedSessionToken\x18\x01 \x01(\x0c\x12!\n\x19\x65ncryptedSharedAccountKey\x18\x02 \x01(\x0c\"\x84\x01\n\x17ValidateAuthHashRequest\x12\x36\n\x0epasswordMethod\x18\x01 \x01(\x0e\x32\x1e.Authentication.PasswordMethod\x12\x14\n\x0c\x61uthResponse\x18\x02 \x01(\x0c\x12\x1b\n\x13\x65ncryptedLoginToken\x18\x03 \x01(\x0c\"\xc4\x02\n\x14TwoFactorChannelInfo\x12\x39\n\x0b\x63hannelType\x18\x01 \x01(\x0e\x32$.Authentication.TwoFactorChannelType\x12\x13\n\x0b\x63hannel_uid\x18\x02 \x01(\x0c\x12\x13\n\x0b\x63hannelName\x18\x03 \x01(\t\x12\x11\n\tchallenge\x18\x04 \x01(\t\x12\x14\n\x0c\x63\x61pabilities\x18\x05 \x03(\t\x12\x13\n\x0bphoneNumber\x18\x06 \x01(\t\x12:\n\rmaxExpiration\x18\x07 \x01(\x0e\x32#.Authentication.TwoFactorExpiration\x12\x11\n\tcreatedOn\x18\x08 \x01(\x03\x12:\n\rlastFrequency\x18\t \x01(\x0e\x32#.Authentication.TwoFactorExpiration\"d\n\x12TwoFactorDuoStatus\x12\x14\n\x0c\x63\x61pabilities\x18\x01 \x03(\t\x12\x13\n\x0bphoneNumber\x18\x02 \x01(\t\x12\x12\n\nenroll_url\x18\x03 \x01(\t\x12\x0f\n\x07message\x18\x04 \x01(\t\"\xc7\x01\n\x13TwoFactorAddRequest\x12\x39\n\x0b\x63hannelType\x18\x01 \x01(\x0e\x32$.Authentication.TwoFactorChannelType\x12\x13\n\x0b\x63hannel_uid\x18\x02 \x01(\x0c\x12\x13\n\x0b\x63hannelName\x18\x03 \x01(\t\x12\x13\n\x0bphoneNumber\x18\x04 \x01(\t\x12\x36\n\x0b\x64uoPushType\x18\x05 \x01(\x0e\x32!.Authentication.TwoFactorPushType\"B\n\x16TwoFactorRenameRequest\x12\x13\n\x0b\x63hannel_uid\x18\x01 \x01(\x0c\x12\x13\n\x0b\x63hannelName\x18\x02 \x01(\t\"=\n\x14TwoFactorAddResponse\x12\x11\n\tchallenge\x18\x01 \x01(\t\x12\x12\n\nbackupKeys\x18\x02 \x03(\t\"-\n\x16TwoFactorDeleteRequest\x12\x13\n\x0b\x63hannel_uid\x18\x01 \x01(\x0c\"a\n\x15TwoFactorListResponse\x12\x36\n\x08\x63hannels\x18\x01 \x03(\x0b\x32$.Authentication.TwoFactorChannelInfo\x12\x10\n\x08\x65xpireOn\x18\x02 \x01(\x03\"Y\n TwoFactorUpdateExpirationRequest\x12\x35\n\x08\x65xpireIn\x18\x01 \x01(\x0e\x32#.Authentication.TwoFactorExpiration\"\xc9\x01\n\x18TwoFactorValidateRequest\x12\x1b\n\x13\x65ncryptedLoginToken\x18\x01 \x01(\x0c\x12\x35\n\tvalueType\x18\x02 \x01(\x0e\x32\".Authentication.TwoFactorValueType\x12\r\n\x05value\x18\x03 \x01(\t\x12\x13\n\x0b\x63hannel_uid\x18\x04 \x01(\x0c\x12\x35\n\x08\x65xpireIn\x18\x05 \x01(\x0e\x32#.Authentication.TwoFactorExpiration\"8\n\x19TwoFactorValidateResponse\x12\x1b\n\x13\x65ncryptedLoginToken\x18\x01 \x01(\x0c\"\xb8\x01\n\x18TwoFactorSendPushRequest\x12\x1b\n\x13\x65ncryptedLoginToken\x18\x01 \x01(\x0c\x12\x33\n\x08pushType\x18\x02 \x01(\x0e\x32!.Authentication.TwoFactorPushType\x12\x13\n\x0b\x63hannel_uid\x18\x03 \x01(\x0c\x12\x35\n\x08\x65xpireIn\x18\x04 \x01(\x0e\x32#.Authentication.TwoFactorExpiration\"\x83\x01\n\x07License\x12\x0f\n\x07\x63reated\x18\x01 \x01(\x03\x12\x12\n\nexpiration\x18\x02 \x01(\x03\x12\x34\n\rlicenseStatus\x18\x03 \x01(\x0e\x32\x1d.Authentication.LicenseStatus\x12\x0c\n\x04paid\x18\x04 \x01(\x08\x12\x0f\n\x07message\x18\x05 \x01(\t\"G\n\x0fOwnerlessRecord\x12\x11\n\trecordUid\x18\x01 \x01(\x0c\x12\x11\n\trecordKey\x18\x02 \x01(\x0c\x12\x0e\n\x06status\x18\x03 \x01(\x05\"L\n\x10OwnerlessRecords\x12\x38\n\x0fownerlessRecord\x18\x01 \x03(\x0b\x32\x1f.Authentication.OwnerlessRecord\"\xd7\x01\n\x0fUserAuthRequest\x12\x0b\n\x03uid\x18\x01 \x01(\x0c\x12\x0c\n\x04salt\x18\x02 \x01(\x0c\x12\x12\n\niterations\x18\x03 \x01(\x05\x12\x1a\n\x12\x65ncryptedClientKey\x18\x04 \x01(\x0c\x12\x10\n\x08\x61uthHash\x18\x05 \x01(\x0c\x12\x18\n\x10\x65ncryptedDataKey\x18\x06 \x01(\x0c\x12,\n\tloginType\x18\x07 \x01(\x0e\x32\x19.Authentication.LoginType\x12\x0c\n\x04name\x18\x08 \x01(\t\x12\x11\n\talgorithm\x18\t \x01(\x05\"\x19\n\nUidRequest\x12\x0b\n\x03uid\x18\x01 \x03(\x0c\"\xff\x01\n\x13\x44\x65viceUpdateRequest\x12\x1c\n\x14\x65ncryptedDeviceToken\x18\x01 \x01(\x0c\x12\x15\n\rclientVersion\x18\x02 \x01(\t\x12\x12\n\ndeviceName\x18\x03 \x01(\t\x12\x17\n\x0f\x64\x65vicePublicKey\x18\x04 \x01(\x0c\x12\x32\n\x0c\x64\x65viceStatus\x18\x05 \x01(\x0e\x32\x1c.Authentication.DeviceStatus\x12\x16\n\x0e\x64\x65vicePlatform\x18\x06 \x01(\t\x12:\n\x10\x63lientFormFactor\x18\x07 \x01(\x0e\x32 .Authentication.ClientFormFactor\"\xd5\x01\n\x1dRegisterDeviceInRegionRequest\x12\x1c\n\x14\x65ncryptedDeviceToken\x18\x01 \x01(\x0c\x12\x15\n\rclientVersion\x18\x02 \x01(\t\x12\x12\n\ndeviceName\x18\x03 \x01(\t\x12\x17\n\x0f\x64\x65vicePublicKey\x18\x04 \x01(\x0c\x12\x16\n\x0e\x64\x65vicePlatform\x18\x05 \x01(\t\x12:\n\x10\x63lientFormFactor\x18\x06 \x01(\x0e\x32 .Authentication.ClientFormFactor\"\xf8\x02\n\x13RegistrationRequest\x12\x30\n\x0b\x61uthRequest\x18\x01 \x01(\x0b\x32\x1b.Authentication.AuthRequest\x12\x38\n\x0fuserAuthRequest\x18\x02 \x01(\x0b\x32\x1f.Authentication.UserAuthRequest\x12\x1a\n\x12\x65ncryptedClientKey\x18\x03 \x01(\x0c\x12\x1b\n\x13\x65ncryptedPrivateKey\x18\x04 \x01(\x0c\x12\x11\n\tpublicKey\x18\x05 \x01(\x0c\x12\x18\n\x10verificationCode\x18\x06 \x01(\t\x12\x1e\n\x16\x64\x65precatedAuthHashHash\x18\x07 \x01(\x0c\x12$\n\x1c\x64\x65precatedEncryptedClientKey\x18\x08 \x01(\x0c\x12%\n\x1d\x64\x65precatedEncryptedPrivateKey\x18\t \x01(\x0c\x12\"\n\x1a\x64\x65precatedEncryptionParams\x18\n \x01(\x0c\"\xd0\x01\n\x16\x43onvertUserToV3Request\x12\x30\n\x0b\x61uthRequest\x18\x01 \x01(\x0b\x32\x1b.Authentication.AuthRequest\x12\x38\n\x0fuserAuthRequest\x18\x02 \x01(\x0b\x32\x1f.Authentication.UserAuthRequest\x12\x1a\n\x12\x65ncryptedClientKey\x18\x03 \x01(\x0c\x12\x1b\n\x13\x65ncryptedPrivateKey\x18\x04 \x01(\x0c\x12\x11\n\tpublicKey\x18\x05 \x01(\x0c\"$\n\x10RevisionResponse\x12\x10\n\x08revision\x18\x01 \x01(\x03\"&\n\x12\x43hangeEmailRequest\x12\x10\n\x08newEmail\x18\x01 \x01(\t\"8\n\x13\x43hangeEmailResponse\x12!\n\x19\x65ncryptedChangeEmailToken\x18\x01 \x01(\x0c\"6\n\x1d\x45mailVerificationLinkResponse\x12\x15\n\remailVerified\x18\x01 \x01(\x08\")\n\x0cSecurityData\x12\x0b\n\x03uid\x18\x01 \x01(\x0c\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"@\n\x11SecurityScoreData\x12\x0b\n\x03uid\x18\x01 \x01(\x0c\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x12\x10\n\x08revision\x18\x03 \x01(\x03\"\x8b\x02\n\x13SecurityDataRequest\x12\x38\n\x12recordSecurityData\x18\x01 \x03(\x0b\x32\x1c.Authentication.SecurityData\x12@\n\x1amasterPasswordSecurityData\x18\x02 \x03(\x0b\x32\x1c.Authentication.SecurityData\x12\x34\n\x0e\x65ncryptionType\x18\x03 \x01(\x0e\x32\x1c.Enterprise.EncryptedKeyType\x12\x42\n\x17recordSecurityScoreData\x18\x04 \x03(\x0b\x32!.Authentication.SecurityScoreData\"\xb3\x02\n\x1dSecurityReportIncrementalData\x12\x18\n\x10\x65nterpriseUserId\x18\x01 \x01(\x03\x12\x1b\n\x13\x63urrentSecurityData\x18\x02 \x01(\x0c\x12#\n\x1b\x63urrentSecurityDataRevision\x18\x03 \x01(\x03\x12\x17\n\x0foldSecurityData\x18\x04 \x01(\x0c\x12\x1f\n\x17oldSecurityDataRevision\x18\x05 \x01(\x03\x12?\n\x19\x63urrentDataEncryptionType\x18\x06 \x01(\x0e\x32\x1c.Enterprise.EncryptedKeyType\x12;\n\x15oldDataEncryptionType\x18\x07 \x01(\x0e\x32\x1c.Enterprise.EncryptedKeyType\"\x9f\x02\n\x0eSecurityReport\x12\x18\n\x10\x65nterpriseUserId\x18\x01 \x01(\x03\x12\x1b\n\x13\x65ncryptedReportData\x18\x02 \x01(\x0c\x12\x10\n\x08revision\x18\x03 \x01(\x03\x12\x11\n\ttwoFactor\x18\x04 \x01(\t\x12\x11\n\tlastLogin\x18\x05 \x01(\x03\x12\x1e\n\x16numberOfReusedPassword\x18\x06 \x01(\x05\x12T\n\x1dsecurityReportIncrementalData\x18\x07 \x03(\x0b\x32-.Authentication.SecurityReportIncrementalData\x12\x0e\n\x06userId\x18\x08 \x01(\x05\x12\x18\n\x10hasOldEncryption\x18\t \x01(\x08\"S\n\x19SecurityReportSaveRequest\x12\x36\n\x0esecurityReport\x18\x01 \x03(\x0b\x32\x1e.Authentication.SecurityReport\")\n\x15SecurityReportRequest\x12\x10\n\x08\x66romPage\x18\x01 \x01(\x03\"\xd9\x01\n\x16SecurityReportResponse\x12\x1c\n\x14\x65nterprisePrivateKey\x18\x01 \x01(\x0c\x12\x36\n\x0esecurityReport\x18\x02 \x03(\x0b\x32\x1e.Authentication.SecurityReport\x12\x14\n\x0c\x61sOfRevision\x18\x03 \x01(\x03\x12\x10\n\x08\x66romPage\x18\x04 \x01(\x03\x12\x0e\n\x06toPage\x18\x05 \x01(\x03\x12\x10\n\x08\x63omplete\x18\x06 \x01(\x08\x12\x1f\n\x17\x65nterpriseEccPrivateKey\x18\x07 \x01(\x0c\"\'\n\x16ReusedPasswordsRequest\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\">\n\x14SummaryConsoleReport\x12\x12\n\nreportType\x18\x01 \x01(\x05\x12\x12\n\nreportData\x18\x02 \x01(\x0c\"|\n\x12\x43hangeToKeyTypeOne\x12/\n\nobjectType\x18\x01 \x01(\x0e\x32\x1b.Authentication.ObjectTypes\x12\x12\n\nprimaryUid\x18\x02 \x01(\x0c\x12\x14\n\x0csecondaryUid\x18\x03 \x01(\x0c\x12\x0b\n\x03key\x18\x04 \x01(\x0c\"[\n\x19\x43hangeToKeyTypeOneRequest\x12>\n\x12\x63hangeToKeyTypeOne\x18\x01 \x03(\x0b\x32\".Authentication.ChangeToKeyTypeOne\"U\n\x18\x43hangeToKeyTypeOneStatus\x12\x0b\n\x03uid\x18\x01 \x01(\x0c\x12\x0c\n\x04type\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\t\x12\x0e\n\x06reason\x18\x04 \x01(\t\"h\n\x1a\x43hangeToKeyTypeOneResponse\x12J\n\x18\x63hangeToKeyTypeOneStatus\x18\x01 \x03(\x0b\x32(.Authentication.ChangeToKeyTypeOneStatus\"\xb9\x01\n\x18GetChangeKeyTypesRequest\x12=\n\x10onlyTheseObjects\x18\x01 \x03(\x0e\x32#.Authentication.EncryptedObjectType\x12\r\n\x05limit\x18\x02 \x01(\x05\x12\x1a\n\x12includeRecommended\x18\x03 \x01(\x08\x12\x13\n\x0bincludeKeys\x18\x04 \x01(\x08\x12\x1e\n\x16includeAllowedKeyTypes\x18\x05 \x01(\x08\"\x82\x01\n\x19GetChangeKeyTypesResponse\x12+\n\x04keys\x18\x01 \x03(\x0b\x32\x1d.Authentication.ChangeKeyType\x12\x38\n\x0f\x61llowedKeyTypes\x18\x02 \x03(\x0b\x32\x1f.Authentication.AllowedKeyTypes\"\x81\x01\n\x0f\x41llowedKeyTypes\x12\x37\n\nobjectType\x18\x01 \x01(\x0e\x32#.Authentication.EncryptedObjectType\x12\x35\n\x0f\x61llowedKeyTypes\x18\x02 \x03(\x0e\x32\x1c.Enterprise.EncryptedKeyType\"=\n\x0e\x43hangeKeyTypes\x12+\n\x04keys\x18\x01 \x03(\x0b\x32\x1d.Authentication.ChangeKeyType\"\xd6\x01\n\rChangeKeyType\x12\x37\n\nobjectType\x18\x01 \x01(\x0e\x32#.Authentication.EncryptedObjectType\x12\x0b\n\x03uid\x18\x02 \x01(\x0c\x12\x14\n\x0csecondaryUid\x18\x03 \x01(\x0c\x12\x0b\n\x03key\x18\x04 \x01(\x0c\x12-\n\x07keyType\x18\x05 \x01(\x0e\x32\x1c.Enterprise.EncryptedKeyType\x12-\n\x06status\x18\x06 \x01(\x0e\x32\x1d.Authentication.GenericStatus\"!\n\x06SetKey\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x0b\n\x03key\x18\x02 \x01(\x0c\"5\n\rSetKeyRequest\x12$\n\x04keys\x18\x01 \x03(\x0b\x32\x16.Authentication.SetKey\"\x92\x05\n\x11\x43reateUserRequest\x12\x10\n\x08username\x18\x01 \x01(\t\x12\x14\n\x0c\x61uthVerifier\x18\x02 \x01(\x0c\x12\x18\n\x10\x65ncryptionParams\x18\x03 \x01(\x0c\x12\x14\n\x0crsaPublicKey\x18\x04 \x01(\x0c\x12\x1e\n\x16rsaEncryptedPrivateKey\x18\x05 \x01(\x0c\x12\x14\n\x0c\x65\x63\x63PublicKey\x18\x06 \x01(\x0c\x12\x1e\n\x16\x65\x63\x63\x45ncryptedPrivateKey\x18\x07 \x01(\x0c\x12\x1c\n\x14\x65ncryptedDeviceToken\x18\x08 \x01(\x0c\x12\x1a\n\x12\x65ncryptedClientKey\x18\t \x01(\x0c\x12\x15\n\rclientVersion\x18\n \x01(\t\x12\x1e\n\x16\x65ncryptedDeviceDataKey\x18\x0b \x01(\x0c\x12\x1b\n\x13\x65ncryptedLoginToken\x18\x0c \x01(\x0c\x12\x19\n\x11messageSessionUid\x18\r \x01(\x0c\x12\x17\n\x0finstallReferrer\x18\x0e \x01(\t\x12\x0e\n\x06mccMNC\x18\x0f \x01(\x05\x12\x0b\n\x03mfg\x18\x10 \x01(\t\x12\r\n\x05model\x18\x11 \x01(\t\x12\r\n\x05\x62rand\x18\x12 \x01(\t\x12\x0f\n\x07product\x18\x13 \x01(\t\x12\x0e\n\x06\x64\x65vice\x18\x14 \x01(\t\x12\x0f\n\x07\x63\x61rrier\x18\x15 \x01(\t\x12\x18\n\x10verificationCode\x18\x16 \x01(\t\x12\x42\n\x16\x65nterpriseRegistration\x18\x17 \x01(\x0b\x32\".Enterprise.EnterpriseRegistration\x12\"\n\x1a\x65ncryptedVerificationToken\x18\x18 \x01(\x0c\x12\x1e\n\x16\x65nterpriseUsersDataKey\x18\x19 \x01(\x0c\"W\n!NodeEnforcementAddOrUpdateRequest\x12\x0e\n\x06nodeId\x18\x01 \x01(\x03\x12\x13\n\x0b\x65nforcement\x18\x02 \x01(\t\x12\r\n\x05value\x18\x03 \x01(\t\"C\n\x1cNodeEnforcementRemoveRequest\x12\x0e\n\x06nodeId\x18\x01 \x01(\x03\x12\x13\n\x0b\x65nforcement\x18\x02 \x01(\t\"\x9f\x01\n\x0f\x41piRequestByKey\x12\r\n\x05keyId\x18\x01 \x01(\x05\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\x12\x10\n\x08username\x18\x03 \x01(\t\x12\x0e\n\x06locale\x18\x04 \x01(\t\x12<\n\x11supportedLanguage\x18\x05 \x01(\x0e\x32!.Authentication.SupportedLanguage\x12\x0c\n\x04type\x18\x06 \x01(\x05\"\xc7\x01\n\x15\x41piRequestByKAtoKAKey\x12,\n\x0csourceRegion\x18\x01 \x01(\x0e\x32\x16.Authentication.Region\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\x12<\n\x11supportedLanguage\x18\x03 \x01(\x0e\x32!.Authentication.SupportedLanguage\x12\x31\n\x11\x64\x65stinationRegion\x18\x04 \x01(\x0e\x32\x16.Authentication.Region\".\n\x0fMemcacheRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0e\n\x06userId\x18\x02 \x01(\x05\".\n\x10MemcacheResponse\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"w\n\x1cMasterPasswordReentryRequest\x12\x16\n\x0epbkdf2Password\x18\x01 \x01(\t\x12?\n\x06\x61\x63tion\x18\x02 \x01(\x0e\x32/.Authentication.MasterPasswordReentryActionType\"\\\n\x1dMasterPasswordReentryResponse\x12;\n\x06status\x18\x01 \x01(\x0e\x32+.Authentication.MasterPasswordReentryStatus\"\xb3\x01\n\x19\x44\x65viceRegistrationRequest\x12\x15\n\rclientVersion\x18\x01 \x01(\t\x12\x12\n\ndeviceName\x18\x02 \x01(\t\x12\x17\n\x0f\x64\x65vicePublicKey\x18\x03 \x01(\x0c\x12\x16\n\x0e\x64\x65vicePlatform\x18\x04 \x01(\t\x12:\n\x10\x63lientFormFactor\x18\x05 \x01(\x0e\x32 .Authentication.ClientFormFactor\"\x9a\x01\n\x19\x44\x65viceVerificationRequest\x12\x1c\n\x14\x65ncryptedDeviceToken\x18\x01 \x01(\x0c\x12\x10\n\x08username\x18\x02 \x01(\t\x12\x1b\n\x13verificationChannel\x18\x03 \x01(\t\x12\x19\n\x11messageSessionUid\x18\x04 \x01(\x0c\x12\x15\n\rclientVersion\x18\x05 \x01(\t\"\xb2\x01\n\x1a\x44\x65viceVerificationResponse\x12\x1c\n\x14\x65ncryptedDeviceToken\x18\x01 \x01(\x0c\x12\x10\n\x08username\x18\x02 \x01(\t\x12\x19\n\x11messageSessionUid\x18\x03 \x01(\x0c\x12\x15\n\rclientVersion\x18\x04 \x01(\t\x12\x32\n\x0c\x64\x65viceStatus\x18\x05 \x01(\x0e\x32\x1c.Authentication.DeviceStatus\"\xc8\x01\n\x15\x44\x65viceApprovalRequest\x12\r\n\x05\x65mail\x18\x01 \x01(\t\x12\x18\n\x10twoFactorChannel\x18\x02 \x01(\t\x12\x15\n\rclientVersion\x18\x03 \x01(\t\x12\x0e\n\x06locale\x18\x04 \x01(\t\x12\x1c\n\x14\x65ncryptedDeviceToken\x18\x05 \x01(\x0c\x12\x10\n\x08totpCode\x18\x06 \x01(\t\x12\x10\n\x08\x64\x65viceIp\x18\x07 \x01(\t\x12\x1d\n\x15\x64\x65viceTokenExpireDays\x18\x08 \x01(\t\"9\n\x16\x44\x65viceApprovalResponse\x12\x1f\n\x17\x65ncryptedTwoFactorToken\x18\x01 \x01(\x0c\"~\n\x14\x41pproveDeviceRequest\x12\x1c\n\x14\x65ncryptedDeviceToken\x18\x01 \x01(\x0c\x12\x1e\n\x16\x65ncryptedDeviceDataKey\x18\x02 \x01(\x0c\x12\x14\n\x0c\x64\x65nyApproval\x18\x03 \x01(\x08\x12\x12\n\nlinkDevice\x18\x04 \x01(\x08\"E\n\x1a\x45nterpriseUserAliasRequest\x12\x18\n\x10\x65nterpriseUserId\x18\x01 \x01(\x03\x12\r\n\x05\x61lias\x18\x02 \x01(\t\"Y\n\x1d\x45nterpriseUserAddAliasRequest\x12\x18\n\x10\x65nterpriseUserId\x18\x01 \x01(\x03\x12\r\n\x05\x61lias\x18\x02 \x01(\t\x12\x0f\n\x07primary\x18\x03 \x01(\x08\"w\n\x1f\x45nterpriseUserAddAliasRequestV2\x12T\n\x1d\x65nterpriseUserAddAliasRequest\x18\x01 \x03(\x0b\x32-.Authentication.EnterpriseUserAddAliasRequest\"H\n\x1c\x45nterpriseUserAddAliasStatus\x12\x18\n\x10\x65nterpriseUserId\x18\x01 \x01(\x03\x12\x0e\n\x06status\x18\x02 \x01(\t\"^\n\x1e\x45nterpriseUserAddAliasResponse\x12<\n\x06status\x18\x01 \x03(\x0b\x32,.Authentication.EnterpriseUserAddAliasStatus\"&\n\x06\x44\x65vice\x12\x1c\n\x14\x65ncryptedDeviceToken\x18\x01 \x01(\x0c\"\\\n\x1cRegisterDeviceDataKeyRequest\x12\x1c\n\x14\x65ncryptedDeviceToken\x18\x01 \x01(\x0c\x12\x1e\n\x16\x65ncryptedDeviceDataKey\x18\x02 \x01(\x0c\"n\n)ValidateCreateUserVerificationCodeRequest\x12\x10\n\x08username\x18\x01 \x01(\t\x12\x15\n\rclientVersion\x18\x02 \x01(\t\x12\x18\n\x10verificationCode\x18\x03 \x01(\t\"\xa3\x01\n%ValidateDeviceVerificationCodeRequest\x12\x10\n\x08username\x18\x01 \x01(\t\x12\x15\n\rclientVersion\x18\x02 \x01(\t\x12\x18\n\x10verificationCode\x18\x03 \x01(\t\x12\x19\n\x11messageSessionUid\x18\x04 \x01(\x0c\x12\x1c\n\x14\x65ncryptedDeviceToken\x18\x05 \x01(\x0c\"Y\n\x19SendSessionMessageRequest\x12\x19\n\x11messageSessionUid\x18\x01 \x01(\x0c\x12\x0f\n\x07\x63ommand\x18\x02 \x01(\t\x12\x10\n\x08username\x18\x03 \x01(\t\"M\n\x11GlobalUserAccount\x12\x10\n\x08username\x18\x01 \x01(\t\x12\x12\n\naccountUid\x18\x02 \x01(\x0c\x12\x12\n\nregionName\x18\x03 \x01(\t\"7\n\x0f\x41\x63\x63ountUsername\x12\x10\n\x08username\x18\x01 \x01(\t\x12\x12\n\ndateActive\x18\x02 \x01(\t\"P\n\x19SsoServiceProviderRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x15\n\rclientVersion\x18\x02 \x01(\t\x12\x0e\n\x06locale\x18\x03 \x01(\t\"a\n\x1aSsoServiceProviderResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05spUrl\x18\x02 \x01(\t\x12\x0f\n\x07isCloud\x18\x03 \x01(\x08\x12\x15\n\rclientVersion\x18\x04 \x01(\t\"4\n\x12UserSettingRequest\x12\x0f\n\x07setting\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"f\n\rThrottleState\x12*\n\x04type\x18\x01 \x01(\x0e\x32\x1c.Authentication.ThrottleType\x12\x0b\n\x03key\x18\x02 \x01(\t\x12\r\n\x05value\x18\x03 \x01(\t\x12\r\n\x05state\x18\x04 \x01(\x08\"\xb5\x01\n\x0eThrottleState2\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x16\n\x0ekeyDescription\x18\x02 \x01(\t\x12\r\n\x05value\x18\x03 \x01(\t\x12\x18\n\x10valueDescription\x18\x04 \x01(\t\x12\x12\n\nidentifier\x18\x05 \x01(\t\x12\x0e\n\x06locked\x18\x06 \x01(\x08\x12\x1a\n\x12includedInAllClear\x18\x07 \x01(\x08\x12\x15\n\rexpireSeconds\x18\x08 \x01(\x05\"\x97\x01\n\x11\x44\x65viceInformation\x12\x10\n\x08\x64\x65viceId\x18\x01 \x01(\x03\x12\x12\n\ndeviceName\x18\x02 \x01(\t\x12\x15\n\rclientVersion\x18\x03 \x01(\t\x12\x11\n\tlastLogin\x18\x04 \x01(\x03\x12\x32\n\x0c\x64\x65viceStatus\x18\x05 \x01(\x0e\x32\x1c.Authentication.DeviceStatus\"*\n\x0bUserSetting\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x08\".\n\x12UserDataKeyRequest\x12\x18\n\x10\x65nterpriseUserId\x18\x01 \x03(\x03\"+\n\x18UserDataKeyByNodeRequest\x12\x0f\n\x07nodeIds\x18\x01 \x03(\x03\"\x80\x01\n\x1b\x45nterpriseUserIdDataKeyPair\x12\x18\n\x10\x65nterpriseUserId\x18\x01 \x01(\x03\x12\x18\n\x10\x65ncryptedDataKey\x18\x02 \x01(\x0c\x12-\n\x07keyType\x18\x03 \x01(\x0e\x32\x1c.Enterprise.EncryptedKeyType\"\x95\x01\n\x0bUserDataKey\x12\x0e\n\x06roleId\x18\x01 \x01(\x03\x12\x0f\n\x07roleKey\x18\x02 \x01(\x0c\x12\x12\n\nprivateKey\x18\x03 \x01(\t\x12Q\n\x1c\x65nterpriseUserIdDataKeyPairs\x18\x04 \x03(\x0b\x32+.Authentication.EnterpriseUserIdDataKeyPair\"z\n\x13UserDataKeyResponse\x12\x31\n\x0cuserDataKeys\x18\x01 \x03(\x0b\x32\x1b.Authentication.UserDataKey\x12\x14\n\x0c\x61\x63\x63\x65ssDenied\x18\x02 \x03(\x03\x12\x1a\n\x12noEncryptedDataKey\x18\x03 \x03(\x03\"H\n)MasterPasswordRecoveryVerificationRequest\x12\x1b\n\x13\x65ncryptedLoginToken\x18\x01 \x01(\x0c\"U\n\x1cGetSecurityQuestionV3Request\x12\x1b\n\x13\x65ncryptedLoginToken\x18\x01 \x01(\x0c\x12\x18\n\x10verificationCode\x18\x02 \x01(\t\"r\n\x1dGetSecurityQuestionV3Response\x12\x18\n\x10securityQuestion\x18\x01 \x01(\t\x12\x15\n\rbackupKeyDate\x18\x02 \x01(\x03\x12\x0c\n\x04salt\x18\x03 \x01(\x0c\x12\x12\n\niterations\x18\x04 \x01(\x05\"n\n\x19GetDataKeyBackupV3Request\x12\x1b\n\x13\x65ncryptedLoginToken\x18\x01 \x01(\x0c\x12\x18\n\x10verificationCode\x18\x02 \x01(\t\x12\x1a\n\x12securityAnswerHash\x18\x03 \x01(\x0c\"v\n\rPasswordRules\x12\x10\n\x08ruleType\x18\x01 \x01(\t\x12\r\n\x05match\x18\x02 \x01(\x08\x12\x0f\n\x07pattern\x18\x03 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x04 \x01(\t\x12\x0f\n\x07minimum\x18\x05 \x01(\x05\x12\r\n\x05value\x18\x06 \x01(\t\"\xc9\x02\n\x1aGetDataKeyBackupV3Response\x12\x15\n\rdataKeyBackup\x18\x01 \x01(\x0c\x12\x19\n\x11\x64\x61taKeyBackupDate\x18\x02 \x01(\x03\x12\x11\n\tpublicKey\x18\x03 \x01(\x0c\x12\x1b\n\x13\x65ncryptedPrivateKey\x18\x04 \x01(\x0c\x12\x11\n\tclientKey\x18\x05 \x01(\x0c\x12\x1d\n\x15\x65ncryptedSessionToken\x18\x06 \x01(\x0c\x12\x34\n\rpasswordRules\x18\x07 \x03(\x0b\x32\x1d.Authentication.PasswordRules\x12\x1a\n\x12passwordRulesIntro\x18\x08 \x01(\t\x12\x1f\n\x17minimumPbkdf2Iterations\x18\t \x01(\x05\x12$\n\x07keyType\x18\n \x01(\x0e\x32\x13.Enterprise.KeyType\")\n\x14GetPublicKeysRequest\x12\x11\n\tusernames\x18\x01 \x03(\t\"r\n\x11PublicKeyResponse\x12\x10\n\x08username\x18\x01 \x01(\t\x12\x11\n\tpublicKey\x18\x02 \x01(\x0c\x12\x14\n\x0cpublicEccKey\x18\x03 \x01(\x0c\x12\x0f\n\x07message\x18\x04 \x01(\t\x12\x11\n\terrorCode\x18\x05 \x01(\t\"P\n\x15GetPublicKeysResponse\x12\x37\n\x0ckeyResponses\x18\x01 \x03(\x0b\x32!.Authentication.PublicKeyResponse\"F\n\x14SetEccKeyPairRequest\x12\x11\n\tpublicKey\x18\x01 \x01(\x0c\x12\x1b\n\x13\x65ncryptedPrivateKey\x18\x02 \x01(\x0c\"I\n\x15SetEccKeyPairsRequest\x12\x30\n\x08teamKeys\x18\x01 \x03(\x0b\x32\x1e.Authentication.TeamEccKeyPair\"R\n\x16SetEccKeyPairsResponse\x12\x38\n\x08teamKeys\x18\x01 \x03(\x0b\x32&.Authentication.TeamEccKeyPairResponse\"Q\n\x0eTeamEccKeyPair\x12\x0f\n\x07teamUid\x18\x01 \x01(\x0c\x12\x11\n\tpublicKey\x18\x02 \x01(\x0c\x12\x1b\n\x13\x65ncryptedPrivateKey\x18\x03 \x01(\x0c\"X\n\x16TeamEccKeyPairResponse\x12\x0f\n\x07teamUid\x18\x01 \x01(\x0c\x12-\n\x06status\x18\x02 \x01(\x0e\x32\x1d.Authentication.GenericStatus\"D\n\x17GetKsmPublicKeysRequest\x12\x11\n\tclientIds\x18\x01 \x03(\x0c\x12\x16\n\x0e\x63ontrollerUids\x18\x02 \x03(\x0c\"U\n\x17\x44\x65vicePublicKeyResponse\x12\x10\n\x08\x63lientId\x18\x01 \x01(\x0c\x12\x11\n\tpublicKey\x18\x02 \x01(\x0c\x12\x15\n\rcontrollerUid\x18\x03 \x01(\x0c\"Y\n\x18GetKsmPublicKeysResponse\x12=\n\x0ckeyResponses\x18\x01 \x03(\x0b\x32\'.Authentication.DevicePublicKeyResponse\"X\n\x13\x41\x64\x64\x41ppSharesRequest\x12\x14\n\x0c\x61ppRecordUid\x18\x01 \x01(\x0c\x12+\n\x06shares\x18\x02 \x03(\x0b\x32\x1b.Authentication.AppShareAdd\">\n\x16RemoveAppSharesRequest\x12\x14\n\x0c\x61ppRecordUid\x18\x01 \x01(\x0c\x12\x0e\n\x06shares\x18\x02 \x03(\x0c\"\x87\x01\n\x0b\x41ppShareAdd\x12\x11\n\tsecretUid\x18\x02 \x01(\x0c\x12\x37\n\tshareType\x18\x03 \x01(\x0e\x32$.Authentication.ApplicationShareType\x12\x1a\n\x12\x65ncryptedSecretKey\x18\x04 \x01(\x0c\x12\x10\n\x08\x65\x64itable\x18\x05 \x01(\x08\"\x89\x01\n\x08\x41ppShare\x12\x11\n\tsecretUid\x18\x01 \x01(\x0c\x12\x37\n\tshareType\x18\x02 \x01(\x0e\x32$.Authentication.ApplicationShareType\x12\x10\n\x08\x65\x64itable\x18\x03 \x01(\x08\x12\x11\n\tcreatedOn\x18\x04 \x01(\x03\x12\x0c\n\x04\x64\x61ta\x18\x05 \x01(\x0c\"\xd9\x01\n\x13\x41\x64\x64\x41ppClientRequest\x12\x14\n\x0c\x61ppRecordUid\x18\x01 \x01(\x0c\x12\x17\n\x0f\x65ncryptedAppKey\x18\x02 \x01(\x0c\x12\x10\n\x08\x63lientId\x18\x03 \x01(\x0c\x12\x0e\n\x06lockIp\x18\x04 \x01(\x08\x12\x1b\n\x13\x66irstAccessExpireOn\x18\x05 \x01(\x03\x12\x16\n\x0e\x61\x63\x63\x65ssExpireOn\x18\x06 \x01(\x03\x12\n\n\x02id\x18\x07 \x01(\t\x12\x30\n\rappClientType\x18\x08 \x01(\x0e\x32\x19.Enterprise.AppClientType\"@\n\x17RemoveAppClientsRequest\x12\x14\n\x0c\x61ppRecordUid\x18\x01 \x01(\x0c\x12\x0f\n\x07\x63lients\x18\x02 \x03(\x0c\"\xaa\x01\n\x17\x41\x64\x64\x45xternalShareRequest\x12\x11\n\trecordUid\x18\x01 \x01(\x0c\x12\x1a\n\x12\x65ncryptedRecordKey\x18\x02 \x01(\x0c\x12\x10\n\x08\x63lientId\x18\x03 \x01(\x0c\x12\x16\n\x0e\x61\x63\x63\x65ssExpireOn\x18\x04 \x01(\x03\x12\n\n\x02id\x18\x05 \x01(\t\x12\x16\n\x0eisSelfDestruct\x18\x06 \x01(\x08\x12\x12\n\nisEditable\x18\x07 \x01(\x08\"\x93\x02\n\tAppClient\x12\n\n\x02id\x18\x01 \x01(\t\x12\x10\n\x08\x63lientId\x18\x02 \x01(\x0c\x12\x11\n\tcreatedOn\x18\x03 \x01(\x03\x12\x13\n\x0b\x66irstAccess\x18\x04 \x01(\x03\x12\x12\n\nlastAccess\x18\x05 \x01(\x03\x12\x11\n\tpublicKey\x18\x06 \x01(\x0c\x12\x0e\n\x06lockIp\x18\x07 \x01(\x08\x12\x11\n\tipAddress\x18\x08 \x01(\t\x12\x1b\n\x13\x66irstAccessExpireOn\x18\t \x01(\x03\x12\x16\n\x0e\x61\x63\x63\x65ssExpireOn\x18\n \x01(\x03\x12\x30\n\rappClientType\x18\x0b \x01(\x0e\x32\x19.Enterprise.AppClientType\x12\x0f\n\x07\x63\x61nEdit\x18\x0c \x01(\x08\")\n\x11GetAppInfoRequest\x12\x14\n\x0c\x61ppRecordUid\x18\x01 \x03(\x0c\"\x8e\x01\n\x07\x41ppInfo\x12\x14\n\x0c\x61ppRecordUid\x18\x01 \x01(\x0c\x12(\n\x06shares\x18\x02 \x03(\x0b\x32\x18.Authentication.AppShare\x12*\n\x07\x63lients\x18\x03 \x03(\x0b\x32\x19.Authentication.AppClient\x12\x17\n\x0fisExternalShare\x18\x04 \x01(\x08\">\n\x12GetAppInfoResponse\x12(\n\x07\x61ppInfo\x18\x01 \x03(\x0b\x32\x17.Authentication.AppInfo\"\xd5\x01\n\x12\x41pplicationSummary\x12\x14\n\x0c\x61ppRecordUid\x18\x01 \x01(\x0c\x12\x12\n\nlastAccess\x18\x02 \x01(\x03\x12\x14\n\x0crecordShares\x18\x03 \x01(\x05\x12\x14\n\x0c\x66olderShares\x18\x04 \x01(\x05\x12\x15\n\rfolderRecords\x18\x05 \x01(\x05\x12\x13\n\x0b\x63lientCount\x18\x06 \x01(\x05\x12\x1a\n\x12\x65xpiredClientCount\x18\x07 \x01(\x05\x12\x10\n\x08username\x18\x08 \x01(\t\x12\x0f\n\x07\x61ppData\x18\t \x01(\x0c\"`\n\x1eGetApplicationsSummaryResponse\x12>\n\x12\x61pplicationSummary\x18\x01 \x03(\x0b\x32\".Authentication.ApplicationSummary\"/\n\x1bGetVerificationTokenRequest\x12\x10\n\x08username\x18\x01 \x01(\t\"B\n\x1cGetVerificationTokenResponse\x12\"\n\x1a\x65ncryptedVerificationToken\x18\x01 \x01(\x0c\"\'\n\x16SendShareInviteRequest\x12\r\n\x05\x65mail\x18\x01 \x01(\t\"\xc5\x01\n\x18TimeLimitedAccessRequest\x12\x12\n\naccountUid\x18\x01 \x03(\x0c\x12\x0f\n\x07teamUid\x18\x02 \x03(\x0c\x12\x11\n\trecordUid\x18\x03 \x03(\x0c\x12\x17\n\x0fsharedObjectUid\x18\x04 \x01(\x0c\x12\x44\n\x15timeLimitedAccessType\x18\x05 \x01(\x0e\x32%.Authentication.TimeLimitedAccessType\x12\x12\n\nexpiration\x18\x06 \x01(\x03\"7\n\x17TimeLimitedAccessStatus\x12\x0b\n\x03uid\x18\x01 \x01(\x0c\x12\x0f\n\x07message\x18\x02 \x01(\t\"\xf8\x01\n\x19TimeLimitedAccessResponse\x12\x10\n\x08revision\x18\x01 \x01(\x03\x12\x41\n\x10userAccessStatus\x18\x02 \x03(\x0b\x32\'.Authentication.TimeLimitedAccessStatus\x12\x41\n\x10teamAccessStatus\x18\x03 \x03(\x0b\x32\'.Authentication.TimeLimitedAccessStatus\x12\x43\n\x12recordAccessStatus\x18\x04 \x03(\x0b\x32\'.Authentication.TimeLimitedAccessStatus\"+\n\x16RequestDownloadRequest\x12\x11\n\tfileNames\x18\x01 \x03(\t\"g\n\x17RequestDownloadResponse\x12\x0e\n\x06result\x18\x01 \x01(\t\x12\x0f\n\x07message\x18\x02 \x01(\t\x12+\n\tdownloads\x18\x03 \x03(\x0b\x32\x18.Authentication.Download\"D\n\x08\x44ownload\x12\x10\n\x08\x66ileName\x18\x01 \x01(\t\x12\x0b\n\x03url\x18\x02 \x01(\t\x12\x19\n\x11successStatusCode\x18\x03 \x01(\x05\"#\n\x11\x44\x65leteUserRequest\x12\x0e\n\x06reason\x18\x01 \x01(\t\"\x84\x01\n\x1b\x43hangeMasterPasswordRequest\x12\x14\n\x0c\x61uthVerifier\x18\x01 \x01(\x0c\x12\x18\n\x10\x65ncryptionParams\x18\x02 \x01(\x0c\x12\x1b\n\x13\x66romServiceProvider\x18\x03 \x01(\x08\x12\x18\n\x10iterationsChange\x18\x04 \x01(\x08\"=\n\x1c\x43hangeMasterPasswordResponse\x12\x1d\n\x15\x65ncryptedSessionToken\x18\x01 \x01(\x0c\"Y\n\x1b\x41\x63\x63ountRecoverySetupRequest\x12 \n\x18recoveryEncryptedDataKey\x18\x01 \x01(\x0c\x12\x18\n\x10recoveryAuthHash\x18\x02 \x01(\x0c\"\xac\x01\n!AccountRecoveryVerifyCodeResponse\x12\x34\n\rbackupKeyType\x18\x01 \x01(\x0e\x32\x1d.Authentication.BackupKeyType\x12\x15\n\rbackupKeyDate\x18\x02 \x01(\x03\x12\x18\n\x10securityQuestion\x18\x03 \x01(\t\x12\x0c\n\x04salt\x18\x04 \x01(\x0c\x12\x12\n\niterations\x18\x05 \x01(\x05\",\n\x1b\x45mergencyAccessLoginRequest\x12\r\n\x05owner\x18\x01 \x01(\t\"\xb5\x01\n\x1c\x45mergencyAccessLoginResponse\x12\x14\n\x0csessionToken\x18\x01 \x01(\x0c\x12%\n\x07\x64\x61taKey\x18\x02 \x01(\x0b\x32\x14.Enterprise.TypedKey\x12+\n\rrsaPrivateKey\x18\x03 \x01(\x0b\x32\x14.Enterprise.TypedKey\x12+\n\reccPrivateKey\x18\x04 \x01(\x0b\x32\x14.Enterprise.TypedKey\"\xb2\x01\n\x0bUserTeamKey\x12\x0f\n\x07teamUid\x18\x01 \x01(\x0c\x12\x10\n\x08username\x18\x02 \x01(\t\x12\x18\n\x10\x65nterpriseUserId\x18\x03 \x01(\x03\x12\x1b\n\x13\x65ncryptedTeamKeyRSA\x18\x04 \x01(\x0c\x12\x1a\n\x12\x65ncryptedTeamKeyEC\x18\x05 \x01(\x0c\x12-\n\x06status\x18\x06 \x01(\x0e\x32\x1d.Authentication.GenericStatus\")\n\x16GenericRequestResponse\x12\x0f\n\x07request\x18\x01 \x03(\x0c\"f\n\x1aPasskeyRegistrationRequest\x12H\n\x17\x61uthenticatorAttachment\x18\x01 \x01(\x0e\x32\'.Authentication.AuthenticatorAttachment\"P\n\x1bPasskeyRegistrationResponse\x12\x16\n\x0e\x63hallengeToken\x18\x01 \x01(\x0c\x12\x19\n\x11pkCreationOptions\x18\x02 \x01(\t\"\x84\x01\n\x1fPasskeyRegistrationFinalization\x12\x16\n\x0e\x63hallengeToken\x18\x01 \x01(\x0c\x12\x1d\n\x15\x61uthenticatorResponse\x18\x02 \x01(\t\x12\x19\n\x0c\x66riendlyName\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\x0f\n\r_friendlyName\"\xb3\x02\n\x1cPasskeyAuthenticationRequest\x12H\n\x17\x61uthenticatorAttachment\x18\x01 \x01(\x0e\x32\'.Authentication.AuthenticatorAttachment\x12\x36\n\x0epasskeyPurpose\x18\x02 \x01(\x0e\x32\x1e.Authentication.PasskeyPurpose\x12\x15\n\rclientVersion\x18\x03 \x01(\t\x12\x1c\n\x14\x65ncryptedDeviceToken\x18\x04 \x01(\x0c\x12\x15\n\x08username\x18\x05 \x01(\tH\x00\x88\x01\x01\x12 \n\x13\x65ncryptedLoginToken\x18\x06 \x01(\x0cH\x01\x88\x01\x01\x42\x0b\n\t_usernameB\x16\n\x14_encryptedLoginToken\"\x8b\x01\n\x1dPasskeyAuthenticationResponse\x12\x18\n\x10pkRequestOptions\x18\x01 \x01(\t\x12\x16\n\x0e\x63hallengeToken\x18\x02 \x01(\x0c\x12 \n\x13\x65ncryptedLoginToken\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x42\x16\n\x14_encryptedLoginToken\"\xbf\x01\n\x18PasskeyValidationRequest\x12\x16\n\x0e\x63hallengeToken\x18\x01 \x01(\x0c\x12\x19\n\x11\x61ssertionResponse\x18\x02 \x01(\x0c\x12\x36\n\x0epasskeyPurpose\x18\x03 \x01(\x0e\x32\x1e.Authentication.PasskeyPurpose\x12 \n\x13\x65ncryptedLoginToken\x18\x04 \x01(\x0cH\x00\x88\x01\x01\x42\x16\n\x14_encryptedLoginToken\"I\n\x19PasskeyValidationResponse\x12\x0f\n\x07isValid\x18\x01 \x01(\x08\x12\x1b\n\x13\x65ncryptedLoginToken\x18\x02 \x01(\x0c\"h\n\x14UpdatePasskeyRequest\x12\x0e\n\x06userId\x18\x01 \x01(\x05\x12\x14\n\x0c\x63redentialId\x18\x02 \x01(\x0c\x12\x19\n\x0c\x66riendlyName\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\x0f\n\r_friendlyName\"-\n\x12PasskeyListRequest\x12\x17\n\x0fincludeDisabled\x18\x01 \x01(\x08\"\xa4\x01\n\x0bPasskeyInfo\x12\x0e\n\x06userId\x18\x01 \x01(\x05\x12\x14\n\x0c\x63redentialId\x18\x02 \x01(\x0c\x12\x14\n\x0c\x66riendlyName\x18\x03 \x01(\t\x12\x0e\n\x06\x41\x41GUID\x18\x04 \x01(\t\x12\x17\n\x0f\x63reatedAtMillis\x18\x05 \x01(\x03\x12\x16\n\x0elastUsedMillis\x18\x06 \x01(\x03\x12\x18\n\x10\x64isabledAtMillis\x18\x07 \x01(\x03\"G\n\x13PasskeyListResponse\x12\x30\n\x0bpasskeyInfo\x18\x01 \x03(\x0b\x32\x1b.Authentication.PasskeyInfo*\xd3\x02\n\x11SupportedLanguage\x12\x0b\n\x07\x45NGLISH\x10\x00\x12\n\n\x06\x41RABIC\x10\x01\x12\x0b\n\x07\x42RITISH\x10\x02\x12\x0b\n\x07\x43HINESE\x10\x03\x12\x15\n\x11\x43HINESE_HONG_KONG\x10\x04\x12\x12\n\x0e\x43HINESE_TAIWAN\x10\x05\x12\t\n\x05\x44UTCH\x10\x06\x12\n\n\x06\x46RENCH\x10\x07\x12\n\n\x06GERMAN\x10\x08\x12\t\n\x05GREEK\x10\t\x12\n\n\x06HEBREW\x10\n\x12\x0b\n\x07ITALIAN\x10\x0b\x12\x0c\n\x08JAPANESE\x10\x0c\x12\n\n\x06KOREAN\x10\r\x12\n\n\x06POLISH\x10\x0e\x12\x0e\n\nPORTUGUESE\x10\x0f\x12\x15\n\x11PORTUGUESE_BRAZIL\x10\x10\x12\x0c\n\x08ROMANIAN\x10\x11\x12\x0b\n\x07RUSSIAN\x10\x12\x12\n\n\x06SLOVAK\x10\x13\x12\x0b\n\x07SPANISH\x10\x14\x12\x0b\n\x07\x46INNISH\x10\x15\x12\x0b\n\x07SWEDISH\x10\x16*k\n\tLoginType\x12\n\n\x06NORMAL\x10\x00\x12\x07\n\x03SSO\x10\x01\x12\x07\n\x03\x42IO\x10\x02\x12\r\n\tALTERNATE\x10\x03\x12\x0b\n\x07OFFLINE\x10\x04\x12\x13\n\x0f\x46ORGOT_PASSWORD\x10\x05\x12\x0f\n\x0bPASSKEY_BIO\x10\x06*q\n\x0c\x44\x65viceStatus\x12\x19\n\x15\x44\x45VICE_NEEDS_APPROVAL\x10\x00\x12\r\n\tDEVICE_OK\x10\x01\x12\x1b\n\x17\x44\x45VICE_DISABLED_BY_USER\x10\x02\x12\x1a\n\x16\x44\x45VICE_LOCKED_BY_ADMIN\x10\x03*A\n\rLicenseStatus\x12\t\n\x05OTHER\x10\x00\x12\n\n\x06\x41\x43TIVE\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x12\x0c\n\x08\x44ISABLED\x10\x03*7\n\x0b\x41\x63\x63ountType\x12\x0c\n\x08\x43ONSUMER\x10\x00\x12\n\n\x06\x46\x41MILY\x10\x01\x12\x0e\n\nENTERPRISE\x10\x02*\x9f\x02\n\x10SessionTokenType\x12\x12\n\x0eNO_RESTRICTION\x10\x00\x12\x14\n\x10\x41\x43\x43OUNT_RECOVERY\x10\x01\x12\x11\n\rSHARE_ACCOUNT\x10\x02\x12\x0c\n\x08PURCHASE\x10\x03\x12\x0c\n\x08RESTRICT\x10\x04\x12\x11\n\rACCEPT_INVITE\x10\x05\x12\x12\n\x0eSUPPORT_SERVER\x10\x06\x12\x17\n\x13\x45NTERPRISE_CREATION\x10\x07\x12\x1f\n\x1b\x45XPIRED_BUT_ALLOWED_TO_SYNC\x10\x08\x12\x18\n\x14\x41\x43\x43\x45PT_FAMILY_INVITE\x10\t\x12!\n\x1d\x45NTERPRISE_CREATION_PURCHASED\x10\n\x12\x14\n\x10\x45MERGENCY_ACCESS\x10\x0b*G\n\x07Version\x12\x13\n\x0finvalid_version\x10\x00\x12\x13\n\x0f\x64\x65\x66\x61ult_version\x10\x01\x12\x12\n\x0esecond_version\x10\x02*7\n\x1fMasterPasswordReentryActionType\x12\n\n\x06UNMASK\x10\x00\x12\x08\n\x04\x43OPY\x10\x01*l\n\x0bLoginMethod\x12\x17\n\x13INVALID_LOGINMETHOD\x10\x00\x12\x14\n\x10\x45XISTING_ACCOUNT\x10\x01\x12\x0e\n\nSSO_DOMAIN\x10\x02\x12\r\n\tAFTER_SSO\x10\x03\x12\x0f\n\x0bNEW_ACCOUNT\x10\x04*\xbe\x04\n\nLoginState\x12\x16\n\x12INVALID_LOGINSTATE\x10\x00\x12\x0e\n\nLOGGED_OUT\x10\x01\x12\x1c\n\x18\x44\x45VICE_APPROVAL_REQUIRED\x10\x02\x12\x11\n\rDEVICE_LOCKED\x10\x03\x12\x12\n\x0e\x41\x43\x43OUNT_LOCKED\x10\x04\x12\x19\n\x15\x44\x45VICE_ACCOUNT_LOCKED\x10\x05\x12\x0b\n\x07UPGRADE\x10\x06\x12\x13\n\x0fLICENSE_EXPIRED\x10\x07\x12\x13\n\x0fREGION_REDIRECT\x10\x08\x12\x16\n\x12REDIRECT_CLOUD_SSO\x10\t\x12\x17\n\x13REDIRECT_ONSITE_SSO\x10\n\x12\x10\n\x0cREQUIRES_2FA\x10\x0c\x12\x16\n\x12REQUIRES_AUTH_HASH\x10\r\x12\x15\n\x11REQUIRES_USERNAME\x10\x0e\x12\x19\n\x15\x41\x46TER_CLOUD_SSO_LOGIN\x10\x0f\x12\x1d\n\x19REQUIRES_ACCOUNT_CREATION\x10\x10\x12&\n\"REQUIRES_DEVICE_ENCRYPTED_DATA_KEY\x10\x11\x12\x17\n\x13LOGIN_TOKEN_EXPIRED\x10\x12\x12\x1e\n\x1aPASSKEY_INITIATE_CHALLENGE\x10\x13\x12\x19\n\x15PASSKEY_AUTH_REQUIRED\x10\x14\x12!\n\x1dPASSKEY_VERIFY_AUTHENTICATION\x10\x15\x12\x17\n\x13\x41\x46TER_PASSKEY_LOGIN\x10\x16\x12\r\n\tLOGGED_IN\x10\x63*k\n\x14\x45ncryptedDataKeyType\x12\n\n\x06NO_KEY\x10\x00\x12\x18\n\x14\x42Y_DEVICE_PUBLIC_KEY\x10\x01\x12\x0f\n\x0b\x42Y_PASSWORD\x10\x02\x12\x10\n\x0c\x42Y_ALTERNATE\x10\x03\x12\n\n\x06\x42Y_BIO\x10\x04*-\n\x0ePasswordMethod\x12\x0b\n\x07\x45NTERED\x10\x00\x12\x0e\n\nBIOMETRICS\x10\x01*\xb9\x01\n\x11TwoFactorPushType\x12\x14\n\x10TWO_FA_PUSH_NONE\x10\x00\x12\x13\n\x0fTWO_FA_PUSH_SMS\x10\x01\x12\x16\n\x12TWO_FA_PUSH_KEEPER\x10\x02\x12\x18\n\x14TWO_FA_PUSH_DUO_PUSH\x10\x03\x12\x18\n\x14TWO_FA_PUSH_DUO_TEXT\x10\x04\x12\x18\n\x14TWO_FA_PUSH_DUO_CALL\x10\x05\x12\x13\n\x0fTWO_FA_PUSH_DNA\x10\x06*\xc3\x01\n\x12TwoFactorValueType\x12\x14\n\x10TWO_FA_CODE_NONE\x10\x00\x12\x14\n\x10TWO_FA_CODE_TOTP\x10\x01\x12\x13\n\x0fTWO_FA_CODE_SMS\x10\x02\x12\x13\n\x0fTWO_FA_CODE_DUO\x10\x03\x12\x13\n\x0fTWO_FA_CODE_RSA\x10\x04\x12\x13\n\x0fTWO_FA_RESP_U2F\x10\x05\x12\x18\n\x14TWO_FA_RESP_WEBAUTHN\x10\x06\x12\x13\n\x0fTWO_FA_CODE_DNA\x10\x07*\xe1\x01\n\x14TwoFactorChannelType\x12\x12\n\x0eTWO_FA_CT_NONE\x10\x00\x12\x12\n\x0eTWO_FA_CT_TOTP\x10\x01\x12\x11\n\rTWO_FA_CT_SMS\x10\x02\x12\x11\n\rTWO_FA_CT_DUO\x10\x03\x12\x11\n\rTWO_FA_CT_RSA\x10\x04\x12\x14\n\x10TWO_FA_CT_BACKUP\x10\x05\x12\x11\n\rTWO_FA_CT_U2F\x10\x06\x12\x16\n\x12TWO_FA_CT_WEBAUTHN\x10\x07\x12\x14\n\x10TWO_FA_CT_KEEPER\x10\x08\x12\x11\n\rTWO_FA_CT_DNA\x10\t*\xab\x01\n\x13TwoFactorExpiration\x12\x1a\n\x16TWO_FA_EXP_IMMEDIATELY\x10\x00\x12\x18\n\x14TWO_FA_EXP_5_MINUTES\x10\x01\x12\x17\n\x13TWO_FA_EXP_12_HOURS\x10\x02\x12\x17\n\x13TWO_FA_EXP_24_HOURS\x10\x03\x12\x16\n\x12TWO_FA_EXP_30_DAYS\x10\x04\x12\x14\n\x10TWO_FA_EXP_NEVER\x10\x05*@\n\x0bLicenseType\x12\t\n\x05VAULT\x10\x00\x12\x08\n\x04\x43HAT\x10\x01\x12\x0b\n\x07STORAGE\x10\x02\x12\x0f\n\x0b\x42REACHWATCH\x10\x03*i\n\x0bObjectTypes\x12\n\n\x06RECORD\x10\x00\x12\x16\n\x12SHARED_FOLDER_USER\x10\x01\x12\x16\n\x12SHARED_FOLDER_TEAM\x10\x02\x12\x0f\n\x0bUSER_FOLDER\x10\x03\x12\r\n\tTEAM_USER\x10\x04*\xa1\x02\n\x13\x45ncryptedObjectType\x12\x13\n\x0f\x45OT_UNSPECIFIED\x10\x00\x12\x12\n\x0e\x45OT_RECORD_KEY\x10\x01\x12\x1e\n\x1a\x45OT_SHARED_FOLDER_USER_KEY\x10\x02\x12\x1e\n\x1a\x45OT_SHARED_FOLDER_TEAM_KEY\x10\x03\x12\x15\n\x11\x45OT_TEAM_USER_KEY\x10\x04\x12\x17\n\x13\x45OT_USER_FOLDER_KEY\x10\x05\x12\x15\n\x11\x45OT_SECURITY_DATA\x10\x06\x12%\n!EOT_SECURITY_DATA_MASTER_PASSWORD\x10\x07\x12\x1c\n\x18\x45OT_EMERGENCY_ACCESS_KEY\x10\x08\x12\x15\n\x11\x45OT_V2_RECORD_KEY\x10\t*M\n\x1bMasterPasswordReentryStatus\x12\x0e\n\nMP_UNKNOWN\x10\x00\x12\x0e\n\nMP_SUCCESS\x10\x01\x12\x0e\n\nMP_FAILURE\x10\x02*`\n\x1b\x41lternateAuthenticationType\x12\x1d\n\x19\x41LTERNATE_MASTER_PASSWORD\x10\x00\x12\r\n\tBIOMETRIC\x10\x01\x12\x13\n\x0f\x41\x43\x43OUNT_RECOVER\x10\x02*\x9a\x02\n\x0cThrottleType\x12\x1b\n\x17PASSWORD_RETRY_THROTTLE\x10\x00\x12\"\n\x1ePASSWORD_RETRY_LEGACY_THROTTLE\x10\x01\x12\x13\n\x0fTWO_FA_THROTTLE\x10\x02\x12\x1a\n\x16TWO_FA_LEGACY_THROTTLE\x10\x03\x12\x15\n\x11QA_RETRY_THROTTLE\x10\x04\x12\x1c\n\x18\x41\x43\x43OUNT_RECOVER_THROTTLE\x10\x05\x12.\n*VALIDATE_DEVICE_VERIFICATION_CODE_THROTTLE\x10\x06\x12\x33\n/VALIDATE_CREATE_USER_VERIFICATION_CODE_THROTTLE\x10\x07*H\n\x06Region\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x06\n\x02\x65u\x10\x01\x12\x06\n\x02us\x10\x02\x12\t\n\x05usgov\x10\x03\x12\x06\n\x02\x61u\x10\x04\x12\x06\n\x02jp\x10\x05\x12\x06\n\x02\x63\x61\x10\x06*D\n\x14\x41pplicationShareType\x12\x15\n\x11SHARE_TYPE_RECORD\x10\x00\x12\x15\n\x11SHARE_TYPE_FOLDER\x10\x01*\xa4\x01\n\x15TimeLimitedAccessType\x12$\n INVALID_TIME_LIMITED_ACCESS_TYPE\x10\x00\x12\x19\n\x15USER_ACCESS_TO_RECORD\x10\x01\x12\'\n#USER_OR_TEAM_ACCESS_TO_SHAREDFOLDER\x10\x02\x12!\n\x1dRECORD_ACCESS_TO_SHAREDFOLDER\x10\x03*<\n\rBackupKeyType\x12\x12\n\x0e\x42KT_SEC_ANSWER\x10\x00\x12\x17\n\x13\x42KT_PASSPHRASE_HASH\x10\x01*W\n\rGenericStatus\x12\x0b\n\x07SUCCESS\x10\x00\x12\x12\n\x0eINVALID_OBJECT\x10\x01\x12\x12\n\x0e\x41LREADY_EXISTS\x10\x02\x12\x11\n\rACCESS_DENIED\x10\x03*N\n\x17\x41uthenticatorAttachment\x12\x12\n\x0e\x43ROSS_PLATFORM\x10\x00\x12\x0c\n\x08PLATFORM\x10\x01\x12\x11\n\rALL_SUPPORTED\x10\x02*-\n\x0ePasskeyPurpose\x12\x0c\n\x08PK_LOGIN\x10\x00\x12\r\n\tPK_REAUTH\x10\x01*K\n\x10\x43lientFormFactor\x12\x0c\n\x08\x46\x46_EMPTY\x10\x00\x12\x0c\n\x08\x46\x46_PHONE\x10\x01\x12\r\n\tFF_TABLET\x10\x02\x12\x0c\n\x08\x46\x46_WATCH\x10\x03\x42*\n\x18\x63om.keepersecurity.protoB\x0e\x41uthenticationb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10\x41PIRequest.proto\x12\x0e\x41uthentication\x1a\x10\x65nterprise.proto\"{\n\rQrcMessageKey\x12\x19\n\x11\x63lientEcPublicKey\x18\x01 \x01(\x0c\x12\x1c\n\x14mlKemEncapsulatedKey\x18\x02 \x01(\x0c\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\x12\x12\n\nmsgVersion\x18\x04 \x01(\x05\x12\x0f\n\x07\x65\x63KeyId\x18\x05 \x01(\x05\"\xe6\x01\n\nApiRequest\x12 \n\x18\x65ncryptedTransmissionKey\x18\x01 \x01(\x0c\x12\x13\n\x0bpublicKeyId\x18\x02 \x01(\x05\x12\x0e\n\x06locale\x18\x03 \x01(\t\x12\x18\n\x10\x65ncryptedPayload\x18\x04 \x01(\x0c\x12\x16\n\x0e\x65ncryptionType\x18\x05 \x01(\x05\x12\x11\n\trecaptcha\x18\x06 \x01(\t\x12\x16\n\x0esubEnvironment\x18\x07 \x01(\t\x12\x34\n\rqrcMessageKey\x18\x08 \x01(\x0b\x32\x1d.Authentication.QrcMessageKey\"j\n\x11\x41piRequestPayload\x12\x0f\n\x07payload\x18\x01 \x01(\x0c\x12\x1d\n\x15\x65ncryptedSessionToken\x18\x02 \x01(\x0c\x12\x11\n\ttimeToken\x18\x03 \x01(\x0c\x12\x12\n\napiVersion\x18\x04 \x01(\x05\"6\n\tTransform\x12\x0b\n\x03key\x18\x01 \x01(\x0c\x12\x1c\n\x14\x65ncryptedDeviceToken\x18\x02 \x01(\x0c\"\xa0\x01\n\rDeviceRequest\x12\x15\n\rclientVersion\x18\x01 \x01(\t\x12\x12\n\ndeviceName\x18\x02 \x01(\t\x12\x16\n\x0e\x64\x65vicePlatform\x18\x03 \x01(\t\x12:\n\x10\x63lientFormFactor\x18\x04 \x01(\x0e\x32 .Authentication.ClientFormFactor\x12\x10\n\x08username\x18\x05 \x01(\t\"T\n\x0b\x41uthRequest\x12\x15\n\rclientVersion\x18\x01 \x01(\t\x12\x10\n\x08username\x18\x02 \x01(\t\x12\x1c\n\x14\x65ncryptedDeviceToken\x18\x03 \x01(\x0c\"\xc3\x01\n\x14NewUserMinimumParams\x12\x19\n\x11minimumIterations\x18\x01 \x01(\x05\x12\x1a\n\x12passwordMatchRegex\x18\x02 \x03(\t\x12 \n\x18passwordMatchDescription\x18\x03 \x03(\t\x12\x1a\n\x12isEnterpriseDomain\x18\x04 \x01(\x08\x12\x1e\n\x16\x65nterpriseEccPublicKey\x18\x05 \x01(\x0c\x12\x16\n\x0e\x66orbidKeyType2\x18\x06 \x01(\x08\"\x89\x01\n\x0fPreLoginRequest\x12\x30\n\x0b\x61uthRequest\x18\x01 \x01(\x0b\x32\x1b.Authentication.AuthRequest\x12,\n\tloginType\x18\x02 \x01(\x0e\x32\x19.Authentication.LoginType\x12\x16\n\x0etwoFactorToken\x18\x03 \x01(\x0c\"\x80\x02\n\x0cLoginRequest\x12\x30\n\x0b\x61uthRequest\x18\x01 \x01(\x0b\x32\x1b.Authentication.AuthRequest\x12,\n\tloginType\x18\x02 \x01(\x0e\x32\x19.Authentication.LoginType\x12\x1f\n\x17\x61uthenticationHashPrime\x18\x03 \x01(\x0c\x12\x1b\n\x13\x65ncryptedLoginToken\x18\x04 \x01(\x0c\x12\x14\n\x0c\x61uthResponse\x18\x05 \x01(\x0c\x12\x16\n\x0emcEnterpriseId\x18\x06 \x01(\x05\x12\x12\n\npush_token\x18\x07 \x01(\t\x12\x10\n\x08platform\x18\x08 \x01(\t\"\\\n\x0e\x44\x65viceResponse\x12\x1c\n\x14\x65ncryptedDeviceToken\x18\x01 \x01(\x0c\x12,\n\x06status\x18\x02 \x01(\x0e\x32\x1c.Authentication.DeviceStatus\"V\n\x04Salt\x12\x12\n\niterations\x18\x01 \x01(\x05\x12\x0c\n\x04salt\x18\x02 \x01(\x0c\x12\x11\n\talgorithm\x18\x03 \x01(\x05\x12\x0b\n\x03uid\x18\x04 \x01(\x0c\x12\x0c\n\x04name\x18\x05 \x01(\t\" \n\x10TwoFactorChannel\x12\x0c\n\x04type\x18\x01 \x01(\x05\"\xfc\x02\n\x11StartLoginRequest\x12\x1c\n\x14\x65ncryptedDeviceToken\x18\x01 \x01(\x0c\x12\x10\n\x08username\x18\x02 \x01(\t\x12\x15\n\rclientVersion\x18\x03 \x01(\t\x12\x19\n\x11messageSessionUid\x18\x04 \x01(\x0c\x12\x1b\n\x13\x65ncryptedLoginToken\x18\x05 \x01(\x0c\x12,\n\tloginType\x18\x06 \x01(\x0e\x32\x19.Authentication.LoginType\x12\x16\n\x0emcEnterpriseId\x18\x07 \x01(\x05\x12\x30\n\x0bloginMethod\x18\x08 \x01(\x0e\x32\x1b.Authentication.LoginMethod\x12\x15\n\rforceNewLogin\x18\t \x01(\x08\x12\x11\n\tcloneCode\x18\n \x01(\x0c\x12\x18\n\x10v2TwoFactorToken\x18\x0b \x01(\t\x12\x12\n\naccountUid\x18\x0c \x01(\x0c\x12\x18\n\x10\x66romSessionToken\x18\r \x01(\x0c\"\xa7\x04\n\rLoginResponse\x12.\n\nloginState\x18\x01 \x01(\x0e\x32\x1a.Authentication.LoginState\x12\x12\n\naccountUid\x18\x02 \x01(\x0c\x12\x17\n\x0fprimaryUsername\x18\x03 \x01(\t\x12\x18\n\x10\x65ncryptedDataKey\x18\x04 \x01(\x0c\x12\x42\n\x14\x65ncryptedDataKeyType\x18\x05 \x01(\x0e\x32$.Authentication.EncryptedDataKeyType\x12\x1b\n\x13\x65ncryptedLoginToken\x18\x06 \x01(\x0c\x12\x1d\n\x15\x65ncryptedSessionToken\x18\x07 \x01(\x0c\x12:\n\x10sessionTokenType\x18\x08 \x01(\x0e\x32 .Authentication.SessionTokenType\x12\x0f\n\x07message\x18\t \x01(\t\x12\x0b\n\x03url\x18\n \x01(\t\x12\x36\n\x08\x63hannels\x18\x0b \x03(\x0b\x32$.Authentication.TwoFactorChannelInfo\x12\"\n\x04salt\x18\x0c \x03(\x0b\x32\x14.Authentication.Salt\x12\x11\n\tcloneCode\x18\r \x01(\x0c\x12\x1a\n\x12stateSpecificValue\x18\x0e \x01(\t\x12\x18\n\x10ssoClientVersion\x18\x0f \x01(\t\x12 \n\x18sessionTokenTypeModifier\x18\x10 \x01(\t\"v\n\x11SwitchListElement\x12\x10\n\x08username\x18\x01 \x01(\t\x12\x10\n\x08\x66ullName\x18\x02 \x01(\t\x12\x14\n\x0c\x61uthRequired\x18\x03 \x01(\x08\x12\x10\n\x08isLinked\x18\x04 \x01(\x08\x12\x15\n\rprofilePicUrl\x18\x05 \x01(\t\"I\n\x12SwitchListResponse\x12\x33\n\x08\x65lements\x18\x01 \x03(\x0b\x32!.Authentication.SwitchListElement\"\x8c\x01\n\x0bSsoUserInfo\x12\x13\n\x0b\x63ompanyName\x18\x01 \x01(\t\x12\x13\n\x0bsamlRequest\x18\x02 \x01(\t\x12\x17\n\x0fsamlRequestType\x18\x03 \x01(\t\x12\x15\n\rssoDomainName\x18\x04 \x01(\t\x12\x10\n\x08loginUrl\x18\x05 \x01(\t\x12\x11\n\tlogoutUrl\x18\x06 \x01(\t\"\xd6\x01\n\x10PreLoginResponse\x12\x32\n\x0c\x64\x65viceStatus\x18\x01 \x01(\x0e\x32\x1c.Authentication.DeviceStatus\x12\"\n\x04salt\x18\x02 \x03(\x0b\x32\x14.Authentication.Salt\x12\x38\n\x0eOBSOLETE_FIELD\x18\x03 \x03(\x0b\x32 .Authentication.TwoFactorChannel\x12\x30\n\x0bssoUserInfo\x18\x04 \x01(\x0b\x32\x1b.Authentication.SsoUserInfo\"&\n\x12LoginAsUserRequest\x12\x10\n\x08username\x18\x01 \x01(\t\"W\n\x13LoginAsUserResponse\x12\x1d\n\x15\x65ncryptedSessionToken\x18\x01 \x01(\x0c\x12!\n\x19\x65ncryptedSharedAccountKey\x18\x02 \x01(\x0c\"\x84\x01\n\x17ValidateAuthHashRequest\x12\x36\n\x0epasswordMethod\x18\x01 \x01(\x0e\x32\x1e.Authentication.PasswordMethod\x12\x14\n\x0c\x61uthResponse\x18\x02 \x01(\x0c\x12\x1b\n\x13\x65ncryptedLoginToken\x18\x03 \x01(\x0c\"\xc4\x02\n\x14TwoFactorChannelInfo\x12\x39\n\x0b\x63hannelType\x18\x01 \x01(\x0e\x32$.Authentication.TwoFactorChannelType\x12\x13\n\x0b\x63hannel_uid\x18\x02 \x01(\x0c\x12\x13\n\x0b\x63hannelName\x18\x03 \x01(\t\x12\x11\n\tchallenge\x18\x04 \x01(\t\x12\x14\n\x0c\x63\x61pabilities\x18\x05 \x03(\t\x12\x13\n\x0bphoneNumber\x18\x06 \x01(\t\x12:\n\rmaxExpiration\x18\x07 \x01(\x0e\x32#.Authentication.TwoFactorExpiration\x12\x11\n\tcreatedOn\x18\x08 \x01(\x03\x12:\n\rlastFrequency\x18\t \x01(\x0e\x32#.Authentication.TwoFactorExpiration\"d\n\x12TwoFactorDuoStatus\x12\x14\n\x0c\x63\x61pabilities\x18\x01 \x03(\t\x12\x13\n\x0bphoneNumber\x18\x02 \x01(\t\x12\x12\n\nenroll_url\x18\x03 \x01(\t\x12\x0f\n\x07message\x18\x04 \x01(\t\"\xc7\x01\n\x13TwoFactorAddRequest\x12\x39\n\x0b\x63hannelType\x18\x01 \x01(\x0e\x32$.Authentication.TwoFactorChannelType\x12\x13\n\x0b\x63hannel_uid\x18\x02 \x01(\x0c\x12\x13\n\x0b\x63hannelName\x18\x03 \x01(\t\x12\x13\n\x0bphoneNumber\x18\x04 \x01(\t\x12\x36\n\x0b\x64uoPushType\x18\x05 \x01(\x0e\x32!.Authentication.TwoFactorPushType\"B\n\x16TwoFactorRenameRequest\x12\x13\n\x0b\x63hannel_uid\x18\x01 \x01(\x0c\x12\x13\n\x0b\x63hannelName\x18\x02 \x01(\t\"=\n\x14TwoFactorAddResponse\x12\x11\n\tchallenge\x18\x01 \x01(\t\x12\x12\n\nbackupKeys\x18\x02 \x03(\t\"-\n\x16TwoFactorDeleteRequest\x12\x13\n\x0b\x63hannel_uid\x18\x01 \x01(\x0c\"a\n\x15TwoFactorListResponse\x12\x36\n\x08\x63hannels\x18\x01 \x03(\x0b\x32$.Authentication.TwoFactorChannelInfo\x12\x10\n\x08\x65xpireOn\x18\x02 \x01(\x03\"Y\n TwoFactorUpdateExpirationRequest\x12\x35\n\x08\x65xpireIn\x18\x01 \x01(\x0e\x32#.Authentication.TwoFactorExpiration\"\xc9\x01\n\x18TwoFactorValidateRequest\x12\x1b\n\x13\x65ncryptedLoginToken\x18\x01 \x01(\x0c\x12\x35\n\tvalueType\x18\x02 \x01(\x0e\x32\".Authentication.TwoFactorValueType\x12\r\n\x05value\x18\x03 \x01(\t\x12\x13\n\x0b\x63hannel_uid\x18\x04 \x01(\x0c\x12\x35\n\x08\x65xpireIn\x18\x05 \x01(\x0e\x32#.Authentication.TwoFactorExpiration\"8\n\x19TwoFactorValidateResponse\x12\x1b\n\x13\x65ncryptedLoginToken\x18\x01 \x01(\x0c\"\xb8\x01\n\x18TwoFactorSendPushRequest\x12\x1b\n\x13\x65ncryptedLoginToken\x18\x01 \x01(\x0c\x12\x33\n\x08pushType\x18\x02 \x01(\x0e\x32!.Authentication.TwoFactorPushType\x12\x13\n\x0b\x63hannel_uid\x18\x03 \x01(\x0c\x12\x35\n\x08\x65xpireIn\x18\x04 \x01(\x0e\x32#.Authentication.TwoFactorExpiration\"\x83\x01\n\x07License\x12\x0f\n\x07\x63reated\x18\x01 \x01(\x03\x12\x12\n\nexpiration\x18\x02 \x01(\x03\x12\x34\n\rlicenseStatus\x18\x03 \x01(\x0e\x32\x1d.Authentication.LicenseStatus\x12\x0c\n\x04paid\x18\x04 \x01(\x08\x12\x0f\n\x07message\x18\x05 \x01(\t\"G\n\x0fOwnerlessRecord\x12\x11\n\trecordUid\x18\x01 \x01(\x0c\x12\x11\n\trecordKey\x18\x02 \x01(\x0c\x12\x0e\n\x06status\x18\x03 \x01(\x05\"L\n\x10OwnerlessRecords\x12\x38\n\x0fownerlessRecord\x18\x01 \x03(\x0b\x32\x1f.Authentication.OwnerlessRecord\"\xd7\x01\n\x0fUserAuthRequest\x12\x0b\n\x03uid\x18\x01 \x01(\x0c\x12\x0c\n\x04salt\x18\x02 \x01(\x0c\x12\x12\n\niterations\x18\x03 \x01(\x05\x12\x1a\n\x12\x65ncryptedClientKey\x18\x04 \x01(\x0c\x12\x10\n\x08\x61uthHash\x18\x05 \x01(\x0c\x12\x18\n\x10\x65ncryptedDataKey\x18\x06 \x01(\x0c\x12,\n\tloginType\x18\x07 \x01(\x0e\x32\x19.Authentication.LoginType\x12\x0c\n\x04name\x18\x08 \x01(\t\x12\x11\n\talgorithm\x18\t \x01(\x05\"\x19\n\nUidRequest\x12\x0b\n\x03uid\x18\x01 \x03(\x0c\"\xff\x01\n\x13\x44\x65viceUpdateRequest\x12\x1c\n\x14\x65ncryptedDeviceToken\x18\x01 \x01(\x0c\x12\x15\n\rclientVersion\x18\x02 \x01(\t\x12\x12\n\ndeviceName\x18\x03 \x01(\t\x12\x17\n\x0f\x64\x65vicePublicKey\x18\x04 \x01(\x0c\x12\x32\n\x0c\x64\x65viceStatus\x18\x05 \x01(\x0e\x32\x1c.Authentication.DeviceStatus\x12\x16\n\x0e\x64\x65vicePlatform\x18\x06 \x01(\t\x12:\n\x10\x63lientFormFactor\x18\x07 \x01(\x0e\x32 .Authentication.ClientFormFactor\"\x80\x02\n\x14\x44\x65viceUpdateResponse\x12\x1c\n\x14\x65ncryptedDeviceToken\x18\x01 \x01(\x0c\x12\x15\n\rclientVersion\x18\x02 \x01(\t\x12\x12\n\ndeviceName\x18\x03 \x01(\t\x12\x17\n\x0f\x64\x65vicePublicKey\x18\x04 \x01(\x0c\x12\x32\n\x0c\x64\x65viceStatus\x18\x05 \x01(\x0e\x32\x1c.Authentication.DeviceStatus\x12\x16\n\x0e\x64\x65vicePlatform\x18\x06 \x01(\t\x12:\n\x10\x63lientFormFactor\x18\x07 \x01(\x0e\x32 .Authentication.ClientFormFactor\"\xd5\x01\n\x1dRegisterDeviceInRegionRequest\x12\x1c\n\x14\x65ncryptedDeviceToken\x18\x01 \x01(\x0c\x12\x15\n\rclientVersion\x18\x02 \x01(\t\x12\x12\n\ndeviceName\x18\x03 \x01(\t\x12\x17\n\x0f\x64\x65vicePublicKey\x18\x04 \x01(\x0c\x12\x16\n\x0e\x64\x65vicePlatform\x18\x05 \x01(\t\x12:\n\x10\x63lientFormFactor\x18\x06 \x01(\x0e\x32 .Authentication.ClientFormFactor\"\xf8\x02\n\x13RegistrationRequest\x12\x30\n\x0b\x61uthRequest\x18\x01 \x01(\x0b\x32\x1b.Authentication.AuthRequest\x12\x38\n\x0fuserAuthRequest\x18\x02 \x01(\x0b\x32\x1f.Authentication.UserAuthRequest\x12\x1a\n\x12\x65ncryptedClientKey\x18\x03 \x01(\x0c\x12\x1b\n\x13\x65ncryptedPrivateKey\x18\x04 \x01(\x0c\x12\x11\n\tpublicKey\x18\x05 \x01(\x0c\x12\x18\n\x10verificationCode\x18\x06 \x01(\t\x12\x1e\n\x16\x64\x65precatedAuthHashHash\x18\x07 \x01(\x0c\x12$\n\x1c\x64\x65precatedEncryptedClientKey\x18\x08 \x01(\x0c\x12%\n\x1d\x64\x65precatedEncryptedPrivateKey\x18\t \x01(\x0c\x12\"\n\x1a\x64\x65precatedEncryptionParams\x18\n \x01(\x0c\"\xd0\x01\n\x16\x43onvertUserToV3Request\x12\x30\n\x0b\x61uthRequest\x18\x01 \x01(\x0b\x32\x1b.Authentication.AuthRequest\x12\x38\n\x0fuserAuthRequest\x18\x02 \x01(\x0b\x32\x1f.Authentication.UserAuthRequest\x12\x1a\n\x12\x65ncryptedClientKey\x18\x03 \x01(\x0c\x12\x1b\n\x13\x65ncryptedPrivateKey\x18\x04 \x01(\x0c\x12\x11\n\tpublicKey\x18\x05 \x01(\x0c\"$\n\x10RevisionResponse\x12\x10\n\x08revision\x18\x01 \x01(\x03\"&\n\x12\x43hangeEmailRequest\x12\x10\n\x08newEmail\x18\x01 \x01(\t\"8\n\x13\x43hangeEmailResponse\x12!\n\x19\x65ncryptedChangeEmailToken\x18\x01 \x01(\x0c\"6\n\x1d\x45mailVerificationLinkResponse\x12\x15\n\remailVerified\x18\x01 \x01(\x08\")\n\x0cSecurityData\x12\x0b\n\x03uid\x18\x01 \x01(\x0c\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"@\n\x11SecurityScoreData\x12\x0b\n\x03uid\x18\x01 \x01(\x0c\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x12\x10\n\x08revision\x18\x03 \x01(\x03\"\x8b\x02\n\x13SecurityDataRequest\x12\x38\n\x12recordSecurityData\x18\x01 \x03(\x0b\x32\x1c.Authentication.SecurityData\x12@\n\x1amasterPasswordSecurityData\x18\x02 \x03(\x0b\x32\x1c.Authentication.SecurityData\x12\x34\n\x0e\x65ncryptionType\x18\x03 \x01(\x0e\x32\x1c.Enterprise.EncryptedKeyType\x12\x42\n\x17recordSecurityScoreData\x18\x04 \x03(\x0b\x32!.Authentication.SecurityScoreData\"\xc6\x02\n\x1dSecurityReportIncrementalData\x12\x18\n\x10\x65nterpriseUserId\x18\x01 \x01(\x03\x12\x1b\n\x13\x63urrentSecurityData\x18\x02 \x01(\x0c\x12#\n\x1b\x63urrentSecurityDataRevision\x18\x03 \x01(\x03\x12\x17\n\x0foldSecurityData\x18\x04 \x01(\x0c\x12\x1f\n\x17oldSecurityDataRevision\x18\x05 \x01(\x03\x12?\n\x19\x63urrentDataEncryptionType\x18\x06 \x01(\x0e\x32\x1c.Enterprise.EncryptedKeyType\x12;\n\x15oldDataEncryptionType\x18\x07 \x01(\x0e\x32\x1c.Enterprise.EncryptedKeyType\x12\x11\n\trecordUid\x18\x08 \x01(\x0c\"\x9f\x02\n\x0eSecurityReport\x12\x18\n\x10\x65nterpriseUserId\x18\x01 \x01(\x03\x12\x1b\n\x13\x65ncryptedReportData\x18\x02 \x01(\x0c\x12\x10\n\x08revision\x18\x03 \x01(\x03\x12\x11\n\ttwoFactor\x18\x04 \x01(\t\x12\x11\n\tlastLogin\x18\x05 \x01(\x03\x12\x1e\n\x16numberOfReusedPassword\x18\x06 \x01(\x05\x12T\n\x1dsecurityReportIncrementalData\x18\x07 \x03(\x0b\x32-.Authentication.SecurityReportIncrementalData\x12\x0e\n\x06userId\x18\x08 \x01(\x05\x12\x18\n\x10hasOldEncryption\x18\t \x01(\x08\"n\n\x19SecurityReportSaveRequest\x12\x36\n\x0esecurityReport\x18\x01 \x03(\x0b\x32\x1e.Authentication.SecurityReport\x12\x19\n\x11\x63ontinuationToken\x18\x02 \x01(\x0c\")\n\x15SecurityReportRequest\x12\x10\n\x08\x66romPage\x18\x01 \x01(\x03\"\xf5\x01\n\x16SecurityReportResponse\x12\x1c\n\x14\x65nterprisePrivateKey\x18\x01 \x01(\x0c\x12\x36\n\x0esecurityReport\x18\x02 \x03(\x0b\x32\x1e.Authentication.SecurityReport\x12\x14\n\x0c\x61sOfRevision\x18\x03 \x01(\x03\x12\x10\n\x08\x66romPage\x18\x04 \x01(\x03\x12\x0e\n\x06toPage\x18\x05 \x01(\x03\x12\x10\n\x08\x63omplete\x18\x06 \x01(\x08\x12\x1f\n\x17\x65nterpriseEccPrivateKey\x18\x07 \x01(\x0c\x12\x1a\n\x12hasIncrementalData\x18\x08 \x01(\x08\";\n\x1eIncrementalSecurityDataRequest\x12\x19\n\x11\x63ontinuationToken\x18\x01 \x01(\x0c\"\x92\x01\n\x1fIncrementalSecurityDataResponse\x12T\n\x1dsecurityReportIncrementalData\x18\x01 \x03(\x0b\x32-.Authentication.SecurityReportIncrementalData\x12\x19\n\x11\x63ontinuationToken\x18\x02 \x01(\x0c\"\'\n\x16ReusedPasswordsRequest\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\">\n\x14SummaryConsoleReport\x12\x12\n\nreportType\x18\x01 \x01(\x05\x12\x12\n\nreportData\x18\x02 \x01(\x0c\"|\n\x12\x43hangeToKeyTypeOne\x12/\n\nobjectType\x18\x01 \x01(\x0e\x32\x1b.Authentication.ObjectTypes\x12\x12\n\nprimaryUid\x18\x02 \x01(\x0c\x12\x14\n\x0csecondaryUid\x18\x03 \x01(\x0c\x12\x0b\n\x03key\x18\x04 \x01(\x0c\"[\n\x19\x43hangeToKeyTypeOneRequest\x12>\n\x12\x63hangeToKeyTypeOne\x18\x01 \x03(\x0b\x32\".Authentication.ChangeToKeyTypeOne\"U\n\x18\x43hangeToKeyTypeOneStatus\x12\x0b\n\x03uid\x18\x01 \x01(\x0c\x12\x0c\n\x04type\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\t\x12\x0e\n\x06reason\x18\x04 \x01(\t\"h\n\x1a\x43hangeToKeyTypeOneResponse\x12J\n\x18\x63hangeToKeyTypeOneStatus\x18\x01 \x03(\x0b\x32(.Authentication.ChangeToKeyTypeOneStatus\"\xb9\x01\n\x18GetChangeKeyTypesRequest\x12=\n\x10onlyTheseObjects\x18\x01 \x03(\x0e\x32#.Authentication.EncryptedObjectType\x12\r\n\x05limit\x18\x02 \x01(\x05\x12\x1a\n\x12includeRecommended\x18\x03 \x01(\x08\x12\x13\n\x0bincludeKeys\x18\x04 \x01(\x08\x12\x1e\n\x16includeAllowedKeyTypes\x18\x05 \x01(\x08\"\x82\x01\n\x19GetChangeKeyTypesResponse\x12+\n\x04keys\x18\x01 \x03(\x0b\x32\x1d.Authentication.ChangeKeyType\x12\x38\n\x0f\x61llowedKeyTypes\x18\x02 \x03(\x0b\x32\x1f.Authentication.AllowedKeyTypes\"\x81\x01\n\x0f\x41llowedKeyTypes\x12\x37\n\nobjectType\x18\x01 \x01(\x0e\x32#.Authentication.EncryptedObjectType\x12\x35\n\x0f\x61llowedKeyTypes\x18\x02 \x03(\x0e\x32\x1c.Enterprise.EncryptedKeyType\"=\n\x0e\x43hangeKeyTypes\x12+\n\x04keys\x18\x01 \x03(\x0b\x32\x1d.Authentication.ChangeKeyType\"\xd6\x01\n\rChangeKeyType\x12\x37\n\nobjectType\x18\x01 \x01(\x0e\x32#.Authentication.EncryptedObjectType\x12\x0b\n\x03uid\x18\x02 \x01(\x0c\x12\x14\n\x0csecondaryUid\x18\x03 \x01(\x0c\x12\x0b\n\x03key\x18\x04 \x01(\x0c\x12-\n\x07keyType\x18\x05 \x01(\x0e\x32\x1c.Enterprise.EncryptedKeyType\x12-\n\x06status\x18\x06 \x01(\x0e\x32\x1d.Authentication.GenericStatus\"!\n\x06SetKey\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x0b\n\x03key\x18\x02 \x01(\x0c\"5\n\rSetKeyRequest\x12$\n\x04keys\x18\x01 \x03(\x0b\x32\x16.Authentication.SetKey\"\x92\x05\n\x11\x43reateUserRequest\x12\x10\n\x08username\x18\x01 \x01(\t\x12\x14\n\x0c\x61uthVerifier\x18\x02 \x01(\x0c\x12\x18\n\x10\x65ncryptionParams\x18\x03 \x01(\x0c\x12\x14\n\x0crsaPublicKey\x18\x04 \x01(\x0c\x12\x1e\n\x16rsaEncryptedPrivateKey\x18\x05 \x01(\x0c\x12\x14\n\x0c\x65\x63\x63PublicKey\x18\x06 \x01(\x0c\x12\x1e\n\x16\x65\x63\x63\x45ncryptedPrivateKey\x18\x07 \x01(\x0c\x12\x1c\n\x14\x65ncryptedDeviceToken\x18\x08 \x01(\x0c\x12\x1a\n\x12\x65ncryptedClientKey\x18\t \x01(\x0c\x12\x15\n\rclientVersion\x18\n \x01(\t\x12\x1e\n\x16\x65ncryptedDeviceDataKey\x18\x0b \x01(\x0c\x12\x1b\n\x13\x65ncryptedLoginToken\x18\x0c \x01(\x0c\x12\x19\n\x11messageSessionUid\x18\r \x01(\x0c\x12\x17\n\x0finstallReferrer\x18\x0e \x01(\t\x12\x0e\n\x06mccMNC\x18\x0f \x01(\x05\x12\x0b\n\x03mfg\x18\x10 \x01(\t\x12\r\n\x05model\x18\x11 \x01(\t\x12\r\n\x05\x62rand\x18\x12 \x01(\t\x12\x0f\n\x07product\x18\x13 \x01(\t\x12\x0e\n\x06\x64\x65vice\x18\x14 \x01(\t\x12\x0f\n\x07\x63\x61rrier\x18\x15 \x01(\t\x12\x18\n\x10verificationCode\x18\x16 \x01(\t\x12\x42\n\x16\x65nterpriseRegistration\x18\x17 \x01(\x0b\x32\".Enterprise.EnterpriseRegistration\x12\"\n\x1a\x65ncryptedVerificationToken\x18\x18 \x01(\x0c\x12\x1e\n\x16\x65nterpriseUsersDataKey\x18\x19 \x01(\x0c\"W\n!NodeEnforcementAddOrUpdateRequest\x12\x0e\n\x06nodeId\x18\x01 \x01(\x03\x12\x13\n\x0b\x65nforcement\x18\x02 \x01(\t\x12\r\n\x05value\x18\x03 \x01(\t\"C\n\x1cNodeEnforcementRemoveRequest\x12\x0e\n\x06nodeId\x18\x01 \x01(\x03\x12\x13\n\x0b\x65nforcement\x18\x02 \x01(\t\"\x9f\x01\n\x0f\x41piRequestByKey\x12\r\n\x05keyId\x18\x01 \x01(\x05\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\x12\x10\n\x08username\x18\x03 \x01(\t\x12\x0e\n\x06locale\x18\x04 \x01(\t\x12<\n\x11supportedLanguage\x18\x05 \x01(\x0e\x32!.Authentication.SupportedLanguage\x12\x0c\n\x04type\x18\x06 \x01(\x05\"\xc7\x01\n\x15\x41piRequestByKAtoKAKey\x12,\n\x0csourceRegion\x18\x01 \x01(\x0e\x32\x16.Authentication.Region\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\x12<\n\x11supportedLanguage\x18\x03 \x01(\x0e\x32!.Authentication.SupportedLanguage\x12\x31\n\x11\x64\x65stinationRegion\x18\x04 \x01(\x0e\x32\x16.Authentication.Region\".\n\x0fMemcacheRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0e\n\x06userId\x18\x02 \x01(\x05\".\n\x10MemcacheResponse\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"w\n\x1cMasterPasswordReentryRequest\x12\x16\n\x0epbkdf2Password\x18\x01 \x01(\t\x12?\n\x06\x61\x63tion\x18\x02 \x01(\x0e\x32/.Authentication.MasterPasswordReentryActionType\"\\\n\x1dMasterPasswordReentryResponse\x12;\n\x06status\x18\x01 \x01(\x0e\x32+.Authentication.MasterPasswordReentryStatus\"\xc5\x01\n\x19\x44\x65viceRegistrationRequest\x12\x15\n\rclientVersion\x18\x01 \x01(\t\x12\x12\n\ndeviceName\x18\x02 \x01(\t\x12\x17\n\x0f\x64\x65vicePublicKey\x18\x03 \x01(\x0c\x12\x16\n\x0e\x64\x65vicePlatform\x18\x04 \x01(\t\x12:\n\x10\x63lientFormFactor\x18\x05 \x01(\x0e\x32 .Authentication.ClientFormFactor\x12\x10\n\x08username\x18\x06 \x01(\t\"\x9a\x01\n\x19\x44\x65viceVerificationRequest\x12\x1c\n\x14\x65ncryptedDeviceToken\x18\x01 \x01(\x0c\x12\x10\n\x08username\x18\x02 \x01(\t\x12\x1b\n\x13verificationChannel\x18\x03 \x01(\t\x12\x19\n\x11messageSessionUid\x18\x04 \x01(\x0c\x12\x15\n\rclientVersion\x18\x05 \x01(\t\"\xb2\x01\n\x1a\x44\x65viceVerificationResponse\x12\x1c\n\x14\x65ncryptedDeviceToken\x18\x01 \x01(\x0c\x12\x10\n\x08username\x18\x02 \x01(\t\x12\x19\n\x11messageSessionUid\x18\x03 \x01(\x0c\x12\x15\n\rclientVersion\x18\x04 \x01(\t\x12\x32\n\x0c\x64\x65viceStatus\x18\x05 \x01(\x0e\x32\x1c.Authentication.DeviceStatus\"\xc8\x01\n\x15\x44\x65viceApprovalRequest\x12\r\n\x05\x65mail\x18\x01 \x01(\t\x12\x18\n\x10twoFactorChannel\x18\x02 \x01(\t\x12\x15\n\rclientVersion\x18\x03 \x01(\t\x12\x0e\n\x06locale\x18\x04 \x01(\t\x12\x1c\n\x14\x65ncryptedDeviceToken\x18\x05 \x01(\x0c\x12\x10\n\x08totpCode\x18\x06 \x01(\t\x12\x10\n\x08\x64\x65viceIp\x18\x07 \x01(\t\x12\x1d\n\x15\x64\x65viceTokenExpireDays\x18\x08 \x01(\t\"9\n\x16\x44\x65viceApprovalResponse\x12\x1f\n\x17\x65ncryptedTwoFactorToken\x18\x01 \x01(\x0c\"~\n\x14\x41pproveDeviceRequest\x12\x1c\n\x14\x65ncryptedDeviceToken\x18\x01 \x01(\x0c\x12\x1e\n\x16\x65ncryptedDeviceDataKey\x18\x02 \x01(\x0c\x12\x14\n\x0c\x64\x65nyApproval\x18\x03 \x01(\x08\x12\x12\n\nlinkDevice\x18\x04 \x01(\x08\"E\n\x1a\x45nterpriseUserAliasRequest\x12\x18\n\x10\x65nterpriseUserId\x18\x01 \x01(\x03\x12\r\n\x05\x61lias\x18\x02 \x01(\t\"Y\n\x1d\x45nterpriseUserAddAliasRequest\x12\x18\n\x10\x65nterpriseUserId\x18\x01 \x01(\x03\x12\r\n\x05\x61lias\x18\x02 \x01(\t\x12\x0f\n\x07primary\x18\x03 \x01(\x08\"w\n\x1f\x45nterpriseUserAddAliasRequestV2\x12T\n\x1d\x65nterpriseUserAddAliasRequest\x18\x01 \x03(\x0b\x32-.Authentication.EnterpriseUserAddAliasRequest\"H\n\x1c\x45nterpriseUserAddAliasStatus\x12\x18\n\x10\x65nterpriseUserId\x18\x01 \x01(\x03\x12\x0e\n\x06status\x18\x02 \x01(\t\"^\n\x1e\x45nterpriseUserAddAliasResponse\x12<\n\x06status\x18\x01 \x03(\x0b\x32,.Authentication.EnterpriseUserAddAliasStatus\"&\n\x06\x44\x65vice\x12\x1c\n\x14\x65ncryptedDeviceToken\x18\x01 \x01(\x0c\"\\\n\x1cRegisterDeviceDataKeyRequest\x12\x1c\n\x14\x65ncryptedDeviceToken\x18\x01 \x01(\x0c\x12\x1e\n\x16\x65ncryptedDeviceDataKey\x18\x02 \x01(\x0c\"n\n)ValidateCreateUserVerificationCodeRequest\x12\x10\n\x08username\x18\x01 \x01(\t\x12\x15\n\rclientVersion\x18\x02 \x01(\t\x12\x18\n\x10verificationCode\x18\x03 \x01(\t\"\xa3\x01\n%ValidateDeviceVerificationCodeRequest\x12\x10\n\x08username\x18\x01 \x01(\t\x12\x15\n\rclientVersion\x18\x02 \x01(\t\x12\x18\n\x10verificationCode\x18\x03 \x01(\t\x12\x19\n\x11messageSessionUid\x18\x04 \x01(\x0c\x12\x1c\n\x14\x65ncryptedDeviceToken\x18\x05 \x01(\x0c\"Y\n\x19SendSessionMessageRequest\x12\x19\n\x11messageSessionUid\x18\x01 \x01(\x0c\x12\x0f\n\x07\x63ommand\x18\x02 \x01(\t\x12\x10\n\x08username\x18\x03 \x01(\t\"M\n\x11GlobalUserAccount\x12\x10\n\x08username\x18\x01 \x01(\t\x12\x12\n\naccountUid\x18\x02 \x01(\x0c\x12\x12\n\nregionName\x18\x03 \x01(\t\"7\n\x0f\x41\x63\x63ountUsername\x12\x10\n\x08username\x18\x01 \x01(\t\x12\x12\n\ndateActive\x18\x02 \x01(\t\"P\n\x19SsoServiceProviderRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x15\n\rclientVersion\x18\x02 \x01(\t\x12\x0e\n\x06locale\x18\x03 \x01(\t\"a\n\x1aSsoServiceProviderResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05spUrl\x18\x02 \x01(\t\x12\x0f\n\x07isCloud\x18\x03 \x01(\x08\x12\x15\n\rclientVersion\x18\x04 \x01(\t\"4\n\x12UserSettingRequest\x12\x0f\n\x07setting\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"f\n\rThrottleState\x12*\n\x04type\x18\x01 \x01(\x0e\x32\x1c.Authentication.ThrottleType\x12\x0b\n\x03key\x18\x02 \x01(\t\x12\r\n\x05value\x18\x03 \x01(\t\x12\r\n\x05state\x18\x04 \x01(\x08\"\xb5\x01\n\x0eThrottleState2\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x16\n\x0ekeyDescription\x18\x02 \x01(\t\x12\r\n\x05value\x18\x03 \x01(\t\x12\x18\n\x10valueDescription\x18\x04 \x01(\t\x12\x12\n\nidentifier\x18\x05 \x01(\t\x12\x0e\n\x06locked\x18\x06 \x01(\x08\x12\x1a\n\x12includedInAllClear\x18\x07 \x01(\x08\x12\x15\n\rexpireSeconds\x18\x08 \x01(\x05\"\x97\x01\n\x11\x44\x65viceInformation\x12\x10\n\x08\x64\x65viceId\x18\x01 \x01(\x03\x12\x12\n\ndeviceName\x18\x02 \x01(\t\x12\x15\n\rclientVersion\x18\x03 \x01(\t\x12\x11\n\tlastLogin\x18\x04 \x01(\x03\x12\x32\n\x0c\x64\x65viceStatus\x18\x05 \x01(\x0e\x32\x1c.Authentication.DeviceStatus\"*\n\x0bUserSetting\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x08\".\n\x12UserDataKeyRequest\x12\x18\n\x10\x65nterpriseUserId\x18\x01 \x03(\x03\"+\n\x18UserDataKeyByNodeRequest\x12\x0f\n\x07nodeIds\x18\x01 \x03(\x03\"\x80\x01\n\x1b\x45nterpriseUserIdDataKeyPair\x12\x18\n\x10\x65nterpriseUserId\x18\x01 \x01(\x03\x12\x18\n\x10\x65ncryptedDataKey\x18\x02 \x01(\x0c\x12-\n\x07keyType\x18\x03 \x01(\x0e\x32\x1c.Enterprise.EncryptedKeyType\"\x95\x01\n\x0bUserDataKey\x12\x0e\n\x06roleId\x18\x01 \x01(\x03\x12\x0f\n\x07roleKey\x18\x02 \x01(\x0c\x12\x12\n\nprivateKey\x18\x03 \x01(\t\x12Q\n\x1c\x65nterpriseUserIdDataKeyPairs\x18\x04 \x03(\x0b\x32+.Authentication.EnterpriseUserIdDataKeyPair\"z\n\x13UserDataKeyResponse\x12\x31\n\x0cuserDataKeys\x18\x01 \x03(\x0b\x32\x1b.Authentication.UserDataKey\x12\x14\n\x0c\x61\x63\x63\x65ssDenied\x18\x02 \x03(\x03\x12\x1a\n\x12noEncryptedDataKey\x18\x03 \x03(\x03\"H\n)MasterPasswordRecoveryVerificationRequest\x12\x1b\n\x13\x65ncryptedLoginToken\x18\x01 \x01(\x0c\"U\n\x1cGetSecurityQuestionV3Request\x12\x1b\n\x13\x65ncryptedLoginToken\x18\x01 \x01(\x0c\x12\x18\n\x10verificationCode\x18\x02 \x01(\t\"r\n\x1dGetSecurityQuestionV3Response\x12\x18\n\x10securityQuestion\x18\x01 \x01(\t\x12\x15\n\rbackupKeyDate\x18\x02 \x01(\x03\x12\x0c\n\x04salt\x18\x03 \x01(\x0c\x12\x12\n\niterations\x18\x04 \x01(\x05\"n\n\x19GetDataKeyBackupV3Request\x12\x1b\n\x13\x65ncryptedLoginToken\x18\x01 \x01(\x0c\x12\x18\n\x10verificationCode\x18\x02 \x01(\t\x12\x1a\n\x12securityAnswerHash\x18\x03 \x01(\x0c\"v\n\rPasswordRules\x12\x10\n\x08ruleType\x18\x01 \x01(\t\x12\r\n\x05match\x18\x02 \x01(\x08\x12\x0f\n\x07pattern\x18\x03 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x04 \x01(\t\x12\x0f\n\x07minimum\x18\x05 \x01(\x05\x12\r\n\x05value\x18\x06 \x01(\t\"\xc9\x02\n\x1aGetDataKeyBackupV3Response\x12\x15\n\rdataKeyBackup\x18\x01 \x01(\x0c\x12\x19\n\x11\x64\x61taKeyBackupDate\x18\x02 \x01(\x03\x12\x11\n\tpublicKey\x18\x03 \x01(\x0c\x12\x1b\n\x13\x65ncryptedPrivateKey\x18\x04 \x01(\x0c\x12\x11\n\tclientKey\x18\x05 \x01(\x0c\x12\x1d\n\x15\x65ncryptedSessionToken\x18\x06 \x01(\x0c\x12\x34\n\rpasswordRules\x18\x07 \x03(\x0b\x32\x1d.Authentication.PasswordRules\x12\x1a\n\x12passwordRulesIntro\x18\x08 \x01(\t\x12\x1f\n\x17minimumPbkdf2Iterations\x18\t \x01(\x05\x12$\n\x07keyType\x18\n \x01(\x0e\x32\x13.Enterprise.KeyType\")\n\x14GetPublicKeysRequest\x12\x11\n\tusernames\x18\x01 \x03(\t\"r\n\x11PublicKeyResponse\x12\x10\n\x08username\x18\x01 \x01(\t\x12\x11\n\tpublicKey\x18\x02 \x01(\x0c\x12\x14\n\x0cpublicEccKey\x18\x03 \x01(\x0c\x12\x0f\n\x07message\x18\x04 \x01(\t\x12\x11\n\terrorCode\x18\x05 \x01(\t\"P\n\x15GetPublicKeysResponse\x12\x37\n\x0ckeyResponses\x18\x01 \x03(\x0b\x32!.Authentication.PublicKeyResponse\"F\n\x14SetEccKeyPairRequest\x12\x11\n\tpublicKey\x18\x01 \x01(\x0c\x12\x1b\n\x13\x65ncryptedPrivateKey\x18\x02 \x01(\x0c\"I\n\x15SetEccKeyPairsRequest\x12\x30\n\x08teamKeys\x18\x01 \x03(\x0b\x32\x1e.Authentication.TeamEccKeyPair\"R\n\x16SetEccKeyPairsResponse\x12\x38\n\x08teamKeys\x18\x01 \x03(\x0b\x32&.Authentication.TeamEccKeyPairResponse\"Q\n\x0eTeamEccKeyPair\x12\x0f\n\x07teamUid\x18\x01 \x01(\x0c\x12\x11\n\tpublicKey\x18\x02 \x01(\x0c\x12\x1b\n\x13\x65ncryptedPrivateKey\x18\x03 \x01(\x0c\"X\n\x16TeamEccKeyPairResponse\x12\x0f\n\x07teamUid\x18\x01 \x01(\x0c\x12-\n\x06status\x18\x02 \x01(\x0e\x32\x1d.Authentication.GenericStatus\"D\n\x17GetKsmPublicKeysRequest\x12\x11\n\tclientIds\x18\x01 \x03(\x0c\x12\x16\n\x0e\x63ontrollerUids\x18\x02 \x03(\x0c\"U\n\x17\x44\x65vicePublicKeyResponse\x12\x10\n\x08\x63lientId\x18\x01 \x01(\x0c\x12\x11\n\tpublicKey\x18\x02 \x01(\x0c\x12\x15\n\rcontrollerUid\x18\x03 \x01(\x0c\"Y\n\x18GetKsmPublicKeysResponse\x12=\n\x0ckeyResponses\x18\x01 \x03(\x0b\x32\'.Authentication.DevicePublicKeyResponse\"X\n\x13\x41\x64\x64\x41ppSharesRequest\x12\x14\n\x0c\x61ppRecordUid\x18\x01 \x01(\x0c\x12+\n\x06shares\x18\x02 \x03(\x0b\x32\x1b.Authentication.AppShareAdd\">\n\x16RemoveAppSharesRequest\x12\x14\n\x0c\x61ppRecordUid\x18\x01 \x01(\x0c\x12\x0e\n\x06shares\x18\x02 \x03(\x0c\"\x87\x01\n\x0b\x41ppShareAdd\x12\x11\n\tsecretUid\x18\x02 \x01(\x0c\x12\x37\n\tshareType\x18\x03 \x01(\x0e\x32$.Authentication.ApplicationShareType\x12\x1a\n\x12\x65ncryptedSecretKey\x18\x04 \x01(\x0c\x12\x10\n\x08\x65\x64itable\x18\x05 \x01(\x08\"\x89\x01\n\x08\x41ppShare\x12\x11\n\tsecretUid\x18\x01 \x01(\x0c\x12\x37\n\tshareType\x18\x02 \x01(\x0e\x32$.Authentication.ApplicationShareType\x12\x10\n\x08\x65\x64itable\x18\x03 \x01(\x08\x12\x11\n\tcreatedOn\x18\x04 \x01(\x03\x12\x0c\n\x04\x64\x61ta\x18\x05 \x01(\x0c\"\xd9\x01\n\x13\x41\x64\x64\x41ppClientRequest\x12\x14\n\x0c\x61ppRecordUid\x18\x01 \x01(\x0c\x12\x17\n\x0f\x65ncryptedAppKey\x18\x02 \x01(\x0c\x12\x10\n\x08\x63lientId\x18\x03 \x01(\x0c\x12\x0e\n\x06lockIp\x18\x04 \x01(\x08\x12\x1b\n\x13\x66irstAccessExpireOn\x18\x05 \x01(\x03\x12\x16\n\x0e\x61\x63\x63\x65ssExpireOn\x18\x06 \x01(\x03\x12\n\n\x02id\x18\x07 \x01(\t\x12\x30\n\rappClientType\x18\x08 \x01(\x0e\x32\x19.Enterprise.AppClientType\"@\n\x17RemoveAppClientsRequest\x12\x14\n\x0c\x61ppRecordUid\x18\x01 \x01(\x0c\x12\x0f\n\x07\x63lients\x18\x02 \x03(\x0c\"\xaa\x01\n\x17\x41\x64\x64\x45xternalShareRequest\x12\x11\n\trecordUid\x18\x01 \x01(\x0c\x12\x1a\n\x12\x65ncryptedRecordKey\x18\x02 \x01(\x0c\x12\x10\n\x08\x63lientId\x18\x03 \x01(\x0c\x12\x16\n\x0e\x61\x63\x63\x65ssExpireOn\x18\x04 \x01(\x03\x12\n\n\x02id\x18\x05 \x01(\t\x12\x16\n\x0eisSelfDestruct\x18\x06 \x01(\x08\x12\x12\n\nisEditable\x18\x07 \x01(\x08\"\x93\x02\n\tAppClient\x12\n\n\x02id\x18\x01 \x01(\t\x12\x10\n\x08\x63lientId\x18\x02 \x01(\x0c\x12\x11\n\tcreatedOn\x18\x03 \x01(\x03\x12\x13\n\x0b\x66irstAccess\x18\x04 \x01(\x03\x12\x12\n\nlastAccess\x18\x05 \x01(\x03\x12\x11\n\tpublicKey\x18\x06 \x01(\x0c\x12\x0e\n\x06lockIp\x18\x07 \x01(\x08\x12\x11\n\tipAddress\x18\x08 \x01(\t\x12\x1b\n\x13\x66irstAccessExpireOn\x18\t \x01(\x03\x12\x16\n\x0e\x61\x63\x63\x65ssExpireOn\x18\n \x01(\x03\x12\x30\n\rappClientType\x18\x0b \x01(\x0e\x32\x19.Enterprise.AppClientType\x12\x0f\n\x07\x63\x61nEdit\x18\x0c \x01(\x08\")\n\x11GetAppInfoRequest\x12\x14\n\x0c\x61ppRecordUid\x18\x01 \x03(\x0c\"\x8e\x01\n\x07\x41ppInfo\x12\x14\n\x0c\x61ppRecordUid\x18\x01 \x01(\x0c\x12(\n\x06shares\x18\x02 \x03(\x0b\x32\x18.Authentication.AppShare\x12*\n\x07\x63lients\x18\x03 \x03(\x0b\x32\x19.Authentication.AppClient\x12\x17\n\x0fisExternalShare\x18\x04 \x01(\x08\">\n\x12GetAppInfoResponse\x12(\n\x07\x61ppInfo\x18\x01 \x03(\x0b\x32\x17.Authentication.AppInfo\"\xd5\x01\n\x12\x41pplicationSummary\x12\x14\n\x0c\x61ppRecordUid\x18\x01 \x01(\x0c\x12\x12\n\nlastAccess\x18\x02 \x01(\x03\x12\x14\n\x0crecordShares\x18\x03 \x01(\x05\x12\x14\n\x0c\x66olderShares\x18\x04 \x01(\x05\x12\x15\n\rfolderRecords\x18\x05 \x01(\x05\x12\x13\n\x0b\x63lientCount\x18\x06 \x01(\x05\x12\x1a\n\x12\x65xpiredClientCount\x18\x07 \x01(\x05\x12\x10\n\x08username\x18\x08 \x01(\t\x12\x0f\n\x07\x61ppData\x18\t \x01(\x0c\"`\n\x1eGetApplicationsSummaryResponse\x12>\n\x12\x61pplicationSummary\x18\x01 \x03(\x0b\x32\".Authentication.ApplicationSummary\"/\n\x1bGetVerificationTokenRequest\x12\x10\n\x08username\x18\x01 \x01(\t\"B\n\x1cGetVerificationTokenResponse\x12\"\n\x1a\x65ncryptedVerificationToken\x18\x01 \x01(\x0c\"\'\n\x16SendShareInviteRequest\x12\r\n\x05\x65mail\x18\x01 \x01(\t\"\xc5\x01\n\x18TimeLimitedAccessRequest\x12\x12\n\naccountUid\x18\x01 \x03(\x0c\x12\x0f\n\x07teamUid\x18\x02 \x03(\x0c\x12\x11\n\trecordUid\x18\x03 \x03(\x0c\x12\x17\n\x0fsharedObjectUid\x18\x04 \x01(\x0c\x12\x44\n\x15timeLimitedAccessType\x18\x05 \x01(\x0e\x32%.Authentication.TimeLimitedAccessType\x12\x12\n\nexpiration\x18\x06 \x01(\x03\"7\n\x17TimeLimitedAccessStatus\x12\x0b\n\x03uid\x18\x01 \x01(\x0c\x12\x0f\n\x07message\x18\x02 \x01(\t\"\xf8\x01\n\x19TimeLimitedAccessResponse\x12\x10\n\x08revision\x18\x01 \x01(\x03\x12\x41\n\x10userAccessStatus\x18\x02 \x03(\x0b\x32\'.Authentication.TimeLimitedAccessStatus\x12\x41\n\x10teamAccessStatus\x18\x03 \x03(\x0b\x32\'.Authentication.TimeLimitedAccessStatus\x12\x43\n\x12recordAccessStatus\x18\x04 \x03(\x0b\x32\'.Authentication.TimeLimitedAccessStatus\"+\n\x16RequestDownloadRequest\x12\x11\n\tfileNames\x18\x01 \x03(\t\"g\n\x17RequestDownloadResponse\x12\x0e\n\x06result\x18\x01 \x01(\t\x12\x0f\n\x07message\x18\x02 \x01(\t\x12+\n\tdownloads\x18\x03 \x03(\x0b\x32\x18.Authentication.Download\"D\n\x08\x44ownload\x12\x10\n\x08\x66ileName\x18\x01 \x01(\t\x12\x0b\n\x03url\x18\x02 \x01(\t\x12\x19\n\x11successStatusCode\x18\x03 \x01(\x05\"#\n\x11\x44\x65leteUserRequest\x12\x0e\n\x06reason\x18\x01 \x01(\t\"\x84\x01\n\x1b\x43hangeMasterPasswordRequest\x12\x14\n\x0c\x61uthVerifier\x18\x01 \x01(\x0c\x12\x18\n\x10\x65ncryptionParams\x18\x02 \x01(\x0c\x12\x1b\n\x13\x66romServiceProvider\x18\x03 \x01(\x08\x12\x18\n\x10iterationsChange\x18\x04 \x01(\x08\"=\n\x1c\x43hangeMasterPasswordResponse\x12\x1d\n\x15\x65ncryptedSessionToken\x18\x01 \x01(\x0c\"Y\n\x1b\x41\x63\x63ountRecoverySetupRequest\x12 \n\x18recoveryEncryptedDataKey\x18\x01 \x01(\x0c\x12\x18\n\x10recoveryAuthHash\x18\x02 \x01(\x0c\"\xac\x01\n!AccountRecoveryVerifyCodeResponse\x12\x34\n\rbackupKeyType\x18\x01 \x01(\x0e\x32\x1d.Authentication.BackupKeyType\x12\x15\n\rbackupKeyDate\x18\x02 \x01(\x03\x12\x18\n\x10securityQuestion\x18\x03 \x01(\t\x12\x0c\n\x04salt\x18\x04 \x01(\x0c\x12\x12\n\niterations\x18\x05 \x01(\x05\",\n\x1b\x45mergencyAccessLoginRequest\x12\r\n\x05owner\x18\x01 \x01(\t\"\xb5\x01\n\x1c\x45mergencyAccessLoginResponse\x12\x14\n\x0csessionToken\x18\x01 \x01(\x0c\x12%\n\x07\x64\x61taKey\x18\x02 \x01(\x0b\x32\x14.Enterprise.TypedKey\x12+\n\rrsaPrivateKey\x18\x03 \x01(\x0b\x32\x14.Enterprise.TypedKey\x12+\n\reccPrivateKey\x18\x04 \x01(\x0b\x32\x14.Enterprise.TypedKey\"\xb2\x01\n\x0bUserTeamKey\x12\x0f\n\x07teamUid\x18\x01 \x01(\x0c\x12\x10\n\x08username\x18\x02 \x01(\t\x12\x18\n\x10\x65nterpriseUserId\x18\x03 \x01(\x03\x12\x1b\n\x13\x65ncryptedTeamKeyRSA\x18\x04 \x01(\x0c\x12\x1a\n\x12\x65ncryptedTeamKeyEC\x18\x05 \x01(\x0c\x12-\n\x06status\x18\x06 \x01(\x0e\x32\x1d.Authentication.GenericStatus\")\n\x16GenericRequestResponse\x12\x0f\n\x07request\x18\x01 \x03(\x0c\"f\n\x1aPasskeyRegistrationRequest\x12H\n\x17\x61uthenticatorAttachment\x18\x01 \x01(\x0e\x32\'.Authentication.AuthenticatorAttachment\"P\n\x1bPasskeyRegistrationResponse\x12\x16\n\x0e\x63hallengeToken\x18\x01 \x01(\x0c\x12\x19\n\x11pkCreationOptions\x18\x02 \x01(\t\"\x84\x01\n\x1fPasskeyRegistrationFinalization\x12\x16\n\x0e\x63hallengeToken\x18\x01 \x01(\x0c\x12\x1d\n\x15\x61uthenticatorResponse\x18\x02 \x01(\t\x12\x19\n\x0c\x66riendlyName\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\x0f\n\r_friendlyName\"\xb3\x02\n\x1cPasskeyAuthenticationRequest\x12H\n\x17\x61uthenticatorAttachment\x18\x01 \x01(\x0e\x32\'.Authentication.AuthenticatorAttachment\x12\x36\n\x0epasskeyPurpose\x18\x02 \x01(\x0e\x32\x1e.Authentication.PasskeyPurpose\x12\x15\n\rclientVersion\x18\x03 \x01(\t\x12\x1c\n\x14\x65ncryptedDeviceToken\x18\x04 \x01(\x0c\x12\x15\n\x08username\x18\x05 \x01(\tH\x00\x88\x01\x01\x12 \n\x13\x65ncryptedLoginToken\x18\x06 \x01(\x0cH\x01\x88\x01\x01\x42\x0b\n\t_usernameB\x16\n\x14_encryptedLoginToken\"\x8b\x01\n\x1dPasskeyAuthenticationResponse\x12\x18\n\x10pkRequestOptions\x18\x01 \x01(\t\x12\x16\n\x0e\x63hallengeToken\x18\x02 \x01(\x0c\x12 \n\x13\x65ncryptedLoginToken\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x42\x16\n\x14_encryptedLoginToken\"\xbf\x01\n\x18PasskeyValidationRequest\x12\x16\n\x0e\x63hallengeToken\x18\x01 \x01(\x0c\x12\x19\n\x11\x61ssertionResponse\x18\x02 \x01(\x0c\x12\x36\n\x0epasskeyPurpose\x18\x03 \x01(\x0e\x32\x1e.Authentication.PasskeyPurpose\x12 \n\x13\x65ncryptedLoginToken\x18\x04 \x01(\x0cH\x00\x88\x01\x01\x42\x16\n\x14_encryptedLoginToken\"I\n\x19PasskeyValidationResponse\x12\x0f\n\x07isValid\x18\x01 \x01(\x08\x12\x1b\n\x13\x65ncryptedLoginToken\x18\x02 \x01(\x0c\"h\n\x14UpdatePasskeyRequest\x12\x0e\n\x06userId\x18\x01 \x01(\x05\x12\x14\n\x0c\x63redentialId\x18\x02 \x01(\x0c\x12\x19\n\x0c\x66riendlyName\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\x0f\n\r_friendlyName\"-\n\x12PasskeyListRequest\x12\x17\n\x0fincludeDisabled\x18\x01 \x01(\x08\"\xa4\x01\n\x0bPasskeyInfo\x12\x0e\n\x06userId\x18\x01 \x01(\x05\x12\x14\n\x0c\x63redentialId\x18\x02 \x01(\x0c\x12\x14\n\x0c\x66riendlyName\x18\x03 \x01(\t\x12\x0e\n\x06\x41\x41GUID\x18\x04 \x01(\t\x12\x17\n\x0f\x63reatedAtMillis\x18\x05 \x01(\x03\x12\x16\n\x0elastUsedMillis\x18\x06 \x01(\x03\x12\x18\n\x10\x64isabledAtMillis\x18\x07 \x01(\x03\"G\n\x13PasskeyListResponse\x12\x30\n\x0bpasskeyInfo\x18\x01 \x03(\x0b\x32\x1b.Authentication.PasskeyInfo\"C\n\x0fTranslationInfo\x12\x16\n\x0etranslationKey\x18\x01 \x01(\t\x12\x18\n\x10translationValue\x18\x02 \x01(\t\",\n\x12TranslationRequest\x12\x16\n\x0etranslationKey\x18\x01 \x03(\t\"O\n\x13TranslationResponse\x12\x38\n\x0ftranslationInfo\x18\x01 \x03(\x0b\x32\x1f.Authentication.TranslationInfo*\xd3\x02\n\x11SupportedLanguage\x12\x0b\n\x07\x45NGLISH\x10\x00\x12\n\n\x06\x41RABIC\x10\x01\x12\x0b\n\x07\x42RITISH\x10\x02\x12\x0b\n\x07\x43HINESE\x10\x03\x12\x15\n\x11\x43HINESE_HONG_KONG\x10\x04\x12\x12\n\x0e\x43HINESE_TAIWAN\x10\x05\x12\t\n\x05\x44UTCH\x10\x06\x12\n\n\x06\x46RENCH\x10\x07\x12\n\n\x06GERMAN\x10\x08\x12\t\n\x05GREEK\x10\t\x12\n\n\x06HEBREW\x10\n\x12\x0b\n\x07ITALIAN\x10\x0b\x12\x0c\n\x08JAPANESE\x10\x0c\x12\n\n\x06KOREAN\x10\r\x12\n\n\x06POLISH\x10\x0e\x12\x0e\n\nPORTUGUESE\x10\x0f\x12\x15\n\x11PORTUGUESE_BRAZIL\x10\x10\x12\x0c\n\x08ROMANIAN\x10\x11\x12\x0b\n\x07RUSSIAN\x10\x12\x12\n\n\x06SLOVAK\x10\x13\x12\x0b\n\x07SPANISH\x10\x14\x12\x0b\n\x07\x46INNISH\x10\x15\x12\x0b\n\x07SWEDISH\x10\x16*k\n\tLoginType\x12\n\n\x06NORMAL\x10\x00\x12\x07\n\x03SSO\x10\x01\x12\x07\n\x03\x42IO\x10\x02\x12\r\n\tALTERNATE\x10\x03\x12\x0b\n\x07OFFLINE\x10\x04\x12\x13\n\x0f\x46ORGOT_PASSWORD\x10\x05\x12\x0f\n\x0bPASSKEY_BIO\x10\x06*q\n\x0c\x44\x65viceStatus\x12\x19\n\x15\x44\x45VICE_NEEDS_APPROVAL\x10\x00\x12\r\n\tDEVICE_OK\x10\x01\x12\x1b\n\x17\x44\x45VICE_DISABLED_BY_USER\x10\x02\x12\x1a\n\x16\x44\x45VICE_LOCKED_BY_ADMIN\x10\x03*A\n\rLicenseStatus\x12\t\n\x05OTHER\x10\x00\x12\n\n\x06\x41\x43TIVE\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x12\x0c\n\x08\x44ISABLED\x10\x03*7\n\x0b\x41\x63\x63ountType\x12\x0c\n\x08\x43ONSUMER\x10\x00\x12\n\n\x06\x46\x41MILY\x10\x01\x12\x0e\n\nENTERPRISE\x10\x02*\x9f\x02\n\x10SessionTokenType\x12\x12\n\x0eNO_RESTRICTION\x10\x00\x12\x14\n\x10\x41\x43\x43OUNT_RECOVERY\x10\x01\x12\x11\n\rSHARE_ACCOUNT\x10\x02\x12\x0c\n\x08PURCHASE\x10\x03\x12\x0c\n\x08RESTRICT\x10\x04\x12\x11\n\rACCEPT_INVITE\x10\x05\x12\x12\n\x0eSUPPORT_SERVER\x10\x06\x12\x17\n\x13\x45NTERPRISE_CREATION\x10\x07\x12\x1f\n\x1b\x45XPIRED_BUT_ALLOWED_TO_SYNC\x10\x08\x12\x18\n\x14\x41\x43\x43\x45PT_FAMILY_INVITE\x10\t\x12!\n\x1d\x45NTERPRISE_CREATION_PURCHASED\x10\n\x12\x14\n\x10\x45MERGENCY_ACCESS\x10\x0b*G\n\x07Version\x12\x13\n\x0finvalid_version\x10\x00\x12\x13\n\x0f\x64\x65\x66\x61ult_version\x10\x01\x12\x12\n\x0esecond_version\x10\x02*7\n\x1fMasterPasswordReentryActionType\x12\n\n\x06UNMASK\x10\x00\x12\x08\n\x04\x43OPY\x10\x01*l\n\x0bLoginMethod\x12\x17\n\x13INVALID_LOGINMETHOD\x10\x00\x12\x14\n\x10\x45XISTING_ACCOUNT\x10\x01\x12\x0e\n\nSSO_DOMAIN\x10\x02\x12\r\n\tAFTER_SSO\x10\x03\x12\x0f\n\x0bNEW_ACCOUNT\x10\x04*\xbe\x04\n\nLoginState\x12\x16\n\x12INVALID_LOGINSTATE\x10\x00\x12\x0e\n\nLOGGED_OUT\x10\x01\x12\x1c\n\x18\x44\x45VICE_APPROVAL_REQUIRED\x10\x02\x12\x11\n\rDEVICE_LOCKED\x10\x03\x12\x12\n\x0e\x41\x43\x43OUNT_LOCKED\x10\x04\x12\x19\n\x15\x44\x45VICE_ACCOUNT_LOCKED\x10\x05\x12\x0b\n\x07UPGRADE\x10\x06\x12\x13\n\x0fLICENSE_EXPIRED\x10\x07\x12\x13\n\x0fREGION_REDIRECT\x10\x08\x12\x16\n\x12REDIRECT_CLOUD_SSO\x10\t\x12\x17\n\x13REDIRECT_ONSITE_SSO\x10\n\x12\x10\n\x0cREQUIRES_2FA\x10\x0c\x12\x16\n\x12REQUIRES_AUTH_HASH\x10\r\x12\x15\n\x11REQUIRES_USERNAME\x10\x0e\x12\x19\n\x15\x41\x46TER_CLOUD_SSO_LOGIN\x10\x0f\x12\x1d\n\x19REQUIRES_ACCOUNT_CREATION\x10\x10\x12&\n\"REQUIRES_DEVICE_ENCRYPTED_DATA_KEY\x10\x11\x12\x17\n\x13LOGIN_TOKEN_EXPIRED\x10\x12\x12\x1e\n\x1aPASSKEY_INITIATE_CHALLENGE\x10\x13\x12\x19\n\x15PASSKEY_AUTH_REQUIRED\x10\x14\x12!\n\x1dPASSKEY_VERIFY_AUTHENTICATION\x10\x15\x12\x17\n\x13\x41\x46TER_PASSKEY_LOGIN\x10\x16\x12\r\n\tLOGGED_IN\x10\x63*k\n\x14\x45ncryptedDataKeyType\x12\n\n\x06NO_KEY\x10\x00\x12\x18\n\x14\x42Y_DEVICE_PUBLIC_KEY\x10\x01\x12\x0f\n\x0b\x42Y_PASSWORD\x10\x02\x12\x10\n\x0c\x42Y_ALTERNATE\x10\x03\x12\n\n\x06\x42Y_BIO\x10\x04*-\n\x0ePasswordMethod\x12\x0b\n\x07\x45NTERED\x10\x00\x12\x0e\n\nBIOMETRICS\x10\x01*\xb9\x01\n\x11TwoFactorPushType\x12\x14\n\x10TWO_FA_PUSH_NONE\x10\x00\x12\x13\n\x0fTWO_FA_PUSH_SMS\x10\x01\x12\x16\n\x12TWO_FA_PUSH_KEEPER\x10\x02\x12\x18\n\x14TWO_FA_PUSH_DUO_PUSH\x10\x03\x12\x18\n\x14TWO_FA_PUSH_DUO_TEXT\x10\x04\x12\x18\n\x14TWO_FA_PUSH_DUO_CALL\x10\x05\x12\x13\n\x0fTWO_FA_PUSH_DNA\x10\x06*\xc3\x01\n\x12TwoFactorValueType\x12\x14\n\x10TWO_FA_CODE_NONE\x10\x00\x12\x14\n\x10TWO_FA_CODE_TOTP\x10\x01\x12\x13\n\x0fTWO_FA_CODE_SMS\x10\x02\x12\x13\n\x0fTWO_FA_CODE_DUO\x10\x03\x12\x13\n\x0fTWO_FA_CODE_RSA\x10\x04\x12\x13\n\x0fTWO_FA_RESP_U2F\x10\x05\x12\x18\n\x14TWO_FA_RESP_WEBAUTHN\x10\x06\x12\x13\n\x0fTWO_FA_CODE_DNA\x10\x07*\xe1\x01\n\x14TwoFactorChannelType\x12\x12\n\x0eTWO_FA_CT_NONE\x10\x00\x12\x12\n\x0eTWO_FA_CT_TOTP\x10\x01\x12\x11\n\rTWO_FA_CT_SMS\x10\x02\x12\x11\n\rTWO_FA_CT_DUO\x10\x03\x12\x11\n\rTWO_FA_CT_RSA\x10\x04\x12\x14\n\x10TWO_FA_CT_BACKUP\x10\x05\x12\x11\n\rTWO_FA_CT_U2F\x10\x06\x12\x16\n\x12TWO_FA_CT_WEBAUTHN\x10\x07\x12\x14\n\x10TWO_FA_CT_KEEPER\x10\x08\x12\x11\n\rTWO_FA_CT_DNA\x10\t*\xab\x01\n\x13TwoFactorExpiration\x12\x1a\n\x16TWO_FA_EXP_IMMEDIATELY\x10\x00\x12\x18\n\x14TWO_FA_EXP_5_MINUTES\x10\x01\x12\x17\n\x13TWO_FA_EXP_12_HOURS\x10\x02\x12\x17\n\x13TWO_FA_EXP_24_HOURS\x10\x03\x12\x16\n\x12TWO_FA_EXP_30_DAYS\x10\x04\x12\x14\n\x10TWO_FA_EXP_NEVER\x10\x05*@\n\x0bLicenseType\x12\t\n\x05VAULT\x10\x00\x12\x08\n\x04\x43HAT\x10\x01\x12\x0b\n\x07STORAGE\x10\x02\x12\x0f\n\x0b\x42REACHWATCH\x10\x03*i\n\x0bObjectTypes\x12\n\n\x06RECORD\x10\x00\x12\x16\n\x12SHARED_FOLDER_USER\x10\x01\x12\x16\n\x12SHARED_FOLDER_TEAM\x10\x02\x12\x0f\n\x0bUSER_FOLDER\x10\x03\x12\r\n\tTEAM_USER\x10\x04*\xa1\x02\n\x13\x45ncryptedObjectType\x12\x13\n\x0f\x45OT_UNSPECIFIED\x10\x00\x12\x12\n\x0e\x45OT_RECORD_KEY\x10\x01\x12\x1e\n\x1a\x45OT_SHARED_FOLDER_USER_KEY\x10\x02\x12\x1e\n\x1a\x45OT_SHARED_FOLDER_TEAM_KEY\x10\x03\x12\x15\n\x11\x45OT_TEAM_USER_KEY\x10\x04\x12\x17\n\x13\x45OT_USER_FOLDER_KEY\x10\x05\x12\x15\n\x11\x45OT_SECURITY_DATA\x10\x06\x12%\n!EOT_SECURITY_DATA_MASTER_PASSWORD\x10\x07\x12\x1c\n\x18\x45OT_EMERGENCY_ACCESS_KEY\x10\x08\x12\x15\n\x11\x45OT_V2_RECORD_KEY\x10\t*M\n\x1bMasterPasswordReentryStatus\x12\x0e\n\nMP_UNKNOWN\x10\x00\x12\x0e\n\nMP_SUCCESS\x10\x01\x12\x0e\n\nMP_FAILURE\x10\x02*`\n\x1b\x41lternateAuthenticationType\x12\x1d\n\x19\x41LTERNATE_MASTER_PASSWORD\x10\x00\x12\r\n\tBIOMETRIC\x10\x01\x12\x13\n\x0f\x41\x43\x43OUNT_RECOVER\x10\x02*\x9a\x02\n\x0cThrottleType\x12\x1b\n\x17PASSWORD_RETRY_THROTTLE\x10\x00\x12\"\n\x1ePASSWORD_RETRY_LEGACY_THROTTLE\x10\x01\x12\x13\n\x0fTWO_FA_THROTTLE\x10\x02\x12\x1a\n\x16TWO_FA_LEGACY_THROTTLE\x10\x03\x12\x15\n\x11QA_RETRY_THROTTLE\x10\x04\x12\x1c\n\x18\x41\x43\x43OUNT_RECOVER_THROTTLE\x10\x05\x12.\n*VALIDATE_DEVICE_VERIFICATION_CODE_THROTTLE\x10\x06\x12\x33\n/VALIDATE_CREATE_USER_VERIFICATION_CODE_THROTTLE\x10\x07*H\n\x06Region\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x06\n\x02\x65u\x10\x01\x12\x06\n\x02us\x10\x02\x12\t\n\x05usgov\x10\x03\x12\x06\n\x02\x61u\x10\x04\x12\x06\n\x02jp\x10\x05\x12\x06\n\x02\x63\x61\x10\x06*D\n\x14\x41pplicationShareType\x12\x15\n\x11SHARE_TYPE_RECORD\x10\x00\x12\x15\n\x11SHARE_TYPE_FOLDER\x10\x01*\xa4\x01\n\x15TimeLimitedAccessType\x12$\n INVALID_TIME_LIMITED_ACCESS_TYPE\x10\x00\x12\x19\n\x15USER_ACCESS_TO_RECORD\x10\x01\x12\'\n#USER_OR_TEAM_ACCESS_TO_SHAREDFOLDER\x10\x02\x12!\n\x1dRECORD_ACCESS_TO_SHAREDFOLDER\x10\x03*<\n\rBackupKeyType\x12\x12\n\x0e\x42KT_SEC_ANSWER\x10\x00\x12\x17\n\x13\x42KT_PASSPHRASE_HASH\x10\x01*W\n\rGenericStatus\x12\x0b\n\x07SUCCESS\x10\x00\x12\x12\n\x0eINVALID_OBJECT\x10\x01\x12\x12\n\x0e\x41LREADY_EXISTS\x10\x02\x12\x11\n\rACCESS_DENIED\x10\x03*N\n\x17\x41uthenticatorAttachment\x12\x12\n\x0e\x43ROSS_PLATFORM\x10\x00\x12\x0c\n\x08PLATFORM\x10\x01\x12\x11\n\rALL_SUPPORTED\x10\x02*-\n\x0ePasskeyPurpose\x12\x0c\n\x08PK_LOGIN\x10\x00\x12\r\n\tPK_REAUTH\x10\x01*K\n\x10\x43lientFormFactor\x12\x0c\n\x08\x46\x46_EMPTY\x10\x00\x12\x0c\n\x08\x46\x46_PHONE\x10\x01\x12\r\n\tFF_TABLET\x10\x02\x12\x0c\n\x08\x46\x46_WATCH\x10\x03\x42*\n\x18\x63om.keepersecurity.protoB\x0e\x41uthenticationb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'APIRequest_pb2', _globals) -if _descriptor._USE_C_DESCRIPTORS == False: - _globals['DESCRIPTOR']._options = None +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None _globals['DESCRIPTOR']._serialized_options = b'\n\030com.keepersecurity.protoB\016Authentication' - _globals['_SUPPORTEDLANGUAGE']._serialized_start=20538 - _globals['_SUPPORTEDLANGUAGE']._serialized_end=20877 - _globals['_LOGINTYPE']._serialized_start=20879 - _globals['_LOGINTYPE']._serialized_end=20986 - _globals['_DEVICESTATUS']._serialized_start=20988 - _globals['_DEVICESTATUS']._serialized_end=21101 - _globals['_LICENSESTATUS']._serialized_start=21103 - _globals['_LICENSESTATUS']._serialized_end=21168 - _globals['_ACCOUNTTYPE']._serialized_start=21170 - _globals['_ACCOUNTTYPE']._serialized_end=21225 - _globals['_SESSIONTOKENTYPE']._serialized_start=21228 - _globals['_SESSIONTOKENTYPE']._serialized_end=21515 - _globals['_VERSION']._serialized_start=21517 - _globals['_VERSION']._serialized_end=21588 - _globals['_MASTERPASSWORDREENTRYACTIONTYPE']._serialized_start=21590 - _globals['_MASTERPASSWORDREENTRYACTIONTYPE']._serialized_end=21645 - _globals['_LOGINMETHOD']._serialized_start=21647 - _globals['_LOGINMETHOD']._serialized_end=21755 - _globals['_LOGINSTATE']._serialized_start=21758 - _globals['_LOGINSTATE']._serialized_end=22332 - _globals['_ENCRYPTEDDATAKEYTYPE']._serialized_start=22334 - _globals['_ENCRYPTEDDATAKEYTYPE']._serialized_end=22441 - _globals['_PASSWORDMETHOD']._serialized_start=22443 - _globals['_PASSWORDMETHOD']._serialized_end=22488 - _globals['_TWOFACTORPUSHTYPE']._serialized_start=22491 - _globals['_TWOFACTORPUSHTYPE']._serialized_end=22676 - _globals['_TWOFACTORVALUETYPE']._serialized_start=22679 - _globals['_TWOFACTORVALUETYPE']._serialized_end=22874 - _globals['_TWOFACTORCHANNELTYPE']._serialized_start=22877 - _globals['_TWOFACTORCHANNELTYPE']._serialized_end=23102 - _globals['_TWOFACTOREXPIRATION']._serialized_start=23105 - _globals['_TWOFACTOREXPIRATION']._serialized_end=23276 - _globals['_LICENSETYPE']._serialized_start=23278 - _globals['_LICENSETYPE']._serialized_end=23342 - _globals['_OBJECTTYPES']._serialized_start=23344 - _globals['_OBJECTTYPES']._serialized_end=23449 - _globals['_ENCRYPTEDOBJECTTYPE']._serialized_start=23452 - _globals['_ENCRYPTEDOBJECTTYPE']._serialized_end=23741 - _globals['_MASTERPASSWORDREENTRYSTATUS']._serialized_start=23743 - _globals['_MASTERPASSWORDREENTRYSTATUS']._serialized_end=23820 - _globals['_ALTERNATEAUTHENTICATIONTYPE']._serialized_start=23822 - _globals['_ALTERNATEAUTHENTICATIONTYPE']._serialized_end=23918 - _globals['_THROTTLETYPE']._serialized_start=23921 - _globals['_THROTTLETYPE']._serialized_end=24203 - _globals['_REGION']._serialized_start=24205 - _globals['_REGION']._serialized_end=24277 - _globals['_APPLICATIONSHARETYPE']._serialized_start=24279 - _globals['_APPLICATIONSHARETYPE']._serialized_end=24347 - _globals['_TIMELIMITEDACCESSTYPE']._serialized_start=24350 - _globals['_TIMELIMITEDACCESSTYPE']._serialized_end=24514 - _globals['_BACKUPKEYTYPE']._serialized_start=24516 - _globals['_BACKUPKEYTYPE']._serialized_end=24576 - _globals['_GENERICSTATUS']._serialized_start=24578 - _globals['_GENERICSTATUS']._serialized_end=24665 - _globals['_AUTHENTICATORATTACHMENT']._serialized_start=24667 - _globals['_AUTHENTICATORATTACHMENT']._serialized_end=24745 - _globals['_PASSKEYPURPOSE']._serialized_start=24747 - _globals['_PASSKEYPURPOSE']._serialized_end=24792 - _globals['_CLIENTFORMFACTOR']._serialized_start=24794 - _globals['_CLIENTFORMFACTOR']._serialized_end=24869 - _globals['_APIREQUEST']._serialized_start=55 - _globals['_APIREQUEST']._serialized_end=231 - _globals['_APIREQUESTPAYLOAD']._serialized_start=233 - _globals['_APIREQUESTPAYLOAD']._serialized_end=339 - _globals['_TRANSFORM']._serialized_start=341 - _globals['_TRANSFORM']._serialized_end=395 - _globals['_DEVICEREQUEST']._serialized_start=398 - _globals['_DEVICEREQUEST']._serialized_end=540 - _globals['_AUTHREQUEST']._serialized_start=542 - _globals['_AUTHREQUEST']._serialized_end=626 - _globals['_NEWUSERMINIMUMPARAMS']._serialized_start=629 - _globals['_NEWUSERMINIMUMPARAMS']._serialized_end=824 - _globals['_PRELOGINREQUEST']._serialized_start=827 - _globals['_PRELOGINREQUEST']._serialized_end=964 - _globals['_LOGINREQUEST']._serialized_start=967 - _globals['_LOGINREQUEST']._serialized_end=1223 - _globals['_DEVICERESPONSE']._serialized_start=1225 - _globals['_DEVICERESPONSE']._serialized_end=1317 - _globals['_SALT']._serialized_start=1319 - _globals['_SALT']._serialized_end=1405 - _globals['_TWOFACTORCHANNEL']._serialized_start=1407 - _globals['_TWOFACTORCHANNEL']._serialized_end=1439 - _globals['_STARTLOGINREQUEST']._serialized_start=1442 - _globals['_STARTLOGINREQUEST']._serialized_end=1822 - _globals['_LOGINRESPONSE']._serialized_start=1825 - _globals['_LOGINRESPONSE']._serialized_end=2376 - _globals['_SWITCHLISTELEMENT']._serialized_start=2378 - _globals['_SWITCHLISTELEMENT']._serialized_end=2473 - _globals['_SWITCHLISTRESPONSE']._serialized_start=2475 - _globals['_SWITCHLISTRESPONSE']._serialized_end=2548 - _globals['_SSOUSERINFO']._serialized_start=2551 - _globals['_SSOUSERINFO']._serialized_end=2691 - _globals['_PRELOGINRESPONSE']._serialized_start=2694 - _globals['_PRELOGINRESPONSE']._serialized_end=2908 - _globals['_LOGINASUSERREQUEST']._serialized_start=2910 - _globals['_LOGINASUSERREQUEST']._serialized_end=2948 - _globals['_LOGINASUSERRESPONSE']._serialized_start=2950 - _globals['_LOGINASUSERRESPONSE']._serialized_end=3037 - _globals['_VALIDATEAUTHHASHREQUEST']._serialized_start=3040 - _globals['_VALIDATEAUTHHASHREQUEST']._serialized_end=3172 - _globals['_TWOFACTORCHANNELINFO']._serialized_start=3175 - _globals['_TWOFACTORCHANNELINFO']._serialized_end=3499 - _globals['_TWOFACTORDUOSTATUS']._serialized_start=3501 - _globals['_TWOFACTORDUOSTATUS']._serialized_end=3601 - _globals['_TWOFACTORADDREQUEST']._serialized_start=3604 - _globals['_TWOFACTORADDREQUEST']._serialized_end=3803 - _globals['_TWOFACTORRENAMEREQUEST']._serialized_start=3805 - _globals['_TWOFACTORRENAMEREQUEST']._serialized_end=3871 - _globals['_TWOFACTORADDRESPONSE']._serialized_start=3873 - _globals['_TWOFACTORADDRESPONSE']._serialized_end=3934 - _globals['_TWOFACTORDELETEREQUEST']._serialized_start=3936 - _globals['_TWOFACTORDELETEREQUEST']._serialized_end=3981 - _globals['_TWOFACTORLISTRESPONSE']._serialized_start=3983 - _globals['_TWOFACTORLISTRESPONSE']._serialized_end=4080 - _globals['_TWOFACTORUPDATEEXPIRATIONREQUEST']._serialized_start=4082 - _globals['_TWOFACTORUPDATEEXPIRATIONREQUEST']._serialized_end=4171 - _globals['_TWOFACTORVALIDATEREQUEST']._serialized_start=4174 - _globals['_TWOFACTORVALIDATEREQUEST']._serialized_end=4375 - _globals['_TWOFACTORVALIDATERESPONSE']._serialized_start=4377 - _globals['_TWOFACTORVALIDATERESPONSE']._serialized_end=4433 - _globals['_TWOFACTORSENDPUSHREQUEST']._serialized_start=4436 - _globals['_TWOFACTORSENDPUSHREQUEST']._serialized_end=4620 - _globals['_LICENSE']._serialized_start=4623 - _globals['_LICENSE']._serialized_end=4754 - _globals['_OWNERLESSRECORD']._serialized_start=4756 - _globals['_OWNERLESSRECORD']._serialized_end=4827 - _globals['_OWNERLESSRECORDS']._serialized_start=4829 - _globals['_OWNERLESSRECORDS']._serialized_end=4905 - _globals['_USERAUTHREQUEST']._serialized_start=4908 - _globals['_USERAUTHREQUEST']._serialized_end=5123 - _globals['_UIDREQUEST']._serialized_start=5125 - _globals['_UIDREQUEST']._serialized_end=5150 - _globals['_DEVICEUPDATEREQUEST']._serialized_start=5153 - _globals['_DEVICEUPDATEREQUEST']._serialized_end=5408 - _globals['_REGISTERDEVICEINREGIONREQUEST']._serialized_start=5411 - _globals['_REGISTERDEVICEINREGIONREQUEST']._serialized_end=5624 - _globals['_REGISTRATIONREQUEST']._serialized_start=5627 - _globals['_REGISTRATIONREQUEST']._serialized_end=6003 - _globals['_CONVERTUSERTOV3REQUEST']._serialized_start=6006 - _globals['_CONVERTUSERTOV3REQUEST']._serialized_end=6214 - _globals['_REVISIONRESPONSE']._serialized_start=6216 - _globals['_REVISIONRESPONSE']._serialized_end=6252 - _globals['_CHANGEEMAILREQUEST']._serialized_start=6254 - _globals['_CHANGEEMAILREQUEST']._serialized_end=6292 - _globals['_CHANGEEMAILRESPONSE']._serialized_start=6294 - _globals['_CHANGEEMAILRESPONSE']._serialized_end=6350 - _globals['_EMAILVERIFICATIONLINKRESPONSE']._serialized_start=6352 - _globals['_EMAILVERIFICATIONLINKRESPONSE']._serialized_end=6406 - _globals['_SECURITYDATA']._serialized_start=6408 - _globals['_SECURITYDATA']._serialized_end=6449 - _globals['_SECURITYSCOREDATA']._serialized_start=6451 - _globals['_SECURITYSCOREDATA']._serialized_end=6515 - _globals['_SECURITYDATAREQUEST']._serialized_start=6518 - _globals['_SECURITYDATAREQUEST']._serialized_end=6785 - _globals['_SECURITYREPORTINCREMENTALDATA']._serialized_start=6788 - _globals['_SECURITYREPORTINCREMENTALDATA']._serialized_end=7095 - _globals['_SECURITYREPORT']._serialized_start=7098 - _globals['_SECURITYREPORT']._serialized_end=7385 - _globals['_SECURITYREPORTSAVEREQUEST']._serialized_start=7387 - _globals['_SECURITYREPORTSAVEREQUEST']._serialized_end=7470 - _globals['_SECURITYREPORTREQUEST']._serialized_start=7472 - _globals['_SECURITYREPORTREQUEST']._serialized_end=7513 - _globals['_SECURITYREPORTRESPONSE']._serialized_start=7516 - _globals['_SECURITYREPORTRESPONSE']._serialized_end=7733 - _globals['_REUSEDPASSWORDSREQUEST']._serialized_start=7735 - _globals['_REUSEDPASSWORDSREQUEST']._serialized_end=7774 - _globals['_SUMMARYCONSOLEREPORT']._serialized_start=7776 - _globals['_SUMMARYCONSOLEREPORT']._serialized_end=7838 - _globals['_CHANGETOKEYTYPEONE']._serialized_start=7840 - _globals['_CHANGETOKEYTYPEONE']._serialized_end=7964 - _globals['_CHANGETOKEYTYPEONEREQUEST']._serialized_start=7966 - _globals['_CHANGETOKEYTYPEONEREQUEST']._serialized_end=8057 - _globals['_CHANGETOKEYTYPEONESTATUS']._serialized_start=8059 - _globals['_CHANGETOKEYTYPEONESTATUS']._serialized_end=8144 - _globals['_CHANGETOKEYTYPEONERESPONSE']._serialized_start=8146 - _globals['_CHANGETOKEYTYPEONERESPONSE']._serialized_end=8250 - _globals['_GETCHANGEKEYTYPESREQUEST']._serialized_start=8253 - _globals['_GETCHANGEKEYTYPESREQUEST']._serialized_end=8438 - _globals['_GETCHANGEKEYTYPESRESPONSE']._serialized_start=8441 - _globals['_GETCHANGEKEYTYPESRESPONSE']._serialized_end=8571 - _globals['_ALLOWEDKEYTYPES']._serialized_start=8574 - _globals['_ALLOWEDKEYTYPES']._serialized_end=8703 - _globals['_CHANGEKEYTYPES']._serialized_start=8705 - _globals['_CHANGEKEYTYPES']._serialized_end=8766 - _globals['_CHANGEKEYTYPE']._serialized_start=8769 - _globals['_CHANGEKEYTYPE']._serialized_end=8983 - _globals['_SETKEY']._serialized_start=8985 - _globals['_SETKEY']._serialized_end=9018 - _globals['_SETKEYREQUEST']._serialized_start=9020 - _globals['_SETKEYREQUEST']._serialized_end=9073 - _globals['_CREATEUSERREQUEST']._serialized_start=9076 - _globals['_CREATEUSERREQUEST']._serialized_end=9734 - _globals['_NODEENFORCEMENTADDORUPDATEREQUEST']._serialized_start=9736 - _globals['_NODEENFORCEMENTADDORUPDATEREQUEST']._serialized_end=9823 - _globals['_NODEENFORCEMENTREMOVEREQUEST']._serialized_start=9825 - _globals['_NODEENFORCEMENTREMOVEREQUEST']._serialized_end=9892 - _globals['_APIREQUESTBYKEY']._serialized_start=9895 - _globals['_APIREQUESTBYKEY']._serialized_end=10054 - _globals['_APIREQUESTBYKATOKAKEY']._serialized_start=10057 - _globals['_APIREQUESTBYKATOKAKEY']._serialized_end=10256 - _globals['_MEMCACHEREQUEST']._serialized_start=10258 - _globals['_MEMCACHEREQUEST']._serialized_end=10304 - _globals['_MEMCACHERESPONSE']._serialized_start=10306 - _globals['_MEMCACHERESPONSE']._serialized_end=10352 - _globals['_MASTERPASSWORDREENTRYREQUEST']._serialized_start=10354 - _globals['_MASTERPASSWORDREENTRYREQUEST']._serialized_end=10473 - _globals['_MASTERPASSWORDREENTRYRESPONSE']._serialized_start=10475 - _globals['_MASTERPASSWORDREENTRYRESPONSE']._serialized_end=10567 - _globals['_DEVICEREGISTRATIONREQUEST']._serialized_start=10570 - _globals['_DEVICEREGISTRATIONREQUEST']._serialized_end=10749 - _globals['_DEVICEVERIFICATIONREQUEST']._serialized_start=10752 - _globals['_DEVICEVERIFICATIONREQUEST']._serialized_end=10906 - _globals['_DEVICEVERIFICATIONRESPONSE']._serialized_start=10909 - _globals['_DEVICEVERIFICATIONRESPONSE']._serialized_end=11087 - _globals['_DEVICEAPPROVALREQUEST']._serialized_start=11090 - _globals['_DEVICEAPPROVALREQUEST']._serialized_end=11290 - _globals['_DEVICEAPPROVALRESPONSE']._serialized_start=11292 - _globals['_DEVICEAPPROVALRESPONSE']._serialized_end=11349 - _globals['_APPROVEDEVICEREQUEST']._serialized_start=11351 - _globals['_APPROVEDEVICEREQUEST']._serialized_end=11477 - _globals['_ENTERPRISEUSERALIASREQUEST']._serialized_start=11479 - _globals['_ENTERPRISEUSERALIASREQUEST']._serialized_end=11548 - _globals['_ENTERPRISEUSERADDALIASREQUEST']._serialized_start=11550 - _globals['_ENTERPRISEUSERADDALIASREQUEST']._serialized_end=11639 - _globals['_ENTERPRISEUSERADDALIASREQUESTV2']._serialized_start=11641 - _globals['_ENTERPRISEUSERADDALIASREQUESTV2']._serialized_end=11760 - _globals['_ENTERPRISEUSERADDALIASSTATUS']._serialized_start=11762 - _globals['_ENTERPRISEUSERADDALIASSTATUS']._serialized_end=11834 - _globals['_ENTERPRISEUSERADDALIASRESPONSE']._serialized_start=11836 - _globals['_ENTERPRISEUSERADDALIASRESPONSE']._serialized_end=11930 - _globals['_DEVICE']._serialized_start=11932 - _globals['_DEVICE']._serialized_end=11970 - _globals['_REGISTERDEVICEDATAKEYREQUEST']._serialized_start=11972 - _globals['_REGISTERDEVICEDATAKEYREQUEST']._serialized_end=12064 - _globals['_VALIDATECREATEUSERVERIFICATIONCODEREQUEST']._serialized_start=12066 - _globals['_VALIDATECREATEUSERVERIFICATIONCODEREQUEST']._serialized_end=12176 - _globals['_VALIDATEDEVICEVERIFICATIONCODEREQUEST']._serialized_start=12179 - _globals['_VALIDATEDEVICEVERIFICATIONCODEREQUEST']._serialized_end=12342 - _globals['_SENDSESSIONMESSAGEREQUEST']._serialized_start=12344 - _globals['_SENDSESSIONMESSAGEREQUEST']._serialized_end=12433 - _globals['_GLOBALUSERACCOUNT']._serialized_start=12435 - _globals['_GLOBALUSERACCOUNT']._serialized_end=12512 - _globals['_ACCOUNTUSERNAME']._serialized_start=12514 - _globals['_ACCOUNTUSERNAME']._serialized_end=12569 - _globals['_SSOSERVICEPROVIDERREQUEST']._serialized_start=12571 - _globals['_SSOSERVICEPROVIDERREQUEST']._serialized_end=12651 - _globals['_SSOSERVICEPROVIDERRESPONSE']._serialized_start=12653 - _globals['_SSOSERVICEPROVIDERRESPONSE']._serialized_end=12750 - _globals['_USERSETTINGREQUEST']._serialized_start=12752 - _globals['_USERSETTINGREQUEST']._serialized_end=12804 - _globals['_THROTTLESTATE']._serialized_start=12806 - _globals['_THROTTLESTATE']._serialized_end=12908 - _globals['_THROTTLESTATE2']._serialized_start=12911 - _globals['_THROTTLESTATE2']._serialized_end=13092 - _globals['_DEVICEINFORMATION']._serialized_start=13095 - _globals['_DEVICEINFORMATION']._serialized_end=13246 - _globals['_USERSETTING']._serialized_start=13248 - _globals['_USERSETTING']._serialized_end=13290 - _globals['_USERDATAKEYREQUEST']._serialized_start=13292 - _globals['_USERDATAKEYREQUEST']._serialized_end=13338 - _globals['_USERDATAKEYBYNODEREQUEST']._serialized_start=13340 - _globals['_USERDATAKEYBYNODEREQUEST']._serialized_end=13383 - _globals['_ENTERPRISEUSERIDDATAKEYPAIR']._serialized_start=13386 - _globals['_ENTERPRISEUSERIDDATAKEYPAIR']._serialized_end=13514 - _globals['_USERDATAKEY']._serialized_start=13517 - _globals['_USERDATAKEY']._serialized_end=13666 - _globals['_USERDATAKEYRESPONSE']._serialized_start=13668 - _globals['_USERDATAKEYRESPONSE']._serialized_end=13790 - _globals['_MASTERPASSWORDRECOVERYVERIFICATIONREQUEST']._serialized_start=13792 - _globals['_MASTERPASSWORDRECOVERYVERIFICATIONREQUEST']._serialized_end=13864 - _globals['_GETSECURITYQUESTIONV3REQUEST']._serialized_start=13866 - _globals['_GETSECURITYQUESTIONV3REQUEST']._serialized_end=13951 - _globals['_GETSECURITYQUESTIONV3RESPONSE']._serialized_start=13953 - _globals['_GETSECURITYQUESTIONV3RESPONSE']._serialized_end=14067 - _globals['_GETDATAKEYBACKUPV3REQUEST']._serialized_start=14069 - _globals['_GETDATAKEYBACKUPV3REQUEST']._serialized_end=14179 - _globals['_PASSWORDRULES']._serialized_start=14181 - _globals['_PASSWORDRULES']._serialized_end=14299 - _globals['_GETDATAKEYBACKUPV3RESPONSE']._serialized_start=14302 - _globals['_GETDATAKEYBACKUPV3RESPONSE']._serialized_end=14631 - _globals['_GETPUBLICKEYSREQUEST']._serialized_start=14633 - _globals['_GETPUBLICKEYSREQUEST']._serialized_end=14674 - _globals['_PUBLICKEYRESPONSE']._serialized_start=14676 - _globals['_PUBLICKEYRESPONSE']._serialized_end=14790 - _globals['_GETPUBLICKEYSRESPONSE']._serialized_start=14792 - _globals['_GETPUBLICKEYSRESPONSE']._serialized_end=14872 - _globals['_SETECCKEYPAIRREQUEST']._serialized_start=14874 - _globals['_SETECCKEYPAIRREQUEST']._serialized_end=14944 - _globals['_SETECCKEYPAIRSREQUEST']._serialized_start=14946 - _globals['_SETECCKEYPAIRSREQUEST']._serialized_end=15019 - _globals['_SETECCKEYPAIRSRESPONSE']._serialized_start=15021 - _globals['_SETECCKEYPAIRSRESPONSE']._serialized_end=15103 - _globals['_TEAMECCKEYPAIR']._serialized_start=15105 - _globals['_TEAMECCKEYPAIR']._serialized_end=15186 - _globals['_TEAMECCKEYPAIRRESPONSE']._serialized_start=15188 - _globals['_TEAMECCKEYPAIRRESPONSE']._serialized_end=15276 - _globals['_GETKSMPUBLICKEYSREQUEST']._serialized_start=15278 - _globals['_GETKSMPUBLICKEYSREQUEST']._serialized_end=15346 - _globals['_DEVICEPUBLICKEYRESPONSE']._serialized_start=15348 - _globals['_DEVICEPUBLICKEYRESPONSE']._serialized_end=15433 - _globals['_GETKSMPUBLICKEYSRESPONSE']._serialized_start=15435 - _globals['_GETKSMPUBLICKEYSRESPONSE']._serialized_end=15524 - _globals['_ADDAPPSHARESREQUEST']._serialized_start=15526 - _globals['_ADDAPPSHARESREQUEST']._serialized_end=15614 - _globals['_REMOVEAPPSHARESREQUEST']._serialized_start=15616 - _globals['_REMOVEAPPSHARESREQUEST']._serialized_end=15678 - _globals['_APPSHAREADD']._serialized_start=15681 - _globals['_APPSHAREADD']._serialized_end=15816 - _globals['_APPSHARE']._serialized_start=15819 - _globals['_APPSHARE']._serialized_end=15956 - _globals['_ADDAPPCLIENTREQUEST']._serialized_start=15959 - _globals['_ADDAPPCLIENTREQUEST']._serialized_end=16176 - _globals['_REMOVEAPPCLIENTSREQUEST']._serialized_start=16178 - _globals['_REMOVEAPPCLIENTSREQUEST']._serialized_end=16242 - _globals['_ADDEXTERNALSHAREREQUEST']._serialized_start=16245 - _globals['_ADDEXTERNALSHAREREQUEST']._serialized_end=16415 - _globals['_APPCLIENT']._serialized_start=16418 - _globals['_APPCLIENT']._serialized_end=16693 - _globals['_GETAPPINFOREQUEST']._serialized_start=16695 - _globals['_GETAPPINFOREQUEST']._serialized_end=16736 - _globals['_APPINFO']._serialized_start=16739 - _globals['_APPINFO']._serialized_end=16881 - _globals['_GETAPPINFORESPONSE']._serialized_start=16883 - _globals['_GETAPPINFORESPONSE']._serialized_end=16945 - _globals['_APPLICATIONSUMMARY']._serialized_start=16948 - _globals['_APPLICATIONSUMMARY']._serialized_end=17161 - _globals['_GETAPPLICATIONSSUMMARYRESPONSE']._serialized_start=17163 - _globals['_GETAPPLICATIONSSUMMARYRESPONSE']._serialized_end=17259 - _globals['_GETVERIFICATIONTOKENREQUEST']._serialized_start=17261 - _globals['_GETVERIFICATIONTOKENREQUEST']._serialized_end=17308 - _globals['_GETVERIFICATIONTOKENRESPONSE']._serialized_start=17310 - _globals['_GETVERIFICATIONTOKENRESPONSE']._serialized_end=17376 - _globals['_SENDSHAREINVITEREQUEST']._serialized_start=17378 - _globals['_SENDSHAREINVITEREQUEST']._serialized_end=17417 - _globals['_TIMELIMITEDACCESSREQUEST']._serialized_start=17420 - _globals['_TIMELIMITEDACCESSREQUEST']._serialized_end=17617 - _globals['_TIMELIMITEDACCESSSTATUS']._serialized_start=17619 - _globals['_TIMELIMITEDACCESSSTATUS']._serialized_end=17674 - _globals['_TIMELIMITEDACCESSRESPONSE']._serialized_start=17677 - _globals['_TIMELIMITEDACCESSRESPONSE']._serialized_end=17925 - _globals['_REQUESTDOWNLOADREQUEST']._serialized_start=17927 - _globals['_REQUESTDOWNLOADREQUEST']._serialized_end=17970 - _globals['_REQUESTDOWNLOADRESPONSE']._serialized_start=17972 - _globals['_REQUESTDOWNLOADRESPONSE']._serialized_end=18075 - _globals['_DOWNLOAD']._serialized_start=18077 - _globals['_DOWNLOAD']._serialized_end=18145 - _globals['_DELETEUSERREQUEST']._serialized_start=18147 - _globals['_DELETEUSERREQUEST']._serialized_end=18182 - _globals['_CHANGEMASTERPASSWORDREQUEST']._serialized_start=18185 - _globals['_CHANGEMASTERPASSWORDREQUEST']._serialized_end=18317 - _globals['_CHANGEMASTERPASSWORDRESPONSE']._serialized_start=18319 - _globals['_CHANGEMASTERPASSWORDRESPONSE']._serialized_end=18380 - _globals['_ACCOUNTRECOVERYSETUPREQUEST']._serialized_start=18382 - _globals['_ACCOUNTRECOVERYSETUPREQUEST']._serialized_end=18471 - _globals['_ACCOUNTRECOVERYVERIFYCODERESPONSE']._serialized_start=18474 - _globals['_ACCOUNTRECOVERYVERIFYCODERESPONSE']._serialized_end=18646 - _globals['_EMERGENCYACCESSLOGINREQUEST']._serialized_start=18648 - _globals['_EMERGENCYACCESSLOGINREQUEST']._serialized_end=18692 - _globals['_EMERGENCYACCESSLOGINRESPONSE']._serialized_start=18695 - _globals['_EMERGENCYACCESSLOGINRESPONSE']._serialized_end=18876 - _globals['_USERTEAMKEY']._serialized_start=18879 - _globals['_USERTEAMKEY']._serialized_end=19057 - _globals['_GENERICREQUESTRESPONSE']._serialized_start=19059 - _globals['_GENERICREQUESTRESPONSE']._serialized_end=19100 - _globals['_PASSKEYREGISTRATIONREQUEST']._serialized_start=19102 - _globals['_PASSKEYREGISTRATIONREQUEST']._serialized_end=19204 - _globals['_PASSKEYREGISTRATIONRESPONSE']._serialized_start=19206 - _globals['_PASSKEYREGISTRATIONRESPONSE']._serialized_end=19286 - _globals['_PASSKEYREGISTRATIONFINALIZATION']._serialized_start=19289 - _globals['_PASSKEYREGISTRATIONFINALIZATION']._serialized_end=19421 - _globals['_PASSKEYAUTHENTICATIONREQUEST']._serialized_start=19424 - _globals['_PASSKEYAUTHENTICATIONREQUEST']._serialized_end=19731 - _globals['_PASSKEYAUTHENTICATIONRESPONSE']._serialized_start=19734 - _globals['_PASSKEYAUTHENTICATIONRESPONSE']._serialized_end=19873 - _globals['_PASSKEYVALIDATIONREQUEST']._serialized_start=19876 - _globals['_PASSKEYVALIDATIONREQUEST']._serialized_end=20067 - _globals['_PASSKEYVALIDATIONRESPONSE']._serialized_start=20069 - _globals['_PASSKEYVALIDATIONRESPONSE']._serialized_end=20142 - _globals['_UPDATEPASSKEYREQUEST']._serialized_start=20144 - _globals['_UPDATEPASSKEYREQUEST']._serialized_end=20248 - _globals['_PASSKEYLISTREQUEST']._serialized_start=20250 - _globals['_PASSKEYLISTREQUEST']._serialized_end=20295 - _globals['_PASSKEYINFO']._serialized_start=20298 - _globals['_PASSKEYINFO']._serialized_end=20462 - _globals['_PASSKEYLISTRESPONSE']._serialized_start=20464 - _globals['_PASSKEYLISTRESPONSE']._serialized_end=20535 + _globals['_SUPPORTEDLANGUAGE']._serialized_start=21515 + _globals['_SUPPORTEDLANGUAGE']._serialized_end=21854 + _globals['_LOGINTYPE']._serialized_start=21856 + _globals['_LOGINTYPE']._serialized_end=21963 + _globals['_DEVICESTATUS']._serialized_start=21965 + _globals['_DEVICESTATUS']._serialized_end=22078 + _globals['_LICENSESTATUS']._serialized_start=22080 + _globals['_LICENSESTATUS']._serialized_end=22145 + _globals['_ACCOUNTTYPE']._serialized_start=22147 + _globals['_ACCOUNTTYPE']._serialized_end=22202 + _globals['_SESSIONTOKENTYPE']._serialized_start=22205 + _globals['_SESSIONTOKENTYPE']._serialized_end=22492 + _globals['_VERSION']._serialized_start=22494 + _globals['_VERSION']._serialized_end=22565 + _globals['_MASTERPASSWORDREENTRYACTIONTYPE']._serialized_start=22567 + _globals['_MASTERPASSWORDREENTRYACTIONTYPE']._serialized_end=22622 + _globals['_LOGINMETHOD']._serialized_start=22624 + _globals['_LOGINMETHOD']._serialized_end=22732 + _globals['_LOGINSTATE']._serialized_start=22735 + _globals['_LOGINSTATE']._serialized_end=23309 + _globals['_ENCRYPTEDDATAKEYTYPE']._serialized_start=23311 + _globals['_ENCRYPTEDDATAKEYTYPE']._serialized_end=23418 + _globals['_PASSWORDMETHOD']._serialized_start=23420 + _globals['_PASSWORDMETHOD']._serialized_end=23465 + _globals['_TWOFACTORPUSHTYPE']._serialized_start=23468 + _globals['_TWOFACTORPUSHTYPE']._serialized_end=23653 + _globals['_TWOFACTORVALUETYPE']._serialized_start=23656 + _globals['_TWOFACTORVALUETYPE']._serialized_end=23851 + _globals['_TWOFACTORCHANNELTYPE']._serialized_start=23854 + _globals['_TWOFACTORCHANNELTYPE']._serialized_end=24079 + _globals['_TWOFACTOREXPIRATION']._serialized_start=24082 + _globals['_TWOFACTOREXPIRATION']._serialized_end=24253 + _globals['_LICENSETYPE']._serialized_start=24255 + _globals['_LICENSETYPE']._serialized_end=24319 + _globals['_OBJECTTYPES']._serialized_start=24321 + _globals['_OBJECTTYPES']._serialized_end=24426 + _globals['_ENCRYPTEDOBJECTTYPE']._serialized_start=24429 + _globals['_ENCRYPTEDOBJECTTYPE']._serialized_end=24718 + _globals['_MASTERPASSWORDREENTRYSTATUS']._serialized_start=24720 + _globals['_MASTERPASSWORDREENTRYSTATUS']._serialized_end=24797 + _globals['_ALTERNATEAUTHENTICATIONTYPE']._serialized_start=24799 + _globals['_ALTERNATEAUTHENTICATIONTYPE']._serialized_end=24895 + _globals['_THROTTLETYPE']._serialized_start=24898 + _globals['_THROTTLETYPE']._serialized_end=25180 + _globals['_REGION']._serialized_start=25182 + _globals['_REGION']._serialized_end=25254 + _globals['_APPLICATIONSHARETYPE']._serialized_start=25256 + _globals['_APPLICATIONSHARETYPE']._serialized_end=25324 + _globals['_TIMELIMITEDACCESSTYPE']._serialized_start=25327 + _globals['_TIMELIMITEDACCESSTYPE']._serialized_end=25491 + _globals['_BACKUPKEYTYPE']._serialized_start=25493 + _globals['_BACKUPKEYTYPE']._serialized_end=25553 + _globals['_GENERICSTATUS']._serialized_start=25555 + _globals['_GENERICSTATUS']._serialized_end=25642 + _globals['_AUTHENTICATORATTACHMENT']._serialized_start=25644 + _globals['_AUTHENTICATORATTACHMENT']._serialized_end=25722 + _globals['_PASSKEYPURPOSE']._serialized_start=25724 + _globals['_PASSKEYPURPOSE']._serialized_end=25769 + _globals['_CLIENTFORMFACTOR']._serialized_start=25771 + _globals['_CLIENTFORMFACTOR']._serialized_end=25846 + _globals['_QRCMESSAGEKEY']._serialized_start=54 + _globals['_QRCMESSAGEKEY']._serialized_end=177 + _globals['_APIREQUEST']._serialized_start=180 + _globals['_APIREQUEST']._serialized_end=410 + _globals['_APIREQUESTPAYLOAD']._serialized_start=412 + _globals['_APIREQUESTPAYLOAD']._serialized_end=518 + _globals['_TRANSFORM']._serialized_start=520 + _globals['_TRANSFORM']._serialized_end=574 + _globals['_DEVICEREQUEST']._serialized_start=577 + _globals['_DEVICEREQUEST']._serialized_end=737 + _globals['_AUTHREQUEST']._serialized_start=739 + _globals['_AUTHREQUEST']._serialized_end=823 + _globals['_NEWUSERMINIMUMPARAMS']._serialized_start=826 + _globals['_NEWUSERMINIMUMPARAMS']._serialized_end=1021 + _globals['_PRELOGINREQUEST']._serialized_start=1024 + _globals['_PRELOGINREQUEST']._serialized_end=1161 + _globals['_LOGINREQUEST']._serialized_start=1164 + _globals['_LOGINREQUEST']._serialized_end=1420 + _globals['_DEVICERESPONSE']._serialized_start=1422 + _globals['_DEVICERESPONSE']._serialized_end=1514 + _globals['_SALT']._serialized_start=1516 + _globals['_SALT']._serialized_end=1602 + _globals['_TWOFACTORCHANNEL']._serialized_start=1604 + _globals['_TWOFACTORCHANNEL']._serialized_end=1636 + _globals['_STARTLOGINREQUEST']._serialized_start=1639 + _globals['_STARTLOGINREQUEST']._serialized_end=2019 + _globals['_LOGINRESPONSE']._serialized_start=2022 + _globals['_LOGINRESPONSE']._serialized_end=2573 + _globals['_SWITCHLISTELEMENT']._serialized_start=2575 + _globals['_SWITCHLISTELEMENT']._serialized_end=2693 + _globals['_SWITCHLISTRESPONSE']._serialized_start=2695 + _globals['_SWITCHLISTRESPONSE']._serialized_end=2768 + _globals['_SSOUSERINFO']._serialized_start=2771 + _globals['_SSOUSERINFO']._serialized_end=2911 + _globals['_PRELOGINRESPONSE']._serialized_start=2914 + _globals['_PRELOGINRESPONSE']._serialized_end=3128 + _globals['_LOGINASUSERREQUEST']._serialized_start=3130 + _globals['_LOGINASUSERREQUEST']._serialized_end=3168 + _globals['_LOGINASUSERRESPONSE']._serialized_start=3170 + _globals['_LOGINASUSERRESPONSE']._serialized_end=3257 + _globals['_VALIDATEAUTHHASHREQUEST']._serialized_start=3260 + _globals['_VALIDATEAUTHHASHREQUEST']._serialized_end=3392 + _globals['_TWOFACTORCHANNELINFO']._serialized_start=3395 + _globals['_TWOFACTORCHANNELINFO']._serialized_end=3719 + _globals['_TWOFACTORDUOSTATUS']._serialized_start=3721 + _globals['_TWOFACTORDUOSTATUS']._serialized_end=3821 + _globals['_TWOFACTORADDREQUEST']._serialized_start=3824 + _globals['_TWOFACTORADDREQUEST']._serialized_end=4023 + _globals['_TWOFACTORRENAMEREQUEST']._serialized_start=4025 + _globals['_TWOFACTORRENAMEREQUEST']._serialized_end=4091 + _globals['_TWOFACTORADDRESPONSE']._serialized_start=4093 + _globals['_TWOFACTORADDRESPONSE']._serialized_end=4154 + _globals['_TWOFACTORDELETEREQUEST']._serialized_start=4156 + _globals['_TWOFACTORDELETEREQUEST']._serialized_end=4201 + _globals['_TWOFACTORLISTRESPONSE']._serialized_start=4203 + _globals['_TWOFACTORLISTRESPONSE']._serialized_end=4300 + _globals['_TWOFACTORUPDATEEXPIRATIONREQUEST']._serialized_start=4302 + _globals['_TWOFACTORUPDATEEXPIRATIONREQUEST']._serialized_end=4391 + _globals['_TWOFACTORVALIDATEREQUEST']._serialized_start=4394 + _globals['_TWOFACTORVALIDATEREQUEST']._serialized_end=4595 + _globals['_TWOFACTORVALIDATERESPONSE']._serialized_start=4597 + _globals['_TWOFACTORVALIDATERESPONSE']._serialized_end=4653 + _globals['_TWOFACTORSENDPUSHREQUEST']._serialized_start=4656 + _globals['_TWOFACTORSENDPUSHREQUEST']._serialized_end=4840 + _globals['_LICENSE']._serialized_start=4843 + _globals['_LICENSE']._serialized_end=4974 + _globals['_OWNERLESSRECORD']._serialized_start=4976 + _globals['_OWNERLESSRECORD']._serialized_end=5047 + _globals['_OWNERLESSRECORDS']._serialized_start=5049 + _globals['_OWNERLESSRECORDS']._serialized_end=5125 + _globals['_USERAUTHREQUEST']._serialized_start=5128 + _globals['_USERAUTHREQUEST']._serialized_end=5343 + _globals['_UIDREQUEST']._serialized_start=5345 + _globals['_UIDREQUEST']._serialized_end=5370 + _globals['_DEVICEUPDATEREQUEST']._serialized_start=5373 + _globals['_DEVICEUPDATEREQUEST']._serialized_end=5628 + _globals['_DEVICEUPDATERESPONSE']._serialized_start=5631 + _globals['_DEVICEUPDATERESPONSE']._serialized_end=5887 + _globals['_REGISTERDEVICEINREGIONREQUEST']._serialized_start=5890 + _globals['_REGISTERDEVICEINREGIONREQUEST']._serialized_end=6103 + _globals['_REGISTRATIONREQUEST']._serialized_start=6106 + _globals['_REGISTRATIONREQUEST']._serialized_end=6482 + _globals['_CONVERTUSERTOV3REQUEST']._serialized_start=6485 + _globals['_CONVERTUSERTOV3REQUEST']._serialized_end=6693 + _globals['_REVISIONRESPONSE']._serialized_start=6695 + _globals['_REVISIONRESPONSE']._serialized_end=6731 + _globals['_CHANGEEMAILREQUEST']._serialized_start=6733 + _globals['_CHANGEEMAILREQUEST']._serialized_end=6771 + _globals['_CHANGEEMAILRESPONSE']._serialized_start=6773 + _globals['_CHANGEEMAILRESPONSE']._serialized_end=6829 + _globals['_EMAILVERIFICATIONLINKRESPONSE']._serialized_start=6831 + _globals['_EMAILVERIFICATIONLINKRESPONSE']._serialized_end=6885 + _globals['_SECURITYDATA']._serialized_start=6887 + _globals['_SECURITYDATA']._serialized_end=6928 + _globals['_SECURITYSCOREDATA']._serialized_start=6930 + _globals['_SECURITYSCOREDATA']._serialized_end=6994 + _globals['_SECURITYDATAREQUEST']._serialized_start=6997 + _globals['_SECURITYDATAREQUEST']._serialized_end=7264 + _globals['_SECURITYREPORTINCREMENTALDATA']._serialized_start=7267 + _globals['_SECURITYREPORTINCREMENTALDATA']._serialized_end=7593 + _globals['_SECURITYREPORT']._serialized_start=7596 + _globals['_SECURITYREPORT']._serialized_end=7883 + _globals['_SECURITYREPORTSAVEREQUEST']._serialized_start=7885 + _globals['_SECURITYREPORTSAVEREQUEST']._serialized_end=7995 + _globals['_SECURITYREPORTREQUEST']._serialized_start=7997 + _globals['_SECURITYREPORTREQUEST']._serialized_end=8038 + _globals['_SECURITYREPORTRESPONSE']._serialized_start=8041 + _globals['_SECURITYREPORTRESPONSE']._serialized_end=8286 + _globals['_INCREMENTALSECURITYDATAREQUEST']._serialized_start=8288 + _globals['_INCREMENTALSECURITYDATAREQUEST']._serialized_end=8347 + _globals['_INCREMENTALSECURITYDATARESPONSE']._serialized_start=8350 + _globals['_INCREMENTALSECURITYDATARESPONSE']._serialized_end=8496 + _globals['_REUSEDPASSWORDSREQUEST']._serialized_start=8498 + _globals['_REUSEDPASSWORDSREQUEST']._serialized_end=8537 + _globals['_SUMMARYCONSOLEREPORT']._serialized_start=8539 + _globals['_SUMMARYCONSOLEREPORT']._serialized_end=8601 + _globals['_CHANGETOKEYTYPEONE']._serialized_start=8603 + _globals['_CHANGETOKEYTYPEONE']._serialized_end=8727 + _globals['_CHANGETOKEYTYPEONEREQUEST']._serialized_start=8729 + _globals['_CHANGETOKEYTYPEONEREQUEST']._serialized_end=8820 + _globals['_CHANGETOKEYTYPEONESTATUS']._serialized_start=8822 + _globals['_CHANGETOKEYTYPEONESTATUS']._serialized_end=8907 + _globals['_CHANGETOKEYTYPEONERESPONSE']._serialized_start=8909 + _globals['_CHANGETOKEYTYPEONERESPONSE']._serialized_end=9013 + _globals['_GETCHANGEKEYTYPESREQUEST']._serialized_start=9016 + _globals['_GETCHANGEKEYTYPESREQUEST']._serialized_end=9201 + _globals['_GETCHANGEKEYTYPESRESPONSE']._serialized_start=9204 + _globals['_GETCHANGEKEYTYPESRESPONSE']._serialized_end=9334 + _globals['_ALLOWEDKEYTYPES']._serialized_start=9337 + _globals['_ALLOWEDKEYTYPES']._serialized_end=9466 + _globals['_CHANGEKEYTYPES']._serialized_start=9468 + _globals['_CHANGEKEYTYPES']._serialized_end=9529 + _globals['_CHANGEKEYTYPE']._serialized_start=9532 + _globals['_CHANGEKEYTYPE']._serialized_end=9746 + _globals['_SETKEY']._serialized_start=9748 + _globals['_SETKEY']._serialized_end=9781 + _globals['_SETKEYREQUEST']._serialized_start=9783 + _globals['_SETKEYREQUEST']._serialized_end=9836 + _globals['_CREATEUSERREQUEST']._serialized_start=9839 + _globals['_CREATEUSERREQUEST']._serialized_end=10497 + _globals['_NODEENFORCEMENTADDORUPDATEREQUEST']._serialized_start=10499 + _globals['_NODEENFORCEMENTADDORUPDATEREQUEST']._serialized_end=10586 + _globals['_NODEENFORCEMENTREMOVEREQUEST']._serialized_start=10588 + _globals['_NODEENFORCEMENTREMOVEREQUEST']._serialized_end=10655 + _globals['_APIREQUESTBYKEY']._serialized_start=10658 + _globals['_APIREQUESTBYKEY']._serialized_end=10817 + _globals['_APIREQUESTBYKATOKAKEY']._serialized_start=10820 + _globals['_APIREQUESTBYKATOKAKEY']._serialized_end=11019 + _globals['_MEMCACHEREQUEST']._serialized_start=11021 + _globals['_MEMCACHEREQUEST']._serialized_end=11067 + _globals['_MEMCACHERESPONSE']._serialized_start=11069 + _globals['_MEMCACHERESPONSE']._serialized_end=11115 + _globals['_MASTERPASSWORDREENTRYREQUEST']._serialized_start=11117 + _globals['_MASTERPASSWORDREENTRYREQUEST']._serialized_end=11236 + _globals['_MASTERPASSWORDREENTRYRESPONSE']._serialized_start=11238 + _globals['_MASTERPASSWORDREENTRYRESPONSE']._serialized_end=11330 + _globals['_DEVICEREGISTRATIONREQUEST']._serialized_start=11333 + _globals['_DEVICEREGISTRATIONREQUEST']._serialized_end=11530 + _globals['_DEVICEVERIFICATIONREQUEST']._serialized_start=11533 + _globals['_DEVICEVERIFICATIONREQUEST']._serialized_end=11687 + _globals['_DEVICEVERIFICATIONRESPONSE']._serialized_start=11690 + _globals['_DEVICEVERIFICATIONRESPONSE']._serialized_end=11868 + _globals['_DEVICEAPPROVALREQUEST']._serialized_start=11871 + _globals['_DEVICEAPPROVALREQUEST']._serialized_end=12071 + _globals['_DEVICEAPPROVALRESPONSE']._serialized_start=12073 + _globals['_DEVICEAPPROVALRESPONSE']._serialized_end=12130 + _globals['_APPROVEDEVICEREQUEST']._serialized_start=12132 + _globals['_APPROVEDEVICEREQUEST']._serialized_end=12258 + _globals['_ENTERPRISEUSERALIASREQUEST']._serialized_start=12260 + _globals['_ENTERPRISEUSERALIASREQUEST']._serialized_end=12329 + _globals['_ENTERPRISEUSERADDALIASREQUEST']._serialized_start=12331 + _globals['_ENTERPRISEUSERADDALIASREQUEST']._serialized_end=12420 + _globals['_ENTERPRISEUSERADDALIASREQUESTV2']._serialized_start=12422 + _globals['_ENTERPRISEUSERADDALIASREQUESTV2']._serialized_end=12541 + _globals['_ENTERPRISEUSERADDALIASSTATUS']._serialized_start=12543 + _globals['_ENTERPRISEUSERADDALIASSTATUS']._serialized_end=12615 + _globals['_ENTERPRISEUSERADDALIASRESPONSE']._serialized_start=12617 + _globals['_ENTERPRISEUSERADDALIASRESPONSE']._serialized_end=12711 + _globals['_DEVICE']._serialized_start=12713 + _globals['_DEVICE']._serialized_end=12751 + _globals['_REGISTERDEVICEDATAKEYREQUEST']._serialized_start=12753 + _globals['_REGISTERDEVICEDATAKEYREQUEST']._serialized_end=12845 + _globals['_VALIDATECREATEUSERVERIFICATIONCODEREQUEST']._serialized_start=12847 + _globals['_VALIDATECREATEUSERVERIFICATIONCODEREQUEST']._serialized_end=12957 + _globals['_VALIDATEDEVICEVERIFICATIONCODEREQUEST']._serialized_start=12960 + _globals['_VALIDATEDEVICEVERIFICATIONCODEREQUEST']._serialized_end=13123 + _globals['_SENDSESSIONMESSAGEREQUEST']._serialized_start=13125 + _globals['_SENDSESSIONMESSAGEREQUEST']._serialized_end=13214 + _globals['_GLOBALUSERACCOUNT']._serialized_start=13216 + _globals['_GLOBALUSERACCOUNT']._serialized_end=13293 + _globals['_ACCOUNTUSERNAME']._serialized_start=13295 + _globals['_ACCOUNTUSERNAME']._serialized_end=13350 + _globals['_SSOSERVICEPROVIDERREQUEST']._serialized_start=13352 + _globals['_SSOSERVICEPROVIDERREQUEST']._serialized_end=13432 + _globals['_SSOSERVICEPROVIDERRESPONSE']._serialized_start=13434 + _globals['_SSOSERVICEPROVIDERRESPONSE']._serialized_end=13531 + _globals['_USERSETTINGREQUEST']._serialized_start=13533 + _globals['_USERSETTINGREQUEST']._serialized_end=13585 + _globals['_THROTTLESTATE']._serialized_start=13587 + _globals['_THROTTLESTATE']._serialized_end=13689 + _globals['_THROTTLESTATE2']._serialized_start=13692 + _globals['_THROTTLESTATE2']._serialized_end=13873 + _globals['_DEVICEINFORMATION']._serialized_start=13876 + _globals['_DEVICEINFORMATION']._serialized_end=14027 + _globals['_USERSETTING']._serialized_start=14029 + _globals['_USERSETTING']._serialized_end=14071 + _globals['_USERDATAKEYREQUEST']._serialized_start=14073 + _globals['_USERDATAKEYREQUEST']._serialized_end=14119 + _globals['_USERDATAKEYBYNODEREQUEST']._serialized_start=14121 + _globals['_USERDATAKEYBYNODEREQUEST']._serialized_end=14164 + _globals['_ENTERPRISEUSERIDDATAKEYPAIR']._serialized_start=14167 + _globals['_ENTERPRISEUSERIDDATAKEYPAIR']._serialized_end=14295 + _globals['_USERDATAKEY']._serialized_start=14298 + _globals['_USERDATAKEY']._serialized_end=14447 + _globals['_USERDATAKEYRESPONSE']._serialized_start=14449 + _globals['_USERDATAKEYRESPONSE']._serialized_end=14571 + _globals['_MASTERPASSWORDRECOVERYVERIFICATIONREQUEST']._serialized_start=14573 + _globals['_MASTERPASSWORDRECOVERYVERIFICATIONREQUEST']._serialized_end=14645 + _globals['_GETSECURITYQUESTIONV3REQUEST']._serialized_start=14647 + _globals['_GETSECURITYQUESTIONV3REQUEST']._serialized_end=14732 + _globals['_GETSECURITYQUESTIONV3RESPONSE']._serialized_start=14734 + _globals['_GETSECURITYQUESTIONV3RESPONSE']._serialized_end=14848 + _globals['_GETDATAKEYBACKUPV3REQUEST']._serialized_start=14850 + _globals['_GETDATAKEYBACKUPV3REQUEST']._serialized_end=14960 + _globals['_PASSWORDRULES']._serialized_start=14962 + _globals['_PASSWORDRULES']._serialized_end=15080 + _globals['_GETDATAKEYBACKUPV3RESPONSE']._serialized_start=15083 + _globals['_GETDATAKEYBACKUPV3RESPONSE']._serialized_end=15412 + _globals['_GETPUBLICKEYSREQUEST']._serialized_start=15414 + _globals['_GETPUBLICKEYSREQUEST']._serialized_end=15455 + _globals['_PUBLICKEYRESPONSE']._serialized_start=15457 + _globals['_PUBLICKEYRESPONSE']._serialized_end=15571 + _globals['_GETPUBLICKEYSRESPONSE']._serialized_start=15573 + _globals['_GETPUBLICKEYSRESPONSE']._serialized_end=15653 + _globals['_SETECCKEYPAIRREQUEST']._serialized_start=15655 + _globals['_SETECCKEYPAIRREQUEST']._serialized_end=15725 + _globals['_SETECCKEYPAIRSREQUEST']._serialized_start=15727 + _globals['_SETECCKEYPAIRSREQUEST']._serialized_end=15800 + _globals['_SETECCKEYPAIRSRESPONSE']._serialized_start=15802 + _globals['_SETECCKEYPAIRSRESPONSE']._serialized_end=15884 + _globals['_TEAMECCKEYPAIR']._serialized_start=15886 + _globals['_TEAMECCKEYPAIR']._serialized_end=15967 + _globals['_TEAMECCKEYPAIRRESPONSE']._serialized_start=15969 + _globals['_TEAMECCKEYPAIRRESPONSE']._serialized_end=16057 + _globals['_GETKSMPUBLICKEYSREQUEST']._serialized_start=16059 + _globals['_GETKSMPUBLICKEYSREQUEST']._serialized_end=16127 + _globals['_DEVICEPUBLICKEYRESPONSE']._serialized_start=16129 + _globals['_DEVICEPUBLICKEYRESPONSE']._serialized_end=16214 + _globals['_GETKSMPUBLICKEYSRESPONSE']._serialized_start=16216 + _globals['_GETKSMPUBLICKEYSRESPONSE']._serialized_end=16305 + _globals['_ADDAPPSHARESREQUEST']._serialized_start=16307 + _globals['_ADDAPPSHARESREQUEST']._serialized_end=16395 + _globals['_REMOVEAPPSHARESREQUEST']._serialized_start=16397 + _globals['_REMOVEAPPSHARESREQUEST']._serialized_end=16459 + _globals['_APPSHAREADD']._serialized_start=16462 + _globals['_APPSHAREADD']._serialized_end=16597 + _globals['_APPSHARE']._serialized_start=16600 + _globals['_APPSHARE']._serialized_end=16737 + _globals['_ADDAPPCLIENTREQUEST']._serialized_start=16740 + _globals['_ADDAPPCLIENTREQUEST']._serialized_end=16957 + _globals['_REMOVEAPPCLIENTSREQUEST']._serialized_start=16959 + _globals['_REMOVEAPPCLIENTSREQUEST']._serialized_end=17023 + _globals['_ADDEXTERNALSHAREREQUEST']._serialized_start=17026 + _globals['_ADDEXTERNALSHAREREQUEST']._serialized_end=17196 + _globals['_APPCLIENT']._serialized_start=17199 + _globals['_APPCLIENT']._serialized_end=17474 + _globals['_GETAPPINFOREQUEST']._serialized_start=17476 + _globals['_GETAPPINFOREQUEST']._serialized_end=17517 + _globals['_APPINFO']._serialized_start=17520 + _globals['_APPINFO']._serialized_end=17662 + _globals['_GETAPPINFORESPONSE']._serialized_start=17664 + _globals['_GETAPPINFORESPONSE']._serialized_end=17726 + _globals['_APPLICATIONSUMMARY']._serialized_start=17729 + _globals['_APPLICATIONSUMMARY']._serialized_end=17942 + _globals['_GETAPPLICATIONSSUMMARYRESPONSE']._serialized_start=17944 + _globals['_GETAPPLICATIONSSUMMARYRESPONSE']._serialized_end=18040 + _globals['_GETVERIFICATIONTOKENREQUEST']._serialized_start=18042 + _globals['_GETVERIFICATIONTOKENREQUEST']._serialized_end=18089 + _globals['_GETVERIFICATIONTOKENRESPONSE']._serialized_start=18091 + _globals['_GETVERIFICATIONTOKENRESPONSE']._serialized_end=18157 + _globals['_SENDSHAREINVITEREQUEST']._serialized_start=18159 + _globals['_SENDSHAREINVITEREQUEST']._serialized_end=18198 + _globals['_TIMELIMITEDACCESSREQUEST']._serialized_start=18201 + _globals['_TIMELIMITEDACCESSREQUEST']._serialized_end=18398 + _globals['_TIMELIMITEDACCESSSTATUS']._serialized_start=18400 + _globals['_TIMELIMITEDACCESSSTATUS']._serialized_end=18455 + _globals['_TIMELIMITEDACCESSRESPONSE']._serialized_start=18458 + _globals['_TIMELIMITEDACCESSRESPONSE']._serialized_end=18706 + _globals['_REQUESTDOWNLOADREQUEST']._serialized_start=18708 + _globals['_REQUESTDOWNLOADREQUEST']._serialized_end=18751 + _globals['_REQUESTDOWNLOADRESPONSE']._serialized_start=18753 + _globals['_REQUESTDOWNLOADRESPONSE']._serialized_end=18856 + _globals['_DOWNLOAD']._serialized_start=18858 + _globals['_DOWNLOAD']._serialized_end=18926 + _globals['_DELETEUSERREQUEST']._serialized_start=18928 + _globals['_DELETEUSERREQUEST']._serialized_end=18963 + _globals['_CHANGEMASTERPASSWORDREQUEST']._serialized_start=18966 + _globals['_CHANGEMASTERPASSWORDREQUEST']._serialized_end=19098 + _globals['_CHANGEMASTERPASSWORDRESPONSE']._serialized_start=19100 + _globals['_CHANGEMASTERPASSWORDRESPONSE']._serialized_end=19161 + _globals['_ACCOUNTRECOVERYSETUPREQUEST']._serialized_start=19163 + _globals['_ACCOUNTRECOVERYSETUPREQUEST']._serialized_end=19252 + _globals['_ACCOUNTRECOVERYVERIFYCODERESPONSE']._serialized_start=19255 + _globals['_ACCOUNTRECOVERYVERIFYCODERESPONSE']._serialized_end=19427 + _globals['_EMERGENCYACCESSLOGINREQUEST']._serialized_start=19429 + _globals['_EMERGENCYACCESSLOGINREQUEST']._serialized_end=19473 + _globals['_EMERGENCYACCESSLOGINRESPONSE']._serialized_start=19476 + _globals['_EMERGENCYACCESSLOGINRESPONSE']._serialized_end=19657 + _globals['_USERTEAMKEY']._serialized_start=19660 + _globals['_USERTEAMKEY']._serialized_end=19838 + _globals['_GENERICREQUESTRESPONSE']._serialized_start=19840 + _globals['_GENERICREQUESTRESPONSE']._serialized_end=19881 + _globals['_PASSKEYREGISTRATIONREQUEST']._serialized_start=19883 + _globals['_PASSKEYREGISTRATIONREQUEST']._serialized_end=19985 + _globals['_PASSKEYREGISTRATIONRESPONSE']._serialized_start=19987 + _globals['_PASSKEYREGISTRATIONRESPONSE']._serialized_end=20067 + _globals['_PASSKEYREGISTRATIONFINALIZATION']._serialized_start=20070 + _globals['_PASSKEYREGISTRATIONFINALIZATION']._serialized_end=20202 + _globals['_PASSKEYAUTHENTICATIONREQUEST']._serialized_start=20205 + _globals['_PASSKEYAUTHENTICATIONREQUEST']._serialized_end=20512 + _globals['_PASSKEYAUTHENTICATIONRESPONSE']._serialized_start=20515 + _globals['_PASSKEYAUTHENTICATIONRESPONSE']._serialized_end=20654 + _globals['_PASSKEYVALIDATIONREQUEST']._serialized_start=20657 + _globals['_PASSKEYVALIDATIONREQUEST']._serialized_end=20848 + _globals['_PASSKEYVALIDATIONRESPONSE']._serialized_start=20850 + _globals['_PASSKEYVALIDATIONRESPONSE']._serialized_end=20923 + _globals['_UPDATEPASSKEYREQUEST']._serialized_start=20925 + _globals['_UPDATEPASSKEYREQUEST']._serialized_end=21029 + _globals['_PASSKEYLISTREQUEST']._serialized_start=21031 + _globals['_PASSKEYLISTREQUEST']._serialized_end=21076 + _globals['_PASSKEYINFO']._serialized_start=21079 + _globals['_PASSKEYINFO']._serialized_end=21243 + _globals['_PASSKEYLISTRESPONSE']._serialized_start=21245 + _globals['_PASSKEYLISTRESPONSE']._serialized_end=21316 + _globals['_TRANSLATIONINFO']._serialized_start=21318 + _globals['_TRANSLATIONINFO']._serialized_end=21385 + _globals['_TRANSLATIONREQUEST']._serialized_start=21387 + _globals['_TRANSLATIONREQUEST']._serialized_end=21431 + _globals['_TRANSLATIONRESPONSE']._serialized_start=21433 + _globals['_TRANSLATIONRESPONSE']._serialized_end=21512 # @@protoc_insertion_point(module_scope) diff --git a/keepercommander/proto/APIRequest_pb2.pyi b/keepercommander/proto/APIRequest_pb2.pyi index cc241cd9d..988eacb2d 100644 --- a/keepercommander/proto/APIRequest_pb2.pyi +++ b/keepercommander/proto/APIRequest_pb2.pyi @@ -3,12 +3,13 @@ from google.protobuf.internal import containers as _containers from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message -from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union +from collections.abc import Iterable as _Iterable, Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union DESCRIPTOR: _descriptor.FileDescriptor class SupportedLanguage(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] + __slots__ = () ENGLISH: _ClassVar[SupportedLanguage] ARABIC: _ClassVar[SupportedLanguage] BRITISH: _ClassVar[SupportedLanguage] @@ -34,7 +35,7 @@ class SupportedLanguage(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): SWEDISH: _ClassVar[SupportedLanguage] class LoginType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] + __slots__ = () NORMAL: _ClassVar[LoginType] SSO: _ClassVar[LoginType] BIO: _ClassVar[LoginType] @@ -44,27 +45,27 @@ class LoginType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): PASSKEY_BIO: _ClassVar[LoginType] class DeviceStatus(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] + __slots__ = () DEVICE_NEEDS_APPROVAL: _ClassVar[DeviceStatus] DEVICE_OK: _ClassVar[DeviceStatus] DEVICE_DISABLED_BY_USER: _ClassVar[DeviceStatus] DEVICE_LOCKED_BY_ADMIN: _ClassVar[DeviceStatus] class LicenseStatus(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] + __slots__ = () OTHER: _ClassVar[LicenseStatus] ACTIVE: _ClassVar[LicenseStatus] EXPIRED: _ClassVar[LicenseStatus] DISABLED: _ClassVar[LicenseStatus] class AccountType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] + __slots__ = () CONSUMER: _ClassVar[AccountType] FAMILY: _ClassVar[AccountType] ENTERPRISE: _ClassVar[AccountType] class SessionTokenType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] + __slots__ = () NO_RESTRICTION: _ClassVar[SessionTokenType] ACCOUNT_RECOVERY: _ClassVar[SessionTokenType] SHARE_ACCOUNT: _ClassVar[SessionTokenType] @@ -79,18 +80,18 @@ class SessionTokenType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): EMERGENCY_ACCESS: _ClassVar[SessionTokenType] class Version(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] + __slots__ = () invalid_version: _ClassVar[Version] default_version: _ClassVar[Version] second_version: _ClassVar[Version] class MasterPasswordReentryActionType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] + __slots__ = () UNMASK: _ClassVar[MasterPasswordReentryActionType] COPY: _ClassVar[MasterPasswordReentryActionType] class LoginMethod(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] + __slots__ = () INVALID_LOGINMETHOD: _ClassVar[LoginMethod] EXISTING_ACCOUNT: _ClassVar[LoginMethod] SSO_DOMAIN: _ClassVar[LoginMethod] @@ -98,7 +99,7 @@ class LoginMethod(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): NEW_ACCOUNT: _ClassVar[LoginMethod] class LoginState(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] + __slots__ = () INVALID_LOGINSTATE: _ClassVar[LoginState] LOGGED_OUT: _ClassVar[LoginState] DEVICE_APPROVAL_REQUIRED: _ClassVar[LoginState] @@ -124,7 +125,7 @@ class LoginState(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): LOGGED_IN: _ClassVar[LoginState] class EncryptedDataKeyType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] + __slots__ = () NO_KEY: _ClassVar[EncryptedDataKeyType] BY_DEVICE_PUBLIC_KEY: _ClassVar[EncryptedDataKeyType] BY_PASSWORD: _ClassVar[EncryptedDataKeyType] @@ -132,12 +133,12 @@ class EncryptedDataKeyType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): BY_BIO: _ClassVar[EncryptedDataKeyType] class PasswordMethod(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] + __slots__ = () ENTERED: _ClassVar[PasswordMethod] BIOMETRICS: _ClassVar[PasswordMethod] class TwoFactorPushType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] + __slots__ = () TWO_FA_PUSH_NONE: _ClassVar[TwoFactorPushType] TWO_FA_PUSH_SMS: _ClassVar[TwoFactorPushType] TWO_FA_PUSH_KEEPER: _ClassVar[TwoFactorPushType] @@ -147,7 +148,7 @@ class TwoFactorPushType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): TWO_FA_PUSH_DNA: _ClassVar[TwoFactorPushType] class TwoFactorValueType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] + __slots__ = () TWO_FA_CODE_NONE: _ClassVar[TwoFactorValueType] TWO_FA_CODE_TOTP: _ClassVar[TwoFactorValueType] TWO_FA_CODE_SMS: _ClassVar[TwoFactorValueType] @@ -158,7 +159,7 @@ class TwoFactorValueType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): TWO_FA_CODE_DNA: _ClassVar[TwoFactorValueType] class TwoFactorChannelType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] + __slots__ = () TWO_FA_CT_NONE: _ClassVar[TwoFactorChannelType] TWO_FA_CT_TOTP: _ClassVar[TwoFactorChannelType] TWO_FA_CT_SMS: _ClassVar[TwoFactorChannelType] @@ -171,7 +172,7 @@ class TwoFactorChannelType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): TWO_FA_CT_DNA: _ClassVar[TwoFactorChannelType] class TwoFactorExpiration(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] + __slots__ = () TWO_FA_EXP_IMMEDIATELY: _ClassVar[TwoFactorExpiration] TWO_FA_EXP_5_MINUTES: _ClassVar[TwoFactorExpiration] TWO_FA_EXP_12_HOURS: _ClassVar[TwoFactorExpiration] @@ -180,14 +181,14 @@ class TwoFactorExpiration(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): TWO_FA_EXP_NEVER: _ClassVar[TwoFactorExpiration] class LicenseType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] + __slots__ = () VAULT: _ClassVar[LicenseType] CHAT: _ClassVar[LicenseType] STORAGE: _ClassVar[LicenseType] BREACHWATCH: _ClassVar[LicenseType] class ObjectTypes(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] + __slots__ = () RECORD: _ClassVar[ObjectTypes] SHARED_FOLDER_USER: _ClassVar[ObjectTypes] SHARED_FOLDER_TEAM: _ClassVar[ObjectTypes] @@ -195,7 +196,7 @@ class ObjectTypes(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): TEAM_USER: _ClassVar[ObjectTypes] class EncryptedObjectType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] + __slots__ = () EOT_UNSPECIFIED: _ClassVar[EncryptedObjectType] EOT_RECORD_KEY: _ClassVar[EncryptedObjectType] EOT_SHARED_FOLDER_USER_KEY: _ClassVar[EncryptedObjectType] @@ -208,19 +209,19 @@ class EncryptedObjectType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): EOT_V2_RECORD_KEY: _ClassVar[EncryptedObjectType] class MasterPasswordReentryStatus(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] + __slots__ = () MP_UNKNOWN: _ClassVar[MasterPasswordReentryStatus] MP_SUCCESS: _ClassVar[MasterPasswordReentryStatus] MP_FAILURE: _ClassVar[MasterPasswordReentryStatus] class AlternateAuthenticationType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] + __slots__ = () ALTERNATE_MASTER_PASSWORD: _ClassVar[AlternateAuthenticationType] BIOMETRIC: _ClassVar[AlternateAuthenticationType] ACCOUNT_RECOVER: _ClassVar[AlternateAuthenticationType] class ThrottleType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] + __slots__ = () PASSWORD_RETRY_THROTTLE: _ClassVar[ThrottleType] PASSWORD_RETRY_LEGACY_THROTTLE: _ClassVar[ThrottleType] TWO_FA_THROTTLE: _ClassVar[ThrottleType] @@ -231,7 +232,7 @@ class ThrottleType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): VALIDATE_CREATE_USER_VERIFICATION_CODE_THROTTLE: _ClassVar[ThrottleType] class Region(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] + __slots__ = () UNKNOWN: _ClassVar[Region] eu: _ClassVar[Region] us: _ClassVar[Region] @@ -241,42 +242,42 @@ class Region(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): ca: _ClassVar[Region] class ApplicationShareType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] + __slots__ = () SHARE_TYPE_RECORD: _ClassVar[ApplicationShareType] SHARE_TYPE_FOLDER: _ClassVar[ApplicationShareType] class TimeLimitedAccessType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] + __slots__ = () INVALID_TIME_LIMITED_ACCESS_TYPE: _ClassVar[TimeLimitedAccessType] USER_ACCESS_TO_RECORD: _ClassVar[TimeLimitedAccessType] USER_OR_TEAM_ACCESS_TO_SHAREDFOLDER: _ClassVar[TimeLimitedAccessType] RECORD_ACCESS_TO_SHAREDFOLDER: _ClassVar[TimeLimitedAccessType] class BackupKeyType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] + __slots__ = () BKT_SEC_ANSWER: _ClassVar[BackupKeyType] BKT_PASSPHRASE_HASH: _ClassVar[BackupKeyType] class GenericStatus(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] + __slots__ = () SUCCESS: _ClassVar[GenericStatus] INVALID_OBJECT: _ClassVar[GenericStatus] ALREADY_EXISTS: _ClassVar[GenericStatus] ACCESS_DENIED: _ClassVar[GenericStatus] class AuthenticatorAttachment(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] + __slots__ = () CROSS_PLATFORM: _ClassVar[AuthenticatorAttachment] PLATFORM: _ClassVar[AuthenticatorAttachment] ALL_SUPPORTED: _ClassVar[AuthenticatorAttachment] class PasskeyPurpose(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] + __slots__ = () PK_LOGIN: _ClassVar[PasskeyPurpose] PK_REAUTH: _ClassVar[PasskeyPurpose] class ClientFormFactor(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] + __slots__ = () FF_EMPTY: _ClassVar[ClientFormFactor] FF_PHONE: _ClassVar[ClientFormFactor] FF_TABLET: _ClassVar[ClientFormFactor] @@ -467,8 +468,22 @@ FF_PHONE: ClientFormFactor FF_TABLET: ClientFormFactor FF_WATCH: ClientFormFactor +class QrcMessageKey(_message.Message): + __slots__ = ("clientEcPublicKey", "mlKemEncapsulatedKey", "data", "msgVersion", "ecKeyId") + CLIENTECPUBLICKEY_FIELD_NUMBER: _ClassVar[int] + MLKEMENCAPSULATEDKEY_FIELD_NUMBER: _ClassVar[int] + DATA_FIELD_NUMBER: _ClassVar[int] + MSGVERSION_FIELD_NUMBER: _ClassVar[int] + ECKEYID_FIELD_NUMBER: _ClassVar[int] + clientEcPublicKey: bytes + mlKemEncapsulatedKey: bytes + data: bytes + msgVersion: int + ecKeyId: int + def __init__(self, clientEcPublicKey: _Optional[bytes] = ..., mlKemEncapsulatedKey: _Optional[bytes] = ..., data: _Optional[bytes] = ..., msgVersion: _Optional[int] = ..., ecKeyId: _Optional[int] = ...) -> None: ... + class ApiRequest(_message.Message): - __slots__ = ["encryptedTransmissionKey", "publicKeyId", "locale", "encryptedPayload", "encryptionType", "recaptcha", "subEnvironment"] + __slots__ = ("encryptedTransmissionKey", "publicKeyId", "locale", "encryptedPayload", "encryptionType", "recaptcha", "subEnvironment", "qrcMessageKey") ENCRYPTEDTRANSMISSIONKEY_FIELD_NUMBER: _ClassVar[int] PUBLICKEYID_FIELD_NUMBER: _ClassVar[int] LOCALE_FIELD_NUMBER: _ClassVar[int] @@ -476,6 +491,7 @@ class ApiRequest(_message.Message): ENCRYPTIONTYPE_FIELD_NUMBER: _ClassVar[int] RECAPTCHA_FIELD_NUMBER: _ClassVar[int] SUBENVIRONMENT_FIELD_NUMBER: _ClassVar[int] + QRCMESSAGEKEY_FIELD_NUMBER: _ClassVar[int] encryptedTransmissionKey: bytes publicKeyId: int locale: str @@ -483,10 +499,11 @@ class ApiRequest(_message.Message): encryptionType: int recaptcha: str subEnvironment: str - def __init__(self, encryptedTransmissionKey: _Optional[bytes] = ..., publicKeyId: _Optional[int] = ..., locale: _Optional[str] = ..., encryptedPayload: _Optional[bytes] = ..., encryptionType: _Optional[int] = ..., recaptcha: _Optional[str] = ..., subEnvironment: _Optional[str] = ...) -> None: ... + qrcMessageKey: QrcMessageKey + def __init__(self, encryptedTransmissionKey: _Optional[bytes] = ..., publicKeyId: _Optional[int] = ..., locale: _Optional[str] = ..., encryptedPayload: _Optional[bytes] = ..., encryptionType: _Optional[int] = ..., recaptcha: _Optional[str] = ..., subEnvironment: _Optional[str] = ..., qrcMessageKey: _Optional[_Union[QrcMessageKey, _Mapping]] = ...) -> None: ... class ApiRequestPayload(_message.Message): - __slots__ = ["payload", "encryptedSessionToken", "timeToken", "apiVersion"] + __slots__ = ("payload", "encryptedSessionToken", "timeToken", "apiVersion") PAYLOAD_FIELD_NUMBER: _ClassVar[int] ENCRYPTEDSESSIONTOKEN_FIELD_NUMBER: _ClassVar[int] TIMETOKEN_FIELD_NUMBER: _ClassVar[int] @@ -498,7 +515,7 @@ class ApiRequestPayload(_message.Message): def __init__(self, payload: _Optional[bytes] = ..., encryptedSessionToken: _Optional[bytes] = ..., timeToken: _Optional[bytes] = ..., apiVersion: _Optional[int] = ...) -> None: ... class Transform(_message.Message): - __slots__ = ["key", "encryptedDeviceToken"] + __slots__ = ("key", "encryptedDeviceToken") KEY_FIELD_NUMBER: _ClassVar[int] ENCRYPTEDDEVICETOKEN_FIELD_NUMBER: _ClassVar[int] key: bytes @@ -506,19 +523,21 @@ class Transform(_message.Message): def __init__(self, key: _Optional[bytes] = ..., encryptedDeviceToken: _Optional[bytes] = ...) -> None: ... class DeviceRequest(_message.Message): - __slots__ = ["clientVersion", "deviceName", "devicePlatform", "clientFormFactor"] + __slots__ = ("clientVersion", "deviceName", "devicePlatform", "clientFormFactor", "username") CLIENTVERSION_FIELD_NUMBER: _ClassVar[int] DEVICENAME_FIELD_NUMBER: _ClassVar[int] DEVICEPLATFORM_FIELD_NUMBER: _ClassVar[int] CLIENTFORMFACTOR_FIELD_NUMBER: _ClassVar[int] + USERNAME_FIELD_NUMBER: _ClassVar[int] clientVersion: str deviceName: str devicePlatform: str clientFormFactor: ClientFormFactor - def __init__(self, clientVersion: _Optional[str] = ..., deviceName: _Optional[str] = ..., devicePlatform: _Optional[str] = ..., clientFormFactor: _Optional[_Union[ClientFormFactor, str]] = ...) -> None: ... + username: str + def __init__(self, clientVersion: _Optional[str] = ..., deviceName: _Optional[str] = ..., devicePlatform: _Optional[str] = ..., clientFormFactor: _Optional[_Union[ClientFormFactor, str]] = ..., username: _Optional[str] = ...) -> None: ... class AuthRequest(_message.Message): - __slots__ = ["clientVersion", "username", "encryptedDeviceToken"] + __slots__ = ("clientVersion", "username", "encryptedDeviceToken") CLIENTVERSION_FIELD_NUMBER: _ClassVar[int] USERNAME_FIELD_NUMBER: _ClassVar[int] ENCRYPTEDDEVICETOKEN_FIELD_NUMBER: _ClassVar[int] @@ -528,7 +547,7 @@ class AuthRequest(_message.Message): def __init__(self, clientVersion: _Optional[str] = ..., username: _Optional[str] = ..., encryptedDeviceToken: _Optional[bytes] = ...) -> None: ... class NewUserMinimumParams(_message.Message): - __slots__ = ["minimumIterations", "passwordMatchRegex", "passwordMatchDescription", "isEnterpriseDomain", "enterpriseEccPublicKey", "forbidKeyType2"] + __slots__ = ("minimumIterations", "passwordMatchRegex", "passwordMatchDescription", "isEnterpriseDomain", "enterpriseEccPublicKey", "forbidKeyType2") MINIMUMITERATIONS_FIELD_NUMBER: _ClassVar[int] PASSWORDMATCHREGEX_FIELD_NUMBER: _ClassVar[int] PASSWORDMATCHDESCRIPTION_FIELD_NUMBER: _ClassVar[int] @@ -541,10 +560,10 @@ class NewUserMinimumParams(_message.Message): isEnterpriseDomain: bool enterpriseEccPublicKey: bytes forbidKeyType2: bool - def __init__(self, minimumIterations: _Optional[int] = ..., passwordMatchRegex: _Optional[_Iterable[str]] = ..., passwordMatchDescription: _Optional[_Iterable[str]] = ..., isEnterpriseDomain: bool = ..., enterpriseEccPublicKey: _Optional[bytes] = ..., forbidKeyType2: bool = ...) -> None: ... + def __init__(self, minimumIterations: _Optional[int] = ..., passwordMatchRegex: _Optional[_Iterable[str]] = ..., passwordMatchDescription: _Optional[_Iterable[str]] = ..., isEnterpriseDomain: _Optional[bool] = ..., enterpriseEccPublicKey: _Optional[bytes] = ..., forbidKeyType2: _Optional[bool] = ...) -> None: ... class PreLoginRequest(_message.Message): - __slots__ = ["authRequest", "loginType", "twoFactorToken"] + __slots__ = ("authRequest", "loginType", "twoFactorToken") AUTHREQUEST_FIELD_NUMBER: _ClassVar[int] LOGINTYPE_FIELD_NUMBER: _ClassVar[int] TWOFACTORTOKEN_FIELD_NUMBER: _ClassVar[int] @@ -554,7 +573,7 @@ class PreLoginRequest(_message.Message): def __init__(self, authRequest: _Optional[_Union[AuthRequest, _Mapping]] = ..., loginType: _Optional[_Union[LoginType, str]] = ..., twoFactorToken: _Optional[bytes] = ...) -> None: ... class LoginRequest(_message.Message): - __slots__ = ["authRequest", "loginType", "authenticationHashPrime", "encryptedLoginToken", "authResponse", "mcEnterpriseId", "push_token", "platform"] + __slots__ = ("authRequest", "loginType", "authenticationHashPrime", "encryptedLoginToken", "authResponse", "mcEnterpriseId", "push_token", "platform") AUTHREQUEST_FIELD_NUMBER: _ClassVar[int] LOGINTYPE_FIELD_NUMBER: _ClassVar[int] AUTHENTICATIONHASHPRIME_FIELD_NUMBER: _ClassVar[int] @@ -574,7 +593,7 @@ class LoginRequest(_message.Message): def __init__(self, authRequest: _Optional[_Union[AuthRequest, _Mapping]] = ..., loginType: _Optional[_Union[LoginType, str]] = ..., authenticationHashPrime: _Optional[bytes] = ..., encryptedLoginToken: _Optional[bytes] = ..., authResponse: _Optional[bytes] = ..., mcEnterpriseId: _Optional[int] = ..., push_token: _Optional[str] = ..., platform: _Optional[str] = ...) -> None: ... class DeviceResponse(_message.Message): - __slots__ = ["encryptedDeviceToken", "status"] + __slots__ = ("encryptedDeviceToken", "status") ENCRYPTEDDEVICETOKEN_FIELD_NUMBER: _ClassVar[int] STATUS_FIELD_NUMBER: _ClassVar[int] encryptedDeviceToken: bytes @@ -582,7 +601,7 @@ class DeviceResponse(_message.Message): def __init__(self, encryptedDeviceToken: _Optional[bytes] = ..., status: _Optional[_Union[DeviceStatus, str]] = ...) -> None: ... class Salt(_message.Message): - __slots__ = ["iterations", "salt", "algorithm", "uid", "name"] + __slots__ = ("iterations", "salt", "algorithm", "uid", "name") ITERATIONS_FIELD_NUMBER: _ClassVar[int] SALT_FIELD_NUMBER: _ClassVar[int] ALGORITHM_FIELD_NUMBER: _ClassVar[int] @@ -596,13 +615,13 @@ class Salt(_message.Message): def __init__(self, iterations: _Optional[int] = ..., salt: _Optional[bytes] = ..., algorithm: _Optional[int] = ..., uid: _Optional[bytes] = ..., name: _Optional[str] = ...) -> None: ... class TwoFactorChannel(_message.Message): - __slots__ = ["type"] + __slots__ = ("type",) TYPE_FIELD_NUMBER: _ClassVar[int] type: int def __init__(self, type: _Optional[int] = ...) -> None: ... class StartLoginRequest(_message.Message): - __slots__ = ["encryptedDeviceToken", "username", "clientVersion", "messageSessionUid", "encryptedLoginToken", "loginType", "mcEnterpriseId", "loginMethod", "forceNewLogin", "cloneCode", "v2TwoFactorToken", "accountUid", "fromSessionToken"] + __slots__ = ("encryptedDeviceToken", "username", "clientVersion", "messageSessionUid", "encryptedLoginToken", "loginType", "mcEnterpriseId", "loginMethod", "forceNewLogin", "cloneCode", "v2TwoFactorToken", "accountUid", "fromSessionToken") ENCRYPTEDDEVICETOKEN_FIELD_NUMBER: _ClassVar[int] USERNAME_FIELD_NUMBER: _ClassVar[int] CLIENTVERSION_FIELD_NUMBER: _ClassVar[int] @@ -629,10 +648,10 @@ class StartLoginRequest(_message.Message): v2TwoFactorToken: str accountUid: bytes fromSessionToken: bytes - def __init__(self, encryptedDeviceToken: _Optional[bytes] = ..., username: _Optional[str] = ..., clientVersion: _Optional[str] = ..., messageSessionUid: _Optional[bytes] = ..., encryptedLoginToken: _Optional[bytes] = ..., loginType: _Optional[_Union[LoginType, str]] = ..., mcEnterpriseId: _Optional[int] = ..., loginMethod: _Optional[_Union[LoginMethod, str]] = ..., forceNewLogin: bool = ..., cloneCode: _Optional[bytes] = ..., v2TwoFactorToken: _Optional[str] = ..., accountUid: _Optional[bytes] = ..., fromSessionToken: _Optional[bytes] = ...) -> None: ... + def __init__(self, encryptedDeviceToken: _Optional[bytes] = ..., username: _Optional[str] = ..., clientVersion: _Optional[str] = ..., messageSessionUid: _Optional[bytes] = ..., encryptedLoginToken: _Optional[bytes] = ..., loginType: _Optional[_Union[LoginType, str]] = ..., mcEnterpriseId: _Optional[int] = ..., loginMethod: _Optional[_Union[LoginMethod, str]] = ..., forceNewLogin: _Optional[bool] = ..., cloneCode: _Optional[bytes] = ..., v2TwoFactorToken: _Optional[str] = ..., accountUid: _Optional[bytes] = ..., fromSessionToken: _Optional[bytes] = ...) -> None: ... class LoginResponse(_message.Message): - __slots__ = ["loginState", "accountUid", "primaryUsername", "encryptedDataKey", "encryptedDataKeyType", "encryptedLoginToken", "encryptedSessionToken", "sessionTokenType", "message", "url", "channels", "salt", "cloneCode", "stateSpecificValue", "ssoClientVersion", "sessionTokenTypeModifier"] + __slots__ = ("loginState", "accountUid", "primaryUsername", "encryptedDataKey", "encryptedDataKeyType", "encryptedLoginToken", "encryptedSessionToken", "sessionTokenType", "message", "url", "channels", "salt", "cloneCode", "stateSpecificValue", "ssoClientVersion", "sessionTokenTypeModifier") LOGINSTATE_FIELD_NUMBER: _ClassVar[int] ACCOUNTUID_FIELD_NUMBER: _ClassVar[int] PRIMARYUSERNAME_FIELD_NUMBER: _ClassVar[int] @@ -668,25 +687,27 @@ class LoginResponse(_message.Message): def __init__(self, loginState: _Optional[_Union[LoginState, str]] = ..., accountUid: _Optional[bytes] = ..., primaryUsername: _Optional[str] = ..., encryptedDataKey: _Optional[bytes] = ..., encryptedDataKeyType: _Optional[_Union[EncryptedDataKeyType, str]] = ..., encryptedLoginToken: _Optional[bytes] = ..., encryptedSessionToken: _Optional[bytes] = ..., sessionTokenType: _Optional[_Union[SessionTokenType, str]] = ..., message: _Optional[str] = ..., url: _Optional[str] = ..., channels: _Optional[_Iterable[_Union[TwoFactorChannelInfo, _Mapping]]] = ..., salt: _Optional[_Iterable[_Union[Salt, _Mapping]]] = ..., cloneCode: _Optional[bytes] = ..., stateSpecificValue: _Optional[str] = ..., ssoClientVersion: _Optional[str] = ..., sessionTokenTypeModifier: _Optional[str] = ...) -> None: ... class SwitchListElement(_message.Message): - __slots__ = ["username", "fullName", "authRequired", "isLinked"] + __slots__ = ("username", "fullName", "authRequired", "isLinked", "profilePicUrl") USERNAME_FIELD_NUMBER: _ClassVar[int] FULLNAME_FIELD_NUMBER: _ClassVar[int] AUTHREQUIRED_FIELD_NUMBER: _ClassVar[int] ISLINKED_FIELD_NUMBER: _ClassVar[int] + PROFILEPICURL_FIELD_NUMBER: _ClassVar[int] username: str fullName: str authRequired: bool isLinked: bool - def __init__(self, username: _Optional[str] = ..., fullName: _Optional[str] = ..., authRequired: bool = ..., isLinked: bool = ...) -> None: ... + profilePicUrl: str + def __init__(self, username: _Optional[str] = ..., fullName: _Optional[str] = ..., authRequired: _Optional[bool] = ..., isLinked: _Optional[bool] = ..., profilePicUrl: _Optional[str] = ...) -> None: ... class SwitchListResponse(_message.Message): - __slots__ = ["elements"] + __slots__ = ("elements",) ELEMENTS_FIELD_NUMBER: _ClassVar[int] elements: _containers.RepeatedCompositeFieldContainer[SwitchListElement] def __init__(self, elements: _Optional[_Iterable[_Union[SwitchListElement, _Mapping]]] = ...) -> None: ... class SsoUserInfo(_message.Message): - __slots__ = ["companyName", "samlRequest", "samlRequestType", "ssoDomainName", "loginUrl", "logoutUrl"] + __slots__ = ("companyName", "samlRequest", "samlRequestType", "ssoDomainName", "loginUrl", "logoutUrl") COMPANYNAME_FIELD_NUMBER: _ClassVar[int] SAMLREQUEST_FIELD_NUMBER: _ClassVar[int] SAMLREQUESTTYPE_FIELD_NUMBER: _ClassVar[int] @@ -702,7 +723,7 @@ class SsoUserInfo(_message.Message): def __init__(self, companyName: _Optional[str] = ..., samlRequest: _Optional[str] = ..., samlRequestType: _Optional[str] = ..., ssoDomainName: _Optional[str] = ..., loginUrl: _Optional[str] = ..., logoutUrl: _Optional[str] = ...) -> None: ... class PreLoginResponse(_message.Message): - __slots__ = ["deviceStatus", "salt", "OBSOLETE_FIELD", "ssoUserInfo"] + __slots__ = ("deviceStatus", "salt", "OBSOLETE_FIELD", "ssoUserInfo") DEVICESTATUS_FIELD_NUMBER: _ClassVar[int] SALT_FIELD_NUMBER: _ClassVar[int] OBSOLETE_FIELD_FIELD_NUMBER: _ClassVar[int] @@ -714,13 +735,13 @@ class PreLoginResponse(_message.Message): def __init__(self, deviceStatus: _Optional[_Union[DeviceStatus, str]] = ..., salt: _Optional[_Iterable[_Union[Salt, _Mapping]]] = ..., OBSOLETE_FIELD: _Optional[_Iterable[_Union[TwoFactorChannel, _Mapping]]] = ..., ssoUserInfo: _Optional[_Union[SsoUserInfo, _Mapping]] = ...) -> None: ... class LoginAsUserRequest(_message.Message): - __slots__ = ["username"] + __slots__ = ("username",) USERNAME_FIELD_NUMBER: _ClassVar[int] username: str def __init__(self, username: _Optional[str] = ...) -> None: ... class LoginAsUserResponse(_message.Message): - __slots__ = ["encryptedSessionToken", "encryptedSharedAccountKey"] + __slots__ = ("encryptedSessionToken", "encryptedSharedAccountKey") ENCRYPTEDSESSIONTOKEN_FIELD_NUMBER: _ClassVar[int] ENCRYPTEDSHAREDACCOUNTKEY_FIELD_NUMBER: _ClassVar[int] encryptedSessionToken: bytes @@ -728,7 +749,7 @@ class LoginAsUserResponse(_message.Message): def __init__(self, encryptedSessionToken: _Optional[bytes] = ..., encryptedSharedAccountKey: _Optional[bytes] = ...) -> None: ... class ValidateAuthHashRequest(_message.Message): - __slots__ = ["passwordMethod", "authResponse", "encryptedLoginToken"] + __slots__ = ("passwordMethod", "authResponse", "encryptedLoginToken") PASSWORDMETHOD_FIELD_NUMBER: _ClassVar[int] AUTHRESPONSE_FIELD_NUMBER: _ClassVar[int] ENCRYPTEDLOGINTOKEN_FIELD_NUMBER: _ClassVar[int] @@ -738,7 +759,7 @@ class ValidateAuthHashRequest(_message.Message): def __init__(self, passwordMethod: _Optional[_Union[PasswordMethod, str]] = ..., authResponse: _Optional[bytes] = ..., encryptedLoginToken: _Optional[bytes] = ...) -> None: ... class TwoFactorChannelInfo(_message.Message): - __slots__ = ["channelType", "channel_uid", "channelName", "challenge", "capabilities", "phoneNumber", "maxExpiration", "createdOn", "lastFrequency"] + __slots__ = ("channelType", "channel_uid", "channelName", "challenge", "capabilities", "phoneNumber", "maxExpiration", "createdOn", "lastFrequency") CHANNELTYPE_FIELD_NUMBER: _ClassVar[int] CHANNEL_UID_FIELD_NUMBER: _ClassVar[int] CHANNELNAME_FIELD_NUMBER: _ClassVar[int] @@ -760,7 +781,7 @@ class TwoFactorChannelInfo(_message.Message): def __init__(self, channelType: _Optional[_Union[TwoFactorChannelType, str]] = ..., channel_uid: _Optional[bytes] = ..., channelName: _Optional[str] = ..., challenge: _Optional[str] = ..., capabilities: _Optional[_Iterable[str]] = ..., phoneNumber: _Optional[str] = ..., maxExpiration: _Optional[_Union[TwoFactorExpiration, str]] = ..., createdOn: _Optional[int] = ..., lastFrequency: _Optional[_Union[TwoFactorExpiration, str]] = ...) -> None: ... class TwoFactorDuoStatus(_message.Message): - __slots__ = ["capabilities", "phoneNumber", "enroll_url", "message"] + __slots__ = ("capabilities", "phoneNumber", "enroll_url", "message") CAPABILITIES_FIELD_NUMBER: _ClassVar[int] PHONENUMBER_FIELD_NUMBER: _ClassVar[int] ENROLL_URL_FIELD_NUMBER: _ClassVar[int] @@ -772,7 +793,7 @@ class TwoFactorDuoStatus(_message.Message): def __init__(self, capabilities: _Optional[_Iterable[str]] = ..., phoneNumber: _Optional[str] = ..., enroll_url: _Optional[str] = ..., message: _Optional[str] = ...) -> None: ... class TwoFactorAddRequest(_message.Message): - __slots__ = ["channelType", "channel_uid", "channelName", "phoneNumber", "duoPushType"] + __slots__ = ("channelType", "channel_uid", "channelName", "phoneNumber", "duoPushType") CHANNELTYPE_FIELD_NUMBER: _ClassVar[int] CHANNEL_UID_FIELD_NUMBER: _ClassVar[int] CHANNELNAME_FIELD_NUMBER: _ClassVar[int] @@ -786,7 +807,7 @@ class TwoFactorAddRequest(_message.Message): def __init__(self, channelType: _Optional[_Union[TwoFactorChannelType, str]] = ..., channel_uid: _Optional[bytes] = ..., channelName: _Optional[str] = ..., phoneNumber: _Optional[str] = ..., duoPushType: _Optional[_Union[TwoFactorPushType, str]] = ...) -> None: ... class TwoFactorRenameRequest(_message.Message): - __slots__ = ["channel_uid", "channelName"] + __slots__ = ("channel_uid", "channelName") CHANNEL_UID_FIELD_NUMBER: _ClassVar[int] CHANNELNAME_FIELD_NUMBER: _ClassVar[int] channel_uid: bytes @@ -794,7 +815,7 @@ class TwoFactorRenameRequest(_message.Message): def __init__(self, channel_uid: _Optional[bytes] = ..., channelName: _Optional[str] = ...) -> None: ... class TwoFactorAddResponse(_message.Message): - __slots__ = ["challenge", "backupKeys"] + __slots__ = ("challenge", "backupKeys") CHALLENGE_FIELD_NUMBER: _ClassVar[int] BACKUPKEYS_FIELD_NUMBER: _ClassVar[int] challenge: str @@ -802,13 +823,13 @@ class TwoFactorAddResponse(_message.Message): def __init__(self, challenge: _Optional[str] = ..., backupKeys: _Optional[_Iterable[str]] = ...) -> None: ... class TwoFactorDeleteRequest(_message.Message): - __slots__ = ["channel_uid"] + __slots__ = ("channel_uid",) CHANNEL_UID_FIELD_NUMBER: _ClassVar[int] channel_uid: bytes def __init__(self, channel_uid: _Optional[bytes] = ...) -> None: ... class TwoFactorListResponse(_message.Message): - __slots__ = ["channels", "expireOn"] + __slots__ = ("channels", "expireOn") CHANNELS_FIELD_NUMBER: _ClassVar[int] EXPIREON_FIELD_NUMBER: _ClassVar[int] channels: _containers.RepeatedCompositeFieldContainer[TwoFactorChannelInfo] @@ -816,13 +837,13 @@ class TwoFactorListResponse(_message.Message): def __init__(self, channels: _Optional[_Iterable[_Union[TwoFactorChannelInfo, _Mapping]]] = ..., expireOn: _Optional[int] = ...) -> None: ... class TwoFactorUpdateExpirationRequest(_message.Message): - __slots__ = ["expireIn"] + __slots__ = ("expireIn",) EXPIREIN_FIELD_NUMBER: _ClassVar[int] expireIn: TwoFactorExpiration def __init__(self, expireIn: _Optional[_Union[TwoFactorExpiration, str]] = ...) -> None: ... class TwoFactorValidateRequest(_message.Message): - __slots__ = ["encryptedLoginToken", "valueType", "value", "channel_uid", "expireIn"] + __slots__ = ("encryptedLoginToken", "valueType", "value", "channel_uid", "expireIn") ENCRYPTEDLOGINTOKEN_FIELD_NUMBER: _ClassVar[int] VALUETYPE_FIELD_NUMBER: _ClassVar[int] VALUE_FIELD_NUMBER: _ClassVar[int] @@ -836,13 +857,13 @@ class TwoFactorValidateRequest(_message.Message): def __init__(self, encryptedLoginToken: _Optional[bytes] = ..., valueType: _Optional[_Union[TwoFactorValueType, str]] = ..., value: _Optional[str] = ..., channel_uid: _Optional[bytes] = ..., expireIn: _Optional[_Union[TwoFactorExpiration, str]] = ...) -> None: ... class TwoFactorValidateResponse(_message.Message): - __slots__ = ["encryptedLoginToken"] + __slots__ = ("encryptedLoginToken",) ENCRYPTEDLOGINTOKEN_FIELD_NUMBER: _ClassVar[int] encryptedLoginToken: bytes def __init__(self, encryptedLoginToken: _Optional[bytes] = ...) -> None: ... class TwoFactorSendPushRequest(_message.Message): - __slots__ = ["encryptedLoginToken", "pushType", "channel_uid", "expireIn"] + __slots__ = ("encryptedLoginToken", "pushType", "channel_uid", "expireIn") ENCRYPTEDLOGINTOKEN_FIELD_NUMBER: _ClassVar[int] PUSHTYPE_FIELD_NUMBER: _ClassVar[int] CHANNEL_UID_FIELD_NUMBER: _ClassVar[int] @@ -854,7 +875,7 @@ class TwoFactorSendPushRequest(_message.Message): def __init__(self, encryptedLoginToken: _Optional[bytes] = ..., pushType: _Optional[_Union[TwoFactorPushType, str]] = ..., channel_uid: _Optional[bytes] = ..., expireIn: _Optional[_Union[TwoFactorExpiration, str]] = ...) -> None: ... class License(_message.Message): - __slots__ = ["created", "expiration", "licenseStatus", "paid", "message"] + __slots__ = ("created", "expiration", "licenseStatus", "paid", "message") CREATED_FIELD_NUMBER: _ClassVar[int] EXPIRATION_FIELD_NUMBER: _ClassVar[int] LICENSESTATUS_FIELD_NUMBER: _ClassVar[int] @@ -865,10 +886,10 @@ class License(_message.Message): licenseStatus: LicenseStatus paid: bool message: str - def __init__(self, created: _Optional[int] = ..., expiration: _Optional[int] = ..., licenseStatus: _Optional[_Union[LicenseStatus, str]] = ..., paid: bool = ..., message: _Optional[str] = ...) -> None: ... + def __init__(self, created: _Optional[int] = ..., expiration: _Optional[int] = ..., licenseStatus: _Optional[_Union[LicenseStatus, str]] = ..., paid: _Optional[bool] = ..., message: _Optional[str] = ...) -> None: ... class OwnerlessRecord(_message.Message): - __slots__ = ["recordUid", "recordKey", "status"] + __slots__ = ("recordUid", "recordKey", "status") RECORDUID_FIELD_NUMBER: _ClassVar[int] RECORDKEY_FIELD_NUMBER: _ClassVar[int] STATUS_FIELD_NUMBER: _ClassVar[int] @@ -878,13 +899,13 @@ class OwnerlessRecord(_message.Message): def __init__(self, recordUid: _Optional[bytes] = ..., recordKey: _Optional[bytes] = ..., status: _Optional[int] = ...) -> None: ... class OwnerlessRecords(_message.Message): - __slots__ = ["ownerlessRecord"] + __slots__ = ("ownerlessRecord",) OWNERLESSRECORD_FIELD_NUMBER: _ClassVar[int] ownerlessRecord: _containers.RepeatedCompositeFieldContainer[OwnerlessRecord] def __init__(self, ownerlessRecord: _Optional[_Iterable[_Union[OwnerlessRecord, _Mapping]]] = ...) -> None: ... class UserAuthRequest(_message.Message): - __slots__ = ["uid", "salt", "iterations", "encryptedClientKey", "authHash", "encryptedDataKey", "loginType", "name", "algorithm"] + __slots__ = ("uid", "salt", "iterations", "encryptedClientKey", "authHash", "encryptedDataKey", "loginType", "name", "algorithm") UID_FIELD_NUMBER: _ClassVar[int] SALT_FIELD_NUMBER: _ClassVar[int] ITERATIONS_FIELD_NUMBER: _ClassVar[int] @@ -906,13 +927,31 @@ class UserAuthRequest(_message.Message): def __init__(self, uid: _Optional[bytes] = ..., salt: _Optional[bytes] = ..., iterations: _Optional[int] = ..., encryptedClientKey: _Optional[bytes] = ..., authHash: _Optional[bytes] = ..., encryptedDataKey: _Optional[bytes] = ..., loginType: _Optional[_Union[LoginType, str]] = ..., name: _Optional[str] = ..., algorithm: _Optional[int] = ...) -> None: ... class UidRequest(_message.Message): - __slots__ = ["uid"] + __slots__ = ("uid",) UID_FIELD_NUMBER: _ClassVar[int] uid: _containers.RepeatedScalarFieldContainer[bytes] def __init__(self, uid: _Optional[_Iterable[bytes]] = ...) -> None: ... class DeviceUpdateRequest(_message.Message): - __slots__ = ["encryptedDeviceToken", "clientVersion", "deviceName", "devicePublicKey", "deviceStatus", "devicePlatform", "clientFormFactor"] + __slots__ = ("encryptedDeviceToken", "clientVersion", "deviceName", "devicePublicKey", "deviceStatus", "devicePlatform", "clientFormFactor") + ENCRYPTEDDEVICETOKEN_FIELD_NUMBER: _ClassVar[int] + CLIENTVERSION_FIELD_NUMBER: _ClassVar[int] + DEVICENAME_FIELD_NUMBER: _ClassVar[int] + DEVICEPUBLICKEY_FIELD_NUMBER: _ClassVar[int] + DEVICESTATUS_FIELD_NUMBER: _ClassVar[int] + DEVICEPLATFORM_FIELD_NUMBER: _ClassVar[int] + CLIENTFORMFACTOR_FIELD_NUMBER: _ClassVar[int] + encryptedDeviceToken: bytes + clientVersion: str + deviceName: str + devicePublicKey: bytes + deviceStatus: DeviceStatus + devicePlatform: str + clientFormFactor: ClientFormFactor + def __init__(self, encryptedDeviceToken: _Optional[bytes] = ..., clientVersion: _Optional[str] = ..., deviceName: _Optional[str] = ..., devicePublicKey: _Optional[bytes] = ..., deviceStatus: _Optional[_Union[DeviceStatus, str]] = ..., devicePlatform: _Optional[str] = ..., clientFormFactor: _Optional[_Union[ClientFormFactor, str]] = ...) -> None: ... + +class DeviceUpdateResponse(_message.Message): + __slots__ = ("encryptedDeviceToken", "clientVersion", "deviceName", "devicePublicKey", "deviceStatus", "devicePlatform", "clientFormFactor") ENCRYPTEDDEVICETOKEN_FIELD_NUMBER: _ClassVar[int] CLIENTVERSION_FIELD_NUMBER: _ClassVar[int] DEVICENAME_FIELD_NUMBER: _ClassVar[int] @@ -930,7 +969,7 @@ class DeviceUpdateRequest(_message.Message): def __init__(self, encryptedDeviceToken: _Optional[bytes] = ..., clientVersion: _Optional[str] = ..., deviceName: _Optional[str] = ..., devicePublicKey: _Optional[bytes] = ..., deviceStatus: _Optional[_Union[DeviceStatus, str]] = ..., devicePlatform: _Optional[str] = ..., clientFormFactor: _Optional[_Union[ClientFormFactor, str]] = ...) -> None: ... class RegisterDeviceInRegionRequest(_message.Message): - __slots__ = ["encryptedDeviceToken", "clientVersion", "deviceName", "devicePublicKey", "devicePlatform", "clientFormFactor"] + __slots__ = ("encryptedDeviceToken", "clientVersion", "deviceName", "devicePublicKey", "devicePlatform", "clientFormFactor") ENCRYPTEDDEVICETOKEN_FIELD_NUMBER: _ClassVar[int] CLIENTVERSION_FIELD_NUMBER: _ClassVar[int] DEVICENAME_FIELD_NUMBER: _ClassVar[int] @@ -946,7 +985,7 @@ class RegisterDeviceInRegionRequest(_message.Message): def __init__(self, encryptedDeviceToken: _Optional[bytes] = ..., clientVersion: _Optional[str] = ..., deviceName: _Optional[str] = ..., devicePublicKey: _Optional[bytes] = ..., devicePlatform: _Optional[str] = ..., clientFormFactor: _Optional[_Union[ClientFormFactor, str]] = ...) -> None: ... class RegistrationRequest(_message.Message): - __slots__ = ["authRequest", "userAuthRequest", "encryptedClientKey", "encryptedPrivateKey", "publicKey", "verificationCode", "deprecatedAuthHashHash", "deprecatedEncryptedClientKey", "deprecatedEncryptedPrivateKey", "deprecatedEncryptionParams"] + __slots__ = ("authRequest", "userAuthRequest", "encryptedClientKey", "encryptedPrivateKey", "publicKey", "verificationCode", "deprecatedAuthHashHash", "deprecatedEncryptedClientKey", "deprecatedEncryptedPrivateKey", "deprecatedEncryptionParams") AUTHREQUEST_FIELD_NUMBER: _ClassVar[int] USERAUTHREQUEST_FIELD_NUMBER: _ClassVar[int] ENCRYPTEDCLIENTKEY_FIELD_NUMBER: _ClassVar[int] @@ -970,7 +1009,7 @@ class RegistrationRequest(_message.Message): def __init__(self, authRequest: _Optional[_Union[AuthRequest, _Mapping]] = ..., userAuthRequest: _Optional[_Union[UserAuthRequest, _Mapping]] = ..., encryptedClientKey: _Optional[bytes] = ..., encryptedPrivateKey: _Optional[bytes] = ..., publicKey: _Optional[bytes] = ..., verificationCode: _Optional[str] = ..., deprecatedAuthHashHash: _Optional[bytes] = ..., deprecatedEncryptedClientKey: _Optional[bytes] = ..., deprecatedEncryptedPrivateKey: _Optional[bytes] = ..., deprecatedEncryptionParams: _Optional[bytes] = ...) -> None: ... class ConvertUserToV3Request(_message.Message): - __slots__ = ["authRequest", "userAuthRequest", "encryptedClientKey", "encryptedPrivateKey", "publicKey"] + __slots__ = ("authRequest", "userAuthRequest", "encryptedClientKey", "encryptedPrivateKey", "publicKey") AUTHREQUEST_FIELD_NUMBER: _ClassVar[int] USERAUTHREQUEST_FIELD_NUMBER: _ClassVar[int] ENCRYPTEDCLIENTKEY_FIELD_NUMBER: _ClassVar[int] @@ -984,31 +1023,31 @@ class ConvertUserToV3Request(_message.Message): def __init__(self, authRequest: _Optional[_Union[AuthRequest, _Mapping]] = ..., userAuthRequest: _Optional[_Union[UserAuthRequest, _Mapping]] = ..., encryptedClientKey: _Optional[bytes] = ..., encryptedPrivateKey: _Optional[bytes] = ..., publicKey: _Optional[bytes] = ...) -> None: ... class RevisionResponse(_message.Message): - __slots__ = ["revision"] + __slots__ = ("revision",) REVISION_FIELD_NUMBER: _ClassVar[int] revision: int def __init__(self, revision: _Optional[int] = ...) -> None: ... class ChangeEmailRequest(_message.Message): - __slots__ = ["newEmail"] + __slots__ = ("newEmail",) NEWEMAIL_FIELD_NUMBER: _ClassVar[int] newEmail: str def __init__(self, newEmail: _Optional[str] = ...) -> None: ... class ChangeEmailResponse(_message.Message): - __slots__ = ["encryptedChangeEmailToken"] + __slots__ = ("encryptedChangeEmailToken",) ENCRYPTEDCHANGEEMAILTOKEN_FIELD_NUMBER: _ClassVar[int] encryptedChangeEmailToken: bytes def __init__(self, encryptedChangeEmailToken: _Optional[bytes] = ...) -> None: ... class EmailVerificationLinkResponse(_message.Message): - __slots__ = ["emailVerified"] + __slots__ = ("emailVerified",) EMAILVERIFIED_FIELD_NUMBER: _ClassVar[int] emailVerified: bool - def __init__(self, emailVerified: bool = ...) -> None: ... + def __init__(self, emailVerified: _Optional[bool] = ...) -> None: ... class SecurityData(_message.Message): - __slots__ = ["uid", "data"] + __slots__ = ("uid", "data") UID_FIELD_NUMBER: _ClassVar[int] DATA_FIELD_NUMBER: _ClassVar[int] uid: bytes @@ -1016,7 +1055,7 @@ class SecurityData(_message.Message): def __init__(self, uid: _Optional[bytes] = ..., data: _Optional[bytes] = ...) -> None: ... class SecurityScoreData(_message.Message): - __slots__ = ["uid", "data", "revision"] + __slots__ = ("uid", "data", "revision") UID_FIELD_NUMBER: _ClassVar[int] DATA_FIELD_NUMBER: _ClassVar[int] REVISION_FIELD_NUMBER: _ClassVar[int] @@ -1026,7 +1065,7 @@ class SecurityScoreData(_message.Message): def __init__(self, uid: _Optional[bytes] = ..., data: _Optional[bytes] = ..., revision: _Optional[int] = ...) -> None: ... class SecurityDataRequest(_message.Message): - __slots__ = ["recordSecurityData", "masterPasswordSecurityData", "encryptionType", "recordSecurityScoreData"] + __slots__ = ("recordSecurityData", "masterPasswordSecurityData", "encryptionType", "recordSecurityScoreData") RECORDSECURITYDATA_FIELD_NUMBER: _ClassVar[int] MASTERPASSWORDSECURITYDATA_FIELD_NUMBER: _ClassVar[int] ENCRYPTIONTYPE_FIELD_NUMBER: _ClassVar[int] @@ -1038,7 +1077,7 @@ class SecurityDataRequest(_message.Message): def __init__(self, recordSecurityData: _Optional[_Iterable[_Union[SecurityData, _Mapping]]] = ..., masterPasswordSecurityData: _Optional[_Iterable[_Union[SecurityData, _Mapping]]] = ..., encryptionType: _Optional[_Union[_enterprise_pb2.EncryptedKeyType, str]] = ..., recordSecurityScoreData: _Optional[_Iterable[_Union[SecurityScoreData, _Mapping]]] = ...) -> None: ... class SecurityReportIncrementalData(_message.Message): - __slots__ = ["enterpriseUserId", "currentSecurityData", "currentSecurityDataRevision", "oldSecurityData", "oldSecurityDataRevision", "currentDataEncryptionType", "oldDataEncryptionType"] + __slots__ = ("enterpriseUserId", "currentSecurityData", "currentSecurityDataRevision", "oldSecurityData", "oldSecurityDataRevision", "currentDataEncryptionType", "oldDataEncryptionType", "recordUid") ENTERPRISEUSERID_FIELD_NUMBER: _ClassVar[int] CURRENTSECURITYDATA_FIELD_NUMBER: _ClassVar[int] CURRENTSECURITYDATAREVISION_FIELD_NUMBER: _ClassVar[int] @@ -1046,6 +1085,7 @@ class SecurityReportIncrementalData(_message.Message): OLDSECURITYDATAREVISION_FIELD_NUMBER: _ClassVar[int] CURRENTDATAENCRYPTIONTYPE_FIELD_NUMBER: _ClassVar[int] OLDDATAENCRYPTIONTYPE_FIELD_NUMBER: _ClassVar[int] + RECORDUID_FIELD_NUMBER: _ClassVar[int] enterpriseUserId: int currentSecurityData: bytes currentSecurityDataRevision: int @@ -1053,10 +1093,11 @@ class SecurityReportIncrementalData(_message.Message): oldSecurityDataRevision: int currentDataEncryptionType: _enterprise_pb2.EncryptedKeyType oldDataEncryptionType: _enterprise_pb2.EncryptedKeyType - def __init__(self, enterpriseUserId: _Optional[int] = ..., currentSecurityData: _Optional[bytes] = ..., currentSecurityDataRevision: _Optional[int] = ..., oldSecurityData: _Optional[bytes] = ..., oldSecurityDataRevision: _Optional[int] = ..., currentDataEncryptionType: _Optional[_Union[_enterprise_pb2.EncryptedKeyType, str]] = ..., oldDataEncryptionType: _Optional[_Union[_enterprise_pb2.EncryptedKeyType, str]] = ...) -> None: ... + recordUid: bytes + def __init__(self, enterpriseUserId: _Optional[int] = ..., currentSecurityData: _Optional[bytes] = ..., currentSecurityDataRevision: _Optional[int] = ..., oldSecurityData: _Optional[bytes] = ..., oldSecurityDataRevision: _Optional[int] = ..., currentDataEncryptionType: _Optional[_Union[_enterprise_pb2.EncryptedKeyType, str]] = ..., oldDataEncryptionType: _Optional[_Union[_enterprise_pb2.EncryptedKeyType, str]] = ..., recordUid: _Optional[bytes] = ...) -> None: ... class SecurityReport(_message.Message): - __slots__ = ["enterpriseUserId", "encryptedReportData", "revision", "twoFactor", "lastLogin", "numberOfReusedPassword", "securityReportIncrementalData", "userId", "hasOldEncryption"] + __slots__ = ("enterpriseUserId", "encryptedReportData", "revision", "twoFactor", "lastLogin", "numberOfReusedPassword", "securityReportIncrementalData", "userId", "hasOldEncryption") ENTERPRISEUSERID_FIELD_NUMBER: _ClassVar[int] ENCRYPTEDREPORTDATA_FIELD_NUMBER: _ClassVar[int] REVISION_FIELD_NUMBER: _ClassVar[int] @@ -1075,22 +1116,24 @@ class SecurityReport(_message.Message): securityReportIncrementalData: _containers.RepeatedCompositeFieldContainer[SecurityReportIncrementalData] userId: int hasOldEncryption: bool - def __init__(self, enterpriseUserId: _Optional[int] = ..., encryptedReportData: _Optional[bytes] = ..., revision: _Optional[int] = ..., twoFactor: _Optional[str] = ..., lastLogin: _Optional[int] = ..., numberOfReusedPassword: _Optional[int] = ..., securityReportIncrementalData: _Optional[_Iterable[_Union[SecurityReportIncrementalData, _Mapping]]] = ..., userId: _Optional[int] = ..., hasOldEncryption: bool = ...) -> None: ... + def __init__(self, enterpriseUserId: _Optional[int] = ..., encryptedReportData: _Optional[bytes] = ..., revision: _Optional[int] = ..., twoFactor: _Optional[str] = ..., lastLogin: _Optional[int] = ..., numberOfReusedPassword: _Optional[int] = ..., securityReportIncrementalData: _Optional[_Iterable[_Union[SecurityReportIncrementalData, _Mapping]]] = ..., userId: _Optional[int] = ..., hasOldEncryption: _Optional[bool] = ...) -> None: ... class SecurityReportSaveRequest(_message.Message): - __slots__ = ["securityReport"] + __slots__ = ("securityReport", "continuationToken") SECURITYREPORT_FIELD_NUMBER: _ClassVar[int] + CONTINUATIONTOKEN_FIELD_NUMBER: _ClassVar[int] securityReport: _containers.RepeatedCompositeFieldContainer[SecurityReport] - def __init__(self, securityReport: _Optional[_Iterable[_Union[SecurityReport, _Mapping]]] = ...) -> None: ... + continuationToken: bytes + def __init__(self, securityReport: _Optional[_Iterable[_Union[SecurityReport, _Mapping]]] = ..., continuationToken: _Optional[bytes] = ...) -> None: ... class SecurityReportRequest(_message.Message): - __slots__ = ["fromPage"] + __slots__ = ("fromPage",) FROMPAGE_FIELD_NUMBER: _ClassVar[int] fromPage: int def __init__(self, fromPage: _Optional[int] = ...) -> None: ... class SecurityReportResponse(_message.Message): - __slots__ = ["enterprisePrivateKey", "securityReport", "asOfRevision", "fromPage", "toPage", "complete", "enterpriseEccPrivateKey"] + __slots__ = ("enterprisePrivateKey", "securityReport", "asOfRevision", "fromPage", "toPage", "complete", "enterpriseEccPrivateKey", "hasIncrementalData") ENTERPRISEPRIVATEKEY_FIELD_NUMBER: _ClassVar[int] SECURITYREPORT_FIELD_NUMBER: _ClassVar[int] ASOFREVISION_FIELD_NUMBER: _ClassVar[int] @@ -1098,6 +1141,7 @@ class SecurityReportResponse(_message.Message): TOPAGE_FIELD_NUMBER: _ClassVar[int] COMPLETE_FIELD_NUMBER: _ClassVar[int] ENTERPRISEECCPRIVATEKEY_FIELD_NUMBER: _ClassVar[int] + HASINCREMENTALDATA_FIELD_NUMBER: _ClassVar[int] enterprisePrivateKey: bytes securityReport: _containers.RepeatedCompositeFieldContainer[SecurityReport] asOfRevision: int @@ -1105,16 +1149,31 @@ class SecurityReportResponse(_message.Message): toPage: int complete: bool enterpriseEccPrivateKey: bytes - def __init__(self, enterprisePrivateKey: _Optional[bytes] = ..., securityReport: _Optional[_Iterable[_Union[SecurityReport, _Mapping]]] = ..., asOfRevision: _Optional[int] = ..., fromPage: _Optional[int] = ..., toPage: _Optional[int] = ..., complete: bool = ..., enterpriseEccPrivateKey: _Optional[bytes] = ...) -> None: ... + hasIncrementalData: bool + def __init__(self, enterprisePrivateKey: _Optional[bytes] = ..., securityReport: _Optional[_Iterable[_Union[SecurityReport, _Mapping]]] = ..., asOfRevision: _Optional[int] = ..., fromPage: _Optional[int] = ..., toPage: _Optional[int] = ..., complete: _Optional[bool] = ..., enterpriseEccPrivateKey: _Optional[bytes] = ..., hasIncrementalData: _Optional[bool] = ...) -> None: ... + +class IncrementalSecurityDataRequest(_message.Message): + __slots__ = ("continuationToken",) + CONTINUATIONTOKEN_FIELD_NUMBER: _ClassVar[int] + continuationToken: bytes + def __init__(self, continuationToken: _Optional[bytes] = ...) -> None: ... + +class IncrementalSecurityDataResponse(_message.Message): + __slots__ = ("securityReportIncrementalData", "continuationToken") + SECURITYREPORTINCREMENTALDATA_FIELD_NUMBER: _ClassVar[int] + CONTINUATIONTOKEN_FIELD_NUMBER: _ClassVar[int] + securityReportIncrementalData: _containers.RepeatedCompositeFieldContainer[SecurityReportIncrementalData] + continuationToken: bytes + def __init__(self, securityReportIncrementalData: _Optional[_Iterable[_Union[SecurityReportIncrementalData, _Mapping]]] = ..., continuationToken: _Optional[bytes] = ...) -> None: ... class ReusedPasswordsRequest(_message.Message): - __slots__ = ["count"] + __slots__ = ("count",) COUNT_FIELD_NUMBER: _ClassVar[int] count: int def __init__(self, count: _Optional[int] = ...) -> None: ... class SummaryConsoleReport(_message.Message): - __slots__ = ["reportType", "reportData"] + __slots__ = ("reportType", "reportData") REPORTTYPE_FIELD_NUMBER: _ClassVar[int] REPORTDATA_FIELD_NUMBER: _ClassVar[int] reportType: int @@ -1122,7 +1181,7 @@ class SummaryConsoleReport(_message.Message): def __init__(self, reportType: _Optional[int] = ..., reportData: _Optional[bytes] = ...) -> None: ... class ChangeToKeyTypeOne(_message.Message): - __slots__ = ["objectType", "primaryUid", "secondaryUid", "key"] + __slots__ = ("objectType", "primaryUid", "secondaryUid", "key") OBJECTTYPE_FIELD_NUMBER: _ClassVar[int] PRIMARYUID_FIELD_NUMBER: _ClassVar[int] SECONDARYUID_FIELD_NUMBER: _ClassVar[int] @@ -1134,13 +1193,13 @@ class ChangeToKeyTypeOne(_message.Message): def __init__(self, objectType: _Optional[_Union[ObjectTypes, str]] = ..., primaryUid: _Optional[bytes] = ..., secondaryUid: _Optional[bytes] = ..., key: _Optional[bytes] = ...) -> None: ... class ChangeToKeyTypeOneRequest(_message.Message): - __slots__ = ["changeToKeyTypeOne"] + __slots__ = ("changeToKeyTypeOne",) CHANGETOKEYTYPEONE_FIELD_NUMBER: _ClassVar[int] changeToKeyTypeOne: _containers.RepeatedCompositeFieldContainer[ChangeToKeyTypeOne] def __init__(self, changeToKeyTypeOne: _Optional[_Iterable[_Union[ChangeToKeyTypeOne, _Mapping]]] = ...) -> None: ... class ChangeToKeyTypeOneStatus(_message.Message): - __slots__ = ["uid", "type", "status", "reason"] + __slots__ = ("uid", "type", "status", "reason") UID_FIELD_NUMBER: _ClassVar[int] TYPE_FIELD_NUMBER: _ClassVar[int] STATUS_FIELD_NUMBER: _ClassVar[int] @@ -1152,13 +1211,13 @@ class ChangeToKeyTypeOneStatus(_message.Message): def __init__(self, uid: _Optional[bytes] = ..., type: _Optional[str] = ..., status: _Optional[str] = ..., reason: _Optional[str] = ...) -> None: ... class ChangeToKeyTypeOneResponse(_message.Message): - __slots__ = ["changeToKeyTypeOneStatus"] + __slots__ = ("changeToKeyTypeOneStatus",) CHANGETOKEYTYPEONESTATUS_FIELD_NUMBER: _ClassVar[int] changeToKeyTypeOneStatus: _containers.RepeatedCompositeFieldContainer[ChangeToKeyTypeOneStatus] def __init__(self, changeToKeyTypeOneStatus: _Optional[_Iterable[_Union[ChangeToKeyTypeOneStatus, _Mapping]]] = ...) -> None: ... class GetChangeKeyTypesRequest(_message.Message): - __slots__ = ["onlyTheseObjects", "limit", "includeRecommended", "includeKeys", "includeAllowedKeyTypes"] + __slots__ = ("onlyTheseObjects", "limit", "includeRecommended", "includeKeys", "includeAllowedKeyTypes") ONLYTHESEOBJECTS_FIELD_NUMBER: _ClassVar[int] LIMIT_FIELD_NUMBER: _ClassVar[int] INCLUDERECOMMENDED_FIELD_NUMBER: _ClassVar[int] @@ -1169,10 +1228,10 @@ class GetChangeKeyTypesRequest(_message.Message): includeRecommended: bool includeKeys: bool includeAllowedKeyTypes: bool - def __init__(self, onlyTheseObjects: _Optional[_Iterable[_Union[EncryptedObjectType, str]]] = ..., limit: _Optional[int] = ..., includeRecommended: bool = ..., includeKeys: bool = ..., includeAllowedKeyTypes: bool = ...) -> None: ... + def __init__(self, onlyTheseObjects: _Optional[_Iterable[_Union[EncryptedObjectType, str]]] = ..., limit: _Optional[int] = ..., includeRecommended: _Optional[bool] = ..., includeKeys: _Optional[bool] = ..., includeAllowedKeyTypes: _Optional[bool] = ...) -> None: ... class GetChangeKeyTypesResponse(_message.Message): - __slots__ = ["keys", "allowedKeyTypes"] + __slots__ = ("keys", "allowedKeyTypes") KEYS_FIELD_NUMBER: _ClassVar[int] ALLOWEDKEYTYPES_FIELD_NUMBER: _ClassVar[int] keys: _containers.RepeatedCompositeFieldContainer[ChangeKeyType] @@ -1180,7 +1239,7 @@ class GetChangeKeyTypesResponse(_message.Message): def __init__(self, keys: _Optional[_Iterable[_Union[ChangeKeyType, _Mapping]]] = ..., allowedKeyTypes: _Optional[_Iterable[_Union[AllowedKeyTypes, _Mapping]]] = ...) -> None: ... class AllowedKeyTypes(_message.Message): - __slots__ = ["objectType", "allowedKeyTypes"] + __slots__ = ("objectType", "allowedKeyTypes") OBJECTTYPE_FIELD_NUMBER: _ClassVar[int] ALLOWEDKEYTYPES_FIELD_NUMBER: _ClassVar[int] objectType: EncryptedObjectType @@ -1188,13 +1247,13 @@ class AllowedKeyTypes(_message.Message): def __init__(self, objectType: _Optional[_Union[EncryptedObjectType, str]] = ..., allowedKeyTypes: _Optional[_Iterable[_Union[_enterprise_pb2.EncryptedKeyType, str]]] = ...) -> None: ... class ChangeKeyTypes(_message.Message): - __slots__ = ["keys"] + __slots__ = ("keys",) KEYS_FIELD_NUMBER: _ClassVar[int] keys: _containers.RepeatedCompositeFieldContainer[ChangeKeyType] def __init__(self, keys: _Optional[_Iterable[_Union[ChangeKeyType, _Mapping]]] = ...) -> None: ... class ChangeKeyType(_message.Message): - __slots__ = ["objectType", "uid", "secondaryUid", "key", "keyType", "status"] + __slots__ = ("objectType", "uid", "secondaryUid", "key", "keyType", "status") OBJECTTYPE_FIELD_NUMBER: _ClassVar[int] UID_FIELD_NUMBER: _ClassVar[int] SECONDARYUID_FIELD_NUMBER: _ClassVar[int] @@ -1210,7 +1269,7 @@ class ChangeKeyType(_message.Message): def __init__(self, objectType: _Optional[_Union[EncryptedObjectType, str]] = ..., uid: _Optional[bytes] = ..., secondaryUid: _Optional[bytes] = ..., key: _Optional[bytes] = ..., keyType: _Optional[_Union[_enterprise_pb2.EncryptedKeyType, str]] = ..., status: _Optional[_Union[GenericStatus, str]] = ...) -> None: ... class SetKey(_message.Message): - __slots__ = ["id", "key"] + __slots__ = ("id", "key") ID_FIELD_NUMBER: _ClassVar[int] KEY_FIELD_NUMBER: _ClassVar[int] id: int @@ -1218,13 +1277,13 @@ class SetKey(_message.Message): def __init__(self, id: _Optional[int] = ..., key: _Optional[bytes] = ...) -> None: ... class SetKeyRequest(_message.Message): - __slots__ = ["keys"] + __slots__ = ("keys",) KEYS_FIELD_NUMBER: _ClassVar[int] keys: _containers.RepeatedCompositeFieldContainer[SetKey] def __init__(self, keys: _Optional[_Iterable[_Union[SetKey, _Mapping]]] = ...) -> None: ... class CreateUserRequest(_message.Message): - __slots__ = ["username", "authVerifier", "encryptionParams", "rsaPublicKey", "rsaEncryptedPrivateKey", "eccPublicKey", "eccEncryptedPrivateKey", "encryptedDeviceToken", "encryptedClientKey", "clientVersion", "encryptedDeviceDataKey", "encryptedLoginToken", "messageSessionUid", "installReferrer", "mccMNC", "mfg", "model", "brand", "product", "device", "carrier", "verificationCode", "enterpriseRegistration", "encryptedVerificationToken", "enterpriseUsersDataKey"] + __slots__ = ("username", "authVerifier", "encryptionParams", "rsaPublicKey", "rsaEncryptedPrivateKey", "eccPublicKey", "eccEncryptedPrivateKey", "encryptedDeviceToken", "encryptedClientKey", "clientVersion", "encryptedDeviceDataKey", "encryptedLoginToken", "messageSessionUid", "installReferrer", "mccMNC", "mfg", "model", "brand", "product", "device", "carrier", "verificationCode", "enterpriseRegistration", "encryptedVerificationToken", "enterpriseUsersDataKey") USERNAME_FIELD_NUMBER: _ClassVar[int] AUTHVERIFIER_FIELD_NUMBER: _ClassVar[int] ENCRYPTIONPARAMS_FIELD_NUMBER: _ClassVar[int] @@ -1278,7 +1337,7 @@ class CreateUserRequest(_message.Message): def __init__(self, username: _Optional[str] = ..., authVerifier: _Optional[bytes] = ..., encryptionParams: _Optional[bytes] = ..., rsaPublicKey: _Optional[bytes] = ..., rsaEncryptedPrivateKey: _Optional[bytes] = ..., eccPublicKey: _Optional[bytes] = ..., eccEncryptedPrivateKey: _Optional[bytes] = ..., encryptedDeviceToken: _Optional[bytes] = ..., encryptedClientKey: _Optional[bytes] = ..., clientVersion: _Optional[str] = ..., encryptedDeviceDataKey: _Optional[bytes] = ..., encryptedLoginToken: _Optional[bytes] = ..., messageSessionUid: _Optional[bytes] = ..., installReferrer: _Optional[str] = ..., mccMNC: _Optional[int] = ..., mfg: _Optional[str] = ..., model: _Optional[str] = ..., brand: _Optional[str] = ..., product: _Optional[str] = ..., device: _Optional[str] = ..., carrier: _Optional[str] = ..., verificationCode: _Optional[str] = ..., enterpriseRegistration: _Optional[_Union[_enterprise_pb2.EnterpriseRegistration, _Mapping]] = ..., encryptedVerificationToken: _Optional[bytes] = ..., enterpriseUsersDataKey: _Optional[bytes] = ...) -> None: ... class NodeEnforcementAddOrUpdateRequest(_message.Message): - __slots__ = ["nodeId", "enforcement", "value"] + __slots__ = ("nodeId", "enforcement", "value") NODEID_FIELD_NUMBER: _ClassVar[int] ENFORCEMENT_FIELD_NUMBER: _ClassVar[int] VALUE_FIELD_NUMBER: _ClassVar[int] @@ -1288,7 +1347,7 @@ class NodeEnforcementAddOrUpdateRequest(_message.Message): def __init__(self, nodeId: _Optional[int] = ..., enforcement: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... class NodeEnforcementRemoveRequest(_message.Message): - __slots__ = ["nodeId", "enforcement"] + __slots__ = ("nodeId", "enforcement") NODEID_FIELD_NUMBER: _ClassVar[int] ENFORCEMENT_FIELD_NUMBER: _ClassVar[int] nodeId: int @@ -1296,7 +1355,7 @@ class NodeEnforcementRemoveRequest(_message.Message): def __init__(self, nodeId: _Optional[int] = ..., enforcement: _Optional[str] = ...) -> None: ... class ApiRequestByKey(_message.Message): - __slots__ = ["keyId", "payload", "username", "locale", "supportedLanguage", "type"] + __slots__ = ("keyId", "payload", "username", "locale", "supportedLanguage", "type") KEYID_FIELD_NUMBER: _ClassVar[int] PAYLOAD_FIELD_NUMBER: _ClassVar[int] USERNAME_FIELD_NUMBER: _ClassVar[int] @@ -1312,7 +1371,7 @@ class ApiRequestByKey(_message.Message): def __init__(self, keyId: _Optional[int] = ..., payload: _Optional[bytes] = ..., username: _Optional[str] = ..., locale: _Optional[str] = ..., supportedLanguage: _Optional[_Union[SupportedLanguage, str]] = ..., type: _Optional[int] = ...) -> None: ... class ApiRequestByKAtoKAKey(_message.Message): - __slots__ = ["sourceRegion", "payload", "supportedLanguage", "destinationRegion"] + __slots__ = ("sourceRegion", "payload", "supportedLanguage", "destinationRegion") SOURCEREGION_FIELD_NUMBER: _ClassVar[int] PAYLOAD_FIELD_NUMBER: _ClassVar[int] SUPPORTEDLANGUAGE_FIELD_NUMBER: _ClassVar[int] @@ -1324,7 +1383,7 @@ class ApiRequestByKAtoKAKey(_message.Message): def __init__(self, sourceRegion: _Optional[_Union[Region, str]] = ..., payload: _Optional[bytes] = ..., supportedLanguage: _Optional[_Union[SupportedLanguage, str]] = ..., destinationRegion: _Optional[_Union[Region, str]] = ...) -> None: ... class MemcacheRequest(_message.Message): - __slots__ = ["key", "userId"] + __slots__ = ("key", "userId") KEY_FIELD_NUMBER: _ClassVar[int] USERID_FIELD_NUMBER: _ClassVar[int] key: str @@ -1332,7 +1391,7 @@ class MemcacheRequest(_message.Message): def __init__(self, key: _Optional[str] = ..., userId: _Optional[int] = ...) -> None: ... class MemcacheResponse(_message.Message): - __slots__ = ["key", "value"] + __slots__ = ("key", "value") KEY_FIELD_NUMBER: _ClassVar[int] VALUE_FIELD_NUMBER: _ClassVar[int] key: str @@ -1340,7 +1399,7 @@ class MemcacheResponse(_message.Message): def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... class MasterPasswordReentryRequest(_message.Message): - __slots__ = ["pbkdf2Password", "action"] + __slots__ = ("pbkdf2Password", "action") PBKDF2PASSWORD_FIELD_NUMBER: _ClassVar[int] ACTION_FIELD_NUMBER: _ClassVar[int] pbkdf2Password: str @@ -1348,27 +1407,29 @@ class MasterPasswordReentryRequest(_message.Message): def __init__(self, pbkdf2Password: _Optional[str] = ..., action: _Optional[_Union[MasterPasswordReentryActionType, str]] = ...) -> None: ... class MasterPasswordReentryResponse(_message.Message): - __slots__ = ["status"] + __slots__ = ("status",) STATUS_FIELD_NUMBER: _ClassVar[int] status: MasterPasswordReentryStatus def __init__(self, status: _Optional[_Union[MasterPasswordReentryStatus, str]] = ...) -> None: ... class DeviceRegistrationRequest(_message.Message): - __slots__ = ["clientVersion", "deviceName", "devicePublicKey", "devicePlatform", "clientFormFactor"] + __slots__ = ("clientVersion", "deviceName", "devicePublicKey", "devicePlatform", "clientFormFactor", "username") CLIENTVERSION_FIELD_NUMBER: _ClassVar[int] DEVICENAME_FIELD_NUMBER: _ClassVar[int] DEVICEPUBLICKEY_FIELD_NUMBER: _ClassVar[int] DEVICEPLATFORM_FIELD_NUMBER: _ClassVar[int] CLIENTFORMFACTOR_FIELD_NUMBER: _ClassVar[int] + USERNAME_FIELD_NUMBER: _ClassVar[int] clientVersion: str deviceName: str devicePublicKey: bytes devicePlatform: str clientFormFactor: ClientFormFactor - def __init__(self, clientVersion: _Optional[str] = ..., deviceName: _Optional[str] = ..., devicePublicKey: _Optional[bytes] = ..., devicePlatform: _Optional[str] = ..., clientFormFactor: _Optional[_Union[ClientFormFactor, str]] = ...) -> None: ... + username: str + def __init__(self, clientVersion: _Optional[str] = ..., deviceName: _Optional[str] = ..., devicePublicKey: _Optional[bytes] = ..., devicePlatform: _Optional[str] = ..., clientFormFactor: _Optional[_Union[ClientFormFactor, str]] = ..., username: _Optional[str] = ...) -> None: ... class DeviceVerificationRequest(_message.Message): - __slots__ = ["encryptedDeviceToken", "username", "verificationChannel", "messageSessionUid", "clientVersion"] + __slots__ = ("encryptedDeviceToken", "username", "verificationChannel", "messageSessionUid", "clientVersion") ENCRYPTEDDEVICETOKEN_FIELD_NUMBER: _ClassVar[int] USERNAME_FIELD_NUMBER: _ClassVar[int] VERIFICATIONCHANNEL_FIELD_NUMBER: _ClassVar[int] @@ -1382,7 +1443,7 @@ class DeviceVerificationRequest(_message.Message): def __init__(self, encryptedDeviceToken: _Optional[bytes] = ..., username: _Optional[str] = ..., verificationChannel: _Optional[str] = ..., messageSessionUid: _Optional[bytes] = ..., clientVersion: _Optional[str] = ...) -> None: ... class DeviceVerificationResponse(_message.Message): - __slots__ = ["encryptedDeviceToken", "username", "messageSessionUid", "clientVersion", "deviceStatus"] + __slots__ = ("encryptedDeviceToken", "username", "messageSessionUid", "clientVersion", "deviceStatus") ENCRYPTEDDEVICETOKEN_FIELD_NUMBER: _ClassVar[int] USERNAME_FIELD_NUMBER: _ClassVar[int] MESSAGESESSIONUID_FIELD_NUMBER: _ClassVar[int] @@ -1396,7 +1457,7 @@ class DeviceVerificationResponse(_message.Message): def __init__(self, encryptedDeviceToken: _Optional[bytes] = ..., username: _Optional[str] = ..., messageSessionUid: _Optional[bytes] = ..., clientVersion: _Optional[str] = ..., deviceStatus: _Optional[_Union[DeviceStatus, str]] = ...) -> None: ... class DeviceApprovalRequest(_message.Message): - __slots__ = ["email", "twoFactorChannel", "clientVersion", "locale", "encryptedDeviceToken", "totpCode", "deviceIp", "deviceTokenExpireDays"] + __slots__ = ("email", "twoFactorChannel", "clientVersion", "locale", "encryptedDeviceToken", "totpCode", "deviceIp", "deviceTokenExpireDays") EMAIL_FIELD_NUMBER: _ClassVar[int] TWOFACTORCHANNEL_FIELD_NUMBER: _ClassVar[int] CLIENTVERSION_FIELD_NUMBER: _ClassVar[int] @@ -1416,13 +1477,13 @@ class DeviceApprovalRequest(_message.Message): def __init__(self, email: _Optional[str] = ..., twoFactorChannel: _Optional[str] = ..., clientVersion: _Optional[str] = ..., locale: _Optional[str] = ..., encryptedDeviceToken: _Optional[bytes] = ..., totpCode: _Optional[str] = ..., deviceIp: _Optional[str] = ..., deviceTokenExpireDays: _Optional[str] = ...) -> None: ... class DeviceApprovalResponse(_message.Message): - __slots__ = ["encryptedTwoFactorToken"] + __slots__ = ("encryptedTwoFactorToken",) ENCRYPTEDTWOFACTORTOKEN_FIELD_NUMBER: _ClassVar[int] encryptedTwoFactorToken: bytes def __init__(self, encryptedTwoFactorToken: _Optional[bytes] = ...) -> None: ... class ApproveDeviceRequest(_message.Message): - __slots__ = ["encryptedDeviceToken", "encryptedDeviceDataKey", "denyApproval", "linkDevice"] + __slots__ = ("encryptedDeviceToken", "encryptedDeviceDataKey", "denyApproval", "linkDevice") ENCRYPTEDDEVICETOKEN_FIELD_NUMBER: _ClassVar[int] ENCRYPTEDDEVICEDATAKEY_FIELD_NUMBER: _ClassVar[int] DENYAPPROVAL_FIELD_NUMBER: _ClassVar[int] @@ -1431,10 +1492,10 @@ class ApproveDeviceRequest(_message.Message): encryptedDeviceDataKey: bytes denyApproval: bool linkDevice: bool - def __init__(self, encryptedDeviceToken: _Optional[bytes] = ..., encryptedDeviceDataKey: _Optional[bytes] = ..., denyApproval: bool = ..., linkDevice: bool = ...) -> None: ... + def __init__(self, encryptedDeviceToken: _Optional[bytes] = ..., encryptedDeviceDataKey: _Optional[bytes] = ..., denyApproval: _Optional[bool] = ..., linkDevice: _Optional[bool] = ...) -> None: ... class EnterpriseUserAliasRequest(_message.Message): - __slots__ = ["enterpriseUserId", "alias"] + __slots__ = ("enterpriseUserId", "alias") ENTERPRISEUSERID_FIELD_NUMBER: _ClassVar[int] ALIAS_FIELD_NUMBER: _ClassVar[int] enterpriseUserId: int @@ -1442,23 +1503,23 @@ class EnterpriseUserAliasRequest(_message.Message): def __init__(self, enterpriseUserId: _Optional[int] = ..., alias: _Optional[str] = ...) -> None: ... class EnterpriseUserAddAliasRequest(_message.Message): - __slots__ = ["enterpriseUserId", "alias", "primary"] + __slots__ = ("enterpriseUserId", "alias", "primary") ENTERPRISEUSERID_FIELD_NUMBER: _ClassVar[int] ALIAS_FIELD_NUMBER: _ClassVar[int] PRIMARY_FIELD_NUMBER: _ClassVar[int] enterpriseUserId: int alias: str primary: bool - def __init__(self, enterpriseUserId: _Optional[int] = ..., alias: _Optional[str] = ..., primary: bool = ...) -> None: ... + def __init__(self, enterpriseUserId: _Optional[int] = ..., alias: _Optional[str] = ..., primary: _Optional[bool] = ...) -> None: ... class EnterpriseUserAddAliasRequestV2(_message.Message): - __slots__ = ["enterpriseUserAddAliasRequest"] + __slots__ = ("enterpriseUserAddAliasRequest",) ENTERPRISEUSERADDALIASREQUEST_FIELD_NUMBER: _ClassVar[int] enterpriseUserAddAliasRequest: _containers.RepeatedCompositeFieldContainer[EnterpriseUserAddAliasRequest] def __init__(self, enterpriseUserAddAliasRequest: _Optional[_Iterable[_Union[EnterpriseUserAddAliasRequest, _Mapping]]] = ...) -> None: ... class EnterpriseUserAddAliasStatus(_message.Message): - __slots__ = ["enterpriseUserId", "status"] + __slots__ = ("enterpriseUserId", "status") ENTERPRISEUSERID_FIELD_NUMBER: _ClassVar[int] STATUS_FIELD_NUMBER: _ClassVar[int] enterpriseUserId: int @@ -1466,19 +1527,19 @@ class EnterpriseUserAddAliasStatus(_message.Message): def __init__(self, enterpriseUserId: _Optional[int] = ..., status: _Optional[str] = ...) -> None: ... class EnterpriseUserAddAliasResponse(_message.Message): - __slots__ = ["status"] + __slots__ = ("status",) STATUS_FIELD_NUMBER: _ClassVar[int] status: _containers.RepeatedCompositeFieldContainer[EnterpriseUserAddAliasStatus] def __init__(self, status: _Optional[_Iterable[_Union[EnterpriseUserAddAliasStatus, _Mapping]]] = ...) -> None: ... class Device(_message.Message): - __slots__ = ["encryptedDeviceToken"] + __slots__ = ("encryptedDeviceToken",) ENCRYPTEDDEVICETOKEN_FIELD_NUMBER: _ClassVar[int] encryptedDeviceToken: bytes def __init__(self, encryptedDeviceToken: _Optional[bytes] = ...) -> None: ... class RegisterDeviceDataKeyRequest(_message.Message): - __slots__ = ["encryptedDeviceToken", "encryptedDeviceDataKey"] + __slots__ = ("encryptedDeviceToken", "encryptedDeviceDataKey") ENCRYPTEDDEVICETOKEN_FIELD_NUMBER: _ClassVar[int] ENCRYPTEDDEVICEDATAKEY_FIELD_NUMBER: _ClassVar[int] encryptedDeviceToken: bytes @@ -1486,7 +1547,7 @@ class RegisterDeviceDataKeyRequest(_message.Message): def __init__(self, encryptedDeviceToken: _Optional[bytes] = ..., encryptedDeviceDataKey: _Optional[bytes] = ...) -> None: ... class ValidateCreateUserVerificationCodeRequest(_message.Message): - __slots__ = ["username", "clientVersion", "verificationCode"] + __slots__ = ("username", "clientVersion", "verificationCode") USERNAME_FIELD_NUMBER: _ClassVar[int] CLIENTVERSION_FIELD_NUMBER: _ClassVar[int] VERIFICATIONCODE_FIELD_NUMBER: _ClassVar[int] @@ -1496,7 +1557,7 @@ class ValidateCreateUserVerificationCodeRequest(_message.Message): def __init__(self, username: _Optional[str] = ..., clientVersion: _Optional[str] = ..., verificationCode: _Optional[str] = ...) -> None: ... class ValidateDeviceVerificationCodeRequest(_message.Message): - __slots__ = ["username", "clientVersion", "verificationCode", "messageSessionUid", "encryptedDeviceToken"] + __slots__ = ("username", "clientVersion", "verificationCode", "messageSessionUid", "encryptedDeviceToken") USERNAME_FIELD_NUMBER: _ClassVar[int] CLIENTVERSION_FIELD_NUMBER: _ClassVar[int] VERIFICATIONCODE_FIELD_NUMBER: _ClassVar[int] @@ -1510,7 +1571,7 @@ class ValidateDeviceVerificationCodeRequest(_message.Message): def __init__(self, username: _Optional[str] = ..., clientVersion: _Optional[str] = ..., verificationCode: _Optional[str] = ..., messageSessionUid: _Optional[bytes] = ..., encryptedDeviceToken: _Optional[bytes] = ...) -> None: ... class SendSessionMessageRequest(_message.Message): - __slots__ = ["messageSessionUid", "command", "username"] + __slots__ = ("messageSessionUid", "command", "username") MESSAGESESSIONUID_FIELD_NUMBER: _ClassVar[int] COMMAND_FIELD_NUMBER: _ClassVar[int] USERNAME_FIELD_NUMBER: _ClassVar[int] @@ -1520,7 +1581,7 @@ class SendSessionMessageRequest(_message.Message): def __init__(self, messageSessionUid: _Optional[bytes] = ..., command: _Optional[str] = ..., username: _Optional[str] = ...) -> None: ... class GlobalUserAccount(_message.Message): - __slots__ = ["username", "accountUid", "regionName"] + __slots__ = ("username", "accountUid", "regionName") USERNAME_FIELD_NUMBER: _ClassVar[int] ACCOUNTUID_FIELD_NUMBER: _ClassVar[int] REGIONNAME_FIELD_NUMBER: _ClassVar[int] @@ -1530,7 +1591,7 @@ class GlobalUserAccount(_message.Message): def __init__(self, username: _Optional[str] = ..., accountUid: _Optional[bytes] = ..., regionName: _Optional[str] = ...) -> None: ... class AccountUsername(_message.Message): - __slots__ = ["username", "dateActive"] + __slots__ = ("username", "dateActive") USERNAME_FIELD_NUMBER: _ClassVar[int] DATEACTIVE_FIELD_NUMBER: _ClassVar[int] username: str @@ -1538,7 +1599,7 @@ class AccountUsername(_message.Message): def __init__(self, username: _Optional[str] = ..., dateActive: _Optional[str] = ...) -> None: ... class SsoServiceProviderRequest(_message.Message): - __slots__ = ["name", "clientVersion", "locale"] + __slots__ = ("name", "clientVersion", "locale") NAME_FIELD_NUMBER: _ClassVar[int] CLIENTVERSION_FIELD_NUMBER: _ClassVar[int] LOCALE_FIELD_NUMBER: _ClassVar[int] @@ -1548,7 +1609,7 @@ class SsoServiceProviderRequest(_message.Message): def __init__(self, name: _Optional[str] = ..., clientVersion: _Optional[str] = ..., locale: _Optional[str] = ...) -> None: ... class SsoServiceProviderResponse(_message.Message): - __slots__ = ["name", "spUrl", "isCloud", "clientVersion"] + __slots__ = ("name", "spUrl", "isCloud", "clientVersion") NAME_FIELD_NUMBER: _ClassVar[int] SPURL_FIELD_NUMBER: _ClassVar[int] ISCLOUD_FIELD_NUMBER: _ClassVar[int] @@ -1557,10 +1618,10 @@ class SsoServiceProviderResponse(_message.Message): spUrl: str isCloud: bool clientVersion: str - def __init__(self, name: _Optional[str] = ..., spUrl: _Optional[str] = ..., isCloud: bool = ..., clientVersion: _Optional[str] = ...) -> None: ... + def __init__(self, name: _Optional[str] = ..., spUrl: _Optional[str] = ..., isCloud: _Optional[bool] = ..., clientVersion: _Optional[str] = ...) -> None: ... class UserSettingRequest(_message.Message): - __slots__ = ["setting", "value"] + __slots__ = ("setting", "value") SETTING_FIELD_NUMBER: _ClassVar[int] VALUE_FIELD_NUMBER: _ClassVar[int] setting: str @@ -1568,7 +1629,7 @@ class UserSettingRequest(_message.Message): def __init__(self, setting: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... class ThrottleState(_message.Message): - __slots__ = ["type", "key", "value", "state"] + __slots__ = ("type", "key", "value", "state") TYPE_FIELD_NUMBER: _ClassVar[int] KEY_FIELD_NUMBER: _ClassVar[int] VALUE_FIELD_NUMBER: _ClassVar[int] @@ -1577,10 +1638,10 @@ class ThrottleState(_message.Message): key: str value: str state: bool - def __init__(self, type: _Optional[_Union[ThrottleType, str]] = ..., key: _Optional[str] = ..., value: _Optional[str] = ..., state: bool = ...) -> None: ... + def __init__(self, type: _Optional[_Union[ThrottleType, str]] = ..., key: _Optional[str] = ..., value: _Optional[str] = ..., state: _Optional[bool] = ...) -> None: ... class ThrottleState2(_message.Message): - __slots__ = ["key", "keyDescription", "value", "valueDescription", "identifier", "locked", "includedInAllClear", "expireSeconds"] + __slots__ = ("key", "keyDescription", "value", "valueDescription", "identifier", "locked", "includedInAllClear", "expireSeconds") KEY_FIELD_NUMBER: _ClassVar[int] KEYDESCRIPTION_FIELD_NUMBER: _ClassVar[int] VALUE_FIELD_NUMBER: _ClassVar[int] @@ -1597,10 +1658,10 @@ class ThrottleState2(_message.Message): locked: bool includedInAllClear: bool expireSeconds: int - def __init__(self, key: _Optional[str] = ..., keyDescription: _Optional[str] = ..., value: _Optional[str] = ..., valueDescription: _Optional[str] = ..., identifier: _Optional[str] = ..., locked: bool = ..., includedInAllClear: bool = ..., expireSeconds: _Optional[int] = ...) -> None: ... + def __init__(self, key: _Optional[str] = ..., keyDescription: _Optional[str] = ..., value: _Optional[str] = ..., valueDescription: _Optional[str] = ..., identifier: _Optional[str] = ..., locked: _Optional[bool] = ..., includedInAllClear: _Optional[bool] = ..., expireSeconds: _Optional[int] = ...) -> None: ... class DeviceInformation(_message.Message): - __slots__ = ["deviceId", "deviceName", "clientVersion", "lastLogin", "deviceStatus"] + __slots__ = ("deviceId", "deviceName", "clientVersion", "lastLogin", "deviceStatus") DEVICEID_FIELD_NUMBER: _ClassVar[int] DEVICENAME_FIELD_NUMBER: _ClassVar[int] CLIENTVERSION_FIELD_NUMBER: _ClassVar[int] @@ -1614,27 +1675,27 @@ class DeviceInformation(_message.Message): def __init__(self, deviceId: _Optional[int] = ..., deviceName: _Optional[str] = ..., clientVersion: _Optional[str] = ..., lastLogin: _Optional[int] = ..., deviceStatus: _Optional[_Union[DeviceStatus, str]] = ...) -> None: ... class UserSetting(_message.Message): - __slots__ = ["name", "value"] + __slots__ = ("name", "value") NAME_FIELD_NUMBER: _ClassVar[int] VALUE_FIELD_NUMBER: _ClassVar[int] name: str value: bool - def __init__(self, name: _Optional[str] = ..., value: bool = ...) -> None: ... + def __init__(self, name: _Optional[str] = ..., value: _Optional[bool] = ...) -> None: ... class UserDataKeyRequest(_message.Message): - __slots__ = ["enterpriseUserId"] + __slots__ = ("enterpriseUserId",) ENTERPRISEUSERID_FIELD_NUMBER: _ClassVar[int] enterpriseUserId: _containers.RepeatedScalarFieldContainer[int] def __init__(self, enterpriseUserId: _Optional[_Iterable[int]] = ...) -> None: ... class UserDataKeyByNodeRequest(_message.Message): - __slots__ = ["nodeIds"] + __slots__ = ("nodeIds",) NODEIDS_FIELD_NUMBER: _ClassVar[int] nodeIds: _containers.RepeatedScalarFieldContainer[int] def __init__(self, nodeIds: _Optional[_Iterable[int]] = ...) -> None: ... class EnterpriseUserIdDataKeyPair(_message.Message): - __slots__ = ["enterpriseUserId", "encryptedDataKey", "keyType"] + __slots__ = ("enterpriseUserId", "encryptedDataKey", "keyType") ENTERPRISEUSERID_FIELD_NUMBER: _ClassVar[int] ENCRYPTEDDATAKEY_FIELD_NUMBER: _ClassVar[int] KEYTYPE_FIELD_NUMBER: _ClassVar[int] @@ -1644,7 +1705,7 @@ class EnterpriseUserIdDataKeyPair(_message.Message): def __init__(self, enterpriseUserId: _Optional[int] = ..., encryptedDataKey: _Optional[bytes] = ..., keyType: _Optional[_Union[_enterprise_pb2.EncryptedKeyType, str]] = ...) -> None: ... class UserDataKey(_message.Message): - __slots__ = ["roleId", "roleKey", "privateKey", "enterpriseUserIdDataKeyPairs"] + __slots__ = ("roleId", "roleKey", "privateKey", "enterpriseUserIdDataKeyPairs") ROLEID_FIELD_NUMBER: _ClassVar[int] ROLEKEY_FIELD_NUMBER: _ClassVar[int] PRIVATEKEY_FIELD_NUMBER: _ClassVar[int] @@ -1656,7 +1717,7 @@ class UserDataKey(_message.Message): def __init__(self, roleId: _Optional[int] = ..., roleKey: _Optional[bytes] = ..., privateKey: _Optional[str] = ..., enterpriseUserIdDataKeyPairs: _Optional[_Iterable[_Union[EnterpriseUserIdDataKeyPair, _Mapping]]] = ...) -> None: ... class UserDataKeyResponse(_message.Message): - __slots__ = ["userDataKeys", "accessDenied", "noEncryptedDataKey"] + __slots__ = ("userDataKeys", "accessDenied", "noEncryptedDataKey") USERDATAKEYS_FIELD_NUMBER: _ClassVar[int] ACCESSDENIED_FIELD_NUMBER: _ClassVar[int] NOENCRYPTEDDATAKEY_FIELD_NUMBER: _ClassVar[int] @@ -1666,13 +1727,13 @@ class UserDataKeyResponse(_message.Message): def __init__(self, userDataKeys: _Optional[_Iterable[_Union[UserDataKey, _Mapping]]] = ..., accessDenied: _Optional[_Iterable[int]] = ..., noEncryptedDataKey: _Optional[_Iterable[int]] = ...) -> None: ... class MasterPasswordRecoveryVerificationRequest(_message.Message): - __slots__ = ["encryptedLoginToken"] + __slots__ = ("encryptedLoginToken",) ENCRYPTEDLOGINTOKEN_FIELD_NUMBER: _ClassVar[int] encryptedLoginToken: bytes def __init__(self, encryptedLoginToken: _Optional[bytes] = ...) -> None: ... class GetSecurityQuestionV3Request(_message.Message): - __slots__ = ["encryptedLoginToken", "verificationCode"] + __slots__ = ("encryptedLoginToken", "verificationCode") ENCRYPTEDLOGINTOKEN_FIELD_NUMBER: _ClassVar[int] VERIFICATIONCODE_FIELD_NUMBER: _ClassVar[int] encryptedLoginToken: bytes @@ -1680,7 +1741,7 @@ class GetSecurityQuestionV3Request(_message.Message): def __init__(self, encryptedLoginToken: _Optional[bytes] = ..., verificationCode: _Optional[str] = ...) -> None: ... class GetSecurityQuestionV3Response(_message.Message): - __slots__ = ["securityQuestion", "backupKeyDate", "salt", "iterations"] + __slots__ = ("securityQuestion", "backupKeyDate", "salt", "iterations") SECURITYQUESTION_FIELD_NUMBER: _ClassVar[int] BACKUPKEYDATE_FIELD_NUMBER: _ClassVar[int] SALT_FIELD_NUMBER: _ClassVar[int] @@ -1692,7 +1753,7 @@ class GetSecurityQuestionV3Response(_message.Message): def __init__(self, securityQuestion: _Optional[str] = ..., backupKeyDate: _Optional[int] = ..., salt: _Optional[bytes] = ..., iterations: _Optional[int] = ...) -> None: ... class GetDataKeyBackupV3Request(_message.Message): - __slots__ = ["encryptedLoginToken", "verificationCode", "securityAnswerHash"] + __slots__ = ("encryptedLoginToken", "verificationCode", "securityAnswerHash") ENCRYPTEDLOGINTOKEN_FIELD_NUMBER: _ClassVar[int] VERIFICATIONCODE_FIELD_NUMBER: _ClassVar[int] SECURITYANSWERHASH_FIELD_NUMBER: _ClassVar[int] @@ -1702,7 +1763,7 @@ class GetDataKeyBackupV3Request(_message.Message): def __init__(self, encryptedLoginToken: _Optional[bytes] = ..., verificationCode: _Optional[str] = ..., securityAnswerHash: _Optional[bytes] = ...) -> None: ... class PasswordRules(_message.Message): - __slots__ = ["ruleType", "match", "pattern", "description", "minimum", "value"] + __slots__ = ("ruleType", "match", "pattern", "description", "minimum", "value") RULETYPE_FIELD_NUMBER: _ClassVar[int] MATCH_FIELD_NUMBER: _ClassVar[int] PATTERN_FIELD_NUMBER: _ClassVar[int] @@ -1715,10 +1776,10 @@ class PasswordRules(_message.Message): description: str minimum: int value: str - def __init__(self, ruleType: _Optional[str] = ..., match: bool = ..., pattern: _Optional[str] = ..., description: _Optional[str] = ..., minimum: _Optional[int] = ..., value: _Optional[str] = ...) -> None: ... + def __init__(self, ruleType: _Optional[str] = ..., match: _Optional[bool] = ..., pattern: _Optional[str] = ..., description: _Optional[str] = ..., minimum: _Optional[int] = ..., value: _Optional[str] = ...) -> None: ... class GetDataKeyBackupV3Response(_message.Message): - __slots__ = ["dataKeyBackup", "dataKeyBackupDate", "publicKey", "encryptedPrivateKey", "clientKey", "encryptedSessionToken", "passwordRules", "passwordRulesIntro", "minimumPbkdf2Iterations", "keyType"] + __slots__ = ("dataKeyBackup", "dataKeyBackupDate", "publicKey", "encryptedPrivateKey", "clientKey", "encryptedSessionToken", "passwordRules", "passwordRulesIntro", "minimumPbkdf2Iterations", "keyType") DATAKEYBACKUP_FIELD_NUMBER: _ClassVar[int] DATAKEYBACKUPDATE_FIELD_NUMBER: _ClassVar[int] PUBLICKEY_FIELD_NUMBER: _ClassVar[int] @@ -1742,13 +1803,13 @@ class GetDataKeyBackupV3Response(_message.Message): def __init__(self, dataKeyBackup: _Optional[bytes] = ..., dataKeyBackupDate: _Optional[int] = ..., publicKey: _Optional[bytes] = ..., encryptedPrivateKey: _Optional[bytes] = ..., clientKey: _Optional[bytes] = ..., encryptedSessionToken: _Optional[bytes] = ..., passwordRules: _Optional[_Iterable[_Union[PasswordRules, _Mapping]]] = ..., passwordRulesIntro: _Optional[str] = ..., minimumPbkdf2Iterations: _Optional[int] = ..., keyType: _Optional[_Union[_enterprise_pb2.KeyType, str]] = ...) -> None: ... class GetPublicKeysRequest(_message.Message): - __slots__ = ["usernames"] + __slots__ = ("usernames",) USERNAMES_FIELD_NUMBER: _ClassVar[int] usernames: _containers.RepeatedScalarFieldContainer[str] def __init__(self, usernames: _Optional[_Iterable[str]] = ...) -> None: ... class PublicKeyResponse(_message.Message): - __slots__ = ["username", "publicKey", "publicEccKey", "message", "errorCode"] + __slots__ = ("username", "publicKey", "publicEccKey", "message", "errorCode") USERNAME_FIELD_NUMBER: _ClassVar[int] PUBLICKEY_FIELD_NUMBER: _ClassVar[int] PUBLICECCKEY_FIELD_NUMBER: _ClassVar[int] @@ -1762,13 +1823,13 @@ class PublicKeyResponse(_message.Message): def __init__(self, username: _Optional[str] = ..., publicKey: _Optional[bytes] = ..., publicEccKey: _Optional[bytes] = ..., message: _Optional[str] = ..., errorCode: _Optional[str] = ...) -> None: ... class GetPublicKeysResponse(_message.Message): - __slots__ = ["keyResponses"] + __slots__ = ("keyResponses",) KEYRESPONSES_FIELD_NUMBER: _ClassVar[int] keyResponses: _containers.RepeatedCompositeFieldContainer[PublicKeyResponse] def __init__(self, keyResponses: _Optional[_Iterable[_Union[PublicKeyResponse, _Mapping]]] = ...) -> None: ... class SetEccKeyPairRequest(_message.Message): - __slots__ = ["publicKey", "encryptedPrivateKey"] + __slots__ = ("publicKey", "encryptedPrivateKey") PUBLICKEY_FIELD_NUMBER: _ClassVar[int] ENCRYPTEDPRIVATEKEY_FIELD_NUMBER: _ClassVar[int] publicKey: bytes @@ -1776,19 +1837,19 @@ class SetEccKeyPairRequest(_message.Message): def __init__(self, publicKey: _Optional[bytes] = ..., encryptedPrivateKey: _Optional[bytes] = ...) -> None: ... class SetEccKeyPairsRequest(_message.Message): - __slots__ = ["teamKeys"] + __slots__ = ("teamKeys",) TEAMKEYS_FIELD_NUMBER: _ClassVar[int] teamKeys: _containers.RepeatedCompositeFieldContainer[TeamEccKeyPair] def __init__(self, teamKeys: _Optional[_Iterable[_Union[TeamEccKeyPair, _Mapping]]] = ...) -> None: ... class SetEccKeyPairsResponse(_message.Message): - __slots__ = ["teamKeys"] + __slots__ = ("teamKeys",) TEAMKEYS_FIELD_NUMBER: _ClassVar[int] teamKeys: _containers.RepeatedCompositeFieldContainer[TeamEccKeyPairResponse] def __init__(self, teamKeys: _Optional[_Iterable[_Union[TeamEccKeyPairResponse, _Mapping]]] = ...) -> None: ... class TeamEccKeyPair(_message.Message): - __slots__ = ["teamUid", "publicKey", "encryptedPrivateKey"] + __slots__ = ("teamUid", "publicKey", "encryptedPrivateKey") TEAMUID_FIELD_NUMBER: _ClassVar[int] PUBLICKEY_FIELD_NUMBER: _ClassVar[int] ENCRYPTEDPRIVATEKEY_FIELD_NUMBER: _ClassVar[int] @@ -1798,7 +1859,7 @@ class TeamEccKeyPair(_message.Message): def __init__(self, teamUid: _Optional[bytes] = ..., publicKey: _Optional[bytes] = ..., encryptedPrivateKey: _Optional[bytes] = ...) -> None: ... class TeamEccKeyPairResponse(_message.Message): - __slots__ = ["teamUid", "status"] + __slots__ = ("teamUid", "status") TEAMUID_FIELD_NUMBER: _ClassVar[int] STATUS_FIELD_NUMBER: _ClassVar[int] teamUid: bytes @@ -1806,7 +1867,7 @@ class TeamEccKeyPairResponse(_message.Message): def __init__(self, teamUid: _Optional[bytes] = ..., status: _Optional[_Union[GenericStatus, str]] = ...) -> None: ... class GetKsmPublicKeysRequest(_message.Message): - __slots__ = ["clientIds", "controllerUids"] + __slots__ = ("clientIds", "controllerUids") CLIENTIDS_FIELD_NUMBER: _ClassVar[int] CONTROLLERUIDS_FIELD_NUMBER: _ClassVar[int] clientIds: _containers.RepeatedScalarFieldContainer[bytes] @@ -1814,7 +1875,7 @@ class GetKsmPublicKeysRequest(_message.Message): def __init__(self, clientIds: _Optional[_Iterable[bytes]] = ..., controllerUids: _Optional[_Iterable[bytes]] = ...) -> None: ... class DevicePublicKeyResponse(_message.Message): - __slots__ = ["clientId", "publicKey", "controllerUid"] + __slots__ = ("clientId", "publicKey", "controllerUid") CLIENTID_FIELD_NUMBER: _ClassVar[int] PUBLICKEY_FIELD_NUMBER: _ClassVar[int] CONTROLLERUID_FIELD_NUMBER: _ClassVar[int] @@ -1824,13 +1885,13 @@ class DevicePublicKeyResponse(_message.Message): def __init__(self, clientId: _Optional[bytes] = ..., publicKey: _Optional[bytes] = ..., controllerUid: _Optional[bytes] = ...) -> None: ... class GetKsmPublicKeysResponse(_message.Message): - __slots__ = ["keyResponses"] + __slots__ = ("keyResponses",) KEYRESPONSES_FIELD_NUMBER: _ClassVar[int] keyResponses: _containers.RepeatedCompositeFieldContainer[DevicePublicKeyResponse] def __init__(self, keyResponses: _Optional[_Iterable[_Union[DevicePublicKeyResponse, _Mapping]]] = ...) -> None: ... class AddAppSharesRequest(_message.Message): - __slots__ = ["appRecordUid", "shares"] + __slots__ = ("appRecordUid", "shares") APPRECORDUID_FIELD_NUMBER: _ClassVar[int] SHARES_FIELD_NUMBER: _ClassVar[int] appRecordUid: bytes @@ -1838,7 +1899,7 @@ class AddAppSharesRequest(_message.Message): def __init__(self, appRecordUid: _Optional[bytes] = ..., shares: _Optional[_Iterable[_Union[AppShareAdd, _Mapping]]] = ...) -> None: ... class RemoveAppSharesRequest(_message.Message): - __slots__ = ["appRecordUid", "shares"] + __slots__ = ("appRecordUid", "shares") APPRECORDUID_FIELD_NUMBER: _ClassVar[int] SHARES_FIELD_NUMBER: _ClassVar[int] appRecordUid: bytes @@ -1846,7 +1907,7 @@ class RemoveAppSharesRequest(_message.Message): def __init__(self, appRecordUid: _Optional[bytes] = ..., shares: _Optional[_Iterable[bytes]] = ...) -> None: ... class AppShareAdd(_message.Message): - __slots__ = ["secretUid", "shareType", "encryptedSecretKey", "editable"] + __slots__ = ("secretUid", "shareType", "encryptedSecretKey", "editable") SECRETUID_FIELD_NUMBER: _ClassVar[int] SHARETYPE_FIELD_NUMBER: _ClassVar[int] ENCRYPTEDSECRETKEY_FIELD_NUMBER: _ClassVar[int] @@ -1855,10 +1916,10 @@ class AppShareAdd(_message.Message): shareType: ApplicationShareType encryptedSecretKey: bytes editable: bool - def __init__(self, secretUid: _Optional[bytes] = ..., shareType: _Optional[_Union[ApplicationShareType, str]] = ..., encryptedSecretKey: _Optional[bytes] = ..., editable: bool = ...) -> None: ... + def __init__(self, secretUid: _Optional[bytes] = ..., shareType: _Optional[_Union[ApplicationShareType, str]] = ..., encryptedSecretKey: _Optional[bytes] = ..., editable: _Optional[bool] = ...) -> None: ... class AppShare(_message.Message): - __slots__ = ["secretUid", "shareType", "editable", "createdOn", "data"] + __slots__ = ("secretUid", "shareType", "editable", "createdOn", "data") SECRETUID_FIELD_NUMBER: _ClassVar[int] SHARETYPE_FIELD_NUMBER: _ClassVar[int] EDITABLE_FIELD_NUMBER: _ClassVar[int] @@ -1869,10 +1930,10 @@ class AppShare(_message.Message): editable: bool createdOn: int data: bytes - def __init__(self, secretUid: _Optional[bytes] = ..., shareType: _Optional[_Union[ApplicationShareType, str]] = ..., editable: bool = ..., createdOn: _Optional[int] = ..., data: _Optional[bytes] = ...) -> None: ... + def __init__(self, secretUid: _Optional[bytes] = ..., shareType: _Optional[_Union[ApplicationShareType, str]] = ..., editable: _Optional[bool] = ..., createdOn: _Optional[int] = ..., data: _Optional[bytes] = ...) -> None: ... class AddAppClientRequest(_message.Message): - __slots__ = ["appRecordUid", "encryptedAppKey", "clientId", "lockIp", "firstAccessExpireOn", "accessExpireOn", "id", "appClientType"] + __slots__ = ("appRecordUid", "encryptedAppKey", "clientId", "lockIp", "firstAccessExpireOn", "accessExpireOn", "id", "appClientType") APPRECORDUID_FIELD_NUMBER: _ClassVar[int] ENCRYPTEDAPPKEY_FIELD_NUMBER: _ClassVar[int] CLIENTID_FIELD_NUMBER: _ClassVar[int] @@ -1889,10 +1950,10 @@ class AddAppClientRequest(_message.Message): accessExpireOn: int id: str appClientType: _enterprise_pb2.AppClientType - def __init__(self, appRecordUid: _Optional[bytes] = ..., encryptedAppKey: _Optional[bytes] = ..., clientId: _Optional[bytes] = ..., lockIp: bool = ..., firstAccessExpireOn: _Optional[int] = ..., accessExpireOn: _Optional[int] = ..., id: _Optional[str] = ..., appClientType: _Optional[_Union[_enterprise_pb2.AppClientType, str]] = ...) -> None: ... + def __init__(self, appRecordUid: _Optional[bytes] = ..., encryptedAppKey: _Optional[bytes] = ..., clientId: _Optional[bytes] = ..., lockIp: _Optional[bool] = ..., firstAccessExpireOn: _Optional[int] = ..., accessExpireOn: _Optional[int] = ..., id: _Optional[str] = ..., appClientType: _Optional[_Union[_enterprise_pb2.AppClientType, str]] = ...) -> None: ... class RemoveAppClientsRequest(_message.Message): - __slots__ = ["appRecordUid", "clients"] + __slots__ = ("appRecordUid", "clients") APPRECORDUID_FIELD_NUMBER: _ClassVar[int] CLIENTS_FIELD_NUMBER: _ClassVar[int] appRecordUid: bytes @@ -1900,7 +1961,7 @@ class RemoveAppClientsRequest(_message.Message): def __init__(self, appRecordUid: _Optional[bytes] = ..., clients: _Optional[_Iterable[bytes]] = ...) -> None: ... class AddExternalShareRequest(_message.Message): - __slots__ = ["recordUid", "encryptedRecordKey", "clientId", "accessExpireOn", "id", "isSelfDestruct", "isEditable"] + __slots__ = ("recordUid", "encryptedRecordKey", "clientId", "accessExpireOn", "id", "isSelfDestruct", "isEditable") RECORDUID_FIELD_NUMBER: _ClassVar[int] ENCRYPTEDRECORDKEY_FIELD_NUMBER: _ClassVar[int] CLIENTID_FIELD_NUMBER: _ClassVar[int] @@ -1915,10 +1976,10 @@ class AddExternalShareRequest(_message.Message): id: str isSelfDestruct: bool isEditable: bool - def __init__(self, recordUid: _Optional[bytes] = ..., encryptedRecordKey: _Optional[bytes] = ..., clientId: _Optional[bytes] = ..., accessExpireOn: _Optional[int] = ..., id: _Optional[str] = ..., isSelfDestruct: bool = ..., isEditable: bool = ...) -> None: ... + def __init__(self, recordUid: _Optional[bytes] = ..., encryptedRecordKey: _Optional[bytes] = ..., clientId: _Optional[bytes] = ..., accessExpireOn: _Optional[int] = ..., id: _Optional[str] = ..., isSelfDestruct: _Optional[bool] = ..., isEditable: _Optional[bool] = ...) -> None: ... class AppClient(_message.Message): - __slots__ = ["id", "clientId", "createdOn", "firstAccess", "lastAccess", "publicKey", "lockIp", "ipAddress", "firstAccessExpireOn", "accessExpireOn", "appClientType", "canEdit"] + __slots__ = ("id", "clientId", "createdOn", "firstAccess", "lastAccess", "publicKey", "lockIp", "ipAddress", "firstAccessExpireOn", "accessExpireOn", "appClientType", "canEdit") ID_FIELD_NUMBER: _ClassVar[int] CLIENTID_FIELD_NUMBER: _ClassVar[int] CREATEDON_FIELD_NUMBER: _ClassVar[int] @@ -1943,16 +2004,16 @@ class AppClient(_message.Message): accessExpireOn: int appClientType: _enterprise_pb2.AppClientType canEdit: bool - def __init__(self, id: _Optional[str] = ..., clientId: _Optional[bytes] = ..., createdOn: _Optional[int] = ..., firstAccess: _Optional[int] = ..., lastAccess: _Optional[int] = ..., publicKey: _Optional[bytes] = ..., lockIp: bool = ..., ipAddress: _Optional[str] = ..., firstAccessExpireOn: _Optional[int] = ..., accessExpireOn: _Optional[int] = ..., appClientType: _Optional[_Union[_enterprise_pb2.AppClientType, str]] = ..., canEdit: bool = ...) -> None: ... + def __init__(self, id: _Optional[str] = ..., clientId: _Optional[bytes] = ..., createdOn: _Optional[int] = ..., firstAccess: _Optional[int] = ..., lastAccess: _Optional[int] = ..., publicKey: _Optional[bytes] = ..., lockIp: _Optional[bool] = ..., ipAddress: _Optional[str] = ..., firstAccessExpireOn: _Optional[int] = ..., accessExpireOn: _Optional[int] = ..., appClientType: _Optional[_Union[_enterprise_pb2.AppClientType, str]] = ..., canEdit: _Optional[bool] = ...) -> None: ... class GetAppInfoRequest(_message.Message): - __slots__ = ["appRecordUid"] + __slots__ = ("appRecordUid",) APPRECORDUID_FIELD_NUMBER: _ClassVar[int] appRecordUid: _containers.RepeatedScalarFieldContainer[bytes] def __init__(self, appRecordUid: _Optional[_Iterable[bytes]] = ...) -> None: ... class AppInfo(_message.Message): - __slots__ = ["appRecordUid", "shares", "clients", "isExternalShare"] + __slots__ = ("appRecordUid", "shares", "clients", "isExternalShare") APPRECORDUID_FIELD_NUMBER: _ClassVar[int] SHARES_FIELD_NUMBER: _ClassVar[int] CLIENTS_FIELD_NUMBER: _ClassVar[int] @@ -1961,16 +2022,16 @@ class AppInfo(_message.Message): shares: _containers.RepeatedCompositeFieldContainer[AppShare] clients: _containers.RepeatedCompositeFieldContainer[AppClient] isExternalShare: bool - def __init__(self, appRecordUid: _Optional[bytes] = ..., shares: _Optional[_Iterable[_Union[AppShare, _Mapping]]] = ..., clients: _Optional[_Iterable[_Union[AppClient, _Mapping]]] = ..., isExternalShare: bool = ...) -> None: ... + def __init__(self, appRecordUid: _Optional[bytes] = ..., shares: _Optional[_Iterable[_Union[AppShare, _Mapping]]] = ..., clients: _Optional[_Iterable[_Union[AppClient, _Mapping]]] = ..., isExternalShare: _Optional[bool] = ...) -> None: ... class GetAppInfoResponse(_message.Message): - __slots__ = ["appInfo"] + __slots__ = ("appInfo",) APPINFO_FIELD_NUMBER: _ClassVar[int] appInfo: _containers.RepeatedCompositeFieldContainer[AppInfo] def __init__(self, appInfo: _Optional[_Iterable[_Union[AppInfo, _Mapping]]] = ...) -> None: ... class ApplicationSummary(_message.Message): - __slots__ = ["appRecordUid", "lastAccess", "recordShares", "folderShares", "folderRecords", "clientCount", "expiredClientCount", "username", "appData"] + __slots__ = ("appRecordUid", "lastAccess", "recordShares", "folderShares", "folderRecords", "clientCount", "expiredClientCount", "username", "appData") APPRECORDUID_FIELD_NUMBER: _ClassVar[int] LASTACCESS_FIELD_NUMBER: _ClassVar[int] RECORDSHARES_FIELD_NUMBER: _ClassVar[int] @@ -1992,31 +2053,31 @@ class ApplicationSummary(_message.Message): def __init__(self, appRecordUid: _Optional[bytes] = ..., lastAccess: _Optional[int] = ..., recordShares: _Optional[int] = ..., folderShares: _Optional[int] = ..., folderRecords: _Optional[int] = ..., clientCount: _Optional[int] = ..., expiredClientCount: _Optional[int] = ..., username: _Optional[str] = ..., appData: _Optional[bytes] = ...) -> None: ... class GetApplicationsSummaryResponse(_message.Message): - __slots__ = ["applicationSummary"] + __slots__ = ("applicationSummary",) APPLICATIONSUMMARY_FIELD_NUMBER: _ClassVar[int] applicationSummary: _containers.RepeatedCompositeFieldContainer[ApplicationSummary] def __init__(self, applicationSummary: _Optional[_Iterable[_Union[ApplicationSummary, _Mapping]]] = ...) -> None: ... class GetVerificationTokenRequest(_message.Message): - __slots__ = ["username"] + __slots__ = ("username",) USERNAME_FIELD_NUMBER: _ClassVar[int] username: str def __init__(self, username: _Optional[str] = ...) -> None: ... class GetVerificationTokenResponse(_message.Message): - __slots__ = ["encryptedVerificationToken"] + __slots__ = ("encryptedVerificationToken",) ENCRYPTEDVERIFICATIONTOKEN_FIELD_NUMBER: _ClassVar[int] encryptedVerificationToken: bytes def __init__(self, encryptedVerificationToken: _Optional[bytes] = ...) -> None: ... class SendShareInviteRequest(_message.Message): - __slots__ = ["email"] + __slots__ = ("email",) EMAIL_FIELD_NUMBER: _ClassVar[int] email: str def __init__(self, email: _Optional[str] = ...) -> None: ... class TimeLimitedAccessRequest(_message.Message): - __slots__ = ["accountUid", "teamUid", "recordUid", "sharedObjectUid", "timeLimitedAccessType", "expiration"] + __slots__ = ("accountUid", "teamUid", "recordUid", "sharedObjectUid", "timeLimitedAccessType", "expiration") ACCOUNTUID_FIELD_NUMBER: _ClassVar[int] TEAMUID_FIELD_NUMBER: _ClassVar[int] RECORDUID_FIELD_NUMBER: _ClassVar[int] @@ -2032,7 +2093,7 @@ class TimeLimitedAccessRequest(_message.Message): def __init__(self, accountUid: _Optional[_Iterable[bytes]] = ..., teamUid: _Optional[_Iterable[bytes]] = ..., recordUid: _Optional[_Iterable[bytes]] = ..., sharedObjectUid: _Optional[bytes] = ..., timeLimitedAccessType: _Optional[_Union[TimeLimitedAccessType, str]] = ..., expiration: _Optional[int] = ...) -> None: ... class TimeLimitedAccessStatus(_message.Message): - __slots__ = ["uid", "message"] + __slots__ = ("uid", "message") UID_FIELD_NUMBER: _ClassVar[int] MESSAGE_FIELD_NUMBER: _ClassVar[int] uid: bytes @@ -2040,7 +2101,7 @@ class TimeLimitedAccessStatus(_message.Message): def __init__(self, uid: _Optional[bytes] = ..., message: _Optional[str] = ...) -> None: ... class TimeLimitedAccessResponse(_message.Message): - __slots__ = ["revision", "userAccessStatus", "teamAccessStatus", "recordAccessStatus"] + __slots__ = ("revision", "userAccessStatus", "teamAccessStatus", "recordAccessStatus") REVISION_FIELD_NUMBER: _ClassVar[int] USERACCESSSTATUS_FIELD_NUMBER: _ClassVar[int] TEAMACCESSSTATUS_FIELD_NUMBER: _ClassVar[int] @@ -2052,13 +2113,13 @@ class TimeLimitedAccessResponse(_message.Message): def __init__(self, revision: _Optional[int] = ..., userAccessStatus: _Optional[_Iterable[_Union[TimeLimitedAccessStatus, _Mapping]]] = ..., teamAccessStatus: _Optional[_Iterable[_Union[TimeLimitedAccessStatus, _Mapping]]] = ..., recordAccessStatus: _Optional[_Iterable[_Union[TimeLimitedAccessStatus, _Mapping]]] = ...) -> None: ... class RequestDownloadRequest(_message.Message): - __slots__ = ["fileNames"] + __slots__ = ("fileNames",) FILENAMES_FIELD_NUMBER: _ClassVar[int] fileNames: _containers.RepeatedScalarFieldContainer[str] def __init__(self, fileNames: _Optional[_Iterable[str]] = ...) -> None: ... class RequestDownloadResponse(_message.Message): - __slots__ = ["result", "message", "downloads"] + __slots__ = ("result", "message", "downloads") RESULT_FIELD_NUMBER: _ClassVar[int] MESSAGE_FIELD_NUMBER: _ClassVar[int] DOWNLOADS_FIELD_NUMBER: _ClassVar[int] @@ -2068,7 +2129,7 @@ class RequestDownloadResponse(_message.Message): def __init__(self, result: _Optional[str] = ..., message: _Optional[str] = ..., downloads: _Optional[_Iterable[_Union[Download, _Mapping]]] = ...) -> None: ... class Download(_message.Message): - __slots__ = ["fileName", "url", "successStatusCode"] + __slots__ = ("fileName", "url", "successStatusCode") FILENAME_FIELD_NUMBER: _ClassVar[int] URL_FIELD_NUMBER: _ClassVar[int] SUCCESSSTATUSCODE_FIELD_NUMBER: _ClassVar[int] @@ -2078,13 +2139,13 @@ class Download(_message.Message): def __init__(self, fileName: _Optional[str] = ..., url: _Optional[str] = ..., successStatusCode: _Optional[int] = ...) -> None: ... class DeleteUserRequest(_message.Message): - __slots__ = ["reason"] + __slots__ = ("reason",) REASON_FIELD_NUMBER: _ClassVar[int] reason: str def __init__(self, reason: _Optional[str] = ...) -> None: ... class ChangeMasterPasswordRequest(_message.Message): - __slots__ = ["authVerifier", "encryptionParams", "fromServiceProvider", "iterationsChange"] + __slots__ = ("authVerifier", "encryptionParams", "fromServiceProvider", "iterationsChange") AUTHVERIFIER_FIELD_NUMBER: _ClassVar[int] ENCRYPTIONPARAMS_FIELD_NUMBER: _ClassVar[int] FROMSERVICEPROVIDER_FIELD_NUMBER: _ClassVar[int] @@ -2093,16 +2154,16 @@ class ChangeMasterPasswordRequest(_message.Message): encryptionParams: bytes fromServiceProvider: bool iterationsChange: bool - def __init__(self, authVerifier: _Optional[bytes] = ..., encryptionParams: _Optional[bytes] = ..., fromServiceProvider: bool = ..., iterationsChange: bool = ...) -> None: ... + def __init__(self, authVerifier: _Optional[bytes] = ..., encryptionParams: _Optional[bytes] = ..., fromServiceProvider: _Optional[bool] = ..., iterationsChange: _Optional[bool] = ...) -> None: ... class ChangeMasterPasswordResponse(_message.Message): - __slots__ = ["encryptedSessionToken"] + __slots__ = ("encryptedSessionToken",) ENCRYPTEDSESSIONTOKEN_FIELD_NUMBER: _ClassVar[int] encryptedSessionToken: bytes def __init__(self, encryptedSessionToken: _Optional[bytes] = ...) -> None: ... class AccountRecoverySetupRequest(_message.Message): - __slots__ = ["recoveryEncryptedDataKey", "recoveryAuthHash"] + __slots__ = ("recoveryEncryptedDataKey", "recoveryAuthHash") RECOVERYENCRYPTEDDATAKEY_FIELD_NUMBER: _ClassVar[int] RECOVERYAUTHHASH_FIELD_NUMBER: _ClassVar[int] recoveryEncryptedDataKey: bytes @@ -2110,7 +2171,7 @@ class AccountRecoverySetupRequest(_message.Message): def __init__(self, recoveryEncryptedDataKey: _Optional[bytes] = ..., recoveryAuthHash: _Optional[bytes] = ...) -> None: ... class AccountRecoveryVerifyCodeResponse(_message.Message): - __slots__ = ["backupKeyType", "backupKeyDate", "securityQuestion", "salt", "iterations"] + __slots__ = ("backupKeyType", "backupKeyDate", "securityQuestion", "salt", "iterations") BACKUPKEYTYPE_FIELD_NUMBER: _ClassVar[int] BACKUPKEYDATE_FIELD_NUMBER: _ClassVar[int] SECURITYQUESTION_FIELD_NUMBER: _ClassVar[int] @@ -2124,13 +2185,13 @@ class AccountRecoveryVerifyCodeResponse(_message.Message): def __init__(self, backupKeyType: _Optional[_Union[BackupKeyType, str]] = ..., backupKeyDate: _Optional[int] = ..., securityQuestion: _Optional[str] = ..., salt: _Optional[bytes] = ..., iterations: _Optional[int] = ...) -> None: ... class EmergencyAccessLoginRequest(_message.Message): - __slots__ = ["owner"] + __slots__ = ("owner",) OWNER_FIELD_NUMBER: _ClassVar[int] owner: str def __init__(self, owner: _Optional[str] = ...) -> None: ... class EmergencyAccessLoginResponse(_message.Message): - __slots__ = ["sessionToken", "dataKey", "rsaPrivateKey", "eccPrivateKey"] + __slots__ = ("sessionToken", "dataKey", "rsaPrivateKey", "eccPrivateKey") SESSIONTOKEN_FIELD_NUMBER: _ClassVar[int] DATAKEY_FIELD_NUMBER: _ClassVar[int] RSAPRIVATEKEY_FIELD_NUMBER: _ClassVar[int] @@ -2142,7 +2203,7 @@ class EmergencyAccessLoginResponse(_message.Message): def __init__(self, sessionToken: _Optional[bytes] = ..., dataKey: _Optional[_Union[_enterprise_pb2.TypedKey, _Mapping]] = ..., rsaPrivateKey: _Optional[_Union[_enterprise_pb2.TypedKey, _Mapping]] = ..., eccPrivateKey: _Optional[_Union[_enterprise_pb2.TypedKey, _Mapping]] = ...) -> None: ... class UserTeamKey(_message.Message): - __slots__ = ["teamUid", "username", "enterpriseUserId", "encryptedTeamKeyRSA", "encryptedTeamKeyEC", "status"] + __slots__ = ("teamUid", "username", "enterpriseUserId", "encryptedTeamKeyRSA", "encryptedTeamKeyEC", "status") TEAMUID_FIELD_NUMBER: _ClassVar[int] USERNAME_FIELD_NUMBER: _ClassVar[int] ENTERPRISEUSERID_FIELD_NUMBER: _ClassVar[int] @@ -2158,19 +2219,19 @@ class UserTeamKey(_message.Message): def __init__(self, teamUid: _Optional[bytes] = ..., username: _Optional[str] = ..., enterpriseUserId: _Optional[int] = ..., encryptedTeamKeyRSA: _Optional[bytes] = ..., encryptedTeamKeyEC: _Optional[bytes] = ..., status: _Optional[_Union[GenericStatus, str]] = ...) -> None: ... class GenericRequestResponse(_message.Message): - __slots__ = ["request"] + __slots__ = ("request",) REQUEST_FIELD_NUMBER: _ClassVar[int] request: _containers.RepeatedScalarFieldContainer[bytes] def __init__(self, request: _Optional[_Iterable[bytes]] = ...) -> None: ... class PasskeyRegistrationRequest(_message.Message): - __slots__ = ["authenticatorAttachment"] + __slots__ = ("authenticatorAttachment",) AUTHENTICATORATTACHMENT_FIELD_NUMBER: _ClassVar[int] authenticatorAttachment: AuthenticatorAttachment def __init__(self, authenticatorAttachment: _Optional[_Union[AuthenticatorAttachment, str]] = ...) -> None: ... class PasskeyRegistrationResponse(_message.Message): - __slots__ = ["challengeToken", "pkCreationOptions"] + __slots__ = ("challengeToken", "pkCreationOptions") CHALLENGETOKEN_FIELD_NUMBER: _ClassVar[int] PKCREATIONOPTIONS_FIELD_NUMBER: _ClassVar[int] challengeToken: bytes @@ -2178,7 +2239,7 @@ class PasskeyRegistrationResponse(_message.Message): def __init__(self, challengeToken: _Optional[bytes] = ..., pkCreationOptions: _Optional[str] = ...) -> None: ... class PasskeyRegistrationFinalization(_message.Message): - __slots__ = ["challengeToken", "authenticatorResponse", "friendlyName"] + __slots__ = ("challengeToken", "authenticatorResponse", "friendlyName") CHALLENGETOKEN_FIELD_NUMBER: _ClassVar[int] AUTHENTICATORRESPONSE_FIELD_NUMBER: _ClassVar[int] FRIENDLYNAME_FIELD_NUMBER: _ClassVar[int] @@ -2188,7 +2249,7 @@ class PasskeyRegistrationFinalization(_message.Message): def __init__(self, challengeToken: _Optional[bytes] = ..., authenticatorResponse: _Optional[str] = ..., friendlyName: _Optional[str] = ...) -> None: ... class PasskeyAuthenticationRequest(_message.Message): - __slots__ = ["authenticatorAttachment", "passkeyPurpose", "clientVersion", "encryptedDeviceToken", "username", "encryptedLoginToken"] + __slots__ = ("authenticatorAttachment", "passkeyPurpose", "clientVersion", "encryptedDeviceToken", "username", "encryptedLoginToken") AUTHENTICATORATTACHMENT_FIELD_NUMBER: _ClassVar[int] PASSKEYPURPOSE_FIELD_NUMBER: _ClassVar[int] CLIENTVERSION_FIELD_NUMBER: _ClassVar[int] @@ -2204,7 +2265,7 @@ class PasskeyAuthenticationRequest(_message.Message): def __init__(self, authenticatorAttachment: _Optional[_Union[AuthenticatorAttachment, str]] = ..., passkeyPurpose: _Optional[_Union[PasskeyPurpose, str]] = ..., clientVersion: _Optional[str] = ..., encryptedDeviceToken: _Optional[bytes] = ..., username: _Optional[str] = ..., encryptedLoginToken: _Optional[bytes] = ...) -> None: ... class PasskeyAuthenticationResponse(_message.Message): - __slots__ = ["pkRequestOptions", "challengeToken", "encryptedLoginToken"] + __slots__ = ("pkRequestOptions", "challengeToken", "encryptedLoginToken") PKREQUESTOPTIONS_FIELD_NUMBER: _ClassVar[int] CHALLENGETOKEN_FIELD_NUMBER: _ClassVar[int] ENCRYPTEDLOGINTOKEN_FIELD_NUMBER: _ClassVar[int] @@ -2214,7 +2275,7 @@ class PasskeyAuthenticationResponse(_message.Message): def __init__(self, pkRequestOptions: _Optional[str] = ..., challengeToken: _Optional[bytes] = ..., encryptedLoginToken: _Optional[bytes] = ...) -> None: ... class PasskeyValidationRequest(_message.Message): - __slots__ = ["challengeToken", "assertionResponse", "passkeyPurpose", "encryptedLoginToken"] + __slots__ = ("challengeToken", "assertionResponse", "passkeyPurpose", "encryptedLoginToken") CHALLENGETOKEN_FIELD_NUMBER: _ClassVar[int] ASSERTIONRESPONSE_FIELD_NUMBER: _ClassVar[int] PASSKEYPURPOSE_FIELD_NUMBER: _ClassVar[int] @@ -2226,15 +2287,15 @@ class PasskeyValidationRequest(_message.Message): def __init__(self, challengeToken: _Optional[bytes] = ..., assertionResponse: _Optional[bytes] = ..., passkeyPurpose: _Optional[_Union[PasskeyPurpose, str]] = ..., encryptedLoginToken: _Optional[bytes] = ...) -> None: ... class PasskeyValidationResponse(_message.Message): - __slots__ = ["isValid", "encryptedLoginToken"] + __slots__ = ("isValid", "encryptedLoginToken") ISVALID_FIELD_NUMBER: _ClassVar[int] ENCRYPTEDLOGINTOKEN_FIELD_NUMBER: _ClassVar[int] isValid: bool encryptedLoginToken: bytes - def __init__(self, isValid: bool = ..., encryptedLoginToken: _Optional[bytes] = ...) -> None: ... + def __init__(self, isValid: _Optional[bool] = ..., encryptedLoginToken: _Optional[bytes] = ...) -> None: ... class UpdatePasskeyRequest(_message.Message): - __slots__ = ["userId", "credentialId", "friendlyName"] + __slots__ = ("userId", "credentialId", "friendlyName") USERID_FIELD_NUMBER: _ClassVar[int] CREDENTIALID_FIELD_NUMBER: _ClassVar[int] FRIENDLYNAME_FIELD_NUMBER: _ClassVar[int] @@ -2244,13 +2305,13 @@ class UpdatePasskeyRequest(_message.Message): def __init__(self, userId: _Optional[int] = ..., credentialId: _Optional[bytes] = ..., friendlyName: _Optional[str] = ...) -> None: ... class PasskeyListRequest(_message.Message): - __slots__ = ["includeDisabled"] + __slots__ = ("includeDisabled",) INCLUDEDISABLED_FIELD_NUMBER: _ClassVar[int] includeDisabled: bool - def __init__(self, includeDisabled: bool = ...) -> None: ... + def __init__(self, includeDisabled: _Optional[bool] = ...) -> None: ... class PasskeyInfo(_message.Message): - __slots__ = ["userId", "credentialId", "friendlyName", "AAGUID", "createdAtMillis", "lastUsedMillis", "disabledAtMillis"] + __slots__ = ("userId", "credentialId", "friendlyName", "AAGUID", "createdAtMillis", "lastUsedMillis", "disabledAtMillis") USERID_FIELD_NUMBER: _ClassVar[int] CREDENTIALID_FIELD_NUMBER: _ClassVar[int] FRIENDLYNAME_FIELD_NUMBER: _ClassVar[int] @@ -2268,7 +2329,27 @@ class PasskeyInfo(_message.Message): def __init__(self, userId: _Optional[int] = ..., credentialId: _Optional[bytes] = ..., friendlyName: _Optional[str] = ..., AAGUID: _Optional[str] = ..., createdAtMillis: _Optional[int] = ..., lastUsedMillis: _Optional[int] = ..., disabledAtMillis: _Optional[int] = ...) -> None: ... class PasskeyListResponse(_message.Message): - __slots__ = ["passkeyInfo"] + __slots__ = ("passkeyInfo",) PASSKEYINFO_FIELD_NUMBER: _ClassVar[int] passkeyInfo: _containers.RepeatedCompositeFieldContainer[PasskeyInfo] def __init__(self, passkeyInfo: _Optional[_Iterable[_Union[PasskeyInfo, _Mapping]]] = ...) -> None: ... + +class TranslationInfo(_message.Message): + __slots__ = ("translationKey", "translationValue") + TRANSLATIONKEY_FIELD_NUMBER: _ClassVar[int] + TRANSLATIONVALUE_FIELD_NUMBER: _ClassVar[int] + translationKey: str + translationValue: str + def __init__(self, translationKey: _Optional[str] = ..., translationValue: _Optional[str] = ...) -> None: ... + +class TranslationRequest(_message.Message): + __slots__ = ("translationKey",) + TRANSLATIONKEY_FIELD_NUMBER: _ClassVar[int] + translationKey: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, translationKey: _Optional[_Iterable[str]] = ...) -> None: ... + +class TranslationResponse(_message.Message): + __slots__ = ("translationInfo",) + TRANSLATIONINFO_FIELD_NUMBER: _ClassVar[int] + translationInfo: _containers.RepeatedCompositeFieldContainer[TranslationInfo] + def __init__(self, translationInfo: _Optional[_Iterable[_Union[TranslationInfo, _Mapping]]] = ...) -> None: ... diff --git a/keepercommander/qrc/README.md b/keepercommander/qrc/README.md new file mode 100644 index 000000000..41faa339f --- /dev/null +++ b/keepercommander/qrc/README.md @@ -0,0 +1,102 @@ +# QRC (Quantum Resistant Cryptography) + +Hybrid post-quantum encryption for Keeper Commander using **ECDH-P256** + **ML-KEM-1024** to protect against future quantum computing threats. + +## Why QRC? + +Quantum computers threaten current encryption: +- **Shor's Algorithm**: Can break RSA and ECC in polynomial time +- **Harvest Now, Decrypt Later**: Adversaries may store encrypted data today to decrypt when quantum computers mature + +QRC provides **defense-in-depth** by combining classical and post-quantum cryptography, ensuring data remains secure even if one algorithm is compromised. + +## How It Works + +### Hybrid Key Exchange + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ QRC Hybrid Encryption │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ Client Server │ +│ │ │ │ +│ │──── ECDH (P-256) ──────────────────►│ │ +│ │ ephemeral EC key │ │ +│ │ │ │ +│ │──── ML-KEM-1024 ───────────────────►│ │ +│ │ encapsulated secret │ │ +│ │ │ │ +│ ├─────────────────────────────────────┤ │ +│ │ HKDF-SHA256(EC_secret ║ KEM_secret)│ │ +│ │ ↓ │ │ +│ │ AES-256 Key │ │ +│ ├─────────────────────────────────────┤ │ +│ │ │ │ +│ │──── AES-GCM encrypted payload ─────►│ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +1. **ECDH-P256**: Client generates ephemeral EC keypair, exchanges with server's static EC public key +2. **ML-KEM-1024**: Client encapsulates a shared secret using server's ML-KEM public key (NIST FIPS 203) +3. **HKDF**: Both secrets are concatenated and derived into a single AES-256 key +4. **AES-GCM**: Transmission key is encrypted with the derived key + +## Server Support + +| Server | QRC Status | Key ID | +|--------|------------|--------| +| `keepersecurity.com` | Enabled | 136 | +| `qa.keepersecurity.com` | Enabled | 107 | +| `staging.keepersecurity.com` | Enabled | 124 | +| `dev.keepersecurity.com` | EC Only | — | +| GovCloud | ⏳ Pending | 148/160 | +| IL5 | ⏳ Pending | 172/186 | + +## Fallback Behavior + +QRC gracefully falls back to EC-only encryption when: + +| Trigger | Behavior | +|---------|----------| +| Python < 3.11 | Skip QRC, use EC | +| `keeper-mlkem` not installed | Skip QRC, use EC | +| Server returns key mismatch | Disable QRC for session, retry with EC | +| ML-KEM encapsulation error | Disable QRC for session, retry with EC | +| Server HTTP 400/500 during QRC | Disable QRC for session, retry with EC | + +All fallbacks are logged and transparent—connections continue uninterrupted. + +## Requirements + +- **Python 3.11+** (required for ML-KEM C extension) +- **keeper-mlkem** package ([PyPI](https://pypi.org/project/keeper-mlkem/)) + +The `keeper-mlkem` package provides NIST FIPS 203 ML-KEM implementation with optimized C extensions for performance. It's installed automatically as a Commander dependency. + +## Implementation + +``` +qrc/ +├── qrc_crypto.py # Hybrid encryption: ECDH + ML-KEM + HKDF +└── README.md # This file + +External dependency: +└── keeper-mlkem # ML-KEM-1024 implementation (PyPI package) +``` + +## Security Properties + +| Property | Protection | +|----------|------------| +| **Quantum Resistance** | ML-KEM-1024 protects against Shor's algorithm | +| **Hybrid Defense** | If ML-KEM or ECDH is broken, the other still protects | +| **Forward Secrecy** | Ephemeral EC keys ensure past sessions stay secure | +| **Constant-Time** | C extension avoids timing side-channels | + +## References + +- [NIST FIPS 203](https://csrc.nist.gov/pubs/fips/203/final) - ML-KEM Standard +- [RFC 9180](https://datatracker.ietf.org/doc/html/rfc9180) - Hybrid Public Key Encryption (HPKE) +- [keeper-mlkem](https://pypi.org/project/keeper-mlkem/) - ML-KEM Python package diff --git a/keepercommander/qrc/__init__.py b/keepercommander/qrc/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/keepercommander/qrc/qrc_crypto.py b/keepercommander/qrc/qrc_crypto.py new file mode 100644 index 000000000..b9a76f177 --- /dev/null +++ b/keepercommander/qrc/qrc_crypto.py @@ -0,0 +1,83 @@ +# _ __ +# | |/ /___ ___ _ __ ___ _ _ ® +# | ' dict: + try: + ec_shared_secret = client_ec_private_key.exchange(ec.ECDH(), server_ec_public_key) + logger.debug(f"ECDH completed: {len(ec_shared_secret)} byte shared secret") + + mlkem_shared_secret, mlkem_encapsulation = _mlkem_encapsulation(server_mlkem_public_key) + logger.debug(f"ML-KEM-1024 completed: {len(mlkem_shared_secret)} byte secret, {len(mlkem_encapsulation)} byte encapsulation") + + client_ec_public_key_bytes = crypto.unload_ec_public_key(client_ec_private_key.public_key()) + server_ec_public_key_bytes = crypto.unload_ec_public_key(server_ec_public_key) + aes_key = _combine_secrets_hkdf(ec_shared_secret, mlkem_shared_secret, server_ec_public_key_bytes, client_ec_public_key_bytes, mlkem_encapsulation) + logger.debug(f"HKDF completed: derived {len(aes_key)} byte AES key") + + encrypted_data = crypto.encrypt_aes_v2(transmission_key, aes_key) + logger.debug(f"AES-GCM completed: {len(encrypted_data)} byte ciphertext") + + return { + 'client_ec_public_key': client_ec_public_key_bytes, + 'ml_kem_encapsulated_key': mlkem_encapsulation, + 'data': encrypted_data, + 'msg_version': QRC_MESSAGE_VERSION + } + except Exception as e: + logger.error(f"QRC encryption failed: {e}") + raise + +def _mlkem_encapsulation(server_mlkem_public_key: bytes) -> Tuple[bytes, bytes]: + """Encapsulate using ML-KEM-1024. Returns: (shared_secret, ciphertext)""" + try: + from mlkem import MLKEM_1024_PARAMETERS, ML_KEM + if len(server_mlkem_public_key) != MLKEM_1024_KEY_SIZE: + raise ValueError(f"Invalid ML-KEM-1024 key size: {len(server_mlkem_public_key)} bytes") + ml_kem = ML_KEM(MLKEM_1024_PARAMETERS) + return ml_kem.encaps(server_mlkem_public_key) + except ImportError as e: + raise RuntimeError(f"ML-KEM implementation not available: {e}") + except Exception as e: + raise RuntimeError(f"ML-KEM encapsulation error: {e}") + +def _combine_secrets_hkdf(ec_secret: bytes, mlkem_secret: bytes, server_ec_pub: bytes, client_ec_pub: bytes, mlkem_encapsulation: bytes) -> bytes: + digest = Hash(SHA256(), backend=crypto._CRYPTO_BACKEND) + digest.update(mlkem_encapsulation) + mlkem_ciphertext_hash = digest.finalize() + + context_info = ( + QRC_CIPHER_SUITE.encode('utf-8') + + server_ec_pub + + client_ec_pub + + mlkem_ciphertext_hash + + QRC_MESSAGE_VERSION.to_bytes(1, 'big') + ) + hkdf = HKDF( + algorithm=SHA256(), + length=32, + salt=b'\x00' * 32, # 32-byte zero salt to match server implementation + info=context_info, + backend=crypto._CRYPTO_BACKEND + ) + return hkdf.derive(ec_secret + mlkem_secret) \ No newline at end of file diff --git a/keepercommander/rest_api.py b/keepercommander/rest_api.py index 8fa46eaf9..3071e6b15 100644 --- a/keepercommander/rest_api.py +++ b/keepercommander/rest_api.py @@ -15,6 +15,7 @@ import logging import ssl import time +import sys from typing import Union, Dict, Optional @@ -106,8 +107,18 @@ 'BDXyZZnrl0tc2jdC5I61JjwkjK2kr7uet9tZjt8StTiJTAQQmnVOYBgbtP08PWDbecxnHghx3kJ8QXq1XE68y8c')), 17: crypto.load_ec_public_key(utils.base64_url_decode( - 'BFX68cb97m9_sweGdOVavFM3j5ot6gveg6xT4BtGahfGhKib-zdZyO9pwvv1cBda9ahkSzo1BQ4NVXp9qRyqVGU')), -} # type: Dict[int, Union[rsa.RSAPublicKey, ec.EllipticCurvePublicKey]] + 'BFX68cb97m9_sweGdOVavFM3j5ot6gveg6xT4BtGahfGhKib-zdZyO9pwvv1cBda9ahkSzo1BQ4NVXp9qRyqVGU')), + + # ML-KEM-1024 keys (base64-encoded PEM format) + # QA (key ID 107) + 107: utils.base64_url_decode('rsSl4OfJIffO0Fxp6oBgGqJtniM8eyhi5lwlOiVZnwGrn_qnTch5fXbJwpAbnvoIa6VS00MeNShBvDo6bNIR2RRuq4lkgHUXNfap79l8JDi6xllfVLKRn5psVrGqXkybxjJH9UNQWJKr5TurXRnG9Wll0xXCC6ppHNszZ3e7D_xt5kFO2NS5PVl83uNp-Qp7iRAzcEtizvB55pkrAbyGkAALlCqsOSMPWXI544ult8EVCgU1CRk8vMsNSmNG8mO3FcCg0rmA7ljNdSQPQjQ231NJqDeRdlUAZclK8gks3WKF0CIsbVmbTZICFesd42Cw9CbHusZUjKoyVIDPVowFmHg72kcmPovBwMuesGg3coAj_NoFAlSyiXsvgPNMDciND-Z7OiRpK-eG6RGyUvhcdlw6k5FzjfNab5Zix9hHkoZhkyG-h9exzTxxgdeu6AMLEKl2QHtXpqle4zelOSiOtkgC8BRyPfjD5PBwrJsduwoXf0KljDXP0ceAmPbMaSMabeMj3CJY8OuHZOIxzQF2J8xEnAC9wuOD2ElNcVyOQ6lyFCueXfofHce_gMAIZpABZVZDxsB2jLBW1VF1yksRb1MAjPYBHFV7YJhHyiMI34VRbPo1o3lq9vk-4rwPwYUWDWQePDUkiYuxQTs36WwXVAtY-XOF9HMnkRjK25sqV_uwzbAIHAyf8SomVHUX7AtjyMYu52d33kkHhiA7ofqXjwBK69odR8Ckzam-egKkuUWlkPJeDXyR_AhpYhAqbzqgQHw7QhpEayBIS9xRcCixONLGkKtn8xIs-6HKhPCjTEDEN_IjVxM-HEY_rHpY_wSWibtNPEPAgAEtZSQIWyjJyPMRYTEgJZEBUUk1hiuNi_FFiNM71wkJldxngipdWYd9KFt5shExO4CAzxtd3MOTrHQEBuXNz6GL50diBJuioRR5QhgCddNejAcet8Ul0duAXuCyI2QDZnCQf0RO97Z9alwYllbA67EZMScBq6s81lAqqXWPJNNWQbQEVzidmdW28ZIbaOaPLOUuIqYJv_J60XuLLcYP4hrMBANqtwAb_HNlXGaW06vJT7wasEMzhDKVNSpFs4VYSMk1tIR6wjspGYJRGGE7hpiaDCPKOQRe24Y2HPJEBmNGWmMjREKpZYKg2nsV9nWvDVShKol1JpZM2kI9AEQPIIo9ZiHBleh_OnynWcCVAdl9ZsOkpOtMFPZap8gooqqMt2FO-gofSpGkFkNs41a5gxGeqRETiBsoa-ZNyqq2wJm77qJqSvC54oGOjFE_mfJBH0I4Fahy6Kkm-zKrJEAuehaVTXVHamgJeSkfLemt3WVlgPwZjNJMh5FsM8W8rclE78yI2WYpY9i0RhOJkNViBGcn5EovgERJPEsLO7SBviJwetmUQyUVbOAyX4ag_cBJ2fmUkwVQuhV6PdsnTqFfV2dM2ptbQgcopypvHyggh1vFooMYDIUCZ7qfBZYx7ZclV0woecJGjiK9mKgTlumnHtkx1zCETtNubQaDANkpAlZkKuS42WczUDEzpye8OpeYgaF6NIolqNFs_plgZVhg9_ZBEIZcnNGd1sgbg3it_Rk7EZXJDHB_6cWoS8VW1Wcq72FBpFDOWDiiCapw0QknC9pfB_gV7zm6nJpzFRcInIqGuNNJdMcCbmPAV0cKBxGR7PfKS4KCLoTCGctS3fKpE-Q-ZJBNwWRwB-cogesufQdr1oKJ3xXJtzGcoMK2n9OSAAStt3A_V-YvkVVzb0Z32HMG79NgAAeCG9xXkidVLIpzLuhg4AQRVzpXf8gry6qBZUppbPCriSSBr-vDlJIHh6gu7-y1cLi2zHinriOoElMK3fWI1JO7HUItxLCHrkzJt4R2N9nOD8gDqIK16-OG9SssQNlex5e0MVkbAA0BR1mn7MSTBvevw2VcsTJoIxXEIjS87fRvuadwrKqw3nKFOPSCZzgC7XFtzxIpazSCGWi_5RSDWnSXGLJvNcKhcvgfpgk4jSoEdDIJ30FUDFzHkusUnfVAbTnCIWCYDKWyk7G8bsRcVZwNxwKJ7G2Mz4a3yrkYuxaFmGJX5EdCEM4EWceF5rVW3ZQuvzo'), + + # Staging (key ID 124) + 124: utils.base64_url_decode('oOWRIAhfmuFV0WiH3QxnN1O81VqlUdPOXJqxIXpKFKFxZoJfKuGSPRZDzbhFYuwQccNswyJlvMZ0C5GuPfwoGWyPt2FOOKcoM8rASDpr1liu5nRmiBLFKTxMG6qccITD4XZyx6kb8KZZNnyu1euSQGE7dVl-DIM1ySi5MKNRJgWr3GpbhJA0oJxntxp_WWldAnqEq2tukWoKici34YEIhnQeXnBtekVAM0U7j7FzHEa5BaKdbIpP74VAS7ScsSMcRoloQWSsg5eIOPcAT7ZcycUhtbii7om6NQESEJxhUdjMWTTFiUGEoRBgtJYY59wkx0IvQbqUT8qSk0Ik3fasfjIRQehWeKk670KfFBswHRqgrNqY37wCUPOuDTKj4mnOq5gkQSiu55GvYzpUV4m4YJMxRPgp-RzPYwkbvKtZIKgMsLOeR0aGCTApdUAn3FoxQNxgLUqQW-aMNyUtHIsw9ZwXxnQAmEkif5UNiGDDfgScmkhKHKtC00FtRwNFRmaZuLUwqrly4DKnzfwJOJjPADCDSpoelwxQI7JE1yMZ9_UWxwSAk5AgFANXCfubrsl7J7ihFaywx-UhWGUX24xByXHAsGW_hPAROPV-r9lBYktaFkBfZmojijRCO6d0oEVzofJpkQMjZmVEzyZoiFw1mJMXppoSWVB_lEK_LpisWaUmT1JztoANlLZcb5fBktpihMNA7NHB_ioKdDWGNxa0miutZqhWDPOs87gOv8Nu70RdFxoUGnCMgAQwrHErebVdZKCGOxd8fYOrGeoH0kWC9mA7-8GKQqdsmOUtVcyQToCrsPkXBvjKhvqwfMirsjk70uiZ6QABdBy7j9svCyiyjaVHJYiSfRJDqNB47PyVskhH3WsnPqhfKcQroTI6pTnCYdJeJHgqKCp2ICeWZYKbRbeKQOI__DmYp2C1AB1PB7nFD1AVuvnGnOeLaRaE72h1dNyVQIFyzIOw8WY24-B_g1JXUmyaiQU4zvooGJlCrmm6n_MN36u0R2cwWwp9FjQ8bWMYCtqbSXtwtqQrM0PIKHxteUqqS6kWmjmy7_hPUwYbYiEszGKYI3fFD6HLutim8PISh6yDlflwzhaZO4KjewYc0TdKpsetmPF9AsBTlBciPylO66k9iEnCwIBgHSqtDraUUNVRbNaUz_VSixV_uEI8ZvoBzhExWwvH1hxC0yRdKskZ9GdiUzle-iAR4YBQ0oiXP8uDFCjF7qg__kHAOPtWBjKjN3tXwCmwJntwxURxbNAFqaGScqJSwGkQlGHOW_FLlRkZOgN_ztpDyKx4Trq4SgOd-KFiAee0GgpG9Qoq0_fHYJi6XsKdLiXMd5ZTUAWokCk4VoZeJYNY75Z4bkZFEgnCc5OjFvJmKwNzWvu5_ed5QoiLxeAWdpsyoGTKxruJR9VHCqMWkZieTnt-tQGNXqcy2Zqc2nBz8muk1gjNl6t2cZOvnACaW4nNxhYlTKHN49zDLPYmVzQU7YAEdLU-tIxv_IGOG9ulKhRdoYCrNgOInQVp7zJUSVIVDoK9jmxxrutMyyl0xbesB8lYeAO7f5DCuOF5Skq4KDHMY2GAo2zLIHJi4lR7mTirKgClyBUUBLZJAQSeArinnyRGy2Y9aBucHbdqvnqqjBgFXnFDZLaseDu0bMAGsVNLqHMUfaCq5nhHUDIe-pBaMuGmq9pMbMp1kNQj8ReJVEqBLAi2ZcR1QeK8zuyw98JF4cLAvZJ93PNZmdO87UmpBUJL72SXmKUJlzZtF2lma1QajwYCOTlyQcNP3ckd3Kit0VifCPVxJaqjxCDLnhiaQCALLFZnA7UuH8FEWeJZdpyxYEOqzOwA1Qq7JjYYdWJ-oUSfDGl6dgPFpIkVt2h37FFDz4hOCzM-SIgqlEqoA6rGDCAWrvSviveslAVUR2iDilKylpKiU_K2j2hKFnZ7B0Qv-rF-uUEHG-ZYzoOmkImArdeav1i7U-S4DZSuENJnO4NiwKlyxcAfrcd_GYIGolWa5pDPIctVwjqbUthGxzukiGku76sufqu2fRdPauLLuMdTnf6vXN0TRo-RPbf8GrijSi9UN-52OU7E7C7qUJLExlg'), + + # Prod (key ID 136) + 136: utils.base64_url_decode('F9FKL1aEqbMMsaSH-Ig3EOa1rJUdL1vPAXE3wcFSpbw8yUgI3NWbScM_S3ho3EQVxduSjTBWfpcbsVtkx6c5QauUYVx3rtx5bggMr-V_KSTC5RgYpkIZwHSSoxoO-PVamOWpnGKbNAsVsmQWc8Wi8JMQHDFn7uw5pVMZWEq5uNJRLAKvqlVo4Ux1dTSIaQgsBfLNvYZO9qFpc7XClaU-NhfHecNm3hEHQgmlixxs0HbOQqmi90YrCZwS3mkjFgvANauTmhTFiuWbgoUb3EWhausazlQ3A5tmjyRRm8ISniVrCmOrbEy-92qe2zasEyzL4mpdWUNjzCQC6qrKc4KfyHaJhwdaqocYp1VmwEmSrmdv5vKpHoSGcAZECMOFQVENuuEXlcsG7kYEOnEn0llllgOTbZwNsrIpVjHAKGJIaOCjxOsc46dB1XozHQuZs_QjZRpKEPsJJjcN3YVwglaDuLB3XgditEJJ1okrWYgC4ehHqkKYaSSoT_BTh6e8jqesYpF5SOjGMtAS0piZG_zGXxgYuCaZUUptaKi2FdyftfgCJEtLF9nFrNI_GOosDcydBBW2Z0sRf1aUDjI3nJKvMNokITQ77nRHj8yjoeEhDAZ6etm-jTDCROHIePoojgOwpRiTJRxeARy9m9i2BWGZuoq93eVxzuMv9nbFT5Nkpxwo1YnK0qAhp6ArkLShXIMy7dkLQRUVtVqKgPl2lyVwqiWSazM_t2KmAyY9LYJ9xCIxVNJUCvNrZzELrIsJdRRq9Cd0KBhuEmxUwGDD01qNzVOclgwnyQDMmTNHtnS46icX1AlDwkq3V3a1xDhF14SMwVZLHkixjyowVGKFoEswd6Ux2GAa5OV-8JODWVGxhIgtVspZklautfGMlXRl9sh8UiC63dyorsPHp8QrK7uBp2ZAhkmQDFIrrQydUhYkgUtEA3A9xhodaOa9XyZ6GVXFEDB1Q3iti2BkoaBZcLId8MSgjahOUzq4YYMT0mwP-orEkgujv2BhSmsuFkCuumksSxUOzpia96lsfpbN--utsiIhmqgm9rM9NAcj5mMbCwcuuYBbaPhW8QjAhYt_2uC53cEK4BUxgwUN-yCfMqGZw7WlIlemuUR5zMAksTyWPsq8esdfHnW_Q-Wh8shTOJQRDzkvo4KVBjIKoPJPOwKmo_Uv00gIiwB59imnQhEm7MYyW5sudNkDlwRjs_ehtYVTgiVyiBRKH3rKVmJQXSAbkVVuadyMZLQy6SkWvbmpekUzwgCEdYZjs3Mg6vXBiIGZ6Ym-K7Zsr7CzbmCWrcZblifFrOEIEagV7hGbyeFmIpZ-tVwVEjgpTPLAbqxfbtyHNuuK2RxN5NMLw7VxzJJTOTwvddk9OTNJk2Q5bMZJd-g258aOU-qmDaBIyYaPuHpS_3kjg0s8ZXG0w8MOZGN2-eaq8bWR3TbFd-ujsjR2sSkYVeYGcSJ6XvtF7UtXL7CfE2ujRMd8k_lW6tbDZ4uA17Bv2XVmo1cWENYiy2V5CXJk4Um9qRathlxRtjsifPaskYx26TC2yFlYNcJ-7CwKwXRvg4UWMSY2ngN53RUJigoQ82li5jsf3XtQwBIt58Qy6xlTzDST1scfTOuyc_AwiLgKECOCYxSTimiq4qOvszBJp_AAHGNHdXsgoxiTlkNDL6QIL-pIDcu374okz6m5e4t28wwWiDWPhWu1wAFmp0tsK8M-d-Z4UVY8FmYHrYgYNnA7i1jHUiwYijhGlyV3KUiWhqOxiGfN4LYRcJKi0vmlUox977F3yqR9BMMayIduHzirsCS6SqCcW3dZskUbk9jKLLBr8_IdmuaoZFNGnmUAQucOsHca6qpM3np-kVkI_Dl8ohAGcOOlDWhTr-CGaXcd3xJ63QQGMLYRFJirkUMP26qu6hqbhkuZXiO712laX4ybdUdmxde2GkmDnLyzhYOQSSUiMmDDYgmjbUc3GCcVrCRHmsbJTykq6neQB_Kj1lOFlAate4RDU_LGXyWxpImuQpHCqMazJpWCo-GauACBSBhFDucovzKbXjeds6Zpq3lBK_T9EaPvGASD6FO23qv-HxUEyHgnW-VkHhVirk4') +} # type: Dict[int, Union[rsa.RSAPublicKey, ec.EllipticCurvePublicKey, Dict[str, Union[ec.EllipticCurvePublicKey, bytes]]]] def encrypt_with_keeper_key(context, data: bytes) -> bytes: @@ -133,14 +144,43 @@ def execute_rest(context, endpoint, payload): run_request = False api_request = proto.ApiRequest() - server_public_key = SERVER_PUBLIC_KEYS[context.server_key_id] - if isinstance(server_public_key, rsa.RSAPublicKey): - api_request.encryptedTransmissionKey = crypto.encrypt_rsa(context.transmission_key, server_public_key) - elif isinstance(server_public_key, ec.EllipticCurvePublicKey): - api_request.encryptedTransmissionKey = crypto.encrypt_ec(context.transmission_key, server_public_key) - else: - raise ValueError('Invalid server public key') - api_request.publicKeyId = context.server_key_id + qrc_success = False + + # Try QRC encryption if qrc_key_id is available + if context.qrc_key_id and context.qrc_key_id >= 100: + qrc_mlkem_key = SERVER_PUBLIC_KEYS.get(context.qrc_key_id) + if qrc_mlkem_key and isinstance(qrc_mlkem_key, bytes): + try: + logging.debug(f"Using QRC hybrid encryption (ML-KEM key ID: {context.qrc_key_id}, EC key ID: {context.server_key_id})") + + if not context.client_ec_private_key: + context.client_ec_private_key = crypto.generate_ec_key()[0] + + from .qrc.qrc_crypto import encrypt_qrc + ec_public_key = SERVER_PUBLIC_KEYS[context.server_key_id] + qrc_message = encrypt_qrc(context.transmission_key, context.client_ec_private_key, ec_public_key, qrc_mlkem_key) + + api_request.qrcMessageKey.clientEcPublicKey = qrc_message['client_ec_public_key'] + api_request.qrcMessageKey.mlKemEncapsulatedKey = qrc_message['ml_kem_encapsulated_key'] + api_request.qrcMessageKey.data = qrc_message['data'] + api_request.qrcMessageKey.msgVersion = qrc_message['msg_version'] + api_request.qrcMessageKey.ecKeyId = context.server_key_id + + qrc_success = True + except Exception as e: + logging.warning(f"QRC encryption failed ({e}), falling back to EC encryption") + + # Fallback to EC encryption if QRC not available or failed + if not qrc_success: + server_public_key = SERVER_PUBLIC_KEYS[context.server_key_id] + if isinstance(server_public_key, rsa.RSAPublicKey): + api_request.encryptedTransmissionKey = crypto.encrypt_rsa(context.transmission_key, server_public_key) + elif isinstance(server_public_key, ec.EllipticCurvePublicKey): + api_request.encryptedTransmissionKey = crypto.encrypt_ec(context.transmission_key, server_public_key) + else: + raise ValueError('Invalid server public key') + + api_request.publicKeyId = context.qrc_key_id if qrc_success else context.server_key_id api_request.locale = context.locale or 'en_US' api_request.encryptedPayload = crypto.encrypt_aes_v2(payload.SerializeToString(), context.transmission_key) @@ -184,7 +224,15 @@ def execute_rest(context, endpoint, payload): if rs.status_code == 401: if failure.get('error') == 'key': server_key_id = failure['key_id'] - if server_key_id != context.server_key_id: + if 'qrc_ec_key_id' in failure: + qrc_ec_key_id = failure['qrc_ec_key_id'] + if context.server_key_id != qrc_ec_key_id: + # EC key mismatch: update and retry with QRC + logging.debug(f"QRC EC key mismatch: updating from {context.server_key_id} to {qrc_ec_key_id}") + context.server_key_id = qrc_ec_key_id + run_request = True + continue + elif server_key_id != context.server_key_id: context.server_key_id = server_key_id run_request = True continue @@ -194,6 +242,11 @@ def execute_rest(context, endpoint, payload): time.sleep(10) run_request = True continue + elif rs.status_code in (400, 500) and context.qrc_key_id is not None: + logging.warning(f"QRC request failed with {rs.status_code} error, falling back to EC encryption") + context.disable_qrc() + run_request = True + continue return failure else: if logging.getLogger().level <= logging.DEBUG: diff --git a/requirements.txt b/requirements.txt index 6535515c8..dc4fd7fc8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -23,4 +23,5 @@ cbor2; sys_platform == "darwin" and python_version>='3.10' pyobjc-framework-LocalAuthentication; sys_platform == "darwin" and python_version>='3.10' winrt-runtime; sys_platform == "win32" winrt-Windows.Foundation; sys_platform == "win32" -winrt-Windows.Security.Credentials.UI; sys_platform == "win32" \ No newline at end of file +winrt-Windows.Security.Credentials.UI; sys_platform == "win32" +keeper-mlkem; python_version>='3.11' \ No newline at end of file diff --git a/setup.cfg b/setup.cfg index a5c2529ae..3a673a360 100644 --- a/setup.cfg +++ b/setup.cfg @@ -51,6 +51,7 @@ install_requires = winrt-runtime; sys_platform == "win32" and python_version>='3.10' winrt-Windows.Foundation; sys_platform == "win32" and python_version>='3.10' winrt-Windows.Security.Credentials.UI; sys_platform == "win32" and python_version>='3.10' + keeper-mlkem; python_version>='3.11' [options.package_data] keepercommander = resources/*, resources/email_templates/* From 8653fdfd01a84910e7e615a76390a38a624f70d5 Mon Sep 17 00:00:00 2001 From: amangalampalli-ks Date: Thu, 18 Dec 2025 16:45:21 +0530 Subject: [PATCH 06/10] Remove comments --- keepercommander/params.py | 10 ---------- keepercommander/rest_api.py | 4 ---- 2 files changed, 14 deletions(-) diff --git a/keepercommander/params.py b/keepercommander/params.py index 3a988aa64..1eedcc9e2 100644 --- a/keepercommander/params.py +++ b/keepercommander/params.py @@ -67,7 +67,6 @@ def __set_server_base(self, value): # type: (str) -> None p = urlparse(value) new_server_base = urlunparse((p.scheme or 'https', p.netloc, '/api/rest/', None, None, None)) - # Reset QRC key ID if server changed if hasattr(self, '_RestApiContext__server_base') and self.__server_base != new_server_base: self.__qrc_key_id = -1 @@ -98,29 +97,20 @@ def _determine_qrc_key(self): try: hostname = urlparse(self.__server_base).netloc.lower().split(':')[0] - # Hostname to QRC key ID mapping qrc_key_map = { 'qa.keepersecurity.com': 107, 'staging.keepersecurity.com': 124, 'keepersecurity.com': 136, } - # Check exact match first qrc_key_id = qrc_key_map.get(hostname) - - # Check govcloud pattern if no exact match if qrc_key_id is None and 'govcloud.keepersecurity.us' in hostname: qrc_key_id = 148 if hostname.startswith('dev.') else 160 - - # Check IL5 pattern if qrc_key_id is None and 'il5.keepersecurity.us' in hostname: qrc_key_id = 172 if hostname.startswith('dev.') else 186 - - # If still no match, QRC not available if qrc_key_id is None: self.__qrc_key_id = None return - from .rest_api import SERVER_PUBLIC_KEYS if qrc_key_id in SERVER_PUBLIC_KEYS: self.__qrc_key_id = qrc_key_id diff --git a/keepercommander/rest_api.py b/keepercommander/rest_api.py index 3071e6b15..5754169b4 100644 --- a/keepercommander/rest_api.py +++ b/keepercommander/rest_api.py @@ -109,14 +109,10 @@ 17: crypto.load_ec_public_key(utils.base64_url_decode( 'BFX68cb97m9_sweGdOVavFM3j5ot6gveg6xT4BtGahfGhKib-zdZyO9pwvv1cBda9ahkSzo1BQ4NVXp9qRyqVGU')), - # ML-KEM-1024 keys (base64-encoded PEM format) - # QA (key ID 107) 107: utils.base64_url_decode('rsSl4OfJIffO0Fxp6oBgGqJtniM8eyhi5lwlOiVZnwGrn_qnTch5fXbJwpAbnvoIa6VS00MeNShBvDo6bNIR2RRuq4lkgHUXNfap79l8JDi6xllfVLKRn5psVrGqXkybxjJH9UNQWJKr5TurXRnG9Wll0xXCC6ppHNszZ3e7D_xt5kFO2NS5PVl83uNp-Qp7iRAzcEtizvB55pkrAbyGkAALlCqsOSMPWXI544ult8EVCgU1CRk8vMsNSmNG8mO3FcCg0rmA7ljNdSQPQjQ231NJqDeRdlUAZclK8gks3WKF0CIsbVmbTZICFesd42Cw9CbHusZUjKoyVIDPVowFmHg72kcmPovBwMuesGg3coAj_NoFAlSyiXsvgPNMDciND-Z7OiRpK-eG6RGyUvhcdlw6k5FzjfNab5Zix9hHkoZhkyG-h9exzTxxgdeu6AMLEKl2QHtXpqle4zelOSiOtkgC8BRyPfjD5PBwrJsduwoXf0KljDXP0ceAmPbMaSMabeMj3CJY8OuHZOIxzQF2J8xEnAC9wuOD2ElNcVyOQ6lyFCueXfofHce_gMAIZpABZVZDxsB2jLBW1VF1yksRb1MAjPYBHFV7YJhHyiMI34VRbPo1o3lq9vk-4rwPwYUWDWQePDUkiYuxQTs36WwXVAtY-XOF9HMnkRjK25sqV_uwzbAIHAyf8SomVHUX7AtjyMYu52d33kkHhiA7ofqXjwBK69odR8Ckzam-egKkuUWlkPJeDXyR_AhpYhAqbzqgQHw7QhpEayBIS9xRcCixONLGkKtn8xIs-6HKhPCjTEDEN_IjVxM-HEY_rHpY_wSWibtNPEPAgAEtZSQIWyjJyPMRYTEgJZEBUUk1hiuNi_FFiNM71wkJldxngipdWYd9KFt5shExO4CAzxtd3MOTrHQEBuXNz6GL50diBJuioRR5QhgCddNejAcet8Ul0duAXuCyI2QDZnCQf0RO97Z9alwYllbA67EZMScBq6s81lAqqXWPJNNWQbQEVzidmdW28ZIbaOaPLOUuIqYJv_J60XuLLcYP4hrMBANqtwAb_HNlXGaW06vJT7wasEMzhDKVNSpFs4VYSMk1tIR6wjspGYJRGGE7hpiaDCPKOQRe24Y2HPJEBmNGWmMjREKpZYKg2nsV9nWvDVShKol1JpZM2kI9AEQPIIo9ZiHBleh_OnynWcCVAdl9ZsOkpOtMFPZap8gooqqMt2FO-gofSpGkFkNs41a5gxGeqRETiBsoa-ZNyqq2wJm77qJqSvC54oGOjFE_mfJBH0I4Fahy6Kkm-zKrJEAuehaVTXVHamgJeSkfLemt3WVlgPwZjNJMh5FsM8W8rclE78yI2WYpY9i0RhOJkNViBGcn5EovgERJPEsLO7SBviJwetmUQyUVbOAyX4ag_cBJ2fmUkwVQuhV6PdsnTqFfV2dM2ptbQgcopypvHyggh1vFooMYDIUCZ7qfBZYx7ZclV0woecJGjiK9mKgTlumnHtkx1zCETtNubQaDANkpAlZkKuS42WczUDEzpye8OpeYgaF6NIolqNFs_plgZVhg9_ZBEIZcnNGd1sgbg3it_Rk7EZXJDHB_6cWoS8VW1Wcq72FBpFDOWDiiCapw0QknC9pfB_gV7zm6nJpzFRcInIqGuNNJdMcCbmPAV0cKBxGR7PfKS4KCLoTCGctS3fKpE-Q-ZJBNwWRwB-cogesufQdr1oKJ3xXJtzGcoMK2n9OSAAStt3A_V-YvkVVzb0Z32HMG79NgAAeCG9xXkidVLIpzLuhg4AQRVzpXf8gry6qBZUppbPCriSSBr-vDlJIHh6gu7-y1cLi2zHinriOoElMK3fWI1JO7HUItxLCHrkzJt4R2N9nOD8gDqIK16-OG9SssQNlex5e0MVkbAA0BR1mn7MSTBvevw2VcsTJoIxXEIjS87fRvuadwrKqw3nKFOPSCZzgC7XFtzxIpazSCGWi_5RSDWnSXGLJvNcKhcvgfpgk4jSoEdDIJ30FUDFzHkusUnfVAbTnCIWCYDKWyk7G8bsRcVZwNxwKJ7G2Mz4a3yrkYuxaFmGJX5EdCEM4EWceF5rVW3ZQuvzo'), - # Staging (key ID 124) 124: utils.base64_url_decode('oOWRIAhfmuFV0WiH3QxnN1O81VqlUdPOXJqxIXpKFKFxZoJfKuGSPRZDzbhFYuwQccNswyJlvMZ0C5GuPfwoGWyPt2FOOKcoM8rASDpr1liu5nRmiBLFKTxMG6qccITD4XZyx6kb8KZZNnyu1euSQGE7dVl-DIM1ySi5MKNRJgWr3GpbhJA0oJxntxp_WWldAnqEq2tukWoKici34YEIhnQeXnBtekVAM0U7j7FzHEa5BaKdbIpP74VAS7ScsSMcRoloQWSsg5eIOPcAT7ZcycUhtbii7om6NQESEJxhUdjMWTTFiUGEoRBgtJYY59wkx0IvQbqUT8qSk0Ik3fasfjIRQehWeKk670KfFBswHRqgrNqY37wCUPOuDTKj4mnOq5gkQSiu55GvYzpUV4m4YJMxRPgp-RzPYwkbvKtZIKgMsLOeR0aGCTApdUAn3FoxQNxgLUqQW-aMNyUtHIsw9ZwXxnQAmEkif5UNiGDDfgScmkhKHKtC00FtRwNFRmaZuLUwqrly4DKnzfwJOJjPADCDSpoelwxQI7JE1yMZ9_UWxwSAk5AgFANXCfubrsl7J7ihFaywx-UhWGUX24xByXHAsGW_hPAROPV-r9lBYktaFkBfZmojijRCO6d0oEVzofJpkQMjZmVEzyZoiFw1mJMXppoSWVB_lEK_LpisWaUmT1JztoANlLZcb5fBktpihMNA7NHB_ioKdDWGNxa0miutZqhWDPOs87gOv8Nu70RdFxoUGnCMgAQwrHErebVdZKCGOxd8fYOrGeoH0kWC9mA7-8GKQqdsmOUtVcyQToCrsPkXBvjKhvqwfMirsjk70uiZ6QABdBy7j9svCyiyjaVHJYiSfRJDqNB47PyVskhH3WsnPqhfKcQroTI6pTnCYdJeJHgqKCp2ICeWZYKbRbeKQOI__DmYp2C1AB1PB7nFD1AVuvnGnOeLaRaE72h1dNyVQIFyzIOw8WY24-B_g1JXUmyaiQU4zvooGJlCrmm6n_MN36u0R2cwWwp9FjQ8bWMYCtqbSXtwtqQrM0PIKHxteUqqS6kWmjmy7_hPUwYbYiEszGKYI3fFD6HLutim8PISh6yDlflwzhaZO4KjewYc0TdKpsetmPF9AsBTlBciPylO66k9iEnCwIBgHSqtDraUUNVRbNaUz_VSixV_uEI8ZvoBzhExWwvH1hxC0yRdKskZ9GdiUzle-iAR4YBQ0oiXP8uDFCjF7qg__kHAOPtWBjKjN3tXwCmwJntwxURxbNAFqaGScqJSwGkQlGHOW_FLlRkZOgN_ztpDyKx4Trq4SgOd-KFiAee0GgpG9Qoq0_fHYJi6XsKdLiXMd5ZTUAWokCk4VoZeJYNY75Z4bkZFEgnCc5OjFvJmKwNzWvu5_ed5QoiLxeAWdpsyoGTKxruJR9VHCqMWkZieTnt-tQGNXqcy2Zqc2nBz8muk1gjNl6t2cZOvnACaW4nNxhYlTKHN49zDLPYmVzQU7YAEdLU-tIxv_IGOG9ulKhRdoYCrNgOInQVp7zJUSVIVDoK9jmxxrutMyyl0xbesB8lYeAO7f5DCuOF5Skq4KDHMY2GAo2zLIHJi4lR7mTirKgClyBUUBLZJAQSeArinnyRGy2Y9aBucHbdqvnqqjBgFXnFDZLaseDu0bMAGsVNLqHMUfaCq5nhHUDIe-pBaMuGmq9pMbMp1kNQj8ReJVEqBLAi2ZcR1QeK8zuyw98JF4cLAvZJ93PNZmdO87UmpBUJL72SXmKUJlzZtF2lma1QajwYCOTlyQcNP3ckd3Kit0VifCPVxJaqjxCDLnhiaQCALLFZnA7UuH8FEWeJZdpyxYEOqzOwA1Qq7JjYYdWJ-oUSfDGl6dgPFpIkVt2h37FFDz4hOCzM-SIgqlEqoA6rGDCAWrvSviveslAVUR2iDilKylpKiU_K2j2hKFnZ7B0Qv-rF-uUEHG-ZYzoOmkImArdeav1i7U-S4DZSuENJnO4NiwKlyxcAfrcd_GYIGolWa5pDPIctVwjqbUthGxzukiGku76sufqu2fRdPauLLuMdTnf6vXN0TRo-RPbf8GrijSi9UN-52OU7E7C7qUJLExlg'), - # Prod (key ID 136) 136: utils.base64_url_decode('F9FKL1aEqbMMsaSH-Ig3EOa1rJUdL1vPAXE3wcFSpbw8yUgI3NWbScM_S3ho3EQVxduSjTBWfpcbsVtkx6c5QauUYVx3rtx5bggMr-V_KSTC5RgYpkIZwHSSoxoO-PVamOWpnGKbNAsVsmQWc8Wi8JMQHDFn7uw5pVMZWEq5uNJRLAKvqlVo4Ux1dTSIaQgsBfLNvYZO9qFpc7XClaU-NhfHecNm3hEHQgmlixxs0HbOQqmi90YrCZwS3mkjFgvANauTmhTFiuWbgoUb3EWhausazlQ3A5tmjyRRm8ISniVrCmOrbEy-92qe2zasEyzL4mpdWUNjzCQC6qrKc4KfyHaJhwdaqocYp1VmwEmSrmdv5vKpHoSGcAZECMOFQVENuuEXlcsG7kYEOnEn0llllgOTbZwNsrIpVjHAKGJIaOCjxOsc46dB1XozHQuZs_QjZRpKEPsJJjcN3YVwglaDuLB3XgditEJJ1okrWYgC4ehHqkKYaSSoT_BTh6e8jqesYpF5SOjGMtAS0piZG_zGXxgYuCaZUUptaKi2FdyftfgCJEtLF9nFrNI_GOosDcydBBW2Z0sRf1aUDjI3nJKvMNokITQ77nRHj8yjoeEhDAZ6etm-jTDCROHIePoojgOwpRiTJRxeARy9m9i2BWGZuoq93eVxzuMv9nbFT5Nkpxwo1YnK0qAhp6ArkLShXIMy7dkLQRUVtVqKgPl2lyVwqiWSazM_t2KmAyY9LYJ9xCIxVNJUCvNrZzELrIsJdRRq9Cd0KBhuEmxUwGDD01qNzVOclgwnyQDMmTNHtnS46icX1AlDwkq3V3a1xDhF14SMwVZLHkixjyowVGKFoEswd6Ux2GAa5OV-8JODWVGxhIgtVspZklautfGMlXRl9sh8UiC63dyorsPHp8QrK7uBp2ZAhkmQDFIrrQydUhYkgUtEA3A9xhodaOa9XyZ6GVXFEDB1Q3iti2BkoaBZcLId8MSgjahOUzq4YYMT0mwP-orEkgujv2BhSmsuFkCuumksSxUOzpia96lsfpbN--utsiIhmqgm9rM9NAcj5mMbCwcuuYBbaPhW8QjAhYt_2uC53cEK4BUxgwUN-yCfMqGZw7WlIlemuUR5zMAksTyWPsq8esdfHnW_Q-Wh8shTOJQRDzkvo4KVBjIKoPJPOwKmo_Uv00gIiwB59imnQhEm7MYyW5sudNkDlwRjs_ehtYVTgiVyiBRKH3rKVmJQXSAbkVVuadyMZLQy6SkWvbmpekUzwgCEdYZjs3Mg6vXBiIGZ6Ym-K7Zsr7CzbmCWrcZblifFrOEIEagV7hGbyeFmIpZ-tVwVEjgpTPLAbqxfbtyHNuuK2RxN5NMLw7VxzJJTOTwvddk9OTNJk2Q5bMZJd-g258aOU-qmDaBIyYaPuHpS_3kjg0s8ZXG0w8MOZGN2-eaq8bWR3TbFd-ujsjR2sSkYVeYGcSJ6XvtF7UtXL7CfE2ujRMd8k_lW6tbDZ4uA17Bv2XVmo1cWENYiy2V5CXJk4Um9qRathlxRtjsifPaskYx26TC2yFlYNcJ-7CwKwXRvg4UWMSY2ngN53RUJigoQ82li5jsf3XtQwBIt58Qy6xlTzDST1scfTOuyc_AwiLgKECOCYxSTimiq4qOvszBJp_AAHGNHdXsgoxiTlkNDL6QIL-pIDcu374okz6m5e4t28wwWiDWPhWu1wAFmp0tsK8M-d-Z4UVY8FmYHrYgYNnA7i1jHUiwYijhGlyV3KUiWhqOxiGfN4LYRcJKi0vmlUox977F3yqR9BMMayIduHzirsCS6SqCcW3dZskUbk9jKLLBr8_IdmuaoZFNGnmUAQucOsHca6qpM3np-kVkI_Dl8ohAGcOOlDWhTr-CGaXcd3xJ63QQGMLYRFJirkUMP26qu6hqbhkuZXiO712laX4ybdUdmxde2GkmDnLyzhYOQSSUiMmDDYgmjbUc3GCcVrCRHmsbJTykq6neQB_Kj1lOFlAate4RDU_LGXyWxpImuQpHCqMazJpWCo-GauACBSBhFDucovzKbXjeds6Zpq3lBK_T9EaPvGASD6FO23qv-HxUEyHgnW-VkHhVirk4') } # type: Dict[int, Union[rsa.RSAPublicKey, ec.EllipticCurvePublicKey, Dict[str, Union[ec.EllipticCurvePublicKey, bytes]]]] From 80034e530178ff27f802f4ba2b1a9af31a7b5a92 Mon Sep 17 00:00:00 2001 From: Craig Lurey Date: Thu, 18 Dec 2025 20:19:30 -0800 Subject: [PATCH 07/10] Fix record-history command JSON format and revision limit issues - Fix --format json parameter not working with --action view and --action diff - Add missing return statements to properly output JSON/CSV formats - Remove hardcoded 5-revision limit in diff action to show all revisions --- keepercommander/commands/record.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/keepercommander/commands/record.py b/keepercommander/commands/record.py index ed34a4d7d..688ab53b4 100644 --- a/keepercommander/commands/record.py +++ b/keepercommander/commands/record.py @@ -1843,11 +1843,13 @@ def execute(self, params, **kwargs): rows.append([name, value]) modified = datetime.datetime.fromtimestamp(int(rev['client_modified_time'] / 1000.0)) rows.append(['Modified', modified]) - base.dump_report_data(rows, headers=['Name', 'Value'], - title=f'Record Revision V.{revision}', no_header=True, right_align=(0,)) + fmt = kwargs.get('format') or '' + return base.dump_report_data(rows, headers=['Name', 'Value'], + title=f'Record Revision V.{revision}', no_header=True, right_align=(0,), + fmt=fmt, filename=kwargs.get('output')) elif action == 'diff': - count = 5 + count = length - 1 current = vault.KeeperRecord.load(params, history[index]) rows = [] while count >= 0 and current: @@ -1901,7 +1903,8 @@ def execute(self, params, **kwargs): lines.append('...') row[index] = '\n'.join(lines) - base.dump_report_data(rows, headers) + fmt = kwargs.get('format') or '' + return base.dump_report_data(rows, headers, fmt=fmt, filename=kwargs.get('output')) elif action == 'restore': if revision == 0: From b60fc3fd86f0a9084d9f4b74a4267cf5382b6855 Mon Sep 17 00:00:00 2001 From: Sergey Kolupaev Date: Thu, 18 Dec 2025 20:33:50 -0800 Subject: [PATCH 08/10] Release 17.2.1 --- keepercommander/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keepercommander/__init__.py b/keepercommander/__init__.py index b185ffc18..31c6081c0 100644 --- a/keepercommander/__init__.py +++ b/keepercommander/__init__.py @@ -10,4 +10,4 @@ # Contact: ops@keepersecurity.com # -__version__ = '17.2.0' +__version__ = '17.2.1' From d5ab8297eb0d2c371edbdee53491a19734ddc22b Mon Sep 17 00:00:00 2001 From: Craig Lurey Date: Fri, 19 Dec 2025 11:29:30 -0800 Subject: [PATCH 09/10] Added healthcheck support in service mode --- keepercommander/service/api/routes.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/keepercommander/service/api/routes.py b/keepercommander/service/api/routes.py index 3550e1ac3..c1c8e3a9a 100644 --- a/keepercommander/service/api/routes.py +++ b/keepercommander/service/api/routes.py @@ -9,7 +9,7 @@ # Contact: ops@keepersecurity.com # -from flask import Flask +from flask import Flask, jsonify from typing import Optional from .command import create_command_blueprint, create_legacy_command_blueprint from .onboarding import create_onboarding_blueprint @@ -40,7 +40,13 @@ def init_routes(app: Optional[Flask] = None) -> None: """Initialize routes and queue manager for the Keeper Commander Service.""" if app is None: raise ValueError("App instance is required") - + + # Add health check endpoint (no authentication required for Docker/orchestrators) + @app.route("/health", methods=["GET"]) + def health_check(): + """Health check endpoint for Docker and orchestrators.""" + return jsonify({"status": "ok"}), 200 + logger.debug("Starting route initialization") try: From a716f0a6a080429bb5da33f5b21bd5e26dbef0fc Mon Sep 17 00:00:00 2001 From: Sergey Kolupaev Date: Fri, 19 Dec 2025 11:32:17 -0800 Subject: [PATCH 10/10] pedm scim command: make password arguments optional --- keepercommander/commands/pedm/pedm_admin.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/keepercommander/commands/pedm/pedm_admin.py b/keepercommander/commands/pedm/pedm_admin.py index d1910e161..8fed5af17 100644 --- a/keepercommander/commands/pedm/pedm_admin.py +++ b/keepercommander/commands/pedm/pedm_admin.py @@ -5,6 +5,7 @@ import copy import datetime import fnmatch +import getpass import json import logging import os.path @@ -194,13 +195,13 @@ def __init__(self): azure_parser = subparsers.add_parser('azure', help='Connect via Azure AD') azure_parser.add_argument('--tenant-id', dest='tenant_id', required=True) azure_parser.add_argument('--client-id', dest='client_id', required=True) - azure_parser.add_argument('--client-secret', dest='client_secret', required=True) + azure_parser.add_argument('--client-secret', dest='client_secret') azure_parser.add_argument('--azure-cloud', dest='azure_cloud', choices=['US', 'GOV', 'CN', 'EU'], help='Azure cloud (AzureCloud, AzureChinaCloud, etc.)') ad_parser = subparsers.add_parser('ad', help='Connect via Active Directory') - ad_parser.add_argument('--ad-url', dest='ad_url', help='AD LDAP URL (e.g., ldap(s)://)') - ad_parser.add_argument('--ad-user', dest='ad_user', help='AD bind user (DOMAIN\\username or DN)') + ad_parser.add_argument('--ad-url', dest='ad_url', required=True, help='AD LDAP URL (e.g., ldap(s)://)') + ad_parser.add_argument('--ad-user', dest='ad_user', required=True, help='AD bind user (DOMAIN\\username or DN)') ad_parser.add_argument('--ad-password', dest='ad_password', help='AD password') ad_parser.add_argument('--group', dest='groups', action='append', help='AD group name or DN (repeatable)') ad_parser.add_argument('--netbios-domain', dest='use_netbios_domain', action='store_true', @@ -334,9 +335,13 @@ def execute(self, context: KeeperParams, **kwargs): if scim_groups and not isinstance(scim_groups, list): scim_groups = None - if not ad_url or not ad_user or not ad_password: - raise base.CommandError('AD source requires AD URL, AD User, and AD Password') + if not ad_url or not ad_user: + raise base.CommandError('AD source requires AD URL and AD User') try: + if not ad_password: + ad_password = getpass.getpass(prompt=f'{ad_user} Password: ', stream=None) + if not ad_password: + raise base.CommandError('Cancelled') data_source = AdCrmDataSource(ad_url, ad_user, ad_password, scim_groups, use_netbios_domain) ad_domains = data_source.resolve_domains() except Exception as e: @@ -348,8 +353,10 @@ def execute(self, context: KeeperParams, **kwargs): tenant_id = kwargs.get('tenant_id') client_id = kwargs.get('client_id') client_secret = kwargs.get('client_secret') - if not tenant_id or not client_id or not client_secret: - raise base.CommandError('Azure source requires tenant-id, client-id, and client-secret') + if not tenant_id or not client_id: + raise base.CommandError('Azure source requires tenant-id and client-id') + if not client_secret: + client_secret = getpass.getpass(prompt=f'Azure Client Secret: ', stream=None) azure_cloud = kwargs.get('azure_cloud') if isinstance(azure_cloud, str): azure_cloud = azure_cloud.upper()