pwn 0.5.708 → 0.5.709

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 (434) hide show
  1. checksums.yaml +4 -4
  2. data/documentation/Installation.md +1 -0
  3. data/etc/default_skills/pwn/ai/agent/extrospection/osint/bridges/SKILL.md +30 -8
  4. data/etc/default_skills/pwn/ai/agent/extrospection/osint/social/SKILL.md +30 -8
  5. data/etc/default_skills/pwn/ai/agent/extrospection/osint/social/references/urls.md +1 -1
  6. data/etc/default_skills/pwn/ai/agent/extrospection/references/urls.md +0 -1
  7. data/etc/default_skills/pwn/memory_index/SKILL.md +0 -4
  8. data/etc/default_skills/pwn/plugins/aflplusplus/SKILL.md +48 -0
  9. data/etc/default_skills/pwn/plugins/android/SKILL.md +1 -0
  10. data/etc/default_skills/pwn/plugins/artifact_registry/SKILL.md +49 -0
  11. data/etc/default_skills/pwn/plugins/binary_parser/SKILL.md +54 -0
  12. data/etc/default_skills/pwn/plugins/credential_attack/SKILL.md +51 -0
  13. data/etc/default_skills/pwn/plugins/doctor/SKILL.md +57 -0
  14. data/etc/default_skills/pwn/plugins/exploit_dev/SKILL.md +61 -0
  15. data/etc/default_skills/pwn/plugins/frida/SKILL.md +49 -0
  16. data/etc/default_skills/pwn/plugins/gdb/SKILL.md +52 -0
  17. data/etc/default_skills/pwn/plugins/jobs/SKILL.md +51 -0
  18. data/etc/default_skills/pwn/plugins/nuclei/SKILL.md +48 -0
  19. data/etc/default_skills/pwn/plugins/process_tube/SKILL.md +52 -0
  20. data/etc/default_skills/pwn/plugins/radare2/SKILL.md +59 -0
  21. data/etc/default_skills/pwn/plugins/recon/SKILL.md +55 -0
  22. data/etc/default_skills/pwn/plugins/recon/references/urls.md +5 -0
  23. data/etc/default_skills/pwn/plugins/sqlmap/SKILL.md +48 -0
  24. data/etc/default_skills/pwn/plugins/transparent_browser/SKILL.md +0 -4
  25. data/etc/default_skills/pwn/plugins/volatility/SKILL.md +48 -0
  26. data/lib/pwn/ai/agent/assembly.rb +4 -1
  27. data/lib/pwn/ai/agent/btc.rb +4 -1
  28. data/lib/pwn/ai/agent/burp_suite.rb +5 -2
  29. data/lib/pwn/ai/agent/curriculum.rb +89 -30
  30. data/lib/pwn/ai/agent/dispatch.rb +27 -16
  31. data/lib/pwn/ai/agent/extrospection/osint/bridges.rb +9 -18
  32. data/lib/pwn/ai/agent/extrospection/osint/social.rb +9 -18
  33. data/lib/pwn/ai/agent/extrospection.rb +185 -60
  34. data/lib/pwn/ai/agent/gqrx.rb +4 -1
  35. data/lib/pwn/ai/agent/hacker_one.rb +5 -2
  36. data/lib/pwn/ai/agent/learning.rb +142 -25
  37. data/lib/pwn/ai/agent/loop.rb +53 -46
  38. data/lib/pwn/ai/agent/metrics.rb +133 -23
  39. data/lib/pwn/ai/agent/mistakes.rb +126 -17
  40. data/lib/pwn/ai/agent/open_goal.rb +25 -9
  41. data/lib/pwn/ai/agent/policy.rb +158 -18
  42. data/lib/pwn/ai/agent/prompt_builder.rb +21 -11
  43. data/lib/pwn/ai/agent/prompt_cache.rb +44 -13
  44. data/lib/pwn/ai/agent/reflect.rb +9 -5
  45. data/lib/pwn/ai/agent/registry.rb +65 -12
  46. data/lib/pwn/ai/agent/result.rb +19 -10
  47. data/lib/pwn/ai/agent/reward.rb +150 -32
  48. data/lib/pwn/ai/agent/sast.rb +4 -1
  49. data/lib/pwn/ai/agent/swarm.rb +72 -36
  50. data/lib/pwn/ai/agent/task_summarizer.rb +165 -36
  51. data/lib/pwn/ai/agent/tool_guard.rb +105 -6
  52. data/lib/pwn/ai/agent/transparent_browser.rb +4 -1
  53. data/lib/pwn/ai/agent/turn_finalizer.rb +41 -21
  54. data/lib/pwn/ai/agent/vuln_gen.rb +6 -3
  55. data/lib/pwn/ai/agent.rb +4 -0
  56. data/lib/pwn/ai/anthropic.rb +41 -7
  57. data/lib/pwn/ai/gemini.rb +21 -11
  58. data/lib/pwn/ai/grok.rb +44 -6
  59. data/lib/pwn/ai/http_retry.rb +40 -12
  60. data/lib/pwn/ai/ollama.rb +19 -10
  61. data/lib/pwn/ai/open_ai.rb +81 -30
  62. data/lib/pwn/ai/open_web_ui.rb +20 -14
  63. data/lib/pwn/ai/red_team/agent_protocol_abuse.rb +7 -1
  64. data/lib/pwn/ai/red_team/data_and_model_poisoning.rb +7 -1
  65. data/lib/pwn/ai/red_team/excessive_agency.rb +7 -1
  66. data/lib/pwn/ai/red_team/hidden_context_exposure.rb +7 -1
  67. data/lib/pwn/ai/red_team/insecure_output_handling.rb +7 -1
  68. data/lib/pwn/ai/red_team/jailbreak.rb +7 -1
  69. data/lib/pwn/ai/red_team/memory_poisoning.rb +7 -1
  70. data/lib/pwn/ai/red_team/multimodal_injection.rb +7 -1
  71. data/lib/pwn/ai/red_team/overreliance.rb +7 -1
  72. data/lib/pwn/ai/red_team/payload_splitting.rb +7 -1
  73. data/lib/pwn/ai/red_team/prompt_injection.rb +7 -1
  74. data/lib/pwn/ai/red_team/rag_poisoning.rb +7 -1
  75. data/lib/pwn/ai/red_team/sensitive_information_disclosure.rb +7 -1
  76. data/lib/pwn/ai/red_team/supply_chain.rb +7 -1
  77. data/lib/pwn/ai/red_team/system_prompt_extraction.rb +7 -1
  78. data/lib/pwn/ai/red_team/test_case_engine.rb +12 -9
  79. data/lib/pwn/ai/red_team/token_smuggling.rb +7 -1
  80. data/lib/pwn/ai/red_team/unbounded_consumption.rb +7 -1
  81. data/lib/pwn/ai/red_team/vector_and_embedding_weaknesses.rb +7 -1
  82. data/lib/pwn/ai/red_team.rb +4 -0
  83. data/lib/pwn/ai.rb +4 -0
  84. data/lib/pwn/aws/acm.rb +5 -2
  85. data/lib/pwn/aws/api_gateway.rb +10 -7
  86. data/lib/pwn/aws/app_stream.rb +5 -2
  87. data/lib/pwn/aws/application_auto_scaling.rb +5 -2
  88. data/lib/pwn/aws/application_discovery_service.rb +5 -2
  89. data/lib/pwn/aws/auto_scaling.rb +5 -2
  90. data/lib/pwn/aws/batch.rb +5 -2
  91. data/lib/pwn/aws/budgets.rb +5 -2
  92. data/lib/pwn/aws/cloud_formation.rb +5 -2
  93. data/lib/pwn/aws/cloud_front.rb +7 -4
  94. data/lib/pwn/aws/cloud_hsm.rb +5 -2
  95. data/lib/pwn/aws/cloud_search.rb +5 -2
  96. data/lib/pwn/aws/cloud_search_domain.rb +5 -2
  97. data/lib/pwn/aws/cloud_trail.rb +5 -2
  98. data/lib/pwn/aws/cloud_watch.rb +5 -2
  99. data/lib/pwn/aws/cloud_watch_events.rb +5 -2
  100. data/lib/pwn/aws/cloud_watch_logs.rb +5 -2
  101. data/lib/pwn/aws/code_build.rb +5 -2
  102. data/lib/pwn/aws/code_commit.rb +5 -2
  103. data/lib/pwn/aws/code_deploy.rb +5 -2
  104. data/lib/pwn/aws/code_pipeline.rb +5 -2
  105. data/lib/pwn/aws/cognito_identity.rb +5 -2
  106. data/lib/pwn/aws/cognito_identity_provider.rb +5 -2
  107. data/lib/pwn/aws/cognito_sync.rb +5 -2
  108. data/lib/pwn/aws/config_service.rb +5 -2
  109. data/lib/pwn/aws/data_pipleline.rb +5 -2
  110. data/lib/pwn/aws/database_migration_service.rb +5 -2
  111. data/lib/pwn/aws/device_farm.rb +5 -2
  112. data/lib/pwn/aws/direct_connect.rb +5 -2
  113. data/lib/pwn/aws/directory_service.rb +5 -2
  114. data/lib/pwn/aws/dynamo_db.rb +5 -2
  115. data/lib/pwn/aws/dynamo_db_streams.rb +5 -2
  116. data/lib/pwn/aws/ec2.rb +5 -2
  117. data/lib/pwn/aws/ecr.rb +5 -2
  118. data/lib/pwn/aws/ecs.rb +5 -2
  119. data/lib/pwn/aws/efs.rb +5 -2
  120. data/lib/pwn/aws/elasti_cache.rb +5 -2
  121. data/lib/pwn/aws/elastic_beanstalk.rb +8 -5
  122. data/lib/pwn/aws/elastic_load_balancing.rb +5 -2
  123. data/lib/pwn/aws/elastic_load_balancing_v2.rb +6 -3
  124. data/lib/pwn/aws/elastic_transcoder.rb +5 -2
  125. data/lib/pwn/aws/elasticsearch_service.rb +5 -2
  126. data/lib/pwn/aws/emr.rb +5 -2
  127. data/lib/pwn/aws/firehose.rb +5 -2
  128. data/lib/pwn/aws/game_lift.rb +5 -2
  129. data/lib/pwn/aws/glacier.rb +6 -3
  130. data/lib/pwn/aws/health.rb +5 -2
  131. data/lib/pwn/aws/iam.rb +10 -4
  132. data/lib/pwn/aws/import_export.rb +5 -2
  133. data/lib/pwn/aws/inspector.rb +5 -2
  134. data/lib/pwn/aws/iot.rb +5 -2
  135. data/lib/pwn/aws/iot_data_plane.rb +5 -2
  136. data/lib/pwn/aws/kinesis.rb +5 -2
  137. data/lib/pwn/aws/kinesis_analytics.rb +5 -2
  138. data/lib/pwn/aws/kms.rb +5 -2
  139. data/lib/pwn/aws/lambda.rb +5 -2
  140. data/lib/pwn/aws/lambda_preview.rb +5 -2
  141. data/lib/pwn/aws/lex.rb +5 -2
  142. data/lib/pwn/aws/lightsail.rb +5 -2
  143. data/lib/pwn/aws/machine_learning.rb +5 -2
  144. data/lib/pwn/aws/marketplace_commerce_analytics.rb +5 -2
  145. data/lib/pwn/aws/marketplace_metering.rb +5 -2
  146. data/lib/pwn/aws/ops_works.rb +5 -2
  147. data/lib/pwn/aws/ops_works_cm.rb +5 -2
  148. data/lib/pwn/aws/pinpoint.rb +5 -2
  149. data/lib/pwn/aws/polly.rb +5 -2
  150. data/lib/pwn/aws/rds.rb +5 -2
  151. data/lib/pwn/aws/redshift.rb +5 -2
  152. data/lib/pwn/aws/rekognition.rb +5 -2
  153. data/lib/pwn/aws/route53.rb +5 -2
  154. data/lib/pwn/aws/route53_domains.rb +5 -2
  155. data/lib/pwn/aws/s3.rb +5 -2
  156. data/lib/pwn/aws/service_catalog.rb +5 -2
  157. data/lib/pwn/aws/ses.rb +5 -2
  158. data/lib/pwn/aws/shield.rb +5 -2
  159. data/lib/pwn/aws/simple_db.rb +5 -2
  160. data/lib/pwn/aws/sms.rb +5 -2
  161. data/lib/pwn/aws/snowball.rb +5 -2
  162. data/lib/pwn/aws/sns.rb +5 -2
  163. data/lib/pwn/aws/sqs.rb +5 -2
  164. data/lib/pwn/aws/ssm.rb +5 -2
  165. data/lib/pwn/aws/states.rb +5 -2
  166. data/lib/pwn/aws/storage_gateway.rb +5 -2
  167. data/lib/pwn/aws/sts.rb +4 -1
  168. data/lib/pwn/aws/support.rb +5 -2
  169. data/lib/pwn/aws/swf.rb +5 -2
  170. data/lib/pwn/aws/waf.rb +5 -2
  171. data/lib/pwn/aws/waf_regional.rb +5 -2
  172. data/lib/pwn/aws/workspaces.rb +5 -2
  173. data/lib/pwn/aws/x_ray.rb +5 -2
  174. data/lib/pwn/aws.rb +4 -0
  175. data/lib/pwn/banner/anon.rb +3 -0
  176. data/lib/pwn/banner/bubble.rb +3 -0
  177. data/lib/pwn/banner/cheshire.rb +3 -0
  178. data/lib/pwn/banner/code_cave.rb +3 -0
  179. data/lib/pwn/banner/dont_panic.rb +3 -0
  180. data/lib/pwn/banner/f_society.rb +3 -0
  181. data/lib/pwn/banner/fork_bomb.rb +3 -0
  182. data/lib/pwn/banner/jmp_esp.rb +3 -0
  183. data/lib/pwn/banner/matrix.rb +5 -1
  184. data/lib/pwn/banner/ninja.rb +3 -0
  185. data/lib/pwn/banner/off_the_air.rb +3 -0
  186. data/lib/pwn/banner/pirate.rb +3 -0
  187. data/lib/pwn/banner/radare2.rb +3 -0
  188. data/lib/pwn/banner/radare2_ai.rb +3 -0
  189. data/lib/pwn/banner/white_rabbit.rb +3 -0
  190. data/lib/pwn/banner.rb +6 -2
  191. data/lib/pwn/blockchain/btc.rb +8 -3
  192. data/lib/pwn/blockchain/eth.rb +10 -3
  193. data/lib/pwn/blockchain.rb +4 -0
  194. data/lib/pwn/bounty/lifecycle_authz_replay.rb +46 -27
  195. data/lib/pwn/bounty.rb +4 -0
  196. data/lib/pwn/config.rb +79 -13
  197. data/lib/pwn/cron.rb +297 -20
  198. data/lib/pwn/driver.rb +2 -18
  199. data/lib/pwn/ffi/adalm_pluto.rb +65 -11
  200. data/lib/pwn/ffi/fftw.rb +31 -6
  201. data/lib/pwn/ffi/hack_rf.rb +59 -8
  202. data/lib/pwn/ffi/liquid.rb +63 -10
  203. data/lib/pwn/ffi/rtl_sdr.rb +35 -5
  204. data/lib/pwn/ffi/soapy_sdr.rb +60 -10
  205. data/lib/pwn/ffi/stdio.rb +5 -8
  206. data/lib/pwn/ffi/volk.rb +36 -7
  207. data/lib/pwn/ffi.rb +12 -0
  208. data/lib/pwn/memory.rb +136 -16
  209. data/lib/pwn/memory_index.rb +34 -19
  210. data/lib/pwn/migrate.rb +34 -24
  211. data/lib/pwn/module_skills.rb +39 -8
  212. data/lib/pwn/plugins/aflplusplus.rb +52 -0
  213. data/lib/pwn/plugins/android.rb +65 -245
  214. data/lib/pwn/plugins/artifact_registry.rb +71 -0
  215. data/lib/pwn/plugins/assembly.rb +9 -4
  216. data/lib/pwn/plugins/authentication_helper.rb +8 -5
  217. data/lib/pwn/plugins/baresip.rb +59 -12
  218. data/lib/pwn/plugins/basic_auth.rb +9 -3
  219. data/lib/pwn/plugins/beef.rb +28 -18
  220. data/lib/pwn/plugins/binary_parser.rb +133 -0
  221. data/lib/pwn/plugins/black_duck_binary_analysis.rb +63 -39
  222. data/lib/pwn/plugins/burp_suite.rb +98 -68
  223. data/lib/pwn/plugins/bus_pirate.rb +15 -8
  224. data/lib/pwn/plugins/char.rb +33 -3
  225. data/lib/pwn/plugins/credential_attack.rb +99 -0
  226. data/lib/pwn/plugins/credit_card.rb +6 -1
  227. data/lib/pwn/plugins/dao_ldap.rb +19 -13
  228. data/lib/pwn/plugins/dao_mongo.rb +11 -5
  229. data/lib/pwn/plugins/dao_postgres.rb +28 -19
  230. data/lib/pwn/plugins/dao_sqlite3.rb +15 -6
  231. data/lib/pwn/plugins/defect_dojo.rb +38 -22
  232. data/lib/pwn/plugins/detect_os.rb +5 -0
  233. data/lib/pwn/plugins/doctor.rb +149 -0
  234. data/lib/pwn/plugins/ein.rb +3 -0
  235. data/lib/pwn/plugins/exploit_dev.rb +264 -0
  236. data/lib/pwn/plugins/file_fu.rb +11 -8
  237. data/lib/pwn/plugins/frida.rb +61 -0
  238. data/lib/pwn/plugins/fuzz.rb +9 -6
  239. data/lib/pwn/plugins/gdb.rb +95 -0
  240. data/lib/pwn/plugins/git.rb +19 -14
  241. data/lib/pwn/plugins/github.rb +38 -15
  242. data/lib/pwn/plugins/google_workspace.rb +188 -45
  243. data/lib/pwn/plugins/hacker_one.rb +159 -35
  244. data/lib/pwn/plugins/hunter.rb +6 -3
  245. data/lib/pwn/plugins/ip_info.rb +9 -4
  246. data/lib/pwn/plugins/irc.rb +28 -15
  247. data/lib/pwn/plugins/jenkins.rb +65 -57
  248. data/lib/pwn/plugins/jira_data_center.rb +30 -22
  249. data/lib/pwn/plugins/jobs.rb +109 -0
  250. data/lib/pwn/plugins/json_pathify.rb +9 -5
  251. data/lib/pwn/plugins/log.rb +113 -13
  252. data/lib/pwn/plugins/mail_agent.rb +87 -79
  253. data/lib/pwn/plugins/metasploit.rb +11 -6
  254. data/lib/pwn/plugins/monkey_patch.rb +3 -0
  255. data/lib/pwn/plugins/msr206.rb +42 -28
  256. data/lib/pwn/plugins/nessus_cloud.rb +44 -4
  257. data/lib/pwn/plugins/nexpose_vuln_scan.rb +40 -24
  258. data/lib/pwn/plugins/nmap_it.rb +14 -34
  259. data/lib/pwn/plugins/nuclei.rb +57 -0
  260. data/lib/pwn/plugins/oauth2.rb +11 -5
  261. data/lib/pwn/plugins/ocr.rb +3 -0
  262. data/lib/pwn/plugins/open_api.rb +5 -2
  263. data/lib/pwn/plugins/openvas.rb +33 -25
  264. data/lib/pwn/plugins/packet.rb +152 -31
  265. data/lib/pwn/plugins/pdf_parse.rb +5 -2
  266. data/lib/pwn/plugins/pony.rb +86 -1
  267. data/lib/pwn/plugins/process_tube.rb +120 -0
  268. data/lib/pwn/plugins/ps.rb +7 -1
  269. data/lib/pwn/plugins/pwn_logger.rb +6 -2
  270. data/lib/pwn/plugins/rabbit_mq.rb +12 -7
  271. data/lib/pwn/plugins/radare2.rb +253 -0
  272. data/lib/pwn/plugins/recon.rb +161 -0
  273. data/lib/pwn/plugins/repl.rb +122 -1
  274. data/lib/pwn/plugins/scannable_codes.rb +5 -1
  275. data/lib/pwn/plugins/serial.rb +24 -14
  276. data/lib/pwn/plugins/shodan.rb +54 -35
  277. data/lib/pwn/plugins/slack_client.rb +11 -6
  278. data/lib/pwn/plugins/sock.rb +16 -8
  279. data/lib/pwn/plugins/spider.rb +5 -2
  280. data/lib/pwn/plugins/sqlmap.rb +49 -0
  281. data/lib/pwn/plugins/ssn.rb +3 -0
  282. data/lib/pwn/plugins/thread_pool.rb +6 -9
  283. data/lib/pwn/plugins/tor.rb +9 -4
  284. data/lib/pwn/plugins/transparent_browser.rb +62 -107
  285. data/lib/pwn/plugins/tty_spinner.rb +16 -2
  286. data/lib/pwn/plugins/twitter_api.rb +6 -2
  287. data/lib/pwn/plugins/uri_scheme.rb +4 -1
  288. data/lib/pwn/plugins/vault.rb +12 -3
  289. data/lib/pwn/plugins/vin.rb +24 -12
  290. data/lib/pwn/plugins/voice.rb +7 -2
  291. data/lib/pwn/plugins/volatility.rb +48 -0
  292. data/lib/pwn/plugins/vsphere.rb +9 -5
  293. data/lib/pwn/plugins/xxd.rb +12 -43
  294. data/lib/pwn/plugins/zaproxy.rb +30 -16
  295. data/lib/pwn/plugins.rb +19 -0
  296. data/lib/pwn/reports/ai_red_team.rb +6 -2
  297. data/lib/pwn/reports/csv.rb +8 -1
  298. data/lib/pwn/reports/fuzz.rb +5 -2
  299. data/lib/pwn/reports/html.rb +8 -1
  300. data/lib/pwn/reports/html_footer.rb +4 -3
  301. data/lib/pwn/reports/html_header.rb +6 -2
  302. data/lib/pwn/reports/json.rb +8 -1
  303. data/lib/pwn/reports/markdown.rb +8 -1
  304. data/lib/pwn/reports/pdf.rb +8 -1
  305. data/lib/pwn/reports/phone.rb +5 -2
  306. data/lib/pwn/reports/sast.rb +6 -2
  307. data/lib/pwn/reports/uri_buster.rb +5 -2
  308. data/lib/pwn/reports/xml.rb +8 -1
  309. data/lib/pwn/reports.rb +19 -0
  310. data/lib/pwn/sast/amqp_connect_as_guest.rb +9 -3
  311. data/lib/pwn/sast/apache_file_system_util_api.rb +9 -3
  312. data/lib/pwn/sast/aws.rb +9 -3
  313. data/lib/pwn/sast/banned_function_calls_c.rb +9 -3
  314. data/lib/pwn/sast/base64.rb +9 -3
  315. data/lib/pwn/sast/beef_hook.rb +9 -3
  316. data/lib/pwn/sast/cmd_execution_go_lang.rb +9 -3
  317. data/lib/pwn/sast/cmd_execution_java.rb +9 -3
  318. data/lib/pwn/sast/cmd_execution_python.rb +9 -3
  319. data/lib/pwn/sast/cmd_execution_ruby.rb +9 -3
  320. data/lib/pwn/sast/cmd_execution_scala.rb +9 -3
  321. data/lib/pwn/sast/csrf.rb +9 -3
  322. data/lib/pwn/sast/deserial_java.rb +9 -3
  323. data/lib/pwn/sast/emoticon.rb +9 -3
  324. data/lib/pwn/sast/eval.rb +9 -3
  325. data/lib/pwn/sast/factory.rb +9 -3
  326. data/lib/pwn/sast/http_authorization_header.rb +9 -3
  327. data/lib/pwn/sast/inner_html.rb +9 -3
  328. data/lib/pwn/sast/keystore.rb +9 -3
  329. data/lib/pwn/sast/local_storage.rb +9 -3
  330. data/lib/pwn/sast/location_hash.rb +9 -3
  331. data/lib/pwn/sast/log4j.rb +9 -3
  332. data/lib/pwn/sast/logger.rb +9 -3
  333. data/lib/pwn/sast/md5.rb +9 -3
  334. data/lib/pwn/sast/outer_html.rb +9 -3
  335. data/lib/pwn/sast/padding_oracle.rb +9 -3
  336. data/lib/pwn/sast/password.rb +9 -3
  337. data/lib/pwn/sast/php_input_mechanisms.rb +9 -3
  338. data/lib/pwn/sast/php_type_juggling.rb +9 -3
  339. data/lib/pwn/sast/pom_version.rb +9 -3
  340. data/lib/pwn/sast/port.rb +9 -3
  341. data/lib/pwn/sast/post_message.rb +9 -3
  342. data/lib/pwn/sast/private_key.rb +9 -3
  343. data/lib/pwn/sast/redirect.rb +9 -3
  344. data/lib/pwn/sast/redos.rb +9 -3
  345. data/lib/pwn/sast/shell.rb +9 -3
  346. data/lib/pwn/sast/signature.rb +9 -3
  347. data/lib/pwn/sast/sql.rb +9 -3
  348. data/lib/pwn/sast/ssl.rb +9 -3
  349. data/lib/pwn/sast/sudo.rb +9 -3
  350. data/lib/pwn/sast/task_tag.rb +9 -3
  351. data/lib/pwn/sast/test_case_engine.rb +11 -7
  352. data/lib/pwn/sast/throw_errors.rb +9 -3
  353. data/lib/pwn/sast/token.rb +9 -3
  354. data/lib/pwn/sast/type_script_type_juggling.rb +9 -3
  355. data/lib/pwn/sast/use_after_free.rb +9 -3
  356. data/lib/pwn/sast/version.rb +9 -3
  357. data/lib/pwn/sast/window_location_hash.rb +9 -3
  358. data/lib/pwn/sast.rb +4 -0
  359. data/lib/pwn/sdr/decoder/adsb.rb +36 -5
  360. data/lib/pwn/sdr/decoder/apt.rb +9 -6
  361. data/lib/pwn/sdr/decoder/base.rb +74 -22
  362. data/lib/pwn/sdr/decoder/bluetooth.rb +17 -5
  363. data/lib/pwn/sdr/decoder/dect.rb +12 -3
  364. data/lib/pwn/sdr/decoder/dsp.rb +229 -39
  365. data/lib/pwn/sdr/decoder/flex.rb +59 -11
  366. data/lib/pwn/sdr/decoder/gps.rb +12 -3
  367. data/lib/pwn/sdr/decoder/gsm.rb +24 -4
  368. data/lib/pwn/sdr/decoder/iridium.rb +12 -3
  369. data/lib/pwn/sdr/decoder/lora.rb +13 -4
  370. data/lib/pwn/sdr/decoder/lte.rb +27 -3
  371. data/lib/pwn/sdr/decoder/morse.rb +12 -3
  372. data/lib/pwn/sdr/decoder/p25.rb +12 -3
  373. data/lib/pwn/sdr/decoder/pager.rb +8 -5
  374. data/lib/pwn/sdr/decoder/pocsag.rb +29 -9
  375. data/lib/pwn/sdr/decoder/rds.rb +14 -8
  376. data/lib/pwn/sdr/decoder/rfid.rb +12 -3
  377. data/lib/pwn/sdr/decoder/rtl433.rb +12 -3
  378. data/lib/pwn/sdr/decoder/rtty.rb +8 -5
  379. data/lib/pwn/sdr/decoder/wifi.rb +12 -3
  380. data/lib/pwn/sdr/decoder/zigbee.rb +12 -3
  381. data/lib/pwn/sdr/decoder.rb +9 -0
  382. data/lib/pwn/sdr/flipper_zero.rb +17 -10
  383. data/lib/pwn/sdr/frequency_allocation.rb +4 -1
  384. data/lib/pwn/sdr/gqrx.rb +178 -119
  385. data/lib/pwn/sdr/rfidler.rb +4 -1
  386. data/lib/pwn/sdr/son_micro_rfid.rb +37 -24
  387. data/lib/pwn/sdr.rb +14 -0
  388. data/lib/pwn/sessions.rb +86 -16
  389. data/lib/pwn/setup.rb +94 -37
  390. data/lib/pwn/version.rb +1 -1
  391. data/lib/pwn/www/app_cobalt_io.rb +11 -5
  392. data/lib/pwn/www/bing.rb +10 -5
  393. data/lib/pwn/www/bug_crowd.rb +11 -5
  394. data/lib/pwn/www/checkip.rb +8 -4
  395. data/lib/pwn/www/coinbase_pro.rb +11 -5
  396. data/lib/pwn/www/duckduckgo.rb +12 -6
  397. data/lib/pwn/www/facebook.rb +11 -5
  398. data/lib/pwn/www/github.rb +11 -5
  399. data/lib/pwn/www/google.rb +11 -5
  400. data/lib/pwn/www/hacker_one.rb +20 -9
  401. data/lib/pwn/www/linkedin.rb +11 -5
  402. data/lib/pwn/www/pandora.rb +11 -5
  403. data/lib/pwn/www/pastebin.rb +9 -4
  404. data/lib/pwn/www/paypal.rb +19 -11
  405. data/lib/pwn/www/synack.rb +11 -5
  406. data/lib/pwn/www/torch.rb +13 -8
  407. data/lib/pwn/www/trading_view.rb +11 -5
  408. data/lib/pwn/www/twitter.rb +11 -5
  409. data/lib/pwn/www/uber.rb +11 -5
  410. data/lib/pwn/www/upwork.rb +11 -5
  411. data/lib/pwn/www/wayback_machine.rb +12 -6
  412. data/lib/pwn/www/youtube.rb +10 -5
  413. data/lib/pwn/www.rb +4 -0
  414. data/spec/conventions_spec.rb +118 -2
  415. data/spec/lib/pwn/ai/agent/reward_spec.rb +9 -0
  416. data/spec/lib/pwn/plugins/aflplusplus_spec.rb +13 -0
  417. data/spec/lib/pwn/plugins/artifact_registry_spec.rb +13 -0
  418. data/spec/lib/pwn/plugins/binary_parser_spec.rb +21 -0
  419. data/spec/lib/pwn/plugins/credential_attack_spec.rb +13 -0
  420. data/spec/lib/pwn/plugins/doctor_spec.rb +23 -0
  421. data/spec/lib/pwn/plugins/exploit_dev_spec.rb +23 -0
  422. data/spec/lib/pwn/plugins/frida_spec.rb +13 -0
  423. data/spec/lib/pwn/plugins/gdb_spec.rb +13 -0
  424. data/spec/lib/pwn/plugins/jobs_spec.rb +13 -0
  425. data/spec/lib/pwn/plugins/nuclei_spec.rb +13 -0
  426. data/spec/lib/pwn/plugins/process_tube_spec.rb +13 -0
  427. data/spec/lib/pwn/plugins/radare2_spec.rb +13 -0
  428. data/spec/lib/pwn/plugins/recon_spec.rb +26 -0
  429. data/spec/lib/pwn/plugins/sqlmap_spec.rb +13 -0
  430. data/spec/lib/pwn/plugins/volatility_spec.rb +13 -0
  431. data/third_party/pwn_rdoc.jsonl +126 -5
  432. metadata +47 -3
  433. data/etc/default_skills/pwn/memory_index/references/urls.md +0 -4
  434. data/etc/default_skills/pwn/plugins/transparent_browser/references/urls.md +0 -3
