network.py 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. # -*- coding: utf-8 -*-
  2. """
  3. Network Extension Points.
  4. Extension Points für Verschlüsselung, Protokolle und Kompression.
  5. """
  6. from abc import abstractmethod
  7. from typing import Any, TYPE_CHECKING
  8. from trixy_core.plugins.extensions.extension import Extension
  9. from trixy_core.plugins.extensions.extension_point import ExtensionPoint, get_global_registry
  10. # Extension Point IDs
  11. NETWORK_ENCRYPTION_POINT = "network.encryption"
  12. NETWORK_PROTOCOL_POINT = "network.protocol"
  13. NETWORK_COMPRESSION_POINT = "network.compression"
  14. class EncryptionExtension(Extension):
  15. """
  16. Extension für Verschlüsselungsverfahren.
  17. Ermöglicht Plugins, neue Verschlüsselungen hinzuzufügen:
  18. - Post-Quantum Kryptographie (Kyber, Dilithium)
  19. - Alternative Cipher (ChaCha20-Poly1305)
  20. - Hardware-beschleunigte Verschlüsselung
  21. - Spezielle Anforderungen (FIPS-konform)
  22. Beispiel:
  23. class ChaCha20Extension(EncryptionExtension):
  24. def __init__(self, plugin_name: str):
  25. super().__init__(
  26. "chacha20_poly1305",
  27. "ChaCha20-Poly1305",
  28. plugin_name,
  29. cipher="chacha20-poly1305",
  30. key_size=256,
  31. )
  32. async def create_instance(self, config):
  33. return ChaCha20Poly1305Cipher()
  34. """
  35. def __init__(
  36. self,
  37. extension_id: str,
  38. name: str,
  39. plugin_name: str = "",
  40. cipher: str = "",
  41. key_size: int = 256,
  42. description: str = "",
  43. ) -> None:
  44. """
  45. Initialisiert die Encryption Extension.
  46. Args:
  47. extension_id: Eindeutige ID
  48. name: Anzeigename
  49. plugin_name: Plugin-Name
  50. cipher: Cipher-Name
  51. key_size: Schlüsselgröße in Bits
  52. description: Beschreibung
  53. """
  54. super().__init__(extension_id, name, plugin_name)
  55. self._info.description = description
  56. self._info.extension_point = NETWORK_ENCRYPTION_POINT
  57. self._info.metadata["cipher"] = cipher
  58. self._info.metadata["key_size"] = key_size
  59. @property
  60. def cipher(self) -> str:
  61. """Cipher-Name."""
  62. return self._info.metadata.get("cipher", "")
  63. @property
  64. def key_size(self) -> int:
  65. """Schlüsselgröße in Bits."""
  66. return self._info.metadata.get("key_size", 256)
  67. @abstractmethod
  68. async def create_instance(self, config: dict[str, Any]):
  69. """Erstellt die Cipher-Instanz."""
  70. pass
  71. class ProtocolExtension(Extension):
  72. """
  73. Extension für Netzwerk-Protokolle.
  74. Ermöglicht Plugins, neue Protokolle hinzuzufügen:
  75. - HTTP/2, HTTP/3 (QUIC)
  76. - WebSocket-Varianten
  77. - gRPC
  78. - Custom Binary Protocols
  79. - IoT-Protokolle (MQTT, CoAP)
  80. Beispiel:
  81. class HTTP2Extension(ProtocolExtension):
  82. def __init__(self, plugin_name: str):
  83. super().__init__(
  84. "http2",
  85. "HTTP/2",
  86. plugin_name,
  87. protocol="http2",
  88. port=443,
  89. )
  90. async def create_instance(self, config):
  91. return HTTP2Handler(config)
  92. """
  93. def __init__(
  94. self,
  95. extension_id: str,
  96. name: str,
  97. plugin_name: str = "",
  98. protocol: str = "",
  99. port: int = 0,
  100. secure: bool = True,
  101. description: str = "",
  102. ) -> None:
  103. """
  104. Initialisiert die Protocol Extension.
  105. Args:
  106. extension_id: Eindeutige ID
  107. name: Anzeigename
  108. plugin_name: Plugin-Name
  109. protocol: Protokoll-Name
  110. port: Standard-Port
  111. secure: Ist verschlüsselt
  112. description: Beschreibung
  113. """
  114. super().__init__(extension_id, name, plugin_name)
  115. self._info.description = description
  116. self._info.extension_point = NETWORK_PROTOCOL_POINT
  117. self._info.metadata["protocol"] = protocol
  118. self._info.metadata["port"] = port
  119. self._info.metadata["secure"] = secure
  120. @property
  121. def protocol(self) -> str:
  122. """Protokoll-Name."""
  123. return self._info.metadata.get("protocol", "")
  124. @property
  125. def port(self) -> int:
  126. """Standard-Port."""
  127. return self._info.metadata.get("port", 0)
  128. @property
  129. def is_secure(self) -> bool:
  130. """Ist verschlüsselt."""
  131. return self._info.metadata.get("secure", True)
  132. @abstractmethod
  133. async def create_instance(self, config: dict[str, Any]):
  134. """Erstellt die Protokoll-Handler-Instanz."""
  135. pass
  136. class CompressionExtension(Extension):
  137. """
  138. Extension für Kompressionsverfahren.
  139. Ermöglicht Plugins, neue Kompressionen hinzuzufügen:
  140. - LZ4 (schnell)
  141. - Zstandard (gut)
  142. - Brotli (web-optimiert)
  143. - Spezielle Audio-Kompression
  144. Beispiel:
  145. class ZstdExtension(CompressionExtension):
  146. def __init__(self, plugin_name: str):
  147. super().__init__(
  148. "zstd",
  149. "Zstandard",
  150. plugin_name,
  151. algorithm="zstd",
  152. level=3,
  153. )
  154. async def create_instance(self, config):
  155. return ZstdCompressor(level=config.get("level", 3))
  156. """
  157. def __init__(
  158. self,
  159. extension_id: str,
  160. name: str,
  161. plugin_name: str = "",
  162. algorithm: str = "",
  163. level: int = 6,
  164. description: str = "",
  165. ) -> None:
  166. """
  167. Initialisiert die Compression Extension.
  168. Args:
  169. extension_id: Eindeutige ID
  170. name: Anzeigename
  171. plugin_name: Plugin-Name
  172. algorithm: Algorithmus-Name
  173. level: Kompressionsgrad (0-9)
  174. description: Beschreibung
  175. """
  176. super().__init__(extension_id, name, plugin_name)
  177. self._info.description = description
  178. self._info.extension_point = NETWORK_COMPRESSION_POINT
  179. self._info.metadata["algorithm"] = algorithm
  180. self._info.metadata["level"] = level
  181. @property
  182. def algorithm(self) -> str:
  183. """Algorithmus-Name."""
  184. return self._info.metadata.get("algorithm", "")
  185. @property
  186. def level(self) -> int:
  187. """Kompressionsgrad."""
  188. return self._info.metadata.get("level", 6)
  189. @abstractmethod
  190. async def create_instance(self, config: dict[str, Any]):
  191. """Erstellt die Compressor-Instanz."""
  192. pass
  193. def setup_network_extension_points() -> dict[str, ExtensionPoint]:
  194. """
  195. Richtet alle Network Extension Points ein.
  196. Returns:
  197. Dict mit allen erstellten Extension Points
  198. """
  199. registry = get_global_registry()
  200. points = {}
  201. # Verschlüsselung
  202. points[NETWORK_ENCRYPTION_POINT] = registry.create_point(
  203. id=NETWORK_ENCRYPTION_POINT,
  204. name="Verschlüsselungsverfahren",
  205. description="Erweiterung um neue Verschlüsselungen (ChaCha20, Post-Quantum, etc.)",
  206. category="network",
  207. allows_multiple=True,
  208. )
  209. # Protokolle
  210. points[NETWORK_PROTOCOL_POINT] = registry.create_point(
  211. id=NETWORK_PROTOCOL_POINT,
  212. name="Netzwerk-Protokolle",
  213. description="Erweiterung um neue Protokolle (HTTP/2, WebSocket, gRPC, etc.)",
  214. category="network",
  215. allows_multiple=True,
  216. )
  217. # Kompression
  218. points[NETWORK_COMPRESSION_POINT] = registry.create_point(
  219. id=NETWORK_COMPRESSION_POINT,
  220. name="Kompressionsverfahren",
  221. description="Erweiterung um neue Kompressionen (LZ4, Zstd, Brotli, etc.)",
  222. category="network",
  223. allows_multiple=True,
  224. )
  225. return points