Documentation
¶
Overview ¶
Package hashcache provides a size-bounded, TTL-evicting cache of security scan results keyed on the SHA-256 digest of scanned content. It is a self-contained leaf (stdlib only, no Culvert coupling) extracted from the flat package main per ADR-0002.
Avoids redundant ClamAV / YARA scans by caching the outcome of each scan keyed on the SHA-256 digest of the scanned content. The same executable or document delivered from multiple hosts is therefore scanned only once per TTL window, dramatically reducing CPU load on busy proxies.
Design:
- Fixed-capacity map with TTL expiry.
- On capacity overflow: expired entries are evicted first; if still full, ~25 % of entries are dropped (simple, avoids per-entry LRU bookkeeping).
- All operations are mutex-protected; hit/miss counters use atomic int64.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type HashCache ¶
type HashCache struct {
// contains filtered or unexported fields
}
HashCache is a size-bounded, TTL-evicting cache of SHA-256 scan results.
func New ¶
New returns a HashCache with the given capacity and TTL. Sensible defaults are used when size ≤ 0 or ttl ≤ 0.
func (*HashCache) Evict ¶
Evict removes a specific hash from the cache. Returns true if the entry existed (regardless of expiry).
func (*HashCache) Get ¶
func (c *HashCache) Get(hash string) (ScanCacheResult, bool)
Get retrieves a cached result for the given hash. Returns (result, true) on a valid, non-expired cache hit.
func (*HashCache) Set ¶
func (c *HashCache) Set(hash string, result ScanCacheResult)
Set stores a scan result under the given content hash.