Skip to content

Commit

Permalink
v2-beta (#40)
Browse files Browse the repository at this point in the history
  • Loading branch information
cristaloleg authored May 6, 2020
1 parent 1c77c89 commit 24f2d14
Show file tree
Hide file tree
Showing 29 changed files with 549 additions and 950 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ go get github.com/cristalhq/jwt
```go
key := []byte(`secret`)
signer, errSigner := jwt.NewHS256(key)
builder := jwt.NewTokenBuilder(signer)
builder := jwt.NewBuilder(signer)

claims := &jwt.StandardClaims{
Audience: []string{"admin"},
Expand All @@ -39,7 +39,7 @@ raw := token.Raw() // JWT signed token
errVerify := signer.Verify(token.Payload(), token.Signature())
```

Also see examples: [build](https://github.com/cristalhq/jwt/blob/master/example_build_test.go), [parse](https://github.com/cristalhq/jwt/blob/master/example_parse_test.go), [validate](https://github.com/cristalhq/jwt/blob/master/example_validate_test.go).
Also see examples: [build](https://github.com/cristalhq/jwt/blob/master/example_build_test.go), [parse](https://github.com/cristalhq/jwt/blob/master/example_parse_test.go).

## Documentation

Expand Down
7 changes: 7 additions & 0 deletions algo.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,13 @@ import (
_ "crypto/sha512" // to register a hash
)

// Signer used to sign and verify tokens.
type Signer interface {
Algorithm() Algorithm
Sign(payload []byte) ([]byte, error)
Verify(payload, signature []byte) error
}

// Algorithm for signing and verifying.
type Algorithm string

Expand Down
22 changes: 11 additions & 11 deletions algo_eddsa_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,39 +39,39 @@ var ed25519Public = ed25519.PublicKey([]byte{
})

func TestEdDSA(t *testing.T) {
f := func(signer Signer, claims BinaryMarshaler) {
f := func(signer Signer, claims interface{}) {
t.Helper()

tokenBuilder := NewTokenBuilder(signer)
tokenBuilder := NewBuilder(signer)
token, err := tokenBuilder.Build(claims)
if err != nil {
t.Errorf("want nil, got %#v", err)
}

err = signer.Verify(token.Payload(), token.Signature())
if err != nil {
t.Errorf("want no err, got: `%v`", err)
t.Errorf("want no err, got: %#v", err)
}
}

f(
getSigner(NewEdDSA(ed25519Public, ed25519Private)),
mustSigner(NewEdDSA(ed25519Public, ed25519Private)),
&StandardClaims{},
)

f(
getSigner(NewEdDSA(ed25519Public, ed25519Private)),
mustSigner(NewEdDSA(ed25519Public, ed25519Private)),
&customClaims{
TestField: "foo",
},
)
}

func TestEdDSA_InvalidSignature(t *testing.T) {
f := func(signer, verifier Signer, claims BinaryMarshaler) {
f := func(signer, verifier Signer, claims interface{}) {
t.Helper()

tokenBuilder := NewTokenBuilder(signer)
tokenBuilder := NewBuilder(signer)
token, err := tokenBuilder.Build(claims)
if err != nil {
t.Errorf("want nil, got %#v", err)
Expand All @@ -84,14 +84,14 @@ func TestEdDSA_InvalidSignature(t *testing.T) {
}

f(
getSigner(NewEdDSA(ed25519Public, ed25519Private2)),
getSigner(NewEdDSA(ed25519Public, ed25519Private)),
mustSigner(NewEdDSA(ed25519Public, ed25519Private2)),
mustSigner(NewEdDSA(ed25519Public, ed25519Private)),
&StandardClaims{},
)

f(
getSigner(NewEdDSA(ed25519Public, ed25519Private2)),
getSigner(NewEdDSA(ed25519Public, ed25519Private)),
mustSigner(NewEdDSA(ed25519Public, ed25519Private2)),
mustSigner(NewEdDSA(ed25519Public, ed25519Private)),
&customClaims{
TestField: "foo",
},
Expand Down
46 changes: 23 additions & 23 deletions algo_es_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,56 +42,56 @@ func init() {
}

func TestES256_WithValidSignature(t *testing.T) {
f := func(signer Signer, claims BinaryMarshaler) {
f := func(signer Signer, claims interface{}) {
t.Helper()

tokenBuilder := NewTokenBuilder(signer)
tokenBuilder := NewBuilder(signer)
token, _ := tokenBuilder.Build(claims)

err := signer.Verify(token.Payload(), token.Signature())
if err != nil {
t.Errorf("want no err, got: `%v`", err)
t.Errorf("want no err, got: %#v", err)
}
}

f(
getSigner(NewES256(ecdsaPublicKey256, ecdsaPrivateKey256)),
mustSigner(NewES256(ecdsaPublicKey256, ecdsaPrivateKey256)),
&StandardClaims{},
)
f(
getSigner(NewES384(ecdsaPublicKey384, ecdsaPrivateKey384)),
mustSigner(NewES384(ecdsaPublicKey384, ecdsaPrivateKey384)),
&StandardClaims{},
)
f(
getSigner(NewES512(ecdsaPublicKey521, ecdsaPrivateKey521)),
mustSigner(NewES512(ecdsaPublicKey521, ecdsaPrivateKey521)),
&StandardClaims{},
)

f(
getSigner(NewES256(ecdsaPublicKey256, ecdsaPrivateKey256)),
mustSigner(NewES256(ecdsaPublicKey256, ecdsaPrivateKey256)),
&customClaims{
TestField: "foo",
},
)
f(
getSigner(NewES384(ecdsaPublicKey384, ecdsaPrivateKey384)),
mustSigner(NewES384(ecdsaPublicKey384, ecdsaPrivateKey384)),
&customClaims{
TestField: "bar",
},
)
f(
getSigner(NewES512(ecdsaPublicKey521, ecdsaPrivateKey521)),
mustSigner(NewES512(ecdsaPublicKey521, ecdsaPrivateKey521)),
&customClaims{
TestField: "baz",
},
)
}

func TestES384_WithInvalidSignature(t *testing.T) {
f := func(signer, verifier Signer, claims BinaryMarshaler) {
f := func(signer, verifier Signer, claims interface{}) {
t.Helper()

tokenBuilder := NewTokenBuilder(signer)
tokenBuilder := NewBuilder(signer)
token, _ := tokenBuilder.Build(claims)

err := verifier.Verify(token.Payload(), token.Signature())
Expand All @@ -100,38 +100,38 @@ func TestES384_WithInvalidSignature(t *testing.T) {
}
}
f(
getSigner(NewES256(ecdsaPublicKey256, ecdsaPrivateKey256)),
getSigner(NewES256(ecdsaOtherPublicKey256, ecdsaOtherPrivateKey256)),
mustSigner(NewES256(ecdsaPublicKey256, ecdsaPrivateKey256)),
mustSigner(NewES256(ecdsaOtherPublicKey256, ecdsaOtherPrivateKey256)),
&StandardClaims{},
)
f(
getSigner(NewES384(ecdsaPublicKey384, ecdsaPrivateKey384)),
getSigner(NewES384(ecdsaOtherPublicKey384, ecdsaOtherPrivateKey384)),
mustSigner(NewES384(ecdsaPublicKey384, ecdsaPrivateKey384)),
mustSigner(NewES384(ecdsaOtherPublicKey384, ecdsaOtherPrivateKey384)),
&StandardClaims{},
)
f(
getSigner(NewES512(ecdsaPublicKey521, ecdsaPrivateKey521)),
getSigner(NewES512(ecdsaOtherPublicKey521, ecdsaOtherPrivateKey521)),
mustSigner(NewES512(ecdsaPublicKey521, ecdsaPrivateKey521)),
mustSigner(NewES512(ecdsaOtherPublicKey521, ecdsaOtherPrivateKey521)),
&StandardClaims{},
)

f(
getSigner(NewES256(ecdsaPublicKey256, ecdsaPrivateKey256)),
getSigner(NewES256(ecdsaOtherPublicKey256, ecdsaOtherPrivateKey256)),
mustSigner(NewES256(ecdsaPublicKey256, ecdsaPrivateKey256)),
mustSigner(NewES256(ecdsaOtherPublicKey256, ecdsaOtherPrivateKey256)),
&customClaims{
TestField: "foo",
},
)
f(
getSigner(NewES384(ecdsaPublicKey384, ecdsaPrivateKey384)),
getSigner(NewES384(ecdsaOtherPublicKey384, ecdsaOtherPrivateKey384)),
mustSigner(NewES384(ecdsaPublicKey384, ecdsaPrivateKey384)),
mustSigner(NewES384(ecdsaOtherPublicKey384, ecdsaOtherPrivateKey384)),
&customClaims{
TestField: "bar",
},
)
f(
getSigner(NewES512(ecdsaPublicKey521, ecdsaPrivateKey521)),
getSigner(NewES512(ecdsaOtherPublicKey521, ecdsaOtherPrivateKey521)),
mustSigner(NewES512(ecdsaPublicKey521, ecdsaPrivateKey521)),
mustSigner(NewES512(ecdsaOtherPublicKey521, ecdsaOtherPrivateKey521)),
&customClaims{
TestField: "baz",
},
Expand Down
46 changes: 23 additions & 23 deletions algo_hs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,58 +5,58 @@ import (
)

func TestHMAC(t *testing.T) {
f := func(signer Signer, claims BinaryMarshaler) {
f := func(signer Signer, claims interface{}) {
t.Helper()

tokenBuilder := NewTokenBuilder(signer)
tokenBuilder := NewBuilder(signer)
token, err := tokenBuilder.Build(claims)
if err != nil {
t.Errorf("want nil, got %#v", err)
}

err = signer.Verify(token.Payload(), token.Signature())
if err != nil {
t.Errorf("want no err, got: `%v`", err)
t.Errorf("want no err, got: %#v", err)
}
}
f(
getSigner(NewHS256([]byte("key1"))),
mustSigner(NewHS256([]byte("key1"))),
&StandardClaims{},
)
f(
getSigner(NewHS384([]byte("key2"))),
mustSigner(NewHS384([]byte("key2"))),
&StandardClaims{},
)
f(
getSigner(NewHS512([]byte("key3"))),
mustSigner(NewHS512([]byte("key3"))),
&StandardClaims{},
)

f(
getSigner(NewHS256([]byte("key1"))),
mustSigner(NewHS256([]byte("key1"))),
&customClaims{
TestField: "foo",
},
)
f(
getSigner(NewHS384([]byte("key2"))),
mustSigner(NewHS384([]byte("key2"))),
&customClaims{
TestField: "bar",
},
)
f(
getSigner(NewHS512([]byte("key3"))),
mustSigner(NewHS512([]byte("key3"))),
&customClaims{
TestField: "baz",
},
)
}

func TestHMAC_InvalidSignature(t *testing.T) {
f := func(signer, verifier Signer, claims BinaryMarshaler) {
f := func(signer, verifier Signer, claims interface{}) {
t.Helper()

tokenBuilder := NewTokenBuilder(signer)
tokenBuilder := NewBuilder(signer)
token, err := tokenBuilder.Build(claims)
if err != nil {
t.Errorf("want nil, got %#v", err)
Expand All @@ -68,38 +68,38 @@ func TestHMAC_InvalidSignature(t *testing.T) {
}
}
f(
getSigner(NewHS256([]byte("key1"))),
getSigner(NewHS256([]byte("1key"))),
mustSigner(NewHS256([]byte("key1"))),
mustSigner(NewHS256([]byte("1key"))),
&StandardClaims{},
)
f(
getSigner(NewHS384([]byte("key2"))),
getSigner(NewHS384([]byte("2key"))),
mustSigner(NewHS384([]byte("key2"))),
mustSigner(NewHS384([]byte("2key"))),
&StandardClaims{},
)
f(
getSigner(NewHS512([]byte("key3"))),
getSigner(NewHS512([]byte("3key"))),
mustSigner(NewHS512([]byte("key3"))),
mustSigner(NewHS512([]byte("3key"))),
&StandardClaims{},
)

f(
getSigner(NewHS256([]byte("key1"))),
getSigner(NewHS256([]byte("1key"))),
mustSigner(NewHS256([]byte("key1"))),
mustSigner(NewHS256([]byte("1key"))),
&customClaims{
TestField: "foo",
},
)
f(
getSigner(NewHS384([]byte("key2"))),
getSigner(NewHS384([]byte("2key"))),
mustSigner(NewHS384([]byte("key2"))),
mustSigner(NewHS384([]byte("2key"))),
&customClaims{
TestField: "bar",
},
)
f(
getSigner(NewHS512([]byte("key3"))),
getSigner(NewHS512([]byte("3key"))),
mustSigner(NewHS512([]byte("key3"))),
mustSigner(NewHS512([]byte("3key"))),
&customClaims{
TestField: "baz",
},
Expand Down
Loading

0 comments on commit 24f2d14

Please sign in to comment.