bcrypt

bcrypt with a threadpool
git clone https://noulin.net/git/bcrypt.git
Log | Files | Refs | README | LICENSE

bcrypt.h (3248B)


      1 #ifndef BCRYPT_H_
      2 #define BCRYPT_H_
      3 /*
      4  * bcrypt wrapper library
      5  *
      6  * Written by Remy.
      7  * No copyright is claimed, and the software is hereby placed in the public
      8  * domain.  In case this attempt to disclaim copyright and place the software
      9  * in the public domain is deemed null and void, then the software is
     10  * Copyright (c) 2000-2014 Solar Designer and it is hereby released to the
     11  * general public under the following terms:
     12  *
     13  * Redistribution and use in source and binary forms, with or without
     14  * modification, are permitted.
     15  *
     16  * There's ABSOLUTELY NO WARRANTY, express or implied.
     17  */
     18 
     19 #define BCRYPT_HASHSIZE (64)
     20 
     21 /*
     22  * This function expects a work factor between 4 and 31 and a char array to
     23  * store the resulting generated salt. The char array should typically have
     24  * BCRYPT_HASHSIZE bytes at least. If the provided work factor is not in the
     25  * previous range, it will default to 12.
     26  *
     27  * The return value is nonzero if the salt could be correctly generated and
     28  * zero otherwise.
     29  *
     30  */
     31 int bcryptGensaltSync(int workfactor, char salt[BCRYPT_HASHSIZE]);
     32 
     33 /*
     34  * This function expects a password to be hashed, a salt to hash the password
     35  * with and a char array to leave the result. Both the salt and the hash
     36  * parameters should have room for BCRYPT_HASHSIZE characters at least.
     37  *
     38  * It can also be used to verify a hashed password. In that case, provide the
     39  * expected hash in the salt parameter and verify the output hash is the same
     40  * as the input hash. However, to avoid timing attacks, it's better to use
     41  * bcryptCheckSync when verifying a password.
     42  *
     43  * The return value is nonzero if the password could be hashed and zero
     44  * otherwise.
     45  */
     46 int bcryptHashSync(const char *passwd, const char salt[BCRYPT_HASHSIZE],
     47 		  char hash[BCRYPT_HASHSIZE]);
     48 
     49 /*
     50  * This function expects a password and a hash to verify the password against.
     51  * The internal implementation is tuned to avoid timing attacks.
     52  *
     53  * The return value will be greater than zero if the provided password matches
     54  * the given hash and zero if the passwords don't match.
     55  *
     56  */
     57 int bcryptCheckSync(const char *passwd, const char hash[BCRYPT_HASHSIZE]);
     58 
     59 /*
     60  * Brief Example
     61  * -------------
     62  *
     63  * Hashing a password:
     64  *
     65  *	char salt[BCRYPT_HASHSIZE];
     66  *	char hash[BCRYPT_HASHSIZE];
     67  *	int ret;
     68  *
     69  *	ret = bcryptGensaltSync(12, salt);
     70  *	assert(ret);
     71  *	ret = bcryptHashSync("thepassword", salt, hash);
     72  *	assert(ret);
     73  *
     74  *
     75  * Verifying a password:
     76  *
     77  *	int ret;
     78  *
     79  *      ret = bcryptCheckSync("thepassword", "expectedhash");
     80  *      assert(ret != -1);
     81  *
     82  *	if (ret) {
     83  *		printf("The password matches\n");
     84  *	} else {
     85  *		printf("The password does NOT match\n");
     86  *	}
     87  *
     88  */
     89 
     90 typedef void (*bcryptHashCallbackt)(i64 err, char hash[BCRYPT_HASHSIZE], void *callbackEnv);
     91 
     92 int bcryptHash(const char *passwd, u8 saltRounds, bcryptHashCallbackt callback, void *callbackEnv);
     93 
     94 typedef void (*bcryptCheckCallbackt)(i64 err, int result, void *callbackEnv);
     95 
     96 int bcryptCheck(const char *passwd, char hash[BCRYPT_HASHSIZE], bcryptCheckCallbackt callback, void *callbackEnv);
     97 
     98 
     99 #endif
    100 
    101 #define isBcryptCompiledWithCurrentLisheepyVersion checkLibsheepyVersionBcrypt(LIBSHEEPY_VERSION)
    102 bool checkLibsheepyVersionBcrypt(const char *currentLibsheepyVersion);