This repository has been archived by the owner on Oct 13, 2020. It is now read-only.
/
main.go
108 lines (85 loc) 路 2.06 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package main
import (
"crypto/rand"
"flag"
"fmt"
"math/big"
"os"
)
var version = "undefined"
const letters = "9ABCDEFGHIJKLMNOPQRSTUVWXYZ"
func generateRandomInts(n int) ([]int64, error) {
ints := make([]int64, n)
for i := range ints {
randomInt, err := rand.Int(rand.Reader, big.NewInt(27))
if err != nil {
return nil, err
}
ints[i] = randomInt.Int64()
}
return ints, nil
}
func intToCharByte(i int64) byte {
return byte(letters[i])
}
func generateRandomSeed() (string, error) {
ints, err := generateRandomInts(81)
if err != nil {
return "", err
}
token := make([]byte, 81)
for i, x := range ints {
token[i] = intToCharByte(x)
}
return string(token), nil
}
// "interactive" usage of the program.
// we print a greeting to the user
// generate print some seeds for them
// print a friendly reminder, to back up the seed
// and pause execution so the terminal won't be closed on windows
func interactive() {
// greeting
fmt.Printf("Welcome to iota-seedgen v%s - your friendly IOTA wallet seed generator!\n", version)
fmt.Println("------------------")
// generate and print 10 wallet seeds
for i := 0; i < 10; i++ {
token, err := generateRandomSeed()
if err != nil {
fmt.Printf("an error occured: %v\n ", err.Error())
os.Exit(1)
}
fmt.Println(token)
}
// backup reminder
fmt.Println("------------------")
fmt.Println("pick one of the random lines, back it up anywhere >SAFE< and use it to generate your wallet :)")
// pause execution
fmt.Println("")
fmt.Println("Press the Enter Key to terminate the console screen!")
var input string
fmt.Scanln(&input)
os.Exit(0)
}
// non interactive usage of the program.
// just generate and print one seed
// then exit
func nonInteractive() {
token, err := generateRandomSeed()
if err != nil {
fmt.Printf("an error occured: %v\n ", err.Error())
os.Exit(1)
}
fmt.Print(token)
os.Exit(0)
}
func main() {
// command line flag handling
scriptedPtr := flag.Bool("s", false, "is the execution scripted?")
flag.Parse()
if !*scriptedPtr {
interactive()
} else {
nonInteractive()
}
}