Files
certman/crypto.go
2023-09-11 05:08:12 -04:00

59 lines
1.1 KiB
Go

package main
import (
"crypto/rand"
"crypto/rsa"
"crypto/x509"
"fmt"
"os"
)
var cert *x509.Certificate
var key *rsa.PrivateKey
func encryptBytes(data []byte) []byte {
if cert == nil || key == nil {
loadCerts()
}
encrypted, err := rsa.EncryptPKCS1v15(rand.Reader, cert.PublicKey.(*rsa.PublicKey), data)
if err != nil {
fmt.Println("Error encrypting data,", err)
os.Exit(1)
}
return encrypted
}
func decryptBytes(data []byte) []byte {
if cert == nil || key == nil {
loadCerts()
}
decrypted, err := rsa.DecryptPKCS1v15(rand.Reader, key, data)
if err != nil {
fmt.Println("Error decrypting data,", err)
os.Exit(1)
}
return decrypted
}
func loadCerts() {
var err error
certBytes, err := os.ReadFile(config.GetAsString("Crypto.cert_path"))
keyBytes, err := os.ReadFile(config.GetAsString("Crypto.key_path"))
if err != nil {
fmt.Println("Error reading cert or key,", err)
os.Exit(1)
}
cert, err = x509.ParseCertificate(certBytes)
if err != nil {
fmt.Println("Error parsing certificate,", err)
os.Exit(1)
}
key, err = x509.ParsePKCS1PrivateKey(keyBytes)
if err != nil {
fmt.Println("Error parsing private key,", err)
}
}