package pow import ( "crypto/rand" "encoding/hex" "time" ) // TestConfig returns a configuration suitable for testing func TestConfig() *Config { secret := make([]byte, 32) rand.Read(secret) return &Config{ DefaultDifficulty: 4, MaxDifficulty: 10, MinDifficulty: 3, ChallengeTTL: 5 * time.Minute, HMACSecret: secret, Resource: "quotes", LoadAdjustmentBits: 1, FailurePenaltyBits: 2, MaxFailurePenaltyBits: 6, } } // TestChallenge returns a valid challenge for testing func TestChallenge() *Challenge { return &Challenge{ Timestamp: time.Now().Unix(), Difficulty: 4, Resource: "quotes", Random: "a1b2c3d4e5f6", HMAC: "", // To be filled by generator } } // TestSolution returns a valid solution for testing func TestSolution() *Solution { return &Solution{ Challenge: *TestChallenge(), Nonce: "42", } } // RandomHex generates a random hex string of given length func RandomHex(length int) string { bytes := make([]byte, length/2) rand.Read(bytes) return hex.EncodeToString(bytes) } // ExpiredChallenge returns a challenge that has expired func ExpiredChallenge() *Challenge { challenge := TestChallenge() challenge.Timestamp = time.Now().Add(-10 * time.Minute).Unix() return challenge } // FutureChallenge returns a challenge with future timestamp func FutureChallenge() *Challenge { challenge := TestChallenge() challenge.Timestamp = time.Now().Add(10 * time.Minute).Unix() return challenge }