stackforge 0.2.0__tar.gz → 0.4.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 (335) hide show
  1. {stackforge-0.2.0 → stackforge-0.4.0}/.github/workflows/test.yml +2 -2
  2. {stackforge-0.2.0 → stackforge-0.4.0}/.gitignore +7 -0
  3. stackforge-0.4.0/CONTRIBUTING.md +238 -0
  4. {stackforge-0.2.0 → stackforge-0.4.0}/Cargo.lock +679 -8
  5. {stackforge-0.2.0 → stackforge-0.4.0}/Cargo.toml +3 -1
  6. stackforge-0.4.0/PKG-INFO +377 -0
  7. stackforge-0.4.0/README.md +352 -0
  8. stackforge-0.4.0/cliff.toml +94 -0
  9. stackforge-0.4.0/cog.toml +13 -0
  10. stackforge-0.4.0/crates/stackforge-core/Cargo.toml +41 -0
  11. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/error.rs +4 -1
  12. stackforge-0.4.0/crates/stackforge-core/src/flow/config.rs +54 -0
  13. stackforge-0.4.0/crates/stackforge-core/src/flow/error.rs +25 -0
  14. stackforge-0.4.0/crates/stackforge-core/src/flow/key.rs +455 -0
  15. stackforge-0.4.0/crates/stackforge-core/src/flow/mod.rs +318 -0
  16. stackforge-0.4.0/crates/stackforge-core/src/flow/state.rs +332 -0
  17. stackforge-0.4.0/crates/stackforge-core/src/flow/table.rs +363 -0
  18. stackforge-0.4.0/crates/stackforge-core/src/flow/tcp_reassembly.rs +366 -0
  19. stackforge-0.4.0/crates/stackforge-core/src/flow/tcp_state.rs +451 -0
  20. stackforge-0.4.0/crates/stackforge-core/src/flow/udp_state.rs +71 -0
  21. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/arp.rs +97 -55
  22. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/bindings.rs +28 -3
  23. stackforge-0.4.0/crates/stackforge-core/src/layer/dns/bitmap.rs +169 -0
  24. stackforge-0.4.0/crates/stackforge-core/src/layer/dns/builder.rs +400 -0
  25. stackforge-0.4.0/crates/stackforge-core/src/layer/dns/edns.rs +453 -0
  26. stackforge-0.4.0/crates/stackforge-core/src/layer/dns/header.rs +440 -0
  27. stackforge-0.4.0/crates/stackforge-core/src/layer/dns/mod.rs +447 -0
  28. stackforge-0.4.0/crates/stackforge-core/src/layer/dns/query.rs +239 -0
  29. stackforge-0.4.0/crates/stackforge-core/src/layer/dns/rdata.rs +2244 -0
  30. stackforge-0.4.0/crates/stackforge-core/src/layer/dns/rr.rs +635 -0
  31. stackforge-0.4.0/crates/stackforge-core/src/layer/dns/svcb.rs +279 -0
  32. stackforge-0.4.0/crates/stackforge-core/src/layer/dns/types.rs +906 -0
  33. stackforge-0.4.0/crates/stackforge-core/src/layer/dot11/builder.rs +835 -0
  34. stackforge-0.4.0/crates/stackforge-core/src/layer/dot11/control.rs +428 -0
  35. stackforge-0.4.0/crates/stackforge-core/src/layer/dot11/data.rs +360 -0
  36. stackforge-0.4.0/crates/stackforge-core/src/layer/dot11/ie.rs +1620 -0
  37. stackforge-0.4.0/crates/stackforge-core/src/layer/dot11/management.rs +1028 -0
  38. stackforge-0.4.0/crates/stackforge-core/src/layer/dot11/mod.rs +953 -0
  39. stackforge-0.4.0/crates/stackforge-core/src/layer/dot11/radiotap.rs +697 -0
  40. stackforge-0.4.0/crates/stackforge-core/src/layer/dot11/security.rs +743 -0
  41. stackforge-0.4.0/crates/stackforge-core/src/layer/dot11/types.rs +1122 -0
  42. stackforge-0.4.0/crates/stackforge-core/src/layer/dot15d4/beacon.rs +509 -0
  43. stackforge-0.4.0/crates/stackforge-core/src/layer/dot15d4/builder.rs +752 -0
  44. stackforge-0.4.0/crates/stackforge-core/src/layer/dot15d4/command.rs +526 -0
  45. stackforge-0.4.0/crates/stackforge-core/src/layer/dot15d4/crc.rs +109 -0
  46. stackforge-0.4.0/crates/stackforge-core/src/layer/dot15d4/mod.rs +1455 -0
  47. stackforge-0.4.0/crates/stackforge-core/src/layer/dot15d4/security.rs +388 -0
  48. stackforge-0.4.0/crates/stackforge-core/src/layer/dot15d4/types.rs +316 -0
  49. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/ethernet.rs +52 -22
  50. stackforge-0.4.0/crates/stackforge-core/src/layer/field.rs +1578 -0
  51. stackforge-0.4.0/crates/stackforge-core/src/layer/field_ext.rs +538 -0
  52. stackforge-0.4.0/crates/stackforge-core/src/layer/ftp/builder.rs +443 -0
  53. stackforge-0.4.0/crates/stackforge-core/src/layer/ftp/mod.rs +599 -0
  54. stackforge-0.4.0/crates/stackforge-core/src/layer/generic/builder.rs +283 -0
  55. stackforge-0.4.0/crates/stackforge-core/src/layer/generic/mod.rs +515 -0
  56. stackforge-0.4.0/crates/stackforge-core/src/layer/http/builder.rs +382 -0
  57. stackforge-0.4.0/crates/stackforge-core/src/layer/http/detection.rs +83 -0
  58. stackforge-0.4.0/crates/stackforge-core/src/layer/http/mod.rs +682 -0
  59. stackforge-0.4.0/crates/stackforge-core/src/layer/http/request.rs +158 -0
  60. stackforge-0.4.0/crates/stackforge-core/src/layer/http/response.rs +174 -0
  61. stackforge-0.4.0/crates/stackforge-core/src/layer/http2/builder.rs +698 -0
  62. stackforge-0.4.0/crates/stackforge-core/src/layer/http2/frames.rs +734 -0
  63. stackforge-0.4.0/crates/stackforge-core/src/layer/http2/hpack.rs +1266 -0
  64. stackforge-0.4.0/crates/stackforge-core/src/layer/http2/mod.rs +551 -0
  65. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/icmp/builder.rs +23 -0
  66. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/icmp/checksum.rs +2 -0
  67. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/icmp/error.rs +2 -0
  68. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/icmp/extensions.rs +12 -3
  69. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/icmp/mod.rs +41 -49
  70. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/icmp/types.rs +2 -0
  71. stackforge-0.4.0/crates/stackforge-core/src/layer/icmpv6/builder.rs +496 -0
  72. stackforge-0.4.0/crates/stackforge-core/src/layer/icmpv6/mod.rs +763 -0
  73. stackforge-0.4.0/crates/stackforge-core/src/layer/imap/builder.rs +466 -0
  74. stackforge-0.4.0/crates/stackforge-core/src/layer/imap/mod.rs +602 -0
  75. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/ipv4/builder.rs +49 -4
  76. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/ipv4/checksum.rs +18 -11
  77. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/ipv4/fragmentation.rs +22 -14
  78. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/ipv4/header.rs +31 -14
  79. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/ipv4/options.rs +73 -51
  80. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/ipv4/protocol.rs +5 -3
  81. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/ipv4/routing.rs +21 -1
  82. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/ipv4/ttl.rs +2 -0
  83. stackforge-0.4.0/crates/stackforge-core/src/layer/ipv6/builder.rs +307 -0
  84. stackforge-0.4.0/crates/stackforge-core/src/layer/ipv6/ext_headers.rs +306 -0
  85. stackforge-0.4.0/crates/stackforge-core/src/layer/ipv6/mod.rs +579 -0
  86. stackforge-0.4.0/crates/stackforge-core/src/layer/l2tp/builder.rs +386 -0
  87. stackforge-0.4.0/crates/stackforge-core/src/layer/l2tp/mod.rs +642 -0
  88. stackforge-0.4.0/crates/stackforge-core/src/layer/mod.rs +1733 -0
  89. stackforge-0.4.0/crates/stackforge-core/src/layer/modbus/builder.rs +620 -0
  90. stackforge-0.4.0/crates/stackforge-core/src/layer/modbus/crc.rs +169 -0
  91. stackforge-0.4.0/crates/stackforge-core/src/layer/modbus/mod.rs +866 -0
  92. stackforge-0.4.0/crates/stackforge-core/src/layer/mqtt/builder.rs +781 -0
  93. stackforge-0.4.0/crates/stackforge-core/src/layer/mqtt/mod.rs +1295 -0
  94. stackforge-0.4.0/crates/stackforge-core/src/layer/mqttsn/builder.rs +1095 -0
  95. stackforge-0.4.0/crates/stackforge-core/src/layer/mqttsn/mod.rs +1284 -0
  96. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/neighbor.rs +39 -20
  97. stackforge-0.4.0/crates/stackforge-core/src/layer/pop3/builder.rs +353 -0
  98. stackforge-0.4.0/crates/stackforge-core/src/layer/pop3/mod.rs +382 -0
  99. stackforge-0.4.0/crates/stackforge-core/src/layer/quic/builder.rs +386 -0
  100. stackforge-0.4.0/crates/stackforge-core/src/layer/quic/frames.rs +651 -0
  101. stackforge-0.4.0/crates/stackforge-core/src/layer/quic/headers.rs +315 -0
  102. stackforge-0.4.0/crates/stackforge-core/src/layer/quic/mod.rs +824 -0
  103. stackforge-0.4.0/crates/stackforge-core/src/layer/quic/varint.rs +202 -0
  104. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/raw.rs +42 -13
  105. stackforge-0.4.0/crates/stackforge-core/src/layer/smtp/builder.rs +354 -0
  106. stackforge-0.4.0/crates/stackforge-core/src/layer/smtp/mod.rs +544 -0
  107. stackforge-0.4.0/crates/stackforge-core/src/layer/ssh/builder.rs +86 -0
  108. stackforge-0.4.0/crates/stackforge-core/src/layer/ssh/mod.rs +385 -0
  109. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/stack.rs +330 -21
  110. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/tcp/builder.rs +66 -7
  111. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/tcp/checksum.rs +15 -7
  112. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/tcp/flags.rs +22 -7
  113. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/tcp/header.rs +28 -29
  114. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/tcp/options.rs +82 -45
  115. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/tcp/services.rs +4 -1
  116. stackforge-0.4.0/crates/stackforge-core/src/layer/tftp/builder.rs +262 -0
  117. stackforge-0.4.0/crates/stackforge-core/src/layer/tftp/mod.rs +585 -0
  118. stackforge-0.4.0/crates/stackforge-core/src/layer/tls/builder.rs +272 -0
  119. stackforge-0.4.0/crates/stackforge-core/src/layer/tls/cert.rs +201 -0
  120. stackforge-0.4.0/crates/stackforge-core/src/layer/tls/crypto/cipher_aead.rs +368 -0
  121. stackforge-0.4.0/crates/stackforge-core/src/layer/tls/crypto/cipher_block.rs +311 -0
  122. stackforge-0.4.0/crates/stackforge-core/src/layer/tls/crypto/cipher_stream.rs +104 -0
  123. stackforge-0.4.0/crates/stackforge-core/src/layer/tls/crypto/compression.rs +54 -0
  124. stackforge-0.4.0/crates/stackforge-core/src/layer/tls/crypto/groups.rs +152 -0
  125. stackforge-0.4.0/crates/stackforge-core/src/layer/tls/crypto/hash.rs +165 -0
  126. stackforge-0.4.0/crates/stackforge-core/src/layer/tls/crypto/hkdf_tls13.rs +311 -0
  127. stackforge-0.4.0/crates/stackforge-core/src/layer/tls/crypto/hmac_tls.rs +230 -0
  128. stackforge-0.4.0/crates/stackforge-core/src/layer/tls/crypto/mod.rs +31 -0
  129. stackforge-0.4.0/crates/stackforge-core/src/layer/tls/crypto/prf.rs +241 -0
  130. stackforge-0.4.0/crates/stackforge-core/src/layer/tls/crypto/suites.rs +539 -0
  131. stackforge-0.4.0/crates/stackforge-core/src/layer/tls/extensions/common.rs +163 -0
  132. stackforge-0.4.0/crates/stackforge-core/src/layer/tls/extensions/key_share.rs +115 -0
  133. stackforge-0.4.0/crates/stackforge-core/src/layer/tls/extensions/mod.rs +166 -0
  134. stackforge-0.4.0/crates/stackforge-core/src/layer/tls/extensions/signature_algorithms.rs +49 -0
  135. stackforge-0.4.0/crates/stackforge-core/src/layer/tls/extensions/sni.rs +80 -0
  136. stackforge-0.4.0/crates/stackforge-core/src/layer/tls/extensions/supported_versions.rs +69 -0
  137. stackforge-0.4.0/crates/stackforge-core/src/layer/tls/handshake/certificate.rs +292 -0
  138. stackforge-0.4.0/crates/stackforge-core/src/layer/tls/handshake/client_hello.rs +278 -0
  139. stackforge-0.4.0/crates/stackforge-core/src/layer/tls/handshake/finished.rs +41 -0
  140. stackforge-0.4.0/crates/stackforge-core/src/layer/tls/handshake/key_exchange.rs +212 -0
  141. stackforge-0.4.0/crates/stackforge-core/src/layer/tls/handshake/mod.rs +211 -0
  142. stackforge-0.4.0/crates/stackforge-core/src/layer/tls/handshake/server_hello.rs +216 -0
  143. stackforge-0.4.0/crates/stackforge-core/src/layer/tls/keyexchange/ecdhe.rs +329 -0
  144. stackforge-0.4.0/crates/stackforge-core/src/layer/tls/keyexchange/mod.rs +44 -0
  145. stackforge-0.4.0/crates/stackforge-core/src/layer/tls/mod.rs +150 -0
  146. stackforge-0.4.0/crates/stackforge-core/src/layer/tls/record.rs +406 -0
  147. stackforge-0.4.0/crates/stackforge-core/src/layer/tls/session.rs +301 -0
  148. stackforge-0.4.0/crates/stackforge-core/src/layer/tls/sslv2/handshake.rs +371 -0
  149. stackforge-0.4.0/crates/stackforge-core/src/layer/tls/sslv2/mod.rs +26 -0
  150. stackforge-0.4.0/crates/stackforge-core/src/layer/tls/sslv2/record.rs +123 -0
  151. stackforge-0.4.0/crates/stackforge-core/src/layer/tls/types.rs +548 -0
  152. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/udp/builder.rs +31 -4
  153. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/udp/checksum.rs +12 -8
  154. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/udp/mod.rs +13 -13
  155. stackforge-0.4.0/crates/stackforge-core/src/layer/zwave/builder.rs +423 -0
  156. stackforge-0.4.0/crates/stackforge-core/src/layer/zwave/mod.rs +1238 -0
  157. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/lib.rs +48 -1
  158. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/packet.rs +262 -15
  159. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/pcap/reader.rs +3 -3
  160. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/pcap/writer.rs +6 -6
  161. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/utils/bits.rs +5 -0
  162. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/utils/checksum.rs +7 -2
  163. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/utils/compare.rs +8 -10
  164. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/utils/hex.rs +13 -9
  165. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/utils/padding.rs +4 -1
  166. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/utils/random.rs +2 -0
  167. stackforge-0.4.0/python/stackforge/__init__.py +109 -0
  168. stackforge-0.4.0/python/stackforge/custom.py +252 -0
  169. stackforge-0.4.0/rustfmt.toml +22 -0
  170. stackforge-0.4.0/src/lib.rs +4397 -0
  171. {stackforge-0.2.0 → stackforge-0.4.0}/tests/integration/compat_tests/mod.rs +2 -0
  172. stackforge-0.4.0/tests/integration/compat_tests/ssh_compat.rs +40 -0
  173. stackforge-0.4.0/tests/integration/compat_tests/tls_compat.rs +103 -0
  174. stackforge-0.4.0/tests/integration/dns.rs +978 -0
  175. stackforge-0.4.0/tests/integration/dot11.rs +1300 -0
  176. stackforge-0.4.0/tests/integration/dot15d4.rs +1333 -0
  177. stackforge-0.4.0/tests/integration/ftp.rs +519 -0
  178. stackforge-0.4.0/tests/integration/http.rs +620 -0
  179. stackforge-0.4.0/tests/integration/http2.rs +1330 -0
  180. stackforge-0.4.0/tests/integration/icmpv6.rs +480 -0
  181. stackforge-0.4.0/tests/integration/imap.rs +537 -0
  182. stackforge-0.4.0/tests/integration/ipv6.rs +595 -0
  183. {stackforge-0.2.0 → stackforge-0.4.0}/tests/integration/main.rs +18 -0
  184. stackforge-0.4.0/tests/integration/modbus.rs +508 -0
  185. stackforge-0.4.0/tests/integration/mqtt.rs +384 -0
  186. stackforge-0.4.0/tests/integration/pop3.rs +490 -0
  187. stackforge-0.4.0/tests/integration/quic.rs +544 -0
  188. stackforge-0.4.0/tests/integration/smtp.rs +517 -0
  189. stackforge-0.4.0/tests/integration/ssh.rs +184 -0
  190. stackforge-0.4.0/tests/integration/tftp.rs +354 -0
  191. stackforge-0.4.0/tests/integration/tls.rs +863 -0
  192. stackforge-0.4.0/tests/integration/zwave.rs +318 -0
  193. stackforge-0.4.0/tests/python/test_custom.py +370 -0
  194. stackforge-0.4.0/tests/python/test_dns.py +603 -0
  195. stackforge-0.4.0/tests/python/test_dot11.py +469 -0
  196. stackforge-0.4.0/tests/python/test_dot15d4.py +562 -0
  197. stackforge-0.4.0/tests/python/test_flow.py +370 -0
  198. stackforge-0.4.0/tests/python/test_ftp.py +469 -0
  199. stackforge-0.4.0/tests/python/test_http.py +391 -0
  200. stackforge-0.4.0/tests/python/test_icmpv6.py +299 -0
  201. stackforge-0.4.0/tests/python/test_imap.py +427 -0
  202. stackforge-0.4.0/tests/python/test_ipv6.py +362 -0
  203. stackforge-0.4.0/tests/python/test_l2tp.py +395 -0
  204. stackforge-0.4.0/tests/python/test_modbus.py +583 -0
  205. stackforge-0.4.0/tests/python/test_mqtt.py +612 -0
  206. stackforge-0.4.0/tests/python/test_mqttsn.py +558 -0
  207. stackforge-0.4.0/tests/python/test_pop3.py +414 -0
  208. stackforge-0.4.0/tests/python/test_quic.py +473 -0
  209. stackforge-0.4.0/tests/python/test_smtp.py +452 -0
  210. stackforge-0.4.0/tests/python/test_ssh.py +89 -0
  211. stackforge-0.4.0/tests/python/test_tftp.py +263 -0
  212. stackforge-0.4.0/tests/python/test_tls.py +343 -0
  213. stackforge-0.4.0/tests/python/test_uts_ftp.py +356 -0
  214. stackforge-0.4.0/tests/python/test_uts_http.py +430 -0
  215. stackforge-0.4.0/tests/python/test_uts_http2.py +578 -0
  216. stackforge-0.4.0/tests/python/test_uts_imap.py +388 -0
  217. stackforge-0.4.0/tests/python/test_uts_ipv6.py +436 -0
  218. stackforge-0.4.0/tests/python/test_uts_l2tp.py +370 -0
  219. stackforge-0.4.0/tests/python/test_uts_modbus.py +568 -0
  220. stackforge-0.4.0/tests/python/test_uts_mqtt.py +485 -0
  221. stackforge-0.4.0/tests/python/test_uts_mqttsn.py +593 -0
  222. stackforge-0.4.0/tests/python/test_uts_pop3.py +386 -0
  223. stackforge-0.4.0/tests/python/test_uts_quic.py +481 -0
  224. stackforge-0.4.0/tests/python/test_uts_smtp.py +364 -0
  225. stackforge-0.4.0/tests/python/test_uts_tftp.py +326 -0
  226. stackforge-0.4.0/tests/python/test_uts_zwave.py +331 -0
  227. stackforge-0.4.0/tests/python/test_zwave.py +493 -0
  228. stackforge-0.4.0/tests/sample_pcap/http2_h2c.pcap +0 -0
  229. stackforge-0.4.0/tests/sample_pcap/http_chunk.pcap +0 -0
  230. stackforge-0.4.0/tests/sample_pcap/http_compressed-brotli.pcap +0 -0
  231. stackforge-0.4.0/tests/sample_pcap/http_compressed-zstd.pcap +0 -0
  232. stackforge-0.4.0/tests/sample_pcap/http_compressed.pcap +0 -0
  233. stackforge-0.4.0/tests/sample_pcap/http_content_length.pcap +0 -0
  234. stackforge-0.4.0/tests/sample_pcap/http_head.pcapng +0 -0
  235. stackforge-0.4.0/tests/sample_pcap/http_tcp_psh.pcap +0 -0
  236. stackforge-0.4.0/tests/sample_pcap/ssh_ed25519.pcap +0 -0
  237. stackforge-0.4.0/tests/uts/dns.uts +522 -0
  238. stackforge-0.4.0/tests/uts/dns_dnssec.uts +146 -0
  239. stackforge-0.4.0/tests/uts/dns_edns0.uts +214 -0
  240. stackforge-0.4.0/tests/uts/dot11.uts +808 -0
  241. stackforge-0.4.0/tests/uts/dot15d4.uts +876 -0
  242. stackforge-0.4.0/tests/uts/fields.uts +2347 -0
  243. stackforge-0.4.0/tests/uts/ftp.uts +119 -0
  244. stackforge-0.4.0/tests/uts/http.uts +415 -0
  245. stackforge-0.4.0/tests/uts/http2.uts +2414 -0
  246. stackforge-0.4.0/tests/uts/imap.uts +147 -0
  247. stackforge-0.4.0/tests/uts/inet6.uts +2999 -0
  248. stackforge-0.4.0/tests/uts/modbus.uts +542 -0
  249. stackforge-0.4.0/tests/uts/mqtt.uts +189 -0
  250. stackforge-0.4.0/tests/uts/mqttsn.uts +818 -0
  251. stackforge-0.4.0/tests/uts/pop3.uts +126 -0
  252. stackforge-0.4.0/tests/uts/quic.uts +117 -0
  253. stackforge-0.4.0/tests/uts/smtp.uts +128 -0
  254. stackforge-0.4.0/tests/uts/ssh.uts +37 -0
  255. stackforge-0.4.0/tests/uts/tftp.uts +92 -0
  256. stackforge-0.4.0/tests/uts/tls/__init__.py +8 -0
  257. stackforge-0.4.0/tests/uts/tls/cert.uts +1107 -0
  258. stackforge-0.4.0/tests/uts/tls/example_client.py +101 -0
  259. stackforge-0.4.0/tests/uts/tls/example_server.py +68 -0
  260. stackforge-0.4.0/tests/uts/tls/pki/README.md +9 -0
  261. stackforge-0.4.0/tests/uts/tls/pki/ca_cert.pem +21 -0
  262. stackforge-0.4.0/tests/uts/tls/pki/ca_key.pem +28 -0
  263. stackforge-0.4.0/tests/uts/tls/pki/cli_cert.pem +22 -0
  264. stackforge-0.4.0/tests/uts/tls/pki/cli_key.pem +28 -0
  265. stackforge-0.4.0/tests/uts/tls/pki/srv_cert.pem +22 -0
  266. stackforge-0.4.0/tests/uts/tls/pki/srv_cert_ed25519.pem +17 -0
  267. stackforge-0.4.0/tests/uts/tls/pki/srv_key.pem +28 -0
  268. stackforge-0.4.0/tests/uts/tls/pki/srv_key_ed25519.pem +3 -0
  269. stackforge-0.4.0/tests/uts/tls/sslv2.uts +286 -0
  270. stackforge-0.4.0/tests/uts/tls/tls.uts +1695 -0
  271. stackforge-0.4.0/tests/uts/tls/tls13.uts +1309 -0
  272. stackforge-0.4.0/tests/uts/tls/tlsclientserver.uts +570 -0
  273. stackforge-0.4.0/tests/uts/zwave.uts +113 -0
  274. stackforge-0.2.0/CONTRIBUTING.md +0 -63
  275. stackforge-0.2.0/PKG-INFO +0 -62
  276. stackforge-0.2.0/README.md +0 -37
  277. stackforge-0.2.0/crates/stackforge-core/Cargo.toml +0 -22
  278. stackforge-0.2.0/crates/stackforge-core/src/layer/field.rs +0 -835
  279. stackforge-0.2.0/crates/stackforge-core/src/layer/mod.rs +0 -955
  280. stackforge-0.2.0/python/stackforge/__init__.py +0 -41
  281. stackforge-0.2.0/src/lib.rs +0 -2046
  282. {stackforge-0.2.0 → stackforge-0.4.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  283. {stackforge-0.2.0 → stackforge-0.4.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  284. {stackforge-0.2.0 → stackforge-0.4.0}/.github/workflows/release.yml +0 -0
  285. {stackforge-0.2.0 → stackforge-0.4.0}/.pre-commit-config.yaml +0 -0
  286. {stackforge-0.2.0 → stackforge-0.4.0}/.python-version +0 -0
  287. {stackforge-0.2.0 → stackforge-0.4.0}/CLAUDE.md +0 -0
  288. {stackforge-0.2.0 → stackforge-0.4.0}/CODE_OF_CONDUCT.md +0 -0
  289. {stackforge-0.2.0 → stackforge-0.4.0}/LICENSE +0 -0
  290. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-automata/Cargo.toml +0 -0
  291. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-automata/src/lib.rs +0 -0
  292. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/ipv4/mod.rs +0 -0
  293. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/tcp/mod.rs +0 -0
  294. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/pcap/mod.rs +0 -0
  295. {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/utils/mod.rs +0 -0
  296. {stackforge-0.2.0 → stackforge-0.4.0}/pyproject.toml +0 -0
  297. {stackforge-0.2.0 → stackforge-0.4.0}/rust-toolchain.toml +0 -0
  298. {stackforge-0.2.0 → stackforge-0.4.0}/tests/integration/arp.rs +0 -0
  299. {stackforge-0.2.0 → stackforge-0.4.0}/tests/integration/compat_tests/arp_compat.rs +0 -0
  300. {stackforge-0.2.0 → stackforge-0.4.0}/tests/integration/compat_tests/ethernet_compat.rs +0 -0
  301. {stackforge-0.2.0 → stackforge-0.4.0}/tests/integration/compat_tests/icmp_compat.rs +0 -0
  302. {stackforge-0.2.0 → stackforge-0.4.0}/tests/integration/compat_tests/ipv4_compat.rs +0 -0
  303. {stackforge-0.2.0 → stackforge-0.4.0}/tests/integration/compat_tests/tcp_compat.rs +0 -0
  304. {stackforge-0.2.0 → stackforge-0.4.0}/tests/integration/compat_tests/udp_compat.rs +0 -0
  305. {stackforge-0.2.0 → stackforge-0.4.0}/tests/integration/ethernet.rs +0 -0
  306. {stackforge-0.2.0 → stackforge-0.4.0}/tests/integration/field.rs +0 -0
  307. {stackforge-0.2.0 → stackforge-0.4.0}/tests/integration/layer.rs +0 -0
  308. {stackforge-0.2.0 → stackforge-0.4.0}/tests/integration/packet.rs +0 -0
  309. {stackforge-0.2.0 → stackforge-0.4.0}/tests/integration/util.rs +0 -0
  310. {stackforge-0.2.0 → stackforge-0.4.0}/tests/python/scapy_compat/__init__.py +0 -0
  311. {stackforge-0.2.0 → stackforge-0.4.0}/tests/python/scapy_compat/conftest.py +0 -0
  312. {stackforge-0.2.0 → stackforge-0.4.0}/tests/python/scapy_compat/test_arp_compat.py +0 -0
  313. {stackforge-0.2.0 → stackforge-0.4.0}/tests/python/scapy_compat/test_checksums_compat.py +0 -0
  314. {stackforge-0.2.0 → stackforge-0.4.0}/tests/python/scapy_compat/test_edge_cases_compat.py +0 -0
  315. {stackforge-0.2.0 → stackforge-0.4.0}/tests/python/scapy_compat/test_ethernet_compat.py +0 -0
  316. {stackforge-0.2.0 → stackforge-0.4.0}/tests/python/scapy_compat/test_icmp_compat.py +0 -0
  317. {stackforge-0.2.0 → stackforge-0.4.0}/tests/python/scapy_compat/test_ipv4_compat.py +0 -0
  318. {stackforge-0.2.0 → stackforge-0.4.0}/tests/python/scapy_compat/test_pcap_compat.py +0 -0
  319. {stackforge-0.2.0 → stackforge-0.4.0}/tests/python/scapy_compat/test_stacking_compat.py +0 -0
  320. {stackforge-0.2.0 → stackforge-0.4.0}/tests/python/scapy_compat/test_tcp_compat.py +0 -0
  321. {stackforge-0.2.0 → stackforge-0.4.0}/tests/python/scapy_compat/test_udp_compat.py +0 -0
  322. {stackforge-0.2.0 → stackforge-0.4.0}/tests/python/scapy_compat/test_uts_integration.py +0 -0
  323. {stackforge-0.2.0 → stackforge-0.4.0}/tests/python/test_core.py +0 -0
  324. {stackforge-0.2.0 → stackforge-0.4.0}/tests/python/test_pcap.py +0 -0
  325. {stackforge-0.2.0 → stackforge-0.4.0}/tests/python/test_udp_icmp.py +0 -0
  326. {stackforge-0.2.0 → stackforge-0.4.0}/tests/sample_pcap/tcprelay/PCAP.md +0 -0
  327. {stackforge-0.2.0 → stackforge-0.4.0}/tests/sample_pcap/tcprelay/smallFlows.pcap +0 -0
  328. {stackforge-0.2.0 → stackforge-0.4.0}/tests/sample_pcap/tcprelay/test.pcap +0 -0
  329. {stackforge-0.2.0 → stackforge-0.4.0}/tests/scripts/compare_packets.py +0 -0
  330. {stackforge-0.2.0 → stackforge-0.4.0}/tests/scripts/generate_scapy_fixtures.py +0 -0
  331. {stackforge-0.2.0 → stackforge-0.4.0}/tests/uts/inet.uts +0 -0
  332. /stackforge-0.2.0/tests/uts/inet6.uts → /stackforge-0.4.0/tests/uts/inet6 copy.uts +0 -0
  333. {stackforge-0.2.0 → stackforge-0.4.0}/tests/uts/l2.uts +0 -0
  334. {stackforge-0.2.0 → stackforge-0.4.0}/tests/uts/l2tp.uts +0 -0
  335. {stackforge-0.2.0 → stackforge-0.4.0}/uv.lock +0 -0
@@ -36,10 +36,10 @@ jobs:
36
36
  uv sync --frozen --no-install-project
37
37
 
38
38
  - name: Build and Install
39
- run: uvx maturin develop
39
+ run: uv run maturin develop
40
40
 
41
41
  - name: Test Rust
42
- run: cargo test
42
+ run: uv run cargo test
43
43
 
44
44
  - name: Test Python
45
45
  run: uv run pytest tests/python
@@ -17,3 +17,10 @@ stackforge.egg-info/
17
17
  helper_files/
18
18
  # Tools
19
19
  .bin/
20
+ *.md
21
+ !README.md
22
+ .claude
23
+ .pytest*
24
+ .ruff*
25
+ refs/
26
+ memory/
@@ -0,0 +1,238 @@
1
+ # Contributing to Stackforge
2
+
3
+ Thank you for your interest in contributing! We welcome bug reports, feature requests, and pull requests.
4
+
5
+ ## Prerequisites
6
+
7
+ - **Rust:** Stable toolchain — install via [rustup](https://rustup.rs/)
8
+ - **Python:** 3.13 or higher
9
+ - **uv:** Fast Python package manager — install via [astral.sh/uv](https://docs.astral.sh/uv/)
10
+ - **cog:** Conventional commit tool — install via `cargo install cocogitto`
11
+
12
+ ## Setting Up the Environment
13
+
14
+ ```bash
15
+ # 1. Clone the repository
16
+ git clone https://github.com/LaBackDoor/stackforge.git
17
+ cd stackforge
18
+
19
+ # 2. Sync Python dependencies
20
+ uv sync
21
+
22
+ # 3. Compile the Rust extension and install in editable mode
23
+ uv run maturin develop
24
+ ```
25
+
26
+ > Re-run `uv run maturin develop` any time you change Rust code.
27
+
28
+ ## Project Structure
29
+
30
+ ```
31
+ stackforge/
32
+ ├── crates/
33
+ │ ├── stackforge-core/ # Core Rust library (published to crates.io)
34
+ │ │ └── src/
35
+ │ │ ├── layer/ # Protocol implementations
36
+ │ │ │ ├── mod.rs # LayerKind enum, Layer trait, LayerEnum dispatch
37
+ │ │ │ ├── bindings.rs # Protocol detection rules (ethertype, port → layer)
38
+ │ │ │ ├── field.rs # Field abstractions (MacAddress, BytesField, etc.)
39
+ │ │ │ ├── ethernet.rs
40
+ │ │ │ ├── arp.rs
41
+ │ │ │ ├── ipv4/
42
+ │ │ │ ├── ipv6/
43
+ │ │ │ ├── tcp/
44
+ │ │ │ ├── udp/
45
+ │ │ │ ├── icmp/
46
+ │ │ │ ├── icmpv6/
47
+ │ │ │ ├── dns/
48
+ │ │ │ ├── http/
49
+ │ │ │ ├── http2/
50
+ │ │ │ ├── quic/
51
+ │ │ │ ├── l2tp/
52
+ │ │ │ ├── ssh/
53
+ │ │ │ ├── tls/
54
+ │ │ │ ├── dot11/ # 802.11 Wi-Fi
55
+ │ │ │ ├── dot15d4/ # 802.15.4 Zigbee
56
+ │ │ │ └── generic/ # Runtime custom protocols
57
+ │ │ ├── packet.rs
58
+ │ │ └── lib.rs
59
+ │ └── stackforge-automata/ # Async state machine framework (planned)
60
+ ├── src/
61
+ │ └── lib.rs # PyO3 bindings
62
+ ├── python/
63
+ │ └── stackforge/
64
+ │ ├── __init__.py # Python re-exports
65
+ │ └── custom.py # CustomLayer + typed fields
66
+ └── tests/
67
+ ├── integration/ # Rust integration tests
68
+ ├── python/ # Python tests (pytest)
69
+ │ └── scapy_compat/ # Scapy behavioural compatibility tests
70
+ ├── uts/ # UTS regression test suites (Scapy-format)
71
+ └── sample_pcap/ # PCAP fixtures
72
+ ```
73
+
74
+ ## Running Tests
75
+
76
+ ### Rust tests
77
+
78
+ ```bash
79
+ # All unit + integration tests
80
+ cargo test
81
+
82
+ # Single test by name
83
+ cargo test test_name
84
+
85
+ # Single integration file
86
+ cargo test --test integration dns
87
+ ```
88
+
89
+ ### Python tests
90
+
91
+ ```bash
92
+ # All Python tests
93
+ uv run pytest tests/python
94
+
95
+ # Single file
96
+ uv run pytest tests/python/test_dns.py
97
+
98
+ # Single test
99
+ uv run pytest tests/python/test_dns.py::test_dns_query_build
100
+
101
+ # Scapy compatibility tests only
102
+ uv run pytest tests/python/scapy_compat
103
+
104
+ # Verbose output
105
+ uv run pytest -v tests/python
106
+ ```
107
+
108
+ ### UTS regression tests
109
+
110
+ UTS files in `tests/uts/` are Scapy-format regression suites run via the Python test suite:
111
+
112
+ ```bash
113
+ uv run pytest tests/python/scapy_compat/test_uts_integration.py
114
+ ```
115
+
116
+ ## Linting and Formatting
117
+
118
+ All of the following must pass before submitting a PR:
119
+
120
+ ```bash
121
+ # Rust
122
+ cargo fmt
123
+ cargo clippy
124
+
125
+ # Python
126
+ uv run ruff check .
127
+ ```
128
+
129
+ ## Adding a New Protocol Layer
130
+
131
+ Follow the existing pattern used by layers like `dns`, `http`, or `quic`.
132
+
133
+ ### 1. Create the layer module
134
+
135
+ ```
136
+ crates/stackforge-core/src/layer/<proto>/
137
+ ├── mod.rs # Layer struct, parse(), fields, Layer trait impl
138
+ └── builder.rs # (optional) Builder for constructing packets
139
+ ```
140
+
141
+ The layer struct holds `start`/`end` offsets into a shared `Bytes` buffer — it does **not** copy field values on parse. Fields are read on demand:
142
+
143
+ ```rust
144
+ pub struct MyProtoLayer {
145
+ start: usize,
146
+ end: usize,
147
+ }
148
+
149
+ impl MyProtoLayer {
150
+ pub fn my_field<'a>(&self, buf: &'a [u8]) -> u16 {
151
+ u16::from_be_bytes(buf[self.start..self.start + 2].try_into().unwrap())
152
+ }
153
+ }
154
+ ```
155
+
156
+ ### 2. Register the `LayerKind` variant
157
+
158
+ In `crates/stackforge-core/src/layer/mod.rs`, add a variant to the `LayerKind` enum and handle it in `LayerEnum`.
159
+
160
+ ### 3. Add detection rules
161
+
162
+ In `crates/stackforge-core/src/layer/bindings.rs`, register how the new layer is detected (e.g., from an ethertype, IP protocol number, or TCP/UDP port).
163
+
164
+ ### 4. Expose via PyO3
165
+
166
+ If the layer needs Python-accessible fields, add them to the `PyO3` bindings in `src/lib.rs`.
167
+
168
+ ### 5. Write tests
169
+
170
+ - **Rust:** Add `tests/integration/<proto>.rs` with parse and build tests.
171
+ - **Python:** Add `tests/python/test_<proto>.py` covering field access, builders, and edge cases.
172
+ - **UTS (optional):** Add `tests/uts/<proto>.uts` for Scapy-format regression tests.
173
+
174
+ ## Architecture Notes
175
+
176
+ - **Lazy Zero-Copy View** — `Packet::parse()` only records layer boundaries (offsets). Field values are read directly from the buffer when accessed, with no upfront copying.
177
+ - **Copy-on-Write Mutation** — The underlying `Bytes` buffer is only cloned when a mutation occurs on a shared packet.
178
+ - **`Packet(raw)` is unparsed** — always call `.parse()` before accessing layers or fields.
179
+ - **`Packet::parse()` assumes Ethernet first** — Dot11 and Dot15d4 frames require a dedicated parse entry point.
180
+
181
+ ## Commit Messages
182
+
183
+ This project uses [Conventional Commits](https://www.conventionalcommits.org/) enforced by [cocogitto](https://docs.cocogitto.io/) (`cog`). All commits must follow the format:
184
+
185
+ ```
186
+ <type>(<scope>): <description>
187
+
188
+ [optional body]
189
+ ```
190
+
191
+ Common types:
192
+
193
+ | Type | When to use |
194
+ |------|-------------|
195
+ | `feat` | New feature or protocol |
196
+ | `fix` | Bug fix |
197
+ | `chore` | Maintenance, dependency updates, CI |
198
+ | `docs` | Documentation only |
199
+ | `test` | Adding or fixing tests |
200
+ | `refactor` | Code restructuring with no behaviour change |
201
+ | `perf` | Performance improvement |
202
+
203
+ Use `cog commit` instead of `git commit` to get an interactive prompt that validates the format:
204
+
205
+ ```bash
206
+ cog commit feat "add OSPF layer"
207
+ cog commit fix "correct DNS name compression offset"
208
+ ```
209
+
210
+ Breaking changes must include a `!` after the type or a `BREAKING CHANGE:` footer:
211
+
212
+ ```bash
213
+ cog commit feat! "redesign Layer trait interface"
214
+ ```
215
+
216
+ ## Versioning and Changelog
217
+
218
+ Versions and the changelog are managed by `cog`. Maintainers cut releases with:
219
+
220
+ ```bash
221
+ # Bump version automatically based on commit history (patch / minor / major)
222
+ cog bump --auto
223
+
224
+ # Or bump explicitly
225
+ cog bump --patch
226
+ cog bump --minor
227
+ cog bump --major
228
+ ```
229
+
230
+ `cog bump` runs `pre_bump_hooks` (updates `Cargo.toml` version), tags the commit, and regenerates `CHANGELOG.md` from the commit history. Contributors do not need to edit `CHANGELOG.md` manually.
231
+
232
+ ## Pull Request Process
233
+
234
+ 1. Fork the repo and create your branch from `main`.
235
+ 2. Add tests for any new behaviour — both Rust and Python.
236
+ 3. Ensure all tests pass: `cargo test` and `uv run pytest tests/python`.
237
+ 4. Ensure linting passes: `cargo fmt && cargo clippy && uv run ruff check .`
238
+ 5. Open a pull request with a clear description of what changed and why.