jwt: errors.New("TODO x") -> actual errors
diff --git a/.tags b/.tags
index 10d8498..bb68421 100644
--- a/.tags
+++ b/.tags
@@ -5,3 +5,4 @@
 !_TAG_PROGRAM_URL	http://ctags.sourceforge.net	/official site/
 !_TAG_PROGRAM_VERSION	5.8	//
 onChange	/home/eric/gopath/src/github.com/SermoDigital/jose/cover.html	/^		function onChange() {$/;"	f
+onChange	/home/eric/gopath/src/github.com/SermoDigital/jose/jws/cover.html	/^		function onChange() {$/;"	f
diff --git a/jwt/errors.go b/jwt/errors.go
index 9271d73..96b240d 100644
--- a/jwt/errors.go
+++ b/jwt/errors.go
@@ -10,4 +10,19 @@
 	// ErrTokenNotYetValid is return when time.Now().Unix() is before
 	// the token's "nbf" claim.
 	ErrTokenNotYetValid = errors.New("token is not yet valid")
+
+	// ErrInvalidISSClaim means the "iss" claim is invalid.
+	ErrInvalidISSClaim = errors.New("claim \"iss\" is invalid")
+
+	// ErrInvalidSUBClaim means the "sub" claim is invalid.
+	ErrInvalidSUBClaim = errors.New("claim \"sub\" is invalid")
+
+	// ErrInvalidIATClaim means the "iat" claim is invalid.
+	ErrInvalidIATClaim = errors.New("claim \"iat\" is invalid")
+
+	// ErrInvalidJTIClaim means the "jti" claim is invalid.
+	ErrInvalidJTIClaim = errors.New("claim \"jti\" is invalid")
+
+	// ErrInvalidAUDClaim means the "aud" claim is invalid.
+	ErrInvalidAUDClaim = errors.New("claim \"aud\" is invalid")
 )
diff --git a/jwt/jwt.go b/jwt/jwt.go
index 172e2f7..1c64ef7 100644
--- a/jwt/jwt.go
+++ b/jwt/jwt.go
@@ -1,7 +1,6 @@
 package jwt
 
 import (
-	"errors"
 	"fmt"
 
 	"github.com/SermoDigital/jose/crypto"
@@ -61,23 +60,23 @@
 	if iss, ok := v.Expected.Issuer(); ok &&
 		j.Claims().Get("iss") != iss {
 		fmt.Println(iss, j.Claims().Get("iss"))
-		return errors.New("TODO 1")
+		return ErrInvalidISSClaim
 	}
 	if sub, ok := v.Expected.Subject(); ok &&
 		j.Claims().Get("sub") != sub {
-		return errors.New("TODO 2")
+		return ErrInvalidSUBClaim
 	}
 	if iat, ok := v.Expected.IssuedAt(); ok &&
 		j.Claims().Get("iat") != iat {
-		return errors.New("TODO 3")
+		return ErrInvalidIATClaim
 	}
 	if jti, ok := v.Expected.JWTID(); ok &&
 		j.Claims().Get("jti") != jti {
-		return errors.New("TODO 4")
+		return ErrInvalidJTIClaim
 	}
 	if aud, ok := v.Expected.Audience(); ok &&
 		!eq(j.Claims().Get("aud"), aud) {
-		return errors.New("TODO 5")
+		return ErrInvalidAUDClaim
 	}
 
 	if v.Fn != nil {