|
@@ -22,7 +22,7 @@ func myUsage() {
|
|
fmt.Println("Available commands are: ")
|
|
fmt.Println("Available commands are: ")
|
|
fmt.Println(" diceware Calculate entropy of a diceware passphrase")
|
|
fmt.Println(" diceware Calculate entropy of a diceware passphrase")
|
|
fmt.Println(" random Calculate entropy of a random string")
|
|
fmt.Println(" random Calculate entropy of a random string")
|
|
- fmt.Println(" insecure Calculate entropy of an invented passphrase")
|
|
|
|
|
|
+ fmt.Println(" invented Calculate entropy of an invented passphrase")
|
|
}
|
|
}
|
|
|
|
|
|
func main() {
|
|
func main() {
|
|
@@ -30,6 +30,9 @@ func main() {
|
|
var usedCharsets[] string
|
|
var usedCharsets[] string
|
|
var possibleSymbols int = 0
|
|
var possibleSymbols int = 0
|
|
|
|
|
|
|
|
+ var passphrase string
|
|
|
|
+ var err error
|
|
|
|
+
|
|
charsets = make(map[string]string)
|
|
charsets = make(map[string]string)
|
|
charsets["Numbers"] = "0123456789"
|
|
charsets["Numbers"] = "0123456789"
|
|
charsets["Lowercase"] = "abcdefghijklmnopqrstuvwxyz"
|
|
charsets["Lowercase"] = "abcdefghijklmnopqrstuvwxyz"
|
|
@@ -39,15 +42,17 @@ func main() {
|
|
charsets["Extended ASCII"] = "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"
|
|
charsets["Extended ASCII"] = "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"
|
|
|
|
|
|
dicewareCommand := flag.NewFlagSet("diceware", flag.ExitOnError)
|
|
dicewareCommand := flag.NewFlagSet("diceware", flag.ExitOnError)
|
|
- dicewarePassphraseFlag := dicewareCommand.String("passphrase", "", "the passphrase")
|
|
|
|
|
|
+ dicewarePassphraseFlag := dicewareCommand.String("password", "", "the password")
|
|
wordsFlag := dicewareCommand.Int("words", 0, "number of words in passphrase")
|
|
wordsFlag := dicewareCommand.Int("words", 0, "number of words in passphrase")
|
|
dictSizeFlag := dicewareCommand.Int("dictSize", 0, "number of words in dictionary")
|
|
dictSizeFlag := dicewareCommand.Int("dictSize", 0, "number of words in dictionary")
|
|
|
|
+ delimiterFlag := dicewareCommand.String("delimiter", "", "delimiter used")
|
|
|
|
|
|
randomCommand := flag.NewFlagSet("random", flag.ExitOnError)
|
|
randomCommand := flag.NewFlagSet("random", flag.ExitOnError)
|
|
randomPassphraseFlag := randomCommand.String("password", "", "the password")
|
|
randomPassphraseFlag := randomCommand.String("password", "", "the password")
|
|
|
|
|
|
- insecureCommand := flag.NewFlagSet("insecure", flag.ExitOnError)
|
|
|
|
- insecureWords := insecureCommand.Int("words", 0, "number of words in invented passphrase")
|
|
|
|
|
|
+ inventedCommand := flag.NewFlagSet("invented", flag.ExitOnError)
|
|
|
|
+ inventedPassphraseFlag := inventedCommand.String("password", "", "the password")
|
|
|
|
+ inventedWords := inventedCommand.Int("words", 0, "number of words in invented passphrase")
|
|
|
|
|
|
if len(os.Args) == 1 {
|
|
if len(os.Args) == 1 {
|
|
myUsage()
|
|
myUsage()
|
|
@@ -59,19 +64,23 @@ func main() {
|
|
dicewareCommand.Parse(os.Args[2:])
|
|
dicewareCommand.Parse(os.Args[2:])
|
|
case "random":
|
|
case "random":
|
|
randomCommand.Parse(os.Args[2:])
|
|
randomCommand.Parse(os.Args[2:])
|
|
- case "insecure":
|
|
|
|
- insecureCommand.Parse(os.Args[2:])
|
|
|
|
|
|
+ case "invented":
|
|
|
|
+ inventedCommand.Parse(os.Args[2:])
|
|
default:
|
|
default:
|
|
myUsage()
|
|
myUsage()
|
|
fmt.Printf("\n%q is not valid command.\n", os.Args[1])
|
|
fmt.Printf("\n%q is not valid command.\n", os.Args[1])
|
|
os.Exit(2)
|
|
os.Exit(2)
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if *inventedPassphraseFlag != "" {
|
|
|
|
+ passphrase = *inventedPassphraseFlag
|
|
|
|
+ } else if *randomPassphraseFlag != "" {
|
|
|
|
+ passphrase = *randomPassphraseFlag
|
|
|
|
+ } else {
|
|
|
|
+ passphrase = *dicewarePassphraseFlag
|
|
|
|
+ }
|
|
|
|
+
|
|
if dicewareCommand.Parsed() {
|
|
if dicewareCommand.Parsed() {
|
|
- if *dicewarePassphraseFlag == "" {
|
|
|
|
- dicewareCommand.Usage()
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
if *wordsFlag == 0 {
|
|
if *wordsFlag == 0 {
|
|
dicewareCommand.Usage()
|
|
dicewareCommand.Usage()
|
|
return
|
|
return
|
|
@@ -80,6 +89,14 @@ func main() {
|
|
dicewareCommand.Usage()
|
|
dicewareCommand.Usage()
|
|
return
|
|
return
|
|
}
|
|
}
|
|
|
|
+ if *delimiterFlag != "" {
|
|
|
|
+ for key, value := range charsets {
|
|
|
|
+ if strings.ContainsAny(*delimiterFlag, value) {
|
|
|
|
+ *dictSizeFlag += len(value)
|
|
|
|
+ usedCharsets = append(usedCharsets, key)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
entropy := math.Log2(math.Pow(float64(*dictSizeFlag), float64(*wordsFlag)))
|
|
entropy := math.Log2(math.Pow(float64(*dictSizeFlag), float64(*wordsFlag)))
|
|
fmt.Println("\nPassphrase entropy:", entropy)
|
|
fmt.Println("\nPassphrase entropy:", entropy)
|
|
}
|
|
}
|
|
@@ -89,6 +106,7 @@ func main() {
|
|
randomCommand.Usage()
|
|
randomCommand.Usage()
|
|
return
|
|
return
|
|
}
|
|
}
|
|
|
|
+
|
|
passphraseLength := len(*randomPassphraseFlag)
|
|
passphraseLength := len(*randomPassphraseFlag)
|
|
|
|
|
|
for key, value := range charsets {
|
|
for key, value := range charsets {
|
|
@@ -105,10 +123,12 @@ func main() {
|
|
fmt.Println("\nPassphrase entropy:", entropy)
|
|
fmt.Println("\nPassphrase entropy:", entropy)
|
|
}
|
|
}
|
|
|
|
|
|
- if insecureCommand.Parsed() {
|
|
|
|
- if *insecureWords != 0 {
|
|
|
|
- insecureCommand.Usage()
|
|
|
|
|
|
+ if inventedCommand.Parsed() {
|
|
|
|
+
|
|
|
|
+ if *inventedWords != 0 {
|
|
|
|
+ inventedCommand.Usage()
|
|
return
|
|
return
|
|
}
|
|
}
|
|
|
|
+ fmt.Println("Calc entropy here")
|
|
}
|
|
}
|
|
}
|
|
}
|