[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-trail-of-bits-constant-time-analysis":3,"mdc--26au53-key":38,"related-org-trail-of-bits-constant-time-analysis":2138,"related-repo-trail-of-bits-constant-time-analysis":2289},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":33,"sourceUrl":36,"mdContent":37},"constant-time-analysis","detect timing side-channel vulnerabilities","Detects timing side-channel vulnerabilities in cryptographic code. Use when implementing or reviewing crypto code, encountering division on secrets, secret-dependent branches, or constant-time programming questions in C, C++, Go, Rust, Swift, Java, Kotlin, C#, PHP, JavaScript, TypeScript, Python, or Ruby.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"trail-of-bits","Trail of Bits","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Ftrail-of-bits.png","trailofbits",[13,17,20,23],{"name":14,"slug":15,"type":16},"Security","security","tag",{"name":18,"slug":19,"type":16},"Cryptography","cryptography",{"name":21,"slug":22,"type":16},"Code Analysis","code-analysis",{"name":24,"slug":25,"type":16},"Debugging","debugging",6139,"https:\u002F\u002Fgithub.com\u002Ftrailofbits\u002Fskills","2026-07-18T05:47:55.405963",null,541,[32],"agent-skills",{"repoUrl":27,"stars":26,"forks":30,"topics":34,"description":35},[32],"Trail of Bits Claude Code skills for security research, vulnerability detection, and audit workflows","https:\u002F\u002Fgithub.com\u002Ftrailofbits\u002Fskills\u002Ftree\u002FHEAD\u002Fplugins\u002Fconstant-time-analysis\u002Fskills\u002Fconstant-time-analysis","---\nname: constant-time-analysis\ndescription: Detects timing side-channel vulnerabilities in cryptographic code. Use when implementing or reviewing crypto code, encountering division on secrets, secret-dependent branches, or constant-time programming questions in C, C++, Go, Rust, Swift, Java, Kotlin, C#, PHP, JavaScript, TypeScript, Python, or Ruby.\n---\n\n# Constant-Time Analysis\n\nAnalyze cryptographic code to detect operations that leak secret data through execution timing variations.\n\n## When to Use\n\n```text\nUser writing crypto code? ──yes──> Use this skill\n         │\n         no\n         │\n         v\nUser asking about timing attacks? ──yes──> Use this skill\n         │\n         no\n         │\n         v\nCode handles secret keys\u002Ftokens? ──yes──> Use this skill\n         │\n         no\n         │\n         v\nSkip this skill\n```\n\n**Concrete triggers:**\n\n- User implements signature, encryption, or key derivation\n- Code contains `\u002F` or `%` operators on secret-derived values\n- User mentions \"constant-time\", \"timing attack\", \"side-channel\", \"KyberSlash\"\n- Reviewing functions named `sign`, `verify`, `encrypt`, `decrypt`, `derive_key`\n\n## When NOT to Use\n\n- Non-cryptographic code (business logic, UI, etc.)\n- Public data processing where timing leaks don't matter\n- Code that doesn't handle secrets, keys, or authentication tokens\n- High-level API usage where timing is handled by the library\n\n## Language Selection\n\nBased on the file extension or language context, refer to the appropriate guide:\n\n| Language   | File Extensions                   | Guide                                                    |\n| ---------- | --------------------------------- | -------------------------------------------------------- |\n| C, C++     | `.c`, `.h`, `.cpp`, `.cc`, `.hpp` | [references\u002Fcompiled.md](references\u002Fcompiled.md)         |\n| Go         | `.go`                             | [references\u002Fcompiled.md](references\u002Fcompiled.md)         |\n| Rust       | `.rs`                             | [references\u002Fcompiled.md](references\u002Fcompiled.md)         |\n| Swift      | `.swift`                          | [references\u002Fswift.md](references\u002Fswift.md)               |\n| Java       | `.java`                           | [references\u002Fvm-compiled.md](references\u002Fvm-compiled.md)   |\n| Kotlin     | `.kt`, `.kts`                     | [references\u002Fkotlin.md](references\u002Fkotlin.md)             |\n| C#         | `.cs`                             | [references\u002Fvm-compiled.md](references\u002Fvm-compiled.md)   |\n| PHP        | `.php`                            | [references\u002Fphp.md](references\u002Fphp.md)                   |\n| JavaScript | `.js`, `.mjs`, `.cjs`             | [references\u002Fjavascript.md](references\u002Fjavascript.md)     |\n| TypeScript | `.ts`, `.tsx`                     | [references\u002Fjavascript.md](references\u002Fjavascript.md)     |\n| Python     | `.py`                             | [references\u002Fpython.md](references\u002Fpython.md)             |\n| Ruby       | `.rb`                             | [references\u002Fruby.md](references\u002Fruby.md)                 |\n\n## Quick Start\n\n```bash\n# Analyze any supported file type\nuv run {baseDir}\u002Fct_analyzer\u002Fanalyzer.py \u003Csource_file>\n\n# Include conditional branch warnings\nuv run {baseDir}\u002Fct_analyzer\u002Fanalyzer.py --warnings \u003Csource_file>\n\n# Filter to specific functions\nuv run {baseDir}\u002Fct_analyzer\u002Fanalyzer.py --func 'sign|verify' \u003Csource_file>\n\n# JSON output for CI\nuv run {baseDir}\u002Fct_analyzer\u002Fanalyzer.py --json \u003Csource_file>\n```\n\n### Native Compiled Languages Only (C, C++, Go, Rust)\n\n```bash\n# Cross-architecture testing (RECOMMENDED)\nuv run {baseDir}\u002Fct_analyzer\u002Fanalyzer.py --arch x86_64 crypto.c\nuv run {baseDir}\u002Fct_analyzer\u002Fanalyzer.py --arch arm64 crypto.c\n\n# Multiple optimization levels\nuv run {baseDir}\u002Fct_analyzer\u002Fanalyzer.py --opt-level O0 crypto.c\nuv run {baseDir}\u002Fct_analyzer\u002Fanalyzer.py --opt-level O3 crypto.c\n```\n\n### VM-Compiled Languages (Java, Kotlin, C#)\n\n```bash\n# Analyze Java bytecode\nuv run {baseDir}\u002Fct_analyzer\u002Fanalyzer.py CryptoUtils.java\n\n# Analyze Kotlin bytecode (Android\u002FJVM)\nuv run {baseDir}\u002Fct_analyzer\u002Fanalyzer.py CryptoUtils.kt\n\n# Analyze C# IL\nuv run {baseDir}\u002Fct_analyzer\u002Fanalyzer.py CryptoUtils.cs\n```\n\nNote: Java, Kotlin, and C# compile to bytecode (JVM\u002FCIL) that runs on a virtual machine with JIT compilation. The analyzer examines the bytecode directly, not the JIT-compiled native code. The `--arch` and `--opt-level` flags do not apply to these languages.\n\n### Swift (iOS\u002FmacOS)\n\n```bash\n# Analyze Swift for native architecture\nuv run {baseDir}\u002Fct_analyzer\u002Fanalyzer.py crypto.swift\n\n# Analyze for specific architecture (iOS devices)\nuv run {baseDir}\u002Fct_analyzer\u002Fanalyzer.py --arch arm64 crypto.swift\n\n# Analyze with different optimization levels\nuv run {baseDir}\u002Fct_analyzer\u002Fanalyzer.py --opt-level O0 crypto.swift\n```\n\nNote: Swift compiles to native code like C\u002FC++\u002FGo\u002FRust, so it uses assembly-level analysis and supports `--arch` and `--opt-level` flags.\n\n### Prerequisites\n\n| Language               | Requirements                                              |\n| ---------------------- | --------------------------------------------------------- |\n| C, C++, Go, Rust       | Compiler in PATH (`gcc`\u002F`clang`, `go`, `rustc`)           |\n| Swift                  | Xcode or Swift toolchain (`swiftc` in PATH)               |\n| Java                   | JDK with `javac` and `javap` in PATH                      |\n| Kotlin                 | Kotlin compiler (`kotlinc`) + JDK (`javap`) in PATH       |\n| C#                     | .NET SDK + `ilspycmd` (`dotnet tool install -g ilspycmd`) |\n| PHP                    | PHP with VLD extension or OPcache                         |\n| JavaScript\u002FTypeScript  | Node.js in PATH                                           |\n| Python                 | Python 3.x in PATH                                        |\n| Ruby                   | Ruby with `--dump=insns` support                          |\n\n**macOS users**: Homebrew installs Java and .NET as \"keg-only\". You must add them to your PATH:\n\n```bash\n# For Java (add to ~\u002F.zshrc)\nexport PATH=\"\u002Fopt\u002Fhomebrew\u002Fopt\u002Fopenjdk@21\u002Fbin:$PATH\"\n\n# For .NET tools (add to ~\u002F.zshrc)\nexport PATH=\"$HOME\u002F.dotnet\u002Ftools:$PATH\"\n```\n\nSee [references\u002Fvm-compiled.md](references\u002Fvm-compiled.md) for detailed setup instructions and troubleshooting.\n\n## Quick Reference\n\n| Problem                | Detection                       | Fix                                          |\n| ---------------------- | ------------------------------- | -------------------------------------------- |\n| Division on secrets    | DIV, IDIV, SDIV, UDIV           | Barrett reduction or multiply-by-inverse     |\n| Branch on secrets      | JE, JNE, BEQ, BNE               | Constant-time selection (cmov, bit masking)  |\n| Secret comparison      | Early-exit memcmp               | Use `crypto\u002Fsubtle` or constant-time compare |\n| Weak RNG               | rand(), mt_rand, Math.random    | Use crypto-secure RNG                        |\n| Table lookup by secret | Array subscript on secret index | Bit-sliced lookups                           |\n\n## Interpreting Results\n\n**PASSED** - No variable-time operations detected.\n\n**FAILED** - Dangerous instructions found. Example:\n\n```text\n[ERROR] SDIV\n  Function: decompose_vulnerable\n  Reason: SDIV has early termination optimization; execution time depends on operand values\n```\n\n## Verifying Results (Avoiding False Positives)\n\n**CRITICAL**: Not every flagged operation is a vulnerability. The tool has no data flow analysis - it flags ALL potentially dangerous operations regardless of whether they involve secrets.\n\nFor each flagged violation, ask: **Does this operation's input depend on secret data?**\n\n1. **Identify the secret inputs** to the function (private keys, plaintext, signatures, tokens)\n\n2. **Trace data flow** from the flagged instruction back to inputs\n\n3. **Common false positive patterns**:\n\n   ```c\n   \u002F\u002F FALSE POSITIVE: Division uses public constant, not secret\n   int num_blocks = data_len \u002F 16;  \u002F\u002F data_len is length, not content\n\n   \u002F\u002F TRUE POSITIVE: Division involves secret-derived value\n   int32_t q = secret_coef \u002F GAMMA2;  \u002F\u002F secret_coef from private key\n   ```\n\n4. **Document your analysis** for each flagged item\n\n### Quick Triage Questions\n\n| Question                                          | If Yes                | If No                 |\n| ------------------------------------------------- | --------------------- | --------------------- |\n| Is the operand a compile-time constant?           | Likely false positive | Continue              |\n| Is the operand a public parameter (length, count)?| Likely false positive | Continue              |\n| Is the operand derived from key\u002Fplaintext\u002Fsecret? | **TRUE POSITIVE**     | Likely false positive |\n| Can an attacker influence the operand value?      | **TRUE POSITIVE**     | Likely false positive |\n\n## Limitations\n\n1. **Static Analysis Only**: Analyzes assembly\u002Fbytecode, not runtime behavior. Cannot detect cache timing or microarchitectural side-channels.\n\n2. **No Data Flow Analysis**: Flags all dangerous operations regardless of whether they process secrets. Manual review required.\n\n3. **Compiler\u002FRuntime Variations**: Different compilers, optimization levels, and runtime versions may produce different output.\n\n## Real-World Impact\n\n- **KyberSlash (2023)**: Division instructions in post-quantum ML-KEM implementations allowed key recovery\n- **Lucky Thirteen (2013)**: Timing differences in CBC padding validation enabled plaintext recovery\n- **RSA Timing Attacks**: Early implementations leaked private key bits through division timing\n\n## References\n\n- [Cryptocoding Guidelines](https:\u002F\u002Fgithub.com\u002Fveorq\u002Fcryptocoding) - Defensive coding for crypto\n- [KyberSlash](https:\u002F\u002Fkyberslash.cr.yp.to\u002F) - Division timing in post-quantum crypto\n- [BearSSL Constant-Time](https:\u002F\u002Fwww.bearssl.org\u002Fconstanttime.html) - Practical constant-time techniques\n",{"data":39,"body":40},{"name":4,"description":6},{"type":41,"children":42},"root",[43,51,57,64,77,86,162,168,191,197,202,588,594,837,844,989,995,1100,1121,1127,1246,1264,1270,1491,1501,1607,1618,1624,1749,1755,1765,1775,1784,1790,1800,1810,1902,1908,2008,2014,2047,2053,2086,2092,2132],{"type":44,"tag":45,"props":46,"children":47},"element","h1",{"id":4},[48],{"type":49,"value":50},"text","Constant-Time Analysis",{"type":44,"tag":52,"props":53,"children":54},"p",{},[55],{"type":49,"value":56},"Analyze cryptographic code to detect operations that leak secret data through execution timing variations.",{"type":44,"tag":58,"props":59,"children":61},"h2",{"id":60},"when-to-use",[62],{"type":49,"value":63},"When to Use",{"type":44,"tag":65,"props":66,"children":71},"pre",{"className":67,"code":69,"language":49,"meta":70},[68],"language-text","User writing crypto code? ──yes──> Use this skill\n         │\n         no\n         │\n         v\nUser asking about timing attacks? ──yes──> Use this skill\n         │\n         no\n         │\n         v\nCode handles secret keys\u002Ftokens? ──yes──> Use this skill\n         │\n         no\n         │\n         v\nSkip this skill\n","",[72],{"type":44,"tag":73,"props":74,"children":75},"code",{"__ignoreMap":70},[76],{"type":49,"value":69},{"type":44,"tag":52,"props":78,"children":79},{},[80],{"type":44,"tag":81,"props":82,"children":83},"strong",{},[84],{"type":49,"value":85},"Concrete triggers:",{"type":44,"tag":87,"props":88,"children":89},"ul",{},[90,96,117,122],{"type":44,"tag":91,"props":92,"children":93},"li",{},[94],{"type":49,"value":95},"User implements signature, encryption, or key derivation",{"type":44,"tag":91,"props":97,"children":98},{},[99,101,107,109,115],{"type":49,"value":100},"Code contains ",{"type":44,"tag":73,"props":102,"children":104},{"className":103},[],[105],{"type":49,"value":106},"\u002F",{"type":49,"value":108}," or ",{"type":44,"tag":73,"props":110,"children":112},{"className":111},[],[113],{"type":49,"value":114},"%",{"type":49,"value":116}," operators on secret-derived values",{"type":44,"tag":91,"props":118,"children":119},{},[120],{"type":49,"value":121},"User mentions \"constant-time\", \"timing attack\", \"side-channel\", \"KyberSlash\"",{"type":44,"tag":91,"props":123,"children":124},{},[125,127,133,135,141,142,148,149,155,156],{"type":49,"value":126},"Reviewing functions named ",{"type":44,"tag":73,"props":128,"children":130},{"className":129},[],[131],{"type":49,"value":132},"sign",{"type":49,"value":134},", ",{"type":44,"tag":73,"props":136,"children":138},{"className":137},[],[139],{"type":49,"value":140},"verify",{"type":49,"value":134},{"type":44,"tag":73,"props":143,"children":145},{"className":144},[],[146],{"type":49,"value":147},"encrypt",{"type":49,"value":134},{"type":44,"tag":73,"props":150,"children":152},{"className":151},[],[153],{"type":49,"value":154},"decrypt",{"type":49,"value":134},{"type":44,"tag":73,"props":157,"children":159},{"className":158},[],[160],{"type":49,"value":161},"derive_key",{"type":44,"tag":58,"props":163,"children":165},{"id":164},"when-not-to-use",[166],{"type":49,"value":167},"When NOT to Use",{"type":44,"tag":87,"props":169,"children":170},{},[171,176,181,186],{"type":44,"tag":91,"props":172,"children":173},{},[174],{"type":49,"value":175},"Non-cryptographic code (business logic, UI, etc.)",{"type":44,"tag":91,"props":177,"children":178},{},[179],{"type":49,"value":180},"Public data processing where timing leaks don't matter",{"type":44,"tag":91,"props":182,"children":183},{},[184],{"type":49,"value":185},"Code that doesn't handle secrets, keys, or authentication tokens",{"type":44,"tag":91,"props":187,"children":188},{},[189],{"type":49,"value":190},"High-level API usage where timing is handled by the library",{"type":44,"tag":58,"props":192,"children":194},{"id":193},"language-selection",[195],{"type":49,"value":196},"Language Selection",{"type":44,"tag":52,"props":198,"children":199},{},[200],{"type":49,"value":201},"Based on the file extension or language context, refer to the appropriate guide:",{"type":44,"tag":203,"props":204,"children":205},"table",{},[206,230],{"type":44,"tag":207,"props":208,"children":209},"thead",{},[210],{"type":44,"tag":211,"props":212,"children":213},"tr",{},[214,220,225],{"type":44,"tag":215,"props":216,"children":217},"th",{},[218],{"type":49,"value":219},"Language",{"type":44,"tag":215,"props":221,"children":222},{},[223],{"type":49,"value":224},"File Extensions",{"type":44,"tag":215,"props":226,"children":227},{},[228],{"type":49,"value":229},"Guide",{"type":44,"tag":231,"props":232,"children":233},"tbody",{},[234,289,313,337,362,387,419,443,468,507,538,563],{"type":44,"tag":211,"props":235,"children":236},{},[237,243,280],{"type":44,"tag":238,"props":239,"children":240},"td",{},[241],{"type":49,"value":242},"C, C++",{"type":44,"tag":238,"props":244,"children":245},{},[246,252,253,259,260,266,267,273,274],{"type":44,"tag":73,"props":247,"children":249},{"className":248},[],[250],{"type":49,"value":251},".c",{"type":49,"value":134},{"type":44,"tag":73,"props":254,"children":256},{"className":255},[],[257],{"type":49,"value":258},".h",{"type":49,"value":134},{"type":44,"tag":73,"props":261,"children":263},{"className":262},[],[264],{"type":49,"value":265},".cpp",{"type":49,"value":134},{"type":44,"tag":73,"props":268,"children":270},{"className":269},[],[271],{"type":49,"value":272},".cc",{"type":49,"value":134},{"type":44,"tag":73,"props":275,"children":277},{"className":276},[],[278],{"type":49,"value":279},".hpp",{"type":44,"tag":238,"props":281,"children":282},{},[283],{"type":44,"tag":284,"props":285,"children":287},"a",{"href":286},"references\u002Fcompiled.md",[288],{"type":49,"value":286},{"type":44,"tag":211,"props":290,"children":291},{},[292,297,306],{"type":44,"tag":238,"props":293,"children":294},{},[295],{"type":49,"value":296},"Go",{"type":44,"tag":238,"props":298,"children":299},{},[300],{"type":44,"tag":73,"props":301,"children":303},{"className":302},[],[304],{"type":49,"value":305},".go",{"type":44,"tag":238,"props":307,"children":308},{},[309],{"type":44,"tag":284,"props":310,"children":311},{"href":286},[312],{"type":49,"value":286},{"type":44,"tag":211,"props":314,"children":315},{},[316,321,330],{"type":44,"tag":238,"props":317,"children":318},{},[319],{"type":49,"value":320},"Rust",{"type":44,"tag":238,"props":322,"children":323},{},[324],{"type":44,"tag":73,"props":325,"children":327},{"className":326},[],[328],{"type":49,"value":329},".rs",{"type":44,"tag":238,"props":331,"children":332},{},[333],{"type":44,"tag":284,"props":334,"children":335},{"href":286},[336],{"type":49,"value":286},{"type":44,"tag":211,"props":338,"children":339},{},[340,345,354],{"type":44,"tag":238,"props":341,"children":342},{},[343],{"type":49,"value":344},"Swift",{"type":44,"tag":238,"props":346,"children":347},{},[348],{"type":44,"tag":73,"props":349,"children":351},{"className":350},[],[352],{"type":49,"value":353},".swift",{"type":44,"tag":238,"props":355,"children":356},{},[357],{"type":44,"tag":284,"props":358,"children":360},{"href":359},"references\u002Fswift.md",[361],{"type":49,"value":359},{"type":44,"tag":211,"props":363,"children":364},{},[365,370,379],{"type":44,"tag":238,"props":366,"children":367},{},[368],{"type":49,"value":369},"Java",{"type":44,"tag":238,"props":371,"children":372},{},[373],{"type":44,"tag":73,"props":374,"children":376},{"className":375},[],[377],{"type":49,"value":378},".java",{"type":44,"tag":238,"props":380,"children":381},{},[382],{"type":44,"tag":284,"props":383,"children":385},{"href":384},"references\u002Fvm-compiled.md",[386],{"type":49,"value":384},{"type":44,"tag":211,"props":388,"children":389},{},[390,395,411],{"type":44,"tag":238,"props":391,"children":392},{},[393],{"type":49,"value":394},"Kotlin",{"type":44,"tag":238,"props":396,"children":397},{},[398,404,405],{"type":44,"tag":73,"props":399,"children":401},{"className":400},[],[402],{"type":49,"value":403},".kt",{"type":49,"value":134},{"type":44,"tag":73,"props":406,"children":408},{"className":407},[],[409],{"type":49,"value":410},".kts",{"type":44,"tag":238,"props":412,"children":413},{},[414],{"type":44,"tag":284,"props":415,"children":417},{"href":416},"references\u002Fkotlin.md",[418],{"type":49,"value":416},{"type":44,"tag":211,"props":420,"children":421},{},[422,427,436],{"type":44,"tag":238,"props":423,"children":424},{},[425],{"type":49,"value":426},"C#",{"type":44,"tag":238,"props":428,"children":429},{},[430],{"type":44,"tag":73,"props":431,"children":433},{"className":432},[],[434],{"type":49,"value":435},".cs",{"type":44,"tag":238,"props":437,"children":438},{},[439],{"type":44,"tag":284,"props":440,"children":441},{"href":384},[442],{"type":49,"value":384},{"type":44,"tag":211,"props":444,"children":445},{},[446,451,460],{"type":44,"tag":238,"props":447,"children":448},{},[449],{"type":49,"value":450},"PHP",{"type":44,"tag":238,"props":452,"children":453},{},[454],{"type":44,"tag":73,"props":455,"children":457},{"className":456},[],[458],{"type":49,"value":459},".php",{"type":44,"tag":238,"props":461,"children":462},{},[463],{"type":44,"tag":284,"props":464,"children":466},{"href":465},"references\u002Fphp.md",[467],{"type":49,"value":465},{"type":44,"tag":211,"props":469,"children":470},{},[471,476,499],{"type":44,"tag":238,"props":472,"children":473},{},[474],{"type":49,"value":475},"JavaScript",{"type":44,"tag":238,"props":477,"children":478},{},[479,485,486,492,493],{"type":44,"tag":73,"props":480,"children":482},{"className":481},[],[483],{"type":49,"value":484},".js",{"type":49,"value":134},{"type":44,"tag":73,"props":487,"children":489},{"className":488},[],[490],{"type":49,"value":491},".mjs",{"type":49,"value":134},{"type":44,"tag":73,"props":494,"children":496},{"className":495},[],[497],{"type":49,"value":498},".cjs",{"type":44,"tag":238,"props":500,"children":501},{},[502],{"type":44,"tag":284,"props":503,"children":505},{"href":504},"references\u002Fjavascript.md",[506],{"type":49,"value":504},{"type":44,"tag":211,"props":508,"children":509},{},[510,515,531],{"type":44,"tag":238,"props":511,"children":512},{},[513],{"type":49,"value":514},"TypeScript",{"type":44,"tag":238,"props":516,"children":517},{},[518,524,525],{"type":44,"tag":73,"props":519,"children":521},{"className":520},[],[522],{"type":49,"value":523},".ts",{"type":49,"value":134},{"type":44,"tag":73,"props":526,"children":528},{"className":527},[],[529],{"type":49,"value":530},".tsx",{"type":44,"tag":238,"props":532,"children":533},{},[534],{"type":44,"tag":284,"props":535,"children":536},{"href":504},[537],{"type":49,"value":504},{"type":44,"tag":211,"props":539,"children":540},{},[541,546,555],{"type":44,"tag":238,"props":542,"children":543},{},[544],{"type":49,"value":545},"Python",{"type":44,"tag":238,"props":547,"children":548},{},[549],{"type":44,"tag":73,"props":550,"children":552},{"className":551},[],[553],{"type":49,"value":554},".py",{"type":44,"tag":238,"props":556,"children":557},{},[558],{"type":44,"tag":284,"props":559,"children":561},{"href":560},"references\u002Fpython.md",[562],{"type":49,"value":560},{"type":44,"tag":211,"props":564,"children":565},{},[566,571,580],{"type":44,"tag":238,"props":567,"children":568},{},[569],{"type":49,"value":570},"Ruby",{"type":44,"tag":238,"props":572,"children":573},{},[574],{"type":44,"tag":73,"props":575,"children":577},{"className":576},[],[578],{"type":49,"value":579},".rb",{"type":44,"tag":238,"props":581,"children":582},{},[583],{"type":44,"tag":284,"props":584,"children":586},{"href":585},"references\u002Fruby.md",[587],{"type":49,"value":585},{"type":44,"tag":58,"props":589,"children":591},{"id":590},"quick-start",[592],{"type":49,"value":593},"Quick Start",{"type":44,"tag":65,"props":595,"children":599},{"className":596,"code":597,"language":598,"meta":70,"style":70},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Analyze any supported file type\nuv run {baseDir}\u002Fct_analyzer\u002Fanalyzer.py \u003Csource_file>\n\n# Include conditional branch warnings\nuv run {baseDir}\u002Fct_analyzer\u002Fanalyzer.py --warnings \u003Csource_file>\n\n# Filter to specific functions\nuv run {baseDir}\u002Fct_analyzer\u002Fanalyzer.py --func 'sign|verify' \u003Csource_file>\n\n# JSON output for CI\nuv run {baseDir}\u002Fct_analyzer\u002Fanalyzer.py --json \u003Csource_file>\n","bash",[600],{"type":44,"tag":73,"props":601,"children":602},{"__ignoreMap":70},[603,615,658,668,677,714,722,731,783,791,800],{"type":44,"tag":604,"props":605,"children":608},"span",{"class":606,"line":607},"line",1,[609],{"type":44,"tag":604,"props":610,"children":612},{"style":611},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[613],{"type":49,"value":614},"# Analyze any supported file type\n",{"type":44,"tag":604,"props":616,"children":618},{"class":606,"line":617},2,[619,625,631,636,642,647,653],{"type":44,"tag":604,"props":620,"children":622},{"style":621},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[623],{"type":49,"value":624},"uv",{"type":44,"tag":604,"props":626,"children":628},{"style":627},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[629],{"type":49,"value":630}," run",{"type":44,"tag":604,"props":632,"children":633},{"style":627},[634],{"type":49,"value":635}," {baseDir}\u002Fct_analyzer\u002Fanalyzer.py",{"type":44,"tag":604,"props":637,"children":639},{"style":638},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[640],{"type":49,"value":641}," \u003C",{"type":44,"tag":604,"props":643,"children":644},{"style":627},[645],{"type":49,"value":646},"source_fil",{"type":44,"tag":604,"props":648,"children":650},{"style":649},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[651],{"type":49,"value":652},"e",{"type":44,"tag":604,"props":654,"children":655},{"style":638},[656],{"type":49,"value":657},">\n",{"type":44,"tag":604,"props":659,"children":661},{"class":606,"line":660},3,[662],{"type":44,"tag":604,"props":663,"children":665},{"emptyLinePlaceholder":664},true,[666],{"type":49,"value":667},"\n",{"type":44,"tag":604,"props":669,"children":671},{"class":606,"line":670},4,[672],{"type":44,"tag":604,"props":673,"children":674},{"style":611},[675],{"type":49,"value":676},"# Include conditional branch warnings\n",{"type":44,"tag":604,"props":678,"children":680},{"class":606,"line":679},5,[681,685,689,693,698,702,706,710],{"type":44,"tag":604,"props":682,"children":683},{"style":621},[684],{"type":49,"value":624},{"type":44,"tag":604,"props":686,"children":687},{"style":627},[688],{"type":49,"value":630},{"type":44,"tag":604,"props":690,"children":691},{"style":627},[692],{"type":49,"value":635},{"type":44,"tag":604,"props":694,"children":695},{"style":627},[696],{"type":49,"value":697}," --warnings",{"type":44,"tag":604,"props":699,"children":700},{"style":638},[701],{"type":49,"value":641},{"type":44,"tag":604,"props":703,"children":704},{"style":627},[705],{"type":49,"value":646},{"type":44,"tag":604,"props":707,"children":708},{"style":649},[709],{"type":49,"value":652},{"type":44,"tag":604,"props":711,"children":712},{"style":638},[713],{"type":49,"value":657},{"type":44,"tag":604,"props":715,"children":717},{"class":606,"line":716},6,[718],{"type":44,"tag":604,"props":719,"children":720},{"emptyLinePlaceholder":664},[721],{"type":49,"value":667},{"type":44,"tag":604,"props":723,"children":725},{"class":606,"line":724},7,[726],{"type":44,"tag":604,"props":727,"children":728},{"style":611},[729],{"type":49,"value":730},"# Filter to specific functions\n",{"type":44,"tag":604,"props":732,"children":734},{"class":606,"line":733},8,[735,739,743,747,752,757,762,767,771,775,779],{"type":44,"tag":604,"props":736,"children":737},{"style":621},[738],{"type":49,"value":624},{"type":44,"tag":604,"props":740,"children":741},{"style":627},[742],{"type":49,"value":630},{"type":44,"tag":604,"props":744,"children":745},{"style":627},[746],{"type":49,"value":635},{"type":44,"tag":604,"props":748,"children":749},{"style":627},[750],{"type":49,"value":751}," --func",{"type":44,"tag":604,"props":753,"children":754},{"style":638},[755],{"type":49,"value":756}," '",{"type":44,"tag":604,"props":758,"children":759},{"style":627},[760],{"type":49,"value":761},"sign|verify",{"type":44,"tag":604,"props":763,"children":764},{"style":638},[765],{"type":49,"value":766},"'",{"type":44,"tag":604,"props":768,"children":769},{"style":638},[770],{"type":49,"value":641},{"type":44,"tag":604,"props":772,"children":773},{"style":627},[774],{"type":49,"value":646},{"type":44,"tag":604,"props":776,"children":777},{"style":649},[778],{"type":49,"value":652},{"type":44,"tag":604,"props":780,"children":781},{"style":638},[782],{"type":49,"value":657},{"type":44,"tag":604,"props":784,"children":786},{"class":606,"line":785},9,[787],{"type":44,"tag":604,"props":788,"children":789},{"emptyLinePlaceholder":664},[790],{"type":49,"value":667},{"type":44,"tag":604,"props":792,"children":794},{"class":606,"line":793},10,[795],{"type":44,"tag":604,"props":796,"children":797},{"style":611},[798],{"type":49,"value":799},"# JSON output for CI\n",{"type":44,"tag":604,"props":801,"children":803},{"class":606,"line":802},11,[804,808,812,816,821,825,829,833],{"type":44,"tag":604,"props":805,"children":806},{"style":621},[807],{"type":49,"value":624},{"type":44,"tag":604,"props":809,"children":810},{"style":627},[811],{"type":49,"value":630},{"type":44,"tag":604,"props":813,"children":814},{"style":627},[815],{"type":49,"value":635},{"type":44,"tag":604,"props":817,"children":818},{"style":627},[819],{"type":49,"value":820}," --json",{"type":44,"tag":604,"props":822,"children":823},{"style":638},[824],{"type":49,"value":641},{"type":44,"tag":604,"props":826,"children":827},{"style":627},[828],{"type":49,"value":646},{"type":44,"tag":604,"props":830,"children":831},{"style":649},[832],{"type":49,"value":652},{"type":44,"tag":604,"props":834,"children":835},{"style":638},[836],{"type":49,"value":657},{"type":44,"tag":838,"props":839,"children":841},"h3",{"id":840},"native-compiled-languages-only-c-c-go-rust",[842],{"type":49,"value":843},"Native Compiled Languages Only (C, C++, Go, Rust)",{"type":44,"tag":65,"props":845,"children":847},{"className":596,"code":846,"language":598,"meta":70,"style":70},"# Cross-architecture testing (RECOMMENDED)\nuv run {baseDir}\u002Fct_analyzer\u002Fanalyzer.py --arch x86_64 crypto.c\nuv run {baseDir}\u002Fct_analyzer\u002Fanalyzer.py --arch arm64 crypto.c\n\n# Multiple optimization levels\nuv run {baseDir}\u002Fct_analyzer\u002Fanalyzer.py --opt-level O0 crypto.c\nuv run {baseDir}\u002Fct_analyzer\u002Fanalyzer.py --opt-level O3 crypto.c\n",[848],{"type":44,"tag":73,"props":849,"children":850},{"__ignoreMap":70},[851,859,889,917,924,932,961],{"type":44,"tag":604,"props":852,"children":853},{"class":606,"line":607},[854],{"type":44,"tag":604,"props":855,"children":856},{"style":611},[857],{"type":49,"value":858},"# Cross-architecture testing (RECOMMENDED)\n",{"type":44,"tag":604,"props":860,"children":861},{"class":606,"line":617},[862,866,870,874,879,884],{"type":44,"tag":604,"props":863,"children":864},{"style":621},[865],{"type":49,"value":624},{"type":44,"tag":604,"props":867,"children":868},{"style":627},[869],{"type":49,"value":630},{"type":44,"tag":604,"props":871,"children":872},{"style":627},[873],{"type":49,"value":635},{"type":44,"tag":604,"props":875,"children":876},{"style":627},[877],{"type":49,"value":878}," --arch",{"type":44,"tag":604,"props":880,"children":881},{"style":627},[882],{"type":49,"value":883}," x86_64",{"type":44,"tag":604,"props":885,"children":886},{"style":627},[887],{"type":49,"value":888}," crypto.c\n",{"type":44,"tag":604,"props":890,"children":891},{"class":606,"line":660},[892,896,900,904,908,913],{"type":44,"tag":604,"props":893,"children":894},{"style":621},[895],{"type":49,"value":624},{"type":44,"tag":604,"props":897,"children":898},{"style":627},[899],{"type":49,"value":630},{"type":44,"tag":604,"props":901,"children":902},{"style":627},[903],{"type":49,"value":635},{"type":44,"tag":604,"props":905,"children":906},{"style":627},[907],{"type":49,"value":878},{"type":44,"tag":604,"props":909,"children":910},{"style":627},[911],{"type":49,"value":912}," arm64",{"type":44,"tag":604,"props":914,"children":915},{"style":627},[916],{"type":49,"value":888},{"type":44,"tag":604,"props":918,"children":919},{"class":606,"line":670},[920],{"type":44,"tag":604,"props":921,"children":922},{"emptyLinePlaceholder":664},[923],{"type":49,"value":667},{"type":44,"tag":604,"props":925,"children":926},{"class":606,"line":679},[927],{"type":44,"tag":604,"props":928,"children":929},{"style":611},[930],{"type":49,"value":931},"# Multiple optimization levels\n",{"type":44,"tag":604,"props":933,"children":934},{"class":606,"line":716},[935,939,943,947,952,957],{"type":44,"tag":604,"props":936,"children":937},{"style":621},[938],{"type":49,"value":624},{"type":44,"tag":604,"props":940,"children":941},{"style":627},[942],{"type":49,"value":630},{"type":44,"tag":604,"props":944,"children":945},{"style":627},[946],{"type":49,"value":635},{"type":44,"tag":604,"props":948,"children":949},{"style":627},[950],{"type":49,"value":951}," --opt-level",{"type":44,"tag":604,"props":953,"children":954},{"style":627},[955],{"type":49,"value":956}," O0",{"type":44,"tag":604,"props":958,"children":959},{"style":627},[960],{"type":49,"value":888},{"type":44,"tag":604,"props":962,"children":963},{"class":606,"line":724},[964,968,972,976,980,985],{"type":44,"tag":604,"props":965,"children":966},{"style":621},[967],{"type":49,"value":624},{"type":44,"tag":604,"props":969,"children":970},{"style":627},[971],{"type":49,"value":630},{"type":44,"tag":604,"props":973,"children":974},{"style":627},[975],{"type":49,"value":635},{"type":44,"tag":604,"props":977,"children":978},{"style":627},[979],{"type":49,"value":951},{"type":44,"tag":604,"props":981,"children":982},{"style":627},[983],{"type":49,"value":984}," O3",{"type":44,"tag":604,"props":986,"children":987},{"style":627},[988],{"type":49,"value":888},{"type":44,"tag":838,"props":990,"children":992},{"id":991},"vm-compiled-languages-java-kotlin-c",[993],{"type":49,"value":994},"VM-Compiled Languages (Java, Kotlin, C#)",{"type":44,"tag":65,"props":996,"children":998},{"className":596,"code":997,"language":598,"meta":70,"style":70},"# Analyze Java bytecode\nuv run {baseDir}\u002Fct_analyzer\u002Fanalyzer.py CryptoUtils.java\n\n# Analyze Kotlin bytecode (Android\u002FJVM)\nuv run {baseDir}\u002Fct_analyzer\u002Fanalyzer.py CryptoUtils.kt\n\n# Analyze C# IL\nuv run {baseDir}\u002Fct_analyzer\u002Fanalyzer.py CryptoUtils.cs\n",[999],{"type":44,"tag":73,"props":1000,"children":1001},{"__ignoreMap":70},[1002,1010,1030,1037,1045,1065,1072,1080],{"type":44,"tag":604,"props":1003,"children":1004},{"class":606,"line":607},[1005],{"type":44,"tag":604,"props":1006,"children":1007},{"style":611},[1008],{"type":49,"value":1009},"# Analyze Java bytecode\n",{"type":44,"tag":604,"props":1011,"children":1012},{"class":606,"line":617},[1013,1017,1021,1025],{"type":44,"tag":604,"props":1014,"children":1015},{"style":621},[1016],{"type":49,"value":624},{"type":44,"tag":604,"props":1018,"children":1019},{"style":627},[1020],{"type":49,"value":630},{"type":44,"tag":604,"props":1022,"children":1023},{"style":627},[1024],{"type":49,"value":635},{"type":44,"tag":604,"props":1026,"children":1027},{"style":627},[1028],{"type":49,"value":1029}," CryptoUtils.java\n",{"type":44,"tag":604,"props":1031,"children":1032},{"class":606,"line":660},[1033],{"type":44,"tag":604,"props":1034,"children":1035},{"emptyLinePlaceholder":664},[1036],{"type":49,"value":667},{"type":44,"tag":604,"props":1038,"children":1039},{"class":606,"line":670},[1040],{"type":44,"tag":604,"props":1041,"children":1042},{"style":611},[1043],{"type":49,"value":1044},"# Analyze Kotlin bytecode (Android\u002FJVM)\n",{"type":44,"tag":604,"props":1046,"children":1047},{"class":606,"line":679},[1048,1052,1056,1060],{"type":44,"tag":604,"props":1049,"children":1050},{"style":621},[1051],{"type":49,"value":624},{"type":44,"tag":604,"props":1053,"children":1054},{"style":627},[1055],{"type":49,"value":630},{"type":44,"tag":604,"props":1057,"children":1058},{"style":627},[1059],{"type":49,"value":635},{"type":44,"tag":604,"props":1061,"children":1062},{"style":627},[1063],{"type":49,"value":1064}," CryptoUtils.kt\n",{"type":44,"tag":604,"props":1066,"children":1067},{"class":606,"line":716},[1068],{"type":44,"tag":604,"props":1069,"children":1070},{"emptyLinePlaceholder":664},[1071],{"type":49,"value":667},{"type":44,"tag":604,"props":1073,"children":1074},{"class":606,"line":724},[1075],{"type":44,"tag":604,"props":1076,"children":1077},{"style":611},[1078],{"type":49,"value":1079},"# Analyze C# IL\n",{"type":44,"tag":604,"props":1081,"children":1082},{"class":606,"line":733},[1083,1087,1091,1095],{"type":44,"tag":604,"props":1084,"children":1085},{"style":621},[1086],{"type":49,"value":624},{"type":44,"tag":604,"props":1088,"children":1089},{"style":627},[1090],{"type":49,"value":630},{"type":44,"tag":604,"props":1092,"children":1093},{"style":627},[1094],{"type":49,"value":635},{"type":44,"tag":604,"props":1096,"children":1097},{"style":627},[1098],{"type":49,"value":1099}," CryptoUtils.cs\n",{"type":44,"tag":52,"props":1101,"children":1102},{},[1103,1105,1111,1113,1119],{"type":49,"value":1104},"Note: Java, Kotlin, and C# compile to bytecode (JVM\u002FCIL) that runs on a virtual machine with JIT compilation. The analyzer examines the bytecode directly, not the JIT-compiled native code. The ",{"type":44,"tag":73,"props":1106,"children":1108},{"className":1107},[],[1109],{"type":49,"value":1110},"--arch",{"type":49,"value":1112}," and ",{"type":44,"tag":73,"props":1114,"children":1116},{"className":1115},[],[1117],{"type":49,"value":1118},"--opt-level",{"type":49,"value":1120}," flags do not apply to these languages.",{"type":44,"tag":838,"props":1122,"children":1124},{"id":1123},"swift-iosmacos",[1125],{"type":49,"value":1126},"Swift (iOS\u002FmacOS)",{"type":44,"tag":65,"props":1128,"children":1130},{"className":596,"code":1129,"language":598,"meta":70,"style":70},"# Analyze Swift for native architecture\nuv run {baseDir}\u002Fct_analyzer\u002Fanalyzer.py crypto.swift\n\n# Analyze for specific architecture (iOS devices)\nuv run {baseDir}\u002Fct_analyzer\u002Fanalyzer.py --arch arm64 crypto.swift\n\n# Analyze with different optimization levels\nuv run {baseDir}\u002Fct_analyzer\u002Fanalyzer.py --opt-level O0 crypto.swift\n",[1131],{"type":44,"tag":73,"props":1132,"children":1133},{"__ignoreMap":70},[1134,1142,1162,1169,1177,1204,1211,1219],{"type":44,"tag":604,"props":1135,"children":1136},{"class":606,"line":607},[1137],{"type":44,"tag":604,"props":1138,"children":1139},{"style":611},[1140],{"type":49,"value":1141},"# Analyze Swift for native architecture\n",{"type":44,"tag":604,"props":1143,"children":1144},{"class":606,"line":617},[1145,1149,1153,1157],{"type":44,"tag":604,"props":1146,"children":1147},{"style":621},[1148],{"type":49,"value":624},{"type":44,"tag":604,"props":1150,"children":1151},{"style":627},[1152],{"type":49,"value":630},{"type":44,"tag":604,"props":1154,"children":1155},{"style":627},[1156],{"type":49,"value":635},{"type":44,"tag":604,"props":1158,"children":1159},{"style":627},[1160],{"type":49,"value":1161}," crypto.swift\n",{"type":44,"tag":604,"props":1163,"children":1164},{"class":606,"line":660},[1165],{"type":44,"tag":604,"props":1166,"children":1167},{"emptyLinePlaceholder":664},[1168],{"type":49,"value":667},{"type":44,"tag":604,"props":1170,"children":1171},{"class":606,"line":670},[1172],{"type":44,"tag":604,"props":1173,"children":1174},{"style":611},[1175],{"type":49,"value":1176},"# Analyze for specific architecture (iOS devices)\n",{"type":44,"tag":604,"props":1178,"children":1179},{"class":606,"line":679},[1180,1184,1188,1192,1196,1200],{"type":44,"tag":604,"props":1181,"children":1182},{"style":621},[1183],{"type":49,"value":624},{"type":44,"tag":604,"props":1185,"children":1186},{"style":627},[1187],{"type":49,"value":630},{"type":44,"tag":604,"props":1189,"children":1190},{"style":627},[1191],{"type":49,"value":635},{"type":44,"tag":604,"props":1193,"children":1194},{"style":627},[1195],{"type":49,"value":878},{"type":44,"tag":604,"props":1197,"children":1198},{"style":627},[1199],{"type":49,"value":912},{"type":44,"tag":604,"props":1201,"children":1202},{"style":627},[1203],{"type":49,"value":1161},{"type":44,"tag":604,"props":1205,"children":1206},{"class":606,"line":716},[1207],{"type":44,"tag":604,"props":1208,"children":1209},{"emptyLinePlaceholder":664},[1210],{"type":49,"value":667},{"type":44,"tag":604,"props":1212,"children":1213},{"class":606,"line":724},[1214],{"type":44,"tag":604,"props":1215,"children":1216},{"style":611},[1217],{"type":49,"value":1218},"# Analyze with different optimization levels\n",{"type":44,"tag":604,"props":1220,"children":1221},{"class":606,"line":733},[1222,1226,1230,1234,1238,1242],{"type":44,"tag":604,"props":1223,"children":1224},{"style":621},[1225],{"type":49,"value":624},{"type":44,"tag":604,"props":1227,"children":1228},{"style":627},[1229],{"type":49,"value":630},{"type":44,"tag":604,"props":1231,"children":1232},{"style":627},[1233],{"type":49,"value":635},{"type":44,"tag":604,"props":1235,"children":1236},{"style":627},[1237],{"type":49,"value":951},{"type":44,"tag":604,"props":1239,"children":1240},{"style":627},[1241],{"type":49,"value":956},{"type":44,"tag":604,"props":1243,"children":1244},{"style":627},[1245],{"type":49,"value":1161},{"type":44,"tag":52,"props":1247,"children":1248},{},[1249,1251,1256,1257,1262],{"type":49,"value":1250},"Note: Swift compiles to native code like C\u002FC++\u002FGo\u002FRust, so it uses assembly-level analysis and supports ",{"type":44,"tag":73,"props":1252,"children":1254},{"className":1253},[],[1255],{"type":49,"value":1110},{"type":49,"value":1112},{"type":44,"tag":73,"props":1258,"children":1260},{"className":1259},[],[1261],{"type":49,"value":1118},{"type":49,"value":1263}," flags.",{"type":44,"tag":838,"props":1265,"children":1267},{"id":1266},"prerequisites",[1268],{"type":49,"value":1269},"Prerequisites",{"type":44,"tag":203,"props":1271,"children":1272},{},[1273,1288],{"type":44,"tag":207,"props":1274,"children":1275},{},[1276],{"type":44,"tag":211,"props":1277,"children":1278},{},[1279,1283],{"type":44,"tag":215,"props":1280,"children":1281},{},[1282],{"type":49,"value":219},{"type":44,"tag":215,"props":1284,"children":1285},{},[1286],{"type":49,"value":1287},"Requirements",{"type":44,"tag":231,"props":1289,"children":1290},{},[1291,1333,1353,1380,1407,1434,1446,1459,1471],{"type":44,"tag":211,"props":1292,"children":1293},{},[1294,1299],{"type":44,"tag":238,"props":1295,"children":1296},{},[1297],{"type":49,"value":1298},"C, C++, Go, Rust",{"type":44,"tag":238,"props":1300,"children":1301},{},[1302,1304,1310,1311,1317,1318,1324,1325,1331],{"type":49,"value":1303},"Compiler in PATH (",{"type":44,"tag":73,"props":1305,"children":1307},{"className":1306},[],[1308],{"type":49,"value":1309},"gcc",{"type":49,"value":106},{"type":44,"tag":73,"props":1312,"children":1314},{"className":1313},[],[1315],{"type":49,"value":1316},"clang",{"type":49,"value":134},{"type":44,"tag":73,"props":1319,"children":1321},{"className":1320},[],[1322],{"type":49,"value":1323},"go",{"type":49,"value":134},{"type":44,"tag":73,"props":1326,"children":1328},{"className":1327},[],[1329],{"type":49,"value":1330},"rustc",{"type":49,"value":1332},")",{"type":44,"tag":211,"props":1334,"children":1335},{},[1336,1340],{"type":44,"tag":238,"props":1337,"children":1338},{},[1339],{"type":49,"value":344},{"type":44,"tag":238,"props":1341,"children":1342},{},[1343,1345,1351],{"type":49,"value":1344},"Xcode or Swift toolchain (",{"type":44,"tag":73,"props":1346,"children":1348},{"className":1347},[],[1349],{"type":49,"value":1350},"swiftc",{"type":49,"value":1352}," in PATH)",{"type":44,"tag":211,"props":1354,"children":1355},{},[1356,1360],{"type":44,"tag":238,"props":1357,"children":1358},{},[1359],{"type":49,"value":369},{"type":44,"tag":238,"props":1361,"children":1362},{},[1363,1365,1371,1372,1378],{"type":49,"value":1364},"JDK with ",{"type":44,"tag":73,"props":1366,"children":1368},{"className":1367},[],[1369],{"type":49,"value":1370},"javac",{"type":49,"value":1112},{"type":44,"tag":73,"props":1373,"children":1375},{"className":1374},[],[1376],{"type":49,"value":1377},"javap",{"type":49,"value":1379}," in PATH",{"type":44,"tag":211,"props":1381,"children":1382},{},[1383,1387],{"type":44,"tag":238,"props":1384,"children":1385},{},[1386],{"type":49,"value":394},{"type":44,"tag":238,"props":1388,"children":1389},{},[1390,1392,1398,1400,1405],{"type":49,"value":1391},"Kotlin compiler (",{"type":44,"tag":73,"props":1393,"children":1395},{"className":1394},[],[1396],{"type":49,"value":1397},"kotlinc",{"type":49,"value":1399},") + JDK (",{"type":44,"tag":73,"props":1401,"children":1403},{"className":1402},[],[1404],{"type":49,"value":1377},{"type":49,"value":1406},") in PATH",{"type":44,"tag":211,"props":1408,"children":1409},{},[1410,1414],{"type":44,"tag":238,"props":1411,"children":1412},{},[1413],{"type":49,"value":426},{"type":44,"tag":238,"props":1415,"children":1416},{},[1417,1419,1425,1427,1433],{"type":49,"value":1418},".NET SDK + ",{"type":44,"tag":73,"props":1420,"children":1422},{"className":1421},[],[1423],{"type":49,"value":1424},"ilspycmd",{"type":49,"value":1426}," (",{"type":44,"tag":73,"props":1428,"children":1430},{"className":1429},[],[1431],{"type":49,"value":1432},"dotnet tool install -g ilspycmd",{"type":49,"value":1332},{"type":44,"tag":211,"props":1435,"children":1436},{},[1437,1441],{"type":44,"tag":238,"props":1438,"children":1439},{},[1440],{"type":49,"value":450},{"type":44,"tag":238,"props":1442,"children":1443},{},[1444],{"type":49,"value":1445},"PHP with VLD extension or OPcache",{"type":44,"tag":211,"props":1447,"children":1448},{},[1449,1454],{"type":44,"tag":238,"props":1450,"children":1451},{},[1452],{"type":49,"value":1453},"JavaScript\u002FTypeScript",{"type":44,"tag":238,"props":1455,"children":1456},{},[1457],{"type":49,"value":1458},"Node.js in PATH",{"type":44,"tag":211,"props":1460,"children":1461},{},[1462,1466],{"type":44,"tag":238,"props":1463,"children":1464},{},[1465],{"type":49,"value":545},{"type":44,"tag":238,"props":1467,"children":1468},{},[1469],{"type":49,"value":1470},"Python 3.x in PATH",{"type":44,"tag":211,"props":1472,"children":1473},{},[1474,1478],{"type":44,"tag":238,"props":1475,"children":1476},{},[1477],{"type":49,"value":570},{"type":44,"tag":238,"props":1479,"children":1480},{},[1481,1483,1489],{"type":49,"value":1482},"Ruby with ",{"type":44,"tag":73,"props":1484,"children":1486},{"className":1485},[],[1487],{"type":49,"value":1488},"--dump=insns",{"type":49,"value":1490}," support",{"type":44,"tag":52,"props":1492,"children":1493},{},[1494,1499],{"type":44,"tag":81,"props":1495,"children":1496},{},[1497],{"type":49,"value":1498},"macOS users",{"type":49,"value":1500},": Homebrew installs Java and .NET as \"keg-only\". You must add them to your PATH:",{"type":44,"tag":65,"props":1502,"children":1504},{"className":596,"code":1503,"language":598,"meta":70,"style":70},"# For Java (add to ~\u002F.zshrc)\nexport PATH=\"\u002Fopt\u002Fhomebrew\u002Fopt\u002Fopenjdk@21\u002Fbin:$PATH\"\n\n# For .NET tools (add to ~\u002F.zshrc)\nexport PATH=\"$HOME\u002F.dotnet\u002Ftools:$PATH\"\n",[1505],{"type":44,"tag":73,"props":1506,"children":1507},{"__ignoreMap":70},[1508,1516,1555,1562,1570],{"type":44,"tag":604,"props":1509,"children":1510},{"class":606,"line":607},[1511],{"type":44,"tag":604,"props":1512,"children":1513},{"style":611},[1514],{"type":49,"value":1515},"# For Java (add to ~\u002F.zshrc)\n",{"type":44,"tag":604,"props":1517,"children":1518},{"class":606,"line":617},[1519,1525,1530,1535,1540,1545,1550],{"type":44,"tag":604,"props":1520,"children":1522},{"style":1521},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[1523],{"type":49,"value":1524},"export",{"type":44,"tag":604,"props":1526,"children":1527},{"style":649},[1528],{"type":49,"value":1529}," PATH",{"type":44,"tag":604,"props":1531,"children":1532},{"style":638},[1533],{"type":49,"value":1534},"=",{"type":44,"tag":604,"props":1536,"children":1537},{"style":638},[1538],{"type":49,"value":1539},"\"",{"type":44,"tag":604,"props":1541,"children":1542},{"style":627},[1543],{"type":49,"value":1544},"\u002Fopt\u002Fhomebrew\u002Fopt\u002Fopenjdk@21\u002Fbin:",{"type":44,"tag":604,"props":1546,"children":1547},{"style":649},[1548],{"type":49,"value":1549},"$PATH",{"type":44,"tag":604,"props":1551,"children":1552},{"style":638},[1553],{"type":49,"value":1554},"\"\n",{"type":44,"tag":604,"props":1556,"children":1557},{"class":606,"line":660},[1558],{"type":44,"tag":604,"props":1559,"children":1560},{"emptyLinePlaceholder":664},[1561],{"type":49,"value":667},{"type":44,"tag":604,"props":1563,"children":1564},{"class":606,"line":670},[1565],{"type":44,"tag":604,"props":1566,"children":1567},{"style":611},[1568],{"type":49,"value":1569},"# For .NET tools (add to ~\u002F.zshrc)\n",{"type":44,"tag":604,"props":1571,"children":1572},{"class":606,"line":679},[1573,1577,1581,1585,1589,1594,1599,1603],{"type":44,"tag":604,"props":1574,"children":1575},{"style":1521},[1576],{"type":49,"value":1524},{"type":44,"tag":604,"props":1578,"children":1579},{"style":649},[1580],{"type":49,"value":1529},{"type":44,"tag":604,"props":1582,"children":1583},{"style":638},[1584],{"type":49,"value":1534},{"type":44,"tag":604,"props":1586,"children":1587},{"style":638},[1588],{"type":49,"value":1539},{"type":44,"tag":604,"props":1590,"children":1591},{"style":649},[1592],{"type":49,"value":1593},"$HOME",{"type":44,"tag":604,"props":1595,"children":1596},{"style":627},[1597],{"type":49,"value":1598},"\u002F.dotnet\u002Ftools:",{"type":44,"tag":604,"props":1600,"children":1601},{"style":649},[1602],{"type":49,"value":1549},{"type":44,"tag":604,"props":1604,"children":1605},{"style":638},[1606],{"type":49,"value":1554},{"type":44,"tag":52,"props":1608,"children":1609},{},[1610,1612,1616],{"type":49,"value":1611},"See ",{"type":44,"tag":284,"props":1613,"children":1614},{"href":384},[1615],{"type":49,"value":384},{"type":49,"value":1617}," for detailed setup instructions and troubleshooting.",{"type":44,"tag":58,"props":1619,"children":1621},{"id":1620},"quick-reference",[1622],{"type":49,"value":1623},"Quick Reference",{"type":44,"tag":203,"props":1625,"children":1626},{},[1627,1648],{"type":44,"tag":207,"props":1628,"children":1629},{},[1630],{"type":44,"tag":211,"props":1631,"children":1632},{},[1633,1638,1643],{"type":44,"tag":215,"props":1634,"children":1635},{},[1636],{"type":49,"value":1637},"Problem",{"type":44,"tag":215,"props":1639,"children":1640},{},[1641],{"type":49,"value":1642},"Detection",{"type":44,"tag":215,"props":1644,"children":1645},{},[1646],{"type":49,"value":1647},"Fix",{"type":44,"tag":231,"props":1649,"children":1650},{},[1651,1669,1687,1713,1731],{"type":44,"tag":211,"props":1652,"children":1653},{},[1654,1659,1664],{"type":44,"tag":238,"props":1655,"children":1656},{},[1657],{"type":49,"value":1658},"Division on secrets",{"type":44,"tag":238,"props":1660,"children":1661},{},[1662],{"type":49,"value":1663},"DIV, IDIV, SDIV, UDIV",{"type":44,"tag":238,"props":1665,"children":1666},{},[1667],{"type":49,"value":1668},"Barrett reduction or multiply-by-inverse",{"type":44,"tag":211,"props":1670,"children":1671},{},[1672,1677,1682],{"type":44,"tag":238,"props":1673,"children":1674},{},[1675],{"type":49,"value":1676},"Branch on secrets",{"type":44,"tag":238,"props":1678,"children":1679},{},[1680],{"type":49,"value":1681},"JE, JNE, BEQ, BNE",{"type":44,"tag":238,"props":1683,"children":1684},{},[1685],{"type":49,"value":1686},"Constant-time selection (cmov, bit masking)",{"type":44,"tag":211,"props":1688,"children":1689},{},[1690,1695,1700],{"type":44,"tag":238,"props":1691,"children":1692},{},[1693],{"type":49,"value":1694},"Secret comparison",{"type":44,"tag":238,"props":1696,"children":1697},{},[1698],{"type":49,"value":1699},"Early-exit memcmp",{"type":44,"tag":238,"props":1701,"children":1702},{},[1703,1705,1711],{"type":49,"value":1704},"Use ",{"type":44,"tag":73,"props":1706,"children":1708},{"className":1707},[],[1709],{"type":49,"value":1710},"crypto\u002Fsubtle",{"type":49,"value":1712}," or constant-time compare",{"type":44,"tag":211,"props":1714,"children":1715},{},[1716,1721,1726],{"type":44,"tag":238,"props":1717,"children":1718},{},[1719],{"type":49,"value":1720},"Weak RNG",{"type":44,"tag":238,"props":1722,"children":1723},{},[1724],{"type":49,"value":1725},"rand(), mt_rand, Math.random",{"type":44,"tag":238,"props":1727,"children":1728},{},[1729],{"type":49,"value":1730},"Use crypto-secure RNG",{"type":44,"tag":211,"props":1732,"children":1733},{},[1734,1739,1744],{"type":44,"tag":238,"props":1735,"children":1736},{},[1737],{"type":49,"value":1738},"Table lookup by secret",{"type":44,"tag":238,"props":1740,"children":1741},{},[1742],{"type":49,"value":1743},"Array subscript on secret index",{"type":44,"tag":238,"props":1745,"children":1746},{},[1747],{"type":49,"value":1748},"Bit-sliced lookups",{"type":44,"tag":58,"props":1750,"children":1752},{"id":1751},"interpreting-results",[1753],{"type":49,"value":1754},"Interpreting Results",{"type":44,"tag":52,"props":1756,"children":1757},{},[1758,1763],{"type":44,"tag":81,"props":1759,"children":1760},{},[1761],{"type":49,"value":1762},"PASSED",{"type":49,"value":1764}," - No variable-time operations detected.",{"type":44,"tag":52,"props":1766,"children":1767},{},[1768,1773],{"type":44,"tag":81,"props":1769,"children":1770},{},[1771],{"type":49,"value":1772},"FAILED",{"type":49,"value":1774}," - Dangerous instructions found. Example:",{"type":44,"tag":65,"props":1776,"children":1779},{"className":1777,"code":1778,"language":49,"meta":70},[68],"[ERROR] SDIV\n  Function: decompose_vulnerable\n  Reason: SDIV has early termination optimization; execution time depends on operand values\n",[1780],{"type":44,"tag":73,"props":1781,"children":1782},{"__ignoreMap":70},[1783],{"type":49,"value":1778},{"type":44,"tag":58,"props":1785,"children":1787},{"id":1786},"verifying-results-avoiding-false-positives",[1788],{"type":49,"value":1789},"Verifying Results (Avoiding False Positives)",{"type":44,"tag":52,"props":1791,"children":1792},{},[1793,1798],{"type":44,"tag":81,"props":1794,"children":1795},{},[1796],{"type":49,"value":1797},"CRITICAL",{"type":49,"value":1799},": Not every flagged operation is a vulnerability. The tool has no data flow analysis - it flags ALL potentially dangerous operations regardless of whether they involve secrets.",{"type":44,"tag":52,"props":1801,"children":1802},{},[1803,1805],{"type":49,"value":1804},"For each flagged violation, ask: ",{"type":44,"tag":81,"props":1806,"children":1807},{},[1808],{"type":49,"value":1809},"Does this operation's input depend on secret data?",{"type":44,"tag":1811,"props":1812,"children":1813},"ol",{},[1814,1824,1834,1892],{"type":44,"tag":91,"props":1815,"children":1816},{},[1817,1822],{"type":44,"tag":81,"props":1818,"children":1819},{},[1820],{"type":49,"value":1821},"Identify the secret inputs",{"type":49,"value":1823}," to the function (private keys, plaintext, signatures, tokens)",{"type":44,"tag":91,"props":1825,"children":1826},{},[1827,1832],{"type":44,"tag":81,"props":1828,"children":1829},{},[1830],{"type":49,"value":1831},"Trace data flow",{"type":49,"value":1833}," from the flagged instruction back to inputs",{"type":44,"tag":91,"props":1835,"children":1836},{},[1837,1842,1844],{"type":44,"tag":81,"props":1838,"children":1839},{},[1840],{"type":49,"value":1841},"Common false positive patterns",{"type":49,"value":1843},":",{"type":44,"tag":65,"props":1845,"children":1849},{"className":1846,"code":1847,"language":1848,"meta":70,"style":70},"language-c shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F FALSE POSITIVE: Division uses public constant, not secret\nint num_blocks = data_len \u002F 16;  \u002F\u002F data_len is length, not content\n\n\u002F\u002F TRUE POSITIVE: Division involves secret-derived value\nint32_t q = secret_coef \u002F GAMMA2;  \u002F\u002F secret_coef from private key\n","c",[1850],{"type":44,"tag":73,"props":1851,"children":1852},{"__ignoreMap":70},[1853,1861,1869,1876,1884],{"type":44,"tag":604,"props":1854,"children":1855},{"class":606,"line":607},[1856],{"type":44,"tag":604,"props":1857,"children":1858},{},[1859],{"type":49,"value":1860},"\u002F\u002F FALSE POSITIVE: Division uses public constant, not secret\n",{"type":44,"tag":604,"props":1862,"children":1863},{"class":606,"line":617},[1864],{"type":44,"tag":604,"props":1865,"children":1866},{},[1867],{"type":49,"value":1868},"int num_blocks = data_len \u002F 16;  \u002F\u002F data_len is length, not content\n",{"type":44,"tag":604,"props":1870,"children":1871},{"class":606,"line":660},[1872],{"type":44,"tag":604,"props":1873,"children":1874},{"emptyLinePlaceholder":664},[1875],{"type":49,"value":667},{"type":44,"tag":604,"props":1877,"children":1878},{"class":606,"line":670},[1879],{"type":44,"tag":604,"props":1880,"children":1881},{},[1882],{"type":49,"value":1883},"\u002F\u002F TRUE POSITIVE: Division involves secret-derived value\n",{"type":44,"tag":604,"props":1885,"children":1886},{"class":606,"line":679},[1887],{"type":44,"tag":604,"props":1888,"children":1889},{},[1890],{"type":49,"value":1891},"int32_t q = secret_coef \u002F GAMMA2;  \u002F\u002F secret_coef from private key\n",{"type":44,"tag":91,"props":1893,"children":1894},{},[1895,1900],{"type":44,"tag":81,"props":1896,"children":1897},{},[1898],{"type":49,"value":1899},"Document your analysis",{"type":49,"value":1901}," for each flagged item",{"type":44,"tag":838,"props":1903,"children":1905},{"id":1904},"quick-triage-questions",[1906],{"type":49,"value":1907},"Quick Triage Questions",{"type":44,"tag":203,"props":1909,"children":1910},{},[1911,1932],{"type":44,"tag":207,"props":1912,"children":1913},{},[1914],{"type":44,"tag":211,"props":1915,"children":1916},{},[1917,1922,1927],{"type":44,"tag":215,"props":1918,"children":1919},{},[1920],{"type":49,"value":1921},"Question",{"type":44,"tag":215,"props":1923,"children":1924},{},[1925],{"type":49,"value":1926},"If Yes",{"type":44,"tag":215,"props":1928,"children":1929},{},[1930],{"type":49,"value":1931},"If No",{"type":44,"tag":231,"props":1933,"children":1934},{},[1935,1953,1969,1989],{"type":44,"tag":211,"props":1936,"children":1937},{},[1938,1943,1948],{"type":44,"tag":238,"props":1939,"children":1940},{},[1941],{"type":49,"value":1942},"Is the operand a compile-time constant?",{"type":44,"tag":238,"props":1944,"children":1945},{},[1946],{"type":49,"value":1947},"Likely false positive",{"type":44,"tag":238,"props":1949,"children":1950},{},[1951],{"type":49,"value":1952},"Continue",{"type":44,"tag":211,"props":1954,"children":1955},{},[1956,1961,1965],{"type":44,"tag":238,"props":1957,"children":1958},{},[1959],{"type":49,"value":1960},"Is the operand a public parameter (length, count)?",{"type":44,"tag":238,"props":1962,"children":1963},{},[1964],{"type":49,"value":1947},{"type":44,"tag":238,"props":1966,"children":1967},{},[1968],{"type":49,"value":1952},{"type":44,"tag":211,"props":1970,"children":1971},{},[1972,1977,1985],{"type":44,"tag":238,"props":1973,"children":1974},{},[1975],{"type":49,"value":1976},"Is the operand derived from key\u002Fplaintext\u002Fsecret?",{"type":44,"tag":238,"props":1978,"children":1979},{},[1980],{"type":44,"tag":81,"props":1981,"children":1982},{},[1983],{"type":49,"value":1984},"TRUE POSITIVE",{"type":44,"tag":238,"props":1986,"children":1987},{},[1988],{"type":49,"value":1947},{"type":44,"tag":211,"props":1990,"children":1991},{},[1992,1997,2004],{"type":44,"tag":238,"props":1993,"children":1994},{},[1995],{"type":49,"value":1996},"Can an attacker influence the operand value?",{"type":44,"tag":238,"props":1998,"children":1999},{},[2000],{"type":44,"tag":81,"props":2001,"children":2002},{},[2003],{"type":49,"value":1984},{"type":44,"tag":238,"props":2005,"children":2006},{},[2007],{"type":49,"value":1947},{"type":44,"tag":58,"props":2009,"children":2011},{"id":2010},"limitations",[2012],{"type":49,"value":2013},"Limitations",{"type":44,"tag":1811,"props":2015,"children":2016},{},[2017,2027,2037],{"type":44,"tag":91,"props":2018,"children":2019},{},[2020,2025],{"type":44,"tag":81,"props":2021,"children":2022},{},[2023],{"type":49,"value":2024},"Static Analysis Only",{"type":49,"value":2026},": Analyzes assembly\u002Fbytecode, not runtime behavior. Cannot detect cache timing or microarchitectural side-channels.",{"type":44,"tag":91,"props":2028,"children":2029},{},[2030,2035],{"type":44,"tag":81,"props":2031,"children":2032},{},[2033],{"type":49,"value":2034},"No Data Flow Analysis",{"type":49,"value":2036},": Flags all dangerous operations regardless of whether they process secrets. Manual review required.",{"type":44,"tag":91,"props":2038,"children":2039},{},[2040,2045],{"type":44,"tag":81,"props":2041,"children":2042},{},[2043],{"type":49,"value":2044},"Compiler\u002FRuntime Variations",{"type":49,"value":2046},": Different compilers, optimization levels, and runtime versions may produce different output.",{"type":44,"tag":58,"props":2048,"children":2050},{"id":2049},"real-world-impact",[2051],{"type":49,"value":2052},"Real-World Impact",{"type":44,"tag":87,"props":2054,"children":2055},{},[2056,2066,2076],{"type":44,"tag":91,"props":2057,"children":2058},{},[2059,2064],{"type":44,"tag":81,"props":2060,"children":2061},{},[2062],{"type":49,"value":2063},"KyberSlash (2023)",{"type":49,"value":2065},": Division instructions in post-quantum ML-KEM implementations allowed key recovery",{"type":44,"tag":91,"props":2067,"children":2068},{},[2069,2074],{"type":44,"tag":81,"props":2070,"children":2071},{},[2072],{"type":49,"value":2073},"Lucky Thirteen (2013)",{"type":49,"value":2075},": Timing differences in CBC padding validation enabled plaintext recovery",{"type":44,"tag":91,"props":2077,"children":2078},{},[2079,2084],{"type":44,"tag":81,"props":2080,"children":2081},{},[2082],{"type":49,"value":2083},"RSA Timing Attacks",{"type":49,"value":2085},": Early implementations leaked private key bits through division timing",{"type":44,"tag":58,"props":2087,"children":2089},{"id":2088},"references",[2090],{"type":49,"value":2091},"References",{"type":44,"tag":87,"props":2093,"children":2094},{},[2095,2108,2120],{"type":44,"tag":91,"props":2096,"children":2097},{},[2098,2106],{"type":44,"tag":284,"props":2099,"children":2103},{"href":2100,"rel":2101},"https:\u002F\u002Fgithub.com\u002Fveorq\u002Fcryptocoding",[2102],"nofollow",[2104],{"type":49,"value":2105},"Cryptocoding Guidelines",{"type":49,"value":2107}," - Defensive coding for crypto",{"type":44,"tag":91,"props":2109,"children":2110},{},[2111,2118],{"type":44,"tag":284,"props":2112,"children":2115},{"href":2113,"rel":2114},"https:\u002F\u002Fkyberslash.cr.yp.to\u002F",[2102],[2116],{"type":49,"value":2117},"KyberSlash",{"type":49,"value":2119}," - Division timing in post-quantum crypto",{"type":44,"tag":91,"props":2121,"children":2122},{},[2123,2130],{"type":44,"tag":284,"props":2124,"children":2127},{"href":2125,"rel":2126},"https:\u002F\u002Fwww.bearssl.org\u002Fconstanttime.html",[2102],[2128],{"type":49,"value":2129},"BearSSL Constant-Time",{"type":49,"value":2131}," - Practical constant-time techniques",{"type":44,"tag":2133,"props":2134,"children":2135},"style",{},[2136],{"type":49,"value":2137},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":2139,"total":2288},[2140,2153,2163,2181,2196,2209,2220,2230,2243,2254,2266,2277],{"slug":2141,"name":2141,"fn":2142,"description":2143,"org":2144,"tags":2145,"stars":26,"repoUrl":27,"updatedAt":2152},"address-sanitizer","detect memory errors during fuzzing","AddressSanitizer detects memory errors during fuzzing. Use when fuzzing C\u002FC++ code to find buffer overflows and use-after-free bugs.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2146,2147,2148,2149],{"name":426,"slug":1848,"type":16},{"name":24,"slug":25,"type":16},{"name":14,"slug":15,"type":16},{"name":2150,"slug":2151,"type":16},"Testing","testing","2026-07-17T06:05:14.925095",{"slug":2154,"name":2154,"fn":2155,"description":2156,"org":2157,"tags":2158,"stars":26,"repoUrl":27,"updatedAt":2162},"aflpp","perform multi-core fuzzing of C\u002FC++ projects","AFL++ is a fork of AFL with better fuzzing performance and advanced features. Use for multi-core fuzzing of C\u002FC++ projects.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2159,2160,2161],{"name":426,"slug":1848,"type":16},{"name":14,"slug":15,"type":16},{"name":2150,"slug":2151,"type":16},"2026-07-17T06:05:12.433192",{"slug":2164,"name":2164,"fn":2165,"description":2166,"org":2167,"tags":2168,"stars":26,"repoUrl":27,"updatedAt":2180},"agentic-actions-auditor","audit GitHub Actions for security vulnerabilities","Audits GitHub Actions workflows for security vulnerabilities in AI agent integrations including Claude Code Action, Gemini CLI, OpenAI Codex, and GitHub AI Inference. Detects attack vectors where attacker-controlled input reaches AI agents running in CI\u002FCD pipelines, including env var intermediary patterns, direct expression injection, dangerous sandbox configurations, and wildcard user allowlists. Use when reviewing workflow files that invoke AI coding agents, auditing CI\u002FCD pipeline security for prompt injection risks, or evaluating agentic action configurations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2169,2172,2175,2176,2179],{"name":2170,"slug":2171,"type":16},"Agents","agents",{"name":2173,"slug":2174,"type":16},"CI\u002FCD","ci-cd",{"name":21,"slug":22,"type":16},{"name":2177,"slug":2178,"type":16},"GitHub Actions","github-actions",{"name":14,"slug":15,"type":16},"2026-07-18T05:47:48.564744",{"slug":2182,"name":2182,"fn":2183,"description":2184,"org":2185,"tags":2186,"stars":26,"repoUrl":27,"updatedAt":2195},"algorand-vulnerability-scanner","scan Algorand smart contracts for vulnerabilities","Scans Algorand smart contracts for 11 common vulnerabilities including rekeying attacks, unchecked transaction fees, missing field validations, and access control issues. Use when auditing Algorand projects (TEAL\u002FPyTeal).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2187,2190,2191,2192],{"name":2188,"slug":2189,"type":16},"Audit","audit",{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},{"name":2193,"slug":2194,"type":16},"Smart Contracts","smart-contracts","2026-07-18T05:47:43.989063",{"slug":2197,"name":2197,"fn":2198,"description":2199,"org":2200,"tags":2201,"stars":26,"repoUrl":27,"updatedAt":2208},"ask-questions-if-underspecified","clarify requirements before implementation","Clarify requirements before implementing. Use when serious doubts arise.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2202,2205],{"name":2203,"slug":2204,"type":16},"Engineering","engineering",{"name":2206,"slug":2207,"type":16},"Productivity","productivity","2026-07-17T06:05:33.543262",{"slug":2210,"name":2210,"fn":2211,"description":2212,"org":2213,"tags":2214,"stars":26,"repoUrl":27,"updatedAt":2219},"atheris","fuzz Python code with Atheris","Atheris is a coverage-guided Python fuzzer based on libFuzzer. Use for fuzzing pure Python code and Python C extensions.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2215,2217,2218],{"name":545,"slug":2216,"type":16},"python",{"name":14,"slug":15,"type":16},{"name":2150,"slug":2151,"type":16},"2026-07-17T06:05:14.575191",{"slug":2221,"name":2221,"fn":2222,"description":2223,"org":2224,"tags":2225,"stars":26,"repoUrl":27,"updatedAt":2229},"audit-augmentation","augment code graphs with audit findings","Augments Trailmark code graphs with external audit findings from SARIF static analysis results, weAudit annotation files, and version-gated Trailmark 0.4.x binary-analysis graph exports. Maps findings to graph nodes by file and line overlap, creates severity-based subgraphs, and enables cross-referencing findings with pre-analysis data (blast radius, taint, etc.). Use when projecting SARIF results onto a code graph, overlaying weAudit annotations, importing binary graph findings, cross-referencing Semgrep, CodeQL, or binary-analysis findings with call graph data, or visualizing audit findings in the context of code structure.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2226,2227,2228],{"name":2188,"slug":2189,"type":16},{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},"2026-08-01T05:44:54.920542",{"slug":2231,"name":2231,"fn":2232,"description":2233,"org":2234,"tags":2235,"stars":26,"repoUrl":27,"updatedAt":2242},"audit-context-building","build architectural context for code analysis","Enables ultra-granular, line-by-line code analysis to build deep architectural context before vulnerability or bug finding.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2236,2239,2240,2241],{"name":2237,"slug":2238,"type":16},"Architecture","architecture",{"name":2188,"slug":2189,"type":16},{"name":21,"slug":22,"type":16},{"name":2203,"slug":2204,"type":16},"2026-07-18T05:47:40.122449",{"slug":2244,"name":2244,"fn":2245,"description":2246,"org":2247,"tags":2248,"stars":26,"repoUrl":27,"updatedAt":2253},"audit-prep-assistant","prepare codebases for security audits","Prepares codebases for security review using Trail of Bits' checklist. Helps set review goals, runs static analysis tools, increases test coverage, removes dead code, ensures accessibility, and generates documentation (flowcharts, user stories, inline comments).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2249,2250,2251,2252],{"name":2188,"slug":2189,"type":16},{"name":21,"slug":22,"type":16},{"name":2203,"slug":2204,"type":16},{"name":14,"slug":15,"type":16},"2026-07-18T05:47:39.210985",{"slug":2255,"name":2255,"fn":2256,"description":2257,"org":2258,"tags":2259,"stars":26,"repoUrl":27,"updatedAt":2265},"burpsuite-project-parser","parse Burp Suite project files","Searches and explores Burp Suite project files (.burp) from the command line. Use when searching response headers or bodies with regex patterns, extracting security audit findings, dumping proxy history or site map data, or analyzing HTTP traffic captured in a Burp project.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2260,2261,2264],{"name":2188,"slug":2189,"type":16},{"name":2262,"slug":2263,"type":16},"CLI","cli",{"name":14,"slug":15,"type":16},"2026-07-17T06:05:33.198077",{"slug":2267,"name":2267,"fn":2268,"description":2269,"org":2270,"tags":2271,"stars":26,"repoUrl":27,"updatedAt":2276},"c-review","audit C and C++ code","Performs comprehensive C\u002FC++ security review for memory corruption, integer overflows, race conditions, and platform-specific vulnerabilities. Use when auditing native C\u002FC++ applications, reviewing daemons or services for memory safety, or hunting integer overflow \u002F use-after-free \u002F race conditions in userspace code.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2272,2273,2274,2275],{"name":2188,"slug":2189,"type":16},{"name":426,"slug":1848,"type":16},{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},"2026-07-17T06:05:11.333374",{"slug":2278,"name":2278,"fn":2279,"description":2280,"org":2281,"tags":2282,"stars":26,"repoUrl":27,"updatedAt":2287},"cairo-vulnerability-scanner","scan Cairo and StarkNet contracts for vulnerabilities","Scans Cairo\u002FStarkNet smart contracts for 6 critical vulnerabilities including felt252 arithmetic overflow, L1-L2 messaging issues, address conversion problems, and signature replay. Use when auditing StarkNet projects.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2283,2284,2285,2286],{"name":2188,"slug":2189,"type":16},{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},{"name":2193,"slug":2194,"type":16},"2026-07-18T05:47:42.84568",111,{"items":2290,"total":2336},[2291,2298,2304,2312,2319,2324,2330],{"slug":2141,"name":2141,"fn":2142,"description":2143,"org":2292,"tags":2293,"stars":26,"repoUrl":27,"updatedAt":2152},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2294,2295,2296,2297],{"name":426,"slug":1848,"type":16},{"name":24,"slug":25,"type":16},{"name":14,"slug":15,"type":16},{"name":2150,"slug":2151,"type":16},{"slug":2154,"name":2154,"fn":2155,"description":2156,"org":2299,"tags":2300,"stars":26,"repoUrl":27,"updatedAt":2162},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2301,2302,2303],{"name":426,"slug":1848,"type":16},{"name":14,"slug":15,"type":16},{"name":2150,"slug":2151,"type":16},{"slug":2164,"name":2164,"fn":2165,"description":2166,"org":2305,"tags":2306,"stars":26,"repoUrl":27,"updatedAt":2180},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2307,2308,2309,2310,2311],{"name":2170,"slug":2171,"type":16},{"name":2173,"slug":2174,"type":16},{"name":21,"slug":22,"type":16},{"name":2177,"slug":2178,"type":16},{"name":14,"slug":15,"type":16},{"slug":2182,"name":2182,"fn":2183,"description":2184,"org":2313,"tags":2314,"stars":26,"repoUrl":27,"updatedAt":2195},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2315,2316,2317,2318],{"name":2188,"slug":2189,"type":16},{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},{"name":2193,"slug":2194,"type":16},{"slug":2197,"name":2197,"fn":2198,"description":2199,"org":2320,"tags":2321,"stars":26,"repoUrl":27,"updatedAt":2208},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2322,2323],{"name":2203,"slug":2204,"type":16},{"name":2206,"slug":2207,"type":16},{"slug":2210,"name":2210,"fn":2211,"description":2212,"org":2325,"tags":2326,"stars":26,"repoUrl":27,"updatedAt":2219},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2327,2328,2329],{"name":545,"slug":2216,"type":16},{"name":14,"slug":15,"type":16},{"name":2150,"slug":2151,"type":16},{"slug":2221,"name":2221,"fn":2222,"description":2223,"org":2331,"tags":2332,"stars":26,"repoUrl":27,"updatedAt":2229},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2333,2334,2335],{"name":2188,"slug":2189,"type":16},{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},77]