X-Git-Url: http://www.git.cypherpunks.ru/?p=balloon.git;a=blobdiff_plain;f=cmd%2Fballoon%2Fmain.go;h=b7fd973b5874af07430ffca10b3420f1f8bc9e24;hp=8283a5345e0432e66a73e66ef4f270768b3c06cb;hb=8db12c1d04f1d1bc2311c42a08812f511bfae721;hpb=03649070f780ed40a3a6303b1c5a0cc5f7bdd8c5 diff --git a/cmd/balloon/main.go b/cmd/balloon/main.go index 8283a53..b7fd973 100644 --- a/cmd/balloon/main.go +++ b/cmd/balloon/main.go @@ -1,25 +1,54 @@ +/* +balloon -- Balloon password hashing function +Copyright (C) 2016-2019 Sergey Matveev + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as +the Free Software Foundation, version 3 of the License. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this program. If not, see +. +*/ + package main import ( + "crypto/rand" "crypto/sha512" "encoding/hex" "flag" "fmt" + "io" + "os" - "cypherpunks.ru/balloon" -) - -var ( - s = flag.Int("s", 1<<18, "Space cost, number of hash-sized blocks") - t = flag.Int("t", 2, "Time cost, rounds") - p = flag.Int("p", 4, "Number of threads") - saltHex = flag.String("salt", "deadbabe", "Salt, hexadecimal") - passwd = flag.String("passwd", "", "Password") + "go.cypherpunks.ru/balloon" ) func main() { + s := flag.Int("s", 1<<18, "Space cost, number of hash-sized blocks") + t := flag.Int("t", 2, "Time cost, rounds") + p := flag.Int("p", 4, "Number of threads") + saltHex := flag.String("salt", "", "Salt, hexadecimal, optional") + passwd := flag.String("passwd", "", "Password") + flag.Usage = func() { + fmt.Fprintf(os.Stderr, "balloon -- Strengthen password with Balloon+SHA512\n\n") + flag.PrintDefaults() + } flag.Parse() - salt, err := hex.DecodeString(*saltHex) + var salt []byte + var err error + if len(*saltHex) == 0 { + salt = make([]byte, 8) + _, err = io.ReadFull(rand.Reader, salt) + } else { + salt, err = hex.DecodeString(*saltHex) + } if err != nil { panic(err) }