ccclip/internal/server/keys.go

41 lines
1.1 KiB
Go
Raw Normal View History

package server
import (
"crypto/ecdh"
"errors"
"os"
"github.com/AYM1607/ccclip/pkg/crypto"
)
const (
privateKeyEnv = "CCCLIP_PRIVATE_KEY"
publicKeyEnv = "CCCLIP_PUBLIC_KEY"
privateKeyPathEnv = "CCCLIP_PRIVATE_KEY_PATH"
publicKeyPathEnv = "CCCLIP_PUBLIC_KEY_PATH"
)
func loadKeys() (*ecdh.PrivateKey, *ecdh.PublicKey, error) {
// Prioritize explicit keys over files.
var pvk *ecdh.PrivateKey
var pbk *ecdh.PublicKey
if b64PrivateKey := os.Getenv(privateKeyEnv); b64PrivateKey != "" {
pvk = crypto.PrivateKeyFromB64([]byte(b64PrivateKey))
} else if privateKeyPath := os.Getenv(privateKeyPathEnv); privateKeyPath != "" {
pvk = crypto.LoadPrivateKeyFromFile(privateKeyPath)
} else {
return nil, nil, errors.New("no private key was found")
}
if b64PublicKey := os.Getenv(publicKeyEnv); b64PublicKey != "" {
pbk = crypto.PublicKeyFromB64([]byte(b64PublicKey))
} else if publicKeyPath := os.Getenv(publicKeyPathEnv); publicKeyPath != "" {
pbk = crypto.LoadPublicKeyFromFile(publicKeyPath)
} else {
return nil, nil, errors.New("to public key was found")
}
return pvk, pbk, nil
}