github.com/tommi2day/gomodules@v1.13.2-0.20240423190010-b7d55d252a27/pwlib/pwlib_config.go (about) 1 package pwlib 2 3 import ( 4 "os" 5 6 openssl "github.com/Luzifer/go-openssl/v4" 7 8 log "github.com/sirupsen/logrus" 9 ) 10 11 const ( 12 defaultRsaKeySize = 2048 13 typeGO = "go" 14 typeOpenssl = "openssl" 15 typePlain = "plain" 16 typeEnc = "b64" 17 typeVault = "vault" 18 typeGPG = "gpg" 19 typeGopass = "gopass" 20 typeKMS = "kms" 21 defaultMethod = typeGO 22 extGo = "gp" 23 extOpenssl = "pw" 24 extPlain = "plain" 25 extB64 = "b64" 26 privPemExt = ".pem" 27 pubPemExt = ".pub" 28 extGPG = "gpg" 29 extKMS = "kms" 30 pubGPGExt = ".pub.gpg" 31 privGPGExt = ".priv.gpg" 32 ) 33 34 // PassConfig Type for encryption configuration 35 type PassConfig struct { 36 AppName string 37 DataDir string 38 KeyDir string 39 KeyPass string 40 CryptedFile string 41 PrivateKeyFile string 42 PubKeyFile string 43 PlainTextFile string 44 SessionPassFile string 45 Method string 46 KeySize int 47 SSLDigest openssl.CredsGenerator 48 KMSKeyID string 49 } 50 51 var label = []byte("") 52 var pubExt = pubPemExt 53 var privExt = privPemExt 54 55 // SSLDigest variable helds common digist algor 56 var SSLDigest = openssl.BytesToKeySHA256 57 58 // NewConfig set encryption configuration 59 func NewConfig(appname string, datadir string, keydir string, keypass string, method string) (passConfig *PassConfig) { 60 var ext string 61 config := PassConfig{} 62 log.Debug("NewConfig entered") 63 log.Debugf("A:%s, P:%s, D:%s, K:%s, M:%s", appname, keypass, datadir, keydir, method) 64 // default names 65 wd, _ := os.Getwd() 66 etc := wd + "/etc" 67 if method == "" { 68 method = defaultMethod 69 } 70 switch method { 71 case typeOpenssl: 72 ext = extOpenssl 73 case typeGO: 74 ext = extGo 75 case typePlain: 76 ext = extPlain 77 case typeEnc: 78 ext = extB64 79 case typeVault: 80 ext = extPlain 81 case typeKMS: 82 ext = extKMS 83 case typeGPG, typeGopass: 84 ext = extGPG 85 privExt = privGPGExt 86 pubExt = pubGPGExt 87 if keypass == "" { 88 keypass = os.Getenv("GPG_PASSPHRASE") 89 } 90 default: 91 log.Warnf("invalid method %s, use method %s", method, defaultMethod) 92 method = defaultMethod 93 ext = extGo 94 } 95 if datadir == "" { 96 datadir = etc 97 } 98 if keydir == "" { 99 keydir = etc 100 } 101 if keypass == "" { 102 keypass = appname 103 } 104 105 cryptedfile := datadir + "/" + appname + "." + ext 106 privatekeyfile := keydir + "/" + appname + privExt 107 pubkeyfile := keydir + "/" + appname + pubExt 108 plainfile := datadir + "/" + appname + ".plain" 109 sessionpassfile := keydir + "/" + appname + ".dat" 110 111 // set global configuration defaults, any part can be overwritten 112 config.AppName = appname 113 config.DataDir = datadir 114 config.KeyDir = keydir 115 config.KeyPass = keypass 116 config.CryptedFile = cryptedfile 117 config.PrivateKeyFile = privatekeyfile 118 config.PubKeyFile = pubkeyfile 119 config.PlainTextFile = plainfile 120 config.SessionPassFile = sessionpassfile 121 config.Method = method 122 config.KeySize = defaultRsaKeySize 123 config.SSLDigest = SSLDigest 124 config.KMSKeyID = "" 125 return &config 126 }