// Package hash provides secure hashing utilities for tokens and sensitive data. // These utilities are used to hash tokens before storing them as cache keys, // preventing token leakage through cache key inspection. package hash import ( "crypto/sha256" "encoding/hex" "github.com/awnumar/memguard" ) // HashToken creates a SHA-256 hash of a token for use as a cache key. // This prevents token leakage via cache key inspection. // The input token bytes are wiped after hashing. func HashToken(token string) string { tokenBytes := []byte(token) defer memguard.WipeBytes(tokenBytes) hash := sha256.Sum256(tokenBytes) return hex.EncodeToString(hash[:]) } // HashBytes creates a SHA-256 hash of byte data. // If wipeInput is true, the input bytes are wiped after hashing. func HashBytes(data []byte, wipeInput bool) string { if wipeInput { defer memguard.WipeBytes(data) } hash := sha256.Sum256(data) return hex.EncodeToString(hash[:]) } // HashTokenToBytes creates a SHA-256 hash and returns the raw bytes. // The input token bytes are wiped after hashing. func HashTokenToBytes(token string) []byte { tokenBytes := []byte(token) defer memguard.WipeBytes(tokenBytes) hash := sha256.Sum256(tokenBytes) result := make([]byte, len(hash)) copy(result, hash[:]) return result }