Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
90 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
Alexander Ilin |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
! Copyright (C) 2019 Alexander Ilin. | ||
! See http://factorcode.org/license.txt for BSD license. | ||
USING: help.markup help.syntax kernel random strings ; | ||
IN: random.passwords | ||
|
||
ABOUT: "random.passwords" | ||
|
||
ARTICLE: "random.passwords" "Generating random passwords" | ||
"The " { $vocab-link "random.passwords" } " vocab provides functions for generation of random passwords." | ||
$nl | ||
"Generate password of a given length from some often used character sets:" | ||
{ $subsections alnum-password hex-password ascii-password } | ||
"Generate a password from a custom character set:" | ||
{ $subsections password } | ||
; | ||
|
||
HELP: password | ||
{ $values | ||
{ "n" "password length" } | ||
{ "charset" string } | ||
{ "string" string } | ||
} | ||
{ $description "Generate a password of length " { $snippet "n" } " by randomly selecting characters from the " { $snippet "charset" } " string. All characters of the " { $snippet "charset" } " have equal probability of appearing at any position of the result." | ||
$nl | ||
"If " { $snippet "n" } " = 0, return empty string. If " { $snippet "n" } " < 0, throw an error." | ||
$nl | ||
{ $link secure-random-generator } " is used as the randomness source." } ; | ||
|
||
HELP: alnum-password | ||
{ $values | ||
{ "n" "password length" } | ||
{ "string" string } | ||
} | ||
{ $description "Generate a random password consisting of " { $snippet "n" } " alphanumeric characters (0..9, A..Z, a..z)." } ; | ||
|
||
HELP: ascii-password | ||
{ $values | ||
{ "n" "password length" } | ||
{ "string" string } | ||
} | ||
{ $description "Generate a random password consisting of " { $snippet "n" } " printable ASCII characters." } ; | ||
|
||
HELP: hex-password | ||
{ $values | ||
{ "n" "password length" } | ||
{ "string" string } | ||
} | ||
{ $description "Generate a random password consisting of " { $snippet "n" } " hexadecimal characters (0..9, A..F)." } ; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
! Copyright (C) 2019 Alexander Ilin. | ||
! See http://factorcode.org/license.txt for BSD license. | ||
USING: math math.parser random.passwords sequences tools.test ; | ||
IN: random.passwords.tests | ||
|
||
{ "aaaaaaaaaa" } [ 10 "a" password ] unit-test | ||
{ 10 } [ 10 "ab" password length ] unit-test | ||
{ "" } [ 0 "ab" password ] unit-test | ||
[ -1 "ab" password ] must-fail | ||
|
||
{ 2 } [ 2 ascii-password length ] unit-test | ||
{ 3 } [ 3 alnum-password length ] unit-test | ||
{ 4 } [ 4 hex-password length ] unit-test | ||
{ t } [ 4 hex-password hex> 65535 <= ] unit-test |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
! Copyright (C) 2019 Alexander Ilin. | ||
! See http://factorcode.org/license.txt for BSD license. | ||
USING: fry literals math.ranges random sequences ; | ||
IN: random.passwords | ||
|
||
<PRIVATE | ||
|
||
CONSTANT: ascii-printable-charset $[ 33 126 [a,b] ] | ||
CONSTANT: hex-charset "0123456789ABCDEF" | ||
CONSTANT: alphanum-charset $[ | ||
CHAR: 0 CHAR: 9 [a,b] | ||
CHAR: a CHAR: z [a,b] append | ||
CHAR: A CHAR: Z [a,b] append ] | ||
|
||
PRIVATE> | ||
|
||
: password ( n charset -- string ) | ||
'[ [ _ random ] "" replicate-as ] with-secure-random ; | ||
|
||
: ascii-password ( n -- string ) | ||
ascii-printable-charset password ; | ||
|
||
: hex-password ( n -- string ) | ||
hex-charset password ; | ||
|
||
: alnum-password ( n -- string ) | ||
alphanum-charset password ; |