jamlib 2.6.0b0.dev3__tar.gz → 2.6.0b0.dev5__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.
Files changed (98) hide show
  1. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/PKG-INFO +1 -1
  2. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/pyproject.toml +1 -1
  3. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/__init__.py +1 -1
  4. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/paseto/v1.py +70 -28
  5. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jamlib.egg-info/PKG-INFO +1 -1
  6. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/LICENSE.md +0 -0
  7. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/README.md +0 -0
  8. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/setup.cfg +0 -0
  9. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/__abc_encoder__.py +0 -0
  10. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/__abc_instances__.py +0 -0
  11. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/__deprecated__.py +0 -0
  12. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/__logger__.py +0 -0
  13. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/aio/__init__.py +0 -0
  14. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/aio/instance.py +0 -0
  15. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/aio/jwt/__init__.py +0 -0
  16. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/aio/jwt/lists/__init__.py +0 -0
  17. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/aio/jwt/lists/json.py +0 -0
  18. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/aio/jwt/lists/redis.py +0 -0
  19. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/aio/jwt/tools.py +0 -0
  20. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/aio/modules.py +0 -0
  21. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/aio/oauth2/__init__.py +0 -0
  22. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/aio/oauth2/builtin/__init__.py +0 -0
  23. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/aio/oauth2/builtin/github.py +0 -0
  24. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/aio/oauth2/builtin/gitlab.py +0 -0
  25. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/aio/oauth2/builtin/google.py +0 -0
  26. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/aio/oauth2/builtin/yandex.py +0 -0
  27. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/aio/oauth2/client.py +0 -0
  28. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/aio/sessions/__init__.py +0 -0
  29. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/aio/sessions/json.py +0 -0
  30. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/aio/sessions/redis.py +0 -0
  31. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/encoders.py +0 -0
  32. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/exceptions/__init__.py +0 -0
  33. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/exceptions/jwt.py +0 -0
  34. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/exceptions/oauth2.py +0 -0
  35. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/exceptions/sessions.py +0 -0
  36. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/ext/__init__.py +0 -0
  37. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/ext/fastapi/__init__.py +0 -0
  38. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/ext/flask/__init__.py +0 -0
  39. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/ext/flask/extensions.py +0 -0
  40. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/ext/litestar/__init__.py +0 -0
  41. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/ext/litestar/middlewares.py +0 -0
  42. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/ext/litestar/plugins.py +0 -0
  43. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/ext/litestar/value.py +0 -0
  44. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/ext/starlette/__init__.py +0 -0
  45. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/ext/starlette/auth_backends.py +0 -0
  46. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/ext/starlette/value.py +0 -0
  47. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/instance.py +0 -0
  48. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/jwt/__init__.py +0 -0
  49. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/jwt/__utils__.py +0 -0
  50. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/jwt/lists/__abc_list_repo__.py +0 -0
  51. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/jwt/lists/__init__.py +0 -0
  52. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/jwt/lists/json.py +0 -0
  53. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/jwt/lists/redis.py +0 -0
  54. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/jwt/tools.py +0 -0
  55. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/jwt/types.py +0 -0
  56. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/modules.py +0 -0
  57. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/oauth2/__abc_oauth2_repo__.py +0 -0
  58. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/oauth2/__init__.py +0 -0
  59. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/oauth2/builtin/__init__.py +0 -0
  60. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/oauth2/builtin/github.py +0 -0
  61. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/oauth2/builtin/gitlab.py +0 -0
  62. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/oauth2/builtin/google.py +0 -0
  63. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/oauth2/builtin/yandex.py +0 -0
  64. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/oauth2/client.py +0 -0
  65. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/otp/__abc_module__.py +0 -0
  66. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/otp/__init__.py +0 -0
  67. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/otp/hotp.py +0 -0
  68. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/otp/totp.py +0 -0
  69. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/paseto/__abc_paseto_repo__.py +0 -0
  70. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/paseto/__init__.py +0 -0
  71. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/paseto/utils.py +0 -0
  72. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/paseto/v2.py +0 -0
  73. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/paseto/v3.py +0 -0
  74. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/paseto/v4.py +0 -0
  75. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/quick/__init__.py +0 -0
  76. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/quick/jwt.py +0 -0
  77. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/sessions/__abc_session_repo__.py +0 -0
  78. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/sessions/__init__.py +0 -0
  79. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/sessions/json.py +0 -0
  80. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/sessions/redis.py +0 -0
  81. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/tests/__init__.py +0 -0
  82. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/tests/clients.py +0 -0
  83. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/tests/fakers.py +0 -0
  84. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/utils/__init__.py +0 -0
  85. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/utils/aes.py +0 -0
  86. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/utils/await_maybe.py +0 -0
  87. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/utils/config_maker.py +0 -0
  88. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/utils/ed.py +0 -0
  89. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/utils/otp_keys.py +0 -0
  90. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/utils/rsa.py +0 -0
  91. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/utils/salt_hash.py +0 -0
  92. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/utils/symmetric.py +0 -0
  93. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/utils/xchacha20poly1305.py +0 -0
  94. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jam/utils/xor.py +0 -0
  95. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jamlib.egg-info/SOURCES.txt +0 -0
  96. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jamlib.egg-info/dependency_links.txt +0 -0
  97. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jamlib.egg-info/requires.txt +0 -0
  98. {jamlib-2.6.0b0.dev3 → jamlib-2.6.0b0.dev5}/src/jamlib.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jamlib
