(self, params)
| 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) |
no test coverage detected