# vuxenn1/sisfa architecture

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

- Interactive diagram: https://gitdiagram.com/vuxenn1/sisfa
- Repository: https://github.com/vuxenn1/sisfa

## Overview

SISFA is a CLI and Qt desktop file vault: users embed a password-encrypted file in a PNG, then recover it using the stego image and password. The principal workflow is coordinated by the vault layer, which packages metadata, encrypts or decrypts the file, and invokes LSB pixel embedding or extraction. Separate paths support image-capacity checks and GUI image previews. The README documents these capabilities; some GUI and vault implementation details are unsampled, so only documented or excerpt-supported wiring is shown.

Main entry points: [`src/vault.cpp`](https://github.com/vuxenn1/sisfa/blob/main/src/vault.cpp) (Vault operations), [`src/mainwindow.cpp`](https://github.com/vuxenn1/sisfa/blob/main/src/mainwindow.cpp) (Main window), [`src/main.cpp`](https://github.com/vuxenn1/sisfa/blob/main/src/main.cpp) (CLI menu), [`src/extractdialog.cpp`](https://github.com/vuxenn1/sisfa/blob/main/src/extractdialog.cpp) (Extract dialog)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interfaces["User interfaces"]
  node_cli["CLI menu<br/>[main.cpp]"]
  node_gui_entry["GUI entry<br/>[main_gui.cpp]"]
  node_window["Main window<br/>[mainwindow.cpp]"]
  node_embed_dialog["Embed dialog<br/>[embeddialog.cpp]"]
  node_extract_dialog["Extract dialog<br/>[extractdialog.cpp]"]
end

subgraph group_vault["Vault workflow"]
  node_vault_api["Vault operations<br/>[vault.cpp]"]
end

subgraph group_protection["Protection and steganography"]
  node_crypto["Encryption<br/>[crypto.cpp]"]
  node_stego["LSB encoding<br/>[steganography.cpp]"]
  node_crypto_api["Crypto interface<br/>[crypto.h]"]
  node_stego_api["Stego interface<br/>[steganography.h]"]
end

subgraph group_images["Image handling"]
  node_image_io["Image codecs<br/>[stb_image.h]"]
  node_image_write["PNG writer<br/>[stb_image_write.h]"]
  node_image_impl["Codec implementation<br/>[stb_impl.cpp]"]
end

node_user(("User"))
node_file_input["Secret file"]
node_file_output["Recovered file"]
node_carrier["Carrier or stego PNG"]
node_openssl["OpenSSL"]

node_user -->|"chooses operation"| node_cli
node_user -->|"opens application"| node_gui_entry
node_gui_entry -->|"starts window"| node_window
node_window -->|"opens embedding"| node_embed_dialog
node_window -->|"opens extraction"| node_extract_dialog
node_embed_dialog -->|"updates preview"| node_window
node_extract_dialog -->|"updates preview"| node_window
node_cli -->|"requests embed or extract"| node_vault_api
node_embed_dialog -->|"requests embedding"| node_vault_api
node_extract_dialog -->|"requests extraction"| node_vault_api
node_file_input -->|"reads secret bytes"| node_vault_api
node_carrier -->|"provides carrier image"| node_vault_api
node_vault_api -->|"encrypts or decrypts"| node_crypto
node_vault_api -->|"embeds or extracts payload"| node_stego
node_vault_api -->|"loads pixels"| node_image_io
node_vault_api -->|"writes PNG"| node_image_write
node_image_impl -->|"implements decoder"| node_image_io
node_image_impl -->|"implements encoder"| node_image_write
node_crypto -->|"uses cryptography"| node_openssl
node_vault_api -->|"returns extraction result"| node_cli
node_vault_api -->|"returns extraction result"| node_extract_dialog
node_cli -->|"writes recovered bytes"| node_file_output
node_extract_dialog -->|"writes recovered bytes"| node_file_output
node_vault_api -->|"saves stego PNG"| node_carrier
node_cli -->|"loads image for capacity"| node_image_io
node_window -->|"checks preview capacity"| node_image_io
node_crypto_api -.->|"declares operations"| node_crypto
node_stego_api -.->|"declares operations"| node_stego

click node_cli "https://github.com/vuxenn1/sisfa/blob/main/src/main.cpp"
click node_gui_entry "https://github.com/vuxenn1/sisfa/blob/main/src/main_gui.cpp"
click node_window "https://github.com/vuxenn1/sisfa/blob/main/src/mainwindow.cpp"
click node_embed_dialog "https://github.com/vuxenn1/sisfa/blob/main/src/embeddialog.cpp"
click node_extract_dialog "https://github.com/vuxenn1/sisfa/blob/main/src/extractdialog.cpp"
click node_vault_api "https://github.com/vuxenn1/sisfa/blob/main/src/vault.cpp"
click node_crypto "https://github.com/vuxenn1/sisfa/blob/main/src/crypto.cpp"
click node_stego "https://github.com/vuxenn1/sisfa/blob/main/src/steganography.cpp"
click node_crypto_api "https://github.com/vuxenn1/sisfa/blob/main/include/crypto.h"
click node_stego_api "https://github.com/vuxenn1/sisfa/blob/main/include/steganography.h"
click node_image_io "https://github.com/vuxenn1/sisfa/blob/main/include/stb_image.h"
click node_image_write "https://github.com/vuxenn1/sisfa/blob/main/include/stb_image_write.h"
click node_image_impl "https://github.com/vuxenn1/sisfa/blob/main/src/stb_impl.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_gui_entry,node_window,node_embed_dialog,node_extract_dialog,node_user toneBlue
class node_vault_api toneAmber
class node_crypto,node_stego,node_crypto_api,node_stego_api toneMint
class node_image_io,node_image_write,node_image_impl toneRose
class node_file_input,node_file_output,node_carrier,node_openssl toneIndigo
```

## Components

### User interfaces

- [CLI menu](https://github.com/vuxenn1/sisfa/blob/main/src/main.cpp): `src/main.cpp`
- [GUI entry](https://github.com/vuxenn1/sisfa/blob/main/src/main_gui.cpp): `src/main_gui.cpp`
- [Main window](https://github.com/vuxenn1/sisfa/blob/main/src/mainwindow.cpp): `src/mainwindow.cpp`
- [Embed dialog](https://github.com/vuxenn1/sisfa/blob/main/src/embeddialog.cpp): `src/embeddialog.cpp`
- [Extract dialog](https://github.com/vuxenn1/sisfa/blob/main/src/extractdialog.cpp): `src/extractdialog.cpp`

### Vault workflow

- [Vault operations](https://github.com/vuxenn1/sisfa/blob/main/src/vault.cpp): `src/vault.cpp`

### Protection and steganography

- [Encryption](https://github.com/vuxenn1/sisfa/blob/main/src/crypto.cpp): `src/crypto.cpp`
- [LSB encoding](https://github.com/vuxenn1/sisfa/blob/main/src/steganography.cpp): `src/steganography.cpp`
- [Crypto interface](https://github.com/vuxenn1/sisfa/blob/main/include/crypto.h): `include/crypto.h`
- [Stego interface](https://github.com/vuxenn1/sisfa/blob/main/include/steganography.h): `include/steganography.h`

### Image handling

- [Image codecs](https://github.com/vuxenn1/sisfa/blob/main/include/stb_image.h): `include/stb_image.h`
- [PNG writer](https://github.com/vuxenn1/sisfa/blob/main/include/stb_image_write.h): `include/stb_image_write.h`
- [Codec implementation](https://github.com/vuxenn1/sisfa/blob/main/src/stb_impl.cpp): `src/stb_impl.cpp`

### Other components

- **User**
- **Secret file**
- **Recovered file**
- **Carrier or stego PNG**
- **OpenSSL**

## Connections

- User → CLI menu: chooses operation
- User → GUI entry: opens application
- GUI entry → Main window: starts window
- Main window → Embed dialog: opens embedding
- Main window → Extract dialog: opens extraction
- Embed dialog → Main window: updates preview
- Extract dialog → Main window: updates preview
- CLI menu → Vault operations: requests embed or extract
- Embed dialog → Vault operations: requests embedding
- Extract dialog → Vault operations: requests extraction
- Secret file → Vault operations: reads secret bytes
- Carrier or stego PNG → Vault operations: provides carrier image
- Vault operations → Encryption: encrypts or decrypts
- Vault operations → LSB encoding: embeds or extracts payload
- Vault operations → Image codecs: loads pixels
- Vault operations → PNG writer: writes PNG
- Codec implementation → Image codecs: implements decoder
- Codec implementation → PNG writer: implements encoder
- Encryption → OpenSSL: uses cryptography
- Vault operations → CLI menu: returns extraction result
- Vault operations → Extract dialog: returns extraction result
- CLI menu → Recovered file: writes recovered bytes
- Extract dialog → Recovered file: writes recovered bytes
- Vault operations → Carrier or stego PNG: saves stego PNG
- CLI menu → Image codecs: loads image for capacity
- Main window → Image codecs: checks preview capacity
- Crypto interface → Encryption: declares operations
- Stego interface → LSB encoding: declares operations
