pypcapkit 1.3.3.post1__cp313-none-any.whl

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 (466) hide show
  1. pcapkit/__init__.py +126 -0
  2. pcapkit/__main__.py +138 -0
  3. pcapkit/all.py +136 -0
  4. pcapkit/const/__init__.py +81 -0
  5. pcapkit/const/arp/__init__.py +25 -0
  6. pcapkit/const/arp/hardware.py +181 -0
  7. pcapkit/const/arp/operation.py +131 -0
  8. pcapkit/const/ftp/__init__.py +25 -0
  9. pcapkit/const/ftp/command.py +309 -0
  10. pcapkit/const/ftp/return_code.py +304 -0
  11. pcapkit/const/hip/__init__.py +94 -0
  12. pcapkit/const/hip/certificate.py +77 -0
  13. pcapkit/const/hip/cipher.py +65 -0
  14. pcapkit/const/hip/di.py +59 -0
  15. pcapkit/const/hip/ecdsa_curve.py +59 -0
  16. pcapkit/const/hip/ecdsa_low_curve.py +56 -0
  17. pcapkit/const/hip/eddsa_curve.py +65 -0
  18. pcapkit/const/hip/esp_transform_suite.py +98 -0
  19. pcapkit/const/hip/group.py +86 -0
  20. pcapkit/const/hip/hi_algorithm.py +86 -0
  21. pcapkit/const/hip/hit_suite.py +68 -0
  22. pcapkit/const/hip/nat_traversal.py +62 -0
  23. pcapkit/const/hip/notify_message.py +200 -0
  24. pcapkit/const/hip/packet.py +89 -0
  25. pcapkit/const/hip/parameter.py +377 -0
  26. pcapkit/const/hip/registration.py +68 -0
  27. pcapkit/const/hip/registration_failure.py +84 -0
  28. pcapkit/const/hip/suite.py +71 -0
  29. pcapkit/const/hip/transport.py +59 -0
  30. pcapkit/const/http/__init__.py +39 -0
  31. pcapkit/const/http/error_code.py +95 -0
  32. pcapkit/const/http/frame.py +95 -0
  33. pcapkit/const/http/method.py +184 -0
  34. pcapkit/const/http/setting.py +96 -0
  35. pcapkit/const/http/status_code.py +294 -0
  36. pcapkit/const/ipv4/__init__.py +57 -0
  37. pcapkit/const/ipv4/classification_level.py +64 -0
  38. pcapkit/const/ipv4/option_class.py +55 -0
  39. pcapkit/const/ipv4/option_number.py +137 -0
  40. pcapkit/const/ipv4/protection_authority.py +63 -0
  41. pcapkit/const/ipv4/qs_function.py +51 -0
  42. pcapkit/const/ipv4/router_alert.py +251 -0
  43. pcapkit/const/ipv4/tos_del.py +51 -0
  44. pcapkit/const/ipv4/tos_ecn.py +55 -0
  45. pcapkit/const/ipv4/tos_pre.py +63 -0
  46. pcapkit/const/ipv4/tos_rel.py +51 -0
  47. pcapkit/const/ipv4/tos_thr.py +51 -0
  48. pcapkit/const/ipv4/ts_flag.py +53 -0
  49. pcapkit/const/ipv6/__init__.py +53 -0
  50. pcapkit/const/ipv6/extension_header.py +66 -0
  51. pcapkit/const/ipv6/option.py +137 -0
  52. pcapkit/const/ipv6/option_action.py +55 -0
  53. pcapkit/const/ipv6/qs_function.py +51 -0
  54. pcapkit/const/ipv6/router_alert.py +266 -0
  55. pcapkit/const/ipv6/routing.py +80 -0
  56. pcapkit/const/ipv6/seed_id.py +55 -0
  57. pcapkit/const/ipv6/smf_dpd_mode.py +51 -0
  58. pcapkit/const/ipv6/tagger_id.py +62 -0
  59. pcapkit/const/ipx/__init__.py +27 -0
  60. pcapkit/const/ipx/packet.py +72 -0
  61. pcapkit/const/ipx/socket.py +104 -0
  62. pcapkit/const/l2tp/__init__.py +21 -0
  63. pcapkit/const/l2tp/type.py +51 -0
  64. pcapkit/const/mh/__init__.py +204 -0
  65. pcapkit/const/mh/access_type.py +92 -0
  66. pcapkit/const/mh/ack_status_code.py +71 -0
  67. pcapkit/const/mh/ani_suboption.py +74 -0
  68. pcapkit/const/mh/auth_subtype.py +53 -0
  69. pcapkit/const/mh/binding_ack_flag.py +66 -0
  70. pcapkit/const/mh/binding_error.py +51 -0
  71. pcapkit/const/mh/binding_revocation.py +59 -0
  72. pcapkit/const/mh/binding_update_flag.py +81 -0
  73. pcapkit/const/mh/cga_extension.py +66 -0
  74. pcapkit/const/mh/cga_sec.py +57 -0
  75. pcapkit/const/mh/cga_type.py +68 -0
  76. pcapkit/const/mh/dhcp_support_mode.py +53 -0
  77. pcapkit/const/mh/dns_status_code.py +65 -0
  78. pcapkit/const/mh/dsmip6_tls_packet.py +62 -0
  79. pcapkit/const/mh/dsmipv6_home_address.py +74 -0
  80. pcapkit/const/mh/enumerating_algorithm.py +56 -0
  81. pcapkit/const/mh/fb_ack_status.py +62 -0
  82. pcapkit/const/mh/fb_action.py +71 -0
  83. pcapkit/const/mh/fb_indication_trigger.py +65 -0
  84. pcapkit/const/mh/fb_type.py +59 -0
  85. pcapkit/const/mh/flow_id_status.py +77 -0
  86. pcapkit/const/mh/flow_id_suboption.py +71 -0
  87. pcapkit/const/mh/handoff_type.py +71 -0
  88. pcapkit/const/mh/handover_ack_flag.py +54 -0
  89. pcapkit/const/mh/handover_ack_status.py +92 -0
  90. pcapkit/const/mh/handover_initiate_flag.py +57 -0
  91. pcapkit/const/mh/handover_initiate_status.py +62 -0
  92. pcapkit/const/mh/home_address_reply.py +71 -0
  93. pcapkit/const/mh/lla_code.py +63 -0
  94. pcapkit/const/mh/lma_mag_suboption.py +59 -0
  95. pcapkit/const/mh/mn_group_id.py +59 -0
  96. pcapkit/const/mh/mn_id_subtype.py +77 -0
  97. pcapkit/const/mh/operator_id.py +63 -0
  98. pcapkit/const/mh/option.py +260 -0
  99. pcapkit/const/mh/packet.py +119 -0
  100. pcapkit/const/mh/qos_attribute.py +89 -0
  101. pcapkit/const/mh/revocation_status_code.py +83 -0
  102. pcapkit/const/mh/revocation_trigger.py +86 -0
  103. pcapkit/const/mh/status_code.py +232 -0
  104. pcapkit/const/mh/traffic_selector.py +62 -0
  105. pcapkit/const/mh/upa_status.py +71 -0
  106. pcapkit/const/mh/upn_reason.py +80 -0
  107. pcapkit/const/ospf/__init__.py +27 -0
  108. pcapkit/const/ospf/authentication.py +65 -0
  109. pcapkit/const/ospf/packet.py +71 -0
  110. pcapkit/const/pcapng/__init__.py +51 -0
  111. pcapkit/const/pcapng/block_type.py +152 -0
  112. pcapkit/const/pcapng/filter_type.py +48 -0
  113. pcapkit/const/pcapng/hash_algorithm.py +59 -0
  114. pcapkit/const/pcapng/option_type.py +233 -0
  115. pcapkit/const/pcapng/record_type.py +57 -0
  116. pcapkit/const/pcapng/secrets_type.py +56 -0
  117. pcapkit/const/pcapng/verdict_type.py +53 -0
  118. pcapkit/const/reg/__init__.py +34 -0
  119. pcapkit/const/reg/apptype.py +32702 -0
  120. pcapkit/const/reg/ethertype.py +714 -0
  121. pcapkit/const/reg/linktype.py +902 -0
  122. pcapkit/const/reg/transtype.py +523 -0
  123. pcapkit/const/tcp/__init__.py +35 -0
  124. pcapkit/const/tcp/checksum.py +55 -0
  125. pcapkit/const/tcp/flags.py +73 -0
  126. pcapkit/const/tcp/mp_tcp_option.py +80 -0
  127. pcapkit/const/tcp/option.py +198 -0
  128. pcapkit/const/vlan/__init__.py +23 -0
  129. pcapkit/const/vlan/priority_level.py +71 -0
  130. pcapkit/corekit/__init__.py +59 -0
  131. pcapkit/corekit/fields/__init__.py +45 -0
  132. pcapkit/corekit/fields/collections.py +282 -0
  133. pcapkit/corekit/fields/field.py +269 -0
  134. pcapkit/corekit/fields/ipaddress.py +274 -0
  135. pcapkit/corekit/fields/misc.py +722 -0
  136. pcapkit/corekit/fields/numbers.py +375 -0
  137. pcapkit/corekit/fields/strings.py +245 -0
  138. pcapkit/corekit/infoclass.py +394 -0
  139. pcapkit/corekit/io.py +506 -0
  140. pcapkit/corekit/module.py +39 -0
  141. pcapkit/corekit/multidict.py +626 -0
  142. pcapkit/corekit/protochain.py +263 -0
  143. pcapkit/corekit/version.py +33 -0
  144. pcapkit/dumpkit/__init__.py +15 -0
  145. pcapkit/dumpkit/common.py +199 -0
  146. pcapkit/dumpkit/null.py +77 -0
  147. pcapkit/dumpkit/pcap.py +144 -0
  148. pcapkit/foundation/__init__.py +45 -0
  149. pcapkit/foundation/engines/__init__.py +36 -0
  150. pcapkit/foundation/engines/dpkt.py +230 -0
  151. pcapkit/foundation/engines/engine.py +194 -0
  152. pcapkit/foundation/engines/pcap.py +188 -0
  153. pcapkit/foundation/engines/pcapng.py +310 -0
  154. pcapkit/foundation/engines/pyshark.py +166 -0
  155. pcapkit/foundation/engines/scapy.py +161 -0
  156. pcapkit/foundation/extraction.py +915 -0
  157. pcapkit/foundation/reassembly/__init__.py +49 -0
  158. pcapkit/foundation/reassembly/data/__init__.py +48 -0
  159. pcapkit/foundation/reassembly/data/ip.py +117 -0
  160. pcapkit/foundation/reassembly/data/tcp.py +145 -0
  161. pcapkit/foundation/reassembly/ip.py +192 -0
  162. pcapkit/foundation/reassembly/ipv4.py +50 -0
  163. pcapkit/foundation/reassembly/ipv6.py +50 -0
  164. pcapkit/foundation/reassembly/reassembly.py +389 -0
  165. pcapkit/foundation/reassembly/tcp.py +249 -0
  166. pcapkit/foundation/registry/__init__.py +41 -0
  167. pcapkit/foundation/registry/foundation.py +327 -0
  168. pcapkit/foundation/registry/protocols.py +885 -0
  169. pcapkit/foundation/traceflow/__init__.py +44 -0
  170. pcapkit/foundation/traceflow/data/__init__.py +30 -0
  171. pcapkit/foundation/traceflow/data/tcp.py +105 -0
  172. pcapkit/foundation/traceflow/tcp.py +159 -0
  173. pcapkit/foundation/traceflow/traceflow.py +390 -0
  174. pcapkit/interface/__init__.py +22 -0
  175. pcapkit/interface/core.py +185 -0
  176. pcapkit/interface/misc.py +120 -0
  177. pcapkit/protocols/__init__.py +85 -0
  178. pcapkit/protocols/application/NotImplemented/bgp.py +0 -0
  179. pcapkit/protocols/application/NotImplemented/dhcp.py +0 -0
  180. pcapkit/protocols/application/NotImplemented/dhcpv6.py +0 -0
  181. pcapkit/protocols/application/NotImplemented/dns.py +0 -0
  182. pcapkit/protocols/application/NotImplemented/imap.py +0 -0
  183. pcapkit/protocols/application/NotImplemented/ldap.py +0 -0
  184. pcapkit/protocols/application/NotImplemented/mqtt.py +0 -0
  185. pcapkit/protocols/application/NotImplemented/nntp.py +0 -0
  186. pcapkit/protocols/application/NotImplemented/ntp.py +0 -0
  187. pcapkit/protocols/application/NotImplemented/onc_rpc.py +0 -0
  188. pcapkit/protocols/application/NotImplemented/pop.py +0 -0
  189. pcapkit/protocols/application/NotImplemented/rip.py +0 -0
  190. pcapkit/protocols/application/NotImplemented/rtp.py +0 -0
  191. pcapkit/protocols/application/NotImplemented/sip.py +0 -0
  192. pcapkit/protocols/application/NotImplemented/smtp.py +0 -0
  193. pcapkit/protocols/application/NotImplemented/snmp.py +0 -0
  194. pcapkit/protocols/application/NotImplemented/ssh.py +0 -0
  195. pcapkit/protocols/application/NotImplemented/telnet.py +0 -0
  196. pcapkit/protocols/application/NotImplemented/tls.py +0 -0
  197. pcapkit/protocols/application/NotImplemented/xmpp.py +0 -0
  198. pcapkit/protocols/application/__init__.py +34 -0
  199. pcapkit/protocols/application/application.py +114 -0
  200. pcapkit/protocols/application/ftp.py +206 -0
  201. pcapkit/protocols/application/http.py +176 -0
  202. pcapkit/protocols/application/httpv1.py +320 -0
  203. pcapkit/protocols/application/httpv2.py +1255 -0
  204. pcapkit/protocols/data/__init__.py +192 -0
  205. pcapkit/protocols/data/application/__init__.py +57 -0
  206. pcapkit/protocols/data/application/ftp.py +59 -0
  207. pcapkit/protocols/data/application/httpv1.py +79 -0
  208. pcapkit/protocols/data/application/httpv2.py +293 -0
  209. pcapkit/protocols/data/data.py +25 -0
  210. pcapkit/protocols/data/internet/__init__.py +298 -0
  211. pcapkit/protocols/data/internet/ah.py +31 -0
  212. pcapkit/protocols/data/internet/hip.py +804 -0
  213. pcapkit/protocols/data/internet/hopopt.py +351 -0
  214. pcapkit/protocols/data/internet/ipv4.py +369 -0
  215. pcapkit/protocols/data/internet/ipv6.py +67 -0
  216. pcapkit/protocols/data/internet/ipv6_frag.py +29 -0
  217. pcapkit/protocols/data/internet/ipv6_opts.py +368 -0
  218. pcapkit/protocols/data/internet/ipv6_route.py +86 -0
  219. pcapkit/protocols/data/internet/ipx.py +56 -0
  220. pcapkit/protocols/data/internet/mh.py +509 -0
  221. pcapkit/protocols/data/link/__init__.py +33 -0
  222. pcapkit/protocols/data/link/arp.py +74 -0
  223. pcapkit/protocols/data/link/ethernet.py +28 -0
  224. pcapkit/protocols/data/link/l2tp.py +63 -0
  225. pcapkit/protocols/data/link/ospf.py +58 -0
  226. pcapkit/protocols/data/link/vlan.py +42 -0
  227. pcapkit/protocols/data/misc/__init__.py +109 -0
  228. pcapkit/protocols/data/misc/null.py +18 -0
  229. pcapkit/protocols/data/misc/pcap/__init__.py +18 -0
  230. pcapkit/protocols/data/misc/pcap/frame.py +56 -0
  231. pcapkit/protocols/data/misc/pcap/header.py +53 -0
  232. pcapkit/protocols/data/misc/pcapng.py +925 -0
  233. pcapkit/protocols/data/misc/raw.py +25 -0
  234. pcapkit/protocols/data/protocol.py +32 -0
  235. pcapkit/protocols/data/transport/__init__.py +71 -0
  236. pcapkit/protocols/data/transport/tcp.py +555 -0
  237. pcapkit/protocols/data/transport/udp.py +29 -0
  238. pcapkit/protocols/internet/NotImplemented/ecn.py +0 -0
  239. pcapkit/protocols/internet/NotImplemented/esp.py +97 -0
  240. pcapkit/protocols/internet/NotImplemented/icmp.py +0 -0
  241. pcapkit/protocols/internet/NotImplemented/icmpv6.py +0 -0
  242. pcapkit/protocols/internet/NotImplemented/igmp.py +0 -0
  243. pcapkit/protocols/internet/NotImplemented/shim6.py +0 -0
  244. pcapkit/protocols/internet/__init__.py +43 -0
  245. pcapkit/protocols/internet/ah.py +275 -0
  246. pcapkit/protocols/internet/hip.py +4727 -0
  247. pcapkit/protocols/internet/hopopt.py +1879 -0
  248. pcapkit/protocols/internet/internet.py +240 -0
  249. pcapkit/protocols/internet/ip.py +51 -0
  250. pcapkit/protocols/internet/ipsec.py +50 -0
  251. pcapkit/protocols/internet/ipv4.py +1782 -0
  252. pcapkit/protocols/internet/ipv6.py +361 -0
  253. pcapkit/protocols/internet/ipv6_frag.py +258 -0
  254. pcapkit/protocols/internet/ipv6_opts.py +1890 -0
  255. pcapkit/protocols/internet/ipv6_route.py +710 -0
  256. pcapkit/protocols/internet/ipx.py +230 -0
  257. pcapkit/protocols/internet/mh.py +2764 -0
  258. pcapkit/protocols/link/NotImplemented/dsl.py +0 -0
  259. pcapkit/protocols/link/NotImplemented/eapol.py +1 -0
  260. pcapkit/protocols/link/NotImplemented/fddi.py +0 -0
  261. pcapkit/protocols/link/NotImplemented/isdn.py +0 -0
  262. pcapkit/protocols/link/NotImplemented/ndp.py +0 -0
  263. pcapkit/protocols/link/NotImplemented/ppp.py +0 -0
  264. pcapkit/protocols/link/__init__.py +35 -0
  265. pcapkit/protocols/link/arp.py +421 -0
  266. pcapkit/protocols/link/ethernet.py +248 -0
  267. pcapkit/protocols/link/l2tp.py +267 -0
  268. pcapkit/protocols/link/link.py +140 -0
  269. pcapkit/protocols/link/ospf.py +342 -0
  270. pcapkit/protocols/link/rarp.py +82 -0
  271. pcapkit/protocols/link/vlan.py +225 -0
  272. pcapkit/protocols/misc/__init__.py +37 -0
  273. pcapkit/protocols/misc/null.py +129 -0
  274. pcapkit/protocols/misc/pcap/__init__.py +17 -0
  275. pcapkit/protocols/misc/pcap/frame.py +478 -0
  276. pcapkit/protocols/misc/pcap/header.py +358 -0
  277. pcapkit/protocols/misc/pcapng.py +5520 -0
  278. pcapkit/protocols/misc/raw.py +180 -0
  279. pcapkit/protocols/protocol.py +1216 -0
  280. pcapkit/protocols/schema/__init__.py +140 -0
  281. pcapkit/protocols/schema/application/__init__.py +40 -0
  282. pcapkit/protocols/schema/application/ftp.py +21 -0
  283. pcapkit/protocols/schema/application/httpv1.py +21 -0
  284. pcapkit/protocols/schema/application/httpv2.py +384 -0
  285. pcapkit/protocols/schema/internet/__init__.py +294 -0
  286. pcapkit/protocols/schema/internet/ah.py +40 -0
  287. pcapkit/protocols/schema/internet/hip.py +1184 -0
  288. pcapkit/protocols/schema/internet/hopopt.py +679 -0
  289. pcapkit/protocols/schema/internet/ipv4.py +576 -0
  290. pcapkit/protocols/schema/internet/ipv6.py +63 -0
  291. pcapkit/protocols/schema/internet/ipv6_frag.py +48 -0
  292. pcapkit/protocols/schema/internet/ipv6_opts.py +680 -0
  293. pcapkit/protocols/schema/internet/ipv6_route.py +198 -0
  294. pcapkit/protocols/schema/internet/ipx.py +40 -0
  295. pcapkit/protocols/schema/internet/mh.py +718 -0
  296. pcapkit/protocols/schema/link/__init__.py +19 -0
  297. pcapkit/protocols/schema/link/arp.py +39 -0
  298. pcapkit/protocols/schema/link/ethernet.py +51 -0
  299. pcapkit/protocols/schema/link/l2tp.py +88 -0
  300. pcapkit/protocols/schema/link/ospf.py +90 -0
  301. pcapkit/protocols/schema/link/vlan.py +69 -0
  302. pcapkit/protocols/schema/misc/__init__.py +108 -0
  303. pcapkit/protocols/schema/misc/null.py +18 -0
  304. pcapkit/protocols/schema/misc/pcap/__init__.py +10 -0
  305. pcapkit/protocols/schema/misc/pcap/frame.py +51 -0
  306. pcapkit/protocols/schema/misc/pcap/header.py +63 -0
  307. pcapkit/protocols/schema/misc/pcapng.py +1689 -0
  308. pcapkit/protocols/schema/misc/raw.py +24 -0
  309. pcapkit/protocols/schema/schema.py +809 -0
  310. pcapkit/protocols/schema/transport/__init__.py +69 -0
  311. pcapkit/protocols/schema/transport/tcp.py +928 -0
  312. pcapkit/protocols/schema/transport/udp.py +90 -0
  313. pcapkit/protocols/transport/NotImplemented/dccp.py +0 -0
  314. pcapkit/protocols/transport/NotImplemented/rsvp.py +0 -0
  315. pcapkit/protocols/transport/NotImplemented/sctp.py +0 -0
  316. pcapkit/protocols/transport/__init__.py +27 -0
  317. pcapkit/protocols/transport/tcp.py +3025 -0
  318. pcapkit/protocols/transport/transport.py +158 -0
  319. pcapkit/protocols/transport/udp.py +214 -0
  320. pcapkit/py.typed +0 -0
  321. pcapkit/toolkit/__init__.py +57 -0
  322. pcapkit/toolkit/dpkt.py +306 -0
  323. pcapkit/toolkit/pcap.py +212 -0
  324. pcapkit/toolkit/pcapng.py +251 -0
  325. pcapkit/toolkit/pyshark.py +99 -0
  326. pcapkit/toolkit/scapy.py +297 -0
  327. pcapkit/utilities/__init__.py +20 -0
  328. pcapkit/utilities/compat.py +196 -0
  329. pcapkit/utilities/decorators.py +192 -0
  330. pcapkit/utilities/exceptions.py +365 -0
  331. pcapkit/utilities/logging.py +55 -0
  332. pcapkit/utilities/warnings.py +185 -0
  333. pcapkit/vendor/__init__.py +105 -0
  334. pcapkit/vendor/__main__.py +92 -0
  335. pcapkit/vendor/arp/__init__.py +27 -0
  336. pcapkit/vendor/arp/hardware.py +29 -0
  337. pcapkit/vendor/arp/operation.py +29 -0
  338. pcapkit/vendor/default.py +474 -0
  339. pcapkit/vendor/ftp/__init__.py +27 -0
  340. pcapkit/vendor/ftp/command.py +244 -0
  341. pcapkit/vendor/ftp/return_code.py +256 -0
  342. pcapkit/vendor/hip/__init__.py +94 -0
  343. pcapkit/vendor/hip/certificate.py +29 -0
  344. pcapkit/vendor/hip/cipher.py +29 -0
  345. pcapkit/vendor/hip/di.py +29 -0
  346. pcapkit/vendor/hip/ecdsa_curve.py +29 -0
  347. pcapkit/vendor/hip/ecdsa_low_curve.py +29 -0
  348. pcapkit/vendor/hip/eddsa_curve.py +85 -0
  349. pcapkit/vendor/hip/esp_transform_suite.py +29 -0
  350. pcapkit/vendor/hip/group.py +87 -0
  351. pcapkit/vendor/hip/hi_algorithm.py +29 -0
  352. pcapkit/vendor/hip/hit_suite.py +29 -0
  353. pcapkit/vendor/hip/nat_traversal.py +29 -0
  354. pcapkit/vendor/hip/notify_message.py +29 -0
  355. pcapkit/vendor/hip/packet.py +88 -0
  356. pcapkit/vendor/hip/parameter.py +88 -0
  357. pcapkit/vendor/hip/registration.py +29 -0
  358. pcapkit/vendor/hip/registration_failure.py +29 -0
  359. pcapkit/vendor/hip/suite.py +29 -0
  360. pcapkit/vendor/hip/transport.py +29 -0
  361. pcapkit/vendor/http/__init__.py +39 -0
  362. pcapkit/vendor/http/error_code.py +95 -0
  363. pcapkit/vendor/http/frame.py +91 -0
  364. pcapkit/vendor/http/method.py +167 -0
  365. pcapkit/vendor/http/setting.py +93 -0
  366. pcapkit/vendor/http/status_code.py +185 -0
  367. pcapkit/vendor/ipv4/__init__.py +57 -0
  368. pcapkit/vendor/ipv4/classification_level.py +91 -0
  369. pcapkit/vendor/ipv4/option_class.py +80 -0
  370. pcapkit/vendor/ipv4/option_number.py +105 -0
  371. pcapkit/vendor/ipv4/protection_authority.py +84 -0
  372. pcapkit/vendor/ipv4/qs_function.py +78 -0
  373. pcapkit/vendor/ipv4/router_alert.py +93 -0
  374. pcapkit/vendor/ipv4/tos_del.py +78 -0
  375. pcapkit/vendor/ipv4/tos_ecn.py +95 -0
  376. pcapkit/vendor/ipv4/tos_pre.py +84 -0
  377. pcapkit/vendor/ipv4/tos_rel.py +78 -0
  378. pcapkit/vendor/ipv4/tos_thr.py +77 -0
  379. pcapkit/vendor/ipv4/ts_flag.py +79 -0
  380. pcapkit/vendor/ipv6/__init__.py +53 -0
  381. pcapkit/vendor/ipv6/extension_header.py +171 -0
  382. pcapkit/vendor/ipv6/option.py +104 -0
  383. pcapkit/vendor/ipv6/option_action.py +90 -0
  384. pcapkit/vendor/ipv6/qs_function.py +78 -0
  385. pcapkit/vendor/ipv6/router_alert.py +93 -0
  386. pcapkit/vendor/ipv6/routing.py +87 -0
  387. pcapkit/vendor/ipv6/seed_id.py +81 -0
  388. pcapkit/vendor/ipv6/smf_dpd_mode.py +78 -0
  389. pcapkit/vendor/ipv6/tagger_id.py +81 -0
  390. pcapkit/vendor/ipx/__init__.py +37 -0
  391. pcapkit/vendor/ipx/packet.py +123 -0
  392. pcapkit/vendor/ipx/socket.py +125 -0
  393. pcapkit/vendor/l2tp/__init__.py +21 -0
  394. pcapkit/vendor/l2tp/type.py +78 -0
  395. pcapkit/vendor/mh/__init__.py +204 -0
  396. pcapkit/vendor/mh/access_type.py +87 -0
  397. pcapkit/vendor/mh/ack_status_code.py +88 -0
  398. pcapkit/vendor/mh/ani_suboption.py +88 -0
  399. pcapkit/vendor/mh/auth_subtype.py +83 -0
  400. pcapkit/vendor/mh/binding_ack_flag.py +148 -0
  401. pcapkit/vendor/mh/binding_error.py +78 -0
  402. pcapkit/vendor/mh/binding_revocation.py +87 -0
  403. pcapkit/vendor/mh/binding_update_flag.py +147 -0
  404. pcapkit/vendor/mh/cga_extension.py +91 -0
  405. pcapkit/vendor/mh/cga_sec.py +91 -0
  406. pcapkit/vendor/mh/cga_type.py +74 -0
  407. pcapkit/vendor/mh/dhcp_support_mode.py +77 -0
  408. pcapkit/vendor/mh/dns_status_code.py +87 -0
  409. pcapkit/vendor/mh/dsmip6_tls_packet.py +87 -0
  410. pcapkit/vendor/mh/dsmipv6_home_address.py +87 -0
  411. pcapkit/vendor/mh/enumerating_algorithm.py +82 -0
  412. pcapkit/vendor/mh/fb_ack_status.py +87 -0
  413. pcapkit/vendor/mh/fb_action.py +88 -0
  414. pcapkit/vendor/mh/fb_indication_trigger.py +87 -0
  415. pcapkit/vendor/mh/fb_type.py +88 -0
  416. pcapkit/vendor/mh/flow_id_status.py +87 -0
  417. pcapkit/vendor/mh/flow_id_suboption.py +87 -0
  418. pcapkit/vendor/mh/handoff_type.py +87 -0
  419. pcapkit/vendor/mh/handover_ack_flag.py +143 -0
  420. pcapkit/vendor/mh/handover_ack_status.py +87 -0
  421. pcapkit/vendor/mh/handover_initiate_flag.py +143 -0
  422. pcapkit/vendor/mh/handover_initiate_status.py +87 -0
  423. pcapkit/vendor/mh/home_address_reply.py +87 -0
  424. pcapkit/vendor/mh/lla_code.py +97 -0
  425. pcapkit/vendor/mh/lma_mag_suboption.py +88 -0
  426. pcapkit/vendor/mh/mn_group_id.py +87 -0
  427. pcapkit/vendor/mh/mn_id_subtype.py +87 -0
  428. pcapkit/vendor/mh/operator_id.py +87 -0
  429. pcapkit/vendor/mh/option.py +83 -0
  430. pcapkit/vendor/mh/packet.py +82 -0
  431. pcapkit/vendor/mh/qos_attribute.py +87 -0
  432. pcapkit/vendor/mh/revocation_status_code.py +87 -0
  433. pcapkit/vendor/mh/revocation_trigger.py +87 -0
  434. pcapkit/vendor/mh/status_code.py +91 -0
  435. pcapkit/vendor/mh/traffic_selector.py +87 -0
  436. pcapkit/vendor/mh/upa_status.py +87 -0
  437. pcapkit/vendor/mh/upn_reason.py +87 -0
  438. pcapkit/vendor/ospf/__init__.py +27 -0
  439. pcapkit/vendor/ospf/authentication.py +29 -0
  440. pcapkit/vendor/ospf/packet.py +29 -0
  441. pcapkit/vendor/pcapng/__init__.py +51 -0
  442. pcapkit/vendor/pcapng/block_type.py +94 -0
  443. pcapkit/vendor/pcapng/filter_type.py +77 -0
  444. pcapkit/vendor/pcapng/hash_algorithm.py +82 -0
  445. pcapkit/vendor/pcapng/option_type.py +287 -0
  446. pcapkit/vendor/pcapng/record_type.py +81 -0
  447. pcapkit/vendor/pcapng/secrets_type.py +81 -0
  448. pcapkit/vendor/pcapng/verdict_type.py +79 -0
  449. pcapkit/vendor/reg/__init__.py +34 -0
  450. pcapkit/vendor/reg/apptype.py +338 -0
  451. pcapkit/vendor/reg/ethertype.py +121 -0
  452. pcapkit/vendor/reg/linktype.py +110 -0
  453. pcapkit/vendor/reg/transtype.py +111 -0
  454. pcapkit/vendor/tcp/__init__.py +35 -0
  455. pcapkit/vendor/tcp/checksum.py +80 -0
  456. pcapkit/vendor/tcp/flags.py +149 -0
  457. pcapkit/vendor/tcp/mp_tcp_option.py +90 -0
  458. pcapkit/vendor/tcp/option.py +103 -0
  459. pcapkit/vendor/vlan/__init__.py +23 -0
  460. pcapkit/vendor/vlan/priority_level.py +97 -0
  461. pypcapkit-1.3.3.post1.dist-info/LICENSE +29 -0
  462. pypcapkit-1.3.3.post1.dist-info/METADATA +236 -0
  463. pypcapkit-1.3.3.post1.dist-info/RECORD +466 -0
  464. pypcapkit-1.3.3.post1.dist-info/WHEEL +5 -0
  465. pypcapkit-1.3.3.post1.dist-info/entry_points.txt +3 -0
  466. pypcapkit-1.3.3.post1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,1184 @@