@@ -1005,47 +1005,237 @@ module PWN
1005
1005
  # Display Usage for this Module
1006
1006
 
1007
1007
  public_class_method def self.help
1008
- puts "USAGE (pure-Ruby DSP + optional PWN::FFI acceleration):
1009
- #{self}.native = true|false # toggle VOLK/liquid/FFTW backends
1010
- #{self}.unpack_s16le(data: raw_bytes) # → Volk
1011
- #{self}.unpack_cs16le(data: raw_cs16) # I/Q s16 f32
1012
- #{self}.unpack_cu8(data: raw_u8) # RTL-SDR u8 I/Q
1013
- #{self}.mag_sq(iq:) / #{self}.iq_rms_dbfs(iq:)
1014
- #{self}.fm_demod_iq(iq:, kf: 1.0) # Liquid
1015
- #{self}.correlate(samples:, template:)
1016
- #{self}.resample(samples:, src_rate:, dst_rate:) # Liquid
1017
- #{self}.goertzel(samples:, rate:, freq:)
1018
- #{self}.envelope(samples:, window: 32)
1019
- #{self}.envelope_signed(samples:, window: 8)
1020
- #{self}.dc_block(samples:, alpha: 0.995, m: nil) # → Liquid if m:
1021
- #{self}.nrz_slice(samples:, rate:, baud:, invert: false)
1022
- #{self}.fsk_slice(samples:, rate:, baud:, mark_hz:, space_hz:)
1023
- #{self}.find_sync(bits:, pattern:, width:, max_err: 0, from: 0)
1024
- #{self}.bits_to_int(bits:)
1025
- #{self}.even_parity_ok?(word:, width: 32)
1026
- #{self}.bch_31_21_syndrome(word:)
1027
- #{self}.baudot_decode(bits:)
1028
- #{self}.rms_dbfs(samples:) # Volk (≥64)
1029
- #{self}.resample_iq(iq:, src_rate:, dst_rate:) # → Liquid crcf
1030
- #{self}.mix_iq(iq:, rate:, freq:) # Liquid nco
1031
- #{self}.gfsk_slice(iq:, rate:, baud:, bt: 0.35) # Liquid gmskdem
1032
- #{self}.slice_4fsk(samples:, rate:, baud:) # C4FM/4-GFSK
1033
- #{self}.manchester_decode(bits:, ieee: false)
1034
- #{self}.diff_decode(bits:)
1035
- #{self}.bytes_from_bits(bits:, lsb_first: false)
1036
- #{self}.crc16(bytes:, poly: 0x1021, init: 0xFFFF)
1037
- #{self}.whiten_lfsr(bytes:, poly:, init:, width: 7)
1038
- #{self}.ook_pulses(iq:, rate:, min_us: 20)
1039
- #{self}.cfft_mag(iq:, n:, shift: true) # FFTW
1040
- #{self}.cmul(a:, b:, conj_b: false)
1041
- #{self}.zadoff_chu(root:, n: 63) # LTE PSS
1042
- #{self}.ca_code(prn: 1..32) # GPS L1 C/A
1043
-
1044
- Constants: MORSE_TABLE, BAUDOT_LTRS, BAUDOT_FIGS
1045
- Backends: PWN::FFI.backends # { Volk: true, Liquid: true, AdalmPluto: true, … }
1046
-
1008
+ puts "USAGE:
1009
+ # Run unpack s16le and return its result
1010
+ #{self}.unpack_s16le(
1011
+ data: 'required - raw String of little-endian signed 16-bit PCM'
1012
+ )
1013
+
1014
+ # Run resample and return its result
1015
+ #{self}.resample(
1016
+ samples: 'required - samples value consumed by #resample',
1017
+ src_rate: 'required - input sample rate (Hz)',
1018
+ dst_rate: 'required - output sample rate (Hz)'
1019
+ )
1020
+
1021
+ # Run goertzel and return its result
1022
+ #{self}.goertzel(
1023
+ samples: 'required - samples value consumed by #goertzel',
1024
+ rate: 'required - sample rate (Hz)',
1025
+ freq: 'required - target tone frequency (Hz)'
1026
+ )
1027
+
1028
+ # Run envelope and return its result
1029
+ #{self}.envelope(
1030
+ samples: 'required - samples value consumed by #envelope',
1031
+ window: 'optional - moving-average window in samples (default 32)'
1032
+ )
1033
+
1034
+ # Run dc block and return its result
1035
+ #{self}.dc_block(
1036
+ samples: 'required - samples value consumed by #dc_block',
1037
+ alpha: 'optional - pole (default 0.995)',
1038
+ m: 'optional - m value consumed by #dc_block',
1039
+ as_db: 'optional - as db value consumed by #dc_block (defaults to 60.0)'
1040
+ )
1041
+
1042
+ # Run nrz slice and return its result
1043
+ #{self}.nrz_slice(
1044
+ samples: 'required - Array<Float> (post-FM-discriminator baseband)',
1045
+ rate: 'required - sample rate (Hz)',
1046
+ baud: 'required - symbol rate',
1047
+ invert: 'optional - flip bit polarity (default false)'
1048
+ )
1049
+
1050
+ # Signed moving average (like envelope but keeps sign)
1051
+ #{self}.envelope_signed(
1052
+ samples: 'optional - samples value consumed by #envelope_signed',
1053
+ window: 'optional - window value consumed by #envelope_signed'
1054
+ )
1055
+
1056
+ # Run fsk slice and return its result
1057
+ #{self}.fsk_slice(
1058
+ samples: 'required - samples value consumed by #fsk_slice',
1059
+ rate: 'required - sample rate (Hz)',
1060
+ baud: 'required - symbol rate',
1061
+ mark_hz: 'required - mark tone (bit=1)',
1062
+ space_hz: 'required - space tone (bit=0)'
1063
+ )
1064
+
1065
+ # Run find sync and return its result
1066
+ #{self}.find_sync(
1067
+ bits: 'required - bits value consumed by #find_sync',
1068
+ pattern: 'required - Array<0|1> or Integer (MSB-first)',
1069
+ width: 'optional - bit-width when pattern is Integer',
1070
+ max_err: 'optional - allowed bit errors (default 0)',
1071
+ from: 'optional - start index (default 0)'
1072
+ )
1073
+
1074
+ # Run bits to int and return its result
1075
+ #{self}.bits_to_int(
1076
+ bits: 'optional - bits value consumed by #bits_to_int'
1077
+ )
1078
+
1079
+ # Run even parity ok and return its result
1080
+ #{self}.even_parity_ok?(
1081
+ word: 'optional - word value consumed by #even_parity_ok?',
1082
+ width: 'optional - cyclic de Bruijn sequence width in bytes'
1083
+ )
1084
+
1085
+ # BCH(31,21) syndrome — generator poly 0b11101101001 (0x769)
1086
+ #{self}.bch_31_21_syndrome(
1087
+ word: 'optional - word value consumed by #bch_31_21_syndrome'
1088
+ )
1089
+
1090
+ # Run baudot decode and return its result
1091
+ #{self}.baudot_decode(
1092
+ bits: 'optional - bits value consumed by #baudot_decode'
1093
+ )
1094
+
1095
+ # Run rms dbfs and return its result
1096
+ #{self}.rms_dbfs(
1097
+ samples: 'required - samples value consumed by #rms_dbfs'
1098
+ )
1099
+
1100
+ # ── True-air I/Q primitives (used by Base.run_iq) ─────────────────
1101
+ #{self}.unpack_cs16le(
1102
+ data: 'required - raw String of interleaved little-endian s16 I/Q'
1103
+ )
1104
+
1105
+ # Run unpack cu8 and return its result
1106
+ #{self}.unpack_cu8(
1107
+ data: 'required - raw String of interleaved u8 I/Q (RTL-SDR)'
1108
+ )
1109
+
1110
+ # Run mag sq and return its result
1111
+ #{self}.mag_sq(
1112
+ iq: 'required - interleaved Array<Float> [I0,Q0,I1,Q1,…]'
1113
+ )
1114
+
1115
+ # Run fm demod iq and return its result
1116
+ #{self}.fm_demod_iq(
1117
+ iq: 'required - interleaved Array<Float> [I0,Q0,…]',
1118
+ kf: 'optional - modulation index scale (default 1.0)'
1119
+ )
1120
+
1121
+ # Run iq rms dbfs and return its result
1122
+ #{self}.iq_rms_dbfs(
1123
+ iq: 'required - interleaved Array<Float> [I0,Q0,…]'
1124
+ )
1125
+
1126
+ # Correlate a real template against magnitude-squared energy for
1127
+ #{self}.correlate(
1128
+ samples: 'required - samples value consumed by #correlate',
1129
+ template: 'required - Array<Float> (same units)'
1130
+ )
1131
+
1132
+ # ── True-air I/Q chain (all Decoder::* modules) ──────────────────
1133
+ #{self}.resample_iq(
1134
+ iq: 'required - interleaved [I0,Q0,…] Array<Float>',
1135
+ src_rate: 'required - Hz, dst_rate: required - Hz',
1136
+ dst_rate: 'optional - dst rate value consumed by #resample_iq'
1137
+ )
1138
+
1139
+ # Run mix iq and return its result
1140
+ #{self}.mix_iq(
1141
+ iq: 'required - interleaved I/Q, rate: required - Hz',
1142
+ freq: 'required - offset Hz to shift DOWN by',
1143
+ rate: 'optional - rate value consumed by #mix_iq'
1144
+ )
1145
+
1146
+ # Run gfsk slice and return its result
1147
+ #{self}.gfsk_slice(
1148
+ iq: 'required - interleaved I/Q, rate:, baud:',
1149
+ bt: 'optional - Gaussian BT (default 0.35), invert: false',
1150
+ rate: 'optional - rate value consumed by #gfsk_slice',
1151
+ baud: 'optional - baud value consumed by #gfsk_slice',
1152
+ invert: 'optional - invert value consumed by #gfsk_slice'
1153
+ )
1154
+
1155
+ # Run slice 4fsk and return its result
1156
+ #{self}.slice_4fsk(
1157
+ samples: 'required - real FM-discriminator baseband',
1158
+ rate: 'optional - rate value consumed by #slice_4fsk',
1159
+ baud: 'optional - baud value consumed by #slice_4fsk'
1160
+ )
1161
+
1162
+ # Run manchester decode and return its result
1163
+ #{self}.manchester_decode(
1164
+ bits: 'required - Array<0|1> at 2×data rate',
1165
+ ieee: 'optional - true = 01→1 10→0 (IEEE 802.3), else 10→1 01→0'
1166
+ )
1167
+
1168
+ # Run diff decode and return its result
1169
+ #{self}.diff_decode(
1170
+ bits: 'optional - bits value consumed by #diff_decode'
1171
+ )
1172
+
1173
+ # Run bytes from bits and return its result
1174
+ #{self}.bytes_from_bits(
1175
+ bits: 'optional - Array<0|1>, lsb_first: false',
1176
+ lsb_first: 'optional - lsb first value consumed by #bytes_from_bits'
1177
+ )
1178
+
1179
+ # Run crc16 and return its result
1180
+ #{self}.crc16(
1181
+ bytes: 'optional - Array<Integer>, poly: 0x1021, init: 0xFFFF',
1182
+ refin: 'optional - false, refout: false, xorout: 0x0000',
1183
+ poly: 'optional - poly value consumed by #crc16',
1184
+ init: 'optional - init value consumed by #crc16',
1185
+ refout: 'optional - refout value consumed by #crc16',
1186
+ xorout: 'optional - xorout value consumed by #crc16'
1187
+ )
1188
+
1189
+ # Run whiten lfsr and return its result
1190
+ #{self}.whiten_lfsr(
1191
+ bytes: 'optional - Array<Integer>, poly: Integer, init: Integer, width: 7',
1192
+ poly: 'optional - poly value consumed by #whiten_lfsr',
1193
+ init: 'optional - init value consumed by #whiten_lfsr',
1194
+ width: 'optional - cyclic de Bruijn sequence width in bytes'
1195
+ )
1196
+
1197
+ # Run ook pulses and return its result
1198
+ #{self}.ook_pulses(
1199
+ iq: 'required - interleaved I/Q, rate:',
1200
+ min_us: 'optional - drop shorter pulses (default 20)',
1201
+ rate: 'optional - rate value consumed by #ook_pulses'
1202
+ )
1203
+
1204
+ # Run cfft mag and return its result
1205
+ #{self}.cfft_mag(
1206
+ iq: 'required - interleaved I/Q, n: optional - FFT size',
1207
+ shift: 'optional - fftshift so DC is centred (default true)',
1208
+ n: 'optional - count, width, or size'
1209
+ )
1210
+
1211
+ # Naive O(n²) complex DFT — pure-Ruby fallback for small n
1212
+ #{self}.dft_naive(
1213
+ iq: 'optional - iq value consumed by #dft_naive',
1214
+ n: 'optional - count, width, or size'
1215
+ )
1216
+
1217
+ # Run zadoff chu and return its result
1218
+ #{self}.zadoff_chu(
1219
+ root: 'optional - root value consumed by #zadoff_chu',
1220
+ n: 'optional - count, width, or size'
1221
+ )
1222
+
1223
+ # Run ca code and return its result
1224
+ #{self}.ca_code(
1225
+ prn: 'required - prn value consumed by #ca_code'
1226
+ )
1227
+
1228
+ # Run cmul and return its result
1229
+ #{self}.cmul(
1230
+ a: 'optional - a value consumed by #cmul',
1231
+ b: 'optional - b value consumed by #cmul',
1232
+ conj_b: 'optional - conj b value consumed by #cmul'
1233
+ )
1234
+
1235
+ # Print the AUTHOR(S) string for this module.
1047
1236
  #{self}.authors
