netprotocols 2.6.0__tar.gz → 2.8.0__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 (277) hide show
  1. {netprotocols-2.6.0 → netprotocols-2.8.0}/.github/workflows/ci.yml +8 -8
  2. netprotocols-2.8.0/.github/workflows/codeql.yml +100 -0
  3. {netprotocols-2.6.0 → netprotocols-2.8.0}/.github/workflows/fuzz.yml +4 -4
  4. {netprotocols-2.6.0 → netprotocols-2.8.0}/.github/workflows/mutation.yml +2 -2
  5. {netprotocols-2.6.0 → netprotocols-2.8.0}/.github/workflows/release.yml +3 -3
  6. {netprotocols-2.6.0 → netprotocols-2.8.0}/.github/workflows/scorecard.yml +2 -2
  7. {netprotocols-2.6.0 → netprotocols-2.8.0}/.gitignore +2 -1
  8. {netprotocols-2.6.0 → netprotocols-2.8.0}/ARCHITECTURE.md +333 -18
  9. {netprotocols-2.6.0 → netprotocols-2.8.0}/CHANGELOG.md +46 -0
  10. {netprotocols-2.6.0 → netprotocols-2.8.0}/CONTRIBUTING.md +13 -2
  11. {netprotocols-2.6.0 → netprotocols-2.8.0}/PKG-INFO +50 -25
  12. {netprotocols-2.6.0 → netprotocols-2.8.0}/README.md +49 -24
  13. {netprotocols-2.6.0 → netprotocols-2.8.0}/SECURITY.md +7 -0
  14. {netprotocols-2.6.0 → netprotocols-2.8.0}/docs/CLAIMS.md +745 -93
  15. {netprotocols-2.6.0 → netprotocols-2.8.0}/pyproject.toml +16 -4
  16. netprotocols-2.8.0/scripts/benchmark_encode.py +133 -0
  17. netprotocols-2.8.0/scripts/capture_fixtures_hsrp.sh +305 -0
  18. netprotocols-2.8.0/scripts/capture_fixtures_ntp.sh +346 -0
  19. netprotocols-2.8.0/scripts/capture_fixtures_radius.sh +338 -0
  20. netprotocols-2.8.0/scripts/capture_fixtures_stun.sh +530 -0
  21. netprotocols-2.8.0/scripts/capture_fixtures_tftp.sh +312 -0
  22. netprotocols-2.8.0/scripts/capture_fixtures_tls.sh +565 -0
  23. {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/check_fixtures.py +684 -9
  24. {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/check_mutmut_survivors.py +1 -1
  25. {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/extract_http_streams.py +4 -1
  26. netprotocols-2.8.0/scripts/filter_codeql_sarif.py +348 -0
  27. netprotocols-2.8.0/scripts/survey_protocols.py +783 -0
  28. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/__init__.py +28 -1
  29. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/_base.py +21 -5
  30. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/_defaults.py +45 -0
  31. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/_tlv.py +20 -3
  32. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/checksum.py +172 -24
  33. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/flow.py +22 -6
  34. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer3/ipv6_ext.py +132 -2
  35. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer4/sctp.py +4 -3
  36. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer7/__init__.py +27 -0
  37. netprotocols-2.8.0/src/netprotocols/layer7/hsrp.py +395 -0
  38. netprotocols-2.8.0/src/netprotocols/layer7/ntp.py +757 -0
  39. netprotocols-2.8.0/src/netprotocols/layer7/radius.py +559 -0
  40. netprotocols-2.8.0/src/netprotocols/layer7/stun.py +786 -0
  41. netprotocols-2.8.0/src/netprotocols/layer7/tftp.py +551 -0
  42. netprotocols-2.8.0/src/netprotocols/layer7/tls.py +1354 -0
  43. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/packet.py +89 -23
  44. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/walk.py +34 -14
  45. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/conftest.py +92 -0
  46. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/MANIFEST.md +337 -8
  47. netprotocols-2.8.0/tests/fixtures/codeql/python.sarif +1 -0
  48. netprotocols-2.8.0/tests/fixtures/hsrp.pcap +0 -0
  49. netprotocols-2.8.0/tests/fixtures/ntp.pcap +0 -0
  50. netprotocols-2.8.0/tests/fixtures/radius.pcap +0 -0
  51. netprotocols-2.8.0/tests/fixtures/stun/stun_rfc3489.pcap +0 -0
  52. netprotocols-2.8.0/tests/fixtures/stun.pcap +0 -0
  53. netprotocols-2.8.0/tests/fixtures/tftp.pcap +0 -0
  54. netprotocols-2.8.0/tests/fixtures/tls/tls_session.pcap +0 -0
  55. netprotocols-2.8.0/tests/fixtures/tls.pcap +0 -0
  56. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fuzz/fuzz_decode_frame.py +8 -4
  57. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/strategies.py +201 -0
  58. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_bgp.py +28 -0
  59. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_checksum.py +1076 -4
  60. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_contract.py +92 -0
  61. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_corpus.py +63 -1
  62. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_dns.py +2 -2
  63. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_docs.py +6 -0
  64. netprotocols-2.8.0/tests/test_filter_codeql_sarif.py +685 -0
  65. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_flow.py +2 -3
  66. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_fuzz.py +873 -1
  67. netprotocols-2.8.0/tests/test_hsrp.py +1257 -0
  68. netprotocols-2.8.0/tests/test_ipv6_routing_final_dst.py +200 -0
  69. netprotocols-2.8.0/tests/test_ntp.py +897 -0
  70. netprotocols-2.8.0/tests/test_radius.py +853 -0
  71. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_sctp.py +38 -0
  72. netprotocols-2.8.0/tests/test_stun.py +1104 -0
  73. netprotocols-2.8.0/tests/test_tftp.py +732 -0
  74. netprotocols-2.8.0/tests/test_tls.py +2525 -0
  75. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_tlv.py +93 -0
  76. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_workflows.py +277 -6
  77. {netprotocols-2.6.0 → netprotocols-2.8.0}/uv.lock +103 -98
  78. netprotocols-2.6.0/.github/workflows/codeql.yml +0 -50
  79. netprotocols-2.6.0/scripts/benchmark_encode.py +0 -107
  80. netprotocols-2.6.0/tests/fixtures/staging/ah.pcap +0 -0
  81. netprotocols-2.6.0/tests/fixtures/staging/arp_exchange.pcap +0 -0
  82. netprotocols-2.6.0/tests/fixtures/staging/bgp/bgp_session.pcap +0 -0
  83. netprotocols-2.6.0/tests/fixtures/staging/bgp.pcap +0 -0
  84. netprotocols-2.6.0/tests/fixtures/staging/dhcp.pcap +0 -0
  85. netprotocols-2.6.0/tests/fixtures/staging/dns_tcp.pcap +0 -0
  86. netprotocols-2.6.0/tests/fixtures/staging/esp.pcap +0 -0
  87. netprotocols-2.6.0/tests/fixtures/staging/gre.pcap +0 -0
  88. netprotocols-2.6.0/tests/fixtures/staging/http.pcap +0 -0
  89. netprotocols-2.6.0/tests/fixtures/staging/icmpv4_echo_lo.pcap +0 -0
  90. netprotocols-2.6.0/tests/fixtures/staging/icmpv4_external.pcap +0 -0
  91. netprotocols-2.6.0/tests/fixtures/staging/icmpv4_ttl_exceeded.pcap +0 -0
  92. netprotocols-2.6.0/tests/fixtures/staging/icmpv6_echo_lo.pcap +0 -0
  93. netprotocols-2.6.0/tests/fixtures/staging/igmp.pcap +0 -0
  94. netprotocols-2.6.0/tests/fixtures/staging/ipip.pcap +0 -0
  95. netprotocols-2.6.0/tests/fixtures/staging/ipv4_fragments.pcap +0 -0
  96. netprotocols-2.6.0/tests/fixtures/staging/ipv6_fragments.pcap +0 -0
  97. netprotocols-2.6.0/tests/fixtures/staging/ipv6_mld.pcap +0 -0
  98. netprotocols-2.6.0/tests/fixtures/staging/ipv6_ndp_mld.pcap +0 -0
  99. netprotocols-2.6.0/tests/fixtures/staging/llc.pcap +0 -0
  100. netprotocols-2.6.0/tests/fixtures/staging/lldp.pcap +0 -0
  101. netprotocols-2.6.0/tests/fixtures/staging/mpls/mpls_snaplen.pcap +0 -0
  102. netprotocols-2.6.0/tests/fixtures/staging/mpls.pcap +0 -0
  103. netprotocols-2.6.0/tests/fixtures/staging/ospf.pcap +0 -0
  104. netprotocols-2.6.0/tests/fixtures/staging/pim.pcap +0 -0
  105. netprotocols-2.6.0/tests/fixtures/staging/rip.pcap +0 -0
  106. netprotocols-2.6.0/tests/fixtures/staging/sctp.pcap +0 -0
  107. netprotocols-2.6.0/tests/fixtures/tcp_http.pcap +0 -0
  108. netprotocols-2.6.0/tests/fixtures/tcp_https.pcap +0 -0
  109. netprotocols-2.6.0/tests/fixtures/udp_dns.pcap +0 -0
  110. netprotocols-2.6.0/tests/fixtures/vlan_icmp.pcap +0 -0
  111. netprotocols-2.6.0/tests/fixtures/vrrp.pcap +0 -0
  112. netprotocols-2.6.0/tests/fixtures/vxlan.pcap +0 -0
  113. {netprotocols-2.6.0 → netprotocols-2.8.0}/.claude/skills/steward/SKILL.md +0 -0
  114. {netprotocols-2.6.0 → netprotocols-2.8.0}/.gitattributes +0 -0
  115. {netprotocols-2.6.0 → netprotocols-2.8.0}/.github/CODEOWNERS +0 -0
  116. {netprotocols-2.6.0 → netprotocols-2.8.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  117. {netprotocols-2.6.0 → netprotocols-2.8.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  118. {netprotocols-2.6.0 → netprotocols-2.8.0}/.github/ISSUE_TEMPLATE/protocol_request.yml +0 -0
  119. {netprotocols-2.6.0 → netprotocols-2.8.0}/.github/dependabot.yml +0 -0
  120. {netprotocols-2.6.0 → netprotocols-2.8.0}/.github/pull_request_template.md +0 -0
  121. {netprotocols-2.6.0 → netprotocols-2.8.0}/.github/workflows/docs-lint.yml +0 -0
  122. {netprotocols-2.6.0 → netprotocols-2.8.0}/.github/workflows/pr-title-lint.yml +0 -0
  123. {netprotocols-2.6.0 → netprotocols-2.8.0}/LICENSE +0 -0
  124. {netprotocols-2.6.0 → netprotocols-2.8.0}/benchmarks/baseline.json +0 -0
  125. {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/_pcap.py +0 -0
  126. {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/benchmark.py +0 -0
  127. {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/benchmark_import.py +0 -0
  128. {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures.sh +0 -0
  129. {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures_bgp.sh +0 -0
  130. {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures_dhcp.sh +0 -0
  131. {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures_dns_tcp.sh +0 -0
  132. {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures_gre.sh +0 -0
  133. {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures_http.sh +0 -0
  134. {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures_igmp.sh +0 -0
  135. {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures_ipip.sh +0 -0
  136. {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures_ipsec.sh +0 -0
  137. {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures_llc.sh +0 -0
  138. {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures_lldp.sh +0 -0
  139. {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures_mpls.sh +0 -0
  140. {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures_ospf.sh +0 -0
  141. {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures_pim.sh +0 -0
  142. {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures_rip.sh +0 -0
  143. {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures_sctp.sh +0 -0
  144. {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures_supplement.sh +0 -0
  145. {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures_vlan.sh +0 -0
  146. {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures_vrrp.sh +0 -0
  147. {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures_vxlan.sh +0 -0
  148. {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/ipsec_fixture_packets.py +0 -0
  149. {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/llc_fixture_frames.py +0 -0
  150. {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/mpls_fixture_packets.py +0 -0
  151. {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/mutmut_survivors.txt +0 -0
  152. {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/pyodide/check_in_pyodide.py +0 -0
  153. {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/pyodide/package-lock.json +0 -0
  154. {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/pyodide/package.json +0 -0
  155. {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/pyodide/run_in_pyodide.mjs +0 -0
  156. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/_enums.py +0 -0
  157. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer2/__init__.py +0 -0
  158. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer2/arp.py +0 -0
  159. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer2/cdp.py +0 -0
  160. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer2/ethernet.py +0 -0
  161. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer2/llc.py +0 -0
  162. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer2/lldp.py +0 -0
  163. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer2/mpls.py +0 -0
  164. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer2/stp.py +0 -0
  165. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer2/vlan.py +0 -0
  166. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer3/__init__.py +0 -0
  167. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer3/ah.py +0 -0
  168. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer3/esp.py +0 -0
  169. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer3/gre.py +0 -0
  170. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer3/icmp.py +0 -0
  171. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer3/igmp.py +0 -0
  172. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer3/ip.py +0 -0
  173. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer3/ospf.py +0 -0
  174. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer3/pim.py +0 -0
  175. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer3/vrrp.py +0 -0
  176. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer4/__init__.py +0 -0
  177. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer4/_ports.py +0 -0
  178. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer4/tcp.py +0 -0
  179. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer4/udp.py +0 -0
  180. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer7/bgp.py +0 -0
  181. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer7/dhcp.py +0 -0
  182. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer7/dns.py +0 -0
  183. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer7/http.py +0 -0
  184. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer7/rip.py +0 -0
  185. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer7/vxlan.py +0 -0
  186. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/pcap.py +0 -0
  187. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/py.typed +0 -0
  188. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/registry.py +0 -0
  189. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/utils/__init__.py +0 -0
  190. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/utils/exceptions.py +0 -0
  191. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/utils/ipv4.py +0 -0
  192. {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/utils/mac.py +0 -0
  193. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/ah.pcap +0 -0
  194. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/arp_exchange.pcap +0 -0
  195. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/bgp/bgp_session.pcap +0 -0
  196. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/bgp.pcap +0 -0
  197. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/dhcp.pcap +0 -0
  198. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/dns_tcp.pcap +0 -0
  199. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/esp.pcap +0 -0
  200. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/gre.pcap +0 -0
  201. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/http/01.request +0 -0
  202. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/http/01.response +0 -0
  203. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/http/02.request +0 -0
  204. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/http/02.response +0 -0
  205. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/http/03.request +0 -0
  206. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/http/03.response +0 -0
  207. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/http/04.request +0 -0
  208. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/http/04.response +0 -0
  209. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/http/05.request +0 -0
  210. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/http/05.response +0 -0
  211. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/http/06.request +0 -0
  212. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/http/06.response +0 -0
  213. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/http/07.request +0 -0
  214. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/http/07.response +0 -0
  215. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/http/http.pcap +0 -0
  216. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/icmpv4_echo_lo.pcap +0 -0
  217. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/icmpv4_external.pcap +0 -0
  218. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/icmpv4_ttl_exceeded.pcap +0 -0
  219. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/icmpv6_echo_lo.pcap +0 -0
  220. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/igmp.pcap +0 -0
  221. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/ipip.pcap +0 -0
  222. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/ipv4_fragments.pcap +0 -0
  223. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/ipv6_fragments.pcap +0 -0
  224. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/ipv6_mld.pcap +0 -0
  225. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/ipv6_ndp_mld.pcap +0 -0
  226. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/llc.pcap +0 -0
  227. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/lldp.pcap +0 -0
  228. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/mpls/mpls_snaplen.pcap +0 -0
  229. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/mpls.pcap +0 -0
  230. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/ospf.pcap +0 -0
  231. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/pim.pcap +0 -0
  232. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/rip.pcap +0 -0
  233. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/sctp.pcap +0 -0
  234. {netprotocols-2.6.0/tests/fixtures/staging → netprotocols-2.8.0/tests/fixtures}/tcp_http.pcap +0 -0
  235. {netprotocols-2.6.0/tests/fixtures/staging → netprotocols-2.8.0/tests/fixtures}/tcp_https.pcap +0 -0
  236. {netprotocols-2.6.0/tests/fixtures/staging → netprotocols-2.8.0/tests/fixtures}/udp_dns.pcap +0 -0
  237. {netprotocols-2.6.0/tests/fixtures/staging → netprotocols-2.8.0/tests/fixtures}/vlan_icmp.pcap +0 -0
  238. {netprotocols-2.6.0/tests/fixtures/staging → netprotocols-2.8.0/tests/fixtures}/vrrp.pcap +0 -0
  239. {netprotocols-2.6.0/tests/fixtures/staging → netprotocols-2.8.0/tests/fixtures}/vxlan.pcap +0 -0
  240. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fuzz/fuzz_http_decode.py +0 -0
  241. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_ah.py +0 -0
  242. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_arp.py +0 -0
  243. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_cdp.py +0 -0
  244. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_dhcp.py +0 -0
  245. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_diagnostics.py +0 -0
  246. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_enums.py +0 -0
  247. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_esp.py +0 -0
  248. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_ethernet.py +0 -0
  249. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_exports.py +0 -0
  250. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_extract_http_streams.py +0 -0
  251. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_gre.py +0 -0
  252. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_http.py +0 -0
  253. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_icmp.py +0 -0
  254. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_igmp.py +0 -0
  255. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_ip.py +0 -0
  256. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_ipip.py +0 -0
  257. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_ipv6_ext.py +0 -0
  258. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_llc.py +0 -0
  259. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_lldp.py +0 -0
  260. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_mpls.py +0 -0
  261. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_mutmut_gate.py +0 -0
  262. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_ospf.py +0 -0
  263. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_packet.py +0 -0
  264. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_pattern_matching.py +0 -0
  265. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_pcap.py +0 -0
  266. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_pim.py +0 -0
  267. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_registry.py +0 -0
  268. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_rip.py +0 -0
  269. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_stp.py +0 -0
  270. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_tcp.py +0 -0
  271. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_udp.py +0 -0
  272. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_utils.py +0 -0
  273. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_version.py +0 -0
  274. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_vlan.py +0 -0
  275. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_vrrp.py +0 -0
  276. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_vxlan.py +0 -0
  277. {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_walk.py +0 -0
@@ -33,7 +33,7 @@ jobs:
33
33
  runs-on: ubuntu-latest
34
34
  steps:
35
35
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
36
- - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
36
+ - uses: astral-sh/setup-uv@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2
37
37
  with:
38
38
  python-version: "3.12"
39
39
  - run: uv run ruff check
@@ -43,7 +43,7 @@ jobs:
43
43
  runs-on: ubuntu-latest
44
44
  steps:
45
45
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
46
- - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
46
+ - uses: astral-sh/setup-uv@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2
47
47
  with:
48
48
  python-version: "3.12"
49
49
  - run: uv run mypy
@@ -55,7 +55,7 @@ jobs:
55
55
  python-version: ["3.12", "3.13", "3.14"]
56
56
  steps:
57
57
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
58
- - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
58
+ - uses: astral-sh/setup-uv@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2
59
59
  with:
60
60
  python-version: ${{ matrix.python-version }}
61
61
  - run: uv run --frozen pytest --cov=netprotocols --cov-report=term
@@ -70,7 +70,7 @@ jobs:
70
70
  runs-on: ubuntu-latest
71
71
  steps:
72
72
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
73
- - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
73
+ - uses: astral-sh/setup-uv@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2
74
74
  with:
75
75
  python-version: "3.12"
76
76
  - name: Export dev dependencies
@@ -86,7 +86,7 @@ jobs:
86
86
  runs-on: ubuntu-latest
87
87
  steps:
88
88
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
89
- - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
89
+ - uses: astral-sh/setup-uv@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2
90
90
  - run: uv build
91
91
  - run: uv run --isolated --no-project --with dist/*.whl python -c "import netprotocols; print(netprotocols.__version__)"
92
92
  # Builds are supposed to be a pure function of the source tree, so
@@ -119,11 +119,11 @@ jobs:
119
119
  runs-on: ubuntu-latest
120
120
  steps:
121
121
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
122
- - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
122
+ - uses: astral-sh/setup-uv@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2
123
123
  with:
124
124
  python-version: "3.12"
125
125
  - run: uv build
126
- - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
126
+ - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
127
127
  with:
128
128
  node-version: "22"
129
129
  - run: npm ci
@@ -151,7 +151,7 @@ jobs:
151
151
  runs-on: ubuntu-latest
152
152
  steps:
153
153
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
154
- - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
154
+ - uses: astral-sh/setup-uv@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2
155
155
  with:
156
156
  python-version: "3.12"
157
157
  - name: Corpus decode throughput
@@ -0,0 +1,100 @@
1
+ name: CodeQL
2
+
3
+ # Advanced-setup workflow (a checked-in file) rather than GitHub's
4
+ # built-in "default setup", so this analysis lives in version control
5
+ # alongside the rest of this repository's CI (ci.yml, fuzz.yml,
6
+ # release.yml, mutation.yml, scorecard.yml) and its action pins are
7
+ # reviewable the same way theirs are. Default setup is configured
8
+ # through repository settings instead of a file, so it isn't available
9
+ # to author from here.
10
+ on:
11
+ push:
12
+ branches: [master]
13
+ pull_request:
14
+ branches: [master]
15
+ schedule:
16
+ # Arbitrary; weekly on Sundays, clear of fuzz.yml's and mutation.yml's
17
+ # daily 03:00/04:00 UTC slots and scorecard.yml's own Sunday 05:00
18
+ # UTC slot.
19
+ - cron: "0 6 * * 0"
20
+
21
+ permissions:
22
+ contents: read
23
+
24
+ concurrency:
25
+ group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
26
+ cancel-in-progress: true
27
+
28
+ jobs:
29
+ analyze:
30
+ name: Analyze (python)
31
+ runs-on: ubuntu-latest
32
+ permissions:
33
+ actions: read
34
+ contents: read
35
+ security-events: write
36
+ steps:
37
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
38
+
39
+ # Python is interpreted, so there is nothing for autobuild (or a
40
+ # manual build step) to do: build-mode: none has CodeQL extract
41
+ # the database straight from source instead. This is the build
42
+ # mode the CodeQL Action's own docs recommend for interpreted
43
+ # languages, and it sidesteps the question of an autobuild step
44
+ # fitting this project's uv-based build at all.
45
+ - uses: github/codeql-action/init@9b3254085494b55a0f7c4c2b3d2d52cc712ce370 # v4.39.1
46
+ with:
47
+ languages: python
48
+ build-mode: none
49
+
50
+ # analyze writes the SARIF without uploading it, the filter step
51
+ # drops one query's results on two paths, and upload-sarif uploads
52
+ # what is left. py/weak-sensitive-data-hashing flags the MD5 that
53
+ # RADIUS (#265) and STUN (#267) mandate, which their tests and
54
+ # scripts/check_fixtures.py compute over published test secrets
55
+ # with usedforsecurity=False to verify captured traffic.
56
+ # The CodeQL config can't scope a query to paths: query-filters
57
+ # drops it everywhere, src/ included, and paths-ignore drops the
58
+ # paths from every query. So the filter removes only that query's
59
+ # results whose primary location is under tests/ or scripts/; the
60
+ # query still runs on src/, every other query on all three.
61
+ #
62
+ # upload: failure-only is the action's documented mode for a
63
+ # workflow that post-processes the SARIF: analyze uploads nothing
64
+ # when it succeeds. It still marks the analysis as completed, so
65
+ # init's post step does not upload a failed-run SARIF for a later
66
+ # step's failure either: if the filter or upload-sarif fails, the
67
+ # job goes red and no new analysis replaces the previous one
68
+ # (upload-sarif can fail after uploading, while it waits for
69
+ # processing). That fails closed; unfiltered SARIF is never
70
+ # uploaded. (Any value the action does not recognize means
71
+ # `always`, which would upload before the filter runs.)
72
+ #
73
+ # Neither analyze nor upload-sarif sets `category`, and that is
74
+ # what keeps the analysis the same one: with no category the CLI
75
+ # writes no runs[].automationDetails, and both actions then fill
76
+ # it in from the workflow path, job id and matrix,
77
+ # ".github/workflows/codeql.yml:analyze/", the same in both
78
+ # steps of this job. Existing alerts keep tracking (fixed ones
79
+ # close, the rest stay) rather than reappearing under a new
80
+ # category. Setting one on either step alone would start a second
81
+ # analysis next to the first.
82
+ - id: analyze
83
+ uses: github/codeql-action/analyze@9b3254085494b55a0f7c4c2b3d2d52cc712ce370 # v4.39.1
84
+ with:
85
+ upload: failure-only
86
+
87
+ # Rewrites each *.sarif under analyze's output directory, at any
88
+ # depth and skipping symlinks (as upload-sarif finds them), in
89
+ # place and logs one line per file, by its path under the
90
+ # directory, naming every result it dropped; malformed SARIF fails
91
+ # the job instead of uploading unfiltered results.
92
+ # Stdlib only, so the runner's own python3 runs it.
93
+ - name: Drop weak-hashing results on tests/ and scripts/
94
+ env:
95
+ SARIF_DIR: ${{ steps.analyze.outputs.sarif-output }}
96
+ run: python3 scripts/filter_codeql_sarif.py "$SARIF_DIR"
97
+
98
+ - uses: github/codeql-action/upload-sarif@9b3254085494b55a0f7c4c2b3d2d52cc712ce370 # v4.39.1
99
+ with:
100
+ sarif_file: ${{ steps.analyze.outputs.sarif-output }}
@@ -38,7 +38,7 @@ jobs:
38
38
  runs-on: ubuntu-latest
39
39
  steps:
40
40
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
41
- - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
41
+ - uses: astral-sh/setup-uv@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2
42
42
  with:
43
43
  python-version: "3.12"
44
44
  # Keyed by run id with a prefix restore-key: a fixed key would
@@ -65,7 +65,7 @@ jobs:
65
65
  # repo write access to re-run the job locally.
66
66
  - name: Upload the failing example database
67
67
  if: failure()
68
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
68
+ uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
69
69
  with:
70
70
  name: hypothesis-nightly-failure-${{ github.run_id }}
71
71
  path: .hypothesis
@@ -85,7 +85,7 @@ jobs:
85
85
  runs-on: ubuntu-latest
86
86
  steps:
87
87
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
88
- - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
88
+ - uses: astral-sh/setup-uv@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2
89
89
  with:
90
90
  python-version: "3.12"
91
91
  - name: Run Atheris against decode_frame
@@ -98,7 +98,7 @@ jobs:
98
98
  python tests/fuzz/fuzz_http_decode.py -max_total_time=300
99
99
  - name: Upload crash artifacts
100
100
  if: failure()
101
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
101
+ uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
102
102
  with:
103
103
  name: atheris-crash-${{ github.run_id }}
104
104
  path: crash-*
@@ -30,7 +30,7 @@ jobs:
30
30
  runs-on: ubuntu-latest
31
31
  steps:
32
32
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
33
- - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
33
+ - uses: astral-sh/setup-uv@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2
34
34
  with:
35
35
  python-version: "3.12"
36
36
  # mutmut hashes each mutated file plus the tests that cover it and
@@ -104,7 +104,7 @@ jobs:
104
104
  # doesn't exist is silently skipped.
105
105
  - name: Upload mutmut results on failure
106
106
  if: failure()
107
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
107
+ uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
108
108
  with:
109
109
  name: mutmut-nightly-failure-${{ github.run_id }}
110
110
  path: |
@@ -35,7 +35,7 @@ jobs:
35
35
  contents: read
36
36
  steps:
37
37
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
38
- - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
38
+ - uses: astral-sh/setup-uv@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2
39
39
  - run: uv build
40
40
  # The QA ladder cannot catch a mistagged release: every check
41
41
  # passes because the code is fine and only the tag is wrong. Read
@@ -99,7 +99,7 @@ jobs:
99
99
  --pyproject pyproject.toml --mc-type library \
100
100
  -o "netprotocols-${GITHUB_REF_NAME#v}.cdx.json"
101
101
  - name: Upload release assets
102
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
102
+ uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
103
103
  with:
104
104
  name: release-assets
105
105
  path: |
@@ -123,7 +123,7 @@ jobs:
123
123
  steps:
124
124
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
125
125
  - name: Download release assets
126
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
126
+ uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
127
127
  with:
128
128
  name: release-assets
129
129
  # CHANGELOG.md is the single source of truth for release notes, so
@@ -48,7 +48,7 @@ jobs:
48
48
  # Upload the SARIF results as a workflow artifact, per the action's
49
49
  # standard setup.
50
50
  - name: Upload artifact
51
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
51
+ uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
52
52
  with:
53
53
  name: SARIF file
54
54
  path: results.sarif
@@ -56,6 +56,6 @@ jobs:
56
56
 
57
57
  # Upload the results to GitHub's code scanning dashboard.
58
58
  - name: Upload to code-scanning
59
- uses: github/codeql-action/upload-sarif@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4.38.2
59
+ uses: github/codeql-action/upload-sarif@9b3254085494b55a0f7c4c2b3d2d52cc712ce370 # v4.39.1
60
60
  with:
61
61
  sarif_file: results.sarif
@@ -146,7 +146,8 @@ amass.txt
146
146
  amass.log
147
147
 
148
148
  # Application-specific
149
- .logs/tests/fixtures/staging/
149
+ .logs/
150
+ tests/fixtures/staging/
150
151
 
151
152
  # Written by the benchmark CI step (scripts/benchmark.py output)
152
153
  benchmark.out