Compare commits
4 Commits
v1.2.2
...
bb4dda5d9f
| Author | SHA1 | Date | |
|---|---|---|---|
| bb4dda5d9f | |||
| 14b7b1d181 | |||
| 83c7065d2a | |||
| 3978c9ad47 |
@@ -1,20 +1,22 @@
|
|||||||
# GoPass
|
# GoPass
|
||||||
|
|
||||||
An easy to use command-line password generator that creates secure passwords (Version 1.1 adds proper cryptographic
|
An easy to use command-line password generator that creates secure passwords
|
||||||
seeding of math/rand)
|
|
||||||
|
|
||||||
# Usage:
|
# Usage:
|
||||||
|
|
||||||
`./gopass [number of characters]`<br>
|
`./gopass [number of characters]`<br>
|
||||||
or <br>
|
or <br>
|
||||||
`./gopass [number of characters] "[excluded characters]"`
|
`./gopass [number of characters] -r=[excluded characters] [-s to remove all symbols]`
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
eg: `./gopass 32` <br>
|
eg: `./gopass 32` <br>
|
||||||
output: `E$bGOiiPASS*,ISl{!MJ&<\[COOL0eVw` <br>
|
output: `E$bGOiiPASS*,ISl{!MJ&<\[COOL0eVw` <br>
|
||||||
eg (with excluded characters): `./gopass 32 "$,!"` <br>
|
eg: (with excluded characters): `./gopass 32 -r=$,!` <br>
|
||||||
output: `EYbGOiiPASS*2ISl{?MJ&<\[COOL0eVw` <- note the excluded characters are not present in the output
|
output: `EYbGOiiPASS*2ISl{?MJ&<\[COOL0eVw` <- note the excluded characters are not present in the output <br>
|
||||||
|
eg: `./gopass 32 -s` <br>
|
||||||
|
output: `LEYbGOiiPASS2ISlMJCOOL0eRt3KPOVw` <- note the symbols are not present in the output <br>
|
||||||
|
eg: `./gopass 32 -r=$,! -s` the -r and -s flags can be combined <br>
|
||||||
|
|
||||||
# How to install/use for Windows:
|
# How to install/use for Windows:
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Binary file not shown.
Executable
BIN
Binary file not shown.
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Binary file not shown.
Executable
BIN
Binary file not shown.
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
@@ -1,42 +1,66 @@
|
|||||||
// GoPass
|
// GoPass
|
||||||
// Author: Maximilian Patterson
|
// Author: Maximilian Patterson
|
||||||
// Version: 1.2.2
|
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
cryptorand "crypto/rand"
|
"crypto/rand"
|
||||||
"encoding/binary"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"math/big"
|
"math/big"
|
||||||
mathrand "math/rand"
|
|
||||||
"os"
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
var allowedCharacters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890`~!@#$%^&*()_+[]\\{}|;':,./<>?")
|
var allowedCharacters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890`~!@#$%^&*()_+[]\\{}|;':,./<>?")
|
||||||
|
|
||||||
func main() {
|
const (
|
||||||
// Take in all OS arg
|
Version = "1.3.0"
|
||||||
args := os.Args[1:]
|
symbols = "`~!@#$%^&*()_+[]\\{}|;':,./<>?"
|
||||||
if len(args) < 1 {
|
)
|
||||||
println("No password length specified! (ex: ./gopass 16)")
|
|
||||||
return
|
func matchArguments(args []string) string {
|
||||||
|
// If there are no arguments
|
||||||
|
if len(args) == 0 {
|
||||||
|
return "No password length specified! (ex: gopass 16)"
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert String arg to int
|
// First argument is special, must be an integer, -v, or -h
|
||||||
size, err := strconv.Atoi(args[0])
|
var size = 0 // Password length
|
||||||
if err != nil {
|
err := error(nil)
|
||||||
println("First argument supplied must be an integer! (ex: 16)")
|
if size, err = strconv.Atoi(args[0]); err == nil { // If first argument is an integer
|
||||||
return
|
} else if args[0] == "-v" {
|
||||||
|
return "GoPass version " + Version
|
||||||
|
} else if args[0] == "-h" {
|
||||||
|
return "GoPass - A simple password generator written in Go\n" +
|
||||||
|
"Usage: gopass [length] [disallowed characters] [optional remove symbols -s]\n" +
|
||||||
|
" Example: gopass 16\n" +
|
||||||
|
" Example: gopass 16 -r=abc123!@#\n" +
|
||||||
|
" Example: gopass 16 -s\n" +
|
||||||
|
"\nFor help (this output): gopass -h\n" +
|
||||||
|
"For version: gopass -v\n"
|
||||||
}
|
}
|
||||||
|
|
||||||
// Grab second argument (if it exists) and use it as a disallowed character(s)
|
for i := 1; i < len(args); i++ {
|
||||||
var disallowed []rune
|
v := args[i]
|
||||||
if len(args) == 2 {
|
if v == "-s" {
|
||||||
// Break apart the string into a slice of runes
|
removeDisallowed([]rune(symbols))
|
||||||
disallowed = []rune(args[1])
|
} else if strings.HasPrefix(v, "-r=") { // If argument starts with -r=
|
||||||
|
// Remove all characters after the = until next whitespace
|
||||||
|
removeDisallowed([]rune(v[2:]))
|
||||||
|
} else {
|
||||||
|
return "Invalid argument (\"" + v + "\") supplied! (Type gopass -h for help)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if size <= 0 {
|
||||||
|
return "No/invalid password length specified! (ex: gopass 16)"
|
||||||
|
} else {
|
||||||
|
return generatePassword(size)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Remove all disallowed characters from the allowedCharacters slice
|
// Remove all disallowed characters from the allowedCharacters slice
|
||||||
|
func removeDisallowed(disallowed []rune) {
|
||||||
for _, r := range disallowed {
|
for _, r := range disallowed {
|
||||||
for i, v := range allowedCharacters {
|
for i, v := range allowedCharacters {
|
||||||
if v == r {
|
if v == r {
|
||||||
@@ -46,29 +70,25 @@ func main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func generatePassword(size int) string {
|
||||||
// Make empty array of runes with size of size
|
// Make empty array of runes with size of size
|
||||||
pass := make([]rune, size)
|
pass := make([]rune, size)
|
||||||
|
|
||||||
// Seed rand with time
|
|
||||||
var b [8]byte
|
|
||||||
_, err = cryptorand.Read(b[:])
|
|
||||||
if err != nil {
|
|
||||||
println("Error securely seeding crypto/rand!")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
mathrand.Seed(int64(binary.LittleEndian.Uint64(b[:])))
|
|
||||||
|
|
||||||
// Assign every slot of pass to a random allowedCharacter
|
// Assign every slot of pass to a random allowedCharacter
|
||||||
for i := range pass {
|
for i := range pass {
|
||||||
// Generate a random int greater than 0 and not to exceed the length of allowedCharacters
|
// Generate a random int greater than 0 and not to exceed the length of allowedCharacters
|
||||||
index, err := cryptorand.Int(cryptorand.Reader, big.NewInt(int64(len(allowedCharacters))))
|
index, err := rand.Int(rand.Reader, big.NewInt(int64(len(allowedCharacters))))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
println("Error securely generating random character!")
|
println("Error securely generating random character!")
|
||||||
return
|
return ""
|
||||||
}
|
}
|
||||||
pass[i] = allowedCharacters[index.Int64()]
|
pass[i] = allowedCharacters[index.Int64()]
|
||||||
}
|
}
|
||||||
|
|
||||||
// Print the password
|
return string(pass)
|
||||||
fmt.Println(string(pass))
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
// Process arguments
|
||||||
|
fmt.Println(matchArguments(os.Args[1:]))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,21 @@
|
|||||||
# The current version number of the program
|
# The current version number of the program
|
||||||
VERSION := 1.2.2
|
VERSION := 1.3.0
|
||||||
|
|
||||||
# List of OS and architecture combinations to build
|
# List of OS and architecture combinations to build
|
||||||
BUILD_OS_ARCH := \
|
BUILD_OS_ARCH := \
|
||||||
darwin/amd64 \
|
darwin/amd64 \
|
||||||
|
freebsd/386 \
|
||||||
|
freebsd/amd64 \
|
||||||
|
freebsd/arm \
|
||||||
linux/386 \
|
linux/386 \
|
||||||
linux/amd64 \
|
linux/amd64 \
|
||||||
|
linux/arm \
|
||||||
|
plan9/386 \
|
||||||
|
plan9/amd64 \
|
||||||
|
plan9/arm \
|
||||||
windows/386 \
|
windows/386 \
|
||||||
windows/amd64
|
windows/amd64 \
|
||||||
|
windows/arm
|
||||||
|
|
||||||
# Build all targets
|
# Build all targets
|
||||||
all: $(BUILD_OS_ARCH)
|
all: $(BUILD_OS_ARCH)
|
||||||
@@ -18,6 +26,21 @@ darwin/amd64:
|
|||||||
GOARCH=amd64 \
|
GOARCH=amd64 \
|
||||||
go build -ldflags="-s -w" -o "gopass-darwin-amd64-$(VERSION)" main.go
|
go build -ldflags="-s -w" -o "gopass-darwin-amd64-$(VERSION)" main.go
|
||||||
|
|
||||||
|
freebsd/386:
|
||||||
|
GOOS=freebsd \
|
||||||
|
GOARCH=386 \
|
||||||
|
go build -ldflags="-s -w" -o "gopass-freebsd-386-$(VERSION)" main.go
|
||||||
|
|
||||||
|
freebsd/amd64:
|
||||||
|
GOOS=freebsd \
|
||||||
|
GOARCH=amd64 \
|
||||||
|
go build -ldflags="-s -w" -o "gopass-freebsd-amd64-$(VERSION)" main.go
|
||||||
|
|
||||||
|
freebsd/arm:
|
||||||
|
GOOS=freebsd \
|
||||||
|
GOARCH=arm \
|
||||||
|
go build -ldflags="-s -w" -o "gopass-freebsd-arm-$(VERSION)" main.go
|
||||||
|
|
||||||
linux/386:
|
linux/386:
|
||||||
GOOS=linux \
|
GOOS=linux \
|
||||||
GOARCH=386 \
|
GOARCH=386 \
|
||||||
@@ -28,6 +51,26 @@ linux/amd64:
|
|||||||
GOARCH=amd64 \
|
GOARCH=amd64 \
|
||||||
go build -ldflags="-s -w" -o "gopass-linux-amd64-$(VERSION)" main.go
|
go build -ldflags="-s -w" -o "gopass-linux-amd64-$(VERSION)" main.go
|
||||||
|
|
||||||
|
linux/arm:
|
||||||
|
GOOS=linux \
|
||||||
|
GOARCH=arm \
|
||||||
|
go build -ldflags="-s -w" -o "gopass-linux-arm-$(VERSION)" main.go
|
||||||
|
|
||||||
|
plan9/386:
|
||||||
|
GOOS=plan9 \
|
||||||
|
GOARCH=386 \
|
||||||
|
go build -ldflags="-s -w" -o "gopass-plan9-386-$(VERSION)" main.go
|
||||||
|
|
||||||
|
plan9/amd64:
|
||||||
|
GOOS=plan9 \
|
||||||
|
GOARCH=amd64 \
|
||||||
|
go build -ldflags="-s -w" -o "gopass-plan9-amd64-$(VERSION)" main.go
|
||||||
|
|
||||||
|
plan9/arm:
|
||||||
|
GOOS=plan9 \
|
||||||
|
GOARCH=arm \
|
||||||
|
go build -ldflags="-s -w" -o "gopass-plan9-arm-$(VERSION)" main.go
|
||||||
|
|
||||||
windows/386:
|
windows/386:
|
||||||
GOOS=windows \
|
GOOS=windows \
|
||||||
GOARCH=386 \
|
GOARCH=386 \
|
||||||
@@ -37,3 +80,8 @@ windows/amd64:
|
|||||||
GOOS=windows \
|
GOOS=windows \
|
||||||
GOARCH=amd64 \
|
GOARCH=amd64 \
|
||||||
go build -ldflags="-s -w" -o "gopass-windows-amd64-$(VERSION)" main.go
|
go build -ldflags="-s -w" -o "gopass-windows-amd64-$(VERSION)" main.go
|
||||||
|
|
||||||
|
windows/arm:
|
||||||
|
GOOS=windows \
|
||||||
|
GOARCH=arm \
|
||||||
|
go build -ldflags="-s -w" -o "gopass-windows-arm-$(VERSION)" main.go
|
||||||
|
|||||||
Reference in New Issue
Block a user