# ot-kartoshka/pinqergen architecture

> Architecture diagram of the GitHub repository ot-kartoshka/pinqergen, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-14). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ot-kartoshka/pinqergen
- Repository: https://github.com/ot-kartoshka/pinqergen

## Overview

pinqergen is a command-line pseudo-random byte-sequence generator and statistical evaluator. The principal workflow parses user options, obtains bytes from a selected generator or input file, runs equiprobability, independence, and homogeneity tests, then prints reports and optionally writes sequence or CSV output. The experiment mode repeats generation and evaluation across the registered generator catalogue. The source excerpts show orchestration and several generator implementations; some generator and statistical internals are represented only by indexed files, so their internal behavior is not expanded.

Main entry points: [`src/GeneratorManager.cpp`](https://github.com/ot-kartoshka/pinqergen/blob/master/src/GeneratorManager.cpp) (Experiment manager), [`main.cpp`](https://github.com/ot-kartoshka/pinqergen/blob/master/main.cpp) (CLI), [`src/ClassicGenerators.cpp`](https://github.com/ot-kartoshka/pinqergen/blob/master/src/ClassicGenerators.cpp) (Classic generators), [`include/Generators.hpp`](https://github.com/ot-kartoshka/pinqergen/blob/master/include/Generators.hpp) (Generator interface and catalogue)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_cli["CLI and orchestration"]
  node_cli["CLI<br/>[main.cpp]"]
  node_manager["Experiment manager"]
  node_errors["Error messages<br/>[Errors.cpp]"]
end

subgraph group_generation["Sequence generation"]
  node_generators["Generator interface and catalogue<br/>[Generators.hpp]"]
  node_classic["Classic generators"]
  node_crypto["Cryptographic generators"]
  node_lfsr["LFSR engine<br/>[Lfsr.cpp]"]
  node_biguint["Big integer arithmetic<br/>[BigUint.cpp]"]
end

subgraph group_analysis["Statistical analysis and output"]
  node_statistics["Statistical tests<br/>[Statistics.cpp]"]
  node_report["Console and CSV reports"]
end

node_user(("User"))
node_input["Sequence input file"]
node_sequence["Generated or loaded bytes"]
node_output["Sequence output file"]
node_csv["CSV output file"]

node_user -->|"provides options"| node_cli
node_cli -->|"invokes workflows"| node_manager
node_manager -->|"reads bytes"| node_input
node_manager -->|"creates generator"| node_generators
node_generators -->|"catalogue and factory"| node_classic
node_classic -->|"uses LFSR"| node_lfsr
node_classic -->|"dispatches crypto"| node_crypto
node_crypto -->|"uses arithmetic"| node_biguint
node_manager -->|"returns bytes"| node_sequence
node_manager -->|"runs tests"| node_statistics
node_manager -->|"formats results"| node_report
node_cli -->|"requests sequence write"| node_output
node_manager -->|"writes bytes"| node_output
node_cli -->|"requests CSV export"| node_csv
node_manager -->|"writes results"| node_csv
node_manager -->|"formats errors"| node_errors

click node_cli "https://github.com/ot-kartoshka/pinqergen/blob/master/main.cpp"
click node_manager "https://github.com/ot-kartoshka/pinqergen/blob/master/src/GeneratorManager.cpp"
click node_errors "https://github.com/ot-kartoshka/pinqergen/blob/master/src/Errors.cpp"
click node_generators "https://github.com/ot-kartoshka/pinqergen/blob/master/include/Generators.hpp"
click node_classic "https://github.com/ot-kartoshka/pinqergen/blob/master/src/ClassicGenerators.cpp"
click node_crypto "https://github.com/ot-kartoshka/pinqergen/blob/master/src/CryptoGenerators.cpp"
click node_lfsr "https://github.com/ot-kartoshka/pinqergen/blob/master/src/Lfsr.cpp"
click node_biguint "https://github.com/ot-kartoshka/pinqergen/blob/master/src/BigUint.cpp"
click node_statistics "https://github.com/ot-kartoshka/pinqergen/blob/master/src/Statistics.cpp"
click node_report "https://github.com/ot-kartoshka/pinqergen/blob/master/src/GeneratorManager.cpp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cli,node_manager,node_errors,node_user toneBlue
class node_generators,node_classic,node_crypto,node_lfsr,node_biguint toneAmber
class node_statistics,node_report toneMint
class node_input,node_sequence,node_output,node_csv toneIndigo
```

## Components

### CLI and orchestration

- [CLI](https://github.com/ot-kartoshka/pinqergen/blob/master/main.cpp): `main.cpp`
- [Experiment manager](https://github.com/ot-kartoshka/pinqergen/blob/master/src/GeneratorManager.cpp): `src/GeneratorManager.cpp`
- [Error messages](https://github.com/ot-kartoshka/pinqergen/blob/master/src/Errors.cpp): `src/Errors.cpp`

### Sequence generation

- [Generator interface and catalogue](https://github.com/ot-kartoshka/pinqergen/blob/master/include/Generators.hpp): `include/Generators.hpp`
- [Classic generators](https://github.com/ot-kartoshka/pinqergen/blob/master/src/ClassicGenerators.cpp): `src/ClassicGenerators.cpp`
- [Cryptographic generators](https://github.com/ot-kartoshka/pinqergen/blob/master/src/CryptoGenerators.cpp): `src/CryptoGenerators.cpp`
- [LFSR engine](https://github.com/ot-kartoshka/pinqergen/blob/master/src/Lfsr.cpp): `src/Lfsr.cpp`
- [Big integer arithmetic](https://github.com/ot-kartoshka/pinqergen/blob/master/src/BigUint.cpp): `src/BigUint.cpp`

### Statistical analysis and output

- [Statistical tests](https://github.com/ot-kartoshka/pinqergen/blob/master/src/Statistics.cpp): `src/Statistics.cpp`
- [Console and CSV reports](https://github.com/ot-kartoshka/pinqergen/blob/master/src/GeneratorManager.cpp): `src/GeneratorManager.cpp`

### Other components

- **User**
- **Sequence input file**
- **Generated or loaded bytes**
- **Sequence output file**
- **CSV output file**

## Connections

- User → CLI: provides options (evidence: `main.cpp`)
- CLI → Experiment manager: invokes workflows (evidence: `main.cpp`)
- Experiment manager → Sequence input file: reads bytes (evidence: `src/GeneratorManager.cpp`)
- Experiment manager → Generator interface and catalogue: creates generator (evidence: `src/GeneratorManager.cpp`)
- Generator interface and catalogue → Classic generators: catalogue and factory (evidence: `src/ClassicGenerators.cpp`)
- Classic generators → LFSR engine: uses LFSR (evidence: `src/ClassicGenerators.cpp`)
- Classic generators → Cryptographic generators: dispatches crypto (evidence: `src/ClassicGenerators.cpp`)
- Cryptographic generators → Big integer arithmetic: uses arithmetic (evidence: `src/CryptoGenerators.cpp`)
- Experiment manager → Generated or loaded bytes: returns bytes (evidence: `src/GeneratorManager.cpp`)
- Experiment manager → Statistical tests: runs tests (evidence: `src/GeneratorManager.cpp`)
- Experiment manager → Console and CSV reports: formats results (evidence: `src/GeneratorManager.cpp`)
- CLI → Sequence output file: requests sequence write (evidence: `main.cpp`)
- Experiment manager → Sequence output file: writes bytes (evidence: `src/GeneratorManager.cpp`)
- CLI → CSV output file: requests CSV export (evidence: `main.cpp`)
- Experiment manager → CSV output file: writes results (evidence: `src/GeneratorManager.cpp`)
- Experiment manager → Error messages: formats errors (evidence: `src/GeneratorManager.cpp`)
