# ivgarci/qkd-net-tools architecture

> Architecture diagram of the GitHub repository ivgarci/qkd-net-tools, 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/ivgarci/qkd-net-tools
- Repository: https://github.com/ivgarci/qkd-net-tools

## Overview

qkd-net-tools is a research toolkit for generating and validating trusted-relay QKD network candidates, studying their structure and resilience, and analyzing an ADIF railway-network proxy. Its main workflow builds a topology from geographic candidates, applies a BB84 link-capacity model for QKD routing, and evaluates structural or service behavior under failures. Separate branches cover community-to-region alignment, generation sensitivity, and ADIF-derived maps and metrics. The README documents these capabilities; some subsystem wiring is not visible in the sampled source, so unverified links are omitted or dashed.

Main entry points: [`generacion/generar_red.py`](https://github.com/ivgarci/qkd-net-tools/blob/master/generacion/generar_red.py) (Network builder), [`protocols/skr_bb84.py`](https://github.com/ivgarci/qkd-net-tools/blob/master/protocols/skr_bb84.py) (BB84 SKR model), [`analisis/capacidad_servicio_ataques.py`](https://github.com/ivgarci/qkd-net-tools/blob/master/analisis/capacidad_servicio_ataques.py) (Service resilience), [`analisis/routing_core.py`](https://github.com/ivgarci/qkd-net-tools/blob/master/analisis/routing_core.py) (Routing engine)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_generation["Topology generation"]
  node_network_builder["Network builder<br/>[generar_red.py]"]
  node_pam_regeneration["PAM regeneration"]
  node_delta_sensitivity["Δ sensitivity"]
  node_relay_siting["Relay siting"]
end

subgraph group_physics_routing["QKD physics and routing"]
  node_bb84_model["BB84 SKR model<br/>[skr_bb84.py]"]
  node_routing_core["Routing engine<br/>[routing_core.py]"]
  node_qkd_routing["QKD routing"]
end

subgraph group_network_analysis["Network analysis"]
  node_alignment["Community alignment"]
  node_null_models["Alignment null models"]
  node_structural_analysis["Structural metrics"]
end

subgraph group_resilience["Resilience studies"]
  node_service_resilience["Service resilience"]
  node_device_failures["Device failures"]
  node_adversarial_failures["Adversarial failures"]
  node_random_attacks["Random failures"]
  node_targeted_attacks["Targeted attacks"]
end

subgraph group_adif["ADIF proxy"]
  node_adif_matrix["ADIF graph matrix"]
  node_adif_junctions["ADIF junction analysis"]
  node_adif_maps["ADIF maps"]
  node_adif_service["ADIF resilience routing"]
end

node_researcher(("Researcher"))
node_geo_candidates["Geographic candidates"]

node_researcher -->|"builds topology"| node_network_builder
node_geo_candidates -->|"provides locations"| node_network_builder
node_network_builder -.->|"validates generation"| node_pam_regeneration
node_network_builder -.->|"varies Δ and ρ"| node_delta_sensitivity
node_network_builder -.->|"tests siting"| node_relay_siting
node_qkd_routing -->|"uses routing"| node_routing_core
node_qkd_routing -->|"uses SKR model"| node_bb84_model
node_service_resilience -->|"uses widest paths"| node_routing_core
node_service_resilience -->|"uses SKR model"| node_bb84_model
node_device_failures -->|"reuses loaders"| node_service_resilience
node_device_failures -->|"uses SKR model"| node_bb84_model
node_adversarial_failures -->|"uses loaders"| node_service_resilience
node_adversarial_failures -->|"uses route metrics"| node_routing_core
node_adversarial_failures -->|"uses SKR model"| node_bb84_model
node_alignment -->|"provides alignment functions"| node_null_models
node_researcher -->|"simulates failures"| node_random_attacks
node_researcher -->|"simulates attacks"| node_targeted_attacks
node_researcher -->|"analyzes structure"| node_structural_analysis
node_researcher -.->|"compares communities"| node_alignment
node_researcher -->|"analyzes rail proxy"| node_adif_matrix
node_adif_matrix -.->|"derives junction graph"| node_adif_junctions
node_adif_junctions -.->|"visualizes proxy"| node_adif_maps
node_researcher -.->|"routes on ADIF proxy"| node_adif_service
node_adif_service -->|"uses routing engine"| node_routing_core
node_adif_service -->|"uses SKR model"| node_bb84_model

click node_network_builder "https://github.com/ivgarci/qkd-net-tools/blob/master/generacion/generar_red.py"
click node_pam_regeneration "https://github.com/ivgarci/qkd-net-tools/blob/master/analisis/pam_regeneration.py"
click node_delta_sensitivity "https://github.com/ivgarci/qkd-net-tools/blob/master/analisis/delta_rho_sensitivity.py"
click node_relay_siting "https://github.com/ivgarci/qkd-net-tools/blob/master/analisis/relay_siting_sensitivity.py"
click node_bb84_model "https://github.com/ivgarci/qkd-net-tools/blob/master/protocols/skr_bb84.py"
click node_routing_core "https://github.com/ivgarci/qkd-net-tools/blob/master/analisis/routing_core.py"
click node_qkd_routing "https://github.com/ivgarci/qkd-net-tools/blob/master/analisis/enrutamiento_qkd.py"
click node_alignment "https://github.com/ivgarci/qkd-net-tools/blob/master/analisis/alignment_communities.py"
click node_null_models "https://github.com/ivgarci/qkd-net-tools/blob/master/analisis/null_models_alignment.py"
click node_structural_analysis "https://github.com/ivgarci/qkd-net-tools/blob/master/analisis/analis_redes_complejas.py"
click node_service_resilience "https://github.com/ivgarci/qkd-net-tools/blob/master/analisis/capacidad_servicio_ataques.py"
click node_device_failures "https://github.com/ivgarci/qkd-net-tools/blob/master/analisis/fallos_dispositivo.py"
click node_adversarial_failures "https://github.com/ivgarci/qkd-net-tools/blob/master/analisis/fallos_adversariales.py"
click node_random_attacks "https://github.com/ivgarci/qkd-net-tools/blob/master/ataques/ataques_aleatorios_nodos_fault.py"
click node_targeted_attacks "https://github.com/ivgarci/qkd-net-tools/blob/master/ataques/ataques_dirigidos_nodos_fault.py"
click node_adif_matrix "https://github.com/ivgarci/qkd-net-tools/blob/master/adif/generar_matriz_adif.py"
click node_adif_junctions "https://github.com/ivgarci/qkd-net-tools/blob/master/adif/analisis_adif_junctions.py"
click node_adif_maps "https://github.com/ivgarci/qkd-net-tools/blob/master/adif/generar_mapa_adif.py"
click node_adif_service "https://github.com/ivgarci/qkd-net-tools/blob/master/analisis/enrutamiento_adif_completo.py"

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_network_builder,node_pam_regeneration,node_delta_sensitivity,node_relay_siting toneBlue
class node_bb84_model,node_routing_core,node_qkd_routing toneAmber
class node_alignment,node_null_models,node_structural_analysis toneMint
class node_service_resilience,node_device_failures,node_adversarial_failures,node_random_attacks,node_targeted_attacks toneRose
class node_adif_matrix,node_adif_junctions,node_adif_maps,node_adif_service,node_researcher,node_geo_candidates toneIndigo
```

## Components

### Topology generation

- [Network builder](https://github.com/ivgarci/qkd-net-tools/blob/master/generacion/generar_red.py): `generacion/generar_red.py`
- [PAM regeneration](https://github.com/ivgarci/qkd-net-tools/blob/master/analisis/pam_regeneration.py): `analisis/pam_regeneration.py`
- [Δ sensitivity](https://github.com/ivgarci/qkd-net-tools/blob/master/analisis/delta_rho_sensitivity.py): `analisis/delta_rho_sensitivity.py`
- [Relay siting](https://github.com/ivgarci/qkd-net-tools/blob/master/analisis/relay_siting_sensitivity.py): `analisis/relay_siting_sensitivity.py`

### QKD physics and routing

- [BB84 SKR model](https://github.com/ivgarci/qkd-net-tools/blob/master/protocols/skr_bb84.py): `protocols/skr_bb84.py`
- [Routing engine](https://github.com/ivgarci/qkd-net-tools/blob/master/analisis/routing_core.py): `analisis/routing_core.py`
- [QKD routing](https://github.com/ivgarci/qkd-net-tools/blob/master/analisis/enrutamiento_qkd.py): `analisis/enrutamiento_qkd.py`

### Network analysis

- [Community alignment](https://github.com/ivgarci/qkd-net-tools/blob/master/analisis/alignment_communities.py): `analisis/alignment_communities.py`
- [Alignment null models](https://github.com/ivgarci/qkd-net-tools/blob/master/analisis/null_models_alignment.py): `analisis/null_models_alignment.py`
- [Structural metrics](https://github.com/ivgarci/qkd-net-tools/blob/master/analisis/analis_redes_complejas.py): `analisis/analis_redes_complejas.py`

### Resilience studies

- [Service resilience](https://github.com/ivgarci/qkd-net-tools/blob/master/analisis/capacidad_servicio_ataques.py): `analisis/capacidad_servicio_ataques.py`
- [Device failures](https://github.com/ivgarci/qkd-net-tools/blob/master/analisis/fallos_dispositivo.py): `analisis/fallos_dispositivo.py`
- [Adversarial failures](https://github.com/ivgarci/qkd-net-tools/blob/master/analisis/fallos_adversariales.py): `analisis/fallos_adversariales.py`
- [Random failures](https://github.com/ivgarci/qkd-net-tools/blob/master/ataques/ataques_aleatorios_nodos_fault.py): `ataques/ataques_aleatorios_nodos_fault.py`
- [Targeted attacks](https://github.com/ivgarci/qkd-net-tools/blob/master/ataques/ataques_dirigidos_nodos_fault.py): `ataques/ataques_dirigidos_nodos_fault.py`

### ADIF proxy

- [ADIF graph matrix](https://github.com/ivgarci/qkd-net-tools/blob/master/adif/generar_matriz_adif.py): `adif/generar_matriz_adif.py`
- [ADIF junction analysis](https://github.com/ivgarci/qkd-net-tools/blob/master/adif/analisis_adif_junctions.py): `adif/analisis_adif_junctions.py`
- [ADIF maps](https://github.com/ivgarci/qkd-net-tools/blob/master/adif/generar_mapa_adif.py): `adif/generar_mapa_adif.py`
- [ADIF resilience routing](https://github.com/ivgarci/qkd-net-tools/blob/master/analisis/enrutamiento_adif_completo.py): `analisis/enrutamiento_adif_completo.py`

### Other components

- **Researcher**
- **Geographic candidates**

## Connections

- Researcher → Network builder: builds topology
- Geographic candidates → Network builder: provides locations
- Network builder → PAM regeneration: validates generation
- Network builder → Δ sensitivity: varies Δ and ρ
- Network builder → Relay siting: tests siting
- QKD routing → Routing engine: uses routing (evidence: `analisis/enrutamiento_qkd.py`)
- QKD routing → BB84 SKR model: uses SKR model (evidence: `analisis/enrutamiento_qkd.py`)
- Service resilience → Routing engine: uses widest paths (evidence: `analisis/capacidad_servicio_ataques.py`)
- Service resilience → BB84 SKR model: uses SKR model (evidence: `analisis/capacidad_servicio_ataques.py`)
- Device failures → Service resilience: reuses loaders (evidence: `analisis/fallos_dispositivo.py`)
- Device failures → BB84 SKR model: uses SKR model (evidence: `analisis/fallos_dispositivo.py`)
- Adversarial failures → Service resilience: uses loaders (evidence: `analisis/fallos_adversariales.py`)
- Adversarial failures → Routing engine: uses route metrics (evidence: `analisis/fallos_adversariales.py`)
- Adversarial failures → BB84 SKR model: uses SKR model (evidence: `analisis/fallos_adversariales.py`)
- Community alignment → Alignment null models: provides alignment functions (evidence: `analisis/null_models_alignment.py`)
- Researcher → Random failures: simulates failures
- Researcher → Targeted attacks: simulates attacks
- Researcher → Structural metrics: analyzes structure
- Researcher → Community alignment: compares communities
- Researcher → ADIF graph matrix: analyzes rail proxy
- ADIF graph matrix → ADIF junction analysis: derives junction graph
- ADIF junction analysis → ADIF maps: visualizes proxy
- Researcher → ADIF resilience routing: routes on ADIF proxy
- ADIF resilience routing → Routing engine: uses routing engine (evidence: `analisis/enrutamiento_adif_completo.py`)
- ADIF resilience routing → BB84 SKR model: uses SKR model (evidence: `analisis/enrutamiento_adif_completo.py`)