1048
1237
  "
1238
+ constants.sort
1049
1239
  end
1050
1240
  end
1051
1241
  end
@@ -473,24 +473,72 @@ module PWN
473
473
  # Display Usage for this Module
474
474
 
475
475
  public_class_method def self.help
476
- puts "USAGE (true-air I/Q + GQRX-audio native paths, no external binaries):
477
- #{self}.decode(
478
- freq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq'
476
+ puts "USAGE:
477
+ # Run sync check and return its result
478
+ #{self}.sync_check(
479
+ buf: 'optional - buf value consumed by #sync_check'
479
480
  )
480
481
 
481
- demod = #{self}::Demod.new(rate: 48_000)
482
- demod.feed(samples) { |msg| puts msg[:summary] }
482
+ # Run popcnt and return its result
483
+ #{self}.popcnt(
484
+ val: 'optional - val value consumed by #popcnt'
485
+ )
483
486
 
484
- #{self}.bch_fix(word: Integer) # [fixed, nerr]
485
- #{self}.alpha_decode(words:, mw1:, mw2:)
486
- #{self}.numeric_decode(words:, mw1:, mw2:)
487
+ # Run even parity and return its result
488
+ #{self}.even_parity?(
489
+ word: 'optional - word value consumed by #even_parity?'
490
+ )
491
+
492
+ # Run bch syn and return its result
493
+ #{self}.bch_syn(
494
+ word: 'optional - word value consumed by #bch_syn'
495
+ )
496
+
497
+ # Run bch fix and return its result
498
+ #{self}.bch_fix(
499
+ word: 'optional - word value consumed by #bch_fix'
500
+ )
501
+
502
+ # ) { |msg| ... }
503
+ #{self}.emit_phase(
504
+ words: 'optional - phase:, cycle:, frame:, mode:, sync_cw: (defaults to [])',
505
+ phase: 'optional - phase value consumed by #emit_phase',
506
+ cycle: 'optional - cycle value consumed by #emit_phase',
507
+ frame: 'optional - frame value consumed by #emit_phase',
508
+ mode: 'optional - mode value consumed by #emit_phase'
509
+ )
487
510
 
