156 lines
4.1 KiB
Go
156 lines
4.1 KiB
Go
package pwgenerator
|
||
|
||
// Defaults.
|
||
const (
|
||
DefCount uint = 1
|
||
DefMaxLen uint = 256
|
||
DefMinLin uint = 1
|
||
)
|
||
|
||
// Hash algorithms. TODO.
|
||
const (
|
||
HashNull pwHash = iota
|
||
HashArgon2i
|
||
HashScryptSha256
|
||
HashCryptSha256
|
||
HashCryptSha512
|
||
HashBcrypt
|
||
HashBcryptSha256
|
||
HashPbkdf2Sha1
|
||
HashPbkdf2Sha256
|
||
HashPbkdf2Sha512
|
||
)
|
||
|
||
// Pre-defined charsets.
|
||
var (
|
||
// upper contains the characters from 0x41 to 0x5a ([A-Z]).
|
||
upper CharSet = CharSet{
|
||
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
|
||
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
|
||
}
|
||
// lower contains the characters from 0x61 to 0x7a ([a-z]).
|
||
lower CharSet = CharSet{
|
||
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
|
||
'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
|
||
}
|
||
// alpha contains upper and lower.
|
||
alpha CharSet = append(upper, lower...)
|
||
// numeric contains the characters from 0x30 to 0x39 ([0-9]).
|
||
numeric CharSet = CharSet{
|
||
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
|
||
}
|
||
// alphaNumeric combines alpha and numeric. This is, by far, the most widely-supported charset.
|
||
alphaNumeric CharSet = append(alpha, numeric...)
|
||
/*
|
||
symbols contains the characters from:
|
||
0x21 to 0x2f
|
||
0x3a to 0x40
|
||
0x5b to 0x60
|
||
0x7b to 0x7e
|
||
*/
|
||
symbols CharSet = CharSet{
|
||
// 0x21 to 0x2f
|
||
'!', '"', '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.', '/',
|
||
// 0x3a to 0x40
|
||
':', ';', '<', '=', '>', '?', '@',
|
||
// 0x5b to 0x60
|
||
'[', '\\', ']', '^', '_', '`',
|
||
// 0x7b to 0x7e
|
||
'{', '|', '}', '~',
|
||
}
|
||
// safeAscii can be expected to support strong passwords while also be reasonably supported JUST about in every application.
|
||
safeAscii CharSet = append(alphaNumeric, symbols...)
|
||
/*
|
||
extendedSymbols contains the characters from 0x80 to 0xff, excluding:
|
||
0x81, 0x8d, 0x8f, 0x90, 0x9d, 0xa0, 0xad
|
||
as they have no defined ASCII mapping.
|
||
*/
|
||
extendedSymbols CharSet = CharSet{
|
||
'€', '‚', 'ƒ', '„', '…', '†', '‡', 'ˆ', '‰', 'Š', '‹', 'Œ',
|
||
'Ž', '‘', '’', '“', '”', '•', '–', '—', '˜', '™', 'š', '›',
|
||
'œ', 'ž', 'Ÿ', '¡', '¢', '£', '¤', '¥', '¦', '§', '¨', '©',
|
||
'ª', '«', '¬', '®', '¯', '°', '±', '²', '³', '´', 'µ', '¶',
|
||
'·', '¸', '¹', 'º', '»', '¼', '½', '¾', '¿', 'À', 'Á', 'Â',
|
||
'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î',
|
||
'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', '×', 'Ø', 'Ù', 'Ú',
|
||
'Û', 'Ü', 'Ý', 'Þ', 'ß', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ',
|
||
'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ð', 'ñ', 'ò',
|
||
'ó', 'ô', 'õ', 'ö', '÷', 'ø', 'ù', 'ú', 'û', 'ü', 'ý', 'þ',
|
||
}
|
||
// allSymbols contains all printable non-alphanumerics.
|
||
allSymbols CharSet = append(symbols, extendedSymbols...)
|
||
)
|
||
|
||
var (
|
||
/*
|
||
AmbiguousChars are visually-ambiguous characters that may be hard to visually differentiate
|
||
depending on the font (especially in monospace fonts).
|
||
|
||
To be specifically clear, each character is provided with its ASCII hex value.
|
||
If you need the decimal/octal/etc. reference instead, you can cross-reference
|
||
it via https://square-r00t.net/ascii.html.
|
||
*/
|
||
// TODO: finish this; left off at 0xaa.
|
||
AmbiguousChars []Char = []Char{
|
||
'`', // 0x60
|
||
'\'', // 0x27
|
||
'‘', // 0x91
|
||
'’', // 0x92
|
||
'"', // 0x22
|
||
'“', // 0x93
|
||
'”', // 0x94
|
||
'¨', // 0xa8
|
||
'*', // 0x2a
|
||
'•', // 0x95
|
||
',', // 0x2c
|
||
'.', // 0x2e
|
||
'‚', // 0x82
|
||
'…', // 0x85
|
||
'!', // 0x21
|
||
'¡', // 0xa1
|
||
'1', // 0x31
|
||
'I', // 0x49
|
||
'l', // 0x6c
|
||
'|', // 0x7c
|
||
'¦', // 0xa6
|
||
'c', // 0x63
|
||
'¢', // 0xa2
|
||
'0', // 0x30
|
||
'O', // 0x4f
|
||
'o', // 0x6f
|
||
'$', // 0x24
|
||
'S', // 0x53
|
||
's', // 0x73
|
||
'Š', // 0x8a
|
||
'š', // 0x9a
|
||
'§', // 0xa7
|
||
'-', // 0x2d
|
||
'_', // 0x5f
|
||
'–', // 0x96
|
||
'—', // 0x97
|
||
'~', // 0x7e
|
||
'˜', // 0x98
|
||
'^', // 0x5e
|
||
'ˆ', // 0x88
|
||
'%', // 0x25
|
||
'‰', // 0x89
|
||
'<', // 0x3c
|
||
'‹', // 0x8b
|
||
'>', // 0x3e
|
||
'›', // 0x9b
|
||
'Y', // 0x59
|
||
'Ÿ', // 0x9f
|
||
'¥', // 0xa5
|
||
'Z', // 0x5a
|
||
'z', // 0x7a
|
||
'Ž', // 0x8e
|
||
'ž', // 0x9e
|
||
'(', // 0x28
|
||
'[', // 0x5b
|
||
'{', // 0x7b
|
||
')', // 0x29
|
||
']', // 0x5d
|
||
'}', // 0x7d
|
||
}
|
||
)
|