...
1 package jwt
2
3 import (
4 "sync"
5 )
6
7 var signingMethods = map[string]func() SigningMethod{}
8 var signingMethodLock = new(sync.RWMutex)
9
10
11
12
13
14 type SigningMethod interface {
15 Verify(signingString string, sig []byte, key interface{}) error
16 Sign(signingString string, key interface{}) ([]byte, error)
17 Alg() string
18 }
19
20
21
22 func RegisterSigningMethod(alg string, f func() SigningMethod) {
23 signingMethodLock.Lock()
24 defer signingMethodLock.Unlock()
25
26 signingMethods[alg] = f
27 }
28
29
30 func GetSigningMethod(alg string) (method SigningMethod) {
31 signingMethodLock.RLock()
32 defer signingMethodLock.RUnlock()
33
34 if methodF, ok := signingMethods[alg]; ok {
35 method = methodF()
36 }
37 return
38 }
39
40
41 func GetAlgorithms() (algs []string) {
42 signingMethodLock.RLock()
43 defer signingMethodLock.RUnlock()
44
45 for alg := range signingMethods {
46 algs = append(algs, alg)
47 }
48 return
49 }
50
View as plain text