summaryrefslogtreecommitdiff
path: root/plugins/genpass/genpass-monkey
diff options
context:
space:
mode:
authorTuowen Zhao <ztuowen@gmail.com>2020-12-16 22:13:45 -0700
committerTuowen Zhao <ztuowen@gmail.com>2020-12-16 22:13:45 -0700
commitfb45741fc1dbd40dd2be72bc35a28c6ee8f3f7a5 (patch)
treedd7746c9910755dfeb5bf28bda68e28b47d5771f /plugins/genpass/genpass-monkey
parent3aaa0bc62ece494dd2b6e47a191de79e562156f9 (diff)
parentb28665aebb4c1b07a57890eb59551bc51d0acf37 (diff)
downloadzsh-fb45741fc1dbd40dd2be72bc35a28c6ee8f3f7a5.tar.gz
zsh-fb45741fc1dbd40dd2be72bc35a28c6ee8f3f7a5.tar.bz2
zsh-fb45741fc1dbd40dd2be72bc35a28c6ee8f3f7a5.zip
Merge remote-tracking branch 'origin/master'
Diffstat (limited to 'plugins/genpass/genpass-monkey')
-rwxr-xr-xplugins/genpass/genpass-monkey32
1 files changed, 32 insertions, 0 deletions
diff --git a/plugins/genpass/genpass-monkey b/plugins/genpass/genpass-monkey
new file mode 100755
index 000000000..94ff5e131
--- /dev/null
+++ b/plugins/genpass/genpass-monkey
@@ -0,0 +1,32 @@
+#!/usr/bin/env zsh
+#
+# Usage: genpass-monkey [NUM]
+#
+# Generate a password made of 26 alphanumeric characters
+# with the security margin of at least 128 bits.
+#
+# Example password: nz5ej2kypkvcw0rn5cvhs6qxtm
+#
+# If given a numerical argument, generate that many passwords.
+
+emulate -L zsh -o no_unset -o warn_create_global -o warn_nested_var
+
+if [[ ARGC -gt 1 || ${1-1} != ${~:-<1-$((16#7FFFFFFF))>} ]]; then
+ print -ru2 -- "usage: $0 [NUM]"
+ return 1
+fi
+
+zmodload zsh/system || return
+
+{
+ local -r chars=abcdefghjkmnpqrstvwxyz0123456789
+ local c
+ repeat ${1-1}; do
+ repeat 26; do
+ sysread -s1 c || return
+ # There is uniform because $#chars divides 256.
+ print -rn -- $chars[#c%$#chars+1]
+ done
+ print
+ done
+} </dev/urandom