-*- restructuredtext -*-

=====
Cryha
=====

Cryha is a Python toolkit for securing information into a data base; it lets
hash passwords, and encrypt/decrypt personal information. It is ready for input
of Unicode characters, and the schema is returned as Unicode.

The text is stored according to this schema for a hash:

	``separator, the hash function identifier, separator, the salt, separator,
	the hash output``

And this another for a cipher text:

	``separator, the cipher identifier, separator, the mode identifier,
	separator, the IV parameter, separator, the ciphertext``

The idea of the schema has been taken of Linux systems that store the hashed
passwords so, using a ``$`` as separator.

The use of a schema let us to store the salt (for hash) and IV (for cipher)
--which must be unique for each field--, together to the parameters that has
been used to hashing/encrypting the text.

The salt and IV parameters are obtained from a random string --using the PRNG_
of the operating system-- into a domain of 256 possible values for greater
security.


.. [PRNG] Pseudo random number generator. In Linux is */dev/urandom*.

Use
===

Typical usage:

>>> import cryha

Hasher:

>>> hasher = cryha.Hasher()
>>> hash = hasher.create('text')

>>> hasher.valid('text', hash)
True
>>> hasher.valid('Text', hash)
False

Crypter:

>>> crypter = cryha.Crypter(root_keyfile='.', dir_keyfile='test_crypter')
>>> crypt = crypter.encrypt('text')

>>> crypter.decrypt(crypt) == 'text'
True