488
- NOTE: Set GQRX to Narrow FM (~15-20 kHz). All four FLEX modes
489
- (1600/2, 1600/4, 3200/2, 3200/4 sym-rate/levels) are
490
- fully decoded across every active phase (A/B/C/D).
511
+ # Run alpha decode and return its result
512
+ #{self}.alpha_decode(
513
+ words: 'optional - words value consumed by #alpha_decode (defaults to [])',
514
+ mw1: 'optional - mw1 value consumed by #alpha_decode',
515
+ mw2: 'optional - mw2 value consumed by #alpha_decode'
516
+ )
517
+
518
+ # Run numeric decode and return its result
519
+ #{self}.numeric_decode(
520
+ words: 'optional - words value consumed by #numeric_decode (defaults to [])',
521
+ mw1: 'optional - mw1 value consumed by #numeric_decode',
522
+ mw2: 'optional - mw2 value consumed by #numeric_decode'
523
+ )
524
+
525
+ # Run hex decode and return its result
526
+ #{self}.hex_decode(
527
+ words: 'optional - words value consumed by #hex_decode (defaults to [])'
528
+ )
529
+
530
+ # Run decode and return its result
531
+ #{self}.decode(
532
+ freq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq',
533
+ source: 'optional - source value consumed by #decode',
534
+ file: 'optional - filesystem path',
535
+ sample_rate: 'optional - sample rate value consumed by #decode'
536
+ )
491
537
 
