# Passlib 1.4 & Earlier

## 1.4 (2011-05-04)

This release contains a large number of changes, both large and small. It adds a number of PBKDF2-based schemes, better support for LDAP-format hashes, improved documentation, and faster load times. In detail…

### Hashes

> - added LDAP `{CRYPT}` support for all hashes known to be supported by OS crypt()

> - added 3 custom PBKDF2 schemes for general use, as well as 3 LDAP-compatible versions.

> - added support for Dwayne Litzenberger’s PBKDF2 scheme.

> - added support for Grub2’s PBKDF2 hash scheme.

> - added support for Atlassian’s PBKDF2 password hash

> - added support for all hashes used by the Roundup Issue Tracker

> - bsdi_crypt, sha1_crypt now check for OS crypt() support

> - `salt_size` keyword added to encrypt() method of all the hashes which support variable-length salts.

> - security fix: disabled unix_fallback’s “wildcard password” support unless explicitly enabled by user.

### CryptContext

> - host_context now dynamically detects which formats OS crypt() supports, instead of guessing based on sys.platform.

> - added predefined context for Roundup Issue Tracker database.

> - added CryptContext.verify_and_update() convenience method, to make it easier to perform both operations at once.

> - bugfix: fixed NameError in category+min_verify_time border case

> - apps & hosts modules now use new `LazyCryptContext` wrapper class - this should speed up initial import, and reduce memory by not loading unneeded hashes.

### Documentation

> - greatly expanded documentation on how to use CryptContexts.

> - roughly documented framework for writing & testing custom password handlers.

> - various minor improvements.

### Internals

> - added generate_password() convenience method

> - refactored framework for building hash handlers, using new mixin-based system.

> - deprecated old handler framework - will remove in 1.5

> - deprecated list_to_bytes & bytes_to_list - not used, will remove in 1.5

### Other

> - password hash api - as part of cleaning up optional attributes specification, renamed a number of them to reduce ambiguity:

>   > - renamed {xxx}_salt_chars attributes -> xxx_salt_size

>   > - renamed salt_charset -> salt_chars

>   > - old attributes still present, but deprecated - will remove in 1.5

> - password hash api - tightened specifications for salt & rounds parameters, added support for hashes w/ no max salt size.

> - improved password hash api conformance tests

> - PyPy compatibility

## 1.3.1 (2011-03-28)

> Minor bugfix release.

> - bugfix: replaced “sys.maxsize” reference that was failing under py25

> - bugfix: fixed default_rounds>max_rounds border case that could cause ValueError during CryptContext.encrypt()

> - minor documentation changes

> - added instructions for building html documentation from source

## 1.3 (2011-03-25)

> First public release.

> - documentation completed

> - 99% unittest coverage

> - some refactoring and lots of bugfixes

> - added support for a number of additional password schemes: bigcrypt, crypt16, sun md5 crypt, nthash, lmhash, oracle10 & 11, phpass, sha1, generic hex digests, ldap digests.

## 1.2 (2011-01-06)

> Note

> For this and all previous versions, Passlib did not exist independently, but as a subpackage of BPS, a private & unreleased toolkit library.

> - many bugfixes

> - global registry added

> - transitional release for applications using BPS library.

> - first truly functional release since splitting from BPS library (see below).

## 1.0 (2009-12-11)

> - CryptContext & CryptHandler framework

> - added support for: des-crypt, bcrypt (via py-bcrypt), postgres, mysql

> - added unit tests

## 0.5 (2008-05-10)

> - initial production version

> - consolidated from code scattered across multiple applications

> - MD5-Crypt, SHA256-Crypt, SHA512-Crypt support