49 lines
1.4 KiB
Go
49 lines
1.4 KiB
Go
package captcha
|
|
|
|
import "testing"
|
|
|
|
func TestChallengeTokenRoundTrip(t *testing.T) {
|
|
secret := []byte("s3cr3t")
|
|
tok := makeChallengeToken(secret, "abc123", nowMs()+60_000, 50, 32, 4)
|
|
claims := verifyChallengeToken(secret, tok)
|
|
if claims == nil {
|
|
t.Fatal("valid token rejected")
|
|
}
|
|
if claims.Nonce != "abc123" || claims.C != 50 || claims.S != 32 || claims.D != 4 {
|
|
t.Fatalf("bad claims: %+v", claims)
|
|
}
|
|
}
|
|
|
|
func TestChallengeTokenTamperAndExpiry(t *testing.T) {
|
|
secret := []byte("s3cr3t")
|
|
tok := makeChallengeToken(secret, "abc123", nowMs()+60_000, 50, 32, 4)
|
|
if verifyChallengeToken([]byte("wrong"), tok) != nil {
|
|
t.Error("token accepted under wrong secret")
|
|
}
|
|
if verifyChallengeToken(secret, tok+"x") != nil {
|
|
t.Error("tampered token accepted")
|
|
}
|
|
expired := makeChallengeToken(secret, "abc123", nowMs()-1, 50, 32, 4)
|
|
if verifyChallengeToken(secret, expired) != nil {
|
|
t.Error("expired token accepted")
|
|
}
|
|
}
|
|
|
|
func TestVerificationToken(t *testing.T) {
|
|
secret := []byte("s3cr3t")
|
|
vt, err := makeVerificationToken(secret, nowMs()+60_000)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !verifyVerificationToken(secret, vt) {
|
|
t.Error("valid verification token rejected")
|
|
}
|
|
if verifyVerificationToken([]byte("wrong"), vt) {
|
|
t.Error("verification token accepted under wrong secret")
|
|
}
|
|
expired, _ := makeVerificationToken(secret, nowMs()-1)
|
|
if verifyVerificationToken(secret, expired) {
|
|
t.Error("expired verification token accepted")
|
|
}
|
|
}
|