ccclip/pkg/crypto/key_files.go

50 lines
1 KiB
Go

package crypto
import (
"crypto/ecdh"
"encoding/base64"
"os"
)
func LoadPrivateKeyFromFile(fp string) *ecdh.PrivateKey {
kb, err := loadKeyFile(fp)
if err != nil {
panic(err)
}
return PrivateKeyFromBytes(kb)
}
func LoadPublicKeyFromFile(fp string) *ecdh.PublicKey {
kb, err := loadKeyFile(fp)
if err != nil {
panic(err)
}
return PublicKeyFromBytes(kb)
}
func SavePrivateKeyToFile(fp string, k *ecdh.PrivateKey) error {
return saveKeyFile(fp, k.Bytes(), privateKeyFileMode)
}
func SavePublicKeyToFile(fp string, k *ecdh.PublicKey) error {
return saveKeyFile(fp, k.Bytes(), publicKeyFileMode)
}
func loadKeyFile(fp string) ([]byte, error) {
b64Key, err := os.ReadFile(fp)
if err != nil {
return nil, err
}
keyBytes := make([]byte, KeySize)
base64.StdEncoding.Decode(keyBytes, b64Key)
return keyBytes, nil
}
func saveKeyFile(fp string, key []byte, fm os.FileMode) error {
b64Key := make([]byte, base64.StdEncoding.EncodedLen(len(key)))
base64.StdEncoding.Encode(b64Key, key)
return os.WriteFile(fp, b64Key, fm)
}