@elizaos/skills 2.0.0-alpha.3

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 (371) hide show
  1. package/README.md +126 -0
  2. package/package.json +53 -0
  3. package/skills/1password/SKILL.md +70 -0
  4. package/skills/1password/references/cli-examples.md +29 -0
  5. package/skills/1password/references/get-started.md +17 -0
  6. package/skills/apple-notes/SKILL.md +77 -0
  7. package/skills/apple-reminders/SKILL.md +96 -0
  8. package/skills/bear-notes/SKILL.md +107 -0
  9. package/skills/bird/SKILL.md +224 -0
  10. package/skills/blogwatcher/SKILL.md +69 -0
  11. package/skills/blucli/SKILL.md +47 -0
  12. package/skills/bluebubbles/SKILL.md +131 -0
  13. package/skills/camsnap/SKILL.md +45 -0
  14. package/skills/canvas/SKILL.md +203 -0
  15. package/skills/clawhub/SKILL.md +77 -0
  16. package/skills/coding-agent/SKILL.md +284 -0
  17. package/skills/discord/SKILL.md +578 -0
  18. package/skills/eightctl/SKILL.md +50 -0
  19. package/skills/food-order/SKILL.md +48 -0
  20. package/skills/gemini/SKILL.md +43 -0
  21. package/skills/gifgrep/SKILL.md +79 -0
  22. package/skills/github/SKILL.md +77 -0
  23. package/skills/gog/SKILL.md +116 -0
  24. package/skills/goplaces/SKILL.md +52 -0
  25. package/skills/healthcheck/SKILL.md +245 -0
  26. package/skills/himalaya/SKILL.md +257 -0
  27. package/skills/himalaya/references/configuration.md +184 -0
  28. package/skills/himalaya/references/message-composition.md +199 -0
  29. package/skills/imsg/SKILL.md +74 -0
  30. package/skills/local-places/SERVER_README.md +101 -0
  31. package/skills/local-places/SKILL.md +102 -0
  32. package/skills/local-places/pyproject.toml +21 -0
  33. package/skills/local-places/src/local_places/__init__.py +2 -0
  34. package/skills/local-places/src/local_places/google_places.py +314 -0
  35. package/skills/local-places/src/local_places/main.py +65 -0
  36. package/skills/local-places/src/local_places/schemas.py +107 -0
  37. package/skills/mcporter/SKILL.md +61 -0
  38. package/skills/model-usage/SKILL.md +69 -0
  39. package/skills/model-usage/references/codexbar-cli.md +33 -0
  40. package/skills/model-usage/scripts/model_usage.py +310 -0
  41. package/skills/nano-banana-pro/SKILL.md +58 -0
  42. package/skills/nano-banana-pro/scripts/generate_image.py +184 -0
  43. package/skills/nano-pdf/SKILL.md +38 -0
  44. package/skills/notion/SKILL.md +172 -0
  45. package/skills/obsidian/SKILL.md +81 -0
  46. package/skills/openai-image-gen/SKILL.md +89 -0
  47. package/skills/openai-image-gen/scripts/gen.py +240 -0
  48. package/skills/openai-whisper/SKILL.md +38 -0
  49. package/skills/openai-whisper-api/SKILL.md +52 -0
  50. package/skills/openai-whisper-api/scripts/transcribe.sh +85 -0
  51. package/skills/openhue/SKILL.md +51 -0
  52. package/skills/oracle/SKILL.md +125 -0
  53. package/skills/ordercli/SKILL.md +78 -0
  54. package/skills/peekaboo/SKILL.md +190 -0
  55. package/skills/sag/SKILL.md +87 -0
  56. package/skills/security-ask-questions-if-underspecified/.claude-plugin/plugin.json +10 -0
  57. package/skills/security-ask-questions-if-underspecified/README.md +24 -0
  58. package/skills/security-ask-questions-if-underspecified/skills/ask-questions-if-underspecified/SKILL.md +85 -0
  59. package/skills/security-audit-context-building/.claude-plugin/plugin.json +10 -0
  60. package/skills/security-audit-context-building/README.md +58 -0
  61. package/skills/security-audit-context-building/commands/audit-context.md +21 -0
  62. package/skills/security-audit-context-building/skills/audit-context-building/SKILL.md +297 -0
  63. package/skills/security-audit-context-building/skills/audit-context-building/resources/COMPLETENESS_CHECKLIST.md +47 -0
  64. package/skills/security-audit-context-building/skills/audit-context-building/resources/FUNCTION_MICRO_ANALYSIS_EXAMPLE.md +355 -0
  65. package/skills/security-audit-context-building/skills/audit-context-building/resources/OUTPUT_REQUIREMENTS.md +71 -0
  66. package/skills/security-building-secure-contracts/.claude-plugin/plugin.json +10 -0
  67. package/skills/security-building-secure-contracts/README.md +241 -0
  68. package/skills/security-building-secure-contracts/skills/algorand-vulnerability-scanner/SKILL.md +284 -0
  69. package/skills/security-building-secure-contracts/skills/algorand-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +405 -0
  70. package/skills/security-building-secure-contracts/skills/audit-prep-assistant/SKILL.md +409 -0
  71. package/skills/security-building-secure-contracts/skills/cairo-vulnerability-scanner/SKILL.md +329 -0
  72. package/skills/security-building-secure-contracts/skills/cairo-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +722 -0
  73. package/skills/security-building-secure-contracts/skills/code-maturity-assessor/SKILL.md +218 -0
  74. package/skills/security-building-secure-contracts/skills/code-maturity-assessor/resources/ASSESSMENT_CRITERIA.md +355 -0
  75. package/skills/security-building-secure-contracts/skills/code-maturity-assessor/resources/EXAMPLE_REPORT.md +248 -0
  76. package/skills/security-building-secure-contracts/skills/code-maturity-assessor/resources/REPORT_FORMAT.md +33 -0
  77. package/skills/security-building-secure-contracts/skills/cosmos-vulnerability-scanner/SKILL.md +334 -0
  78. package/skills/security-building-secure-contracts/skills/cosmos-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +740 -0
  79. package/skills/security-building-secure-contracts/skills/guidelines-advisor/SKILL.md +252 -0
  80. package/skills/security-building-secure-contracts/skills/guidelines-advisor/resources/ASSESSMENT_AREAS.md +329 -0
  81. package/skills/security-building-secure-contracts/skills/guidelines-advisor/resources/DELIVERABLES.md +118 -0
  82. package/skills/security-building-secure-contracts/skills/guidelines-advisor/resources/EXAMPLE_REPORT.md +298 -0
  83. package/skills/security-building-secure-contracts/skills/secure-workflow-guide/SKILL.md +161 -0
  84. package/skills/security-building-secure-contracts/skills/secure-workflow-guide/resources/EXAMPLE_REPORT.md +279 -0
  85. package/skills/security-building-secure-contracts/skills/secure-workflow-guide/resources/WORKFLOW_STEPS.md +132 -0
  86. package/skills/security-building-secure-contracts/skills/solana-vulnerability-scanner/SKILL.md +389 -0
  87. package/skills/security-building-secure-contracts/skills/solana-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +669 -0
  88. package/skills/security-building-secure-contracts/skills/substrate-vulnerability-scanner/SKILL.md +298 -0
  89. package/skills/security-building-secure-contracts/skills/substrate-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +791 -0
  90. package/skills/security-building-secure-contracts/skills/token-integration-analyzer/SKILL.md +362 -0
  91. package/skills/security-building-secure-contracts/skills/token-integration-analyzer/resources/ASSESSMENT_CATEGORIES.md +571 -0
  92. package/skills/security-building-secure-contracts/skills/token-integration-analyzer/resources/REPORT_TEMPLATES.md +141 -0
  93. package/skills/security-building-secure-contracts/skills/ton-vulnerability-scanner/SKILL.md +388 -0
  94. package/skills/security-building-secure-contracts/skills/ton-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +595 -0
  95. package/skills/security-burpsuite-project-parser/.claude-plugin/plugin.json +10 -0
  96. package/skills/security-burpsuite-project-parser/README.md +103 -0
  97. package/skills/security-burpsuite-project-parser/commands/burp-search.md +18 -0
  98. package/skills/security-burpsuite-project-parser/skills/SKILL.md +358 -0
  99. package/skills/security-burpsuite-project-parser/skills/scripts/burp-search.sh +99 -0
  100. package/skills/security-claude-in-chrome-troubleshooting/.claude-plugin/plugin.json +8 -0
  101. package/skills/security-claude-in-chrome-troubleshooting/README.md +31 -0
  102. package/skills/security-claude-in-chrome-troubleshooting/skills/claude-in-chrome-troubleshooting/SKILL.md +251 -0
  103. package/skills/security-constant-time-analysis/.claude-plugin/plugin.json +9 -0
  104. package/skills/security-constant-time-analysis/README.md +381 -0
  105. package/skills/security-constant-time-analysis/commands/ct-check.md +20 -0
  106. package/skills/security-constant-time-analysis/ct_analyzer/__init__.py +49 -0
  107. package/skills/security-constant-time-analysis/ct_analyzer/analyzer.py +1284 -0
  108. package/skills/security-constant-time-analysis/ct_analyzer/script_analyzers.py +3081 -0
  109. package/skills/security-constant-time-analysis/ct_analyzer/tests/__init__.py +1 -0
  110. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_analyzer.py +1397 -0
  111. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/bn_excerpt.js +205 -0
  112. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/decompose_constant_time.c +181 -0
  113. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/decompose_vulnerable.c +74 -0
  114. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/decompose_vulnerable.go +78 -0
  115. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/decompose_vulnerable.rs +92 -0
  116. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.cs +174 -0
  117. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.java +161 -0
  118. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.kt +181 -0
  119. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.php +140 -0
  120. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.py +252 -0
  121. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.rb +188 -0
  122. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.swift +199 -0
  123. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.ts +154 -0
  124. package/skills/security-constant-time-analysis/pyproject.toml +52 -0
  125. package/skills/security-constant-time-analysis/skills/constant-time-analysis/README.md +90 -0
  126. package/skills/security-constant-time-analysis/skills/constant-time-analysis/SKILL.md +219 -0
  127. package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/compiled.md +129 -0
  128. package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/javascript.md +136 -0
  129. package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/kotlin.md +252 -0
  130. package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/php.md +172 -0
  131. package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/python.md +179 -0
  132. package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/ruby.md +198 -0
  133. package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/swift.md +288 -0
  134. package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/vm-compiled.md +354 -0
  135. package/skills/security-constant-time-analysis/uv.lock +8 -0
  136. package/skills/security-culture-index/.claude-plugin/plugin.json +8 -0
  137. package/skills/security-culture-index/README.md +79 -0
  138. package/skills/security-culture-index/skills/interpreting-culture-index/SKILL.md +293 -0
  139. package/skills/security-culture-index/skills/interpreting-culture-index/references/anti-patterns.md +255 -0
  140. package/skills/security-culture-index/skills/interpreting-culture-index/references/conversation-starters.md +408 -0
  141. package/skills/security-culture-index/skills/interpreting-culture-index/references/interview-trait-signals.md +253 -0
  142. package/skills/security-culture-index/skills/interpreting-culture-index/references/motivators.md +158 -0
  143. package/skills/security-culture-index/skills/interpreting-culture-index/references/patterns-archetypes.md +147 -0
  144. package/skills/security-culture-index/skills/interpreting-culture-index/references/primary-traits.md +307 -0
  145. package/skills/security-culture-index/skills/interpreting-culture-index/references/secondary-traits.md +228 -0
  146. package/skills/security-culture-index/skills/interpreting-culture-index/references/team-composition.md +148 -0
  147. package/skills/security-culture-index/skills/interpreting-culture-index/scripts/check_deps.py +108 -0
  148. package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/__init__.py +20 -0
  149. package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/constants.py +122 -0
  150. package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/extract.py +187 -0
  151. package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/models.py +16 -0
  152. package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/opencv_extractor.py +520 -0
  153. package/skills/security-culture-index/skills/interpreting-culture-index/scripts/extract_pdf.py +237 -0
  154. package/skills/security-culture-index/skills/interpreting-culture-index/scripts/pyproject.toml +18 -0
  155. package/skills/security-culture-index/skills/interpreting-culture-index/templates/burnout-report.md +113 -0
  156. package/skills/security-culture-index/skills/interpreting-culture-index/templates/comparison-report.md +103 -0
  157. package/skills/security-culture-index/skills/interpreting-culture-index/templates/hiring-profile.md +127 -0
  158. package/skills/security-culture-index/skills/interpreting-culture-index/templates/individual-report.md +85 -0
  159. package/skills/security-culture-index/skills/interpreting-culture-index/templates/predicted-profile.md +165 -0
  160. package/skills/security-culture-index/skills/interpreting-culture-index/templates/team-report.md +109 -0
  161. package/skills/security-culture-index/skills/interpreting-culture-index/workflows/analyze-team.md +188 -0
  162. package/skills/security-culture-index/skills/interpreting-culture-index/workflows/coach-manager.md +267 -0
  163. package/skills/security-culture-index/skills/interpreting-culture-index/workflows/compare-profiles.md +188 -0
  164. package/skills/security-culture-index/skills/interpreting-culture-index/workflows/define-hiring-profile.md +220 -0
  165. package/skills/security-culture-index/skills/interpreting-culture-index/workflows/detect-burnout.md +206 -0
  166. package/skills/security-culture-index/skills/interpreting-culture-index/workflows/extract-from-pdf.md +121 -0
  167. package/skills/security-culture-index/skills/interpreting-culture-index/workflows/interpret-individual.md +183 -0
  168. package/skills/security-culture-index/skills/interpreting-culture-index/workflows/interview-debrief.md +234 -0
  169. package/skills/security-culture-index/skills/interpreting-culture-index/workflows/mediate-conflict.md +306 -0
  170. package/skills/security-culture-index/skills/interpreting-culture-index/workflows/plan-onboarding.md +322 -0
  171. package/skills/security-culture-index/skills/interpreting-culture-index/workflows/predict-from-interview.md +250 -0
  172. package/skills/security-differential-review/.claude-plugin/plugin.json +10 -0
  173. package/skills/security-differential-review/README.md +109 -0
  174. package/skills/security-differential-review/commands/diff-review.md +21 -0
  175. package/skills/security-differential-review/skills/differential-review/SKILL.md +220 -0
  176. package/skills/security-differential-review/skills/differential-review/adversarial.md +203 -0
  177. package/skills/security-differential-review/skills/differential-review/methodology.md +234 -0
  178. package/skills/security-differential-review/skills/differential-review/patterns.md +300 -0
  179. package/skills/security-differential-review/skills/differential-review/reporting.md +369 -0
  180. package/skills/security-dwarf-expert/.claude-plugin/plugin.json +10 -0
  181. package/skills/security-dwarf-expert/README.md +38 -0
  182. package/skills/security-dwarf-expert/skills/dwarf-expert/SKILL.md +93 -0
  183. package/skills/security-dwarf-expert/skills/dwarf-expert/reference/coding.md +31 -0
  184. package/skills/security-dwarf-expert/skills/dwarf-expert/reference/dwarfdump.md +50 -0
  185. package/skills/security-dwarf-expert/skills/dwarf-expert/reference/readelf.md +8 -0
  186. package/skills/security-entry-point-analyzer/.claude-plugin/plugin.json +10 -0
  187. package/skills/security-entry-point-analyzer/README.md +74 -0
  188. package/skills/security-entry-point-analyzer/commands/entry-points.md +18 -0
  189. package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/SKILL.md +251 -0
  190. package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/cosmwasm.md +182 -0
  191. package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/move-aptos.md +107 -0
  192. package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/move-sui.md +87 -0
  193. package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/solana.md +155 -0
  194. package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/solidity.md +135 -0
  195. package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/ton.md +185 -0
  196. package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/vyper.md +141 -0
  197. package/skills/security-firebase-apk-scanner/.claude-plugin/plugin.json +10 -0
  198. package/skills/security-firebase-apk-scanner/README.md +85 -0
  199. package/skills/security-firebase-apk-scanner/commands/scan-apk.md +18 -0
  200. package/skills/security-firebase-apk-scanner/scanner.sh +1408 -0
  201. package/skills/security-firebase-apk-scanner/skills/firebase-apk-scanner/SKILL.md +197 -0
  202. package/skills/security-firebase-apk-scanner/skills/firebase-apk-scanner/references/vulnerabilities.md +803 -0
  203. package/skills/security-fix-review/.claude-plugin/plugin.json +13 -0
  204. package/skills/security-fix-review/README.md +118 -0
  205. package/skills/security-fix-review/commands/fix-review.md +24 -0
  206. package/skills/security-fix-review/skills/fix-review/SKILL.md +264 -0
  207. package/skills/security-fix-review/skills/fix-review/references/bug-detection.md +408 -0
  208. package/skills/security-fix-review/skills/fix-review/references/finding-matching.md +298 -0
  209. package/skills/security-fix-review/skills/fix-review/references/report-parsing.md +398 -0
  210. package/skills/security-insecure-defaults/.claude-plugin/plugin.json +10 -0
  211. package/skills/security-insecure-defaults/README.md +45 -0
  212. package/skills/security-insecure-defaults/skills/insecure-defaults/SKILL.md +117 -0
  213. package/skills/security-insecure-defaults/skills/insecure-defaults/references/examples.md +409 -0
  214. package/skills/security-modern-python/.claude-plugin/plugin.json +10 -0
  215. package/skills/security-modern-python/README.md +58 -0
  216. package/skills/security-modern-python/hooks/hooks.json +16 -0
  217. package/skills/security-modern-python/hooks/intercept-legacy-python.bats +388 -0
  218. package/skills/security-modern-python/hooks/intercept-legacy-python.sh +109 -0
  219. package/skills/security-modern-python/hooks/test_helper.bash +75 -0
  220. package/skills/security-modern-python/skills/modern-python/SKILL.md +333 -0
  221. package/skills/security-modern-python/skills/modern-python/references/dependabot.md +43 -0
  222. package/skills/security-modern-python/skills/modern-python/references/migration-checklist.md +141 -0
  223. package/skills/security-modern-python/skills/modern-python/references/pep723-scripts.md +259 -0
  224. package/skills/security-modern-python/skills/modern-python/references/prek.md +211 -0
  225. package/skills/security-modern-python/skills/modern-python/references/pyproject.md +254 -0
  226. package/skills/security-modern-python/skills/modern-python/references/ruff-config.md +240 -0
  227. package/skills/security-modern-python/skills/modern-python/references/security-setup.md +255 -0
  228. package/skills/security-modern-python/skills/modern-python/references/testing.md +284 -0
  229. package/skills/security-modern-python/skills/modern-python/references/uv-commands.md +200 -0
  230. package/skills/security-modern-python/skills/modern-python/templates/dependabot.yml +36 -0
  231. package/skills/security-modern-python/skills/modern-python/templates/pre-commit-config.yaml +66 -0
  232. package/skills/security-property-based-testing/.claude-plugin/plugin.json +9 -0
  233. package/skills/security-property-based-testing/README.md +47 -0
  234. package/skills/security-property-based-testing/skills/property-based-testing/README.md +88 -0
  235. package/skills/security-property-based-testing/skills/property-based-testing/SKILL.md +109 -0
  236. package/skills/security-property-based-testing/skills/property-based-testing/references/design.md +191 -0
  237. package/skills/security-property-based-testing/skills/property-based-testing/references/generating.md +200 -0
  238. package/skills/security-property-based-testing/skills/property-based-testing/references/libraries.md +130 -0
  239. package/skills/security-property-based-testing/skills/property-based-testing/references/refactoring.md +181 -0
  240. package/skills/security-property-based-testing/skills/property-based-testing/references/reviewing.md +209 -0
  241. package/skills/security-property-based-testing/skills/property-based-testing/references/strategies.md +124 -0
  242. package/skills/semgrep-rule-creator/.claude-plugin/plugin.json +8 -0
  243. package/skills/semgrep-rule-creator/README.md +43 -0
  244. package/skills/semgrep-rule-creator/commands/semgrep-rule.md +26 -0
  245. package/skills/semgrep-rule-creator/skills/semgrep-rule-creator/SKILL.md +168 -0
  246. package/skills/semgrep-rule-creator/skills/semgrep-rule-creator/references/quick-reference.md +203 -0
  247. package/skills/semgrep-rule-creator/skills/semgrep-rule-creator/references/workflow.md +240 -0
  248. package/skills/semgrep-rule-variant-creator/.claude-plugin/plugin.json +9 -0
  249. package/skills/semgrep-rule-variant-creator/README.md +86 -0
  250. package/skills/semgrep-rule-variant-creator/skills/semgrep-rule-variant-creator/SKILL.md +205 -0
  251. package/skills/semgrep-rule-variant-creator/skills/semgrep-rule-variant-creator/references/applicability-analysis.md +250 -0
  252. package/skills/semgrep-rule-variant-creator/skills/semgrep-rule-variant-creator/references/language-syntax-guide.md +324 -0
  253. package/skills/semgrep-rule-variant-creator/skills/semgrep-rule-variant-creator/references/workflow.md +518 -0
  254. package/skills/session-logs/SKILL.md +115 -0
  255. package/skills/sharp-edges/.claude-plugin/plugin.json +10 -0
  256. package/skills/sharp-edges/README.md +48 -0
  257. package/skills/sharp-edges/skills/sharp-edges/SKILL.md +292 -0
  258. package/skills/sharp-edges/skills/sharp-edges/references/auth-patterns.md +252 -0
  259. package/skills/sharp-edges/skills/sharp-edges/references/case-studies.md +274 -0
  260. package/skills/sharp-edges/skills/sharp-edges/references/config-patterns.md +333 -0
  261. package/skills/sharp-edges/skills/sharp-edges/references/crypto-apis.md +190 -0
  262. package/skills/sharp-edges/skills/sharp-edges/references/lang-c.md +205 -0
  263. package/skills/sharp-edges/skills/sharp-edges/references/lang-csharp.md +285 -0
  264. package/skills/sharp-edges/skills/sharp-edges/references/lang-go.md +270 -0
  265. package/skills/sharp-edges/skills/sharp-edges/references/lang-java.md +263 -0
  266. package/skills/sharp-edges/skills/sharp-edges/references/lang-javascript.md +269 -0
  267. package/skills/sharp-edges/skills/sharp-edges/references/lang-kotlin.md +265 -0
  268. package/skills/sharp-edges/skills/sharp-edges/references/lang-php.md +245 -0
  269. package/skills/sharp-edges/skills/sharp-edges/references/lang-python.md +274 -0
  270. package/skills/sharp-edges/skills/sharp-edges/references/lang-ruby.md +273 -0
  271. package/skills/sharp-edges/skills/sharp-edges/references/lang-rust.md +272 -0
  272. package/skills/sharp-edges/skills/sharp-edges/references/lang-swift.md +287 -0
  273. package/skills/sharp-edges/skills/sharp-edges/references/language-specific.md +588 -0
  274. package/skills/sherpa-onnx-tts/SKILL.md +103 -0
  275. package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +178 -0
  276. package/skills/skill-creator/SKILL.md +370 -0
  277. package/skills/skill-creator/license.txt +202 -0
  278. package/skills/skill-creator/scripts/init_skill.py +378 -0
  279. package/skills/skill-creator/scripts/package_skill.py +111 -0
  280. package/skills/skill-creator/scripts/quick_validate.py +101 -0
  281. package/skills/slack/SKILL.md +144 -0
  282. package/skills/songsee/SKILL.md +49 -0
  283. package/skills/sonoscli/SKILL.md +46 -0
  284. package/skills/spec-to-code-compliance/.claude-plugin/plugin.json +10 -0
  285. package/skills/spec-to-code-compliance/README.md +67 -0
  286. package/skills/spec-to-code-compliance/commands/spec-compliance.md +22 -0
  287. package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/SKILL.md +349 -0
  288. package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/resources/COMPLETENESS_CHECKLIST.md +69 -0
  289. package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/resources/IR_EXAMPLES.md +417 -0
  290. package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/resources/OUTPUT_REQUIREMENTS.md +105 -0
  291. package/skills/spotify-player/SKILL.md +64 -0
  292. package/skills/static-analysis/.claude-plugin/plugin.json +8 -0
  293. package/skills/static-analysis/README.md +59 -0
  294. package/skills/static-analysis/skills/codeql/SKILL.md +315 -0
  295. package/skills/static-analysis/skills/sarif-parsing/SKILL.md +479 -0
  296. package/skills/static-analysis/skills/sarif-parsing/resources/jq-queries.md +162 -0
  297. package/skills/static-analysis/skills/sarif-parsing/resources/sarif_helpers.py +331 -0
  298. package/skills/static-analysis/skills/semgrep/SKILL.md +337 -0
  299. package/skills/summarize/SKILL.md +87 -0
  300. package/skills/testing-handbook-skills/.claude-plugin/plugin.json +8 -0
  301. package/skills/testing-handbook-skills/README.md +241 -0
  302. package/skills/testing-handbook-skills/scripts/pyproject.toml +8 -0
  303. package/skills/testing-handbook-skills/scripts/validate-skills.py +657 -0
  304. package/skills/testing-handbook-skills/skills/address-sanitizer/SKILL.md +341 -0
  305. package/skills/testing-handbook-skills/skills/aflpp/SKILL.md +640 -0
  306. package/skills/testing-handbook-skills/skills/atheris/SKILL.md +515 -0
  307. package/skills/testing-handbook-skills/skills/cargo-fuzz/SKILL.md +454 -0
  308. package/skills/testing-handbook-skills/skills/codeql/SKILL.md +549 -0
  309. package/skills/testing-handbook-skills/skills/constant-time-testing/SKILL.md +507 -0
  310. package/skills/testing-handbook-skills/skills/coverage-analysis/SKILL.md +607 -0
  311. package/skills/testing-handbook-skills/skills/fuzzing-dictionary/SKILL.md +297 -0
  312. package/skills/testing-handbook-skills/skills/fuzzing-obstacles/SKILL.md +426 -0
  313. package/skills/testing-handbook-skills/skills/harness-writing/SKILL.md +614 -0
  314. package/skills/testing-handbook-skills/skills/libafl/SKILL.md +625 -0
  315. package/skills/testing-handbook-skills/skills/libfuzzer/SKILL.md +795 -0
  316. package/skills/testing-handbook-skills/skills/ossfuzz/SKILL.md +426 -0
  317. package/skills/testing-handbook-skills/skills/ruzzy/SKILL.md +443 -0
  318. package/skills/testing-handbook-skills/skills/semgrep/SKILL.md +601 -0
  319. package/skills/testing-handbook-skills/skills/testing-handbook-generator/SKILL.md +372 -0
  320. package/skills/testing-handbook-skills/skills/testing-handbook-generator/agent-prompt.md +280 -0
  321. package/skills/testing-handbook-skills/skills/testing-handbook-generator/discovery.md +452 -0
  322. package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/domain-skill.md +504 -0
  323. package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/fuzzer-skill.md +454 -0
  324. package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/technique-skill.md +527 -0
  325. package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/tool-skill.md +366 -0
  326. package/skills/testing-handbook-skills/skills/testing-handbook-generator/testing.md +482 -0
  327. package/skills/testing-handbook-skills/skills/wycheproof/SKILL.md +533 -0
  328. package/skills/things-mac/SKILL.md +86 -0
  329. package/skills/tmux/SKILL.md +135 -0
  330. package/skills/tmux/scripts/find-sessions.sh +112 -0
  331. package/skills/tmux/scripts/wait-for-text.sh +83 -0
  332. package/skills/trello/SKILL.md +95 -0
  333. package/skills/variant-analysis/.claude-plugin/plugin.json +8 -0
  334. package/skills/variant-analysis/README.md +41 -0
  335. package/skills/variant-analysis/commands/variants.md +23 -0
  336. package/skills/variant-analysis/skills/variant-analysis/METHODOLOGY.md +327 -0
  337. package/skills/variant-analysis/skills/variant-analysis/SKILL.md +142 -0
  338. package/skills/variant-analysis/skills/variant-analysis/resources/codeql/cpp.ql +119 -0
  339. package/skills/variant-analysis/skills/variant-analysis/resources/codeql/go.ql +69 -0
  340. package/skills/variant-analysis/skills/variant-analysis/resources/codeql/java.ql +71 -0
  341. package/skills/variant-analysis/skills/variant-analysis/resources/codeql/javascript.ql +63 -0
  342. package/skills/variant-analysis/skills/variant-analysis/resources/codeql/python.ql +80 -0
  343. package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/cpp.yaml +98 -0
  344. package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/go.yaml +63 -0
  345. package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/java.yaml +61 -0
  346. package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/javascript.yaml +60 -0
  347. package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/python.yaml +72 -0
  348. package/skills/variant-analysis/skills/variant-analysis/resources/variant-report-template.md +75 -0
  349. package/skills/video-frames/SKILL.md +46 -0
  350. package/skills/video-frames/scripts/frame.sh +81 -0
  351. package/skills/voice-call/SKILL.md +45 -0
  352. package/skills/wacli/SKILL.md +72 -0
  353. package/skills/weather/SKILL.md +54 -0
  354. package/skills/yara-authoring/.claude-plugin/plugin.json +9 -0
  355. package/skills/yara-authoring/README.md +131 -0
  356. package/skills/yara-authoring/skills/yara-rule-authoring/SKILL.md +645 -0
  357. package/skills/yara-authoring/skills/yara-rule-authoring/examples/MAL_Mac_ProtonRAT_Jan25.yar +99 -0
  358. package/skills/yara-authoring/skills/yara-rule-authoring/examples/MAL_NPM_SupplyChain_Jan25.yar +170 -0
  359. package/skills/yara-authoring/skills/yara-rule-authoring/examples/MAL_Win_Remcos_Jan25.yar +103 -0
  360. package/skills/yara-authoring/skills/yara-rule-authoring/examples/SUSP_CRX_SuspiciousPermissions.yar +134 -0
  361. package/skills/yara-authoring/skills/yara-rule-authoring/examples/SUSP_JS_Obfuscation_Jan25.yar +185 -0
  362. package/skills/yara-authoring/skills/yara-rule-authoring/references/crx-module.md +214 -0
  363. package/skills/yara-authoring/skills/yara-rule-authoring/references/dex-module.md +383 -0
  364. package/skills/yara-authoring/skills/yara-rule-authoring/references/performance.md +333 -0
  365. package/skills/yara-authoring/skills/yara-rule-authoring/references/strings.md +433 -0
  366. package/skills/yara-authoring/skills/yara-rule-authoring/references/style-guide.md +257 -0
  367. package/skills/yara-authoring/skills/yara-rule-authoring/references/testing.md +399 -0
  368. package/skills/yara-authoring/skills/yara-rule-authoring/scripts/atom_analyzer.py +526 -0
  369. package/skills/yara-authoring/skills/yara-rule-authoring/scripts/pyproject.toml +25 -0
  370. package/skills/yara-authoring/skills/yara-rule-authoring/scripts/yara_lint.py +631 -0
  371. package/skills/yara-authoring/skills/yara-rule-authoring/workflows/rule-development.md +493 -0
