in hack/self-hosted/main.go [39:84]
func readKey(filename string) ([]byte, error) {
var response []byte
content, err := ioutil.ReadFile(filename)
if err != nil {
return response, errors.WithMessage(err, "error reading file")
}
block, _ := pem.Decode(content)
if block == nil {
return response, errors.Errorf("Error decoding PEM file %s", filename)
}
pubKey, err := x509.ParsePKIXPublicKey(block.Bytes)
if err != nil {
return response, errors.Wrapf(err, "Error parsing key content of %s", filename)
}
switch pubKey.(type) {
case *rsa.PublicKey:
default:
return response, errors.New("Public key was not RSA")
}
var alg jose.SignatureAlgorithm
switch pubKey.(type) {
case *rsa.PublicKey:
alg = jose.RS256
default:
return response, fmt.Errorf("invalid public key type %T, must be *rsa.PrivateKey", pubKey)
}
kid, err := keyIDFromPublicKey(pubKey)
if err != nil {
return response, err
}
var keys []jose.JSONWebKey
keys = append(keys, jose.JSONWebKey{
Key: pubKey,
KeyID: kid,
Algorithm: string(alg),
Use: "sig",
})
keyResponse := KeyResponse{Keys: keys}
return json.MarshalIndent(keyResponse, "", " ")
}