erste module drin.
zwischenstand: Architektur aktualisiert, TOFU implementiert,
This commit is contained in:
1 parent
9d5789c5d7
commit
c8df9d7651
41 files changed
+6455
-36
No files matched your search
@@ -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)
|
||||
}
|
||||
Reference in new issue
Block a user