Metadata-Version: 2.4
Name: noxcrypt
Version: 0.1.0
Summary: Boîte à outils interactive (terminal) pour chiffrer et déchiffrer les encodages classiques des CTF
Author: cyph3r_n0x
License-Expression: MIT
Keywords: ctf,crypto,cipher,rot13,base64,vigenere,tui,cli,cybersecurity
Classifier: Environment :: Console
Classifier: Intended Audience :: Information Technology
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Security :: Cryptography
Classifier: Topic :: Utilities
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: textual>=8.0
Requires-Dist: rich>=13.0
Provides-Extra: dev
Requires-Dist: pytest>=8; extra == "dev"
Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
Dynamic: license-file

# noxcrypt

Boîte à outils **interactive** (interface plein écran en couleurs, dans le terminal) pour chiffrer / déchiffrer
les encodages et chiffrements classiques des CTF. Pensé comme `arsenal-ng` : tu cherches, tu choisis, tu tapes, tu vois le résultat en direct.

## Installation

```bash
pip install noxcrypt            # depuis PyPI (une fois publié)
pipx install noxcrypt           # recommandé sur Kali (pas de conflit système)
pip install .                   # depuis les sources
```

Python 3.10+.

## Utilisation

```bash
noxcrypt                         # interface interactive
noxcrypt tui "SGVsbG8=" -a auto  # interface, texte et algo préremplis
```

### Dans l'interface

| Touche | Action |
|---|---|
| `Tab` | changer de zone (recherche / liste / clé / entrée / résultat) |
| `Ctrl+F` | aller à la recherche (`rot`, `base`, `xor`, `morse`…) |
| `F2` ou `Ctrl+T` | basculer **Chiffrer / Déchiffrer** |
| `F3` ou `Ctrl+G` | copier le résultat (presse-papiers + OSC52, marche en SSH/tmux) |
| `F4` ou `Ctrl+R` | envoyer le résultat dans l'entrée (pour enchaîner) |
| `Ctrl+Q` | quitter |

Le résultat se met à jour à chaque frappe.
L'entrée **auto** (par défaut) essaie tous les décodeurs sans clé, y compris en chaîne
(ex. `base64 > hex`), et classe les pistes par score. Les entrées **brute** testent toutes les clés
(César, XOR 1 octet, rail fence, affine).

### En ligne de commande (sans interface)

```bash
noxcrypt list
noxcrypt enc rot13 "Hello CTF"
noxcrypt dec base64 "SGVsbG8gQ1RG"
noxcrypt dec vigenere "lxfopvefrnhr" -k lemon
noxcrypt dec affine "rclla" -k 5,8
noxcrypt enc xor "secret" -k 0x2a
echo "uryyb" | noxcrypt dec rot13
noxcrypt dec base64 -f fichier.txt
noxcrypt auto "NjY2YzYxNjc3YjYzNjgzNDMxNmU3ZA=="
noxcrypt brute caesar "khoor zruog"
noxcrypt brute xor 2d2e23262...      # entrée en hexa
```

`enc` / `dec` écrivent le résultat brut (sans couleur) : utilisable dans un pipe.

## Algos (24)

| Type | Algos |
|---|---|
| BASE | base64, base64url, base32, base58, base85, ascii85 |
| NUM | hex, binary, octal, decimal, a1z26 |
| SUBST | rot13, rot47, caesar, atbash, vigenere, affine, bacon |
| TRANS | reverse, railfence |
| XOR | xor (clé texte ou `0xHEX`, entrée/sortie en hexa) |
| CODE | morse |
| WEB | url, html |

Clés : `caesar` → `3` · `vigenere` → `lemon` · `affine` → `5,8` · `railfence` → `3` · `xor` → `0x2a` ou `key`.

## Limites (à connaître)

- `auto` ne tente rot13 / rot47 / atbash / reverse / César qu'en bout de chaîne, et ne les affiche que si le résultat contient un mot connu ou un flag. Un texte dans une langue absente de la petite liste de mots peut passer à côté.
- Le score est une heuristique (mots courants, forme `flag{...}`, bigrammes anglais/français). Lis toujours les premières pistes, pas seulement la première.
- `brute xor` ne casse que les clés d'**un seul octet**.
- Pas (encore) de RSA, AES, Playfair, XOR multi-octets, ni de cassage de hash.

## Développement

```bash
python -m venv .venv && . .venv/bin/activate
pip install -e ".[dev]"
pytest
python -m build        # wheel + sdist (pip install build)
```

Ajouter un algo : écrire `enc` / `dec` dans `src/noxcrypt/algos.py`, puis l'ajouter à la liste `_ALGOS`.
Il apparaît tout seul dans l'interface, la CLI, `auto` et la recherche.

## Licence

MIT
