-
Notifications
You must be signed in to change notification settings - Fork 7
/
resolver.go
57 lines (49 loc) · 1.19 KB
/
resolver.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package jwtutil
import (
"github.com/getevo/evo/lib/jwt"
"github.com/getevo/evo/lib/jwt/internal"
)
// Resolver is an Algorithm resolver.
type Resolver struct {
New func(jwt.Header) (jwt.Algorithm, error)
alg jwt.Algorithm
}
// ErrNilAlg is the error for when an algorithm can't be resolved.
var ErrNilAlg = internal.NewError("algorithm is nil")
// Name returns an Algorithm's name.
func (rv *Resolver) Name() string {
if rv.alg == nil {
return ""
}
return rv.alg.Name()
}
// Resolve sets an Algorithm based on a JOSE Header.
func (rv *Resolver) Resolve(hd jwt.Header) error {
if rv.alg != nil {
return nil
}
if rv.New == nil {
return ErrNilAlg
}
alg, err := rv.New(hd)
if err != nil {
return err
}
if alg == nil {
return ErrNilAlg
}
rv.alg = alg
return nil
}
// Sign returns an error since Resolver doesn't support signing.
func (rv *Resolver) Sign(headerPayload []byte) ([]byte, error) {
return rv.alg.Sign(headerPayload)
}
// Size returns an Algorithm's size.
func (rv *Resolver) Size() int {
return rv.alg.Size()
}
// Verify resolves and Algorithm and verifies using it.
func (rv *Resolver) Verify(headerPayload, sig []byte) error {
return rv.alg.Verify(headerPayload, sig)
}