Add PoW challenge structure and types
This commit is contained in:
parent
501e5d8bc3
commit
ba0df856fe
53
internal/pow/types.go
Normal file
53
internal/pow/types.go
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
package pow
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"time"
|
||||
)
|
||||
|
||||
// PoW package specific errors
|
||||
var (
|
||||
ErrInvalidHMAC = errors.New("challenge HMAC signature is invalid")
|
||||
ErrExpiredChallenge = errors.New("challenge has expired")
|
||||
ErrInvalidSolution = errors.New("proof of work solution is invalid")
|
||||
ErrInvalidDifficulty = errors.New("difficulty level is invalid")
|
||||
ErrMalformedChallenge = errors.New("challenge format is malformed")
|
||||
)
|
||||
|
||||
// Challenge represents a Proof of Work challenge with HMAC authentication
|
||||
type Challenge struct {
|
||||
Timestamp int64 `json:"timestamp"`
|
||||
Difficulty int `json:"difficulty"`
|
||||
Resource string `json:"resource"`
|
||||
Random string `json:"random"`
|
||||
HMAC string `json:"hmac"`
|
||||
}
|
||||
|
||||
// Solution represents a client's solution to a PoW challenge
|
||||
type Solution struct {
|
||||
Challenge Challenge `json:"challenge"`
|
||||
Nonce string `json:"nonce"`
|
||||
}
|
||||
|
||||
// ChallengeRequest represents a request for a new challenge
|
||||
type ChallengeRequest struct{}
|
||||
|
||||
// SolutionRequest represents a client's submission of a solved challenge
|
||||
type SolutionRequest struct {
|
||||
Challenge Challenge `json:"challenge"`
|
||||
Nonce string `json:"nonce"`
|
||||
}
|
||||
|
||||
// Config holds configuration for the PoW system
|
||||
type Config struct {
|
||||
DefaultDifficulty int // Default difficulty in bits (e.g., 4)
|
||||
MaxDifficulty int // Maximum allowed difficulty (e.g., 10)
|
||||
MinDifficulty int // Minimum allowed difficulty (e.g., 3)
|
||||
ChallengeTTL time.Duration // Time-to-live for challenges (e.g., 5 minutes)
|
||||
HMACSecret []byte // Secret key for HMAC signing
|
||||
Resource string // Resource identifier (e.g., "quotes")
|
||||
LoadAdjustmentBits int // Extra difficulty bits when server under load
|
||||
FailurePenaltyBits int // Extra difficulty bits per failure group
|
||||
MaxFailurePenaltyBits int // Maximum failure penalty bits
|
||||
}
|
||||
|
||||
Loading…
Reference in a new issue