14 Commits

Author SHA1 Message Date
Maximilian
e1ced3f76d Update binaries to the latest version 2023-01-30 00:06:15 -06:00
Maximilian
cdbca3b074 Add makefile 2023-01-30 00:05:53 -06:00
Maximilian
e4eca321f6 Update version 2023-01-29 23:37:46 -06:00
Maximilian
0eacc92a45 Formatting 2023-01-29 23:36:47 -06:00
Maximilian
e96fded8ff Cryptographically generate password characters 2023-01-29 23:30:21 -06:00
max
710f96e9e7 Update binaries to the latest version 2023-01-29 17:44:50 -06:00
max
4609be7a9d Update version 2023-01-29 17:12:49 -06:00
max
57b78dc62e Gracefully handle errors instead of panic 2023-01-29 16:16:44 -06:00
Maximilian
87fa1107d7 Update binaries to the latest version 2022-12-19 18:12:53 -06:00
max
3915761477 Update 'README.md'
Fixed formatting
2022-12-20 00:01:13 +00:00
Maximilian
5ba592db21 Update README.md to include install instructions and expanded usage instructions 2022-12-19 17:57:53 -06:00
Maximilian
b81783b470 New version update that supports disallowed characters, cleaned up comments 2022-12-19 17:41:54 -06:00
Maximilian
cebcbc2823 Merge remote-tracking branch 'origin/master' 2022-12-19 17:25:50 -06:00
Maximilian
b5b7c208f2 (Old binaries were broken) Rebuilt all binaries properly this time also included are the new error handling changes, and smaller overall binary sizes (built with -w and -s flags + UPX compression) 2022-12-19 17:25:17 -06:00
13 changed files with 103 additions and 14 deletions

View File

@@ -5,8 +5,32 @@ seeding of math/rand)
# Usage:
<code>./gopass [number of characters]</code><br>
`./gopass [number of characters]`<br>
or <br>
`./gopass [number of characters] "[excluded characters]"`
<hr>
eg:
<code>./gopass 32</code><br>
output: <code>E$bGOiiPASS*,ISl{!MJ&<\[COOL0eVw</code>
eg: `./gopass 32` <br>
output: `E$bGOiiPASS*,ISl{!MJ&<\[COOL0eVw` <br>
eg (with excluded characters): `./gopass 32 "$,!"` <br>
output: `EYbGOiiPASS*2ISl{?MJ&<\[COOL0eVw` <- note the excluded characters are not present in the output
# How to install/use for Windows:
1. Download Windows binary, it may be helpful to simply rename it to "gopass.exe" (make sure to add .exe, this won't
need to
be typed to execute the file from the CLI, but it is required for Windows to recognize the binary) to keep
commands shorter.
2. Move the file to your `C:\Users\[Username]` directory
3. Opening the console *without* Administrator privileges will put you in the directory mentioned above by default
4. Now type `gopass [number of characters]` (Ex. `gopass 64`) to generate a new password!
# How to install/use for Linux:
1. Download Linux binary, it may be helpful to simply rename it to "gopass" to keep commands shorter.
2. Move the file to your home directory.
3. `chmod +x gopass` if necessary
3. Opening your terminal should put you in your home directory by default, if not, just type `cd` to get sent back to
home.
4. Now type `./gopass [number of characters]` (Ex. `./gopass 64`) to generate a new password!

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
bin/gopass-linux-386-1.2.2 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

46
main.go
View File

@@ -1,30 +1,49 @@
// GoPass
// Author: Maximilian Patterson
// Version: 1.2
// Version: 1.2.2
package main
import (
cryptorand "crypto/rand"
"encoding/binary"
"fmt"
"math/big"
mathrand "math/rand"
"os"
"strconv"
)
var runes = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890`~!@#$%^&*()_+[]\\{}|;':,./<>?")
var allowedCharacters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890`~!@#$%^&*()_+[]\\{}|;':,./<>?")
func main() {
// Take OS arg (only accepts one arg) handle errors
// Take in all OS arg
args := os.Args[1:]
if len(args) != 1 {
panic("No password length specified! (ex: ./gopass 16)")
if len(args) < 1 {
println("No password length specified! (ex: ./gopass 16)")
return
}
// Convert String arg to int
size, err := strconv.Atoi(args[0])
if err != nil {
panic("Argument supplied must be an integer! (ex: 16)")
println("First argument supplied must be an integer! (ex: 16)")
return
}
// Grab second argument (if it exists) and use it as a disallowed character(s)
var disallowed []rune
if len(args) == 2 {
// Break apart the string into a slice of runes
disallowed = []rune(args[1])
// Remove all disallowed characters from the allowedCharacters slice
for _, r := range disallowed {
for i, v := range allowedCharacters {
if v == r {
allowedCharacters = append(allowedCharacters[:i], allowedCharacters[i+1:]...)
}
}
}
}
// Make empty array of runes with size of size
@@ -34,15 +53,22 @@ func main() {
var b [8]byte
_, err = cryptorand.Read(b[:])
if err != nil {
panic("Error securely seeding crypto/rand!")
println("Error securely seeding crypto/rand!")
return
}
mathrand.Seed(int64(binary.LittleEndian.Uint64(b[:])))
// Assign every slot of pass to a random rune (generate rand int of length runes to select)
// Assign every slot of pass to a random allowedCharacter
for i := range pass {
pass[i] = runes[mathrand.Intn(len(runes))]
// 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))))
if err != nil {
println("Error securely generating random character!")
return
}
pass[i] = allowedCharacters[index.Int64()]
}
// Print the pass :D
// Print the password
fmt.Println(string(pass))
}

39
makefile Normal file
View File

@@ -0,0 +1,39 @@
# The current version number of the program
VERSION := 1.2.2
# List of OS and architecture combinations to build
BUILD_OS_ARCH := \
darwin/amd64 \
linux/386 \
linux/amd64 \
windows/386 \
windows/amd64
# Build all targets
all: $(BUILD_OS_ARCH)
# Build targets in the form of `OS/ARCH`
darwin/amd64:
GOOS=darwin \
GOARCH=amd64 \
go build -ldflags="-s -w" -o "gopass-darwin-amd64-$(VERSION)" main.go
linux/386:
GOOS=linux \
GOARCH=386 \
go build -ldflags="-s -w" -o "gopass-linux-386-$(VERSION)" main.go
linux/amd64:
GOOS=linux \
GOARCH=amd64 \
go build -ldflags="-s -w" -o "gopass-linux-amd64-$(VERSION)" main.go
windows/386:
GOOS=windows \
GOARCH=386 \
go build -ldflags="-s -w" -o "gopass-windows-386-$(VERSION)" main.go
windows/amd64:
GOOS=windows \
GOARCH=amd64 \
go build -ldflags="-s -w" -o "gopass-windows-amd64-$(VERSION)" main.go