swarmauri_crypto_paramiko 0.4.0.dev5__tar.gz → 0.11.0.dev2__tar.gz
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.
- {swarmauri_crypto_paramiko-0.4.0.dev5 → swarmauri_crypto_paramiko-0.11.0.dev2}/PKG-INFO +15 -13
- {swarmauri_crypto_paramiko-0.4.0.dev5 → swarmauri_crypto_paramiko-0.11.0.dev2}/README.md +8 -8
- {swarmauri_crypto_paramiko-0.4.0.dev5 → swarmauri_crypto_paramiko-0.11.0.dev2}/pyproject.toml +7 -6
- {swarmauri_crypto_paramiko-0.4.0.dev5 → swarmauri_crypto_paramiko-0.11.0.dev2}/swarmauri_crypto_paramiko/ParamikoCrypto.py +43 -11
- {swarmauri_crypto_paramiko-0.4.0.dev5 → swarmauri_crypto_paramiko-0.11.0.dev2}/LICENSE +0 -0
- {swarmauri_crypto_paramiko-0.4.0.dev5 → swarmauri_crypto_paramiko-0.11.0.dev2}/swarmauri_crypto_paramiko/__init__.py +0 -0
|
@@ -1,47 +1,47 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: swarmauri_crypto_paramiko
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.11.0.dev2
|
|
4
4
|
Summary: Paramiko-backed RSA + AES-GCM crypto provider for Swarmauri
|
|
5
5
|
License-Expression: Apache-2.0
|
|
6
6
|
License-File: LICENSE
|
|
7
7
|
Keywords: swarmauri,sdk,standards,crypto,paramiko,cryptography
|
|
8
8
|
Author: Jacob Stewart
|
|
9
9
|
Author-email: jacob@swarmauri.com
|
|
10
|
-
Requires-Python: >=3.10,<3.
|
|
10
|
+
Requires-Python: >=3.10,<3.15
|
|
11
11
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
12
12
|
Classifier: Natural Language :: English
|
|
13
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
14
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
15
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.13
|
|
17
13
|
Classifier: Development Status :: 3 - Alpha
|
|
18
14
|
Classifier: Topic :: Security :: Cryptography
|
|
19
15
|
Classifier: Intended Audience :: Developers
|
|
20
16
|
Classifier: Programming Language :: Python
|
|
21
17
|
Classifier: Programming Language :: Python :: 3
|
|
22
18
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
23
24
|
Requires-Dist: cryptography (>=41)
|
|
24
25
|
Requires-Dist: paramiko (>=3.4)
|
|
25
26
|
Requires-Dist: swarmauri_base
|
|
26
27
|
Requires-Dist: swarmauri_core
|
|
27
28
|
Description-Content-Type: text/markdown
|
|
28
29
|
|
|
29
|
-

