@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,179 @@
1
+ # Constant-Time Analysis: Python
2
+
3
+ Analysis guidance for Python scripts. Uses the `dis` module to analyze CPython bytecode for timing-unsafe operations.
4
+
5
+ ## Prerequisites
6
+
7
+ - Python 3.10+ (bytecode format varies by version)
8
+
9
+ ## Running the Analyzer
10
+
11
+ ```bash
12
+ # Analyze Python file
13
+ uv run {baseDir}/ct_analyzer/analyzer.py crypto.py
14
+
15
+ # Include warning-level violations
16
+ uv run {baseDir}/ct_analyzer/analyzer.py --warnings crypto.py
17
+
18
+ # Filter to specific functions
19
+ uv run {baseDir}/ct_analyzer/analyzer.py --func 'encrypt|sign' crypto.py
20
+
21
+ # JSON output for CI
22
+ uv run {baseDir}/ct_analyzer/analyzer.py --json crypto.py
23
+ ```
24
+
25
+ ## Dangerous Operations
26
+
27
+ ### Bytecodes (Errors)
28
+
29
+ **Python < 3.11:**
30
+
31
+ | Bytecode | Issue |
32
+ |----------|-------|
33
+ | BINARY_TRUE_DIVIDE | Variable-time execution |
34
+ | BINARY_FLOOR_DIVIDE | Variable-time execution |
35
+ | BINARY_MODULO | Variable-time execution |
36
+ | INPLACE_TRUE_DIVIDE | Variable-time execution |
37
+ | INPLACE_FLOOR_DIVIDE | Variable-time execution |
38
+ | INPLACE_MODULO | Variable-time execution |
39
+
40
+ **Python 3.11+:**
41
+
42
+ | BINARY_OP Oparg | Operation | Issue |
43
+ |-----------------|-----------|-------|
44
+ | 11 | `/` | Variable-time execution |
45
+ | 12 | `//` | Variable-time execution |
46
+ | 6 | `%` | Variable-time execution |
47
+ | 24 | `/=` | Variable-time execution |
48
+ | 25 | `//=` | Variable-time execution |
49
+ | 19 | `%=` | Variable-time execution |
50
+
51
+ ### Functions (Errors)
52
+
53
+ | Function | Issue | Safe Alternative |
54
+ |----------|-------|------------------|
55
+ | `random.random()` | Predictable | `secrets.token_bytes()` |
56
+ | `random.randint()` | Predictable | `secrets.randbelow()` |
57
+ | `random.randrange()` | Predictable | `secrets.randbelow()` |
58
+ | `random.choice()` | Predictable | `secrets.choice()` |
59
+ | `random.shuffle()` | Predictable | Custom with `secrets` |
60
+ | `random.sample()` | Predictable | Custom with `secrets` |
61
+ | `math.sqrt()` | Variable latency | Avoid in crypto |
62
+ | `math.pow()` | Variable latency | Avoid in crypto |
63
+ | `eval()` | Unpredictable timing | Avoid entirely |
64
+ | `exec()` | Unpredictable timing | Avoid entirely |
65
+
66
+ ### Functions (Warnings)
67
+
68
+ | Function | Issue | Safe Alternative |
69
+ |----------|-------|------------------|
70
+ | `str.find()` | Early-terminating | Constant-time search |
71
+ | `str.index()` | Early-terminating | Constant-time search |
72
+ | `str.startswith()` | Early-terminating | `hmac.compare_digest()` |
73
+ | `str.endswith()` | Early-terminating | `hmac.compare_digest()` |
74
+ | `in` (strings) | Early-terminating | Constant-time search |
75
+ | `json.dumps()` | Variable-length output | Fixed-length padding |
76
+ | `json.loads()` | Variable-time | Fixed-length input |
77
+ | `base64.b64encode()` | Variable-length output | Fixed-length padding |
78
+ | `pickle.dumps()` | Variable-length output | Avoid for secrets |
79
+ | `pickle.loads()` | Variable-time, security risk | Avoid for secrets |
80
+
81
+ ## Safe Patterns
82
+
83
+ ### String Comparison
84
+
85
+ ```python
86
+ # VULNERABLE: Early exit on mismatch
87
+ if user_token == stored_token:
88
+ ...
89
+
90
+ # SAFE: Constant-time comparison
91
+ import hmac
92
+ if hmac.compare_digest(user_token, stored_token):
93
+ ...
94
+
95
+ # SAFE: For bytes
96
+ import secrets
97
+ if secrets.compare_digest(user_bytes, stored_bytes):
98
+ ...
99
+ ```
100
+
101
+ ### Random Number Generation
102
+
103
+ ```python
104
+ # VULNERABLE: Predictable
105
+ import random
106
+ token = random.randint(0, 2**128)
107
+
108
+ # SAFE: Cryptographically secure
109
+ import secrets
110
+ token = secrets.token_bytes(16)
111
+ token_int = secrets.randbits(128)
112
+ random_index = secrets.randbelow(len(items))
113
+ ```
114
+
115
+ ### Division Operations
116
+
117
+ ```python
118
+ # VULNERABLE: Division has variable timing
119
+ quotient = secret // divisor
120
+
121
+ # SAFE: Barrett reduction for constant divisors
122
+ # Precompute: mu = (1 << (2 * BITS)) // divisor
123
+ def barrett_reduce(value: int, divisor: int, mu: int, bits: int) -> int:
124
+ q = (value * mu) >> (2 * bits)
125
+ r = value - q * divisor
126
+ # Constant-time correction
127
+ mask = -(r >= divisor)
128
+ return r - (divisor & mask)
129
+ ```
130
+
131
+ ## Python Version Notes
132
+
133
+ ### Python 3.11+ Changes
134
+
135
+ Python 3.11 introduced the `BINARY_OP` bytecode that replaces individual binary operation bytecodes. The analyzer detects division/modulo by checking the oparg:
136
+
137
+ ```
138
+ BINARY_OP 11 (/) # True division
139
+ BINARY_OP 12 (//) # Floor division
140
+ BINARY_OP 6 (%) # Modulo
141
+ ```
142
+
143
+ ### Python 3.10 and Earlier
144
+
145
+ Uses separate bytecodes:
146
+ ```
147
+ BINARY_TRUE_DIVIDE
148
+ BINARY_FLOOR_DIVIDE
149
+ BINARY_MODULO
150
+ ```
151
+
152
+ ## Cryptography Library Considerations
153
+
154
+ When using the `cryptography` library:
155
+
156
+ ```python
157
+ # The cryptography library handles constant-time internally
158
+ from cryptography.hazmat.primitives.ciphers.aead import AESGCM
159
+
160
+ # SAFE: Library handles timing protection
161
+ aesgcm = AESGCM(key)
162
+ ciphertext = aesgcm.encrypt(nonce, plaintext, associated_data)
163
+ ```
164
+
165
+ For custom cryptographic code, ensure you:
166
+ 1. Use `hmac.compare_digest()` for comparisons
167
+ 2. Use `secrets` module for randomness
168
+ 3. Avoid division/modulo on secret-derived values
169
+ 4. Use fixed-length data representations
170
+
171
+ ## Limitations
172
+
173
+ ### CPython Bytecode Only
174
+
175
+ The analyzer targets CPython bytecode. Alternative implementations (PyPy, Jython, etc.) have different bytecode formats and timing characteristics.
176
+
177
+ ### JIT Compilation
178
+
179
+ PyPy and Numba can JIT-compile Python to native code with potentially different timing behavior. Consider additional analysis for JIT-compiled code paths.
@@ -0,0 +1,198 @@
1
+ # Constant-Time Analysis: Ruby
2
+
3
+ Analysis guidance for Ruby scripts. Uses YARV (Yet Another Ruby VM) instruction sequence dump to analyze bytecode for timing-unsafe operations.
4
+
5
+ ## Prerequisites
6
+
7
+ - Ruby 2.0+ (uses `ruby --dump=insns`)
8
+
9
+ ## Running the Analyzer
10
+
11
+ ```bash
12
+ # Analyze Ruby file
13
+ uv run {baseDir}/ct_analyzer/analyzer.py crypto.rb
14
+
15
+ # Include warning-level violations
16
+ uv run {baseDir}/ct_analyzer/analyzer.py --warnings crypto.rb
17
+
18
+ # Filter to specific functions
19
+ uv run {baseDir}/ct_analyzer/analyzer.py --func 'encrypt|sign' crypto.rb
20
+
21
+ # JSON output for CI
22
+ uv run {baseDir}/ct_analyzer/analyzer.py --json crypto.rb
23
+ ```
24
+
25
+ ## Dangerous Operations
26
+
27
+ ### Bytecodes (Errors)
28
+
29
+ | Bytecode | Issue |
30
+ |----------|-------|
31
+ | opt_div | Variable-time execution based on operand values |
32
+ | opt_mod | Variable-time execution based on operand values |
33
+
34
+ ### Bytecodes (Warnings)
35
+
36
+ | Bytecode | Issue |
37
+ |----------|-------|
38
+ | opt_eq | May early-terminate on secret data |
39
+ | opt_neq | May early-terminate on secret data |
40
+ | opt_lt, opt_le, opt_gt, opt_ge | Comparison may leak timing |
41
+ | branchif, branchunless | Conditional branch on secrets |
42
+ | opt_aref | Array access may leak timing via cache |
43
+ | opt_aset | Array store may leak timing via cache |
44
+ | opt_lshift, opt_rshift | Bit shift timing may vary |
45
+
46
+ ### Functions (Errors)
47
+
48
+ | Function | Issue | Safe Alternative |
49
+ |----------|-------|------------------|
50
+ | `rand()` | Predictable | `SecureRandom.random_bytes()` |
51
+ | `Random.new` | Predictable | `SecureRandom` |
52
+ | `srand()` | Sets predictable seed | `SecureRandom` |
53
+ | `Math.sqrt()` | Variable latency | Avoid in crypto |
54
+
55
+ ### Functions (Warnings)
56
+
57
+ | Function | Issue | Safe Alternative |
58
+ |----------|-------|------------------|
59
+ | `include?()` | Early-terminating | Constant-time search |
60
+ | `index()` | Early-terminating | Constant-time search |
61
+ | `start_with?()` | Early-terminating | `Rack::Utils.secure_compare()` |
62
+ | `end_with?()` | Early-terminating | `Rack::Utils.secure_compare()` |
63
+ | `match()` | Variable-time | Avoid on secrets |
64
+ | `=~` | Variable-time regex | Avoid on secrets |
65
+ | `to_json()` | Variable-length output | Fixed-length padding |
66
+ | `Marshal.dump()` | Variable-length output | Avoid for secrets |
67
+ | `Marshal.load()` | Variable-time, security risk | Avoid for secrets |
68
+
69
+ ## Safe Patterns
70
+
71
+ ### String Comparison
72
+
73
+ ```ruby
74
+ # VULNERABLE: Early exit on mismatch
75
+ if user_token == stored_token
76
+ # ...
77
+ end
78
+
79
+ # SAFE: Constant-time comparison (Rails/Rack)
80
+ require 'rack/utils'
81
+ if Rack::Utils.secure_compare(user_token, stored_token)
82
+ # ...
83
+ end
84
+
85
+ # SAFE: ActiveSupport (Rails)
86
+ require 'active_support/security_utils'
87
+ if ActiveSupport::SecurityUtils.secure_compare(user_token, stored_token)
88
+ # ...
89
+ end
90
+
91
+ # SAFE: OpenSSL (stdlib)
92
+ require 'openssl'
93
+ if OpenSSL.secure_compare(user_token, stored_token)
94
+ # ...
95
+ end
96
+ ```
97
+
98
+ ### Random Number Generation
99
+
100
+ ```ruby
101
+ # VULNERABLE: Predictable
102
+ token = rand(2**128)
103
+ random_bytes = Random.new.bytes(16)
104
+
105
+ # SAFE: Cryptographically secure
106
+ require 'securerandom'
107
+ token = SecureRandom.random_bytes(16)
108
+ token_hex = SecureRandom.hex(16)
109
+ token_base64 = SecureRandom.base64(16)
110
+ random_number = SecureRandom.random_number(2**128)
111
+ ```
112
+
113
+ ### Division Operations
114
+
115
+ ```ruby
116
+ # VULNERABLE: Division has variable timing
117
+ quotient = secret / divisor
118
+
119
+ # SAFE: Barrett reduction for constant divisors
120
+ def barrett_reduce(value, divisor, mu, bits)
121
+ q = (value * mu) >> (2 * bits)
122
+ r = value - q * divisor
123
+ # Constant-time correction using bitwise operations
124
+ mask = -(r >= divisor ? 1 : 0)
125
+ r - (divisor & mask)
126
+ end
127
+ ```
128
+
129
+ ## Rails/Rack Integration
130
+
131
+ ### Secure Compare
132
+
133
+ Rails and Rack provide constant-time comparison:
134
+
135
+ ```ruby
136
+ # Rack (standalone)
137
+ Rack::Utils.secure_compare(a, b)
138
+
139
+ # Rails/ActiveSupport
140
+ ActiveSupport::SecurityUtils.secure_compare(a, b)
141
+
142
+ # OpenSSL (Ruby 2.5+)
143
+ OpenSSL.secure_compare(a, b)
144
+ ```
145
+
146
+ ### CSRF Token Comparison
147
+
148
+ ```ruby
149
+ # Rails automatically uses secure_compare for CSRF tokens
150
+ # For custom token validation:
151
+ class ApplicationController < ActionController::Base
152
+ def verify_api_token
153
+ provided = request.headers['X-API-Token']
154
+ expected = current_user.api_token
155
+
156
+ # SAFE: Constant-time comparison
157
+ unless ActiveSupport::SecurityUtils.secure_compare(provided, expected)
158
+ head :unauthorized
159
+ end
160
+ end
161
+ end
162
+ ```
163
+
164
+ ## YARV Bytecode Notes
165
+
166
+ The analyzer uses `ruby --dump=insns` to get YARV instruction sequences. Example output:
167
+
168
+ ```
169
+ == disasm: #<ISeq:vulnerable_function@test.rb:1 (1,0)-(5,3)>
170
+ local table (size: 2, argc: 2)
171
+ [ 2] value@0 [ 1] modulus@1
172
+ 0000 getlocal_WC_0 value@0
173
+ 0002 getlocal_WC_0 modulus@1
174
+ 0004 opt_div <calldata!mid:/, argc:1>
175
+ 0006 leave
176
+ ```
177
+
178
+ The `opt_div` instruction at offset 0004 is flagged as a timing vulnerability.
179
+
180
+ ## Limitations
181
+
182
+ ### MRI Ruby Only
183
+
184
+ The analyzer targets MRI (Matz's Ruby Interpreter) YARV bytecode. Alternative implementations (JRuby, TruffleRuby) have different bytecode formats:
185
+
186
+ - **JRuby**: Compiles to JVM bytecode
187
+ - **TruffleRuby**: Uses GraalVM intermediate representation
188
+
189
+ ### Method Caching
190
+
191
+ Ruby's method dispatch involves caching that can affect timing. Even with constant-time operations, method lookup timing may leak information about code paths.
192
+
193
+ ### Gem Dependencies
194
+
195
+ When auditing gems:
196
+ 1. Check if the gem uses `SecureRandom` instead of `rand`
197
+ 2. Verify string comparisons use `secure_compare`
198
+ 3. Look for division/modulo operations on sensitive data
@@ -0,0 +1,288 @@
1
+ # Constant-Time Analysis: Swift
2
+
3
+ Analysis guidance for Swift targeting iOS, macOS, watchOS, and tvOS. Swift compiles to native code, making it subject to the same CPU-level timing side-channels as C, C++, Go, and Rust.
4
+
5
+ ## Understanding Swift Compilation
6
+
7
+ Swift compiles directly to native machine code:
8
+
9
+ ```text
10
+ Source Code (.swift)
11
+ |
12
+ v
13
+ swiftc (Swift Compiler / LLVM)
14
+ |
15
+ v
16
+ Native Assembly
17
+ |
18
+ v
19
+ Machine Code (binary)
20
+ ```
21
+
22
+ **Key implications:**
23
+
24
+ 1. **Same vulnerabilities as C** - Division, branches, and table lookups have data-dependent timing
25
+ 2. **LLVM backend** - Swift uses LLVM, so analysis is similar to clang-compiled code
26
+ 3. **Architecture matters** - x86_64 (Mac) and arm64 (iOS devices, Apple Silicon) have different instruction sets
27
+
28
+ ## Running the Analyzer
29
+
30
+ ```bash
31
+ # Analyze Swift for native architecture
32
+ uv run {baseDir}/ct_analyzer/analyzer.py crypto.swift
33
+
34
+ # Analyze for iOS device (arm64)
35
+ uv run {baseDir}/ct_analyzer/analyzer.py --arch arm64 crypto.swift
36
+
37
+ # Analyze for Intel Mac
38
+ uv run {baseDir}/ct_analyzer/analyzer.py --arch x86_64 crypto.swift
39
+
40
+ # Test multiple optimization levels (RECOMMENDED)
41
+ uv run {baseDir}/ct_analyzer/analyzer.py --opt-level O0 crypto.swift
42
+ uv run {baseDir}/ct_analyzer/analyzer.py --opt-level O2 crypto.swift
43
+
44
+ # Include conditional branch warnings
45
+ uv run {baseDir}/ct_analyzer/analyzer.py --warnings crypto.swift
46
+
47
+ # CI-friendly JSON output
48
+ uv run {baseDir}/ct_analyzer/analyzer.py --json crypto.swift
49
+ ```
50
+
51
+ ## Dangerous Instructions by Architecture
52
+
53
+ ### ARM64 (iOS devices, Apple Silicon Macs)
54
+
55
+ | Category | Instructions | Risk |
56
+ |----------|--------------|------|
57
+ | Division | `UDIV`, `SDIV` | Early termination optimization; variable-time |
58
+ | Floating-Point | `FDIV`, `FSQRT` | Variable latency based on operand values |
59
+ | Conditional Branches | `B.EQ`, `B.NE`, `CBZ`, `CBNZ`, etc. | Timing leak if condition depends on secrets |
60
+
61
+ ### x86_64 (Intel Macs)
62
+
63
+ | Category | Instructions | Risk |
64
+ |----------|--------------|------|
65
+ | Division | `DIV`, `IDIV`, `DIVQ`, `IDIVQ` | Data-dependent timing |
66
+ | Floating-Point | `DIVSS`, `DIVSD`, `SQRTSS`, `SQRTSD` | Variable latency |
67
+ | Conditional Branches | `JE`, `JNE`, `JZ`, `JNZ`, etc. | Timing leak if condition depends on secrets |
68
+
69
+ ## Constant-Time Patterns
70
+
71
+ ### Replace Division
72
+
73
+ ```swift
74
+ // VULNERABLE: Division instruction emitted
75
+ let q = secretValue / divisor
76
+
77
+ // SAFE: Barrett reduction (for fixed divisor)
78
+ // Precompute: mu = (1 << 32) / divisor
79
+ let mu: UInt64 = (1 << 32) / UInt64(divisor)
80
+ let q = Int32((UInt64(secretValue) &* mu) >> 32)
81
+ ```
82
+
83
+ ### Replace Branches
84
+
85
+ ```swift
86
+ // VULNERABLE: Branch timing reveals secret
87
+ let result = secret != 0 ? a : b
88
+
89
+ // SAFE: Constant-time selection using bitwise ops
90
+ let mask = Int32(bitPattern: UInt32(bitPattern: -Int32(secret != 0 ? 1 : 0)))
91
+ // Better approach with no branch:
92
+ let nonZero = (secret | -secret) >> 31 // -1 if secret != 0, else 0
93
+ let result = (a & nonZero) | (b & ~nonZero)
94
+ ```
95
+
96
+ ### Replace Comparisons
97
+
98
+ ```swift
99
+ // VULNERABLE: Standard equality may early-terminate
100
+ if computed == expected { ... }
101
+
102
+ // SAFE: Constant-time comparison
103
+ import CryptoKit // Available on iOS 13+, macOS 10.15+
104
+
105
+ // Use Data's built-in constant-time comparison for crypto
106
+ if computed.withUnsafeBytes({ cPtr in
107
+ expected.withUnsafeBytes { ePtr in
108
+ timingSafeCompare(cPtr, ePtr)
109
+ }
110
+ }) { ... }
111
+
112
+ // Manual constant-time comparison
113
+ func constantTimeCompare(_ a: [UInt8], _ b: [UInt8]) -> Bool {
114
+ guard a.count == b.count else { return false }
115
+ var result: UInt8 = 0
116
+ for i in 0..<a.count {
117
+ result |= a[i] ^ b[i]
118
+ }
119
+ return result == 0
120
+ }
121
+ ```
122
+
123
+ ### Secure Random
124
+
125
+ ```swift
126
+ // VULNERABLE: Don't use for cryptographic purposes
127
+ import Foundation
128
+ let value = Int.random(in: 0..<100) // Uses arc4random, generally OK but not verified
129
+
130
+ // SAFE: Use CryptoKit (iOS 13+, macOS 10.15+)
131
+ import CryptoKit
132
+
133
+ // Generate secure random bytes
134
+ var randomBytes = [UInt8](repeating: 0, count: 32)
135
+ let status = SecRandomCopyBytes(kSecRandomDefault, randomBytes.count, &randomBytes)
136
+ guard status == errSecSuccess else { /* handle error */ }
137
+
138
+ // Or use SymmetricKey for key generation
139
+ let key = SymmetricKey(size: .bits256)
140
+ ```
141
+
142
+ ## Apple Platform Considerations
143
+
144
+ ### Using CryptoKit (Recommended)
145
+
146
+ CryptoKit provides constant-time implementations for common operations:
147
+
148
+ ```swift
149
+ import CryptoKit
150
+
151
+ // HMAC (constant-time internally)
152
+ let key = SymmetricKey(size: .bits256)
153
+ let signature = HMAC<SHA256>.authenticationCode(for: data, using: key)
154
+
155
+ // AES-GCM encryption
156
+ let sealedBox = try AES.GCM.seal(plaintext, using: key)
157
+
158
+ // Curve25519 key agreement
159
+ let privateKey = Curve25519.KeyAgreement.PrivateKey()
160
+ let sharedSecret = try privateKey.sharedSecretFromKeyAgreement(with: peerPublicKey)
161
+ ```
162
+
163
+ ### Security Framework
164
+
165
+ ```swift
166
+ import Security
167
+
168
+ // Generate cryptographically secure random data
169
+ func secureRandomBytes(count: Int) -> Data? {
170
+ var bytes = [UInt8](repeating: 0, count: count)
171
+ let status = SecRandomCopyBytes(kSecRandomDefault, count, &bytes)
172
+ return status == errSecSuccess ? Data(bytes) : nil
173
+ }
174
+
175
+ // Keychain for secure storage
176
+ func storeInKeychain(key: Data, account: String) -> Bool {
177
+ let query: [String: Any] = [
178
+ kSecClass as String: kSecClassGenericPassword,
179
+ kSecAttrAccount as String: account,
180
+ kSecValueData as String: key
181
+ ]
182
+ return SecItemAdd(query as CFDictionary, nil) == errSecSuccess
183
+ }
184
+ ```
185
+
186
+ ## Swift-Specific Pitfalls
187
+
188
+ ### Optional Unwrapping
189
+
190
+ ```swift
191
+ // Branching on optionals
192
+ if let secret = maybeSecret { // Introduces branch
193
+ process(secret)
194
+ }
195
+
196
+ // Guard statements also branch
197
+ guard let secret = maybeSecret else { return }
198
+ ```
199
+
200
+ ### Pattern Matching
201
+
202
+ ```swift
203
+ // Switch/case compiles to branching code
204
+ switch secretEnum {
205
+ case .optionA: handleA() // Branch
206
+ case .optionB: handleB() // Branch
207
+ }
208
+ ```
209
+
210
+ ### Array Subscripting
211
+
212
+ ```swift
213
+ // Array access indexed by secret leaks via cache timing
214
+ let value = lookupTable[secretIndex] // Cache timing side-channel
215
+ ```
216
+
217
+ ### String Operations
218
+
219
+ ```swift
220
+ // String comparison is NOT constant-time
221
+ if secretString == expectedString { ... } // Variable-time
222
+
223
+ // Character iteration may also have timing variations
224
+ for char in secretString { ... }
225
+ ```
226
+
227
+ ## Setup Requirements
228
+
229
+ ### Xcode (Recommended)
230
+
231
+ Install Xcode from the Mac App Store. The Swift compiler is included.
232
+
233
+ ```bash
234
+ # Verify installation
235
+ swiftc --version
236
+ ```
237
+
238
+ ### Swift Toolchain (Alternative)
239
+
240
+ Download from [swift.org](https://swift.org/download/) for standalone installation.
241
+
242
+ ```bash
243
+ # Verify
244
+ swiftc --version
245
+ ```
246
+
247
+ ### Cross-Compilation
248
+
249
+ For analyzing code targeting different architectures:
250
+
251
+ ```bash
252
+ # Analyze for iOS device
253
+ uv run {baseDir}/ct_analyzer/analyzer.py --arch arm64 crypto.swift
254
+
255
+ # Analyze for iOS simulator
256
+ uv run {baseDir}/ct_analyzer/analyzer.py --arch x86_64 crypto.swift
257
+ ```
258
+
259
+ ## Common Mistakes
260
+
261
+ 1. **Using Swift's == for byte comparison** - Standard equality comparison may early-terminate; use constant-time comparison
262
+
263
+ 2. **Trusting CryptoKit for all operations** - CryptoKit provides constant-time primitives, but combining them incorrectly can introduce vulnerabilities
264
+
265
+ 3. **String manipulation on secrets** - Swift strings have complex internal representations; timing varies with content
266
+
267
+ 4. **Ignoring optimization levels** - Swift's optimizer can transform safe source code into unsafe assembly; test at multiple -O levels
268
+
269
+ 5. **Platform availability** - CryptoKit requires iOS 13+/macOS 10.15+; older platforms need alternative implementations
270
+
271
+ ## Testing on Different Architectures
272
+
273
+ Always test your cryptographic code on actual target architectures:
274
+
275
+ ```bash
276
+ # Apple Silicon Mac (arm64)
277
+ uv run {baseDir}/ct_analyzer/analyzer.py crypto.swift
278
+
279
+ # Cross-compile for Intel
280
+ uv run {baseDir}/ct_analyzer/analyzer.py --arch x86_64 crypto.swift
281
+ ```
282
+
283
+ ## Further Reading
284
+
285
+ - [Apple CryptoKit Documentation](https://developer.apple.com/documentation/cryptokit)
286
+ - [Apple Security Framework](https://developer.apple.com/documentation/security)
287
+ - [Swift.org Security](https://swift.org/blog/swift-5-release/)
288
+ - [OWASP iOS Security Guide](https://owasp.org/www-project-mobile-security-testing-guide/)