Panneau lateral masquable et redimensionnable, plus de types de cles

Le panneau des sessions etait declare Movable|Floatable mais pas Closable : il
n'avait donc aucun bouton de fermeture et ne pouvait pas etre masque. Sa largeur
plancher etait par ailleurs imposee par son contenu, ce qui empechait de le
retrecir vraiment.
- ajout de DockWidgetClosable, largeur minimale ramenee a 120 px
- bascule par F9, par le menu Affichage, ou par la croix du panneau, les trois
  restant synchronises
- separateur elargi a 6 px et surligne au survol, pour etre attrape facilement

Generation de cles : ajout d'ECDSA sur les courbes NIST P-256, P-384 et P-521,
en plus d'Ed25519 et RSA. Ed25519 reste le choix par defaut : c'est aussi une
courbe elliptique (Curve25519), plus courte et plus rapide, et sans les
interrogations qui entourent le choix des parametres des courbes NIST. Chaque
type est verifie relisible par paramiko, donc utilisable pour se connecter.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
snoopy
2026-09-04 12:08:28 +02:00
parent 9d346d76ed
commit 1f9aedfdb2
6 changed files with 135 additions and 6 deletions

View File

@@ -9,7 +9,7 @@ from pathlib import Path
import paramiko
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import rsa, ed25519
from cryptography.hazmat.primitives.asymmetric import rsa, ed25519, ec
from app.paths import DATA_DIR # noqa: E402 (chemins valables aussi en .exe)
KEYS_FILE = DATA_DIR / "keys.json"
@@ -17,6 +17,26 @@ DEFAULT_KEY_DIR = DATA_DIR / "keys"
KEY_TYPE_ED25519 = "ed25519"
KEY_TYPE_RSA = "rsa"
KEY_TYPE_ECDSA_P256 = "ecdsa-p256"
KEY_TYPE_ECDSA_P384 = "ecdsa-p384"
KEY_TYPE_ECDSA_P521 = "ecdsa-p521"
# Courbes elliptiques NIST utilisees par ECDSA. Ed25519 est aussi une courbe
# elliptique (Curve25519) et reste le choix recommande : plus court, plus rapide,
# et sans les interrogations qui entourent le choix des parametres des courbes NIST.
ECDSA_CURVES = {
KEY_TYPE_ECDSA_P256: ec.SECP256R1,
KEY_TYPE_ECDSA_P384: ec.SECP384R1,
KEY_TYPE_ECDSA_P521: ec.SECP521R1,
}
KEY_TYPE_LABELS = {
KEY_TYPE_ED25519: "Ed25519 (recommande)",
KEY_TYPE_ECDSA_P256: "ECDSA — courbe NIST P-256",
KEY_TYPE_ECDSA_P384: "ECDSA — courbe NIST P-384",
KEY_TYPE_ECDSA_P521: "ECDSA — courbe NIST P-521",
KEY_TYPE_RSA: "RSA (compatibilite maximale)",
}
@dataclass
@@ -97,6 +117,8 @@ class KeyManager:
if key_type == KEY_TYPE_ED25519:
private_key = ed25519.Ed25519PrivateKey.generate()
elif key_type in ECDSA_CURVES:
private_key = ec.generate_private_key(ECDSA_CURVES[key_type]())
else:
private_key = rsa.generate_private_key(public_exponent=65537, key_size=rsa_bits)