@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.
- package/README.md +126 -0
- package/package.json +53 -0
- package/skills/1password/SKILL.md +70 -0
- package/skills/1password/references/cli-examples.md +29 -0
- package/skills/1password/references/get-started.md +17 -0
- package/skills/apple-notes/SKILL.md +77 -0
- package/skills/apple-reminders/SKILL.md +96 -0
- package/skills/bear-notes/SKILL.md +107 -0
- package/skills/bird/SKILL.md +224 -0
- package/skills/blogwatcher/SKILL.md +69 -0
- package/skills/blucli/SKILL.md +47 -0
- package/skills/bluebubbles/SKILL.md +131 -0
- package/skills/camsnap/SKILL.md +45 -0
- package/skills/canvas/SKILL.md +203 -0
- package/skills/clawhub/SKILL.md +77 -0
- package/skills/coding-agent/SKILL.md +284 -0
- package/skills/discord/SKILL.md +578 -0
- package/skills/eightctl/SKILL.md +50 -0
- package/skills/food-order/SKILL.md +48 -0
- package/skills/gemini/SKILL.md +43 -0
- package/skills/gifgrep/SKILL.md +79 -0
- package/skills/github/SKILL.md +77 -0
- package/skills/gog/SKILL.md +116 -0
- package/skills/goplaces/SKILL.md +52 -0
- package/skills/healthcheck/SKILL.md +245 -0
- package/skills/himalaya/SKILL.md +257 -0
- package/skills/himalaya/references/configuration.md +184 -0
- package/skills/himalaya/references/message-composition.md +199 -0
- package/skills/imsg/SKILL.md +74 -0
- package/skills/local-places/SERVER_README.md +101 -0
- package/skills/local-places/SKILL.md +102 -0
- package/skills/local-places/pyproject.toml +21 -0
- package/skills/local-places/src/local_places/__init__.py +2 -0
- package/skills/local-places/src/local_places/google_places.py +314 -0
- package/skills/local-places/src/local_places/main.py +65 -0
- package/skills/local-places/src/local_places/schemas.py +107 -0
- package/skills/mcporter/SKILL.md +61 -0
- package/skills/model-usage/SKILL.md +69 -0
- package/skills/model-usage/references/codexbar-cli.md +33 -0
- package/skills/model-usage/scripts/model_usage.py +310 -0
- package/skills/nano-banana-pro/SKILL.md +58 -0
- package/skills/nano-banana-pro/scripts/generate_image.py +184 -0
- package/skills/nano-pdf/SKILL.md +38 -0
- package/skills/notion/SKILL.md +172 -0
- package/skills/obsidian/SKILL.md +81 -0
- package/skills/openai-image-gen/SKILL.md +89 -0
- package/skills/openai-image-gen/scripts/gen.py +240 -0
- package/skills/openai-whisper/SKILL.md +38 -0
- package/skills/openai-whisper-api/SKILL.md +52 -0
- package/skills/openai-whisper-api/scripts/transcribe.sh +85 -0
- package/skills/openhue/SKILL.md +51 -0
- package/skills/oracle/SKILL.md +125 -0
- package/skills/ordercli/SKILL.md +78 -0
- package/skills/peekaboo/SKILL.md +190 -0
- package/skills/sag/SKILL.md +87 -0
- package/skills/security-ask-questions-if-underspecified/.claude-plugin/plugin.json +10 -0
- package/skills/security-ask-questions-if-underspecified/README.md +24 -0
- package/skills/security-ask-questions-if-underspecified/skills/ask-questions-if-underspecified/SKILL.md +85 -0
- package/skills/security-audit-context-building/.claude-plugin/plugin.json +10 -0
- package/skills/security-audit-context-building/README.md +58 -0
- package/skills/security-audit-context-building/commands/audit-context.md +21 -0
- package/skills/security-audit-context-building/skills/audit-context-building/SKILL.md +297 -0
- package/skills/security-audit-context-building/skills/audit-context-building/resources/COMPLETENESS_CHECKLIST.md +47 -0
- package/skills/security-audit-context-building/skills/audit-context-building/resources/FUNCTION_MICRO_ANALYSIS_EXAMPLE.md +355 -0
- package/skills/security-audit-context-building/skills/audit-context-building/resources/OUTPUT_REQUIREMENTS.md +71 -0
- package/skills/security-building-secure-contracts/.claude-plugin/plugin.json +10 -0
- package/skills/security-building-secure-contracts/README.md +241 -0
- package/skills/security-building-secure-contracts/skills/algorand-vulnerability-scanner/SKILL.md +284 -0
- package/skills/security-building-secure-contracts/skills/algorand-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +405 -0
- package/skills/security-building-secure-contracts/skills/audit-prep-assistant/SKILL.md +409 -0
- package/skills/security-building-secure-contracts/skills/cairo-vulnerability-scanner/SKILL.md +329 -0
- package/skills/security-building-secure-contracts/skills/cairo-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +722 -0
- package/skills/security-building-secure-contracts/skills/code-maturity-assessor/SKILL.md +218 -0
- package/skills/security-building-secure-contracts/skills/code-maturity-assessor/resources/ASSESSMENT_CRITERIA.md +355 -0
- package/skills/security-building-secure-contracts/skills/code-maturity-assessor/resources/EXAMPLE_REPORT.md +248 -0
- package/skills/security-building-secure-contracts/skills/code-maturity-assessor/resources/REPORT_FORMAT.md +33 -0
- package/skills/security-building-secure-contracts/skills/cosmos-vulnerability-scanner/SKILL.md +334 -0
- package/skills/security-building-secure-contracts/skills/cosmos-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +740 -0
- package/skills/security-building-secure-contracts/skills/guidelines-advisor/SKILL.md +252 -0
- package/skills/security-building-secure-contracts/skills/guidelines-advisor/resources/ASSESSMENT_AREAS.md +329 -0
- package/skills/security-building-secure-contracts/skills/guidelines-advisor/resources/DELIVERABLES.md +118 -0
- package/skills/security-building-secure-contracts/skills/guidelines-advisor/resources/EXAMPLE_REPORT.md +298 -0
- package/skills/security-building-secure-contracts/skills/secure-workflow-guide/SKILL.md +161 -0
- package/skills/security-building-secure-contracts/skills/secure-workflow-guide/resources/EXAMPLE_REPORT.md +279 -0
- package/skills/security-building-secure-contracts/skills/secure-workflow-guide/resources/WORKFLOW_STEPS.md +132 -0
- package/skills/security-building-secure-contracts/skills/solana-vulnerability-scanner/SKILL.md +389 -0
- package/skills/security-building-secure-contracts/skills/solana-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +669 -0
- package/skills/security-building-secure-contracts/skills/substrate-vulnerability-scanner/SKILL.md +298 -0
- package/skills/security-building-secure-contracts/skills/substrate-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +791 -0
- package/skills/security-building-secure-contracts/skills/token-integration-analyzer/SKILL.md +362 -0
- package/skills/security-building-secure-contracts/skills/token-integration-analyzer/resources/ASSESSMENT_CATEGORIES.md +571 -0
- package/skills/security-building-secure-contracts/skills/token-integration-analyzer/resources/REPORT_TEMPLATES.md +141 -0
- package/skills/security-building-secure-contracts/skills/ton-vulnerability-scanner/SKILL.md +388 -0
- package/skills/security-building-secure-contracts/skills/ton-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +595 -0
- package/skills/security-burpsuite-project-parser/.claude-plugin/plugin.json +10 -0
- package/skills/security-burpsuite-project-parser/README.md +103 -0
- package/skills/security-burpsuite-project-parser/commands/burp-search.md +18 -0
- package/skills/security-burpsuite-project-parser/skills/SKILL.md +358 -0
- package/skills/security-burpsuite-project-parser/skills/scripts/burp-search.sh +99 -0
- package/skills/security-claude-in-chrome-troubleshooting/.claude-plugin/plugin.json +8 -0
- package/skills/security-claude-in-chrome-troubleshooting/README.md +31 -0
- package/skills/security-claude-in-chrome-troubleshooting/skills/claude-in-chrome-troubleshooting/SKILL.md +251 -0
- package/skills/security-constant-time-analysis/.claude-plugin/plugin.json +9 -0
- package/skills/security-constant-time-analysis/README.md +381 -0
- package/skills/security-constant-time-analysis/commands/ct-check.md +20 -0
- package/skills/security-constant-time-analysis/ct_analyzer/__init__.py +49 -0
- package/skills/security-constant-time-analysis/ct_analyzer/analyzer.py +1284 -0
- package/skills/security-constant-time-analysis/ct_analyzer/script_analyzers.py +3081 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/__init__.py +1 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_analyzer.py +1397 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/bn_excerpt.js +205 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/decompose_constant_time.c +181 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/decompose_vulnerable.c +74 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/decompose_vulnerable.go +78 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/decompose_vulnerable.rs +92 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.cs +174 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.java +161 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.kt +181 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.php +140 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.py +252 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.rb +188 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.swift +199 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.ts +154 -0
- package/skills/security-constant-time-analysis/pyproject.toml +52 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/README.md +90 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/SKILL.md +219 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/compiled.md +129 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/javascript.md +136 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/kotlin.md +252 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/php.md +172 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/python.md +179 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/ruby.md +198 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/swift.md +288 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/vm-compiled.md +354 -0
- package/skills/security-constant-time-analysis/uv.lock +8 -0
- package/skills/security-culture-index/.claude-plugin/plugin.json +8 -0
- package/skills/security-culture-index/README.md +79 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/SKILL.md +293 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/anti-patterns.md +255 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/conversation-starters.md +408 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/interview-trait-signals.md +253 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/motivators.md +158 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/patterns-archetypes.md +147 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/primary-traits.md +307 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/secondary-traits.md +228 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/team-composition.md +148 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/check_deps.py +108 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/__init__.py +20 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/constants.py +122 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/extract.py +187 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/models.py +16 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/opencv_extractor.py +520 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/extract_pdf.py +237 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/pyproject.toml +18 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/templates/burnout-report.md +113 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/templates/comparison-report.md +103 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/templates/hiring-profile.md +127 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/templates/individual-report.md +85 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/templates/predicted-profile.md +165 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/templates/team-report.md +109 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/analyze-team.md +188 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/coach-manager.md +267 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/compare-profiles.md +188 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/define-hiring-profile.md +220 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/detect-burnout.md +206 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/extract-from-pdf.md +121 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/interpret-individual.md +183 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/interview-debrief.md +234 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/mediate-conflict.md +306 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/plan-onboarding.md +322 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/predict-from-interview.md +250 -0
- package/skills/security-differential-review/.claude-plugin/plugin.json +10 -0
- package/skills/security-differential-review/README.md +109 -0
- package/skills/security-differential-review/commands/diff-review.md +21 -0
- package/skills/security-differential-review/skills/differential-review/SKILL.md +220 -0
- package/skills/security-differential-review/skills/differential-review/adversarial.md +203 -0
- package/skills/security-differential-review/skills/differential-review/methodology.md +234 -0
- package/skills/security-differential-review/skills/differential-review/patterns.md +300 -0
- package/skills/security-differential-review/skills/differential-review/reporting.md +369 -0
- package/skills/security-dwarf-expert/.claude-plugin/plugin.json +10 -0
- package/skills/security-dwarf-expert/README.md +38 -0
- package/skills/security-dwarf-expert/skills/dwarf-expert/SKILL.md +93 -0
- package/skills/security-dwarf-expert/skills/dwarf-expert/reference/coding.md +31 -0
- package/skills/security-dwarf-expert/skills/dwarf-expert/reference/dwarfdump.md +50 -0
- package/skills/security-dwarf-expert/skills/dwarf-expert/reference/readelf.md +8 -0
- package/skills/security-entry-point-analyzer/.claude-plugin/plugin.json +10 -0
- package/skills/security-entry-point-analyzer/README.md +74 -0
- package/skills/security-entry-point-analyzer/commands/entry-points.md +18 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/SKILL.md +251 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/cosmwasm.md +182 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/move-aptos.md +107 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/move-sui.md +87 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/solana.md +155 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/solidity.md +135 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/ton.md +185 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/vyper.md +141 -0
- package/skills/security-firebase-apk-scanner/.claude-plugin/plugin.json +10 -0
- package/skills/security-firebase-apk-scanner/README.md +85 -0
- package/skills/security-firebase-apk-scanner/commands/scan-apk.md +18 -0
- package/skills/security-firebase-apk-scanner/scanner.sh +1408 -0
- package/skills/security-firebase-apk-scanner/skills/firebase-apk-scanner/SKILL.md +197 -0
- package/skills/security-firebase-apk-scanner/skills/firebase-apk-scanner/references/vulnerabilities.md +803 -0
- package/skills/security-fix-review/.claude-plugin/plugin.json +13 -0
- package/skills/security-fix-review/README.md +118 -0
- package/skills/security-fix-review/commands/fix-review.md +24 -0
- package/skills/security-fix-review/skills/fix-review/SKILL.md +264 -0
- package/skills/security-fix-review/skills/fix-review/references/bug-detection.md +408 -0
- package/skills/security-fix-review/skills/fix-review/references/finding-matching.md +298 -0
- package/skills/security-fix-review/skills/fix-review/references/report-parsing.md +398 -0
- package/skills/security-insecure-defaults/.claude-plugin/plugin.json +10 -0
- package/skills/security-insecure-defaults/README.md +45 -0
- package/skills/security-insecure-defaults/skills/insecure-defaults/SKILL.md +117 -0
- package/skills/security-insecure-defaults/skills/insecure-defaults/references/examples.md +409 -0
- package/skills/security-modern-python/.claude-plugin/plugin.json +10 -0
- package/skills/security-modern-python/README.md +58 -0
- package/skills/security-modern-python/hooks/hooks.json +16 -0
- package/skills/security-modern-python/hooks/intercept-legacy-python.bats +388 -0
- package/skills/security-modern-python/hooks/intercept-legacy-python.sh +109 -0
- package/skills/security-modern-python/hooks/test_helper.bash +75 -0
- package/skills/security-modern-python/skills/modern-python/SKILL.md +333 -0
- package/skills/security-modern-python/skills/modern-python/references/dependabot.md +43 -0
- package/skills/security-modern-python/skills/modern-python/references/migration-checklist.md +141 -0
- package/skills/security-modern-python/skills/modern-python/references/pep723-scripts.md +259 -0
- package/skills/security-modern-python/skills/modern-python/references/prek.md +211 -0
- package/skills/security-modern-python/skills/modern-python/references/pyproject.md +254 -0
- package/skills/security-modern-python/skills/modern-python/references/ruff-config.md +240 -0
- package/skills/security-modern-python/skills/modern-python/references/security-setup.md +255 -0
- package/skills/security-modern-python/skills/modern-python/references/testing.md +284 -0
- package/skills/security-modern-python/skills/modern-python/references/uv-commands.md +200 -0
- package/skills/security-modern-python/skills/modern-python/templates/dependabot.yml +36 -0
- package/skills/security-modern-python/skills/modern-python/templates/pre-commit-config.yaml +66 -0
- package/skills/security-property-based-testing/.claude-plugin/plugin.json +9 -0
- package/skills/security-property-based-testing/README.md +47 -0
- package/skills/security-property-based-testing/skills/property-based-testing/README.md +88 -0
- package/skills/security-property-based-testing/skills/property-based-testing/SKILL.md +109 -0
- package/skills/security-property-based-testing/skills/property-based-testing/references/design.md +191 -0
- package/skills/security-property-based-testing/skills/property-based-testing/references/generating.md +200 -0
- package/skills/security-property-based-testing/skills/property-based-testing/references/libraries.md +130 -0
- package/skills/security-property-based-testing/skills/property-based-testing/references/refactoring.md +181 -0
- package/skills/security-property-based-testing/skills/property-based-testing/references/reviewing.md +209 -0
- package/skills/security-property-based-testing/skills/property-based-testing/references/strategies.md +124 -0
- package/skills/semgrep-rule-creator/.claude-plugin/plugin.json +8 -0
- package/skills/semgrep-rule-creator/README.md +43 -0
- package/skills/semgrep-rule-creator/commands/semgrep-rule.md +26 -0
- package/skills/semgrep-rule-creator/skills/semgrep-rule-creator/SKILL.md +168 -0
- package/skills/semgrep-rule-creator/skills/semgrep-rule-creator/references/quick-reference.md +203 -0
- package/skills/semgrep-rule-creator/skills/semgrep-rule-creator/references/workflow.md +240 -0
- package/skills/semgrep-rule-variant-creator/.claude-plugin/plugin.json +9 -0
- package/skills/semgrep-rule-variant-creator/README.md +86 -0
- package/skills/semgrep-rule-variant-creator/skills/semgrep-rule-variant-creator/SKILL.md +205 -0
- package/skills/semgrep-rule-variant-creator/skills/semgrep-rule-variant-creator/references/applicability-analysis.md +250 -0
- package/skills/semgrep-rule-variant-creator/skills/semgrep-rule-variant-creator/references/language-syntax-guide.md +324 -0
- package/skills/semgrep-rule-variant-creator/skills/semgrep-rule-variant-creator/references/workflow.md +518 -0
- package/skills/session-logs/SKILL.md +115 -0
- package/skills/sharp-edges/.claude-plugin/plugin.json +10 -0
- package/skills/sharp-edges/README.md +48 -0
- package/skills/sharp-edges/skills/sharp-edges/SKILL.md +292 -0
- package/skills/sharp-edges/skills/sharp-edges/references/auth-patterns.md +252 -0
- package/skills/sharp-edges/skills/sharp-edges/references/case-studies.md +274 -0
- package/skills/sharp-edges/skills/sharp-edges/references/config-patterns.md +333 -0
- package/skills/sharp-edges/skills/sharp-edges/references/crypto-apis.md +190 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-c.md +205 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-csharp.md +285 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-go.md +270 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-java.md +263 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-javascript.md +269 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-kotlin.md +265 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-php.md +245 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-python.md +274 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-ruby.md +273 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-rust.md +272 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-swift.md +287 -0
- package/skills/sharp-edges/skills/sharp-edges/references/language-specific.md +588 -0
- package/skills/sherpa-onnx-tts/SKILL.md +103 -0
- package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +178 -0
- package/skills/skill-creator/SKILL.md +370 -0
- package/skills/skill-creator/license.txt +202 -0
- package/skills/skill-creator/scripts/init_skill.py +378 -0
- package/skills/skill-creator/scripts/package_skill.py +111 -0
- package/skills/skill-creator/scripts/quick_validate.py +101 -0
- package/skills/slack/SKILL.md +144 -0
- package/skills/songsee/SKILL.md +49 -0
- package/skills/sonoscli/SKILL.md +46 -0
- package/skills/spec-to-code-compliance/.claude-plugin/plugin.json +10 -0
- package/skills/spec-to-code-compliance/README.md +67 -0
- package/skills/spec-to-code-compliance/commands/spec-compliance.md +22 -0
- package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/SKILL.md +349 -0
- package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/resources/COMPLETENESS_CHECKLIST.md +69 -0
- package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/resources/IR_EXAMPLES.md +417 -0
- package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/resources/OUTPUT_REQUIREMENTS.md +105 -0
- package/skills/spotify-player/SKILL.md +64 -0
- package/skills/static-analysis/.claude-plugin/plugin.json +8 -0
- package/skills/static-analysis/README.md +59 -0
- package/skills/static-analysis/skills/codeql/SKILL.md +315 -0
- package/skills/static-analysis/skills/sarif-parsing/SKILL.md +479 -0
- package/skills/static-analysis/skills/sarif-parsing/resources/jq-queries.md +162 -0
- package/skills/static-analysis/skills/sarif-parsing/resources/sarif_helpers.py +331 -0
- package/skills/static-analysis/skills/semgrep/SKILL.md +337 -0
- package/skills/summarize/SKILL.md +87 -0
- package/skills/testing-handbook-skills/.claude-plugin/plugin.json +8 -0
- package/skills/testing-handbook-skills/README.md +241 -0
- package/skills/testing-handbook-skills/scripts/pyproject.toml +8 -0
- package/skills/testing-handbook-skills/scripts/validate-skills.py +657 -0
- package/skills/testing-handbook-skills/skills/address-sanitizer/SKILL.md +341 -0
- package/skills/testing-handbook-skills/skills/aflpp/SKILL.md +640 -0
- package/skills/testing-handbook-skills/skills/atheris/SKILL.md +515 -0
- package/skills/testing-handbook-skills/skills/cargo-fuzz/SKILL.md +454 -0
- package/skills/testing-handbook-skills/skills/codeql/SKILL.md +549 -0
- package/skills/testing-handbook-skills/skills/constant-time-testing/SKILL.md +507 -0
- package/skills/testing-handbook-skills/skills/coverage-analysis/SKILL.md +607 -0
- package/skills/testing-handbook-skills/skills/fuzzing-dictionary/SKILL.md +297 -0
- package/skills/testing-handbook-skills/skills/fuzzing-obstacles/SKILL.md +426 -0
- package/skills/testing-handbook-skills/skills/harness-writing/SKILL.md +614 -0
- package/skills/testing-handbook-skills/skills/libafl/SKILL.md +625 -0
- package/skills/testing-handbook-skills/skills/libfuzzer/SKILL.md +795 -0
- package/skills/testing-handbook-skills/skills/ossfuzz/SKILL.md +426 -0
- package/skills/testing-handbook-skills/skills/ruzzy/SKILL.md +443 -0
- package/skills/testing-handbook-skills/skills/semgrep/SKILL.md +601 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/SKILL.md +372 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/agent-prompt.md +280 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/discovery.md +452 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/domain-skill.md +504 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/fuzzer-skill.md +454 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/technique-skill.md +527 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/tool-skill.md +366 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/testing.md +482 -0
- package/skills/testing-handbook-skills/skills/wycheproof/SKILL.md +533 -0
- package/skills/things-mac/SKILL.md +86 -0
- package/skills/tmux/SKILL.md +135 -0
- package/skills/tmux/scripts/find-sessions.sh +112 -0
- package/skills/tmux/scripts/wait-for-text.sh +83 -0
- package/skills/trello/SKILL.md +95 -0
- package/skills/variant-analysis/.claude-plugin/plugin.json +8 -0
- package/skills/variant-analysis/README.md +41 -0
- package/skills/variant-analysis/commands/variants.md +23 -0
- package/skills/variant-analysis/skills/variant-analysis/METHODOLOGY.md +327 -0
- package/skills/variant-analysis/skills/variant-analysis/SKILL.md +142 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/codeql/cpp.ql +119 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/codeql/go.ql +69 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/codeql/java.ql +71 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/codeql/javascript.ql +63 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/codeql/python.ql +80 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/cpp.yaml +98 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/go.yaml +63 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/java.yaml +61 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/javascript.yaml +60 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/python.yaml +72 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/variant-report-template.md +75 -0
- package/skills/video-frames/SKILL.md +46 -0
- package/skills/video-frames/scripts/frame.sh +81 -0
- package/skills/voice-call/SKILL.md +45 -0
- package/skills/wacli/SKILL.md +72 -0
- package/skills/weather/SKILL.md +54 -0
- package/skills/yara-authoring/.claude-plugin/plugin.json +9 -0
- package/skills/yara-authoring/README.md +131 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/SKILL.md +645 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/examples/MAL_Mac_ProtonRAT_Jan25.yar +99 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/examples/MAL_NPM_SupplyChain_Jan25.yar +170 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/examples/MAL_Win_Remcos_Jan25.yar +103 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/examples/SUSP_CRX_SuspiciousPermissions.yar +134 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/examples/SUSP_JS_Obfuscation_Jan25.yar +185 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/references/crx-module.md +214 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/references/dex-module.md +383 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/references/performance.md +333 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/references/strings.md +433 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/references/style-guide.md +257 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/references/testing.md +399 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/scripts/atom_analyzer.py +526 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/scripts/pyproject.toml +25 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/scripts/yara_lint.py +631 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/workflows/rule-development.md +493 -0
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Vulnerable Python code sample for constant-time analysis testing.
|
|
3
|
+
|
|
4
|
+
This file demonstrates common timing side-channel vulnerabilities in Python:
|
|
5
|
+
- Variable-time division operations
|
|
6
|
+
- Timing-unsafe string comparisons
|
|
7
|
+
- Variable-latency math operations
|
|
8
|
+
- Predictable randomness
|
|
9
|
+
- Table lookups indexed by secrets
|
|
10
|
+
- Variable-length encoding functions
|
|
11
|
+
- Bit shift operations
|
|
12
|
+
|
|
13
|
+
DO NOT USE THIS CODE IN PRODUCTION - it is intentionally vulnerable.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
import base64
|
|
17
|
+
import json
|
|
18
|
+
import math
|
|
19
|
+
import random
|
|
20
|
+
import struct
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def vulnerable_mod_reduce(value: int, modulus: int) -> int:
|
|
24
|
+
"""
|
|
25
|
+
Vulnerable modular reduction using division.
|
|
26
|
+
Division has data-dependent timing on most platforms.
|
|
27
|
+
"""
|
|
28
|
+
# VULNERABLE: Division has variable-time execution
|
|
29
|
+
quotient = value // modulus
|
|
30
|
+
# VULNERABLE: Modulo has variable-time execution
|
|
31
|
+
remainder = value % modulus
|
|
32
|
+
|
|
33
|
+
# Use quotient to prevent dead code elimination
|
|
34
|
+
if quotient < 0:
|
|
35
|
+
raise ValueError("Unexpected negative quotient")
|
|
36
|
+
|
|
37
|
+
return remainder
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def vulnerable_token_compare(provided: str, expected: str) -> bool:
|
|
41
|
+
"""
|
|
42
|
+
Vulnerable token comparison using early-exit equality.
|
|
43
|
+
This leaks timing information about how many characters match.
|
|
44
|
+
"""
|
|
45
|
+
# VULNERABLE: == on strings may early-exit
|
|
46
|
+
return provided == expected
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def vulnerable_string_search(haystack: str, needle: str) -> bool:
|
|
50
|
+
"""
|
|
51
|
+
Vulnerable string search using find.
|
|
52
|
+
find() has early-terminating behavior.
|
|
53
|
+
"""
|
|
54
|
+
# VULNERABLE: find has early-terminating behavior
|
|
55
|
+
return haystack.find(needle) != -1
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def vulnerable_string_startswith(text: str, prefix: str) -> bool:
|
|
59
|
+
"""
|
|
60
|
+
Vulnerable string prefix check using startswith.
|
|
61
|
+
startswith() has early-terminating behavior.
|
|
62
|
+
"""
|
|
63
|
+
# VULNERABLE: startswith has early-terminating behavior
|
|
64
|
+
return text.startswith(prefix)
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def vulnerable_sqrt(value: float) -> float:
|
|
68
|
+
"""
|
|
69
|
+
Vulnerable square root calculation.
|
|
70
|
+
math.sqrt() has variable latency based on operand values.
|
|
71
|
+
"""
|
|
72
|
+
# VULNERABLE: math.sqrt has variable latency
|
|
73
|
+
return math.sqrt(value)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def vulnerable_pow(base: float, exponent: float) -> float:
|
|
77
|
+
"""
|
|
78
|
+
Vulnerable power calculation.
|
|
79
|
+
math.pow() has variable latency based on operand values.
|
|
80
|
+
"""
|
|
81
|
+
# VULNERABLE: math.pow has variable latency
|
|
82
|
+
return math.pow(base, exponent)
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def vulnerable_random_token(length: int) -> str:
|
|
86
|
+
"""
|
|
87
|
+
Vulnerable random number generation.
|
|
88
|
+
random module is predictable and not cryptographically secure.
|
|
89
|
+
"""
|
|
90
|
+
chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
|
|
91
|
+
token = ""
|
|
92
|
+
|
|
93
|
+
for _ in range(length):
|
|
94
|
+
# VULNERABLE: random.choice is predictable
|
|
95
|
+
token += random.choice(chars)
|
|
96
|
+
|
|
97
|
+
return token
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def vulnerable_random_int(min_val: int, max_val: int) -> int:
|
|
101
|
+
"""
|
|
102
|
+
Vulnerable random integer generation.
|
|
103
|
+
random.randint() is predictable.
|
|
104
|
+
"""
|
|
105
|
+
# VULNERABLE: random.randint is predictable
|
|
106
|
+
return random.randint(min_val, max_val)
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def vulnerable_decompose(r: int, gamma2: int) -> tuple[int, int]:
|
|
110
|
+
"""
|
|
111
|
+
Vulnerable ML-DSA-like decompose function with division.
|
|
112
|
+
Demonstrates the KyberSlash-style vulnerability.
|
|
113
|
+
"""
|
|
114
|
+
# VULNERABLE: Division has variable-time execution
|
|
115
|
+
r1 = (r + 127) // (2 * gamma2)
|
|
116
|
+
|
|
117
|
+
# VULNERABLE: Modulo has variable-time execution
|
|
118
|
+
r0 = r % (2 * gamma2)
|
|
119
|
+
|
|
120
|
+
# Centering
|
|
121
|
+
if r0 > gamma2:
|
|
122
|
+
r0 -= 2 * gamma2
|
|
123
|
+
r1 += 1
|
|
124
|
+
|
|
125
|
+
return r1, r0
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def vulnerable_table_lookup(secret_index: int, table: list) -> int:
|
|
129
|
+
"""
|
|
130
|
+
Vulnerable table lookup using secret as index.
|
|
131
|
+
This leaks timing through cache behavior.
|
|
132
|
+
"""
|
|
133
|
+
# VULNERABLE: Array access indexed by secret leaks cache timing
|
|
134
|
+
return table[secret_index]
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
def vulnerable_sbox_lookup(secret_byte: int) -> int:
|
|
138
|
+
"""
|
|
139
|
+
Vulnerable S-box lookup (common in AES implementations).
|
|
140
|
+
Cache timing varies based on which cache line is accessed.
|
|
141
|
+
"""
|
|
142
|
+
# Standard AES S-box (first 16 values as example)
|
|
143
|
+
sbox = [
|
|
144
|
+
0x63,
|
|
145
|
+
0x7C,
|
|
146
|
+
0x77,
|
|
147
|
+
0x7B,
|
|
148
|
+
0xF2,
|
|
149
|
+
0x6B,
|
|
150
|
+
0x6F,
|
|
151
|
+
0xC5,
|
|
152
|
+
0x30,
|
|
153
|
+
0x01,
|
|
154
|
+
0x67,
|
|
155
|
+
0x2B,
|
|
156
|
+
0xFE,
|
|
157
|
+
0xD7,
|
|
158
|
+
0xAB,
|
|
159
|
+
0x76,
|
|
160
|
+
]
|
|
161
|
+
# VULNERABLE: Table lookup indexed by secret byte
|
|
162
|
+
return sbox[secret_byte % len(sbox)]
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
def vulnerable_bit_shift(secret: int, shift_amount: int) -> int:
|
|
166
|
+
"""
|
|
167
|
+
Vulnerable bit shift where shift amount depends on secret.
|
|
168
|
+
"""
|
|
169
|
+
# VULNERABLE: Left shift amount derived from secret
|
|
170
|
+
result = 1 << shift_amount
|
|
171
|
+
# VULNERABLE: Right shift
|
|
172
|
+
result2 = secret >> (shift_amount % 8)
|
|
173
|
+
return result + result2
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
def vulnerable_encode_secret(secret: bytes) -> str:
|
|
177
|
+
"""
|
|
178
|
+
Vulnerable encoding of secret data.
|
|
179
|
+
Variable-length output leaks information about input.
|
|
180
|
+
"""
|
|
181
|
+
# VULNERABLE: Base64 output length depends on input
|
|
182
|
+
encoded = base64.b64encode(secret).decode()
|
|
183
|
+
return encoded
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
def vulnerable_json_encode(secret_data: dict) -> str:
|
|
187
|
+
"""
|
|
188
|
+
Vulnerable JSON encoding of secret data.
|
|
189
|
+
Output length and encoding time varies with input.
|
|
190
|
+
"""
|
|
191
|
+
# VULNERABLE: JSON encoding produces variable-length output
|
|
192
|
+
return json.dumps(secret_data)
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
def vulnerable_struct_pack(secret_value: int) -> bytes:
|
|
196
|
+
"""
|
|
197
|
+
Vulnerable struct packing.
|
|
198
|
+
"""
|
|
199
|
+
# VULNERABLE: struct.pack timing may vary
|
|
200
|
+
return struct.pack(">I", secret_value)
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
def vulnerable_int_to_bytes(secret: int) -> bytes:
|
|
204
|
+
"""
|
|
205
|
+
Vulnerable integer to bytes conversion.
|
|
206
|
+
Output length reveals information about the integer size.
|
|
207
|
+
"""
|
|
208
|
+
# VULNERABLE: to_bytes output length may leak integer magnitude
|
|
209
|
+
byte_length = (secret.bit_length() + 7) // 8 or 1
|
|
210
|
+
return secret.to_bytes(byte_length, "big")
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
def run_tests() -> None:
|
|
214
|
+
"""Test harness to prevent dead code elimination."""
|
|
215
|
+
print("Running vulnerable operations for testing...")
|
|
216
|
+
|
|
217
|
+
result1 = vulnerable_mod_reduce(12345, 97)
|
|
218
|
+
print(f"Mod reduce: {result1}")
|
|
219
|
+
|
|
220
|
+
result2 = vulnerable_token_compare("secret123", "secret123")
|
|
221
|
+
print(f"Token compare: {result2}")
|
|
222
|
+
|
|
223
|
+
result3 = vulnerable_sqrt(144)
|
|
224
|
+
print(f"Sqrt: {result3}")
|
|
225
|
+
|
|
226
|
+
result4 = vulnerable_pow(2, 10)
|
|
227
|
+
print(f"Pow: {result4}")
|
|
228
|
+
|
|
229
|
+
result5 = vulnerable_random_token(16)
|
|
230
|
+
print(f"Token: {result5}")
|
|
231
|
+
|
|
232
|
+
result6 = vulnerable_decompose(1000, 261888)
|
|
233
|
+
print(f"Decompose: r1={result6[0]}, r0={result6[1]}")
|
|
234
|
+
|
|
235
|
+
result7 = vulnerable_table_lookup(5, [1, 2, 3, 4, 5, 6, 7, 8])
|
|
236
|
+
print(f"Table lookup: {result7}")
|
|
237
|
+
|
|
238
|
+
result8 = vulnerable_sbox_lookup(10)
|
|
239
|
+
print(f"S-box lookup: {result8}")
|
|
240
|
+
|
|
241
|
+
result9 = vulnerable_bit_shift(0xDEADBEEF, 4)
|
|
242
|
+
print(f"Bit shift: {result9}")
|
|
243
|
+
|
|
244
|
+
result10 = vulnerable_encode_secret(b"secret")
|
|
245
|
+
print(f"Encoded: {result10}")
|
|
246
|
+
|
|
247
|
+
result11 = vulnerable_json_encode({"key": "value"})
|
|
248
|
+
print(f"JSON: {result11}")
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
if __name__ == "__main__":
|
|
252
|
+
run_tests()
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
# Vulnerable Ruby code sample for constant-time analysis testing.
|
|
2
|
+
#
|
|
3
|
+
# This file demonstrates common timing side-channel vulnerabilities in Ruby:
|
|
4
|
+
# - Variable-time division operations
|
|
5
|
+
# - Timing-unsafe string comparisons
|
|
6
|
+
# - Variable-latency math operations
|
|
7
|
+
# - Predictable randomness
|
|
8
|
+
# - Table lookups indexed by secrets
|
|
9
|
+
# - Variable-length encoding functions
|
|
10
|
+
# - Bit shift operations
|
|
11
|
+
#
|
|
12
|
+
# DO NOT USE THIS CODE IN PRODUCTION - it is intentionally vulnerable.
|
|
13
|
+
|
|
14
|
+
require 'json'
|
|
15
|
+
require 'base64'
|
|
16
|
+
|
|
17
|
+
# Vulnerable modular reduction using division.
|
|
18
|
+
# Division has data-dependent timing on most platforms.
|
|
19
|
+
def vulnerable_mod_reduce(value, modulus)
|
|
20
|
+
# VULNERABLE: Division has variable-time execution
|
|
21
|
+
quotient = value / modulus
|
|
22
|
+
# VULNERABLE: Modulo has variable-time execution
|
|
23
|
+
remainder = value % modulus
|
|
24
|
+
|
|
25
|
+
# Use quotient to prevent dead code elimination
|
|
26
|
+
raise "Unexpected negative quotient" if quotient < 0
|
|
27
|
+
|
|
28
|
+
remainder
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Vulnerable token comparison using early-exit equality.
|
|
32
|
+
# This leaks timing information about how many characters match.
|
|
33
|
+
def vulnerable_token_compare(provided, expected)
|
|
34
|
+
# VULNERABLE: == on strings may early-exit
|
|
35
|
+
provided == expected
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Vulnerable string search using include?.
|
|
39
|
+
# include?() has early-terminating behavior.
|
|
40
|
+
def vulnerable_string_search(haystack, needle)
|
|
41
|
+
# VULNERABLE: include? has early-terminating behavior
|
|
42
|
+
haystack.include?(needle)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Vulnerable string prefix check using start_with?.
|
|
46
|
+
# start_with?() has early-terminating behavior.
|
|
47
|
+
def vulnerable_string_startswith(text, prefix)
|
|
48
|
+
# VULNERABLE: start_with? has early-terminating behavior
|
|
49
|
+
text.start_with?(prefix)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Vulnerable square root calculation.
|
|
53
|
+
# Math.sqrt() has variable latency based on operand values.
|
|
54
|
+
def vulnerable_sqrt(value)
|
|
55
|
+
# VULNERABLE: Math.sqrt has variable latency
|
|
56
|
+
Math.sqrt(value)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Vulnerable random number generation.
|
|
60
|
+
# rand() is predictable and not cryptographically secure.
|
|
61
|
+
def vulnerable_random_token(length)
|
|
62
|
+
chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
|
|
63
|
+
token = ""
|
|
64
|
+
|
|
65
|
+
length.times do
|
|
66
|
+
# VULNERABLE: rand is predictable
|
|
67
|
+
token += chars[rand(chars.length)]
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
token
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# Vulnerable random integer generation.
|
|
74
|
+
# rand() is predictable.
|
|
75
|
+
def vulnerable_random_int(min_val, max_val)
|
|
76
|
+
# VULNERABLE: rand is predictable
|
|
77
|
+
rand(min_val..max_val)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# Vulnerable ML-DSA-like decompose function with division.
|
|
81
|
+
# Demonstrates the KyberSlash-style vulnerability.
|
|
82
|
+
def vulnerable_decompose(r, gamma2)
|
|
83
|
+
# VULNERABLE: Division has variable-time execution
|
|
84
|
+
r1 = (r + 127) / (2 * gamma2)
|
|
85
|
+
|
|
86
|
+
# VULNERABLE: Modulo has variable-time execution
|
|
87
|
+
r0 = r % (2 * gamma2)
|
|
88
|
+
|
|
89
|
+
# Centering
|
|
90
|
+
if r0 > gamma2
|
|
91
|
+
r0 -= 2 * gamma2
|
|
92
|
+
r1 += 1
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
[r1, r0]
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# Vulnerable regex matching.
|
|
99
|
+
# =~ has variable-time execution.
|
|
100
|
+
def vulnerable_regex_match(text, pattern)
|
|
101
|
+
# VULNERABLE: =~ has variable-time execution
|
|
102
|
+
text =~ pattern
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# Vulnerable table lookup using secret as index.
|
|
106
|
+
# This leaks timing through cache behavior.
|
|
107
|
+
def vulnerable_table_lookup(secret_index, table)
|
|
108
|
+
# VULNERABLE: Array access indexed by secret leaks cache timing
|
|
109
|
+
table[secret_index]
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
# Vulnerable S-box lookup (common in AES implementations).
|
|
113
|
+
# Cache timing varies based on which cache line is accessed.
|
|
114
|
+
def vulnerable_sbox_lookup(secret_byte)
|
|
115
|
+
# Standard AES S-box (first 16 values as example)
|
|
116
|
+
sbox = [
|
|
117
|
+
0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5,
|
|
118
|
+
0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
|
|
119
|
+
]
|
|
120
|
+
# VULNERABLE: Table lookup indexed by secret byte
|
|
121
|
+
sbox[secret_byte % sbox.length]
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
# Vulnerable bit shift where shift amount depends on secret.
|
|
125
|
+
def vulnerable_bit_shift(secret, shift_amount)
|
|
126
|
+
# VULNERABLE: Left shift amount derived from secret
|
|
127
|
+
result = 1 << shift_amount
|
|
128
|
+
# VULNERABLE: Right shift
|
|
129
|
+
result2 = secret >> (shift_amount % 8)
|
|
130
|
+
result + result2
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# Vulnerable encoding of secret data.
|
|
134
|
+
# Variable-length output leaks information about input.
|
|
135
|
+
def vulnerable_encode_secret(secret)
|
|
136
|
+
# VULNERABLE: Base64 output length depends on input
|
|
137
|
+
Base64.encode64(secret)
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
# Vulnerable JSON encoding of secret data.
|
|
141
|
+
# Output length and encoding time varies with input.
|
|
142
|
+
def vulnerable_json_encode(secret_data)
|
|
143
|
+
# VULNERABLE: JSON encoding produces variable-length output
|
|
144
|
+
secret_data.to_json
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
# Vulnerable pack operation.
|
|
148
|
+
def vulnerable_pack_secret(values)
|
|
149
|
+
# VULNERABLE: pack may leak data length via timing
|
|
150
|
+
values.pack("C*")
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
# Test harness to prevent dead code elimination
|
|
154
|
+
def run_tests
|
|
155
|
+
puts "Running vulnerable operations for testing..."
|
|
156
|
+
|
|
157
|
+
result1 = vulnerable_mod_reduce(12345, 97)
|
|
158
|
+
puts "Mod reduce: #{result1}"
|
|
159
|
+
|
|
160
|
+
result2 = vulnerable_token_compare("secret123", "secret123")
|
|
161
|
+
puts "Token compare: #{result2}"
|
|
162
|
+
|
|
163
|
+
result3 = vulnerable_sqrt(144)
|
|
164
|
+
puts "Sqrt: #{result3}"
|
|
165
|
+
|
|
166
|
+
result5 = vulnerable_random_token(16)
|
|
167
|
+
puts "Token: #{result5}"
|
|
168
|
+
|
|
169
|
+
result6 = vulnerable_decompose(1000, 261888)
|
|
170
|
+
puts "Decompose: r1=#{result6[0]}, r0=#{result6[1]}"
|
|
171
|
+
|
|
172
|
+
result7 = vulnerable_table_lookup(5, [1, 2, 3, 4, 5, 6, 7, 8])
|
|
173
|
+
puts "Table lookup: #{result7}"
|
|
174
|
+
|
|
175
|
+
result8 = vulnerable_sbox_lookup(10)
|
|
176
|
+
puts "S-box lookup: #{result8}"
|
|
177
|
+
|
|
178
|
+
result9 = vulnerable_bit_shift(0xDEADBEEF, 4)
|
|
179
|
+
puts "Bit shift: #{result9}"
|
|
180
|
+
|
|
181
|
+
result10 = vulnerable_encode_secret("secret")
|
|
182
|
+
puts "Encoded: #{result10}"
|
|
183
|
+
|
|
184
|
+
result11 = vulnerable_json_encode({ "key" => "value" })
|
|
185
|
+
puts "JSON: #{result11}"
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
run_tests if __FILE__ == $PROGRAM_NAME
|
package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.swift
ADDED
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vulnerable Swift code sample for constant-time analysis testing.
|
|
3
|
+
*
|
|
4
|
+
* This file demonstrates common timing side-channel vulnerabilities in Swift:
|
|
5
|
+
* - Variable-time division operations
|
|
6
|
+
* - Timing-unsafe comparisons
|
|
7
|
+
* - Variable-latency math operations
|
|
8
|
+
* - Branching on secret values
|
|
9
|
+
*
|
|
10
|
+
* DO NOT USE THIS CODE IN PRODUCTION - it is intentionally vulnerable.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import Foundation
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Vulnerable modular reduction using division.
|
|
17
|
+
* Division has data-dependent timing on most platforms.
|
|
18
|
+
*/
|
|
19
|
+
func vulnerableModReduce(value: Int32, modulus: Int32) -> Int32 {
|
|
20
|
+
// VULNERABLE: Division has variable-time execution (SDIV on ARM64, IDIV on x86)
|
|
21
|
+
let quotient = value / modulus
|
|
22
|
+
// VULNERABLE: Modulo has variable-time execution
|
|
23
|
+
let remainder = value % modulus
|
|
24
|
+
|
|
25
|
+
// Use quotient to prevent dead code elimination
|
|
26
|
+
precondition(quotient >= 0, "Unexpected negative quotient")
|
|
27
|
+
|
|
28
|
+
return remainder
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Vulnerable unsigned division.
|
|
33
|
+
*/
|
|
34
|
+
func vulnerableUnsignedDivide(value: UInt32, divisor: UInt32) -> UInt32 {
|
|
35
|
+
// VULNERABLE: Unsigned division has variable-time execution (UDIV on ARM64)
|
|
36
|
+
return value / divisor
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Vulnerable 64-bit division.
|
|
41
|
+
*/
|
|
42
|
+
func vulnerableLongDivide(value: Int64, divisor: Int64) -> Int64 {
|
|
43
|
+
// VULNERABLE: 64-bit division has variable-time execution
|
|
44
|
+
return value / divisor
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Vulnerable floating-point division.
|
|
49
|
+
*/
|
|
50
|
+
func vulnerableFloatDivide(a: Double, b: Double) -> Double {
|
|
51
|
+
// VULNERABLE: Float division has variable latency (FDIV on ARM64)
|
|
52
|
+
return a / b
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Vulnerable token comparison using == operator.
|
|
57
|
+
* This may early-exit on mismatch.
|
|
58
|
+
*/
|
|
59
|
+
func vulnerableTokenCompare(provided: [UInt8], expected: [UInt8]) -> Bool {
|
|
60
|
+
// VULNERABLE: Array == comparison may early-exit
|
|
61
|
+
return provided == expected
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Vulnerable string comparison.
|
|
66
|
+
*/
|
|
67
|
+
func vulnerableStringCompare(provided: String, expected: String) -> Bool {
|
|
68
|
+
// VULNERABLE: String == comparison has variable timing
|
|
69
|
+
return provided == expected
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Vulnerable square root calculation.
|
|
74
|
+
* sqrt() has variable latency based on operand values.
|
|
75
|
+
*/
|
|
76
|
+
func vulnerableSqrt(value: Double) -> Double {
|
|
77
|
+
// VULNERABLE: sqrt has variable latency (FSQRT on ARM64)
|
|
78
|
+
return sqrt(value)
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Vulnerable power calculation.
|
|
83
|
+
*/
|
|
84
|
+
func vulnerablePow(base: Double, exponent: Double) -> Double {
|
|
85
|
+
// VULNERABLE: pow has variable latency
|
|
86
|
+
return pow(base, exponent)
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Vulnerable decompose function similar to ML-DSA.
|
|
91
|
+
* Demonstrates the KyberSlash-style vulnerability.
|
|
92
|
+
*/
|
|
93
|
+
func vulnerableDecompose(r: Int32, gamma2: Int32) -> (Int32, Int32) {
|
|
94
|
+
// VULNERABLE: Division has variable-time execution
|
|
95
|
+
var r1 = (r + 127) / (2 * gamma2)
|
|
96
|
+
|
|
97
|
+
// VULNERABLE: Modulo has variable-time execution
|
|
98
|
+
var r0 = r % (2 * gamma2)
|
|
99
|
+
|
|
100
|
+
// VULNERABLE: Branch based on computed value
|
|
101
|
+
if r0 > gamma2 {
|
|
102
|
+
r0 -= 2 * gamma2
|
|
103
|
+
r1 += 1
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return (r1, r0)
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Vulnerable table lookup using secret as index.
|
|
111
|
+
* This leaks timing through cache behavior.
|
|
112
|
+
*/
|
|
113
|
+
func vulnerableTableLookup(secretIndex: Int, table: [Int]) -> Int {
|
|
114
|
+
// VULNERABLE: Array access indexed by secret leaks cache timing
|
|
115
|
+
return table[secretIndex]
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Vulnerable conditional selection.
|
|
120
|
+
* Ternary operator compiles to conditional branch.
|
|
121
|
+
*/
|
|
122
|
+
func vulnerableConditionalSelect(secret: Int32, a: Int32, b: Int32) -> Int32 {
|
|
123
|
+
// VULNERABLE: Ternary compiles to conditional branch
|
|
124
|
+
return secret != 0 ? a : b
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Vulnerable switch on secret value.
|
|
129
|
+
*/
|
|
130
|
+
func vulnerableSwitch(secretValue: Int) -> String {
|
|
131
|
+
// VULNERABLE: Switch compiles to conditional branches or jump table
|
|
132
|
+
switch secretValue {
|
|
133
|
+
case 0:
|
|
134
|
+
return "zero"
|
|
135
|
+
case 1:
|
|
136
|
+
return "one"
|
|
137
|
+
case 2:
|
|
138
|
+
return "two"
|
|
139
|
+
default:
|
|
140
|
+
return "other"
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Vulnerable optional unwrapping.
|
|
146
|
+
*/
|
|
147
|
+
func vulnerableOptionalUnwrap(maybeSecret: Int?) -> Int {
|
|
148
|
+
// VULNERABLE: Optional unwrapping introduces branches
|
|
149
|
+
if let secret = maybeSecret {
|
|
150
|
+
return secret * 2
|
|
151
|
+
}
|
|
152
|
+
return 0
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Test harness to prevent dead code elimination.
|
|
157
|
+
*/
|
|
158
|
+
func runTests() {
|
|
159
|
+
print("Running vulnerable operations for testing...")
|
|
160
|
+
|
|
161
|
+
let result1 = vulnerableModReduce(value: 12345, modulus: 97)
|
|
162
|
+
print("Mod reduce: \(result1)")
|
|
163
|
+
|
|
164
|
+
let result2 = vulnerableUnsignedDivide(value: 12345, divisor: 97)
|
|
165
|
+
print("Unsigned divide: \(result2)")
|
|
166
|
+
|
|
167
|
+
let result3 = vulnerableLongDivide(value: 1234567890, divisor: 12345)
|
|
168
|
+
print("Long divide: \(result3)")
|
|
169
|
+
|
|
170
|
+
let result4 = vulnerableFloatDivide(a: 10.0, b: 3.0)
|
|
171
|
+
print("Float divide: \(result4)")
|
|
172
|
+
|
|
173
|
+
let a: [UInt8] = [1, 2, 3]
|
|
174
|
+
let b: [UInt8] = [1, 2, 3]
|
|
175
|
+
let result5 = vulnerableTokenCompare(provided: a, expected: b)
|
|
176
|
+
print("Token compare: \(result5)")
|
|
177
|
+
|
|
178
|
+
let result6 = vulnerableSqrt(value: 144.0)
|
|
179
|
+
print("Sqrt: \(result6)")
|
|
180
|
+
|
|
181
|
+
let result7 = vulnerablePow(base: 2.0, exponent: 10.0)
|
|
182
|
+
print("Pow: \(result7)")
|
|
183
|
+
|
|
184
|
+
let (r1, r0) = vulnerableDecompose(r: 1000, gamma2: 261888)
|
|
185
|
+
print("Decompose: r1=\(r1), r0=\(r0)")
|
|
186
|
+
|
|
187
|
+
let table = [1, 2, 3, 4, 5, 6, 7, 8]
|
|
188
|
+
let result8 = vulnerableTableLookup(secretIndex: 5, table: table)
|
|
189
|
+
print("Table lookup: \(result8)")
|
|
190
|
+
|
|
191
|
+
let result9 = vulnerableConditionalSelect(secret: 1, a: 100, b: 200)
|
|
192
|
+
print("Conditional select: \(result9)")
|
|
193
|
+
|
|
194
|
+
let result10 = vulnerableSwitch(secretValue: 1)
|
|
195
|
+
print("Switch result: \(result10)")
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// Run the tests
|
|
199
|
+
runTests()
|