]> Cypherpunks.ru repositories - balloon.git/blob - cmd/balloon/main.go
0c737c9dd794dfe9e6b5e095328e519e71fa4f5a
[balloon.git] / cmd / balloon / main.go
1 package main
2
3 import (
4         "crypto/rand"
5         "crypto/sha512"
6         "encoding/hex"
7         "flag"
8         "fmt"
9         "io"
10
11         "go.cypherpunks.ru/balloon"
12 )
13
14 func main() {
15         s := flag.Int("s", 1<<18, "Space cost, number of hash-sized blocks")
16         t := flag.Int("t", 2, "Time cost, rounds")
17         p := flag.Int("p", 4, "Number of threads")
18         saltHex := flag.String("salt", "", "Salt, hexadecimal, optional")
19         passwd := flag.String("passwd", "", "Password")
20         flag.Parse()
21         var salt []byte
22         var err error
23         if len(*saltHex) == 0 {
24                 salt = make([]byte, 8)
25                 _, err = io.ReadFull(rand.Reader, salt)
26         } else {
27                 salt, err = hex.DecodeString(*saltHex)
28         }
29         if err != nil {
30                 panic(err)
31         }
32         fmt.Println(hex.EncodeToString(balloon.H(sha512.New, []byte(*passwd), salt, *s, *t, *p)))
33 }