538
+ # Print the AUTHOR(S) string for this module.
492
539
  #{self}.authors
493
540
  "
541
+ constants.sort
494
542
  end
495
543
  end
496
544
  end
@@ -140,15 +140,24 @@ module PWN
140
140
  end
141
141
 
142
142
  public_class_method def self.help
143
- puts "USAGE (true-air I/Q via PWN::FFI + detector fallback):
143
+ puts "USAGE:
144
+ # Run decode and return its result
144
145
  #{self}.decode(
145
146
  freq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq',
146
- source: 'optional - :auto|:rtlsdr|:adalm_pluto|:file',
147
- file: 'optional - .cu8/.cs16 capture (≥2.048 Msps)'
147
+ sample_rate: 'optional - sample rate value consumed by #decode',
148
+ source: 'optional - source value consumed by #decode',
149
+ file: 'optional - filesystem path'
148
150
  )
149
151
 
152
+ # Run parse line and return its result
153
+ #{self}.parse_line(
154
+ line: 'optional - line value consumed by #parse_line'
155
+ )
156
+
157
+ # Print the AUTHOR(S) string for this module.
150
158
  #{self}.authors
151
159
  "
160
+ constants.sort
152
161
  end
153
162
  end
154
163
  end
@@ -229,17 +229,37 @@ module PWN
229
229
  end
