mirror of
https://github.com/teamhanko/hanko.git
synced 2025-10-29 23:59:46 +08:00
44 lines
737 B
Go
44 lines
737 B
Go
package jwk
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"crypto/rsa"
|
|
"github.com/lestrrat-go/jwx/v2/jwa"
|
|
"github.com/lestrrat-go/jwx/v2/jwk"
|
|
)
|
|
|
|
// RSAKeyGenerator
|
|
type RSAKeyGenerator struct {
|
|
}
|
|
|
|
func (g *RSAKeyGenerator) Generate(id string) (jwk.Key, error) {
|
|
rawKey, err := rsa.GenerateKey(rand.Reader, 4096)
|
|
if err != nil {
|
|
return nil, err
|
|
} else if err = rawKey.Validate(); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
key, err := jwk.FromRaw(rawKey)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
err = key.Set(jwk.KeyIDKey, id)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
err = key.Set(jwk.AlgorithmKey, jwa.RS256)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
err = key.Set(jwk.KeyUsageKey, jwk.ForSignature)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return key, nil
|
|
}
|