You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

107 lines
1.8 KiB

package main
import (
"flag"
"fmt"
"os"
"syscall"
"golang.org/x/crypto/ssh/terminal"
"fenc/Encryption"
)
func getPassword() (string, error) {
var (
bytePassword []byte
e error
)
fmt.Print("Enter Password: ")
bytePassword, e = terminal.ReadPassword(int(syscall.Stdin))
if e != nil {
return "", e
}
return string(bytePassword), nil
}
func main() {
var (
files []string
decrypt *bool
read *bool
edit *bool
plaintext string
password string
e error
)
flag.Usage = func() {
fmt.Fprintf(flag.CommandLine.Output(), "Usage: %s [OPTIONS]... [FILES]...\n", os.Args[0])
fmt.Println("\t-d: Decrypt files")
fmt.Println("\t-r: Decrypt and read files to stdout")
fmt.Println("\t-e: Edit encrypted file")
}
decrypt = flag.Bool("d", false, "Decrypt the file(s)")
read = flag.Bool("r", false, "Read file to stdout")
edit = flag.Bool("e", false, "Edit encrypted file")
flag.Parse()
files = flag.Args()
if len(files) == 0 {
flag.Usage()
fmt.Println("Files cannot be null")
os.Exit(1)
}
password, e = getPassword()
if e != nil {
fmt.Println(e.Error())
os.Exit(1)
}
if *decrypt {
for _, file := range files {
e = Encryption.DecryptFile(password, file)
if e != nil {
fmt.Println(e.Error())
os.Exit(1)
}
}
os.Exit(0)
}
if *read {
for _, file := range files {
plaintext, e = Encryption.DecryptAndReadFile(password, file)
if e != nil {
fmt.Println(e.Error())
os.Exit(1)
}
fmt.Println(file)
fmt.Println(plaintext)
}
os.Exit(0)
}
if *edit {
for _, file := range files {
e = Encryption.EditEncryptedFile(password, file)
if e != nil {
fmt.Println(e.Error())
os.Exit(1)
}
}
os.Exit(0)
}
for _, file := range files {
e = Encryption.EncryptFile(password, file)
if e != nil {
fmt.Println(e.Error())
os.Exit(1)
}
}
}