model/auth_cache_integrity.go
Rama main · réplica de lectura del repositorio original.
package model
import (
"crypto/hmac"
"time"
"github.com/QuantumNous/new-api/common"
)
// authCacheMAC binds cache metadata to its purpose and Redis key. Only
// database snapshots or server-created session states may be signed.
func authCacheMAC(key string, metadata any) (string, error) {
payload, err := common.Marshal(metadata)
if err != nil {
return "", err
}
return common.GenerateHMACWithKey([]byte("auth-cache-v1:"+common.CryptoSecret), key+"\x00"+string(payload)), nil
}
func validAuthCacheMAC(expected, actual string, expiresAt int64) bool {
return expiresAt > time.Now().UnixMilli() && hmac.Equal([]byte(expected), []byte(actual))
}