Copyright | (c) Dennis Gosnell 2019; Felix Paulusma 2020 |
---|---|
License | BSD-style (see LICENSE file) |
Maintainer | cdep.illabout@gmail.com |
Stability | experimental |
Portability | POSIX |
Safe Haskell | None |
Language | Haskell2010 |
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
when the hashing function requires a Salt
PBKDF2
.
And checking a password using Salt
Bcryptbcrypt
would obviously fail if checked
against a
.PasswordHash
PBKDF2
Synopsis
- data Password
- mkPassword :: Text -> Password
- newtype PasswordHash a = PasswordHash {}
- unsafeShowPassword :: Password -> Text
- newtype Salt a = Salt {}
Plain-text Password
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.
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 |
Instances
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
A salt used by a hashing algorithm.
Constructors
Salt | |
Fields |