| Copyright | (c) Sean Gillespie 2015 |
|---|---|
| License | OtherLicense |
| Maintainer | Sean Gillespie <sean@mistersg.net> |
| Stability | Experimental |
| Safe Haskell | Safe |
| Language | Haskell2010 |
Data.Elocrypt
Description
Generate easy-to-remember, hard-to-guess passwords
- newtype GenOptions = GenOptions {
- genCapitals :: Bool
- genOptions :: GenOptions
- genPassword :: RandomGen g => Int -> GenOptions -> g -> (String, g)
- genPasswords :: RandomGen g => Int -> Int -> GenOptions -> g -> ([String], g)
- newPassword :: RandomGen g => Int -> GenOptions -> g -> String
- newPasswords :: RandomGen g => Int -> Int -> GenOptions -> g -> [String]
- mkPassword :: MonadRandom m => Int -> GenOptions -> m String
- mkPasswords :: MonadRandom m => Int -> Int -> GenOptions -> m [String]
- genPassphrase :: RandomGen g => Int -> Int -> Int -> GenOptions -> g -> ([String], g)
- newPassphrase :: RandomGen g => Int -> Int -> Int -> GenOptions -> g -> [String]
- mkPassphrase :: MonadRandom m => Int -> Int -> Int -> GenOptions -> m [String]
- first2 :: MonadRandom m => GenOptions -> m String
- lastN :: MonadRandom m => GenOptions -> Int -> String -> m String
- next :: MonadRandom m => GenOptions -> String -> m Char
- nextLetter :: MonadRandom m => String -> m Char
- capitalizeR :: MonadRandom m => Bool -> Char -> m Char
Data Types
newtype GenOptions Source #
Options for generating passwords or passphrases. Do not use
this constructor directly. Instead use genOptions to construct
an instance.
Constructors
| GenOptions | |
Fields
| |
Instances
genOptions :: GenOptions Source #
Default options for generating passwords or passphrases. This is
the preferred way to construct GenOptions.
Random password generators
Arguments
| :: RandomGen g | |
| => Int | password length |
| -> GenOptions | options |
| -> g | random generator |
| -> (String, g) |
Generate a password using the generator g, returning the result and the updated generator.
-- Generate a password of length 10 using the system generator myGenPassword :: IO (String, StdGen) myGenPassword = genPassword 10 genOptions `liftM` getStdGen
Arguments
| :: RandomGen g | |
| => Int | password length |
| -> Int | number of passwords |
| -> GenOptions | options |
| -> g | random generator |
| -> ([String], g) |
Plural version of genPassword. Generates an infinite list of passwords using the generator g, returning the result and the updated generator.
-- Generate 10 passwords of length 10 using the system generator myGenPasswords :: IO ([String], StdGen) myGenPasswords = ((ls, g) -> (ls, g)liftMgenPasswords 10 10 genOptionsliftMgetStdGen
Arguments
| :: RandomGen g | |
| => Int | password length |
| -> GenOptions | options |
| -> g | random generator |
| -> String |
Generate a password using the generator g, returning the result.
-- Generate a password of length 10 using the system generator myNewPassword :: IO String myNewPassword = newPassword 10 genOptions `liftM` getStdGen
Arguments
| :: RandomGen g | |
| => Int | password length |
| -> Int | number of passwords |
| -> GenOptions | options |
| -> g | random generator |
| -> [String] |
Plural version of newPassword. Generates an infinite list of passwords using the generator g, returning the result
-- Generate 10 passwords of length 10 using the system generator
myNewPasswords :: IO [String]
myNewPasswords = genPasswords 10 10 genOptions liftM getStdGen
Arguments
| :: MonadRandom m | |
| => Int | password length |
| -> GenOptions | options |
| -> m String |
Generate a password using the MonadRandom m. MonadRandom is exposed here for extra control.
-- Generate a password of length 10 using the system generator myPassword :: IO String myPassword = evalRand (mkPassword 10 genOptions) `liftM` getStdGen
Arguments
| :: MonadRandom m | |
| => Int | password length |
| -> Int | number of passwords |
| -> GenOptions | options |
| -> m [String] |
Plural version of mkPassword. Generate an infinite list of passwords using the MonadRandom m. MonadRandom is exposed here for extra control.
-- Generate an list of length 20 with passwords of length 10 using the system generator myMkPasswords :: IO [String] myMkPasswords = evalRand (mkPasswords 10 20 genOptions) `liftM` getStdGen
Random passphrase generators
Arguments
| :: RandomGen g | |
| => Int | number of words |
| -> Int | minimum word length |
| -> Int | maximum word length |
| -> GenOptions | options |
| -> g | random generator |
| -> ([String], g) |
Generate a passphrase using the generator g, returning the result and the updated generator.
-- Generate a passphrase of 10 words, each having a length between 6 and 12, -- using the system generator myGenPassphrase :: IO (String, StdGen) myGenPassphrase = genPassword 10 6 10 genOptions `liftM` getStdGen
Arguments
| :: RandomGen g | |
| => Int | number of words |
| -> Int | minimum word length |
| -> Int | maximum word length |
| -> GenOptions | options |
| -> g | random generator |
| -> [String] |
Generate a passphrase using the generator g, returning the result.
-- Generate a passphrase of 10 words, each having a length between 6 an 12, -- using the system generator. myNewPassphrase :: IO String myNewPassphrase = newPassphrase 10 6 12 `liftM` getStdGen
Arguments
| :: MonadRandom m | |
| => Int | number of words |
| -> Int | minimum word length |
| -> Int | maximum word length |
| -> GenOptions | options |
| -> m [String] |
Generate a finite number of words of random length (between min and max chars)
using the MonadRandom m. MonadRandom is exposed here for extra control.
-- Generate a passphrase of 10 words, each having a length between 6 and 12. myPassphrase :: IO String myPassphrase = evalRand (mkPassphrase 10 6 12) `liftM` getStdGen
Internal
first2 :: MonadRandom m => GenOptions -> m String Source #
Generate two random characters. Uses trigragh
to generate a weighted list.
lastN :: MonadRandom m => GenOptions -> Int -> String -> m String Source #
Generate the last n characters using previous two characters
and their trigraph
Arguments
| :: MonadRandom m | |
| => GenOptions | options |
| -> String | the prefix |
| -> m Char |
Generate a random character based on the previous two characters and
their trigraph
Arguments
| :: MonadRandom m | |
| => String | the prefix |
| -> m Char |
Randomly choose a letter from the trigraph
Arguments
| :: MonadRandom m | |
| => Bool | Whether to do the capitalization |
| -> Char | The character to capitalize |
| -> m Char |
Randomly capitalize a character 10% of the time