|
|
30
31
|
|
|
31
32
|
<p align="center">
|
|
32
|
-
<a href="https://
|
|
33
|
-
<img src="https://
|
|
33
|
+
<a href="https://pepy.tech/project/swarmauri_crypto_paramiko/">
|
|
34
|
+
<img src="https://static.pepy.tech/badge/swarmauri_crypto_paramiko/month" alt="PyPI - Downloads"/></a>
|
|
34
35
|
<a href="https://hits.sh/github.com/swarmauri/swarmauri-sdk/tree/master/pkgs/standards/swarmauri_crypto_paramiko/">
|
|
35
36
|
<img alt="Hits" src="https://hits.sh/github.com/swarmauri/swarmauri-sdk/tree/master/pkgs/standards/swarmauri_crypto_paramiko.svg"/></a>
|
|
36
37
|
<a href="https://pypi.org/project/swarmauri_crypto_paramiko/">
|
|
37
|
-
<img src="https://img.shields.io/
|
|
38
|
+
<img src="https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12%20%7C%203.13%20%7C%203.14-blue" alt="PyPI - Python Version"/></a>
|
|
38
39
|
<a href="https://pypi.org/project/swarmauri_crypto_paramiko/">
|
|
39
40
|
<img src="https://img.shields.io/pypi/l/swarmauri_crypto_paramiko" alt="PyPI - License"/></a>
|
|
40
41
|
<a href="https://pypi.org/project/swarmauri_crypto_paramiko/">
|
|
41
42
|
<img src="https://img.shields.io/pypi/v/swarmauri_crypto_paramiko?label=swarmauri_crypto_paramiko&color=green" alt="PyPI - swarmauri_crypto_paramiko"/></a>
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
---
|
|
43
|
+
<a href="https://discord.gg/N4UpBuQv8T">
|
|
44
|
+
<img src="https://img.shields.io/badge/Discord-Join%20Chat-5865F2?logo=discord&logoColor=white" alt="Discord"/></a></p>
|
|
45
45
|
|
|
46
46
|
## Swarmauri Crypto Paramiko
|
|
47
47
|
|
|
@@ -180,3 +180,5 @@ The provider is registered under the `swarmauri.cryptos` entry-point as `Paramik
|
|
|
180
180
|
If you want to contribute to swarmauri-sdk, read up on our
|
|
181
181
|
[guidelines for contributing](https://github.com/swarmauri/swarmauri-sdk/blob/master/CONTRIBUTING.md)
|
|
182
182
|
that will help you get started.
|
|
183
|
+
|
|
184
|
+
|
|
@@ -1,19 +1,18 @@
|
|
|
1
|
-

|
|
2
2
|
|
|
3
3
|
<p align="center">
|
|
4
|
-
<a href="https://
|
|
5
|
-
<img src="https://
|
|
4
|
+
<a href="https://pepy.tech/project/swarmauri_crypto_paramiko/">
|
|
5
|
+
<img src="https://static.pepy.tech/badge/swarmauri_crypto_paramiko/month" alt="PyPI - Downloads"/></a>
|
|
6
6
|
<a href="https://hits.sh/github.com/swarmauri/swarmauri-sdk/tree/master/pkgs/standards/swarmauri_crypto_paramiko/">
|
|
7
7
|
<img alt="Hits" src="https://hits.sh/github.com/swarmauri/swarmauri-sdk/tree/master/pkgs/standards/swarmauri_crypto_paramiko.svg"/></a>
|
|
8
8
|
<a href="https://pypi.org/project/swarmauri_crypto_paramiko/">
|
|
9
|
-
<img src="https://img.shields.io/
|
|
9
|
+
<img src="https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12%20%7C%203.13%20%7C%203.14-blue" alt="PyPI - Python Version"/></a>
|
|
10
10
|
<a href="https://pypi.org/project/swarmauri_crypto_paramiko/">
|
|
11
11
|
<img src="https://img.shields.io/pypi/l/swarmauri_crypto_paramiko" alt="PyPI - License"/></a>
|
|
12
12
|
<a href="https://pypi.org/project/swarmauri_crypto_paramiko/">
|
|
13
13
|
<img src="https://img.shields.io/pypi/v/swarmauri_crypto_paramiko?label=swarmauri_crypto_paramiko&color=green" alt="PyPI - swarmauri_crypto_paramiko"/></a>
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
---
|
|
14
|
+
<a href="https://discord.gg/N4UpBuQv8T">
|
|
15
|
+
<img src="https://img.shields.io/badge/Discord-Join%20Chat-5865F2?logo=discord&logoColor=white" alt="Discord"/></a></p>
|
|
17
16
|
|
|
18
17
|
## Swarmauri Crypto Paramiko
|
|
19
18
|
|
|
@@ -151,4 +150,5 @@ The provider is registered under the `swarmauri.cryptos` entry-point as `Paramik
|
|
|
151
150
|
|
|
152
151
|
If you want to contribute to swarmauri-sdk, read up on our
|
|
153
152
|
[guidelines for contributing](https://github.com/swarmauri/swarmauri-sdk/blob/master/CONTRIBUTING.md)
|
|
154
|
-
that will help you get started.
|
|
153
|
+
that will help you get started.
|
|
154
|
+
|
{swarmauri_crypto_paramiko-0.4.0.dev5 → swarmauri_crypto_paramiko-0.11.0.dev2}/pyproject.toml
RENAMED
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "swarmauri_crypto_paramiko"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.11.0.dev2"
|
|
4
4
|
description = "Paramiko-backed RSA + AES-GCM crypto provider for Swarmauri"
|
|
5
5
|
license = "Apache-2.0"
|
|
6
6
|
readme = "README.md"
|
|
7
|
-
requires-python = ">=3.10,<3.
|
|
7
|
+
requires-python = ">=3.10,<3.15"
|
|
8
8
|
authors = [{ name = "Jacob Stewart", email = "jacob@swarmauri.com" }]
|
|
9
9
|
classifiers = [
|
|
10
10
|
"License :: OSI Approved :: Apache Software License",
|
|
11
11
|
"Natural Language :: English",
|
|
12
|
-
"Programming Language :: Python :: 3.10",
|
|
13
|
-
"Programming Language :: Python :: 3.11",
|
|
14
|
-
"Programming Language :: Python :: 3.12",
|
|
15
|
-
"Programming Language :: Python :: 3.13",
|
|
16
12
|
"Development Status :: 3 - Alpha",
|
|
17
13
|
"Topic :: Security :: Cryptography",
|
|
18
14
|
"Intended Audience :: Developers",
|
|
19
15
|
"Programming Language :: Python",
|
|
20
16
|
"Programming Language :: Python :: 3",
|
|
21
17
|
"Programming Language :: Python :: 3 :: Only",
|
|
18
|
+
"Programming Language :: Python :: 3.10",
|
|
19
|
+
"Programming Language :: Python :: 3.11",
|
|
20
|
+
"Programming Language :: Python :: 3.12",
|
|
21
|
+
"Programming Language :: Python :: 3.13",
|
|
22
|
+
"Programming Language :: Python :: 3.14",
|
|
22
23
|
]
|
|
23
24
|
dependencies = [
|
|
24
25
|
"swarmauri_core",
|
|
@@ -140,7 +140,9 @@ class ParamikoCrypto(CryptoBase):
|
|
|
140
140
|
"KeyRef.material must contain symmetric key bytes for AEAD"
|
|
141
141
|
)
|
|
142
142
|
if len(key.material) not in (16, 24, 32):
|
|
143
|
-
raise ValueError(
|
|
143
|
+
raise ValueError(
|
|
144
|
+
"KeyRef.material must be 16/24/32 bytes for AES-GCM"
|
|
145
|
+
)
|
|
144
146
|
|
|
145
147
|
nonce = nonce or secrets.token_bytes(12)
|
|
146
148
|
aead = AESGCM(key.material)
|
|
@@ -221,7 +223,9 @@ class ParamikoCrypto(CryptoBase):
|
|
|
221
223
|
if alg != _SEAL_ALG:
|
|
222
224
|
raise UnsupportedAlgorithm(f"Unsupported seal alg: {alg}")
|
|
223
225
|
if recipient.public is None:
|
|
224
|
-
raise ValueError(
|
|
226
|
+
raise ValueError(
|
|
227
|
+
"KeyRef.public must contain OpenSSH RSA public key bytes"
|
|
228
|
+
)
|
|
225
229
|
|
|
226
230
|
rsa_pub = self._load_rsa_pub_ssh(recipient.public)
|
|
227
231
|
self._seal_size_check(rsa_pub, len(pt))
|
|
@@ -264,7 +268,10 @@ class ParamikoCrypto(CryptoBase):
|
|
|
264
268
|
raise UnsupportedAlgorithm(f"Unsupported seal alg: {alg}")
|
|
265
269
|
if recipient_priv.material is None:
|
|
266
270
|
raise ValueError(
|
|
267
|
-
|
|
271
|
+
(
|
|
272
|
+
"KeyRef.material must contain PEM-encoded RSA private key "
|
|
273
|
+
"bytes"
|
|
274
|
+
)
|
|
268
275
|
)
|
|
269
276
|
|
|
270
277
|
priv = self._load_rsa_priv_pem(recipient_priv.material)
|
|
@@ -277,7 +284,8 @@ class ParamikoCrypto(CryptoBase):
|
|
|
277
284
|
),
|
|
278
285
|
)
|
|
279
286
|
|
|
280
|
-
# ───────────── hybrid encrypt-for-many via RSA-OAEP (KEM+AEAD)
|
|
287
|
+
# ───────────── hybrid encrypt-for-many via RSA-OAEP (KEM+AEAD)
|
|
288
|
+
# ─────────────
|
|
281
289
|
|
|
282
290
|
async def encrypt_for_many(
|
|
283
291
|
self,
|
|
@@ -322,7 +330,11 @@ class ParamikoCrypto(CryptoBase):
|
|
|
322
330
|
for r in recipients:
|
|
323
331
|
if r.public is None:
|
|
324
332
|
raise ValueError(
|
|
325
|
-
|
|
333
|
+
(
|
|
334
|
+
"Recipient KeyRef.public must contain OpenSSH RSA "
|
|
335
|
+
"public key "
|
|
336
|
+
"bytes"
|
|
337
|
+
)
|
|
326
338
|
)
|
|
327
339
|
rsa_pub = self._load_rsa_pub_ssh(r.public)
|
|
328
340
|
self._seal_size_check(rsa_pub, len(pt))
|
|
@@ -372,7 +384,11 @@ class ParamikoCrypto(CryptoBase):
|
|
|
372
384
|
for r in recipients:
|
|
373
385
|
if r.public is None:
|
|
374
386
|
raise ValueError(
|
|
375
|
-
|
|
387
|
+
(
|
|
388
|
+
"Recipient KeyRef.public must contain OpenSSH RSA "
|
|
389
|
+
"public key "
|
|
390
|
+
"bytes"
|
|
391
|
+
)
|
|
376
392
|
)
|
|
377
393
|
rsa_pub = self._load_rsa_pub_ssh(r.public)
|
|
378
394
|
enc_k = rsa_pub.encrypt(
|
|
@@ -466,10 +482,16 @@ class ParamikoCrypto(CryptoBase):
|
|
|
466
482
|
raise UnsupportedAlgorithm(f"Unsupported wrap_alg: {wrap_alg}")
|
|
467
483
|
if kek.material is None:
|
|
468
484
|
raise ValueError(
|
|
469
|
-
|
|
485
|
+
(
|
|
486
|
+
"KeyRef.material must contain symmetric key bytes for "
|
|
487
|
+
"AES-GCM "
|
|
488
|
+
"wrap"
|
|
489
|
+
)
|
|
470
490
|
)
|
|
471
491
|
if len(kek.material) not in (16, 24, 32):
|
|
472
|
-
raise ValueError(
|
|
492
|
+
raise ValueError(
|
|
493
|
+
"KeyRef.material must be 16/24/32 bytes for AES-GCM"
|
|
494
|
+
)
|
|
473
495
|
if dek is None:
|
|
474
496
|
dek = secrets.token_bytes(32)
|
|
475
497
|
nonce = nonce or secrets.token_bytes(12)
|
|
@@ -514,7 +536,11 @@ class ParamikoCrypto(CryptoBase):
|
|
|
514
536
|
if wrapped.wrap_alg == _WRAP_ALG:
|
|
515
537
|
if kek.material is None:
|
|
516
538
|
raise ValueError(
|
|
517
|
-
|
|
539
|
+
(
|
|
540
|
+
"KeyRef.material must contain PEM-encoded RSA private "
|
|
541
|
+
"key "
|
|
542
|
+
"bytes"
|
|
543
|
+
)
|
|
518
544
|
)
|
|
519
545
|
priv = self._load_rsa_priv_pem(kek.material)
|
|
520
546
|
return priv.decrypt(
|
|
@@ -528,10 +554,16 @@ class ParamikoCrypto(CryptoBase):
|
|
|
528
554
|
|
|
529
555
|
alg = self._normalize_aead_alg(wrapped.wrap_alg)
|
|
530
556
|
if alg != _AEAD_DEFAULT:
|
|
531
|
-
raise UnsupportedAlgorithm(
|
|
557
|
+
raise UnsupportedAlgorithm(
|
|
558
|
+
f"Unsupported wrap_alg: {wrapped.wrap_alg}"
|
|
559
|
+
)
|
|
532
560
|
if kek.material is None:
|
|
533
561
|
raise ValueError(
|
|
534
|
-
|
|
562
|
+
(
|
|
563
|
+
"KeyRef.material must contain symmetric key bytes for "
|
|
564
|
+
"AES-GCM "
|
|
565
|
+
"unwrap"
|
|
566
|
+
)
|
|
535
567
|
)
|
|
536
568
|
if wrapped.nonce is None:
|
|
537
569
|
raise ValueError("WrappedKey.nonce required for AES-GCM unwrap")
|
|
File without changes
|
|
File without changes
|