230
230
 
231
231
  public_class_method def self.help
232
- puts "USAGE (true-air I/Q via PWN::FFI + detector fallback):
232
+ puts "USAGE:
233
+ # Run viterbi decode and return its result
234
+ #{self}.viterbi_decode(
235
+ bits: 'required - Array<0|1> soft/hard coded bits (rate-1/2)',
236
+ k: 'optional - 5, g0: 0o23, g1: 0o33',
237
+ g0: 'optional - g0 value consumed by #viterbi_decode',
238
+ g1: 'optional - g1 value consumed by #viterbi_decode'
239
+ )
240
+
241
+ # Run parity and return its result
242
+ #{self}.parity(
243
+ parity: 'optional - parity value consumed by #parity'
244
+ )
245
+
246
+ # Run decode and return its result
233
247
  #{self}.decode(
234
248
  freq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq',
235
- source: 'optional - :auto|:rtlsdr|:adalm_pluto|:file',
236
- file: 'optional - .cu8/.cs16 capture (≥1.0833 Msps)'
249
+ sample_rate: 'optional - sample rate value consumed by #decode',
250
+ source: 'optional - source value consumed by #decode',
251
+ file: 'optional - filesystem path'
237
252
  )
238
253
 
239
- #{self}.viterbi_decode(bits:, k: 5, g0: 0o23, g1: 0o33)
254
+ # Run parse line and return its result
255
+ #{self}.parse_line(
256
+ line: 'optional - line value consumed by #parse_line'
257
+ )
240
258
 
