MCPcopy Create free account
hub / github.com/Keeper-Security/Commander / load

Method load

keepercommander/enterprise.py:116–217  ·  view source on GitHub ↗
(self, params)

Source from the content-addressed store, hash-verified

114 return self._enterprise
115
116 def load(self, params): # type: (KeeperParams) -> None
117 if params.enterprise is None:
118 params.enterprise = {}
119 self._continuationToken = b''
120
121 if 'unencrypted_tree_key' not in params.enterprise or 'keys' not in params.enterprise:
122 rq = proto.GetEnterpriseDataKeysRequest()
123 rs = api.communicate_rest(params, rq, 'enterprise/get_enterprise_data_keys',
124 rs_type=proto.GetEnterpriseDataKeysResponse)
125 if not self._enterprise.tree_key:
126 if rs.treeKey.treeKey:
127 encrypted_tree_key = utils.base64_url_decode(rs.treeKey.treeKey)
128 if rs.treeKey.keyTypeId == proto.ENCRYPTED_BY_DATA_KEY:
129 self._enterprise._tree_key = crypto.decrypt_aes_v1(encrypted_tree_key, params.data_key)
130 elif rs.treeKey.keyTypeId == proto.ENCRYPTED_BY_PUBLIC_KEY:
131 self._enterprise._tree_key = crypto.decrypt_rsa(encrypted_tree_key, params.rsa_key2)
132 elif rs.treeKey.keyTypeId == proto.ENCRYPTED_BY_DATA_KEY_GCM:
133 self._enterprise._tree_key = crypto.decrypt_aes_v2(encrypted_tree_key, params.data_key)
134 elif rs.treeKey.keyTypeId == proto.ENCRYPTED_BY_PUBLIC_KEY_ECC:
135 self._enterprise._tree_key = crypto.decrypt_ec(encrypted_tree_key, params.ecc_key)
136 params.enterprise['unencrypted_tree_key'] = self._enterprise.tree_key
137
138 keys = {} # type: Dict[str, str]
139 if rs.enterpriseKeys:
140 if rs.enterpriseKeys.rsaEncryptedPrivateKey:
141 try:
142 self._enterprise._rsa_key = \
143 crypto.decrypt_aes_v2(rs.enterpriseKeys.rsaEncryptedPrivateKey, self._enterprise.tree_key)
144 keys['rsa_public_key'] = utils.base64_url_encode(rs.enterpriseKeys.rsaPublicKey)
145 keys['rsa_encrypted_private_key'] = \
146 utils.base64_url_encode(rs.enterpriseKeys.rsaEncryptedPrivateKey)
147 except:
148 if not params.forbid_rsa:
149 logging.info('Error decrypting enterprise RSA key')
150 keys['rsa_encrypted_private_key'] = ''
151 if rs.enterpriseKeys.eccEncryptedPrivateKey:
152 keys['ecc_public_key'] = utils.base64_url_encode(rs.enterpriseKeys.eccPublicKey)
153 keys['ecc_encrypted_private_key'] = \
154 utils.base64_url_encode(rs.enterpriseKeys.eccEncryptedPrivateKey)
155 if 'rsa_encrypted_private_key' not in keys and not params.forbid_rsa:
156 rsa_private, rsa_public = crypto.generate_rsa_key()
157 rsa_private_key = crypto.unload_rsa_private_key(rsa_private)
158 rsa_encrypted_private_key = crypto.encrypt_aes_v2(rsa_private_key, self._enterprise.tree_key)
159 rsa_public_key = crypto.unload_rsa_public_key(rsa_public)
160 rq = proto.EnterpriseKeyPairRequest()
161 rq.enterprisePublicKey = rsa_public_key
162 rq.encryptedEnterprisePrivateKey = rsa_encrypted_private_key
163 rq.keyType = proto.RSA
164 api.communicate_rest(params, rq, 'enterprise/set_enterprise_key_pair')
165 self._enterprise._rsa_key = rsa_private_key
166 keys['rsa_public_key'] = utils.base64_url_encode(rsa_public_key)
167 keys['rsa_encrypted_private_key'] = utils.base64_url_encode(rsa_encrypted_private_key)
168
169 if 'ecc_encrypted_private_key' not in keys:
170 ec_private, ec_public = crypto.generate_ec_key()
171 ec_private_key = crypto.unload_ec_private_key(ec_private)
172 ec_encrypted_private_key = crypto.encrypt_aes_v2(ec_private_key, self._enterprise.tree_key)
173 ec_public_key = crypto.unload_ec_public_key(ec_public)

Callers 1

query_enterpriseFunction · 0.45

Calls 6

getMethod · 0.80
infoMethod · 0.45
clearMethod · 0.45
addMethod · 0.45
parseMethod · 0.45

Tested by

no test coverage detected