@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,136 @@
1
+ # Constant-Time Analysis: JavaScript and TypeScript
2
+
3
+ Analysis guidance for JavaScript and TypeScript. Uses V8 bytecode output from Node.js to detect timing-unsafe operations.
4
+
5
+ ## Prerequisites
6
+
7
+ - **Node.js** (v14+) - for JavaScript analysis
8
+ - **TypeScript compiler** (tsc) - for TypeScript files (optional, uses npx fallback)
9
+
10
+ ## Running the Analyzer
11
+
12
+ ```bash
13
+ # Analyze JavaScript
14
+ uv run {baseDir}/ct_analyzer/analyzer.py crypto.js
15
+
16
+ # Analyze TypeScript (transpiles first)
17
+ uv run {baseDir}/ct_analyzer/analyzer.py crypto.ts
18
+
19
+ # Include warning-level violations
20
+ uv run {baseDir}/ct_analyzer/analyzer.py --warnings crypto.js
21
+
22
+ # Filter to specific functions
23
+ uv run {baseDir}/ct_analyzer/analyzer.py --func 'encrypt|sign' crypto.js
24
+
25
+ # JSON output for CI
26
+ uv run {baseDir}/ct_analyzer/analyzer.py --json crypto.js
27
+ ```
28
+
29
+ ## Dangerous Operations
30
+
31
+ ### Bytecodes (Errors)
32
+
33
+ | Bytecode | Issue |
34
+ |----------|-------|
35
+ | Div | Variable-time execution based on operand values |
36
+ | Mod | Variable-time execution based on operand values |
37
+ | DivSmi | Division by small integer has variable-time execution |
38
+ | ModSmi | Modulo by small integer has variable-time execution |
39
+
40
+ ### Functions (Errors)
41
+
42
+ | Function | Issue | Safe Alternative |
43
+ |----------|-------|------------------|
44
+ | `Math.sqrt()` | Variable latency based on operand values | Avoid in crypto |
45
+ | `Math.pow()` | Variable latency based on operand values | Avoid in crypto |
46
+ | `Math.random()` | Predictable | `crypto.getRandomValues()` |
47
+ | `eval()` | Unpredictable timing | Avoid entirely |
48
+
49
+ ### Functions (Warnings)
50
+
51
+ | Function | Issue | Safe Alternative |
52
+ |----------|-------|------------------|
53
+ | `===` (strings) | Early-terminating | `crypto.timingSafeEqual()` |
54
+ | `indexOf()` | Early-terminating | Constant-time search |
55
+ | `includes()` | Early-terminating | Constant-time search |
56
+ | `startsWith()` | Early-terminating | `crypto.timingSafeEqual()` on prefix |
57
+ | `endsWith()` | Early-terminating | `crypto.timingSafeEqual()` on suffix |
58
+ | `JSON.stringify()` | Variable-length output | Fixed-length padding |
59
+ | `JSON.parse()` | Variable-time based on input | Fixed-length input |
60
+ | `btoa()` / `atob()` | Variable-length output | Fixed-length padding |
61
+
62
+ ## Safe Patterns
63
+
64
+ ### String Comparison (Node.js)
65
+
66
+ ```javascript
67
+ // VULNERABLE: Early exit on mismatch
68
+ if (userToken === storedToken) { ... }
69
+
70
+ // SAFE: Constant-time comparison (Node.js)
71
+ const crypto = require('crypto');
72
+ if (crypto.timingSafeEqual(Buffer.from(userToken), Buffer.from(storedToken))) { ... }
73
+ ```
74
+
75
+ ### Random Number Generation
76
+
77
+ ```javascript
78
+ // VULNERABLE: Predictable
79
+ const token = Math.random().toString(36);
80
+
81
+ // SAFE: Cryptographically secure (Node.js)
82
+ const crypto = require('crypto');
83
+ const token = crypto.randomBytes(16).toString('hex');
84
+
85
+ // SAFE: Browser
86
+ const array = new Uint8Array(16);
87
+ crypto.getRandomValues(array);
88
+ ```
89
+
90
+ ### Division Operations
91
+
92
+ ```javascript
93
+ // VULNERABLE: Division has variable timing
94
+ const quotient = secret / divisor;
95
+
96
+ // SAFE: Use multiplication by inverse (if divisor is constant)
97
+ // Precompute: inverse = 1/divisor as fixed-point
98
+ const quotient = Math.floor(secret * inverse);
99
+ ```
100
+
101
+ ## TypeScript Notes
102
+
103
+ The analyzer:
104
+ 1. Looks for `tsconfig.json` in parent directories
105
+ 2. Transpiles TypeScript to JavaScript in a temp directory
106
+ 3. Analyzes the transpiled JavaScript
107
+ 4. Reports violations against the original TypeScript file
108
+
109
+ If tsc is not installed, the analyzer tries `npx tsc` as a fallback.
110
+
111
+ ## Limitations
112
+
113
+ ### V8 Bytecode Analysis
114
+
115
+ The analyzer uses `node --print-bytecode` to get V8 bytecode. This has limitations:
116
+
117
+ 1. **JIT Compilation**: V8 may JIT-compile hot functions to native code with different timing characteristics
118
+ 2. **Function Inlining**: Inlined functions may not appear in bytecode
119
+ 3. **Deoptimization**: Code can be deoptimized back to bytecode
120
+
121
+ ### Source-Level Detection
122
+
123
+ The analyzer also performs source-level pattern matching to detect:
124
+ - Division (`/`) and modulo (`%`) operators
125
+ - Dangerous function calls (`Math.random()`, etc.)
126
+
127
+ This catches issues that bytecode analysis might miss due to parsing limitations.
128
+
129
+ ## Browser Considerations
130
+
131
+ The analyzer targets Node.js V8 bytecode. Browser JavaScript engines (SpiderMonkey, JavaScriptCore) have different bytecode formats and timing characteristics.
132
+
133
+ For browser-targeted code:
134
+ - The V8 analysis is still valuable as a baseline
135
+ - Consider additional testing in target browsers
136
+ - Use Web Crypto API for cryptographic operations
@@ -0,0 +1,252 @@
1
+ # Constant-Time Analysis: Kotlin
2
+
3
+ Analysis guidance for Kotlin targeting Android and JVM platforms. Kotlin compiles to JVM bytecode, sharing the same runtime characteristics as Java.
4
+
5
+ ## Understanding Kotlin Compilation
6
+
7
+ Kotlin compiles to JVM bytecode that runs on the same virtual machine as Java:
8
+
9
+ ```text
10
+ Source Code (.kt/.kts)
11
+ |
12
+ v
13
+ kotlinc (Kotlin Compiler)
14
+ |
15
+ v
16
+ Bytecode (.class files)
17
+ |
18
+ v
19
+ JIT Compiler (HotSpot/ART)
20
+ |
21
+ v
22
+ Native Code (at runtime)
23
+ ```
24
+
25
+ **Key implications for Android:**
26
+
27
+ 1. **Android Runtime (ART)** - Android uses ART instead of HotSpot JVM
28
+ 2. **AOT compilation** - ART compiles bytecode to native code at install time
29
+ 3. **Same bytecode vulnerabilities** - Division/branch timing issues persist regardless of runtime
30
+
31
+ ## Running the Analyzer
32
+
33
+ ```bash
34
+ # Analyze Kotlin source
35
+ uv run {baseDir}/ct_analyzer/analyzer.py CryptoUtils.kt
36
+
37
+ # Include conditional branch warnings
38
+ uv run {baseDir}/ct_analyzer/analyzer.py --warnings CryptoUtils.kt
39
+
40
+ # Filter to specific functions
41
+ uv run {baseDir}/ct_analyzer/analyzer.py --func 'sign|verify' CryptoUtils.kt
42
+
43
+ # CI-friendly JSON output
44
+ uv run {baseDir}/ct_analyzer/analyzer.py --json CryptoUtils.kt
45
+ ```
46
+
47
+ Note: The `--arch` and `--opt-level` flags do not apply to Kotlin as it compiles to JVM bytecode.
48
+
49
+ ## Dangerous Bytecode Instructions
50
+
51
+ Kotlin compiles to the same JVM bytecode as Java:
52
+
53
+ | Category | Instructions | Risk |
54
+ |----------|--------------|------|
55
+ | Integer Division | `idiv`, `ldiv`, `irem`, `lrem` | Variable-time based on operand values |
56
+ | Floating Division | `fdiv`, `ddiv`, `frem`, `drem` | Variable latency |
57
+ | Conditional Branches | `ifeq`, `ifne`, `iflt`, `ifge`, `ifgt`, `ifle`, `if_icmp*` | Timing leak if condition depends on secrets |
58
+ | Table Lookups | `*aload`, `*astore`, `tableswitch`, `lookupswitch` | Cache timing if index depends on secrets |
59
+
60
+ ## Constant-Time Patterns
61
+
62
+ ### Replace Division
63
+
64
+ ```kotlin
65
+ // VULNERABLE: Division instruction emitted
66
+ val q = secretValue / divisor
67
+
68
+ // SAFE: Barrett reduction (for fixed divisor)
69
+ // Precompute: mu = (1L shl 32) / divisor
70
+ val mu = (1L shl 32) / divisor
71
+ val q = ((secretValue.toLong() * mu) ushr 32).toInt()
72
+ ```
73
+
74
+ ### Replace Branches
75
+
76
+ ```kotlin
77
+ // VULNERABLE: Branch timing reveals secret
78
+ val result = if (secret != 0) a else b
79
+
80
+ // SAFE: Constant-time selection using bitwise ops
81
+ val mask = -(if (secret != 0) 1 else 0)
82
+ // Better: compute mask without branch
83
+ val mask = (secret or -secret) shr 31 // -1 if secret != 0, else 0
84
+ val result = (a and mask) or (b and mask.inv())
85
+ ```
86
+
87
+ ### Replace Comparisons
88
+
89
+ ```kotlin
90
+ // VULNERABLE: contentEquals() may early-terminate
91
+ if (computed.contentEquals(expected)) { ... }
92
+
93
+ // SAFE: Use MessageDigest.isEqual() for constant-time comparison
94
+ import java.security.MessageDigest
95
+ if (MessageDigest.isEqual(computed, expected)) { ... }
96
+ ```
97
+
98
+ ### Secure Random
99
+
100
+ ```kotlin
101
+ // VULNERABLE: kotlin.random.Random is predictable
102
+ import kotlin.random.Random
103
+ val value = Random.nextInt()
104
+
105
+ // SAFE: Cryptographically secure
106
+ import java.security.SecureRandom
107
+ val secureRand = SecureRandom()
108
+ val value = secureRand.nextInt()
109
+
110
+ // Or use Kotlin's secure wrapper (requires kotlin-stdlib-jdk8)
111
+ import kotlin.random.asKotlinRandom
112
+ val secureKotlinRandom = SecureRandom().asKotlinRandom()
113
+ ```
114
+
115
+ ## Android-Specific Considerations
116
+
117
+ ### Keystore Operations
118
+
119
+ ```kotlin
120
+ // Use Android Keystore for cryptographic key storage
121
+ import android.security.keystore.KeyGenParameterSpec
122
+ import android.security.keystore.KeyProperties
123
+
124
+ val keyGenerator = KeyGenerator.getInstance(
125
+ KeyProperties.KEY_ALGORITHM_AES,
126
+ "AndroidKeyStore"
127
+ )
128
+ keyGenerator.init(
129
+ KeyGenParameterSpec.Builder(
130
+ "my_key",
131
+ KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT
132
+ )
133
+ .setBlockModes(KeyProperties.BLOCK_MODE_GCM)
134
+ .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
135
+ .build()
136
+ )
137
+ ```
138
+
139
+ ### Constant-Time Comparison on Android
140
+
141
+ ```kotlin
142
+ // Android provides MessageDigest.isEqual()
143
+ import java.security.MessageDigest
144
+
145
+ fun constantTimeEquals(a: ByteArray, b: ByteArray): Boolean {
146
+ return MessageDigest.isEqual(a, b)
147
+ }
148
+ ```
149
+
150
+ ### Secure Random on Android
151
+
152
+ ```kotlin
153
+ // SecureRandom works the same on Android
154
+ import java.security.SecureRandom
155
+
156
+ fun generateSecureToken(length: Int): ByteArray {
157
+ val random = SecureRandom()
158
+ val token = ByteArray(length)
159
+ random.nextBytes(token)
160
+ return token
161
+ }
162
+ ```
163
+
164
+ ## Kotlin-Specific Pitfalls
165
+
166
+ ### Extension Functions on Primitives
167
+
168
+ ```kotlin
169
+ // DANGEROUS: Division in extension function
170
+ fun Int.divideBy(divisor: Int) = this / divisor // Emits IDIV
171
+
172
+ // The inline modifier doesn't change bytecode behavior
173
+ inline fun Int.divideByInline(divisor: Int) = this / divisor // Still IDIV
174
+ ```
175
+
176
+ ### When Expressions
177
+
178
+ ```kotlin
179
+ // VULNERABLE: when compiles to tableswitch/lookupswitch
180
+ when (secretValue) {
181
+ 0 -> handleZero()
182
+ 1 -> handleOne()
183
+ else -> handleOther()
184
+ }
185
+
186
+ // Consider constant-time alternatives for secret-dependent dispatch
187
+ ```
188
+
189
+ ### Null Safety Checks
190
+
191
+ ```kotlin
192
+ // Nullable operations may introduce branches
193
+ val result = secretNullable?.process() // Introduces null check branch
194
+
195
+ // Be aware of null-check timing when handling secrets
196
+ ```
197
+
198
+ ## Setup Requirements
199
+
200
+ ### Kotlin Compiler
201
+
202
+ **macOS:**
203
+ ```bash
204
+ brew install kotlin
205
+ ```
206
+
207
+ **Ubuntu/Debian:**
208
+ ```bash
209
+ sudo snap install kotlin --classic
210
+ ```
211
+
212
+ **Windows:**
213
+ ```bash
214
+ scoop install kotlin
215
+ # or
216
+ choco install kotlinc
217
+ ```
218
+
219
+ ### Android Development
220
+
221
+ For Android projects, the Kotlin compiler is typically bundled with Android Studio. Ensure your project's Kotlin version is up to date in `build.gradle.kts`:
222
+
223
+ ```kotlin
224
+ plugins {
225
+ kotlin("jvm") version "1.9.0"
226
+ }
227
+ ```
228
+
229
+ ### Verification
230
+
231
+ ```bash
232
+ kotlinc -version # Should show: kotlinc-jvm X.X.X
233
+ javap -version # Required for bytecode disassembly
234
+ ```
235
+
236
+ ## Common Mistakes
237
+
238
+ 1. **Using kotlin.random.Random** - The default Random is not cryptographically secure; use `java.security.SecureRandom`
239
+
240
+ 2. **Relying on == for byte arrays** - `==` compares references in Kotlin; use `contentEquals()` for value comparison, but neither is constant-time
241
+
242
+ 3. **Infix functions for crypto** - Custom operators don't change timing characteristics of underlying operations
243
+
244
+ 4. **Coroutines timing** - Suspending functions add scheduling overhead that may mask or introduce timing variations
245
+
246
+ 5. **Sealed classes for dispatch** - Pattern matching on sealed classes compiles to switches that may leak timing
247
+
248
+ ## Further Reading
249
+
250
+ - [Kotlin/JVM Interoperability](https://kotlinlang.org/docs/java-interop.html)
251
+ - [Android Keystore System](https://developer.android.com/training/articles/keystore)
252
+ - [Bouncy Castle for Kotlin](https://www.bouncycastle.org/java.html) - Constant-time crypto primitives
@@ -0,0 +1,172 @@
1
+ # Constant-Time Analysis: PHP
2
+
3
+ Analysis guidance for PHP scripts. Uses the VLD extension or OPcache debug output to analyze Zend opcodes.
4
+
5
+ ## Prerequisites
6
+
7
+ ### Installing VLD Extension
8
+
9
+ The VLD (Vulcan Logic Dumper) extension is required for detailed opcode analysis. OPcache fallback is available but provides less detail.
10
+
11
+ **Option 1: PECL Install (Recommended)**
12
+
13
+ ```bash
14
+ # Query latest version from PECL
15
+ VLD_VERSION=$(curl -s https://pecl.php.net/package/vld | grep -oP 'vld-\K[0-9.]+(?=\.tgz)' | head -1)
16
+ echo "Latest VLD version: $VLD_VERSION"
17
+
18
+ # Install via PECL channel URL (avoids version detection issues)
19
+ pecl install channel://pecl.php.net/vld-${VLD_VERSION}
20
+
21
+ # Or if above fails, install with explicit channel:
22
+ pecl install https://pecl.php.net/get/vld-${VLD_VERSION}.tgz
23
+ ```
24
+
25
+ **Option 2: Build from Source**
26
+
27
+ ```bash
28
+ # Clone and build from GitHub
29
+ git clone https://github.com/derickr/vld.git
30
+ cd vld
31
+ phpize
32
+ ./configure
33
+ make
34
+ sudo make install
35
+
36
+ # Add to php.ini
37
+ echo "extension=vld.so" | sudo tee -a $(php --ini | grep "Loaded Configuration" | cut -d: -f2 | tr -d ' ')
38
+ ```
39
+
40
+ **Verify Installation**
41
+
42
+ ```bash
43
+ php -m | grep -i vld
44
+ # Should output: vld
45
+ ```
46
+
47
+ ### macOS with Homebrew PHP
48
+
49
+ ```bash
50
+ # Homebrew PHP may need manual extension directory setup
51
+ PHP_EXT_DIR=$(php -i | grep extension_dir | awk '{print $3}')
52
+ echo "PHP extension directory: $PHP_EXT_DIR"
53
+
54
+ # After building VLD, copy the extension
55
+ sudo cp modules/vld.so "$PHP_EXT_DIR/"
56
+ ```
57
+
58
+ ## Running the Analyzer
59
+
60
+ ```bash
61
+ # Analyze PHP file
62
+ uv run {baseDir}/ct_analyzer/analyzer.py crypto.php
63
+
64
+ # Include warning-level violations
65
+ uv run {baseDir}/ct_analyzer/analyzer.py --warnings crypto.php
66
+
67
+ # Filter to specific functions
68
+ uv run {baseDir}/ct_analyzer/analyzer.py --func 'encrypt|decrypt' crypto.php
69
+
70
+ # JSON output for CI
71
+ uv run {baseDir}/ct_analyzer/analyzer.py --json crypto.php
72
+ ```
73
+
74
+ ## Dangerous Operations
75
+
76
+ ### Opcodes (Errors)
77
+
78
+ | Opcode | Issue |
79
+ |--------|-------|
80
+ | DIV | Variable-time execution based on operand values |
81
+ | MOD | Variable-time execution based on operand values |
82
+ | POW | Variable-time execution |
83
+
84
+ ### Functions (Errors)
85
+
86
+ | Function | Issue | Safe Alternative |
87
+ |----------|-------|------------------|
88
+ | `chr()` | Table lookup indexed by secret data | `pack('C', $int)` |
89
+ | `ord()` | Table lookup indexed by secret data | `unpack('C', $char)[1]` |
90
+ | `bin2hex()` | Table lookups indexed on secret data | Custom constant-time implementation |
91
+ | `hex2bin()` | Table lookups indexed on secret data | Custom constant-time implementation |
92
+ | `base64_encode()` | Table lookups indexed on secret data | Custom constant-time implementation |
93
+ | `base64_decode()` | Table lookups indexed on secret data | Custom constant-time implementation |
94
+ | `rand()` | Predictable | `random_int()` |
95
+ | `mt_rand()` | Predictable | `random_int()` |
96
+ | `array_rand()` | Uses mt_rand internally | `random_int()` |
97
+ | `uniqid()` | Predictable | `random_bytes()` |
98
+ | `shuffle()` | Uses mt_rand internally | Fisher-Yates with `random_int()` |
99
+
100
+ ### Functions (Warnings)
101
+
102
+ | Function | Issue | Safe Alternative |
103
+ |----------|-------|------------------|
104
+ | `strcmp()` | Variable-time | `hash_equals()` |
105
+ | `strcasecmp()` | Variable-time | `hash_equals()` |
106
+ | `strncmp()` | Variable-time | `hash_equals()` |
107
+ | `substr_compare()` | Variable-time | `hash_equals()` |
108
+ | `serialize()` | Variable-length output | Fixed-length output |
109
+ | `json_encode()` | Variable-length output | Fixed-length output |
110
+
111
+ ## Safe Patterns
112
+
113
+ ### String Comparison
114
+
115
+ ```php
116
+ // VULNERABLE: Early exit on mismatch
117
+ if ($user_token === $stored_token) { ... }
118
+
119
+ // SAFE: Constant-time comparison
120
+ if (hash_equals($stored_token, $user_token)) { ... }
121
+ ```
122
+
123
+ ### Random Number Generation
124
+
125
+ ```php
126
+ // VULNERABLE: Predictable
127
+ $token = bin2hex(random_bytes(16)); // OK - random_bytes is secure
128
+ $index = mt_rand(0, count($array) - 1); // VULNERABLE
129
+
130
+ // SAFE: Cryptographically secure
131
+ $token = bin2hex(random_bytes(16));
132
+ $index = random_int(0, count($array) - 1);
133
+ ```
134
+
135
+ ### Character Operations
136
+
137
+ ```php
138
+ // VULNERABLE: Table lookup timing
139
+ $byte = ord($secret_char);
140
+ $char = chr($secret_byte);
141
+
142
+ // SAFE: No table lookup
143
+ $byte = unpack('C', $secret_char)[1];
144
+ $char = pack('C', $secret_byte);
145
+ ```
146
+
147
+ ## Troubleshooting
148
+
149
+ ### VLD Not Loading
150
+
151
+ ```bash
152
+ # Check if extension is enabled
153
+ php -i | grep vld
154
+
155
+ # Check for loading errors
156
+ php -d display_errors=1 -d vld.active=1 -r "echo 'test';" 2>&1
157
+
158
+ # Common issue: wrong extension directory
159
+ php -i | grep extension_dir
160
+ ls $(php -r "echo ini_get('extension_dir');") | grep vld
161
+ ```
162
+
163
+ ### OPcache Fallback
164
+
165
+ If VLD is unavailable, the analyzer falls back to OPcache debug output:
166
+
167
+ ```bash
168
+ # Manually test OPcache output
169
+ php -d opcache.enable_cli=1 -d opcache.opt_debug_level=0x10000 crypto.php 2>&1
170
+ ```
171
+
172
+ OPcache provides less detailed output than VLD but still detects division/modulo opcodes.