⚡ Automatically decrypt encryptions without knowing the key or cipher, decode encodings, and crack hashes ⚡
This report summarizes scanner evidence for bee-san/Ciphey, a Rust project with 21,730 GitHub stars. SynthScan examined 181,284 lines of code across 290 source files, recording 430 pattern matches distributed across 5 syntactic categories. The legacy adjusted pattern signal is 2.4 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 418 finding(s).
Are imports declared and package/API names verified? 12 finding(s).
Are wrappers, guards, and repeated structures necessary? 0 finding(s).
Which changes need focused human review? 430 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 430 distinct pattern matches across 5 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | images/repomix-output.txt | 101 | # | COMMENT |
| LOW | images/repomix-output.txt | 121 | # Set PlaybackSpeed <float> Set the playback speed of the recording | COMMENT |
| LOW | images/repomix-output.txt | 141 | # Down[@<time>] [number] Press the Down key | COMMENT |
| LOW | images/repomix-output.txt | 181 | # Require <string> Ensure a program is on the $PATH to proceed | COMMENT |
| LOW | images/repomix-output.txt | 201 | # | COMMENT |
| LOW | tests/standard_galactic_alphabet_decoder.rs | 1 | //! End-to-end tests for the Standard Galactic Alphabet decoder | COMMENT |
| LOW | tests/standard_galactic_alphabet_decoder.rs | 21 | /// The plaintext of the bench fixtures | COMMENT |
| LOW | tests/base36_decoder.rs | 1 | //! End-to-end tests for the Base36 decoder (<https://github.com/bee-san/Ciphey/issues/922>): | COMMENT |
| LOW | tests/multi_tap_decoder.rs | 1 | //! End-to-end tests for the Multi-tap decoder (<https://github.com/bee-san/Ciphey/issues/960>): | COMMENT |
| LOW | tests/backslash_escape_decoder.rs | 1 | //! End-to-end tests for the Backslash Escapes decoder | COMMENT |
| LOW | tests/punycode_decoder.rs | 1 | //! End-to-end tests for the Punycode decoder (<https://github.com/bee-san/Ciphey/issues/938>): | COMMENT |
| LOW | tests/plaintext_detection.rs | 1 | //! The 20 end-to-end cases from <https://github.com/bee-san/Ciphey/issues/1031>, run the way | COMMENT |
| LOW | tests/baudot_decoder.rs | 1 | //! End-to-end tests for the Baudot decoder (<https://github.com/bee-san/Ciphey/issues/956>): | COMMENT |
| LOW | tests/core_socialist_values_decoder.rs | 1 | //! End-to-end tests for the Core Socialist Values decoder | COMMENT |
| LOW | tests/hill_decoder_crib.rs | 1 | //! End-to-end test for the Hill cracker (<https://github.com/bee-san/Ciphey/issues/1011>) | COMMENT |
| LOW | tests/vigenere_autokey_crib.rs | 1 | //! End-to-end test for the Vigenère autokey cracker | COMMENT |
| LOW | tests/unicode_fancy_text_decoder.rs | 1 | //! End-to-end tests for the Unicode Fancy Text decoder | COMMENT |
| LOW | tests/keyboard_layout_decoder.rs | 1 | //! End-to-end tests for the Keyboard layout decoder | COMMENT |
| LOW | tests/ascii_shift_decoder.rs | 1 | //! End-to-end tests for the ASCII shift cracker (<https://github.com/bee-san/Ciphey/issues/994>): | COMMENT |
| LOW | tests/rot18_decoder.rs | 1 | //! End-to-end tests for the ROT5 / ROT18 cracker | COMMENT |
| LOW | tests/nato_phonetic_decoder_crib.rs | 1 | //! End-to-end tests for the NATO phonetic alphabet decoder | COMMENT |
| LOW | tests/hill_decoder.rs | 1 | //! End-to-end tests for the Hill cracker (<https://github.com/bee-san/Ciphey/issues/1011>): | COMMENT |
| LOW | tests/aaencode_decoder.rs | 1 | //! End-to-end tests for the AAEncode decoder (<https://github.com/bee-san/Ciphey/issues/988>): | COMMENT |
| LOW | tests/ascii_shift_crib.rs | 1 | //! End-to-end test for the ASCII shift cracker (<https://github.com/bee-san/Ciphey/issues/994>) | COMMENT |
| LOW | tests/polybius_decoder.rs | 1 | //! End-to-end tests for the Polybius Square decoder | COMMENT |
| LOW | tests/jsfuck_decoder_crib.rs | 1 | //! End-to-end test for the JSFuck decoder (<https://github.com/bee-san/Ciphey/issues/987>) | COMMENT |
| LOW | tests/yunying_decoder.rs | 1 | //! End-to-end tests for the 01248 (Yunying) decoder | COMMENT |
| LOW | tests/dna_codon_decoder.rs | 1 | //! End-to-end tests for the DNA Codon decoder (<https://github.com/bee-san/Ciphey/issues/966>): | COMMENT |
| LOW | tests/tap_code_decoder.rs | 1 | //! End-to-end tests for the Tap Code decoder (<https://github.com/bee-san/Ciphey/issues/962>): | COMMENT |
| LOW | tests/zero_width_crib.rs | 1 | //! End-to-end tests for the Zero-width decoder | COMMENT |
| LOW | tests/route_transposition_decoder.rs | 1 | //! End-to-end tests for the Route Transposition decoder | COMMENT |
| LOW | tests/ctf_corpus.rs | 1 | //! Real CTF strings, run through the full search. | COMMENT |
| LOW | tests/big_integer_decoder.rs | 1 | //! End-to-end tests for the Big integer to bytes decoder | COMMENT |
| LOW | tests/zero_width_decoder.rs | 1 | //! End-to-end tests for the Zero-width decoder | COMMENT |
| LOW | tests/nato_phonetic_decoder.rs | 1 | //! End-to-end tests for the NATO phonetic alphabet decoder | COMMENT |
| LOW | tests/leetspeak_decoder.rs | 1 | //! End-to-end tests for the Leetspeak decoder (<https://github.com/bee-san/Ciphey/issues/969>): | COMMENT |
| LOW | tests/keyboard_shift_decoder.rs | 1 | //! End-to-end tests for the Keyboard shift decoder (<https://github.com/bee-san/Ciphey/issues/976>): | COMMENT |
| LOW | tests/base92_decoder.rs | 1 | //! End-to-end tests for the Base92 decoder (<https://github.com/bee-san/Ciphey/issues/927>): | COMMENT |
| LOW | tests/test_fixtures/jsfuck.toml | 1 | # JSFuck test vectors for src/decoders/jsfuck_decoder.rs and tests/jsfuck_decoder.rs. | COMMENT |
| LOW | docs/wordlist.md | 141 | COMMENT | |
| LOW | docs/wordlist.md | 161 | /// 1. Memory mapping (unsafe { Mmap::map(&file) }): | COMMENT |
| LOW | docs/changes/wordlist.md | 141 | COMMENT | |
| LOW | docs/changes/wordlist.md | 161 | /// 1. Memory mapping (unsafe { Mmap::map(&file) }): | COMMENT |
| LOW | .github/workflows/release.yml | 1 | # Copyright 2022-2023, axodotdev | COMMENT |
| LOW | .github/workflows/release.yml | 21 | contents: write | COMMENT |
| LOW | benches/plaintext.rs | 1 | //! Plaintext-detection benchmark: how well the checkers tell plaintext from the junk a | COMMENT |
| LOW | benches/plaintext.rs | 21 | //! | COMMENT |
| LOW | benches/decoders.rs | 1 | //! Every decoder on realistic input. | COMMENT |
| LOW | benches/startup.rs | 1 | //! Startup and per-call overhead outside the search itself. | COMMENT |
| LOW | benches/search.rs | 1 | //! The A* search end to end, through `ciphey::perform_cracking`, on the corpus in | COMMENT |
| LOW | benches/data/decoders.toml | 1 | # Decoder benchmark fixtures (used by benches/decoders.rs). | COMMENT |
| LOW | benches/data/decoders.toml | 21 | # success = whether Decoder::crack reports success with the Athena checker today | COMMENT |
| LOW | benches/data/checkers.toml | 1 | # Checker benchmark fixtures (used by benches/checkers.rs and benches/crib.rs). | COMMENT |
| LOW | benches/data/search.toml | 1 | # A* search corpus (used by benches/search.rs), run end to end through | COMMENT |
| LOW | src/error.rs | 1 | use thiserror::Error; | COMMENT |
| LOW | src/lib.rs | 1 | //! ciphey is an automatic decoding and cracking tool. <https://github.com/bee-san/ciphey> | COMMENT |
| LOW | src/lib.rs | 41 | /// ``` | COMMENT |
| LOW | src/lib.rs | 101 | /// // You can set the config to your liking using the Config struct | COMMENT |
| LOW | src/lib.rs | 121 | /// let mut config = Config::default(); | COMMENT |
| LOW | src/detection.rs | 1 | //! Plaintext detection: is a text plaintext, and what is it? | COMMENT |
| 350 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/integration_test.rs | 458 | const JWT_IO_PAYLOAD: &str = r#"{"sub":"1234567890","name":"John Doe","iat":1516239022}"#; | CODE |
| LOW | tests/cli.rs | 407 | .contains(r#"{"sub":"1234567890","name":"John Doe","iat":1516239022}"#), | CODE |
| LOW | src/decoders/dtmf_decoder.rs | 678 | assert_eq!(crack("555-1234"), None); | CODE |
| LOW | src/decoders/jwt_decoder.rs | 56 | /// r#"{"sub":"1234567890","name":"John Doe","iat":1516239022}"# | COMMENT |
| LOW | src/decoders/jwt_decoder.rs | 323 | const JWT_IO_PAYLOAD: &str = r#"{"sub":"1234567890","name":"John Doe","iat":1516239022}"#; | CODE |
| LOW | src/decoders/brainfuck_interpreter.rs | 151 | "Lorem Ipsum! Oh, Happy Day! Hello World! I hope you have a lovely day!" | CODE |
| LOW | src/decoders/keyboard_layout_decoder.rs | 867 | "Lorem ipsum dolor sit amet, consectetur adipiscing elit", | CODE |
| LOW | src/decoders/keyboard_layout_decoder.rs | 867 | "Lorem ipsum dolor sit amet, consectetur adipiscing elit", | CODE |
| LOW | src/decoders/affine_decoder.rs | 678 | "Lorem ipsum dolor sit amet, consectetur adipiscing elit", | CODE |
| LOW | src/decoders/affine_decoder.rs | 678 | "Lorem ipsum dolor sit amet, consectetur adipiscing elit", | CODE |
| LOW | src/decoders/leetspeak_decoder.rs | 818 | "user@example.com", | CODE |
| LOW | src/decoders/api/functions.rs | 563 | /// assert_eq!(payload.text, r#"{"sub":"1234567890","name":"John Doe","iat":1516239022}"#); | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src/checkers/english.rs | 81 | /// strictest). Chosen with the #1031 harness so that the issue's corpus | COMMENT |
| MEDIUM | src/checkers/english.rs | 963 | // Wrong-key Vigenère outputs from the #1031 harness | COMMENT |
| MEDIUM | src/storage/ngrams/generate.py | 236 | `category<TAB>split<TAB>text` lines. Pride and Prejudice's are the 200 lines the #1031 harness | STRING |
| MEDIUM | src/decoders/vigenere_decoder.rs | 112 | /// English words. In the #1031 harness the right key's output never scores | COMMENT |
| MEDIUM | src/decoders/quoted_printable_decoder.rs | 235 | // RFC 2045 §6.7 note 1: a robust decoder accepts lowercase hex | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .github/workflows/release.yml | 48 | # Create the Github Release™ so the packages have something to be uploaded to | COMMENT |
| MEDIUM | .github/workflows/release.yml | 67 | # Create the Github Release™ based on what cargo-dist thinks it should be | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/storage/ngrams/generate.py | 256 | CODE |