259
+ # Print the AUTHOR(S) string for this module.
241
260
  #{self}.authors
242
261
  "
262
+ constants.sort
243
263
  end
244
264
  end
245
265
  end
@@ -112,15 +112,24 @@ module PWN
112
112
  end
113
113
 
114
114
  public_class_method def self.help
115
- puts "USAGE (true-air I/Q via PWN::FFI + detector fallback):
115
+ puts "USAGE:
116
+ # Run decode and return its result
116
117
  #{self}.decode(
117
118
  freq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq',
118
- source: 'optional - :auto|:rtlsdr|:adalm_pluto|:file',
119
- file: 'optional - .cu8/.cs16 capture'
119
+ sample_rate: 'optional - sample rate value consumed by #decode',
120
+ source: 'optional - source value consumed by #decode',
121
+ file: 'optional - filesystem path'
120
122
  )
121
123
 
124
+ # Run parse line and return its result
125
+ #{self}.parse_line(
126
+ line: 'optional - line value consumed by #parse_line'
127
+ )
128
+
129
+ # Print the AUTHOR(S) string for this module.
122
130
  #{self}.authors
123
131
  "
132
+ constants.sort
124
133
  end
125
134
  end
126
135
  end
@@ -172,16 +172,25 @@ module PWN
172
172
  end
