@@ -11,25 +11,35 @@ import (
11
11
12
12
var SecretName = keystore .KeyName ("jwt-secret.jwt" )
13
13
14
- // secret returns the node's JWT secret if it exists, or generates
15
- // and saves a new one if it does not.
16
- func secret (ks keystore.Keystore ) (jwt.Signer , error ) {
17
- // if key already exists, use it
18
- if pk , ok := existing (ks ); ok {
19
- return jwt .NewSignerHS (jwt .HS256 , pk )
14
+ // jwtSignerAndVerifier returns the node's JWT signer and verifier for a saved key,
15
+ // or generates and saves a new one if it does not.
16
+ func jwtSignerAndVerifier (ks keystore.Keystore ) (jwt.Signer , jwt.Verifier , error ) {
17
+ key , ok := existing (ks )
18
+ if ! ok {
19
+ // otherwise, generate and save new priv key
20
+ sk , err := io .ReadAll (io .LimitReader (rand .Reader , 32 ))
21
+ if err != nil {
22
+ return nil , nil , err
23
+ }
24
+
25
+ // save key
26
+ err = ks .Put (SecretName , keystore.PrivKey {Body : sk })
27
+ if err != nil {
28
+ return nil , nil , err
29
+ }
30
+ key = sk
20
31
}
21
- // otherwise, generate and save new priv key
22
- sk , err := io . ReadAll ( io . LimitReader ( rand . Reader , 32 ) )
32
+
33
+ signer , err := jwt . NewSignerHS ( jwt . HS256 , key )
23
34
if err != nil {
24
- return nil , err
35
+ return nil , nil , err
25
36
}
26
- // save key
27
- err = ks . Put ( SecretName , keystore. PrivKey { Body : sk } )
37
+
38
+ verifier , err := jwt . NewVerifierHS ( jwt . HS256 , key )
28
39
if err != nil {
29
- return nil , err
40
+ return nil , nil , err
30
41
}
31
-
32
- return jwt .NewSignerHS (jwt .HS256 , sk )
42
+ return signer , verifier , nil
33
43
}
34
44
35
45
func existing (ks keystore.Keystore ) ([]byte , bool ) {
0 commit comments