elocrypt-2.0.0: Generate easy-to-remember, hard-to-guess passwords

Copyright(c) Sean Gillespie 2015
LicenseOtherLicense
MaintainerSean Gillespie <sean@mistersg.net>
StabilityExperimental
Safe HaskellSafe
LanguageHaskell2010

Data.Elocrypt

Contents

Description

Generate easy-to-remember, hard-to-guess passwords

Synopsis

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

genOptions :: GenOptions Source #

Default options for generating passwords or passphrases. This is the preferred way to construct GenOptions.

Random password generators

genPassword Source #

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
 

genPasswords Source #

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) liftM genPasswords 10 10 genOptions liftM getStdGen

newPassword Source #

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
 

newPasswords Source #

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

mkPassword Source #

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
 

mkPasswords Source #

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

genPassphrase Source #

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
 

newPassphrase Source #

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
 

mkPassphrase Source #

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

next Source #

Arguments

:: MonadRandom m 
=> GenOptions

options

-> String

the prefix

-> m Char 

Generate a random character based on the previous two characters and their trigraph

nextLetter Source #

Arguments

:: MonadRandom m 
=> String

the prefix

-> m Char 

Randomly choose a letter from the trigraph

capitalizeR Source #

Arguments

:: MonadRandom m 
=> Bool

Whether to do the capitalization

-> Char

The character to capitalize

-> m Char 

Randomly capitalize a character 10% of the time