40 lines
1.1 KiB
Go
40 lines
1.1 KiB
Go
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
|
|
}
|