erste module drin.

zwischenstand: Architektur aktualisiert, TOFU implementiert,
This commit is contained in:
br committed 2026-10-01 22:22:13 +02:00
1 parent 9d5789c5d7
commit c8df9d7651
41 files changed
+6455 -36

No files matched your search

+44
View File
@@ -0,0 +1,44 @@
package auth
import (
"sync"
"time"
)
// nonceCache merkt sich verwendete Nonces, solange ihr Zeitstempel noch
// akzeptiert würde. Danach verhindert schon die Zeitprüfung jede
// Wiederverwendung, der Eintrag kann weg.
type nonceCache struct {
mu sync.Mutex
seen map[string]time.Time // Schlüssel+Nonce -> Ablauf
lastPurge time.Time
}
// add vermerkt nonce für key und meldet false, wenn sie schon bekannt ist.
func (c *nonceCache) add(key, nonce string, expires, now time.Time) bool {
c.mu.Lock()
defer c.mu.Unlock()
if c.seen == nil {
c.seen = map[string]time.Time{}
}
if now.Sub(c.lastPurge) > time.Minute {
for k, exp := range c.seen {
if !now.Before(exp) {
delete(c.seen, k)
}
}
c.lastPurge = now
}
id := key + "\x00" + nonce
if _, dup := c.seen[id]; dup {
return false
}
c.seen[id] = expires
return true
}
func (c *nonceCache) len() int {
c.mu.Lock()
defer c.mu.Unlock()
return len(c.seen)
}