From e7d5a6073c232d9084eaaac609e7873d6bb788c1 Mon Sep 17 00:00:00 2001 From: Trong Huu Nguyen Date: Sat, 16 Oct 2021 10:28:49 +0200 Subject: [PATCH] refactor: add jwks pkg for generating jwk sets --- pkg/jwks/jwks.go | 49 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 pkg/jwks/jwks.go diff --git a/pkg/jwks/jwks.go b/pkg/jwks/jwks.go new file mode 100644 index 0000000..c285417 --- /dev/null +++ b/pkg/jwks/jwks.go @@ -0,0 +1,49 @@ +package jwks + +import ( + "crypto/rand" + "crypto/rsa" + + "github.com/lestrrat-go/jwx/jwa" + "github.com/lestrrat-go/jwx/jwk" +) + +type Pair struct { + Private jwk.Set + Public jwk.Set +} + +func NewJwksPair() (*Pair, error) { + privateKey, err := rsa.GenerateKey(rand.Reader, 2048) + if err != nil { + return nil, err + } + + key, err := jwk.New(privateKey) + if err != nil { + return nil, err + } + + err = jwk.AssignKeyID(key) + if err != nil { + return nil, err + } + + err = key.Set(jwk.AlgorithmKey, jwa.RS256) + if err != nil { + return nil, err + } + + privateKeys := jwk.NewSet() + privateKeys.Add(key) + + publicKeys, err := jwk.PublicSetOf(privateKeys) + if err != nil { + return nil, err + } + + return &Pair{ + Private: privateKeys, + Public: publicKeys, + }, nil +}