12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- #ifndef BCRYPT_H_
- #define BCRYPT_H_
- /*
- * bcrypt wrapper library
- *
- * Written in 2011, 2013, 2014, 2015 by Ricardo Garcia <r@rg3.name>
- *
- * To the extent possible under law, the author(s) have dedicated all copyright
- * and related and neighboring rights to this software to the public domain
- * worldwide. This software is distributed without any warranty.
- *
- * You should have received a copy of the CC0 Public Domain Dedication along
- * with this software. If not, see
- * <http://creativecommons.org/publicdomain/zero/1.0/>.
- */
- #define BCRYPT_HASHSIZE (64)
- #ifdef __cplusplus
- extern "C" {
- #endif
- /*
- * This function expects a work factor between 4 and 31 and a char array to
- * store the resulting generated salt. The char array should typically have
- * BCRYPT_HASHSIZE bytes at least. If the provided work factor is not in the
- * previous range, it will default to 12.
- *
- * The return value is zero if the salt could be correctly generated and
- * nonzero otherwise.
- *
- */
- int bcrypt_gensalt(int workfactor, char salt[BCRYPT_HASHSIZE]);
- /*
- * This function expects a password to be hashed, a salt to hash the password
- * with and a char array to leave the result. Both the salt and the hash
- * parameters should have room for BCRYPT_HASHSIZE characters at least.
- *
- * It can also be used to verify a hashed password. In that case, provide the
- * expected hash in the salt parameter and verify the output hash is the same
- * as the input hash. However, to avoid timing attacks, it's better to use
- * bcrypt_checkpw when verifying a password.
- *
- * The return value is zero if the password could be hashed and nonzero
- * otherwise.
- */
- int bcrypt_hashpw(const char *passwd, const char salt[BCRYPT_HASHSIZE],
- char hash[BCRYPT_HASHSIZE]);
- /*
- * This function expects a password and a hash to verify the password against.
- * The internal implementation is tuned to avoid timing attacks.
- *
- * The return value will be -1 in case of errors, zero if the provided password
- * matches the given hash and greater than zero if no errors are found and the
- * passwords don't match.
- *
- */
- int bcrypt_checkpw(const char *passwd, const char hash[BCRYPT_HASHSIZE]);
- /*
- * Brief Example
- * -------------
- *
- * Hashing a password:
- *
- * char salt[BCRYPT_HASHSIZE];
- * char hash[BCRYPT_HASHSIZE];
- * int ret;
- *
- * ret = bcrypt_gensalt(12, salt);
- * assert(ret == 0);
- * ret = bcrypt_hashpw("thepassword", salt, hash);
- * assert(ret == 0);
- *
- *
- * Verifying a password:
- *
- * int ret;
- *
- * ret = bcrypt_checkpw("thepassword", "expectedhash");
- * assert(ret != -1);
- *
- * if (ret == 0) {
- * printf("The password matches\n");
- * } else {
- * printf("The password does NOT match\n");
- * }
- *
- */
- #ifdef __cplusplus
- }
- #endif
- #endif
|