pangea-sdk 6.1.0__py3-none-any.whl → 6.2.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pangea/__init__.py +9 -1
- pangea/asyncio/__init__.py +1 -0
- pangea/asyncio/file_uploader.py +4 -2
- pangea/asyncio/request.py +53 -18
- pangea/asyncio/services/__init__.py +2 -0
- pangea/asyncio/services/ai_guard.py +9 -12
- pangea/asyncio/services/audit.py +12 -7
- pangea/asyncio/services/authn.py +36 -25
- pangea/asyncio/services/authz.py +6 -6
- pangea/asyncio/services/base.py +4 -0
- pangea/asyncio/services/file_scan.py +8 -2
- pangea/asyncio/services/intel.py +26 -28
- pangea/asyncio/services/redact.py +7 -3
- pangea/asyncio/services/sanitize.py +5 -1
- pangea/asyncio/services/share.py +5 -1
- pangea/asyncio/services/vault.py +19 -15
- pangea/audit_logger.py +3 -1
- pangea/deep_verify.py +13 -13
- pangea/deprecated.py +1 -1
- pangea/dump_audit.py +2 -3
- pangea/exceptions.py +8 -5
- pangea/file_uploader.py +4 -0
- pangea/request.py +64 -48
- pangea/response.py +21 -18
- pangea/services/__init__.py +2 -0
- pangea/services/ai_guard.py +35 -24
- pangea/services/audit/audit.py +16 -13
- pangea/services/audit/models.py +71 -34
- pangea/services/audit/signing.py +1 -1
- pangea/services/audit/util.py +10 -10
- pangea/services/authn/authn.py +36 -25
- pangea/services/authn/models.py +10 -56
- pangea/services/authz.py +10 -6
- pangea/services/base.py +7 -4
- pangea/services/embargo.py +6 -0
- pangea/services/file_scan.py +8 -2
- pangea/services/intel.py +36 -19
- pangea/services/redact.py +7 -3
- pangea/services/sanitize.py +5 -1
- pangea/services/share/share.py +13 -7
- pangea/services/vault/models/asymmetric.py +4 -0
- pangea/services/vault/models/common.py +4 -0
- pangea/services/vault/models/symmetric.py +4 -0
- pangea/services/vault/vault.py +17 -19
- pangea/tools.py +13 -9
- pangea/utils.py +3 -5
- pangea/verify_audit.py +23 -27
- {pangea_sdk-6.1.0.dist-info → pangea_sdk-6.2.0.dist-info}/METADATA +36 -17
- pangea_sdk-6.2.0.dist-info/RECORD +60 -0
- {pangea_sdk-6.1.0.dist-info → pangea_sdk-6.2.0.dist-info}/WHEEL +1 -1
- pangea_sdk-6.1.0.dist-info/RECORD +0 -60
pangea/verify_audit.py
CHANGED
@@ -9,14 +9,16 @@ You can provide a single event (obtained from the PUC) or the result from a sear
|
|
9
9
|
In the latter case, all the events are verified.
|
10
10
|
"""
|
11
11
|
|
12
|
+
from __future__ import annotations
|
13
|
+
|
12
14
|
import argparse
|
13
15
|
import json
|
14
16
|
import logging
|
15
17
|
import os
|
16
18
|
import sys
|
17
|
-
from collections.abc import Set
|
19
|
+
from collections.abc import Iterable, Set
|
18
20
|
from enum import Enum
|
19
|
-
from typing import
|
21
|
+
from typing import Optional, Union
|
20
22
|
|
21
23
|
from pangea.config import PangeaConfig
|
22
24
|
from pangea.exceptions import TreeNotFoundException
|
@@ -36,8 +38,8 @@ from pangea.services.audit.util import (
|
|
36
38
|
)
|
37
39
|
|
38
40
|
logger = logging.getLogger("audit")
|
39
|
-
arweave_roots:
|
40
|
-
pangea_roots:
|
41
|
+
arweave_roots: dict[int, PublishedRoot] = {} # roots fetched from Arweave
|
42
|
+
pangea_roots: dict[int, Root] = {} # roots fetched from Pangea
|
41
43
|
audit: Optional[Audit] = None
|
42
44
|
|
43
45
|
|
@@ -72,10 +74,7 @@ class VerifierLogFormatter(logging.Formatter):
|
|
72
74
|
self.in_section = True
|
73
75
|
return f"{' ' * self.indent}⎾ {record.msg}"
|
74
76
|
else:
|
75
|
-
if self.in_section
|
76
|
-
pre = f"{' ' * (self.indent+4)}⌲ "
|
77
|
-
else:
|
78
|
-
pre = ""
|
77
|
+
pre = f"{' ' * (self.indent + 4)}⌲ " if self.in_section else ""
|
79
78
|
return f"{pre}{record.msg}"
|
80
79
|
|
81
80
|
|
@@ -100,8 +99,8 @@ formatter = VerifierLogFormatter()
|
|
100
99
|
InvalidTokenError = ValueError("Invalid Pangea Token provided")
|
101
100
|
|
102
101
|
|
103
|
-
def get_pangea_roots(tree_name: str, tree_sizes: Iterable[int]) ->
|
104
|
-
ans:
|
102
|
+
def get_pangea_roots(tree_name: str, tree_sizes: Iterable[int]) -> dict[int, Root]:
|
103
|
+
ans: dict[int, Root] = {}
|
105
104
|
if audit is None:
|
106
105
|
return ans
|
107
106
|
|
@@ -125,7 +124,7 @@ def get_pangea_roots(tree_name: str, tree_sizes: Iterable[int]) -> Dict[int, Roo
|
|
125
124
|
return ans
|
126
125
|
|
127
126
|
|
128
|
-
def _verify_hash(data:
|
127
|
+
def _verify_hash(data: dict, data_hash: str) -> Status:
|
129
128
|
log_section("Checking data hash")
|
130
129
|
status = Status.SKIPPED
|
131
130
|
try:
|
@@ -213,7 +212,7 @@ def _fetch_roots(tree_name: str, tree_size: int, leaf_index: Optional[int]) -> S
|
|
213
212
|
logger.debug(f"Fetching root(s) {comma_sep(pending_roots)} from Arweave")
|
214
213
|
arweave_roots |= {int(k): v for k, v in get_arweave_published_roots(tree_name, pending_roots).items()}
|
215
214
|
update_pending_roots()
|
216
|
-
except:
|
215
|
+
except: # noqa: E722
|
217
216
|
pass
|
218
217
|
|
219
218
|
if pending_roots:
|
@@ -227,7 +226,7 @@ def _fetch_roots(tree_name: str, tree_size: int, leaf_index: Optional[int]) -> S
|
|
227
226
|
pangea_roots |= {int(k): v for k, v in get_pangea_roots(tree_name, pending_roots).items()}
|
228
227
|
update_pending_roots()
|
229
228
|
status = Status.SUCCEEDED_PANGEA
|
230
|
-
except:
|
229
|
+
except: # noqa: E722
|
231
230
|
pass
|
232
231
|
|
233
232
|
if pending_roots:
|
@@ -244,7 +243,7 @@ def _fetch_roots(tree_name: str, tree_size: int, leaf_index: Optional[int]) -> S
|
|
244
243
|
|
245
244
|
|
246
245
|
def _verify_membership_proof(tree_size: int, node_hash: str, proof: Optional[str]) -> Status:
|
247
|
-
pub_roots:
|
246
|
+
pub_roots: dict[int, Union[Root, PublishedRoot]] = arweave_roots | pangea_roots
|
248
247
|
|
249
248
|
log_section("Checking membership proof")
|
250
249
|
|
@@ -277,7 +276,7 @@ def _verify_membership_proof(tree_size: int, node_hash: str, proof: Optional[str
|
|
277
276
|
return status
|
278
277
|
|
279
278
|
|
280
|
-
def _consistency_proof_ok(pub_roots:
|
279
|
+
def _consistency_proof_ok(pub_roots: dict[int, Union[Root, PublishedRoot]], leaf_index: int) -> bool:
|
281
280
|
"""returns true if a consistency proof is correct"""
|
282
281
|
|
283
282
|
curr_root = pub_roots[leaf_index + 1]
|
@@ -296,7 +295,7 @@ def _consistency_proof_ok(pub_roots: Dict[int, Union[Root, PublishedRoot]], leaf
|
|
296
295
|
# Due to an (already fixed) bug, some proofs from Arweave may be wrong.
|
297
296
|
# Try the proof from Pangea instead. If the root hash in both Arweave and Pangea is the same,
|
298
297
|
# it doesn't matter where the proof came from.
|
299
|
-
def _fix_consistency_proof(pub_roots:
|
298
|
+
def _fix_consistency_proof(pub_roots: dict[int, Union[Root, PublishedRoot]], tree_name: str, leaf_index: int):
|
300
299
|
logger.debug("Consistency proof from Arweave failed to verify")
|
301
300
|
size = leaf_index + 1
|
302
301
|
logger.debug(f"Fetching root from Pangea for size {size}")
|
@@ -305,13 +304,13 @@ def _fix_consistency_proof(pub_roots: Dict[int, Union[Root, PublishedRoot]], tre
|
|
305
304
|
raise ValueError("Error fetching root from Pangea")
|
306
305
|
pangea_roots[size] = new_roots[size]
|
307
306
|
pub_roots[size] = pangea_roots[size]
|
308
|
-
logger.debug(
|
307
|
+
logger.debug("Comparing Arweave root hash with Pangea root hash")
|
309
308
|
if pangea_roots[size].root_hash != arweave_roots[size].root_hash:
|
310
309
|
raise ValueError("Hash does not match")
|
311
310
|
|
312
311
|
|
313
312
|
def _verify_consistency_proof(tree_name: str, leaf_index: Optional[int]) -> Status:
|
314
|
-
pub_roots:
|
313
|
+
pub_roots: dict[int, Union[Root, PublishedRoot]] = arweave_roots | pangea_roots
|
315
314
|
|
316
315
|
log_section("Checking consistency proof")
|
317
316
|
|
@@ -336,10 +335,7 @@ def _verify_consistency_proof(tree_name: str, leaf_index: Optional[int]) -> Stat
|
|
336
335
|
_fix_consistency_proof(pub_roots, tree_name, leaf_index)
|
337
336
|
|
338
337
|
# check again
|
339
|
-
if _consistency_proof_ok(pub_roots, leaf_index)
|
340
|
-
status = Status.SUCCEEDED
|
341
|
-
else:
|
342
|
-
status = Status.FAILED
|
338
|
+
status = Status.SUCCEEDED if _consistency_proof_ok(pub_roots, leaf_index) else Status.FAILED
|
343
339
|
|
344
340
|
else:
|
345
341
|
logger.debug(
|
@@ -356,11 +352,11 @@ def _verify_consistency_proof(tree_name: str, leaf_index: Optional[int]) -> Stat
|
|
356
352
|
return status
|
357
353
|
|
358
354
|
|
359
|
-
def create_signed_event(event:
|
355
|
+
def create_signed_event(event: dict) -> dict:
|
360
356
|
return {k: v for k, v in event.items() if v is not None}
|
361
357
|
|
362
358
|
|
363
|
-
def _verify_signature(data:
|
359
|
+
def _verify_signature(data: dict) -> Status:
|
364
360
|
log_section("Checking signature")
|
365
361
|
if "signature" not in data:
|
366
362
|
logger.debug("Signature is not present")
|
@@ -383,13 +379,13 @@ def _verify_signature(data: Dict) -> Status:
|
|
383
379
|
return status
|
384
380
|
|
385
381
|
|
386
|
-
def verify_multiple(root:
|
382
|
+
def verify_multiple(root: dict, unpublished_root: dict, events: list[dict]) -> Status:
|
387
383
|
"""
|
388
384
|
Verify a list of events.
|
389
385
|
Returns a status.
|
390
386
|
"""
|
391
387
|
|
392
|
-
statuses:
|
388
|
+
statuses: list[Status] = []
|
393
389
|
for counter, event in enumerate(events):
|
394
390
|
event.update({"root": root, "unpublished_root": unpublished_root})
|
395
391
|
event_status = verify_single(event, counter + 1)
|
@@ -403,7 +399,7 @@ def verify_multiple(root: Dict, unpublished_root: Dict, events: List[Dict]) -> S
|
|
403
399
|
return Status.SUCCEEDED
|
404
400
|
|
405
401
|
|
406
|
-
def verify_single(data:
|
402
|
+
def verify_single(data: dict, counter: Optional[int] = None) -> Status:
|
407
403
|
"""
|
408
404
|
Verify a single event.
|
409
405
|
Returns a status.
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: pangea-sdk
|
3
|
-
Version: 6.
|
3
|
+
Version: 6.2.0
|
4
4
|
Summary: Pangea API SDK
|
5
5
|
License: MIT
|
6
6
|
Keywords: Pangea,SDK,Audit
|
@@ -9,16 +9,16 @@ Author-email: glenn.gallien@pangea.cloud
|
|
9
9
|
Requires-Python: >=3.9.2,<4.0.0
|
10
10
|
Classifier: Topic :: Software Development
|
11
11
|
Classifier: Topic :: Software Development :: Libraries
|
12
|
-
Requires-Dist: aiohttp (>=3.
|
13
|
-
Requires-Dist: cryptography (>=
|
12
|
+
Requires-Dist: aiohttp (>=3.12.13,<4.0.0)
|
13
|
+
Requires-Dist: cryptography (>=45.0.4,<46.0.0)
|
14
14
|
Requires-Dist: deprecated (>=1.2.18,<2.0.0)
|
15
15
|
Requires-Dist: google-crc32c (>=1.7.1,<2.0.0)
|
16
|
-
Requires-Dist: pydantic (>=2.11.
|
16
|
+
Requires-Dist: pydantic (>=2.11.7,<3.0.0)
|
17
17
|
Requires-Dist: python-dateutil (>=2.9.0.post0,<3.0.0)
|
18
|
-
Requires-Dist: requests (>=2.32.
|
18
|
+
Requires-Dist: requests (>=2.32.4,<3.0.0)
|
19
19
|
Requires-Dist: requests-toolbelt (>=1.0.0,<2.0.0)
|
20
|
-
Requires-Dist: typing-extensions (>=4.
|
21
|
-
Requires-Dist: yarl (>=1.20.
|
20
|
+
Requires-Dist: typing-extensions (>=4.14.0,<5.0.0)
|
21
|
+
Requires-Dist: yarl (>=1.20.1,<2.0.0)
|
22
22
|
Description-Content-Type: text/markdown
|
23
23
|
|
24
24
|
<a href="https://pangea.cloud?utm_source=github&utm_medium=python-sdk" target="_blank" rel="noopener noreferrer">
|
@@ -63,13 +63,13 @@ the same compatibility guarantees as stable releases.
|
|
63
63
|
Via pip:
|
64
64
|
|
65
65
|
```bash
|
66
|
-
$ pip3 install pangea-sdk==
|
66
|
+
$ pip3 install pangea-sdk==6.2.0b2
|
67
67
|
```
|
68
68
|
|
69
69
|
Via poetry:
|
70
70
|
|
71
71
|
```bash
|
72
|
-
$ poetry add pangea-sdk==
|
72
|
+
$ poetry add pangea-sdk==6.2.0b2
|
73
73
|
```
|
74
74
|
|
75
75
|
## Usage
|
@@ -102,6 +102,26 @@ audit = Audit(token, config)
|
|
102
102
|
response = audit.log(message="Hello, World!")
|
103
103
|
```
|
104
104
|
|
105
|
+
## Configuration
|
106
|
+
|
107
|
+
The SDK supports the following configuration options via `PangeaConfig`:
|
108
|
+
|
109
|
+
- `base_url_template` — Template for constructing the base URL for API requests.
|
110
|
+
The placeholder `{SERVICE_NAME}` will be replaced with the service name slug.
|
111
|
+
This is a more powerful version of `domain` that allows for setting more than
|
112
|
+
just the host of the API server. Defaults to
|
113
|
+
`https://{SERVICE_NAME}.aws.us.pangea.cloud`.
|
114
|
+
- `domain` — Base domain for API requests. This is a weaker version of
|
115
|
+
`base_url_template` that only allows for setting the host of the API server.
|
116
|
+
Use `base_url_template` for more control over the URL, such as setting
|
117
|
+
service-specific paths. Defaults to `aws.us.pangea.cloud`.
|
118
|
+
- `request_retries` — Number of retries on the initial request.
|
119
|
+
- `request_backoff` — Backoff strategy passed to 'requests'.
|
120
|
+
- `request_timeout` — Timeout used on initial request attempts.
|
121
|
+
- `poll_result_timeout` — Timeout used to poll results after 202 (in secs).
|
122
|
+
- `queued_retry_enabled` — Enable queued request retry support.
|
123
|
+
- `custom_user_agent` — Custom user agent to be used in the request headers.
|
124
|
+
|
105
125
|
## asyncio support
|
106
126
|
|
107
127
|
asyncio support is available through the `pangea.asyncio.services` module. The
|
@@ -156,6 +176,7 @@ options:
|
|
156
176
|
```
|
157
177
|
|
158
178
|
It accepts multiple file formats:
|
179
|
+
|
159
180
|
- a Verification Artifact from the Pangea User Console
|
160
181
|
- a search response from the REST API:
|
161
182
|
|
@@ -163,7 +184,6 @@ It accepts multiple file formats:
|
|
163
184
|
$ curl -H "Authorization: Bearer ${PANGEA_TOKEN}" -X POST -H 'Content-Type: application/json' --data '{"verbose": true}' https://audit.aws.us.pangea.cloud/v1/search
|
164
185
|
```
|
165
186
|
|
166
|
-
|
167
187
|
### Bulk Download Audit Data
|
168
188
|
|
169
189
|
Download all audit logs for a given time range. Start and end date should be provided,
|
@@ -213,15 +233,14 @@ options:
|
|
213
233
|
```
|
214
234
|
|
215
235
|
It accepts multiple file formats:
|
236
|
+
|
216
237
|
- a Verification Artifact from the Pangea User Console
|
217
238
|
- a file generated by the `dump_audit` command
|
218
239
|
- a search response from the REST API (see `verify_audit`)
|
219
240
|
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
[Pangea Console]: https://console.pangea.cloud/
|
226
|
-
[Secure Audit Log]: https://pangea.cloud/docs/audit
|
241
|
+
[Documentation]: https://pangea.cloud/docs/sdk/python/
|
242
|
+
[GA Examples]: https://github.com/pangeacyber/pangea-python/tree/main/examples
|
243
|
+
[Beta Examples]: https://github.com/pangeacyber/pangea-python/tree/beta/examples
|
244
|
+
[Pangea Console]: https://console.pangea.cloud/
|
245
|
+
[Secure Audit Log]: https://pangea.cloud/docs/audit
|
227
246
|
|
@@ -0,0 +1,60 @@
|
|
1
|
+
pangea/__init__.py,sha256=30dNDO2Z8iXabFhscMxSzEeTR37R7-K5pL8xODQkG0k,370
|
2
|
+
pangea/asyncio/__init__.py,sha256=TIiYYY-DR4X6d3rGBqpCBQkPMFkogzYLXYvi_RvmCEM,64
|
3
|
+
pangea/asyncio/file_uploader.py,sha256=FwR-p-Xgtmq3UDW6_ptRQLTL4_2AIzdaY358WjxwJBw,1436
|
4
|
+
pangea/asyncio/request.py,sha256=VX5e7xIUmtP8TBan6efiAcc9cCdXGUJOAYZN-mhgRqQ,19395
|
5
|
+
pangea/asyncio/services/__init__.py,sha256=m0nqw9_7mlachetzNxyJKZDOtEe2j2_UHFCELAE3Irg,484
|
6
|
+
pangea/asyncio/services/ai_guard.py,sha256=QaeiKZSn8aDuBPfEsF_KgUbkAtaaauSd_RTGBAbBU3g,6274
|
7
|
+
pangea/asyncio/services/audit.py,sha256=smZwzCKa37Wzo7yNqa-Rp7WCWNXXQCfjKA25PvxL8fo,26127
|
8
|
+
pangea/asyncio/services/authn.py,sha256=o9t5Jvn_p9LpwUy83KIzx5CSKKgAlNRwsNQZ8wl1Yz8,52407
|
9
|
+
pangea/asyncio/services/authz.py,sha256=3T0D97ACTx7RuGsopglm8G2Bg4GGNgvoAq3o8OP4lRc,9721
|
10
|
+
pangea/asyncio/services/base.py,sha256=ntvuwfyAuhyfrptlBg1NFViGlFb3tf9uqxnC1PiBX6U,3206
|
11
|
+
pangea/asyncio/services/embargo.py,sha256=ctzj3kip6xos-Eu3JuOskrCGYC8T3JlsgAopZHiPSXM,3068
|
12
|
+
pangea/asyncio/services/file_scan.py,sha256=OCKvrTZgsTCKA6P261PSRl4anWcU-CvDPtXfrTqAxgE,7210
|
13
|
+
pangea/asyncio/services/intel.py,sha256=SKDOye-b73SSmnvepuRQ_ej4on71uCeChtIfM0mcwTM,40193
|
14
|
+
pangea/asyncio/services/prompt_guard.py,sha256=NbYt-0tRtO5VH7kLmC1lJ5JSV-ztlb9dNFaKKs_fZUM,2553
|
15
|
+
pangea/asyncio/services/redact.py,sha256=356Kd5sww6wJsxA6DFIJvVEJle00n7HijdINb61YX9E,8014
|
16
|
+
pangea/asyncio/services/sanitize.py,sha256=OybTAUfh_7vYRwb6Cjp4aHZoeHhIlg8caJ_BVrdbA1A,8691
|
17
|
+
pangea/asyncio/services/share.py,sha256=AV9FbA-IMU5TFhcBtUHoXKDQYfOIWAJJZKW6vFohBbs,30816
|
18
|
+
pangea/asyncio/services/vault.py,sha256=CTdibBag9kAHV38eDPMwtgk0Ak-nX_R4MCzcki2JVag,77417
|
19
|
+
pangea/audit_logger.py,sha256=DOzL5oyXwaPlsuK6VRHXn_lPdNc4Z7LHGj78RArXs5A,3861
|
20
|
+
pangea/config.py,sha256=Z2WT_UG0qBQzzVzBfloXYFxS21mSg1YXQ36cAVCqrJk,1963
|
21
|
+
pangea/crypto/rsa.py,sha256=mwSiNy571KAGr3F6oEM0CXWkl9D023ch8ldbZZeLj_4,4747
|
22
|
+
pangea/deep_verify.py,sha256=Z8vnrxEiwa3hcTJO6ckZpdSerQHjtgnUUllaWTAMdwI,8637
|
23
|
+
pangea/deprecated.py,sha256=3yiM7WnSOHq55ROtJvhjiTDSmOEIa0B85YPctVfp-WU,597
|
24
|
+
pangea/dump_audit.py,sha256=b89jKV3ewy77WA_AzVMIT04_E1CUxTplj94IURJM7nc,7081
|
25
|
+
pangea/exceptions.py,sha256=EiH7NiNDyN69ZYlVikF8d1tAO3_Do0bKl8dFXghY8t0,5585
|
26
|
+
pangea/file_uploader.py,sha256=bDX9jZTw4h_gwFf9AjtfJYxQchLM2lVMgH93WhgCXsY,1275
|
27
|
+
pangea/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
28
|
+
pangea/request.py,sha256=g5kQiV_hB4A38FVQnPX5Y64Y-N9LePWnf7QiFbxleOw,25541
|
29
|
+
pangea/response.py,sha256=gE5m82v8BruKwGTMZlT_Krv1YwYAmp6dhpKnVWGZpWg,7597
|
30
|
+
pangea/services/__init__.py,sha256=CzgsgeO-wR4xTn7OUE2DhoIF4HoYQO-uA-yBhjNSF4g,428
|
31
|
+
pangea/services/ai_guard.py,sha256=bXf4hFFeNYvmdeiSwcDgAwgveTNwLXe5-KirOea3Qt0,15986
|
32
|
+
pangea/services/audit/audit.py,sha256=sBRghIhGscR46CxvWYN7FGHjZyqqtFOB4xH8CwxAsw4,39172
|
33
|
+
pangea/services/audit/exceptions.py,sha256=bhVuYe4ammacOVxwg98CChxvwZf5FKgR2DcgqILOcwc,471
|
34
|
+
pangea/services/audit/models.py,sha256=pE4jtYAn_c5JdPrXBfpKHwpRAqO_DTSCOy-QHkPMajw,15471
|
35
|
+
pangea/services/audit/signing.py,sha256=VsQkstQL1vxIdN2Ghxp4P-FLBpV_BIvDsBCkRAZQpk8,5593
|
36
|
+
pangea/services/audit/util.py,sha256=dna9AKodlJ-C_VAXFebMu2r57Fl1DdRWdb1SyG7VLpA,7651
|
37
|
+
pangea/services/authn/authn.py,sha256=rDoa182OKMAke7x63pJfoDyRqRyetODm594brpwHZk4,51328
|
38
|
+
pangea/services/authn/models.py,sha256=dSw9pfDlaxjgDERUgmmmdq0ZLOsuLvX-eENxnf1YpwA,23365
|
39
|
+
pangea/services/authz.py,sha256=difU7FcBKJoxg7-J8zW8gIRYoZnA0q3-dQcZsUbe5SA,14678
|
40
|
+
pangea/services/base.py,sha256=ShkR0elPiYPln323x4L4F_hGhjQ5fB0zpGZ9J4SLk4g,3835
|
41
|
+
pangea/services/embargo.py,sha256=3rE3ImjBg2VUXQljGZICedsr14psWdymC2pmmdJF2co,4000
|
42
|
+
pangea/services/file_scan.py,sha256=DzFYJyBrByWZHUQN8ll8OvzsynT8qegMzaEMXJfiP2Q,7934
|
43
|
+
pangea/services/intel.py,sha256=UronzgnzG5ZsmG9Km12Jw_at5bYAXoF-NqgYkH7WWfg,56958
|
44
|
+
pangea/services/prompt_guard.py,sha256=Cq8ume2_YPfHre4iN6FYkyTV7NrdwLXlr_wnilfKotE,3446
|
45
|
+
pangea/services/redact.py,sha256=LJMHPK8hDxPLEVNfRgESAWgL4GBMiJC_pr1wXGb79W8,13225
|
46
|
+
pangea/services/sanitize.py,sha256=0ZlCrEg8imJtRyovy4qZJb1ZAZ8ppIOQTj_nocBJ2CM,13019
|
47
|
+
pangea/services/share/file_format.py,sha256=1svO1ee_aenA9zoO_AaU-Rk5Ulp7kcPOc_KwNoluyQE,2797
|
48
|
+
pangea/services/share/share.py,sha256=IhTilqWcQ2GlsJ7kHHuVbXfNu8jvFtPBnEeM26SNsY8,52403
|
49
|
+
pangea/services/vault/models/asymmetric.py,sha256=F6JMd9BlYJZSjfhJRavqcadmQJAbcd5drezLLQ_ZJEs,5058
|
50
|
+
pangea/services/vault/models/common.py,sha256=h9Cn8rRTDO5VHOrYYk5nqYa1LV5I1Melmn8LT-RJwCM,18048
|
51
|
+
pangea/services/vault/models/keys.py,sha256=duAuTiOby_D7MloRvN4gNj0P-b-jx9sdtplAWFxsShw,2786
|
52
|
+
pangea/services/vault/models/secret.py,sha256=ItGdkulM-SEySfcm4a5yGxMvo_omjC7kChv6gdbFnn8,1142
|
53
|
+
pangea/services/vault/models/symmetric.py,sha256=VqJ_C3xj2e4OtnFiPyngX6_sOcXKFf1yhatSF9PmB90,2629
|
54
|
+
pangea/services/vault/vault.py,sha256=z_N_1RiKUn4rxWK0UId9omWOFlWY6lnlPCS1Oxskp-Y,76425
|
55
|
+
pangea/tools.py,sha256=JkwVplvx7MCPRSdPhFTLvOl6h7btaUbXEuHgUy0EHBU,6452
|
56
|
+
pangea/utils.py,sha256=QwTODI_D8by86uXeA0MpdhJICvz5baKUtfv1rguQshU,4943
|
57
|
+
pangea/verify_audit.py,sha256=-VepQKHtSqZRqhIKiUtLufa7ywwdMNLN2SuhingMooU,17288
|
58
|
+
pangea_sdk-6.2.0.dist-info/METADATA,sha256=VBhC4XnINIWTUJLELzlY1usyC3IpKQ61ziUnmks_C0E,8015
|
59
|
+
pangea_sdk-6.2.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
60
|
+
pangea_sdk-6.2.0.dist-info/RECORD,,
|
@@ -1,60 +0,0 @@
|
|
1
|
-
pangea/__init__.py,sha256=SsSFodzFjA5wp7MeTcC2YDLJyt4DeR98QUsA7pVkhf0,246
|
2
|
-
pangea/asyncio/__init__.py,sha256=kjEMkqMQ521LlMSu5jn3_WgweyArwVZ2C-s3x7mR6Pk,45
|
3
|
-
pangea/asyncio/file_uploader.py,sha256=wI7epib7Rc5jtZw4eJ1L1SlmutDG6CPv59C8N2UPhtY,1436
|
4
|
-
pangea/asyncio/request.py,sha256=lpLY-o405r3-VUfrAE5uxYxI8UjM4hjPqUzAUtOGE5o,18040
|
5
|
-
pangea/asyncio/services/__init__.py,sha256=L6Tdhjfx_ZECHskhLMPaCcOefi-r-imw6q_zlU4j-FY,464
|
6
|
-
pangea/asyncio/services/ai_guard.py,sha256=rFksT8LQkyioW3QOq4fLCEZbW5SXiYWpWjLbVovRouE,6294
|
7
|
-
pangea/asyncio/services/audit.py,sha256=Ue3KDmTn-a2KsqlzxbakLQJAWiRyLaJrYVi1hO7a6sw,26030
|
8
|
-
pangea/asyncio/services/authn.py,sha256=apa0kcxmSXH2ChJbTYVFvXTB4cn69cN9O7tW_jOXy_w,52100
|
9
|
-
pangea/asyncio/services/authz.py,sha256=ocImj2g-P9wAo6CqAvZs7YR4wOTUAx0ZWmenKh6HwLk,9691
|
10
|
-
pangea/asyncio/services/base.py,sha256=vRFVcO_uEAGJte3OUUBLD43RoiiFB1vC7SPyN6yEMoA,3158
|
11
|
-
pangea/asyncio/services/embargo.py,sha256=ctzj3kip6xos-Eu3JuOskrCGYC8T3JlsgAopZHiPSXM,3068
|
12
|
-
pangea/asyncio/services/file_scan.py,sha256=PLG1O-PL4Yk9uY9D6NbMrZ5LHg70Z311s7bFe46UMZA,7108
|
13
|
-
pangea/asyncio/services/intel.py,sha256=BcxGKSoZ1nJiEHyZM9yOwKSSPJUrB6ibJ19KR27VlgQ,40261
|
14
|
-
pangea/asyncio/services/prompt_guard.py,sha256=NbYt-0tRtO5VH7kLmC1lJ5JSV-ztlb9dNFaKKs_fZUM,2553
|
15
|
-
pangea/asyncio/services/redact.py,sha256=JPJcmeKFloMZRpkjAHAZbpZJpO993WsTfEwA-S5ov18,7951
|
16
|
-
pangea/asyncio/services/sanitize.py,sha256=EbSdq_v9yZWce9xEYWvZharE9bJcxw8cg5Pv8LVxdxc,8627
|
17
|
-
pangea/asyncio/services/share.py,sha256=Qd2Oh4UsLwu7Zo4Xy1KABHuP4TJ9AtcN-XzldvilFVo,30773
|
18
|
-
pangea/asyncio/services/vault.py,sha256=VqrJGSEdq6MlZRI6cJpkthhIsqLClSQdgVxwYCbIwEk,77079
|
19
|
-
pangea/audit_logger.py,sha256=gRkCfUUT5LDNaycwxkhZUySgY47jDfn1ZeKOul4XCQI,3842
|
20
|
-
pangea/config.py,sha256=Z2WT_UG0qBQzzVzBfloXYFxS21mSg1YXQ36cAVCqrJk,1963
|
21
|
-
pangea/crypto/rsa.py,sha256=mwSiNy571KAGr3F6oEM0CXWkl9D023ch8ldbZZeLj_4,4747
|
22
|
-
pangea/deep_verify.py,sha256=ZGraaL7TCxwRBIDqjBFR0clKlhAC-Yce6kD-1LClhG8,8616
|
23
|
-
pangea/deprecated.py,sha256=IjFYEVvY1E0ld0SMkEYC1o62MAleX3nnT1If2dFVbHo,608
|
24
|
-
pangea/dump_audit.py,sha256=IevqaUUh7GDepdIW7slSxeZbkPrWIVbcX3sr4DgpJXI,7090
|
25
|
-
pangea/exceptions.py,sha256=OBtzUECpNa6vNp8ySkHC-tm4QjFRCOAHBkMHqzAlOu8,5656
|
26
|
-
pangea/file_uploader.py,sha256=4RQ44xt-faApC61nn2PlwHT7XYrJ4GeQA8Ug4tySEAg,1227
|
27
|
-
pangea/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
28
|
-
pangea/request.py,sha256=4ZVD1F3CS4XdLM45vfhlCazZ5NQF1jUzu4j31yjH3KE,24689
|
29
|
-
pangea/response.py,sha256=lPAcYsF9Xg166CiyhCofVmQA-W4jevh0MQXxUa8Re68,7737
|
30
|
-
pangea/services/__init__.py,sha256=h36HzyIGaI5kO6l3UCwKHx_Kd-m_9mYVwn5MLRVzblI,408
|
31
|
-
pangea/services/ai_guard.py,sha256=X1DR1JTYZnLqBFFAHgmRk4xqyGF3GQMO1B3_cqLLVfU,15774
|
32
|
-
pangea/services/audit/audit.py,sha256=TbDiO5eAHWCWAynQ4PChonTEN7z7ehZaR-duxbIFZ6Q,39068
|
33
|
-
pangea/services/audit/exceptions.py,sha256=bhVuYe4ammacOVxwg98CChxvwZf5FKgR2DcgqILOcwc,471
|
34
|
-
pangea/services/audit/models.py,sha256=1h1B9eSYQMYG3f8WNi1UcDX2-impRrET_ErjJYUnj7M,14678
|
35
|
-
pangea/services/audit/signing.py,sha256=5A4hvPtpfP2kMz8bsiiKUACriXbh5dv9gb_rbqiUtuI,5583
|
36
|
-
pangea/services/audit/util.py,sha256=Zq1qvfeplYfhCP_ud5YMvntSB0UvnCdsuYbOzZkHbjg,7620
|
37
|
-
pangea/services/authn/authn.py,sha256=AkGyjGz5eHpMkxMn0F-xP94DCV7Ai88yaI4pSqAQ_qc,51021
|
38
|
-
pangea/services/authn/models.py,sha256=EOoseAWVhr7Gy2HHqxqtvyUNimoi6OVc-x9OMxEeRX8,25253
|
39
|
-
pangea/services/authz.py,sha256=fOPucOMdoYee5B4FXYgM8d6HHUeGg8QwiyTfKcD1JCk,14581
|
40
|
-
pangea/services/base.py,sha256=43pWQcR9CeT4sGzgctF3Sy4M_h7DaUzkuZD2Z7CcDUU,3845
|
41
|
-
pangea/services/embargo.py,sha256=9Wfku4td5ORaIENKmnGmS5jxJJIRfWp6Q51L36Jsy0I,3897
|
42
|
-
pangea/services/file_scan.py,sha256=QiO80uKqB_BnAOiYQKznXfxpa5j40qqETE3-zBRT_QE,7813
|
43
|
-
pangea/services/intel.py,sha256=y1EX2ctYIxQc52lmHp6-Q_UIDM--t3fOpXDssWiRPfo,56474
|
44
|
-
pangea/services/prompt_guard.py,sha256=Cq8ume2_YPfHre4iN6FYkyTV7NrdwLXlr_wnilfKotE,3446
|
45
|
-
pangea/services/redact.py,sha256=ZTZgx3w4X923ZjWcBpI4c0gVh9cpJpcUpWuTNVVuHeY,13143
|
46
|
-
pangea/services/sanitize.py,sha256=eAN1HhObiKqygy6HHcfl0NmxYfPMvqSKepwEAVVIIEE,12936
|
47
|
-
pangea/services/share/file_format.py,sha256=1svO1ee_aenA9zoO_AaU-Rk5Ulp7kcPOc_KwNoluyQE,2797
|
48
|
-
pangea/services/share/share.py,sha256=hlhkIr6ScJ5oMFUs9no4HtHNoUEbYU4KoLkiGLxex30,52343
|
49
|
-
pangea/services/vault/models/asymmetric.py,sha256=vspijmEvHm5WXri_fjOWfQc4maYyZfhDkLuaTM8-PZo,4991
|
50
|
-
pangea/services/vault/models/common.py,sha256=PSZRFqHTUtEMJJGwywEFM2AU3aV8S-sbcoo3LLQ6uTc,17981
|
51
|
-
pangea/services/vault/models/keys.py,sha256=duAuTiOby_D7MloRvN4gNj0P-b-jx9sdtplAWFxsShw,2786
|
52
|
-
pangea/services/vault/models/secret.py,sha256=ItGdkulM-SEySfcm4a5yGxMvo_omjC7kChv6gdbFnn8,1142
|
53
|
-
pangea/services/vault/models/symmetric.py,sha256=t8xCM1wGGKDBpOqTggFueO4-4-2IFmyxqcs7_PDr7U0,2562
|
54
|
-
pangea/services/vault/vault.py,sha256=ow-Zm7PYzfWIfUcA4UNnpeL2DHfZM4C7inRDmNR3zQU,76196
|
55
|
-
pangea/tools.py,sha256=icHduOfZLi02UYdGb5Xl1fQqu-PBRB4tiDPT_nL2Q8E,6380
|
56
|
-
pangea/utils.py,sha256=dZ6MwFVEWXUgXvvDg-k6JnvVfsgslvtaBd7ez7afrqk,4983
|
57
|
-
pangea/verify_audit.py,sha256=nSP17OzoSPdvezRExwfcf45H8ZPZnxZu-CbEp3qFJO0,17354
|
58
|
-
pangea_sdk-6.1.0.dist-info/METADATA,sha256=PaLI_RGtc8TJeHm1gv4Mg7sYe8vK1zwEdDHVm_8hr1Y,6886
|
59
|
-
pangea_sdk-6.1.0.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
|
60
|
-
pangea_sdk-6.1.0.dist-info/RECORD,,
|