GNServer 0.0.0.0.52__tar.gz → 0.0.0.0.54__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 (21) hide show
  1. {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.54}/GNServer/GNServer/_app.py +2 -2
  2. {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.54}/GNServer/GNServer/_client.py +2 -1
  3. {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.54}/GNServer/GNServer/models.py +24 -17
  4. {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.54}/GNServer/GNServer.egg-info/PKG-INFO +1 -1
  5. {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.54}/PKG-INFO +1 -1
  6. {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.54}/setup.py +1 -1
  7. {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.54}/GNServer/GNServer/__init__.py +0 -0
  8. {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.54}/GNServer/GNServer/_cors_resolver.py +0 -0
  9. {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.54}/GNServer/GNServer/_crt.py +0 -0
  10. {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.54}/GNServer/GNServer/_func_params_validation.py +0 -0
  11. {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.54}/GNServer/GNServer/_routes.py +0 -0
  12. {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.54}/GNServer/GNServer/_template_resolver.py +0 -0
  13. {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.54}/GNServer/GNServer.egg-info/SOURCES.txt +0 -0
  14. {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.54}/GNServer/GNServer.egg-info/dependency_links.txt +0 -0
  15. {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.54}/GNServer/GNServer.egg-info/requires.txt +0 -0
  16. {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.54}/GNServer/GNServer.egg-info/top_level.txt +0 -0
  17. {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.54}/GNServer/LICENSE +0 -0
  18. {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.54}/GNServer/mmbConfig.json +0 -0
  19. {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.54}/LICENSE +0 -0
  20. {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.54}/MANIFEST.in +0 -0
  21. {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.54}/setup.cfg +0 -0
@@ -339,7 +339,7 @@ class App:
339
339
  if event.end_stream:
340
340
 
341
341
  if self._api._kdc is not None:
342
- buf, domain = self._api._kdc.decode(buf)
342
+ buf, domain = self._api._kdc.decode(bytes(buf))
343
343
  else:
344
344
  domain = None
345
345
 
@@ -454,7 +454,7 @@ class App:
454
454
 
455
455
 
456
456
  if self._api._kdc is not None:
457
- blob = self._api._kdc.encode(request.url.hostname, blob)
457
+ blob = self._api._kdc.encode(request.client.domain, blob)
458
458
 
459
459
  self._quic.send_stream_data(request.stream_id, blob, end_stream=end_stream) # type: ignore
460
460
  self.transmit()
@@ -162,6 +162,7 @@ class AsyncClient:
162
162
 
163
163
  def setKDC(self, kdc: KDCObject):
164
164
  self._kdc = kdc
165
+ self._kdc._client = self
165
166
 
166
167
  def addRequestCallback(self, callback: Callable, name: str):
167
168
  self.__request_callbacks[name] = callback
@@ -620,7 +621,7 @@ class RawQuicClient(QuicConnectionProtocol):
620
621
  data = await fut
621
622
 
622
623
  if self.quicClient._client._kdc is not None:
623
- data, domain = self.quicClient._client._kdc.decode(request.url.hostname, data)
624
+ data, domain = self.quicClient._client._kdc.decode(data)
624
625
 
625
626
  if data is not None:
626
627
  r = GNResponse.deserialize(data, 2)
@@ -11,6 +11,7 @@ from KeyisBTools.cryptography.bytes import hash3
11
11
  class KDCObject:
12
12
  def __init__(self, domain: str, kdc_domain: str, kdc_key: bytes, requested_domains: List[str]):
13
13
  self._domain = domain
14
+ self._domain_hash = hash3(domain.encode())
14
15
  self._kdc_domain = kdc_domain
15
16
  self._kdc_key = kdc_key
16
17
  self._requested_domains = requested_domains
@@ -18,7 +19,7 @@ class KDCObject:
18
19
  from ._client import AsyncClient
19
20
  self._client = AsyncClient(domain)
20
21
 
21
- self._servers_keys: Optional[Dict[str, bytes]] = None
22
+ self._servers_keys: Dict[str, bytes] = {}
22
23
  self._servers_keys_hash_domain: Dict[bytes, str] = {}
