password-types-1.0.0.0: Types for handling passwords
Copyright(c) Dennis Gosnell 2019; Felix Paulusma 2020
LicenseBSD-style (see LICENSE file)
Maintainercdep.illabout@gmail.com
Stabilityexperimental
PortabilityPOSIX
Safe HaskellNone
LanguageHaskell2010

Data.Password.Types

Description

This library provides datatypes for interacting with passwords. It provides the types Password and PasswordHash, which correspond to plain-text and hashed passwords.

Special instances

There is an accompanying password-instances package that provides canonical typeclass instances for Password and PasswordHash for many common typeclasses, like FromJSON from aeson, PersistField from persistent, etc.

See the password-instances package for more information.

Phantom types

The PasswordHash and Salt data types have a phantom type parameter to be able to make sure salts and hashes can carry information about the algorithm they should be used with.

For example, the bcrypt algorithm requires its salt to be exactly 16 bytes (128 bits) long, so this way you won't accidentally use a Salt PBKDF2 when the hashing function requires a Salt Bcrypt. And checking a password using bcrypt would obviously fail if checked against a PasswordHash PBKDF2.

Synopsis

Plain-text Password

data Password Source #

A plain-text password.

This represents a plain-text password that has NOT been hashed.

You should be careful with Password. Make sure not to write it to logs or store it in a database.

You can construct a Password by using the mkPassword function or as literal strings together with the OverloadedStrings pragma (or manually, by using fromString on a String). Alternatively, you could also use some of the instances in the password-instances library.

Instances

Instances details
Show Password Source #

CAREFUL: Show-ing a Password will always print "**PASSWORD**"

>>> show ("hello" :: Password)
"**PASSWORD**"
Instance details

Defined in Data.Password.Types

IsString Password Source # 
Instance details

Defined in Data.Password.Types

Password Hashing

newtype PasswordHash a Source #

A hashed password.

This represents a password that has been put through a hashing function. The hashed password can be stored in a database.

Constructors

PasswordHash 

Fields

Unsafe debugging function to show a Password

unsafeShowPassword :: Password -> Text Source #

This is an unsafe function that shows a password in plain-text.

>>> unsafeShowPassword ("foobar" :: Password)
"foobar"

You should generally not use this function in production settings, as you don't want to accidentally print a password anywhere, like logs, network responses, database entries, etc.

This will mostly be used by other libraries to handle the actual password internally, though it is conceivable that, even in a production setting, a password might have to be handled in an unsafe manner at some point.

Hashing salts

newtype Salt a Source #

A salt used by a hashing algorithm.

Constructors

Salt 

Fields

Instances

Instances details
Eq (Salt a) Source # 
Instance details

Defined in Data.Password.Types

Methods

(==) :: Salt a -> Salt a -> Bool #

(/=) :: Salt a -> Salt a -> Bool #

Show (Salt a) Source # 
Instance details

Defined in Data.Password.Types

Methods

showsPrec :: Int -> Salt a -> ShowS #

show :: Salt a -> String #

showList :: [Salt a] -> ShowS #