3
- Version: 2.6.0b0.dev3
3
+ Version: 2.6.0b0.dev5
4
4
  Summary: Simple and universal library for authorization.
5
5
  Author-email: Makridenko Adrian <adrianmakridenko@duck.com>, Ksenia Travnikova <kseniatravnikova@duck.com>
6
6
  License: MIT License
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "jamlib"
3
- version = "2.6.0b0.dev3"
3
+ version = "2.6.0b0.dev5"
4
4
  description = "Simple and universal library for authorization."
5
5
  authors = [
6
6
  {name = "Makridenko Adrian",email = "adrianmakridenko@duck.com"},
@@ -13,5 +13,5 @@ from jam.encoders import JsonEncoder
13
13
  from jam.instance import Jam
14
14
 
15
15
 
16
- __version__ = "2.6.0b0.dev3"
16
+ __version__ = "2.6.0b0.dev5"
17
17
  __all__ = ["Jam", "JsonEncoder", "BaseJam", "BaseEncoder"]
@@ -1,19 +1,21 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
- import base64
4
3
  import hashlib
5
4
  import hmac
6
5
  import secrets
7
6
  from typing import Any, Literal, Optional, Union
8
7
 
9
- from cryptography.hazmat.primitives import hashes
8
+ from cryptography.hazmat.primitives import hashes, serialization
10
9
  from cryptography.hazmat.primitives.asymmetric import padding
11
- from cryptography.hazmat.primitives.asymmetric.rsa import RSAPrivateKey
10
+ from cryptography.hazmat.primitives.asymmetric.rsa import (
11
+ RSAPrivateKey,
12
+ RSAPublicKey,
13
+ )
12
14
  from cryptography.hazmat.primitives.kdf.hkdf import HKDF
13
15
 
14
16
  from jam.__abc_encoder__ import BaseEncoder
15
17
  from jam.encoders import JsonEncoder
16
- from jam.paseto.__abc_paseto_repo__ import PASETO, BasePASETO, RSAKeyLike
18
+ from jam.paseto.__abc_paseto_repo__ import PASETO, BasePASETO
17
19
  from jam.paseto.utils import (
18
20
  __gen_hash__,
19
21
  __pae__,
@@ -31,41 +33,81 @@ class PASETOv1(BasePASETO):
31
33
  def key(
32
34
  cls: type[PASETO],
33
35
  purpose: Literal["local", "public"],
34
- key: Union[str, bytes, None, RSAPrivateKey],
35
- public_key: Union[RSAKeyLike] = None,
36
+ key: Union[str, bytes, None, RSAPrivateKey, RSAPublicKey],
36
37
  ) -> PASETO:
37
38
  """Return PASETO instance.
38
39
 
39
40
  Args:
40
41
  purpose (Literal["local", "public"]): Paseto purpose
41
42
  key (str | bytes): PEM or secret key
42
- public_key (str | bytes | RSAPublicKey | None): Public key for RSA
43
43
 
44
44
  Returns:
45
45
  PASETO: Paseto instance
46
46
  """
47
- ky = cls()
48
- if cls._rsa_pem_check(key):
49
- if purpose == "local":
50
- raise ValueError("PASETOv1.local does not support RSA keys")
51
- key = cls.load_rsa_key(key, private=True)
52
- if not isinstance(key, RSAPrivateKey):
53
- raise ValueError("Invalid RSA private key")
54
- ky._secret = key
55
- ky._public_key = cls.load_rsa_key(public_key, private=False)
56
- else:
57
- if purpose == "local":
58
- if isinstance(key, str):
59
- key = base64.urlsafe_b64decode(key + "==")
60
- if not isinstance(key, bytes) or len(key) != 32:
61
- raise ValueError(
62
- "PASETOv1.local requires a 32-byte secret key"
63
- )
64
- ky._secret = key
47
+ inst = cls()
48
+ inst._purpose = purpose
49
+
50
+ if purpose == "local":
51
+ if isinstance(key, str):
52
+ raw = base64url_decode(key.encode("utf-8"))
65
53
  else:
66
- raise ValueError("PASETOv1.public requires an RSA private key")
67
- ky._purpose = purpose
68
- return ky
54
+ raw = key
55
+ if not isinstance(raw, (bytes, bytearray) or len(raw) != 32):
56
+ raise ValueError("v1.local requires a 32-byte secret key.")
57
+ inst._secret = bytes(raw)
58
+ return inst
59
+
60
+ elif purpose == "public":
61
+ if isinstance(key, RSAPrivateKey):
62
+ inst._secret = key
63
+ inst._public_key - key.public_key()
64
+ return inst
65
+ if isinstance(key, RSAPublicKey):
66
+ inst._secret = None
67
+ inst._public_key = key
68
+ return inst
69
+
70
+ key_bytes = key.encode("utf-8") if isinstance(key, str) else key
71
+ try:
72
+ priv = serialization.load_pem_private_key(
73
+ key_bytes, password=None
74
+ )
75
+ if isinstance(priv, RSAPrivateKey):
76
+ inst._secret = priv
77
+ inst._public_key = priv.public_key()
78
+ return inst
79
+ except Exception:
80
+ pass
81
+ try:
82
+ priv = serialization.load_der_private_key(
83
+ key_bytes, password=None
84
+ )
85
+ if isinstance(priv, RSAPrivateKey):
86
+ inst._secret = priv
87
+ inst._public_key = priv.public_key()
88
+ return inst
89
+ except Exception:
90
+ pass
91
+ try:
92
+ pub = serialization.load_pem_public_key(key_bytes)
93
+ if isinstance(pub, RSAPublicKey):
94
+ inst._secret = None
95
+ inst._public_key = pub
96
+ return inst
97
+ except Exception:
98
+ pass
99
+ try:
100
+ pub = serialization.load_der_public_key(key_bytes)
101
+ if isinstance(pub, RSAPublicKey):
102
+ inst._secret = None
103
+ inst._public_key = pub
104
+ return inst
105
+ except Exception:
106
+ pass
107
+
108
+ raise ValueError("Invalid RSA key for v1.public")
109
+ else:
110
+ raise ValueError("Purpose must be 'local' or 'public'")
69
111
 
70
112
  def _encode_local(
71
113
  self,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jamlib
3
- Version: 2.6.0b0.dev3
3
+ Version: 2.6.0b0.dev5
4
4
  Summary: Simple and universal library for authorization.
5
5
  Author-email: Makridenko Adrian <adrianmakridenko@duck.com>, Ksenia Travnikova <kseniatravnikova@duck.com>
6
6
  License: MIT License
File without changes
File without changes
File without changes