tricrypt/security/filesystem.go
2024-05-01 17:21:22 +03:00

106 lines
2.5 KiB
Go

package security
import (
"os"
"path/filepath"
"git.qowevisa.me/Qowevisa/gotell/errors"
)
func findInStore(name string) KeyPair {
return KeyPair{}
}
const (
_int_FSPath = "./key-store"
_int_FSPairsPath = _int_FSPath + "/pairs"
_int_PrivateKeyAddon = "private.Key"
_int_PublicKeyAddon = "public.key"
)
func initFS() error {
var err error
err = os.Mkdir(_int_FSPath, os.ModePerm)
if err != nil {
return errors.WrapErr("Mkdir:initFSPath", err)
}
err = os.Mkdir(_int_FSPairsPath, os.ModePerm)
if err != nil {
return errors.WrapErr("Mkdir:initFSPairsPath", err)
}
return nil
}
func fs_checkIfPairExists(name string) (bool, error) {
var err error
privateKeyPath := filepath.Join(_int_FSPairsPath, name+_int_PrivateKeyAddon)
_, err = os.Stat(privateKeyPath)
if err != nil {
if os.IsNotExist(err) {
return false, nil
} else {
return false, errors.WrapErr(privateKeyPath, err)
}
}
publicKeyPath := filepath.Join(_int_FSPairsPath, name+_int_PublicKeyAddon)
_, err = os.Stat(publicKeyPath)
if err != nil {
if os.IsNotExist(err) {
return false, nil
} else {
return false, errors.WrapErr(publicKeyPath, err)
}
}
return true, nil
}
// TODO: add encryption
func fs_savePair(keyPair KeyPair) error {
var err error
err = os.WriteFile(keyPair.baseName+_int_PrivateKeyAddon, keyPair.privateKey, 0644)
if err != nil {
return errors.WrapErr("WriteFile:privateKey", err)
}
err = os.WriteFile(keyPair.baseName+_int_PublicKeyAddon, keyPair.publicKey, 0644)
if err != nil {
return errors.WrapErr("WriteFile:publicKey", err)
}
return nil
}
// TODO: add encryption
func fs_readPair(name string, keyPair *KeyPair) error {
var err error
privateKeyPath := filepath.Join(_int_FSPairsPath, name+_int_PrivateKeyAddon)
_, err = os.Stat(privateKeyPath)
if err != nil {
if os.IsNotExist(err) {
return errors.WrapErr(privateKeyPath, errors.NOT_FOUND)
} else {
return errors.WrapErr(privateKeyPath, err)
}
}
privKey, err := os.ReadFile(privateKeyPath)
if err != nil {
return errors.WrapErr("os.ReadFile:private", err)
}
publicKeyPath := filepath.Join(_int_FSPairsPath, name+_int_PublicKeyAddon)
_, err = os.Stat(publicKeyPath)
if err != nil {
if os.IsNotExist(err) {
return errors.WrapErr(publicKeyPath, errors.NOT_FOUND)
} else {
return errors.WrapErr(publicKeyPath, err)
}
}
pubKey, err := os.ReadFile(publicKeyPath)
if err != nil {
return errors.WrapErr("os.ReadFile:publicKey", err)
}
keyPair.baseName = name
keyPair.privateKey = privKey
keyPair.publicKey = pubKey
return nil
}