elocrypt-2.1.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

data GenOptions Source #

Options for generating passwords or passphrases. Do not use this constructor directly. Instead use genOptions to construct an instance.

Constructors

GenOptions 
Instances
Eq GenOptions Source # 
Instance details

Defined in Data.Elocrypt

Show GenOptions Source # 
Instance details

Defined in Data.Elocrypt

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 => m String Source #

Generate two random characters. Uses trigragh to generate a weighted list.

lastN :: MonadRandom m => Int -> String -> m String Source #

Generate the last n characters using previous two characters and their trigraph

next Source #

Arguments

:: MonadRandom m 
=> String

the prefix

-> m Char 

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

capitalizeR :: MonadRandom m => Int -> String -> m String Source #

Randomly capitalize at least 1 character. Additional characters capitalize at a probability of 1/12

capitalize1 :: MonadRandom m => Int -> String -> m String Source #

Randomly capitalize 1 character

numerizeR :: MonadRandom m => Int -> String -> m String Source #

Randomly numerize at least 1 character. Additional characters numerize at a probability of 1/6

specializeR :: MonadRandom m => Int -> String -> m String Source #

Randomly make at least 1 character a symbol. Additional characters specialize at a probability of 1/4