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  }