From f37377dd63b795c566f1e7a3191eeac6e217a0e2 Mon Sep 17 00:00:00 2001 From: Brian Buller Date: Wed, 25 Jan 2017 11:58:37 -0600 Subject: [PATCH] Passage Library Works --- gopass-cmd/.gitignore | 1 + gopass-cmd/main.go | 18 +++++++++++ passage.go | 69 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 88 insertions(+) create mode 100644 gopass-cmd/.gitignore create mode 100644 gopass-cmd/main.go create mode 100644 passage.go diff --git a/gopass-cmd/.gitignore b/gopass-cmd/.gitignore new file mode 100644 index 0000000..768e8ba --- /dev/null +++ b/gopass-cmd/.gitignore @@ -0,0 +1 @@ +gopass-cmd diff --git a/gopass-cmd/main.go b/gopass-cmd/main.go new file mode 100644 index 0000000..9e08774 --- /dev/null +++ b/gopass-cmd/main.go @@ -0,0 +1,18 @@ +package main + +import ( + "fmt" + "os" + + passage "gogs.bullercodeworks.com/brian/passage-go" +) + +func main() { + if len(os.Args) < 3 { + fmt.Println("Usage: gopass ") + os.Exit(1) + } + p := passage.CreatePassage(os.Args[1]) + fmt.Println("Checksum: " + p.GetChecksumAsString()) + fmt.Println("Password: " + p.GetPassword(os.Args[2])) +} diff --git a/passage.go b/passage.go new file mode 100644 index 0000000..ec1bd05 --- /dev/null +++ b/passage.go @@ -0,0 +1,69 @@ +package passage + +import ( + "crypto/sha256" + "strconv" +) + +const ( + UseLower = 1 << iota + UseUpper + UseNumber + UseSymbol +) + +type Passage struct { + valids int + length int + pin string +} + +func CreatePassage(pin string) *Passage { + p := new(Passage) + p.length = 20 + p.valids = UseLower | UseUpper | UseNumber | UseSymbol + p.pin = pin + return p +} + +func (p *Passage) SetPin(pin string) { + p.pin = pin +} + +func (p *Passage) GetPassword(door string) string { + ret := "" + validChars := "" + if p.valids&UseLower == UseLower { + validChars += "abcdefghijklmnopqrstuvwxyz" + } + if p.valids&UseUpper == UseUpper { + validChars += "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + } + if p.valids&UseNumber == UseNumber { + validChars += "1234567890" + } + hashing := p.pin + " - " + door + shaArr := sha256.Sum256([]byte(hashing)) + var sha []byte + for i := range shaArr { + sha = append(sha, shaArr[i]) + } + for i := 0; i < p.length; i++ { + //for i := range sha { + ret += string(validChars[int(sha[i])%len(validChars)]) + } + return ret +} + +func (p *Passage) GetChecksum() int { + ret := 0 + sha := sha256.Sum256([]byte(p.pin)) + for i := range sha { + ret += int(sha[i]) + } + return ret +} + +func (p *Passage) GetChecksumAsString() string { + return strconv.Itoa(p.GetChecksum()) +}