Use channels to rate limit argon2

pull/4/head
maru 5 months ago
parent fbd4a60a4a
commit 1d54c1ad64
No known key found for this signature in database
GPG Key ID: 37689350E9CD0F0D

@ -2,7 +2,6 @@ package account
import ( import (
"regexp" "regexp"
"sync"
"golang.org/x/crypto/argon2" "golang.org/x/crypto/argon2"
) )
@ -18,18 +17,20 @@ const (
ArgonKeySize = 32 ArgonKeySize = 32
ArgonSaltSize = 16 ArgonSaltSize = 16
ArgonMaxInstances = 16
UUIDSize = 16 UUIDSize = 16
TokenSize = 32 TokenSize = 32
) )
var ( var (
isValidUsername = regexp.MustCompile(`^\w{1,16}$`).MatchString isValidUsername = regexp.MustCompile(`^\w{1,16}$`).MatchString
argonMtx sync.Mutex semaphore = make(chan bool, ArgonMaxInstances)
) )
func deriveArgon2IDKey(password, salt []byte) []byte { func deriveArgon2IDKey(password, salt []byte) []byte {
argonMtx.Lock() semaphore <- true
defer argonMtx.Unlock() defer func() { <-semaphore }()
return argon2.IDKey(password, salt, ArgonTime, ArgonMemory, ArgonThreads, ArgonKeySize) return argon2.IDKey(password, salt, ArgonTime, ArgonMemory, ArgonThreads, ArgonKeySize)
} }

Loading…
Cancel
Save