23
24
  self._servers_keys_domain_hash: Dict[str, bytes] = {}
24
25
 
@@ -26,6 +27,13 @@ class KDCObject:
26
27
 
27
28
 
28
29
  async def init(self, servers_keys: Optional[Dict[str, bytes]] = None): # type: ignore
30
+
31
+
32
+ self._servers_keys[self._kdc_domain] = self._kdc_key
33
+ h = hash3(self._kdc_domain.encode())
34
+ self._servers_keys_hash_domain[h] = self._kdc_domain
35
+ self._servers_keys_domain_hash[self._kdc_domain] = h
36
+
29
37
  if servers_keys is None:
30
38
 
31
39
  payload = self._requested_domains
@@ -34,9 +42,12 @@ class KDCObject:
34
42
  if not r.command.ok:
35
43
  raise r
36
44
 
37
- servers_keys: Dict[str, bytes] = r.payload
38
-
39
- self._servers_keys = servers_keys
45
+ servers_keys = r.payload
46
+
47
+ if servers_keys is None:
48
+ raise r
49
+
50
+ self._servers_keys.update(servers_keys)
40
51
 
41
52
  for domain in self._servers_keys.keys():
42
53
  h = hash3(domain.encode())
@@ -44,31 +55,27 @@ class KDCObject:
44
55
  self._servers_keys_domain_hash[domain] = h
45
56
 
46
57
 
47
- self._servers_keys[self._kdc_domain] = self._kdc_key
48
- h = hash3(self._kdc_domain.encode())
49
- self._servers_keys_hash_domain[h] = self._kdc_domain
50
- self._servers_keys_domain_hash[self._kdc_domain] = h
51
58
 
52
59
 
53
60
  def encode(self, domain: str, request: bytes):
54
61
  if domain not in self._servers_keys:
55
62
  return request
63
+ key = self._servers_keys[domain]
64
+ sig = s2.sign(key)
65
+ data = m1.encrypt(domain.encode(), sig, request[8:], key)
66
+ return request[:8] + sig + self._domain_hash + data
56
67
 
57
- sig = s2.sign(self._kdc_key)
58
- data = m1.encrypt(self._domain.encode(), sig, request, self._kdc_key)
59
- return sig + self._servers_keys_domain_hash[domain] + data
60
-
61
68
  def decode(self, response: bytes):
62
- if len(response) < 164+64:
69
+ if len(response) < 8+164+64:
63
70
  return response, None
64
-
71
+ h = response[:8]
72
+ response = response[8:]
65
73
  sig, domain_h, data = response[:164], response[164:164+64], response[164+64:]
66
-
67
74
  if domain_h not in self._servers_keys_hash_domain:
75
+ print(domain_h, 'not in', self._servers_keys_hash_domain)
68
76
  return response, None
69
77
  d = self._servers_keys_hash_domain[domain_h]
70
78
  key = self._servers_keys[d]
71
-
72
79
  if not s2.verify(key, sig):
73
80
  return None, None
74
- return m1.decrypt(self._domain.encode(), sig, data, key), d
81
+ return h + m1.decrypt(self._domain.encode(), sig, data, key), d
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: GNServer
3
- Version: 0.0.0.0.52
3
+ Version: 0.0.0.0.54
4
4
  Summary: GNServer
5
5
  Home-page: https://github.com/KeyisB/libs/tree/main/GNServer
6
6
  Author: KeyisB
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: GNServer
3
- Version: 0.0.0.0.52
3
+ Version: 0.0.0.0.54
4
4
  Summary: GNServer
5
5
  Home-page: https://github.com/KeyisB/libs/tree/main/GNServer
6
6
  Author: KeyisB
@@ -5,7 +5,7 @@ filesName = 'GNServer'
5
5
 
6
6
  setup(
7
7
  name=name,
8
- version='0.0.0.0.52',
8
+ version='0.0.0.0.54',
9
9
  author="KeyisB",
10
10
  author_email="keyisb.pip@gmail.com",
11
11
  description=name,
File without changes
File without changes
File without changes