173
173
 
174
174
  public_class_method def self.help
175
- puts "USAGE (true-air I/Q via PWN::FFI + detector fallback):
175
+ puts "USAGE:
176
+ # Run decode and return its result
176
177
  #{self}.decode(
177
178
  freq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq',
178
- source: 'optional - :auto|:rtlsdr|:adalm_pluto|:file',
179
- file: 'optional - .cu8/.cs16 capture',
180
- bw: 'optional - LoRa BW Hz (default 125000)'
179
+ bw: 'optional - bw value consumed by #decode',
180
+ sample_rate: 'optional - sample rate value consumed by #decode',
181
+ source: 'optional - source value consumed by #decode',
182
+ file: 'optional - filesystem path'
181
183
  )
182
184
 
185
+ # Run parse line and return its result
186
+ #{self}.parse_line(
187
+ line: 'optional - line value consumed by #parse_line'
188
+ )
189
+
190
+ # Print the AUTHOR(S) string for this module.
183
191
  #{self}.authors
184
192
  "
193
+ constants.sort
185
194
  end
186
195
  end
187
196
  end
@@ -236,15 +236,39 @@ module PWN
236
236
  end
237
237
 
238
238
  public_class_method def self.help
239
- puts "USAGE (true-air I/Q via PWN::FFI + detector fallback):
239
+ puts "USAGE:
240
+ # SSS helper: (m0, m1) pair for a given N_ID_1 per TS 36.211 §6.11.2
241
+ #{self}.sss_indices(
242
+ nid1: 'optional - nid1 value consumed by #sss_indices'
243
+ )
244
+
245
+ # Length-31 m-sequence x^5+x^2+1, cyclic-shifted by `shift`, as ±1
246
+ #{self}.mseq(
247
+ shift: 'optional - shift value consumed by #mseq'
248
+ )
249
+
250
+ # Scrambling sequence c0 (x^5+x^3+1) tied to N_ID_2, ±1
251
+ #{self}.cseq(
252
+ nid2: 'optional - nid2 value consumed by #cseq'
253
+ )
254
+
255
+ # Run decode and return its result
240
256
  #{self}.decode(
241
257
  freq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq',
242
- source: 'optional - :auto|:rtlsdr|:adalm_pluto|:file',
243
- file: 'optional - .cu8/.cs16 capture (≥1.92 Msps)'
258
+ sample_rate: 'optional - sample rate value consumed by #decode',
259
+ source: 'optional - source value consumed by #decode',
260
+ file: 'optional - filesystem path'
261
+ )
262
+
263
+ # Run parse line and return its result
264
+ #{self}.parse_line(
265
+ line: 'optional - line value consumed by #parse_line'
244
266
  )
245
267
 
268
+ # Print the AUTHOR(S) string for this module.
246
269
  #{self}.authors
247
270
  "
271
+ constants.sort
248
272
  end
249
273
  end
250
274
  end
@@ -139,15 +139,24 @@ module PWN
139
139
  # Display Usage for this Module
140
140
 
141
141
  public_class_method def self.help
142
- puts "USAGE (true-air I/Q + GQRX-audio native paths, no external binaries):
142
+ puts "USAGE:
143
+ # Run decode and return its result
143
144
  #{self}.decode(
144
- freq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq'
145
+ freq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq',
146
+ source: 'optional - source value consumed by #decode',
147
+ file: 'optional - filesystem path',
148
+ sample_rate: 'optional - sample rate value consumed by #decode'
145
149
  )
146
150
 
147
- #{self}.decode_string(pattern: '.- -...')
151
+ # Run decode string and return its result
152
+ #{self}.decode_string(
153
+ pattern: 'optional - pattern value consumed by #decode_string'
154
+ )
148
155
 
156
+ # Print the AUTHOR(S) string for this module.
149
157
  #{self}.authors
150
158
  "
159
+ constants.sort
151
160
  end
152
161
  end
153
162
  end
@@ -133,15 +133,24 @@ module PWN
133
133
  end
134
134
 
135
135
  public_class_method def self.help
136
- puts "USAGE (true-air I/Q via PWN::FFI + detector fallback):
136
+ puts "USAGE:
137
+ # Run decode and return its result
137
138
  #{self}.decode(
138
139
  freq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq',
139
- source: 'optional - :auto|:rtlsdr|:adalm_pluto|:file',
140
- file: 'optional - .cu8/.cs16 capture'
140
+ sample_rate: 'optional - sample rate value consumed by #decode',
141
+ source: 'optional - source value consumed by #decode',
142
+ file: 'optional - filesystem path'
141
143
  )
142
144
 
145
+ # Run parse line and return its result
146
+ #{self}.parse_line(
147
+ line: 'optional - line value consumed by #parse_line'
148
+ )
149
+
150
+ # Print the AUTHOR(S) string for this module.
143
151
  #{self}.authors
144
152
  "
153
+ constants.sort
145
154
  end
146
155
  end
147
156
  end
@@ -61,16 +61,19 @@ module PWN
61
61
  # Display Usage for this Module
62
62
 
63
63
  public_class_method def self.help
64
- puts "USAGE (true-air I/Q + GQRX-audio native paths, no external binaries):
64
+ puts "USAGE:
65
+ # Run decode and return its result
65
66
  #{self}.decode(
66
- freq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq'
67
+ freq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq',
68
+ source: 'optional - source value consumed by #decode',
69
+ file: 'optional - filesystem path',
70
+ sample_rate: 'optional - sample rate value consumed by #decode'
67
71
  )
68
72
 
69
- NOTE: Runs the native POCSAG (512/1200/2400) and FLEX (1600)
70
- demodulators in parallel on the same GQRX NBFM audio tap.
71
-
73
+ # Print the AUTHOR(S) string for this module.
72
74
  #{self}.authors
73
75
  "
76
+ constants.sort
74
77
  end
75
78
  end
76
79
  end