mirror of
https://github.com/ScuroNeko/mtg.git
synced 2026-08-31 11:54:01 +03:00
Base prevention of replay attacks on proxy
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
package antireplay
|
||||
|
||||
import (
|
||||
"github.com/allegro/bigcache"
|
||||
"github.com/juju/errors"
|
||||
|
||||
"github.com/9seconds/mtg/config"
|
||||
)
|
||||
|
||||
// Cache defines storage for obfuscated2 handshake frames.
|
||||
type Cache struct {
|
||||
cache *bigcache.BigCache
|
||||
}
|
||||
|
||||
func (a Cache) Add(frame []byte) {
|
||||
a.cache.Set(string(frame), nil) // nolint: errcheck
|
||||
}
|
||||
|
||||
func (a Cache) Has(frame []byte) bool {
|
||||
_, err := a.cache.Get(string(frame))
|
||||
|
||||
return err == nil
|
||||
}
|
||||
|
||||
func NewCache(config *config.Config) (Cache, error) {
|
||||
cache, err := bigcache.NewBigCache(bigcache.Config{
|
||||
Shards: 1024,
|
||||
LifeWindow: config.AntiReplayEvictionTime,
|
||||
Hasher: hasher{},
|
||||
HardMaxCacheSize: config.AntiReplayMaxSize,
|
||||
})
|
||||
if err != nil {
|
||||
return Cache{}, errors.Annotate(err, "Cannot make cache")
|
||||
}
|
||||
|
||||
return Cache{cache}, nil
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package antireplay
|
||||
|
||||
import "github.com/cespare/xxhash"
|
||||
|
||||
type hasher struct{}
|
||||
|
||||
func (h hasher) Sum64(value string) uint64 {
|
||||
return xxhash.Sum64String(value)
|
||||
}
|
||||
Reference in New Issue
Block a user