1
+ # -*- coding: utf-8 -*-
2
+ # mypy: disable-error-code=assignment
3
+ """header schema for Host Identity Protocol"""
4
+
5
+ from typing import TYPE_CHECKING, cast
6
+
7
+ from pcapkit.const.hip.certificate import Certificate as Enum_Certificate
8
+ from pcapkit.const.hip.cipher import Cipher as Enum_Cipher
9
+ from pcapkit.const.hip.di import DITypes as Enum_DITypes
10
+ from pcapkit.const.hip.ecdsa_curve import ECDSACurve as Enum_ECDSACurve
11
+ from pcapkit.const.hip.ecdsa_low_curve import ECDSALowCurve as Enum_ECDSALowCurve
12
+ from pcapkit.const.hip.eddsa_curve import EdDSACurve as Enum_EdDSACurve
13
+ from pcapkit.const.hip.esp_transform_suite import ESPTransformSuite as Enum_ESPTransformSuite
14
+ from pcapkit.const.hip.group import Group as Enum_Group
15
+ from pcapkit.const.hip.hi_algorithm import HIAlgorithm as Enum_HIAlgorithm
16
+ from pcapkit.const.hip.hit_suite import HITSuite as Enum_HITSuite
17
+ from pcapkit.const.hip.nat_traversal import NATTraversal as Enum_NATTraversal
18
+ from pcapkit.const.hip.notify_message import NotifyMessage as Enum_NotifyMessage
19
+ from pcapkit.const.hip.parameter import Parameter as Enum_Parameter
20
+ from pcapkit.const.hip.registration import Registration as Enum_Registration
21
+ from pcapkit.const.hip.registration_failure import RegistrationFailure as Enum_RegistrationFailure
22
+ from pcapkit.const.hip.suite import Suite as Enum_Suite
23
+ from pcapkit.const.hip.transport import Transport as Enum_Transport
24
+ from pcapkit.const.reg.transtype import TransType as Enum_TransType
25
+ from pcapkit.corekit.fields.collections import ListField, OptionField
26
+ from pcapkit.corekit.fields.ipaddress import IPv6AddressField
27
+ from pcapkit.corekit.fields.misc import ConditionalField, PayloadField, SchemaField, SwitchField
28
+ from pcapkit.corekit.fields.numbers import (EnumField, NumberField, UInt8Field, UInt16Field,
29
+ UInt32Field)
30
+ from pcapkit.corekit.fields.strings import BitField, BytesField, PaddingField
31
+ from pcapkit.protocols.schema.schema import EnumSchema, Schema, schema_final
32
+ from pcapkit.utilities.exceptions import FieldValueError
33
+ from pcapkit.utilities.logging import SPHINX_TYPE_CHECKING
34
+ from pcapkit.utilities.warnings import ProtocolWarning, warn
35
+
36
+ __all__ = [
37
+ 'HIP',
38
+
39
+ 'LocatorData', 'Locator', 'HostIdentity',
40
+ 'ECDSACurveHostIdentity', 'ECDSALowCurveHostIdentity', 'EdDSACurveHostIdentity',
41
+
42
+ 'UnassignedParameter', 'ESPInfoParameter', 'R1CounterParameter',
43
+ 'LocatorSetParameter', 'PuzzleParameter', 'SolutionParameter',
44
+ 'SEQParameter', 'ACKParameter', 'DHGroupListParameter',
45
+ 'DiffieHellmanParameter', 'HIPTransformParameter', 'HIPCipherParameter',
46
+ 'NATTraversalModeParameter', 'TransactionPacingParameter', 'EncryptedParameter',
47
+ 'HostIDParameter', 'HITSuiteListParameter', 'CertParameter',
48
+ 'NotificationParameter', 'EchoRequestSignedParameter', 'RegInfoParameter',
49
+ 'RegRequestParameter', 'RegResponseParameter', 'RegFailedParameter',
50
+ 'RegFromParameter', 'EchoResponseSignedParameter', 'TransportFormatListParameter',
51
+ 'ESPTransformParameter', 'SeqDataParameter', 'AckDataParameter',
52
+ 'PayloadMICParameter', 'TransactionIDParameter', 'OverlayIDParameter',
53
+ 'RouteDstParameter', 'HIPTransportModeParameter', 'HIPMACParameter',
54
+ 'HIPMAC2Parameter', 'HIPSignature2Parameter', 'HIPSignatureParameter',
55
+ 'EchoRequestUnsignedParameter', 'EchoResponseUnsignedParameter', 'RelayFromParameter',
56
+ 'RelayToParameter', 'RouteViaParameter', 'FromParameter',
57
+ 'RVSHMACParameter', 'RelayHMACParameter',
58
+ ]
59
+
60
+ if TYPE_CHECKING:
61
+ from ipaddress import IPv6Address
62
+ from typing import Any, Optional
63
+
64
+ from pcapkit.corekit.fields.field import FieldBase as Field
65
+ from pcapkit.protocols.data.internet.hip import EncryptedParameter as Data_EncryptedParameter
66
+ from pcapkit.protocols.data.internet.hip import HIPCipherParameter as Data_HIPCipherParameter
67
+ from pcapkit.protocols.protocol import ProtocolBase as Protocol
68
+
69
+ if SPHINX_TYPE_CHECKING:
70
+ from typing_extensions import Literal, TypedDict
71
+
72
+ class PacketType(TypedDict):
73
+ """Packet type."""
74
+
75
+ #: Reversed bit.
76
+ bit_0: Literal[0]
77
+ #: Packet type.
78
+ type: int
79
+
80
+ class VersionType(TypedDict):
81
+ """Version type."""
82
+
83
+ #: Version.
84
+ version: int
85
+ #: Reversed bit.
86
+ bit_1: Literal[1]
87
+
88
+ class ControlsType(TypedDict):
89
+ """Controls type."""
90
+
91
+ #: Anonymous.
92
+ anonymous: bool
93
+
94
+ class LocatorFlags(TypedDict):
95
+ """Locator flags."""
96
+
97
+ #: Preferred flag.
98
+ preferred: bool
99
+
100
+ class DIData(TypedDict):
101
+ """DI type data."""
102
+
103
+ #: DI type.
104
+ type: Enum_DITypes
105
+ #: DI length.
106
+ len: int
107
+
108
+ class RouteFlags(TypedDict):
109
+ """Route destination flags."""
110
+
111
+ #: Symmetric flag.
112
+ symmetric: int
113
+ #: Must-follow flag.
114
+ must_follow: int
115
+
116
+
117
+ def locator_value_selector(pkt: 'dict[str, Any]') -> 'Field':
118
+ """Selector function for :attr:`Locator.value` field.
119
+
120
+ Args:
121
+ pkt: Packet data.
122
+
123
+ Returns:
124
+ * If ``kind`` is ``0`` and ``size`` is ``16``,
125
+ returns an :class:`~pcapkit.corekit.fields.ipaddress.IPv6AddressField` instance.
126
+ * If ``kind`` is ``1`` and ``size`` is ``20``,
127
+ returns a :class:`~pcapkit.corekit.fields.misc.SchemaField` wrapped
128
+ :class:`~pcapkit.protocols.schema.internet.hip.LocatorData` instance.
129
+
130
+ """
131
+ if pkt['type'] == 0 and pkt['len'] == 4:
132
+ return IPv6AddressField()
133
+ if pkt['type'] == 1 and pkt['len'] == 5:
134
+ return SchemaField(
135
+ length=20,
136
+ schema=LocatorData,
137
+ )
138
+ raise FieldValueError('invalid locator type or length')
139
+
140
+
141
+ def host_id_hi_selector(pkt: 'dict[str, Any]') -> 'Field':
142
+ """Selector function for :attr:`HostIDParameter.hi` field.
143
+
144
+ Args:
145
+ pkt: Packet data.
146
+
147
+ Returns:
148
+ * If ``algorithm`` is ``7`` (ECDSA), returns a
149
+ :class:`~pcapkit.corekit.fields.misc.SchemaField` wrapped
150
+ :class:`~pcapkit.protocols.schema.internet.hip.ECDSACurveHostIdentity` instance.
151
+ * If ``algorithm`` is ``9`` (ECDSA_LOW), returns a
152
+ :class:`~pcapkit.corekit.fields.misc.SchemaField` wrapped
153
+ :class:`~pcapkit.protocols.schema.internet.hip.ECDSALowCurveHostIdentity` instance.
154
+ * If ``algorithm`` is ``13`` (EdDSA), returns a
155
+ :class:`~pcapkit.corekit.fields.misc.SchemaField` wrapped
156
+ :class:`~pcapkit.protocols.schema.internet.hip.EdDSACurveHostIdentity` instance.
157
+
158
+ """
159
+ algo = pkt['algorithm']
160
+ schema = HostIdentity.registry[algo]
161
+ if schema is None:
162
+ return BytesField(length=pkt['hi_len'])
163
+ return SchemaField(length=pkt['hi_len'], schema=schema)
164
+
165
+
166
+ class Parameter(EnumSchema[Enum_Parameter]):
167
+ """Base schema for HIP parameters."""
168
+
169
+ __default__ = lambda: UnassignedParameter
170
+
171
+ #: Parameter type.
172
+ type: 'Enum_Parameter' = EnumField(length=2, namespace=Enum_Parameter)
173
+ #: Parameter length.
174
+ len: 'int' = UInt16Field()
175
+
176
+
177
+ @schema_final
178
+ class UnassignedParameter(Parameter):
179
+ """Header schema for HIP unsigned parameters."""
180
+
181
+ #: Parameter value.
182
+ value: 'bytes' = BytesField(length=lambda pkt: pkt['len'])
183
+ #: Padding.
184
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
185
+
186
+ if TYPE_CHECKING:
187
+ def __init__(self, type: 'Enum_Parameter', len: 'int', value: 'bytes') -> 'None': ...
188
+
189
+
190
+ @schema_final
191
+ class ESPInfoParameter(Parameter, code=Enum_Parameter.ESP_INFO):
192
+ """Header schema for HIP ``ESP_INFO`` parameters."""
193
+
194
+ #: Reserved.
195
+ reserved: 'bytes' = PaddingField(length=2)
196
+ #: Key management index.
197
+ index: 'int' = UInt16Field()
198
+ #: Old SPI.
199
+ old_spi: 'int' = UInt32Field()
200
+ #: New SPI.
201
+ new_spi: 'int' = UInt32Field()
202
+ #: Padding.
203
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
204
+
205
+ if TYPE_CHECKING:
206
+ def __init__(self, type: 'Enum_Parameter', len: 'int', index: 'int',
207
+ old_spi: 'int', new_spi: 'int') -> 'None': ...
208
+
209
+
210
+ @schema_final
211
+ class R1CounterParameter(Parameter, code=Enum_Parameter.R1_COUNTER):
212
+ """Header schema for HIP ``R1_COUNTER`` parameters."""
213
+
214
+ #: Reserved.
215
+ reserved: 'bytes' = PaddingField(length=4)
216
+ #: R1 counter.
217
+ counter: 'int' = UInt32Field()
218
+ #: Padding.
219
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
220
+
221
+ if TYPE_CHECKING:
222
+ def __init__(self, type: 'Enum_Parameter', len: 'int', counter: 'int') -> 'None': ...
223
+
224
+
225
+ @schema_final
226
+ class Locator(Schema):
227
+ """Header schema for HIP locators."""
228
+
229
+ #: Traffic type.
230
+ traffic: 'int' = UInt8Field()
231
+ #: Locator type.
232
+ type: 'int' = UInt8Field()
233
+ #: Locator length.
234
+ len: 'int' = UInt8Field()
235
+ #: Reserved and flags.
236
+ flags: 'LocatorFlags' = BitField(
237
+ length=1,
238
+ namespace={
239
+ 'preferred': (7, 1),
240
+ },
241
+ )
242
+ lifetime: 'int' = UInt32Field()
243
+ #: Locator value.
244
+ value: 'IPv6Address | LocatorData' = SwitchField(
245
+ selector=locator_value_selector,
246
+ )
247
+
248
+ if TYPE_CHECKING:
249
+ def __init__(self, traffic: 'int', type: 'int', len: 'int', flags: 'LocatorFlags',
250
+ lifetime: 'int', value: 'bytes | LocatorData') -> 'None': ...
251
+
252
+
253
+ @schema_final
254
+ class LocatorSetParameter(Parameter, code=Enum_Parameter.LOCATOR_SET):
255
+ """Header schema for HIP ``LOCATOR_SET`` parameters."""
256
+
257
+ #: List of locators.
258
+ locators: 'list[Locator]' = ListField(
259
+ length=lambda pkt: pkt['len'],
260
+ item_type=SchemaField(schema=Locator),
261
+ )
262
+ #: Padding.
263
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
264
+
265
+ if TYPE_CHECKING:
266
+ def __init__(self, type: 'Enum_Parameter', len: 'int', locators: 'list[Locator]') -> 'None': ...
267
+
268
+
269
+ @schema_final
270
+ class LocatorData(Schema):
271
+ """Header schema for HIP locator data."""
272
+
273
+ #: SPI.
274
+ spi: 'int' = UInt32Field()
275
+ #: Locator.
276
+ ip: 'IPv6Address' = IPv6AddressField()
277
+
278
+ if TYPE_CHECKING:
279
+ def __init__(self, spi: 'int', ip: 'IPv6Address | int | bytes | str') -> 'None': ...
280
+
281
+
282
+ @schema_final
283
+ class PuzzleParameter(Parameter, code=Enum_Parameter.PUZZLE):
284
+ """Header schema for HIP ``PUZZLE`` parameters."""
285
+
286
+ #: Numeric index.
287
+ index: 'int' = UInt8Field()
288
+ #: Lifetime.
289
+ lifetime: 'int' = UInt8Field()
290
+ #: Opaque data.
291
+ opaque: 'bytes' = BytesField(length=2)
292
+ #: Random data.
293
+ random: 'int' = NumberField(length=lambda pkt: pkt['len'] - 4, signed=False)
294
+ #: Padding.
295
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
296
+
297
+ if TYPE_CHECKING:
298
+ def __init__(self, type: 'Enum_Parameter', len: 'int', index: 'int', lifetime: 'int',
299
+ opaque: 'bytes', random: 'int') -> 'None': ...
300
+
301
+
302
+ @schema_final
303
+ class SolutionParameter(Parameter, code=Enum_Parameter.SOLUTION):
304
+ """Header schema for HIP ``SOLUTION`` parameters."""
305
+
306
+ #: Numeric index.
307
+ index: 'int' = UInt8Field()
308
+ #: Lifetime.
309
+ lifetime: 'int' = UInt8Field()
310
+ #: Opaque data.
311
+ opaque: 'bytes' = BytesField(length=2)
312
+ #: Random data.
313
+ random: 'int' = NumberField(length=lambda pkt: (pkt['len'] - 4) // 2, signed=False)
314
+ #: Solution.
315
+ solution: 'int' = NumberField(length=lambda pkt: (pkt['len'] - 4) // 2, signed=False)
316
+ #: Padding.
317
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
318
+
319
+ if TYPE_CHECKING:
320
+ def __init__(self, type: 'Enum_Parameter', len: 'int', index: 'int', lifetime: 'int',
321
+ opaque: 'bytes', random: 'int', solution: 'int') -> 'None': ...
322
+
323
+
324
+ @schema_final
325
+ class SEQParameter(Parameter, code=Enum_Parameter.SEQ):
326
+ """Header schema for HIP ``SEQ`` parameters."""
327
+
328
+ #: Update ID.
329
+ update_id: 'int' = UInt32Field()
330
+ #: Padding.
331
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
332
+
333
+ if TYPE_CHECKING:
334
+ def __init__(self, type: 'Enum_Parameter', len: 'int', update_id: 'int') -> 'None': ...
335
+
336
+
337
+ @schema_final
338
+ class ACKParameter(Parameter, code=Enum_Parameter.ACK):
339
+ """Header schema for HIP ``ACK`` parameters."""
340
+
341
+ #: Update ID.
342
+ update_id: 'list[int]' = ListField(
343
+ length=lambda pkt: pkt['len'],
344
+ item_type=UInt32Field(),
345
+ )
346
+ #: Padding.
347
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
348
+
349
+ if TYPE_CHECKING:
350
+ def __init__(self, type: 'Enum_Parameter', len: 'int', update_id: 'bytes | list[int]') -> 'None': ...
351
+
352
+
353
+ @schema_final
354
+ class DHGroupListParameter(Parameter, code=Enum_Parameter.DH_GROUP_LIST):
355
+ """Header schema for HIP ``DH_GROUP_LIST`` parameters."""
356
+
357
+ #: List of DH groups.
358
+ groups: 'list[Enum_Group]' = ListField(
359
+ length=lambda pkt: pkt['len'],
360
+ item_type=EnumField(length=1, namespace=Enum_Group),
361
+ )
362
+ #: Padding.
363
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
364
+
365
+ if TYPE_CHECKING:
366
+ def __init__(self, type: 'Enum_Parameter', len: 'int', groups: 'list[Enum_Group]') -> 'None': ...
367
+
368
+
369
+ @schema_final
370
+ class DiffieHellmanParameter(Parameter, code=Enum_Parameter.DIFFIE_HELLMAN):
371
+ """Header schema for HIP ``DIFFIE_HELLMAN`` parameters."""
372
+
373
+ #: Diffie-Hellman group.
374
+ group: 'Enum_Group' = EnumField(length=1, namespace=Enum_Group)
375
+ #: Public value length.
376
+ pub_len: 'int' = UInt16Field()
377
+ #: Diffie-Hellman value.
378
+ pub_val: 'int' = NumberField(length=lambda pkt: pkt['pub_len'], signed=False)
379
+ #: Padding.
380
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
381
+
382
+ if TYPE_CHECKING:
383
+ def __init__(self, type: 'Enum_Parameter', len: 'int', group: 'Enum_Group', pub_len: 'int',
384
+ pub_val: 'int') -> 'None': ...
385
+
386
+
387
+ @schema_final
388
+ class HIPTransformParameter(Parameter, code=Enum_Parameter.HIP_TRANSFORM):
389
+ """Header schema for HIP ``TRANSFORM`` parameters."""
390
+
391
+ #: Suite IDs.
392
+ suites: 'list[Enum_Suite]' = ListField(
393
+ length=lambda pkt: pkt['len'],
394
+ item_type=EnumField(length=2, namespace=Enum_Suite),
395
+ )
396
+ #: Padding.
397
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
398
+
399
+ if TYPE_CHECKING:
400
+ def __init__(self, type: 'Enum_Parameter', len: 'int', suites: 'list[Enum_Suite]') -> 'None': ...
401
+
402
+
403
+ @schema_final
404
+ class HIPCipherParameter(Parameter, code=Enum_Parameter.HIP_CIPHER):
405
+ """Header schema for HIP ``CIPHER`` parameters."""
406
+
407
+ #: Cipher IDs.
408
+ ciphers: 'list[Enum_Cipher]' = ListField(
409
+ length=lambda pkt: pkt['len'],
410
+ item_type=EnumField(length=2, namespace=Enum_Cipher),
411
+ )
412
+ #: Padding.
413
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
414
+
415
+ if TYPE_CHECKING:
416
+ def __init__(self, type: 'Enum_Parameter', len: 'int', ciphers: 'list[Enum_Cipher]') -> 'None': ...
417
+
418
+
419
+ @schema_final
420
+ class NATTraversalModeParameter(Parameter, code=Enum_Parameter.NAT_TRAVERSAL_MODE):
421
+ """Header schema for HIP ``NAT_TRAVERSAL_MODE`` parameters."""
422
+
423
+ #: Reserved.
424
+ reserved: 'bytes' = PaddingField(length=2)
425
+ #: NAT traversal modes.
426
+ modes: 'list[Enum_NATTraversal]' = ListField(
427
+ length=lambda pkt: pkt['len'] - 2,
428
+ item_type=EnumField(length=1, namespace=Enum_NATTraversal),
429
+ )
430
+ #: Padding.
431
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
432
+
433
+ if TYPE_CHECKING:
434
+ def __init__(self, type: 'Enum_Parameter', len: 'int', modes: 'list[Enum_NATTraversal]') -> 'None': ...
435
+
436
+
437
+ @schema_final
438
+ class TransactionPacingParameter(Parameter, code=Enum_Parameter.TRANSACTION_PACING):
439
+ """Header schema for HIP ``TRANSACTION_PACING`` parameters."""
440
+
441
+ #: Transaction pacing.
442
+ min_ta: 'int' = UInt32Field()
443
+ #: Padding.
444
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
445
+
446
+ if TYPE_CHECKING:
447
+ def __init__(self, type: 'Enum_Parameter', len: 'int', min_ta: 'int') -> 'None': ...
448
+
449
+
450
+ @schema_final
451
+ class EncryptedParameter(Parameter, code=Enum_Parameter.ENCRYPTED):
452
+ """Header schema for HIP ``ENCRYPTED`` parameters."""
453
+
454
+ #: Reserved.
455
+ reserved: 'bytes' = PaddingField(length=4)
456
+ #: Initialization vector.
457
+ iv: 'bytes' = ConditionalField(
458
+ BytesField(length=16),
459
+ lambda pkt: pkt['__cipher__'] in (Enum_Cipher.AES_128_CBC, Enum_Cipher.AES_256_CBC),
460
+ )
461
+ #: Data.
462
+ data: 'bytes' = BytesField(
463
+ length=lambda pkt: pkt['len'] - (16 if pkt.get('iv') else 0),
464
+ )
465
+ #: Padding.
466
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
467
+
468
+ @classmethod
469
+ def pre_unpack(cls, packet: 'dict[str, Any]') -> 'None':
470
+ """Prepare ``packet`` data for unpacking process.
471
+
472
+ Args:
473
+ packet: packet data
474
+
475
+ """
476
+ if 'options' in packet:
477
+ cipher_list = cast('list[Data_HIPCipherParameter]',
478
+ packet['options'].getlist(Enum_Parameter.HIP_CIPHER))
479
+ if cipher_list:
480
+ warn(f'HIP: [ParamNo {Enum_Parameter.ENCRYPTED}] '
481
+ 'missing HIP_CIPHER parameter', ProtocolWarning)
482
+ # raise ProtocolError(f'HIPv{version}: [ParamNo {schema.type}] invalid format')
483
+
484
+ cipher_id = Enum_Cipher(0xffff)
485
+ else:
486
+ cipher_ids = [] # type: list[Enum_Cipher]
487
+ for cipher in cipher_list:
488
+ cipher_ids.extend(cipher.cipher_id)
489
+
490
+ encrypted_list = cast('list[Data_EncryptedParameter]',
491
+ packet['options'].getlist(Enum_Parameter.ENCRYPTED))
492
+ encrypted_index = len(encrypted_list)
493
+
494
+ if encrypted_index >= len(cipher_ids):
495
+ warn(f'HIP: [ParamNo {Enum_Parameter.ENCRYPTED}] '
496
+ 'too many ENCRYPTED parameters', ProtocolWarning)
497
+ # raise ProtocolError(f'HIPv{version}: [ParamNo {schema.type}] invalid format')
498
+
499
+ cipher_id = Enum_Cipher(0xfffe)
500
+ else:
501
+ cipher_id = cipher_ids[encrypted_index]
502
+ else:
503
+ warn(f'HIP: [ParamNo {Enum_Parameter.ENCRYPTED}] '
504
+ 'missing HIP_CIPHER parameter', ProtocolWarning)
505
+ cipher_id = Enum_Cipher(0xffff)
506
+
507
+ packet['__cipher__'] = cipher_id
508
+
509
+ def post_process(self, packet: 'dict[str, Any]') -> 'Schema':
510
+ """Revise ``schema`` data after unpacking process.
511
+
512
+ Args:
513
+ packet: Unpacked data.
514
+
515
+ Returns:
516
+ Revised schema.
517
+
518
+ """
519
+ self.cipher = packet['__cipher__']
520
+ return self
521
+
522
+ if TYPE_CHECKING:
523
+ #: Cipher ID.
524
+ cipher: 'Enum_Cipher'
525
+
526
+ def __init__(self, type: 'Enum_Parameter', len: 'int', cipher: 'Enum_Cipher',
527
+ iv: 'Optional[bytes]', data: 'bytes') -> 'None': ...
528
+
529
+
530
+ @schema_final
531
+ class HostIDParameter(Parameter, code=Enum_Parameter.HOST_ID):
532
+ """Header schema for HIP ``HOST_ID`` parameters."""
533
+
534
+ #: Host ID length.
535
+ hi_len: 'int' = UInt16Field()
536
+ #: Domain ID type and length.
537
+ di_data: 'DIData' = BitField(
538
+ length=4,
539
+ namespace={
540
+ 'type': (0, 4),
541
+ 'len': (4, 12),
542
+ },
543
+ )
544
+ #: Algorithm type.
545
+ algorithm: 'Enum_HIAlgorithm' = EnumField(length=2, namespace=Enum_HIAlgorithm)
546
+ #: Host ID.
547
+ hi: 'bytes | HostIdentity' = SwitchField(selector=host_id_hi_selector)
548
+ #: Domain ID.
549
+ di: 'bytes' = BytesField(length=lambda pkt: pkt['di_data']['len'])
550
+ #: Padding.
551
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
552
+
553
+ if TYPE_CHECKING:
554
+ def __init__(self, type: 'Enum_Parameter', len: 'int', hi_len: 'int', di_data: 'DIData',
555
+ algorithm: 'Enum_HIAlgorithm', hi: 'bytes | HostIdentity',
556
+ di: 'bytes') -> 'None': ...
557
+
558
+
559
+ class HostIdentity(EnumSchema[Enum_HIAlgorithm]):
560
+ """Host identity schema."""
561
+
562
+
563
+ @schema_final
564
+ class ECDSACurveHostIdentity(HostIdentity, code=Enum_HIAlgorithm.ECDSA):
565
+ """Host identity schema with ECDSA curve."""
566
+
567
+ #: Algorithm curve type.
568
+ curve: 'Enum_ECDSACurve' = EnumField(length=2, namespace=Enum_ECDSACurve)
569
+ #: Public key.
570
+ pub_key: 'bytes' = BytesField(length=lambda pkt: pkt['__length__'])
571
+
572
+ if TYPE_CHECKING:
573
+ def __init__(self, curve: 'Enum_ECDSACurve', pub_key: 'bytes') -> 'None': ...
574
+
575
+
576
+ @schema_final
577
+ class ECDSALowCurveHostIdentity(HostIdentity, code=Enum_HIAlgorithm.ECDSA_LOW):
578
+ """Host identity schema with ECDSA_LOW curve."""
579
+
580
+ #: Algorithm curve type.
581
+ curve: 'Enum_ECDSALowCurve' = EnumField(length=2, namespace=Enum_ECDSALowCurve)
582
+ #: Public key.
583
+ pub_key: 'bytes' = BytesField(length=lambda pkt: pkt['__length__'])
584
+
585
+ if TYPE_CHECKING:
586
+ def __init__(self, curve: 'Enum_ECDSALowCurve', pub_key: 'bytes') -> 'None': ...
587
+
588
+
589
+ @schema_final
590
+ class EdDSACurveHostIdentity(HostIdentity, code=Enum_HIAlgorithm.EdDSA):
591
+ """Host identity schema with EdDSA curve."""
592
+
593
+ #: Algorithm curve type.
594
+ curve: 'Enum_EdDSACurve' = EnumField(length=2, namespace=Enum_EdDSACurve)
595
+ #: Public key.
596
+ pub_key: 'bytes' = BytesField(length=lambda pkt: pkt['__length__'])
597
+
598
+ if TYPE_CHECKING:
599
+ def __init__(self, curve: 'Enum_EdDSACurve', pub_key: 'bytes') -> 'None': ...
600
+
601
+
602
+ @schema_final
603
+ class HITSuiteListParameter(Parameter, code=Enum_Parameter.HIT_SUITE_LIST):
604
+ """Header schema for HIP ``HIT_SUITE_LIST`` parameters."""
605
+
606
+ #: HIT suite IDs.
607
+ suites: 'list[Enum_HITSuite]' = ListField(
608
+ length=lambda pkt: pkt['len'],
609
+ item_type=EnumField(length=1, namespace=Enum_HITSuite),
610
+ )
611
+ #: Padding.
612
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
613
+
614
+ if TYPE_CHECKING:
615
+ def __init__(self, type: 'Enum_Parameter', len: 'int', suites: 'list[Enum_HITSuite]') -> 'None': ...
616
+
617
+
618
+ @schema_final
619
+ class CertParameter(Parameter, code=Enum_Parameter.CERT):
620
+ """Header schema for HIP ``CERT`` parameters."""
621
+
622
+ #: Certificate group.
623
+ cert_group: 'Enum_Group' = EnumField(length=1, namespace=Enum_Group)
624
+ #: Certificate count.
625
+ cert_count: 'int' = UInt8Field()
626
+ #: Certificate ID.
627
+ cert_id: 'int' = UInt8Field()
628
+ #: Certificate type.
629
+ cert_type: 'Enum_Certificate' = EnumField(length=1, namespace=Enum_Certificate)
630
+ #: Certificate data.
631
+ cert: 'bytes' = BytesField(length=lambda pkt: pkt['len'] - 4)
632
+ #: Padding.
633
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
634
+
635
+ if TYPE_CHECKING:
636
+ def __init__(self, type: 'Enum_Parameter', len: 'int', cert_group: 'Enum_Group', cert_count: 'int',
637
+ cert_id: 'int', cert_type: 'Enum_Certificate', cert: 'bytes') -> 'None': ...
638
+
639
+
640
+ @schema_final
641
+ class NotificationParameter(Parameter, code=Enum_Parameter.NOTIFICATION):
642
+ """Header schema for HIP ``NOTIFICATION`` parameters."""
643
+
644
+ #: Reserved.
645
+ reserved: 'bytes' = PaddingField(length=2)
646
+ #: Notify message type.
647
+ msg_type: 'Enum_NotifyMessage' = EnumField(length=2, namespace=Enum_NotifyMessage)
648
+ #: Notification data.
649
+ msg: 'bytes' = BytesField(length=lambda pkt: pkt['len'] - 4)
650
+ #: Padding.
651
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
652
+
653
+ if TYPE_CHECKING:
654
+ def __init__(self, type: 'Enum_Parameter', len: 'int', msg_type: 'Enum_NotifyMessage', msg: 'bytes') -> 'None': ...
655
+
656
+
657
+ @schema_final
658
+ class EchoRequestSignedParameter(Parameter, code=Enum_Parameter.ECHO_REQUEST_SIGNED):
659
+ """Header schema for HIP ``ECHO_REQUEST_SIGNED`` parameters."""
660
+
661
+ #: Opaque data.
662
+ opaque: 'bytes' = BytesField(length=lambda pkt: pkt['len'])
663
+ #: Padding.
664
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
665
+
666
+ if TYPE_CHECKING:
667
+ def __init__(self, type: 'Enum_Parameter', len: 'int', opaque: 'bytes') -> 'None': ...
668
+
669
+
670
+ @schema_final
671
+ class RegInfoParameter(Parameter, code=Enum_Parameter.REG_INFO):
672
+ """Header schema for HIP ``REG_INFO`` parameters."""
673
+
674
+ #: Minimum lifetime.
675
+ min_lifetime: 'int' = UInt8Field()
676
+ #: Maximum lifetime.
677
+ max_lifetime: 'int' = UInt8Field()
678
+ #: Registration types.
679
+ reg_info: 'list[Enum_Registration]' = ListField(
680
+ length=lambda pkt: pkt['len'] - 2,
681
+ item_type=EnumField(length=1, namespace=Enum_Registration),
682
+ )
683
+ #: Padding.
684
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
685
+
686
+ if TYPE_CHECKING:
687
+ def __init__(self, type: 'Enum_Parameter', len: 'int', min_lifetime: 'int', max_lifetime: 'int',
688
+ reg_info: 'list[Enum_Registration]') -> 'None': ...
689
+
690
+
691
+ @schema_final
692
+ class RegRequestParameter(Parameter, code=Enum_Parameter.REG_REQUEST):
693
+ """Header schema for HIP ``REG_REQUEST`` parameters."""
694
+
695
+ #: Lifetime.
696
+ lifetime: 'int' = UInt8Field()
697
+ #: Registration types.
698
+ reg_request: 'list[Enum_Registration]' = ListField(
699
+ length=lambda pkt: pkt['len'] - 1,
700
+ item_type=EnumField(length=1, namespace=Enum_Registration),
701
+ )
702
+ #: Padding.
703
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
704
+
705
+ if TYPE_CHECKING:
706
+ def __init__(self, type: 'Enum_Parameter', len: 'int', lifetime: 'int', reg_request: 'list[Enum_Registration]') -> 'None': ...
707
+
708
+
709
+ @schema_final
710
+ class RegResponseParameter(Parameter, code=Enum_Parameter.REG_RESPONSE):
711
+ """Header schema for HIP ``REG_RESPONSE`` parameters."""
712
+
713
+ #: Lifetime.
714
+ lifetime: 'int' = UInt8Field()
715
+ #: Registration types.
716
+ reg_response: 'list[Enum_Registration]' = ListField(
717
+ length=lambda pkt: pkt['len'] - 1,
718
+ item_type=EnumField(length=1, namespace=Enum_Registration),
719
+ )
720
+ #: Padding.
721
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
722
+
723
+ if TYPE_CHECKING:
724
+ def __init__(self, type: 'Enum_Parameter', len: 'int', lifetime: 'int', reg_response: 'list[Enum_Registration]') -> 'None': ...
725
+
726
+
727
+ @schema_final
728
+ class RegFailedParameter(Parameter, code=Enum_Parameter.REG_FAILED):
729
+ """Header schema for HIP ``REG_FAILED`` parameters."""
730
+
731
+ #: Lifetime.
732
+ lifetime: 'int' = UInt8Field()
733
+ #: Registration types.
734
+ reg_failed: 'list[Enum_RegistrationFailure]' = ListField(
735
+ length=lambda pkt: pkt['len'] - 1,
736
+ item_type=EnumField(length=1, namespace=Enum_RegistrationFailure),
737
+ )
738
+ #: Padding.
739
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
740
+
741
+ if TYPE_CHECKING:
742
+ def __init__(self, type: 'Enum_Parameter', len: 'int', lifetime: 'int', reg_failed: 'list[Enum_RegistrationFailure]') -> 'None': ...
743
+
744
+
745
+ @schema_final
746
+ class RegFromParameter(Parameter, code=Enum_Parameter.REG_FROM):
747
+ """Header schema for HIP ``REG_FROM`` parameters."""
748
+
749
+ #: Port.
750
+ port: 'int' = UInt16Field()
751
+ #: Protocol.
752
+ protocol: 'Enum_TransType' = EnumField(length=1, namespace=Enum_TransType)
753
+ #: Reserved.
754
+ reserved: 'bytes' = PaddingField(length=1)
755
+ #: Address.
756
+ address: 'IPv6Address' = IPv6AddressField()
757
+
758
+ if TYPE_CHECKING:
759
+ def __init__(self, type: 'Enum_Parameter', len: 'int', port: 'int', protocol: 'Enum_TransType', address: 'IPv6Address | bytes | int | str') -> 'None': ...
760
+
761
+
762
+ @schema_final
763
+ class EchoResponseSignedParameter(Parameter, code=Enum_Parameter.ECHO_RESPONSE_SIGNED):
764
+ """Header schema for HIP ``ECHO_RESPONSE_SIGNED`` parameters."""
765
+
766
+ #: Opaque data.
767
+ opaque: 'bytes' = BytesField(length=lambda pkt: pkt['len'])
768
+ #: Padding.
769
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
770
+
771
+ if TYPE_CHECKING:
772
+ def __init__(self, type: 'Enum_Parameter', len: 'int', opaque: 'bytes') -> 'None': ...
773
+
774
+
775
+ @schema_final
776
+ class TransportFormatListParameter(Parameter, code=Enum_Parameter.TRANSPORT_FORMAT_LIST):
777
+ """Header schema for HIP ``TRANSPORT_FORMAT_LIST`` parameters."""
778
+
779
+ #: Transport formats.
780
+ formats: 'list[Enum_Parameter]' = ListField(
781
+ length=lambda pkt: pkt['len'] - 2,
782
+ item_type=EnumField(length=1, namespace=Enum_Parameter),
783
+ )
784
+ #: Padding.
785
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
786
+
787
+ if TYPE_CHECKING:
788
+ def __init__(self, type: 'Enum_Parameter', len: 'int', formats: 'list[Enum_Parameter]') -> 'None': ...
789
+
790
+
791
+ @schema_final
792
+ class ESPTransformParameter(Parameter, code=Enum_Parameter.ESP_TRANSFORM):
793
+ """Header schema for HIP ``ESP_TRANSFORM`` parameters."""
794
+
795
+ #: Reserved.
796
+ reserved: 'bytes' = PaddingField(length=2)
797
+ #: Suite IDs.
798
+ suites: 'list[Enum_ESPTransformSuite]' = ListField(
799
+ length=lambda pkt: pkt['len'] - 2,
800
+ item_type=EnumField(length=1, namespace=Enum_ESPTransformSuite),
801
+ )
802
+ #: Padding.
803
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
804
+
805
+ if TYPE_CHECKING:
806
+ def __init__(self, type: 'Enum_Parameter', len: 'int', suites: 'list[Enum_ESPTransformSuite]') -> 'None': ...
807
+
808
+
809
+ @schema_final
810
+ class SeqDataParameter(Parameter, code=Enum_Parameter.SEQ_DATA):
811
+ """Header schema for HIP ``SEQ_DATA`` parameters."""
812
+
813
+ #: Sequence number.
814
+ seq: 'int' = UInt32Field()
815
+ #: Padding.
816
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
817
+
818
+ if TYPE_CHECKING:
819
+ def __init__(self, type: 'Enum_Parameter', len: 'int', seq: 'int') -> 'None': ...
820
+
821
+
822
+ @schema_final
823
+ class AckDataParameter(Parameter, code=Enum_Parameter.ACK_DATA):
824
+ """Header schema for HIP ``ACK_DATA`` parameters."""
825
+
826
+ #: Acked sequence number.
827
+ ack: 'list[int]' = ListField(
828
+ length=lambda pkt: pkt['len'],
829
+ item_type=UInt32Field(),
830
+ )
831
+ #: Padding.
832
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
833
+
834
+ if TYPE_CHECKING:
835
+ def __init__(self, type: 'Enum_Parameter', len: 'int', ack: 'list[int]') -> 'None': ...
836
+
837
+
838
+ @schema_final
839
+ class PayloadMICParameter(Parameter, code=Enum_Parameter.PAYLOAD_MIC):
840
+ """Header schema for HIP ``PAYLOAD_MIC`` parameters."""
841
+
842
+ #: Next header.
843
+ next: 'Enum_TransType' = EnumField(length=1, namespace=Enum_TransType)
844
+ #: Reversed.
845
+ reserved: 'bytes' = PaddingField(length=3)
846
+ #: Payload data.
847
+ payload: 'bytes' = BytesField(length=4)
848
+ #: MIC value.
849
+ mic: 'bytes' = BytesField(length=lambda pkt: pkt['len'] - 8)
850
+ #: Padding.
851
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
852
+
853
+ if TYPE_CHECKING:
854
+ def __init__(self, type: 'Enum_Parameter', len: 'int', next: 'Enum_TransType', payload: 'bytes', mic: 'bytes') -> 'None': ...
855
+
856
+
857
+ @schema_final
858
+ class TransactionIDParameter(Parameter, code=Enum_Parameter.TRANSACTION_ID):
859
+ """Header schema for HIP ``TRANSACTION_ID`` parameters."""
860
+
861
+ #: Transaction ID.
862
+ id: 'int' = NumberField(length=lambda pkt: pkt['len'], signed=False)
863
+ #: Padding.
864
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
865
+
866
+ if TYPE_CHECKING:
867
+ def __init__(self, type: 'Enum_Parameter', len: 'int', id: 'int') -> 'None': ...
868
+
869
+
870
+ @schema_final
871
+ class OverlayIDParameter(Parameter, code=Enum_Parameter.OVERLAY_ID):
872
+ """Header schema for HIP ``OVERLAY_ID`` parameters."""
873
+
874
+ #: Overlay ID.
875
+ id: 'int' = NumberField(length=lambda pkt: pkt['len'], signed=False)
876
+ #: Padding.
877
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
878
+
879
+ if TYPE_CHECKING:
880
+ def __init__(self, type: 'Enum_Parameter', len: 'int', id: 'int') -> 'None': ...
881
+
882
+
883
+ @schema_final
884
+ class RouteDstParameter(Parameter, code=Enum_Parameter.ROUTE_DST):
885
+ """Header schema for HIP ``ROUTE_DST`` parameters."""
886
+
887
+ #: Flags.
888
+ flags: 'RouteFlags' = BitField(length=2, namespace={
889
+ 'symmetric': (0, 1),
890
+ 'must_follow': (1, 1),
891
+ })
892
+ #: Reserved.
893
+ reserved: 'bytes' = PaddingField(length=2)
894
+ #: HIT addresses.
895
+ hit: 'list[IPv6Address]' = ListField(
896
+ length=lambda pkt: pkt['len'] - 4,
897
+ item_type=IPv6AddressField(),
898
+ )
899
+ #: Padding.
900
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
901
+
902
+ if TYPE_CHECKING:
903
+ def __init__(self, type: 'Enum_Parameter', len: 'int', flags: 'RouteFlags', hit: 'list[str | int | bytes | IPv6Address]') -> 'None': ...
904
+
905
+
906
+ @schema_final
907
+ class HIPTransportModeParameter(Parameter, code=Enum_Parameter.HIP_TRANSPORT_MODE):
908
+ """Header schema for HIP ``HIP_TRANSPORT_MODE`` parameters."""
909
+
910
+ #: Port.
911
+ port: 'int' = UInt16Field()
912
+ #: Mode IDs.
913
+ mode: 'list[Enum_Transport]' = ListField(
914
+ length=lambda pkt: pkt['len'] - 2,
915
+ item_type=EnumField(length=2, namespace=Enum_Transport),
916
+ )
917
+ #: Padding.
918
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
919
+
920
+ if TYPE_CHECKING:
921
+ def __init__(self, type: 'Enum_Parameter', len: 'int', port: 'int', mode: 'list[Enum_Transport]') -> 'None': ...
922
+
923
+
924
+ @schema_final
925
+ class HIPMACParameter(Parameter, code=Enum_Parameter.HIP_MAC):
926
+ """Header schema for HIP ``HIP_MAC`` parameters."""
927
+
928
+ #: HMAC value.
929
+ hmac: 'bytes' = BytesField(length=lambda pkt: pkt['len'])
930
+ #: Padding.
931
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
932
+
933
+ if TYPE_CHECKING:
934
+ def __init__(self, type: 'Enum_Parameter', len: 'int', hmac: 'bytes') -> 'None': ...
935
+
936
+
937
+ @schema_final
938
+ class HIPMAC2Parameter(Parameter, code=Enum_Parameter.HIP_MAC_2):
939
+ """Header schema for HIP ``HIP_MAC_2`` parameters."""
940
+
941
+ #: HMAC value.
942
+ hmac: 'bytes' = BytesField(length=lambda pkt: pkt['len'])
943
+ #: Padding.
944
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
945
+
946
+ if TYPE_CHECKING:
947
+ def __init__(self, type: 'Enum_Parameter', len: 'int', hmac: 'bytes') -> 'None': ...
948
+
949
+
950
+ @schema_final
951
+ class HIPSignature2Parameter(Parameter, code=Enum_Parameter.HIP_SIGNATURE_2):
952
+ """Header schema for HIP ``HIP_SIGNATURE_2`` parameters."""
953
+
954
+ #: Signature algorithm.
955
+ algorithm: 'Enum_HIAlgorithm' = EnumField(length=2, namespace=Enum_HIAlgorithm)
956
+ #: Signature value.
957
+ signature: 'bytes' = BytesField(length=lambda pkt: pkt['len'] - 2)
958
+ #: Padding.
959
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
960
+
961
+ if TYPE_CHECKING:
962
+ def __init__(self, type: 'Enum_Parameter', len: 'int', algorithm: 'Enum_HIAlgorithm', signature: 'bytes') -> 'None': ...
963
+
964
+
965
+ @schema_final
966
+ class HIPSignatureParameter(Parameter, code=Enum_Parameter.HIP_SIGNATURE):
967
+ """Header schema for HIP ``HIP_SIGNATURE`` parameters."""
968
+
969
+ #: Signature algorithm.
970
+ algorithm: 'Enum_HIAlgorithm' = EnumField(length=2, namespace=Enum_HIAlgorithm)
971
+ #: Signature value.
972
+ signature: 'bytes' = BytesField(length=lambda pkt: pkt['len'] - 2)
973
+ #: Padding.
974
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
975
+
976
+ if TYPE_CHECKING:
977
+ def __init__(self, type: 'Enum_Parameter', len: 'int', algorithm: 'Enum_HIAlgorithm', signature: 'bytes') -> 'None': ...
978
+
979
+
980
+ @schema_final
981
+ class EchoRequestUnsignedParameter(Parameter, code=Enum_Parameter.ECHO_REQUEST_UNSIGNED):
982
+ """Header schema for HIP ``ECHO_REQUEST_UNSIGNED`` parameters."""
983
+
984
+ #: Opaque data.
985
+ opaque: 'bytes' = BytesField(length=lambda pkt: pkt['len'])
986
+ #: Padding.
987
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
988
+
989
+ if TYPE_CHECKING:
990
+ def __init__(self, type: 'Enum_Parameter', len: 'int', opaque: 'bytes') -> 'None': ...
991
+
992
+
993
+ @schema_final
994
+ class EchoResponseUnsignedParameter(Parameter, code=Enum_Parameter.ECHO_RESPONSE_UNSIGNED):
995
+ """Header schema for HIP ``ECHO_RESPONSE_UNSIGNED`` parameters."""
996
+
997
+ #: Opaque data.
998
+ opaque: 'bytes' = BytesField(length=lambda pkt: pkt['len'])
999
+ #: Padding.
1000
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
1001
+
1002
+ if TYPE_CHECKING:
1003
+ def __init__(self, type: 'Enum_Parameter', len: 'int', opaque: 'bytes') -> 'None': ...
1004
+
1005
+
1006
+ @schema_final
1007
+ class RelayFromParameter(Parameter, code=Enum_Parameter.RELAY_FROM):
1008
+ """Header schema for HIP ``RELAY_FROM`` parameters."""
1009
+
1010
+ #: Port.
1011
+ port: 'int' = UInt16Field()
1012
+ #: Protocol.
1013
+ protocol: 'Enum_TransType' = EnumField(length=1, namespace=Enum_TransType)
1014
+ #: Reserved.
1015
+ reserved: 'bytes' = PaddingField(length=1)
1016
+ #: Address.
1017
+ address: 'IPv6Address' = IPv6AddressField()
1018
+
1019
+ if TYPE_CHECKING:
1020
+ def __init__(self, type: 'Enum_Parameter', len: 'int', port: 'int', protocol: 'Enum_TransType', address: 'str | bytes | int | IPv6Address') -> 'None': ...
1021
+
1022
+
1023
+ @schema_final
1024
+ class RelayToParameter(Parameter, code=Enum_Parameter.RELAY_TO):
1025
+ """Header schema for HIP ``RELAY_TO`` parameters."""
1026
+
1027
+ #: Port.
1028
+ port: 'int' = UInt16Field()
1029
+ #: Protocol.
1030
+ protocol: 'Enum_TransType' = EnumField(length=1, namespace=Enum_TransType)
1031
+ #: Reserved.
1032
+ reserved: 'bytes' = PaddingField(length=1)
1033
+ #: Address.
1034
+ address: 'IPv6Address' = IPv6AddressField()
1035
+
1036
+ if TYPE_CHECKING:
1037
+ def __init__(self, type: 'Enum_Parameter', len: 'int', port: 'int', protocol: 'Enum_TransType', address: 'str | bytes | int | IPv6Address') -> 'None': ...
1038
+
1039
+
1040
+ @schema_final
1041
+ class OverlayTTLParameter(Parameter, code=Enum_Parameter.OVERLAY_TTL):
1042
+ """Header schema for HIP ``OVERLAY_TTL`` parameters."""
1043
+
1044
+ #: TTL value.
1045
+ ttl: 'int' = UInt16Field()
1046
+ #: Reserved.
1047
+ reserved: 'bytes' = PaddingField(length=2)
1048
+ #: Padding.
1049
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
1050
+
1051
+ if TYPE_CHECKING:
1052
+ def __init__(self, type: 'Enum_Parameter', len: 'int', ttl: 'int') -> 'None': ...
1053
+
1054
+
1055
+ @schema_final
1056
+ class RouteViaParameter(Parameter, code=Enum_Parameter.ROUTE_VIA):
1057
+ """Header schema for HIP ``ROUTE_VIA`` parameters."""
1058
+
1059
+ #: Flags.
1060
+ flags: 'RouteFlags' = BitField(length=2, namespace={
1061
+ 'symmetric': (0, 1),
1062
+ 'must_follow': (1, 1),
1063
+ })
1064
+ #: Reserved.
1065
+ reserved: 'bytes' = PaddingField(length=2)
1066
+ #: HIT addresses.
1067
+ hit: 'list[IPv6Address]' = ListField(
1068
+ length=lambda pkt: pkt['len'] - 4,
1069
+ item_type=IPv6AddressField(),
1070
+ )
1071
+ #: Padding.
1072
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
1073
+
1074
+ if TYPE_CHECKING:
1075
+ def __init__(self, type: 'Enum_Parameter', len: 'int', flags: 'RouteFlags', hit: 'list[str | bytes | int | IPv6Address]') -> 'None': ...
1076
+
1077
+
1078
+ @schema_final
1079
+ class FromParameter(Parameter, code=Enum_Parameter.FROM):
1080
+ """Header schema for HIP ``FROM`` parameters."""
1081
+
1082
+ #: Address.
1083
+ address: 'IPv6Address' = IPv6AddressField()
1084
+ #: Padding.
1085
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
1086
+
1087
+ if TYPE_CHECKING:
1088
+ def __init__(self, type: 'Enum_Parameter', len: 'int', address: 'str | bytes | int | IPv6Address') -> 'None': ...
1089
+
1090
+
1091
+ @schema_final
1092
+ class RVSHMACParameter(Parameter, code=Enum_Parameter.RVS_HMAC):
1093
+ """Header schema for HIP ``RVS_HMAC`` parameters."""
1094
+
1095
+ #: HMAC value.
1096
+ hmac: 'bytes' = BytesField(length=lambda pkt: pkt['len'])
1097
+ #: Padding.
1098
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
1099
+
1100
+ if TYPE_CHECKING:
1101
+ def __init__(self, type: 'Enum_Parameter', len: 'int', hmac: 'bytes') -> 'None': ...
1102
+
1103
+
1104
+ @schema_final
1105
+ class ViaRVSParameter(Parameter, code=Enum_Parameter.VIA_RVS):
1106
+ """Header schema for HIP ``VIA_RVS`` parameters."""
1107
+
1108
+ #: Address.
1109
+ address: 'list[IPv6Address]' = ListField(
1110
+ length=lambda pkt: pkt['len'],
1111
+ item_type=IPv6AddressField(),
1112
+ )
1113
+ #: Padding.
1114
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
1115
+
1116
+ if TYPE_CHECKING:
1117
+ def __init__(self, type: 'Enum_Parameter', len: 'int', address: 'list[str | bytes | int | IPv6Address]') -> 'None': ...
1118
+
1119
+
1120
+ @schema_final
1121
+ class RelayHMACParameter(Parameter, code=Enum_Parameter.RELAY_HMAC):
1122
+ """Header schema for HIP ``RELAY_HMAC`` parameters."""
1123
+
1124
+ #: HMAC value.
1125
+ hmac: 'bytes' = BytesField(length=lambda pkt: pkt['len'])
1126
+ #: Padding.
1127
+ padding: 'bytes' = PaddingField(length=lambda pkt: (8 - (pkt['len'] % 8)) % 8)
1128
+
1129
+ if TYPE_CHECKING:
1130
+ def __init__(self, type: 'Enum_Parameter', len: 'int', hmac: 'bytes') -> 'None': ...
1131
+
1132
+
1133
+ @schema_final
1134
+ class HIP(Schema):
1135
+ """Header schema for HIP packet."""
1136
+
1137
+ #: Next header.
1138
+ next: 'Enum_TransType' = EnumField(length=1, namespace=Enum_TransType)
1139
+ #: Header length.
1140
+ len: 'int' = UInt8Field()
1141
+ #: Packet type.
1142
+ pkt: 'PacketType' = BitField(
1143
+ length=1,
1144
+ namespace={
1145
+ 'bit_0': (0, 1),
1146
+ 'type': (1, 7),
1147
+ },
1148
+ )
1149
+ #: HIP version.
1150
+ ver: 'VersionType' = BitField(
1151
+ length=1,
1152
+ namespace={
1153
+ 'version': (0, 4),
1154
+ 'bit_1': (7, 1),
1155
+ },
1156
+ )
1157
+ #: Checksum.
1158
+ checksum: 'bytes' = BytesField(length=2)
1159
+ #: HIP controls.
1160
+ control: 'ControlsType' = BitField(
1161
+ length=2,
1162
+ namespace={
1163
+ 'anonymous': (15, 1),
1164
+ },
1165
+ )
1166
+ #: Sender's host identity tag.
1167
+ shit: 'int' = NumberField(length=16, signed=False)
1168
+ #: Receiver's host identity tag.
1169
+ rhit: 'int' = NumberField(length=16, signed=False)
1170
+ #: HIP parameters.
1171
+ param: 'list[Parameter]' = OptionField(
1172
+ length=lambda pkt: (pkt['len'] - 4) * 8,
1173
+ base_schema=Parameter,
1174
+ type_name='type',
1175
+ registry=Parameter.registry,
1176
+ )
1177
+ #: Payload.
1178
+ payload: 'bytes' = PayloadField()
1179
+
1180
+ if TYPE_CHECKING:
1181
+ def __init__(self, next: 'Enum_TransType', len: 'int', pkt: 'PacketType',
1182
+ ver: 'VersionType', checksum: 'bytes', control: 'ControlsType',
1183
+ shit: 'int', rhit: 'int', param: 'bytes | list[bytes | Parameter]',
1184
+ payload: 'bytes | Protocol | Schema') -> 'None': ...