swarmauri_crypto_paramiko 0.4.0.dev5__tar.gz → 0.11.0.dev1__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.
@@ -1,47 +1,47 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: swarmauri_crypto_paramiko
3
- Version: 0.4.0.dev5
3
+ Version: 0.11.0.dev1
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.13
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
- ![Swarmauri Logo](https://github.com/swarmauri/swarmauri-sdk/blob/3d4d1cfa949399d7019ae9d8f296afba773dfb7f/assets/swarmauri.brand.theme.svg)
30
+ ![Swarmauri Logo](https://raw.githubusercontent.com/swarmauri/swarmauri-sdk/master/assets/swarmauri_sdk_brand.png)
30
31
 
31
32
  <p align="center">
32
- <a href="https://pypi.org/project/swarmauri_crypto_paramiko/">
33
- <img src="https://img.shields.io/pypi/dm/swarmauri_crypto_paramiko" alt="PyPI - Downloads"/></a>
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/pypi/pyversions/swarmauri_crypto_paramiko" alt="PyPI - Python Version"/></a>
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
- </p>
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
- ![Swarmauri Logo](https://github.com/swarmauri/swarmauri-sdk/blob/3d4d1cfa949399d7019ae9d8f296afba773dfb7f/assets/swarmauri.brand.theme.svg)
1
+ ![Swarmauri Logo](https://raw.githubusercontent.com/swarmauri/swarmauri-sdk/master/assets/swarmauri_sdk_brand.png)
2
2
 
3
3
  <p align="center">
4
- <a href="https://pypi.org/project/swarmauri_crypto_paramiko/">
5
- <img src="https://img.shields.io/pypi/dm/swarmauri_crypto_paramiko" alt="PyPI - Downloads"/></a>
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/pypi/pyversions/swarmauri_crypto_paramiko" alt="PyPI - Python Version"/></a>
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
- </p>
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
+
@@ -1,24 +1,25 @@
1
1
  [project]
2
2
  name = "swarmauri_crypto_paramiko"
3
- version = "0.4.0.dev5"
3
+ version = "0.11.0.dev1"
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.13"
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("KeyRef.material must be 16/24/32 bytes for AES-GCM")
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("KeyRef.public must contain OpenSSH RSA public key bytes")
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
- "KeyRef.material must contain PEM-encoded RSA private key bytes"
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
- "Recipient KeyRef.public must contain OpenSSH RSA public key bytes"
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
- "Recipient KeyRef.public must contain OpenSSH RSA public key bytes"
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
- "KeyRef.material must contain symmetric key bytes for AES-GCM wrap"
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("KeyRef.material must be 16/24/32 bytes for AES-GCM")
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
- "KeyRef.material must contain PEM-encoded RSA private key bytes"
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(f"Unsupported wrap_alg: {wrapped.wrap_alg}")
557
+ raise UnsupportedAlgorithm(
558
+ f"Unsupported wrap_alg: {wrapped.wrap_alg}"
559
+ )
532
560
  if kek.material is None:
533
561
  raise ValueError(
534
- "KeyRef.material must contain symmetric key bytes for AES-GCM unwrap"
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")