Add LoadPrivateKey(s) functions

This commit is contained in:
Elara 2024-03-09 21:43:17 -08:00
parent 10fa7919b0
commit 249b99f46f
1 changed files with 41 additions and 0 deletions

41
keys.go
View File

@ -102,3 +102,44 @@ func generateKeys(path string) (ed25519.PublicKey, ed25519.PrivateKey, error) {
return pub, priv, nil
}
// LoadPrivateKeys loads the private keys at all the provided paths.
//
// Any invalid keys are skipped.
func LoadPrivateKeys(paths ...string) []ed25519.PrivateKey {
out := make([]ed25519.PrivateKey, len(paths))
for i, path := range paths {
privkey, err := LoadPrivateKey(path)
if err != nil {
continue
}
out[i] = privkey
}
return out
}
// LoadPrivateKey loads a private Ed25519 key from the given path.
func LoadPrivateKey(path string) (ed25519.PrivateKey, error) {
privData, err := os.ReadFile(path)
if err != nil {
return nil, err
}
privBlock, _ := pem.Decode(privData)
if privBlock == nil {
return nil, errors.New("invalid private key data")
}
privkey, err := x509.ParsePKCS8PrivateKey(privBlock.Bytes)
if err != nil {
return nil, err
}
priv, ok := privkey.(ed25519.PrivateKey)
if !ok {
return nil, errors.New("invalid private key type")
}
return priv, nil
}