Crypt::Passphrase::Bcrypt(3)

NAME
Crypt::Passphrase::Bcrypt - A bcrypt encoder for Crypt::Passphrase

VERSION
version 0.009

SYNOPSIS
 my $passphrase = Crypt::Passphrase->new(
   encoder => {
     module => 'Bcrypt',
     cost   => 14,
     hash   => 'sha256',
   },
 );

DESCRIPTION
This class implements a bcrypt encoder for Crypt::Passphrase. For high-end parameters Crypt::Passphrase::Argon2 is recommended over this module as an encoder, as that provides memory-hardness and more easily allows for long passwords.

Note that in bcrypt passwords may only contain 72 characters and may not contain any null-byte. To work around this limitation this module supports prehashing the input in a way that prevents password shucking. By default it will reject such passwords when prehashing is not used.

  Configuration
It accepts the following arguments:

•   cost

    This is the cost factor that is used to hash passwords. It currently defaults to 14, but this may change in the future.

•   subtype

    •   "2b"

        This is the subtype everyone has been using since 2014. The change here is that the hashing algorithm now requires utf-8 encoding, and the null terminator must be included for hashing.

    •   "2y"

        This type is considered equivalent to "2b". It is common on php but not elsewhere.

    •   "2a"

        This is an old and subtly buggy version of bcrypt. This is mainly useful for Crypt::Eksblowfish compatibility, along with older OpenBSD (pre 5.5) implementations.

    •   "2x"

        This is a very broken version that is only useful for compatibility with ancient php versions and their "crypt_blowfish" library.

    This is "2b" by default, and you're unlikely to want to change this. Details about why this came about can be found here <http://undeadly.org/cgi?action=article&sid=20140224132743>. They are all security equivalent but for forward compatibility you should only ever generate new passwords with "2b".

•   hash

    Pre-hash the password using the specified hash. It will support any hash supported by Crypt::Bcrypt, which is currently 'sha256', 'sha384' and 'sha512'. This is mainly useful because plain bcrypt is not null-byte safe and only supports 72 characters of input. This uses a salt-keyed hash to prevent password shucking.

•   length_check

    When not pre-hashing bcrypt passwords may only contain 72 characters and may not contain any null-byte. The value of this argument decides what to do if a hash is found to violate that restriction. Allowed values are:

    •   'die' (the default)

        This will die when given an incompliant password.

    •   'warn'

        This will warn about the incompliant password.

    •   'ignore'

        This will silently pass the password.

    Alternatively, you can pass it a subref with your own handler, this will be passed the error message as its argument.

  SUPPORTED CRYPT TYPES
It supports the above described subtypes, as well as "bcrypt-sha256", "bcrypt-sha384" and "bcrypt-sha512" for prehashed bcrypt.

AUTHOR
Leon Timmermans <fawaka@gmail.com>

COPYRIGHT AND LICENSE
This software is copyright (c) 2021 by Leon Timmermans.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.