GNServer 0.0.0.0.52__tar.gz → 0.0.0.0.53__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.
- {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.53}/GNServer/GNServer/_app.py +1 -1
- {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.53}/GNServer/GNServer/_client.py +2 -1
- {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.53}/GNServer/GNServer/models.py +24 -17
- {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.53}/GNServer/GNServer.egg-info/PKG-INFO +1 -1
- {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.53}/PKG-INFO +1 -1
- {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.53}/setup.py +1 -1
- {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.53}/GNServer/GNServer/__init__.py +0 -0
- {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.53}/GNServer/GNServer/_cors_resolver.py +0 -0
- {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.53}/GNServer/GNServer/_crt.py +0 -0
- {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.53}/GNServer/GNServer/_func_params_validation.py +0 -0
- {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.53}/GNServer/GNServer/_routes.py +0 -0
- {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.53}/GNServer/GNServer/_template_resolver.py +0 -0
- {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.53}/GNServer/GNServer.egg-info/SOURCES.txt +0 -0
- {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.53}/GNServer/GNServer.egg-info/dependency_links.txt +0 -0
- {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.53}/GNServer/GNServer.egg-info/requires.txt +0 -0
- {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.53}/GNServer/GNServer.egg-info/top_level.txt +0 -0
- {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.53}/GNServer/LICENSE +0 -0
- {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.53}/GNServer/mmbConfig.json +0 -0
- {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.53}/LICENSE +0 -0
- {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.53}/MANIFEST.in +0 -0
- {gnserver-0.0.0.0.52 → gnserver-0.0.0.0.53}/setup.cfg +0 -0
@@ -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.
|
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(
|
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:
|
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
|
38
|
-
|
39
|
-
|
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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|