package basicauth
import (
)
const hashSize = 64
var _ http.Handler = (*StaticHandler)(nil)
type StaticHandler struct {
Handler http.Handler
UserHash []byte
PassHash []byte
}
func ( http.Handler, , string) *StaticHandler {
:= &StaticHandler{
Handler: ,
UserHash: make([]byte, hashSize),
PassHash: make([]byte, hashSize),
}
sha3.ShakeSum256(.UserHash, []byte())
sha3.ShakeSum256(.PassHash, []byte())
return
}
func ( *StaticHandler) ( http.ResponseWriter, *http.Request) {
, , := .BasicAuth()
var int
if {
var , [hashSize]byte
sha3.ShakeSum256([:], []byte())
sha3.ShakeSum256([:], []byte())
+= subtle.ConstantTimeCompare(.UserHash, [:])
+= subtle.ConstantTimeCompare(.PassHash, [:])
}
if ! || != 2 {
.Header().Add("WWW-Authenticate", "Basic")
.WriteHeader(http.StatusUnauthorized)
return
}
.Handler.ServeHTTP(, )
}