feat(datenbank): Datenmodell mit Datenbankregeln und Seed (#003)
Alle Modelle fuer die fuenf Phasen in einer Migration, damit spaetere Phasen keine Umbauten an Kerntabellen brauchen. Was auch an der Service-Schicht vorbei gelten muss, steht als CHECK, partieller Index oder Trigger in der Datenbank: Personen-Keys ohne Private Key, genau ein Instanz-Deployment-Key, ein vertrauter Host-Key je Algorithmus, shell-sichere Zielbenutzer und Pfade. Das Protokoll ist append-only und per Hash-Kette verbunden; den Hash berechnet ein Trigger, damit keine Zeile ohne Verkettung entstehen kann (#005 baut darauf auf). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
import { hash, verify } from "@node-rs/argon2";
|
||||
|
||||
/**
|
||||
* Passwort-Hashing fuer den Notfall-Admin (#004): argon2id mit den OWASP-Empfehlungen
|
||||
* (19 MiB, 2 Durchlaeufe, 1 Thread).
|
||||
*/
|
||||
const PARAMETER = { memoryCost: 19456, timeCost: 2, parallelism: 1 } as const;
|
||||
|
||||
export const PASSWORT_MINDESTLAENGE = 16;
|
||||
|
||||
export async function passwortHashen(passwort: string): Promise<string> {
|
||||
return hash(passwort, PARAMETER);
|
||||
}
|
||||
|
||||
/** Wirft nie – ein kaputter Hash ist schlicht „falsch“. */
|
||||
export async function passwortPruefen(hashWert: string, passwort: string): Promise<boolean> {
|
||||
try {
|
||||
return await verify(hashWert, passwort);
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user