Metadata-Version: 2.4
Name: kveynar
Version: 0.1.1
Summary: Kveynar - chiffre authentifie original (portage Python), par Memet Jakupi.
Author: Memet Jakupi
License: MIT
Project-URL: Homepage, https://github.com/uScyt/kveynar
Project-URL: Repository, https://github.com/uScyt/kveynar
Keywords: cipher,encryption,aead,obfuscation,kveynar
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Dynamic: license-file

# Kveynar - portage Python

[![CI](https://github.com/uScyt/kveynar/actions/workflows/ci.yml/badge.svg)](https://github.com/uScyt/kveynar/actions/workflows/ci.yml)

**Auteur : Memet Jakupi** - chercheur en forensique numerique.

Portage Python **fidele** de l'implementation Rust de reference. Il reproduit
[`../rust/vectors/kat.json`](../rust/vectors/kat.json) **octet pour octet** (test
d'interoperabilite) : un message chiffre par Rust se dechiffre par Python et inversement.

La specification commune est [`../rust/SPEC.md`](../rust/SPEC.md) ; l'analyse de securite
honnete est dans [`../rust/DESIGN.md`](../rust/DESIGN.md).

> ## Avertissement
> Chiffre maison a vocation educative / d'obfuscation / CTF. Renforce et teste, mais non
> audite publiquement. Ne pas l'utiliser seul face a un adversaire etatique.

> ## Note de performance
> Ce portage privilegie la **lisibilite**, pas la vitesse. Le KDF est *memory-hard* : au
> facteur par defaut (2^17 = 16 Mio) il est lent en Python pur. Pour des essais rapides,
> baissez le facteur memoire (`--mem 12` ou `with_work_factor(cle, 12)`). L'implementation
> Rust reste la version performante.

## Utilisation (bibliotheque)

```python
from kveynar import Kveynar

kv = Kveynar.with_work_factor("ma cle privee".encode(), 12)
c = kv.encrypt("Pershendetje, bote!".encode())
assert kv.decrypt(c).decode() == "Pershendetje, bote!"

# donnees associees, armure texte, obfuscation de source
kv.encrypt_with_ad(b"corps", b"entete-public")
kv.encrypt_armored(b"data")
kv.obfuscate_source("def f(): return 42")

# mode forteresse (cascade Gjarper + Bora, 100 % maison)
fort = Kveynar.fortress_with_work_factor("cle".encode(), 14)
```

| Methode | Description |
|---|---|
| `new(pass)` / `with_work_factor(pass, log2_mem)` | contexte (facteur **memoire** KDF) |
| `fortress(...)` / `fortress_with_work_factor(...)` / `set_cascade(bool)` | mode cascade |
| `encrypt` / `decrypt` (+ `_with_ad`) | conteneur binaire `.kvy` (AEAD) |
| `encrypt_with_params(pt, ad, kripa, fara)` | chiffrement deterministe (avance/tests) |
| `encrypt_armored` / `decrypt_armored` | sortie texte (armure Drita) |
| `obfuscate_source` / `deobfuscate_source` (+ `_bytes`) | obfuscation de code |

## Ligne de commande

```sh
python -m kveynar enc   -k "ma cle" --mem 14 secret.txt -o secret.kvy
python -m kveynar enc   -k "ma cle" --fortress secret.txt -o secret.kvy
python -m kveynar dec   -k "ma cle" secret.kvy -o secret.txt   # mode auto-detecte
python -m kveynar obf   -k "ma cle" app.py -o app.py.kvy
python -m kveynar deobf -k "ma cle" app.py.kvy -o app.py
```

Cle aussi via `--key-file <fichier>` ou la variable d'environnement `KVEYNAR_KEY`.

## Tests

```sh
# depuis la racine du depot
set PYTHONPATH=python   &  python -m unittest discover -s python/tests -t python   # Windows cmd
PYTHONPATH=python python -m unittest discover -s python/tests -t python            # bash
```

Le test `test_vectors.py` prouve l'**interoperabilite octet-pour-octet avec Rust**.

## Structure

```
python/
  kveynar/
    __init__.py     API publique (classe Kveynar)
    _u64.py         arithmetique 64 bits (mod 2^64)
    _consts.py      constantes (forge, IV, RC, ODD, rotations, alphabet Drita)
    _vala.py        permutation Vala + eponge
    _kdf.py         Celesi (KDF memory-hard, Mundimi)
    _gjarper.py     bloc primaire inversible
    _bora.py        second bloc (mode cascade)
    _cipher.py      mode operatoire + MAC Vula + conteneur
    _armor.py       armure base64 Drita
    _obfuscate.py   enveloppe d'obfuscation de source
    _rng.py         alea systeme (os.urandom)
    errors.py       exceptions KveynarError
    __main__.py     outil CLI
  tests/            test_vectors (KAT interop), roundtrip, tamper, nondeterminism
  examples/         basic, file_encrypt, obfuscate_source
  pyproject.toml
```

## Licence

MIT.