@@ -0,0 +1,205 @@
1
+ /**
2
+ * Excerpt from bn.js - BigNumber library
3
+ * https://github.com/indutny/bn.js
4
+ *
5
+ * This excerpt demonstrates common timing vulnerability patterns
6
+ * in JavaScript cryptographic libraries.
7
+ */
8
+
9
+ // Division operations - use hardware division which has variable timing
10
+ BN.prototype.div = function div(num) {
11
+ return this.divmod(num, 'div', false).div;
12
+ };
13
+
14
+ BN.prototype.mod = function mod(num) {
15
+ return this.divmod(num, 'mod', false).mod;
16
+ };
17
+
18
+ BN.prototype.umod = function umod(num) {
19
+ return this.divmod(num, 'mod', true).mod;
20
+ };
21
+
22
+ // Comparison function - early-exit on sign differences leaks timing
23
+ BN.prototype.cmp = function cmp(num) {
24
+ if (this.negative !== 0 && num.negative === 0) return -1;
25
+ if (this.negative === 0 && num.negative !== 0) return 1;
26
+
27
+ var res = this.ucmp(num);
28
+ if (this.negative !== 0) return -res | 0;
29
+ return res;
30
+ };
31
+
32
+ // Unsigned comparison - iterates until difference found (timing leak)
33
+ BN.prototype.ucmp = function ucmp(num) {
34
+ if (this.length > num.length) return 1;
35
+ if (this.length < num.length) return -1;
36
+
37
+ var res = 0;
38
+ for (var i = this.length - 1; i >= 0; i--) {
39
+ var a = this.words[i] | 0;
40
+ var b = num.words[i] | 0;
41
+ if (a === b) continue; // Early exit - timing leak!
42
+ if (a < b) {
43
+ res = -1;
44
+ } else if (a > b) {
45
+ res = 1;
46
+ }
47
+ break;
48
+ }
49
+ return res;
50
+ };
51
+
52
+ // Modular exponentiation - windowed method with data-dependent branches
53
+ Red.prototype.pow = function pow(a, num) {
54
+ if (num.isZero()) return new BN(1).toRed(this);
55
+ if (num.cmpn(1) === 0) return a.clone();
56
+
57
+ var windowSize = 4;
58
+ var wnd = new Array(1 << windowSize);
59
+ wnd[0] = new BN(1).toRed(this);
60
+ wnd[1] = a;
61
+ for (var i = 2; i < wnd.length; i++) {
62
+ wnd[i] = this.mul(wnd[i - 1], a);
63
+ }
64
+
65
+ var res = wnd[0];
66
+ var current = 0;
67
+ var currentLen = 0;
68
+ var start = num.bitLength() % 26;
69
+ if (start === 0) {
70
+ start = 26;
71
+ }
72
+
73
+ for (i = num.length - 1; i >= 0; i--) {
74
+ var word = num.words[i];
75
+ for (var j = start - 1; j >= 0; j--) {
76
+ var bit = (word >> j) & 1;
77
+ if (res !== wnd[0]) {
78
+ res = this.sqr(res);
79
+ }
80
+ // Data-dependent branch on secret exponent bit!
81
+ if (bit === 0 && current === 0) {
82
+ currentLen = 0;
83
+ continue;
84
+ }
85
+ current <<= 1;
86
+ current |= bit;
87
+ currentLen++;
88
+ if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
89
+ res = this.mul(res, wnd[current]);
90
+ currentLen = 0;
91
+ current = 0;
92
+ }
93
+ start = 26;
94
+ }
95
+
96
+ return res;
97
+ };
98
+
99
+ // Division with remainder - internally uses variable-time division
100
+ BN.prototype.divmod = function divmod(num, mode, positive) {
101
+ if (num.isZero()) {
102
+ throw new Error('division by zero');
103
+ }
104
+
105
+ if (this.isZero()) {
106
+ return {
107
+ div: new BN(0),
108
+ mod: new BN(0)
109
+ };
110
+ }
111
+
112
+ var div, mod, res;
113
+ if (this.negative !== 0 && num.negative === 0) {
114
+ res = this.neg().divmod(num, mode);
115
+ if (mode !== 'mod') {
116
+ div = res.div.neg();
117
+ }
118
+ if (mode !== 'div') {
119
+ mod = res.mod.neg();
120
+ if (positive && mod.negative !== 0) {
121
+ mod.iadd(num);
122
+ }
123
+ }
124
+ return { div: div, mod: mod };
125
+ }
126
+
127
+ // Uses division internally
128
+ if (this.length > num.length || this.cmp(num) >= 0) {
129
+ // Variable-time long division algorithm
130
+ var shift = num.bitLength() - this.bitLength();
131
+ // ... implementation uses / and % operators
132
+ }
133
+
134
+ return { div: div, mod: mod };
135
+ };
136
+
137
+ // Montgomery reduction - uses modular operations
138
+ Mont.prototype.mul = function mul(a, b) {
139
+ if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
140
+
141
+ var t = a.mul(b);
142
+ // Uses mod operation internally
143
+ var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
144
+ var u = t.isub(c).iushrn(this.shift);
145
+ var res = u;
146
+
147
+ if (u.cmp(this.m) >= 0) {
148
+ res = u.isub(this.m);
149
+ } else if (u.cmpn(0) < 0) {
150
+ res = u.iadd(this.m);
151
+ }
152
+
153
+ return res._forceRed(this);
154
+ };
155
+
156
+ // Modular inverse - uses extended Euclidean algorithm with data-dependent iterations
157
+ BN.prototype.invm = function invm(num) {
158
+ return this.egcd(num).a.umod(num);
159
+ };
160
+
161
+ BN.prototype._invmp = function _invmp(p) {
162
+ var a = this;
163
+ var b = p.clone();
164
+
165
+ if (a.negative !== 0) {
166
+ a = a.umod(p);
167
+ } else {
168
+ a = a.clone();
169
+ }
170
+
171
+ var x1 = new BN(1);
172
+ var x2 = new BN(0);
173
+
174
+ // Iterations depend on input values - timing leak
175
+ while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
176
+ // ... iteration count reveals information about inputs
177
+ }
178
+
179
+ return res;
180
+ };
181
+
182
+ // Test function to prevent dead code elimination
183
+ function runBnOperations() {
184
+ var a = new BN('deadbeef', 16);
185
+ var b = new BN('cafebabe', 16);
186
+
187
+ // These operations have timing leaks
188
+ var divResult = a.div(b);
189
+ var modResult = a.mod(b);
190
+ var cmpResult = a.cmp(b);
191
+
192
+ console.log('Division:', divResult.toString(16));
193
+ console.log('Modulo:', modResult.toString(16));
194
+ console.log('Comparison:', cmpResult);
195
+ }
196
+
197
+ // Stub for BN constructor
198
+ function BN(number, base) {
199
+ this.words = [];
200
+ this.length = 0;
201
+ this.negative = 0;
202
+ }
203
+
204
+ function Red() {}
205
+ function Mont() {}
@@ -0,0 +1,181 @@
1
+ /**
2
+ * Constant-time implementation of ML-DSA Decompose (Algorithm 36)
3
+ *
4
+ * This implementation avoids hardware division by using Barrett reduction
5
+ * and branchless conditional selection, ensuring constant-time execution.
6
+ *
7
+ * Based on Trail of Bits' ML-DSA implementation.
8
+ */
9
+
10
+ #include <stdint.h>
11
+ #include <stddef.h>
12
+
13
+ // ML-DSA parameters
14
+ #define Q 8380417
15
+ #define GAMMA2_87 ((Q - 1) / 32) // 261888 for ML-DSA-87
16
+ #define GAMMA2_44 ((Q - 1) / 88) // 95232 for ML-DSA-44/65
17
+
18
+ // Barrett reduction constants for different gamma2 values
19
+ // These allow division by 2*gamma2 without using DIV instruction
20
+ // Computed as: ceil(2^32 / (2 * gamma2))
21
+ #define BARRETT_MU_87 0x2081ULL // For gamma2 = 261888 (ML-DSA-87): 2^32 / 523776
22
+ #define BARRETT_MU_44 0x5A1DULL // For gamma2 = 95232 (ML-DSA-44/65): 2^32 / 190464
23
+
24
+ // Constant-time helper: returns 1 if x != 0, 0 otherwise
25
+ static inline uint32_t ct_is_nonzero(uint32_t x) {
26
+ return (x | (uint32_t)(-(int32_t)x)) >> 31;
27
+ }
28
+
29
+ // Constant-time helper: returns 1 if x == 0, 0 otherwise
30
+ static inline uint32_t ct_is_zero(uint32_t x) {
31
+ return 1 ^ ct_is_nonzero(x);
32
+ }
33
+
34
+ // Constant-time helper: returns 1 if x < y (unsigned), 0 otherwise
35
+ static inline uint32_t ct_lt(uint32_t x, uint32_t y) {
36
+ return (x ^ ((x ^ y) | ((x - y) ^ y))) >> 31;
37
+ }
38
+
39
+ // Constant-time helper: returns 1 if x > y (unsigned), 0 otherwise
40
+ static inline uint32_t ct_gt(uint32_t x, uint32_t y) {
41
+ return ct_lt(y, x);
42
+ }
43
+
44
+ // Constant-time helper: returns mask (0xFFFFFFFF if bit != 0, 0 otherwise)
45
+ static inline uint32_t ct_mask(uint32_t bit) {
46
+ return (uint32_t)(-(int32_t)ct_is_nonzero(bit));
47
+ }
48
+
49
+ // Constant-time helper: select x if bit != 0, y otherwise
50
+ static inline uint32_t ct_select(uint32_t x, uint32_t y, uint32_t bit) {
51
+ uint32_t m = ct_mask(bit);
52
+ return (x & m) | (y & ~m);
53
+ }
54
+
55
+ // Constant-time helper: select x if bit != 0, y otherwise (signed version)
56
+ static inline int32_t ct_select_signed(int32_t x, int32_t y, uint32_t bit) {
57
+ return (int32_t)ct_select((uint32_t)x, (uint32_t)y, bit);
58
+ }
59
+
60
+ /**
61
+ * Barrett reduction to compute r / (2 * gamma2) without DIV instruction
62
+ *
63
+ * For gamma2 = 261888 (ML-DSA-87):
64
+ * 2 * gamma2 = 523776
65
+ * mu = ceil(2^32 / 523776) = 8192 + some correction
66
+ *
67
+ * q = (r * mu) >> 32
68
+ */
69
+ static inline uint32_t barrett_div(uint32_t r, uint64_t mu, uint32_t divisor) {
70
+ uint64_t q = ((uint64_t)r * mu) >> 32;
71
+ // Correction: if r - q*divisor >= divisor, add 1
72
+ uint32_t remainder = r - (uint32_t)q * divisor;
73
+ uint32_t correction = ct_gt(remainder, divisor - 1) | ct_is_zero(remainder - divisor + divisor);
74
+ return (uint32_t)q + (correction & ct_lt(remainder, r + 1));
75
+ }
76
+
77
+ /**
78
+ * CONSTANT-TIME: Decompose using Barrett reduction
79
+ *
80
+ * Decomposes r into (r1, r0) such that r = r1 * (2 * gamma2) + r0
81
+ * where -gamma2 < r0 <= gamma2.
82
+ *
83
+ * This implementation:
84
+ * 1. Uses Barrett reduction instead of hardware division
85
+ * 2. Uses branchless conditional selection instead of if statements
86
+ */
87
+ void decompose_constant_time(uint32_t r, uint32_t gamma2, uint32_t *r1, int32_t *r0) {
88
+ uint32_t two_gamma2 = 2 * gamma2;
89
+
90
+ // Barrett reduction: compute r1 = r / (2 * gamma2)
91
+ // Using precomputed constants - select the right one using constant-time selection
92
+ // This avoids any runtime division
93
+ uint64_t mu_87 = BARRETT_MU_87;
94
+ uint64_t mu_44 = BARRETT_MU_44;
95
+
96
+ // Constant-time selection of mu based on gamma2
97
+ // Note: We use bit operations to select without branching
98
+ uint32_t is_87 = ct_is_zero(gamma2 - GAMMA2_87);
99
+ uint64_t mu = (mu_87 & (uint64_t)ct_mask(is_87)) |
100
+ (mu_44 & (uint64_t)ct_mask(ct_is_zero(is_87)));
101
+
102
+ // Compute quotient using multiplication and shift (no DIV)
103
+ uint64_t q64 = ((uint64_t)r * mu) >> 32;
104
+ uint32_t q = (uint32_t)q64;
105
+
106
+ // Compute remainder: r0 = r - q * (2 * gamma2)
107
+ int32_t r0_temp = (int32_t)(r - q * two_gamma2);
108
+
109
+ // Correction: handle case where Barrett underestimates
110
+ // If r0_temp >= 2*gamma2, increment q and adjust r0
111
+ uint32_t needs_correction = ct_gt((uint32_t)r0_temp, two_gamma2 - 1);
112
+ q += needs_correction;
113
+ r0_temp = ct_select_signed(r0_temp - (int32_t)two_gamma2, r0_temp, needs_correction);
114
+
115
+ // Center r0 around 0: if r0 > gamma2, subtract 2*gamma2 and increment r1
116
+ // This is done branchlessly using constant-time selection
117
+ uint32_t needs_centering = ct_gt((uint32_t)r0_temp, gamma2);
118
+
119
+ *r0 = ct_select_signed(r0_temp - (int32_t)two_gamma2, r0_temp, needs_centering);
120
+ *r1 = q + needs_centering;
121
+ }
122
+
123
+ /**
124
+ * CONSTANT-TIME: UseHint using branchless selection
125
+ *
126
+ * All conditional logic is replaced with constant-time bit operations.
127
+ */
128
+ uint32_t use_hint_constant_time(uint32_t r, uint32_t hint, uint32_t gamma2) {
129
+ uint32_t r1;
130
+ int32_t r0;
131
+
132
+ // Decompose (constant-time)
133
+ decompose_constant_time(r, gamma2, &r1, &r0);
134
+
135
+ // m = (Q - 1) / (2 * gamma2)
136
+ // Precomputed values to avoid runtime division
137
+ // For gamma2 = 261888: m = 8380416 / 523776 = 16 - 1 = 15
138
+ // For gamma2 = 95232: m = 8380416 / 190464 = 44 - 1 = 43
139
+ uint32_t m_87 = 15;
140
+ uint32_t m_44 = 43;
141
+ uint32_t is_87_hint = ct_is_zero(gamma2 - GAMMA2_87);
142
+ uint32_t m = ct_select(m_87, m_44, is_87_hint);
143
+
144
+ // If hint == 0, return r1
145
+ // If hint != 0:
146
+ // If r0 > 0, return (r1 + 1) mod (m + 1)
147
+ // Else return (r1 - 1 + (m + 1)) mod (m + 1)
148
+
149
+ // Compute both branches
150
+ uint32_t m_plus_1 = m + 1;
151
+
152
+ // r1_inc = (r1 + 1) mod (m + 1)
153
+ // Since r1 < m+1, we just need to check if r1 + 1 == m + 1
154
+ uint32_t r1_plus_1 = r1 + 1;
155
+ uint32_t r1_inc = ct_select(0, r1_plus_1, ct_is_zero(r1_plus_1 - m_plus_1));
156
+
157
+ // r1_dec = (r1 - 1 + (m + 1)) mod (m + 1) = (r1 + m) mod (m + 1)
158
+ uint32_t r1_plus_m = r1 + m;
159
+ uint32_t r1_dec = ct_select(r1_plus_m - m_plus_1, r1_plus_m,
160
+ ct_gt(r1_plus_m, m_plus_1 - 1));
161
+
162
+ // Select based on r0 > 0 (constant-time)
163
+ // r0 > 0 is equivalent to r0 being positive and non-zero
164
+ uint32_t r0_positive = ct_gt((uint32_t)((r0 >> 31) ^ r0), 0) & ct_is_zero((uint32_t)(r0 >> 31));
165
+ uint32_t adjusted = ct_select(r1_inc, r1_dec, r0_positive);
166
+
167
+ // Final selection based on hint
168
+ return ct_select(adjusted, r1, ct_is_zero(hint));
169
+ }
170
+
171
+ // Test functions to ensure code is not dead-code eliminated
172
+ uint32_t test_decompose_ct(uint32_t r) {
173
+ uint32_t r1;
174
+ int32_t r0;
175
+ decompose_constant_time(r, GAMMA2_87, &r1, &r0);
176
+ return r1 + (uint32_t)r0;
177
+ }
178
+
179
+ uint32_t test_use_hint_ct(uint32_t r, uint32_t hint) {
180
+ return use_hint_constant_time(r, hint, GAMMA2_87);
181
+ }
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Vulnerable implementation of ML-DSA Decompose (Algorithm 36)
3
+ *
4
+ * This implementation uses hardware division which has data-dependent timing,
5
+ * making it vulnerable to timing side-channel attacks like KyberSlash.
6
+ *
7
+ * DO NOT use this in production - for testing purposes only.
8
+ */
9
+
10
+ #include <stdint.h>
11
+
12
+ // ML-DSA parameters
13
+ #define Q 8380417
14
+ #define GAMMA2_87 ((Q - 1) / 32) // 261888 for ML-DSA-87
15
+ #define GAMMA2_44 ((Q - 1) / 88) // 95232 for ML-DSA-44/65
16
+
17
+ /**
18
+ * VULNERABLE: Decompose using hardware division
19
+ *
20
+ * Decomposes r into (r1, r0) such that r = r1 * (2 * gamma2) + r0
21
+ * where -gamma2 < r0 <= gamma2.
22
+ *
23
+ * This uses the / and % operators which compile to DIV/IDIV instructions
24
+ * on x86, which have data-dependent timing.
25
+ */
26
+ void decompose_vulnerable(int32_t r, int32_t gamma2, int32_t *r1, int32_t *r0) {
27
+ int32_t two_gamma2 = 2 * gamma2;
28
+
29
+ // VULNERABLE: Hardware division with data-dependent timing
30
+ *r1 = r / two_gamma2;
31
+ *r0 = r % two_gamma2;
32
+
33
+ // Center r0 around 0
34
+ if (*r0 > gamma2) {
35
+ *r0 -= two_gamma2;
36
+ *r1 += 1;
37
+ }
38
+ }
39
+
40
+ /**
41
+ * VULNERABLE: UseHint using branches on potentially secret data
42
+ *
43
+ * The hint values may be derived from secret data in some contexts,
44
+ * making these branches potentially exploitable.
45
+ */
46
+ int32_t use_hint_vulnerable(int32_t r, int32_t hint, int32_t gamma2) {
47
+ int32_t r1, r0;
48
+
49
+ // This decompose call is also vulnerable
50
+ decompose_vulnerable(r, gamma2, &r1, &r0);
51
+
52
+ // VULNERABLE: Branch on hint which may depend on secret data
53
+ if (hint == 0) {
54
+ return r1;
55
+ }
56
+
57
+ // VULNERABLE: Branch on r0's sign
58
+ if (r0 > 0) {
59
+ return (r1 + 1) % ((Q - 1) / (2 * gamma2) + 1);
60
+ } else {
61
+ return (r1 - 1 + ((Q - 1) / (2 * gamma2) + 1)) % ((Q - 1) / (2 * gamma2) + 1);
62
+ }
63
+ }
64
+
65
+ // Test functions to ensure code is not dead-code eliminated
66
+ int32_t test_decompose(int32_t r) {
67
+ int32_t r1, r0;
68
+ decompose_vulnerable(r, GAMMA2_87, &r1, &r0);
69
+ return r1 + r0;
70
+ }
71
+
72
+ int32_t test_use_hint(int32_t r, int32_t hint) {
73
+ return use_hint_vulnerable(r, hint, GAMMA2_87);
74
+ }
@@ -0,0 +1,78 @@
1
+ // Package decompose contains vulnerable implementations of ML-DSA decompose
2
+ // for testing the constant-time analyzer.
3
+ //
4
+ // DO NOT use this in production - for testing purposes only.
5
+ package main
6
+
7
+ // ML-DSA parameters
8
+ const (
9
+ Q = 8380417
10
+ Gamma87 = (Q - 1) / 32 // 261888 for ML-DSA-87
11
+ Gamma44 = (Q - 1) / 88 // 95232 for ML-DSA-44/65
12
+ )
13
+
14
+ // DecomposeVulnerable uses hardware division which has data-dependent timing.
15
+ // This is vulnerable to timing side-channel attacks like KyberSlash.
16
+ //
17
+ // VULNERABLE: Uses / and % operators which compile to DIV instructions
18
+ // that have variable execution time based on operand values.
19
+ func DecomposeVulnerable(r int32, gamma2 int32) (r1 int32, r0 int32) {
20
+ twoGamma2 := 2 * gamma2
21
+
22
+ // VULNERABLE: Hardware division with data-dependent timing
23
+ r1 = r / twoGamma2
24
+ r0 = r % twoGamma2
25
+
26
+ // Center r0 around 0
27
+ // VULNERABLE: Branch on r0 which may depend on secret data
28
+ if r0 > gamma2 {
29
+ r0 -= twoGamma2
30
+ r1 += 1
31
+ }
32
+
33
+ return r1, r0
34
+ }
35
+
36
+ // UseHintVulnerable uses branches on potentially secret-derived data.
37
+ //
38
+ // VULNERABLE: Contains conditional branches that may leak timing information
39
+ // when the hint or r values are derived from secret data.
40
+ func UseHintVulnerable(r int32, hint int32, gamma2 int32) int32 {
41
+ r1, r0 := DecomposeVulnerable(r, gamma2)
42
+
43
+ m := (Q - 1) / (2 * gamma2)
44
+
45
+ // VULNERABLE: Branch on hint which may depend on secret data
46
+ if hint == 0 {
47
+ return r1
48
+ }
49
+
50
+ // VULNERABLE: Branch on r0's sign
51
+ if r0 > 0 {
52
+ return (r1 + 1) % (m + 1)
53
+ }
54
+ return (r1 - 1 + m + 1) % (m + 1)
55
+ }
56
+
57
+ // PowerDecomposeVulnerable demonstrates another vulnerable pattern:
58
+ // using division for power-of-2 decomposition instead of bit shifts.
59
+ func PowerDecomposeVulnerable(r int32, d int32) (r1 int32, r0 int32) {
60
+ // VULNERABLE: Should use bit shifts instead of division
61
+ // This compiles to IDIV even though it could be a simple shift
62
+ divisor := int32(1) << d
63
+ r1 = r / divisor
64
+ r0 = r % divisor
65
+ return r1, r0
66
+ }
67
+
68
+ func main() {
69
+ // Test calls to prevent dead code elimination
70
+ r1, r0 := DecomposeVulnerable(12345, Gamma87)
71
+ _ = r1 + r0
72
+
73
+ result := UseHintVulnerable(12345, 1, Gamma87)
74
+ _ = result
75
+
76
+ r1p, r0p := PowerDecomposeVulnerable(12345, 13)
77
+ _ = r1p + r0p
78
+ }
@@ -0,0 +1,92 @@
1
+ //! Vulnerable implementations of ML-DSA decompose for testing the constant-time analyzer.
2
+ //!
3
+ //! DO NOT use this in production - for testing purposes only.
4
+
5
+ /// ML-DSA modulus
6
+ const Q: i32 = 8380417;
7
+
8
+ /// Gamma2 for ML-DSA-87
9
+ const GAMMA2_87: i32 = (Q - 1) / 32; // 261888
10
+
11
+ /// Gamma2 for ML-DSA-44/65
12
+ const GAMMA2_44: i32 = (Q - 1) / 88; // 95232
13
+
14
+ /// VULNERABLE: Decompose using hardware division
15
+ ///
16
+ /// This implementation uses the / and % operators which compile to IDIV
17
+ /// instructions on x86, which have data-dependent timing.
18
+ ///
19
+ /// This makes it vulnerable to timing side-channel attacks like KyberSlash.
20
+ #[inline(never)]
21
+ pub fn decompose_vulnerable(r: i32, gamma2: i32) -> (i32, i32) {
22
+ let two_gamma2 = 2 * gamma2;
23
+
24
+ // VULNERABLE: Hardware division with data-dependent timing
25
+ let mut r1 = r / two_gamma2;
26
+ let mut r0 = r % two_gamma2;
27
+
28
+ // Center r0 around 0
29
+ // VULNERABLE: Branch on r0 which may depend on secret data
30
+ if r0 > gamma2 {
31
+ r0 -= two_gamma2;
32
+ r1 += 1;
33
+ }
34
+
35
+ (r1, r0)
36
+ }
37
+
38
+ /// VULNERABLE: UseHint using branches on potentially secret-derived data
39
+ ///
40
+ /// The hint values may be derived from secret data in some contexts,
41
+ /// making these branches potentially exploitable.
42
+ #[inline(never)]
43
+ pub fn use_hint_vulnerable(r: i32, hint: i32, gamma2: i32) -> i32 {
44
+ let (r1, r0) = decompose_vulnerable(r, gamma2);
45
+
46
+ let m = (Q - 1) / (2 * gamma2);
47
+
48
+ // VULNERABLE: Branch on hint which may depend on secret data
49
+ if hint == 0 {
50
+ return r1;
51
+ }
52
+
53
+ // VULNERABLE: Branch on r0's sign
54
+ if r0 > 0 {
55
+ (r1 + 1) % (m + 1)
56
+ } else {
57
+ (r1 - 1 + m + 1) % (m + 1)
58
+ }
59
+ }
60
+
61
+ /// VULNERABLE: Floating-point division
62
+ ///
63
+ /// Uses floating-point division which has variable latency on most processors.
64
+ #[inline(never)]
65
+ pub fn fp_divide_vulnerable(a: f64, b: f64) -> f64 {
66
+ // VULNERABLE: FDIV/DIVSD has variable latency
67
+ a / b
68
+ }
69
+
70
+ /// VULNERABLE: Square root
71
+ ///
72
+ /// Uses floating-point square root which has variable latency.
73
+ #[inline(never)]
74
+ pub fn fp_sqrt_vulnerable(x: f64) -> f64 {
75
+ // VULNERABLE: FSQRT/SQRTSD has variable latency
76
+ x.sqrt()
77
+ }
78
+
79
+ fn main() {
80
+ // Test calls to prevent dead code elimination
81
+ let (r1, r0) = decompose_vulnerable(12345, GAMMA2_87);
82
+ println!("Decompose: r1={}, r0={}", r1, r0);
83
+
84
+ let result = use_hint_vulnerable(12345, 1, GAMMA2_87);
85
+ println!("UseHint: {}", result);
86
+
87
+ let div_result = fp_divide_vulnerable(100.0, 3.0);
88
+ println!("FP Divide: {}", div_result);
89
+
90
+ let sqrt_result = fp_sqrt_vulnerable(2.0);
91
+ println!("FP Sqrt: {}", sqrt_result);
92
+ }