53 lines
965 B
Go
53 lines
965 B
Go
package jwtutil
|
|
|
|
import (
|
|
"github.com/lestrrat-go/jwx/v2/jwa"
|
|
"github.com/lestrrat-go/jwx/v2/jwk"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
func NewKeySet(keys ...jwk.Key) (jwk.Set, error) {
|
|
set := jwk.NewSet()
|
|
|
|
for _, k := range keys {
|
|
if err := set.AddKey(k); err != nil {
|
|
return nil, errors.WithStack(err)
|
|
}
|
|
}
|
|
|
|
return set, nil
|
|
}
|
|
|
|
func NewSymmetricKey(secret []byte) (jwk.Key, error) {
|
|
key, err := jwk.FromRaw(secret)
|
|
if err != nil {
|
|
return nil, errors.WithStack(err)
|
|
}
|
|
|
|
if err := key.Set(jwk.AlgorithmKey, jwa.HS256); err != nil {
|
|
return nil, errors.WithStack(err)
|
|
}
|
|
|
|
return key, nil
|
|
}
|
|
|
|
func NewSymmetricKeySet(secrets ...[]byte) (jwk.Set, error) {
|
|
keys := make([]jwk.Key, len(secrets))
|
|
|
|
for idx, sec := range secrets {
|
|
key, err := NewSymmetricKey(sec)
|
|
if err != nil {
|
|
return nil, errors.WithStack(err)
|
|
}
|
|
|
|
keys[idx] = key
|
|
}
|
|
|
|
keySet, err := NewKeySet(keys...)
|
|
if err != nil {
|
|
return nil, errors.WithStack(err)
|
|
}
|
|
|
|
return keySet, nil
|
|
}
|