// Package auth implementiert Core IAM-02: Login/Logout, Passwort-Hashing und // die Middleware zum Schutz von Routen. Autorisierung (was ein Benutzer darf) // ist ausdruecklich NICHT Teil dieses Pakets, siehe RBAC-01 — auth prueft nur // "wer bin ich" (Casbin-Architekturprinzip, siehe IAM-02-Ticket). package auth import "golang.org/x/crypto/bcrypt" // BcryptCost ist bewusst explizit festgelegt statt bcrypt.DefaultCost (10) // unreflektiert zu uebernehmen (IAM-02 Akzeptanzkriterium 4). Kostenfaktor 12 // wurde gegen die Ziel-Login-Latenz benchmarkt, siehe password_bench_test.go // und den Pruefungs-Eintrag in der Commit-Nachricht. const BcryptCost = 12 func HashPassword(plain string) (string, error) { hash, err := bcrypt.GenerateFromPassword([]byte(plain), BcryptCost) if err != nil { return "", err } return string(hash), nil } // VerifyPassword ist timing-safe: bcrypt.CompareHashAndPassword vergleicht // konstant in der Zeit bzgl. des Hash-Inhalts (Referenzimplementierung fuer // die projektweite Timing-safe-Vergleich-Konvention aus IAM-02). func VerifyPassword(hash, plain string) bool { return bcrypt.CompareHashAndPassword([]byte(hash), []byte(plain)) == nil }