aboutsummaryrefslogtreecommitdiff
path: root/lib/libcrypt/crypt.c
Commit message (Collapse)AuthorAgeFilesLines
* lib: further adoption of SPDX licensing ID tags.Pedro F. Giffuni2017-11-261-0/+2
| | | | | | | | | | | | | | | Mainly focus on files that use BSD 2-Clause license, however the tool I was using mis-identified many licenses so this was mostly a manual - error prone - task. The Software Package Data Exchange (SPDX) group provides a specification to make it easier for automated tools to detect and summarize well known opensource licenses. We are gradually adopting the specification, noting that the tags are considered only advisory and do not, in any way, superceed or replace the license texts. Notes: svn path=/head/; revision=326219
* Make libcrypt thread-safe. Add crypt_r(3).Ed Schouten2016-08-101-9/+26
| | | | | | | | | | | | | | | | | | | | | | glibc has a pretty nice function called crypt_r(3), which is nothing more than crypt(3), but thread-safe. It accomplishes this by introducing a 'struct crypt_data' structure that contains a buffer that is large enough to hold the resulting string. Let's go ahead and also add this function. It would be a shame if a useful function like this wouldn't be usable in multithreaded apps. Refactor crypt.c and all of the backends to no longer declare static arrays, but write their output in a provided buffer. There is no need to do any buffer length computation here, as we'll just need to ensure that 'struct crypt_data' is large enough, which it is. _PASSWORD_LEN is defined to 128 bytes, but in this case I'm picking 256, as this is going to be part of the actual ABI. Differential Revision: https://reviews.freebsd.org/D7306 Notes: svn path=/head/; revision=303920
* Change the hardcoded default back from SHA512 to DES.Dag-Erling Smørgrav2014-10-091-7/+10
| | | | | | | | PR: 192277 MFC after: 3 days Notes: svn path=/head/; revision=272830
* Don't break the legacy applications which setHajimu UMEMOTO2014-05-281-1/+5
| | | | | | | | | just 2 bytes to salt. MFC after: 1 week Notes: svn path=/head/; revision=266813
* r261913 broke DES passwords, because the only way they could work,Dag-Erling Smørgrav2014-04-261-77/+56
| | | | | | | | | | | | | | | | | | | | | | | | since they don't have an easily recognizable signature, was if they were the default. This commit rewrites crypt_set_format(3) etc to address this: - Use a pointer instead of an index to identify the default format. This pointer is initialized at compile time to point to the first first element in the list of supported formats, eliminating the need for crypt_setdefault(). Using a pointer also simplifies iterating through the list. - Associate DES with the magic string "_", which takes care of the Extended DES format. - Finally, as a special case, if the salt does not match any known magic string but matches ^[./0-9A-Za-z]{13}$, it is assumed to be a DES password and is passed on to crypt_des(). MFC after: 1 week Notes: svn path=/head/; revision=264964
* Switch the hardcoded default hash function from MD5 / DES to SHA512.Dag-Erling Smørgrav2014-02-151-5/+1
| | | | Notes: svn path=/head/; revision=261913
* Stop using auth_getval() now that it always returns NULL. Instead,Dag-Erling Smørgrav2012-06-121-7/+7
| | | | | | | | | | hardcode the default to what it would be if we didn't hardcode it, i.e. DES if supported and MD5 otherwise. MFC after: 3 weeks Notes: svn path=/head/; revision=236967
* s/shaN_crypt/crypt_shaN/g to be a more consistent with the existing naming.David E. O'Brien2011-05-051-2/+2
| | | | | | | Reviewed by: markm Notes: svn path=/head/; revision=221471
* Add SHA256/512 ($5$ and $6$) to crypt(3). Used in linux-world, doesn'tMark Murray2011-04-091-0/+10
| | | | | | | | | | | hurt us. PR: misc/124164 Submitted by: KIMURA Yasuhiro < yasu utahime org > MFC after: 1 month Notes: svn path=/head/; revision=220497
* Add a new hash type. This "NT-hash" is compatible with the passwordMark Murray2003-06-021-0/+5
| | | | | | | | | | hashing scheme used in Microsoft's NT machines. IT IS NOT SECURE! DON'T USE IT! This is for the use of competent sysadmins only! Submitted by: Michael Bretterklieber Notes: svn path=/head/; revision=115720
* No functional change, but big code cleanup. WARNS, lint(1) and style(9).Mark Murray2002-03-061-7/+9
| | | | Notes: svn path=/head/; revision=91754
* Implement __FBSDID()Matthew Dillon2001-09-161-4/+2
| | | | Notes: svn path=/head/; revision=83551
* Removed duplicate VCS ID tags, as per style(9).Ruslan Ermilov2001-08-131-3/+0
| | | | Notes: svn path=/head/; revision=81586
* Add OpenBSD-style blowfish password hashing. This makes one lessMark Murray2001-03-111-0/+7
| | | | | | | | | | | | | gratuitous difference between us and our sister project. This was given to me _ages_ ago. May apologies to Paul for the length of time its taken me to commit. Obtained from: Niels Provos <provos@physnet.uni-hamburg.de>/OpenBSD Submitted by: Paul Herman <pherman@frenchfries.net> Notes: svn path=/head/; revision=74106
* Hindsight is wonderful, but I got cold feet over the crypt(3) defaultPeter Wemm2000-12-281-5/+5
| | | | | | | | | | | | | | | | | | | | so I am backing it out for now. The problem is that some random program calling crypt() could be passing a DES salt and the crypt(3) library would encrypt it in md5 mode and there would be a password mismatch as a result. I wrote a validater function for the DES code to verify that a salt is valid for DES, but I realized there were too many strange things to go wrong. passwd(1), pw(8) etc still generate md5 passwords by default for /etc/master.passwd, so this is almost academic. It is a big deal for things that have their own crypt(3)-ed password strings (.htaccess, etc etc). Those are the things I do not want to break. My DES salt recognizer basically checked if the salt was either 2 or 13 characters long, or began with '_' (_PASSWORD_EFMT1). I think it would have worked but I have seen way too much crypt() mishandling in the past. Notes: svn path=/head/; revision=70421
* Merge into a single US-exportable libcrypt, which only providesPeter Wemm2000-12-281-10/+40
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | one-way hash functions for authentication purposes. There is no more "set the libcrypt->libXXXcrypt" nightmare. - Undo the libmd.so hack, use -D to hide the md5c.c internals. - Remove the symlink hacks in release/Makefile - the algorthm is set by set_crypt_format() as before. If this is not called, it tries to heuristically figure out the hash format, and if all else fails, it uses the optional auth.conf entry to chose the overall default hash. - Since source has non-hidden crypto in it there may be some issues with having the source it in some countries, so preserve the "secure/*" division. You can still build a des-free libcrypt library if you want to badly enough. This should not be a problem in the US or exporting from the US as freebsd.org had notified BXA some time ago. That makes this stuff re-exportable by anyone. - For consistancy, the default in absence of any other clues is md5. This is to try and minimize POLA across buildworld where folk may suddenly be activating des-crypt()-hash support. Since the des hash may not always be present, it seemed sensible to make the stronger md5 algorithm the default. All things being equal, no functionality is lost. Reviewed-by: jkh (flame-proof suit on) Notes: svn path=/head/; revision=70419
* Still have to support libscrypt for now :( Add #defines to take DESBrian Feldman2000-08-241-0/+2
| | | | | | | out for it. Notes: svn path=/head/; revision=65053
* Add working and easy crypt(3)-switching. Yes, we need a whole new APIBrian Feldman2000-08-221-7/+50
| | | | | | | | | | | | | | | | | for crypt(3) by now. In any case: Add crypt_set_format(3) + documentation to -lcrypt. Add login_setcryptfmt(3) + documentation to -lutil. Support for switching crypt formats in passwd(8). Support for switching crypt formats in pw(8). The simple synopsis is: edit login.conf; add a passwd_format field set to "des" or "md5"; go nuts :) Reviewed by: peter Notes: svn path=/head/; revision=64918
* Zap SHA1 password support. This will be re-implemented at a later date.Kris Kennaway2000-01-071-2/+0
| | | | Notes: svn path=/head/; revision=55535
* Never return NULL, always return a hash.Mark Murray1999-09-221-1/+1
| | | | | | | Submitted by: dt Notes: svn path=/head/; revision=51538
* Big code cleanup. (Inspired by Brandon Gillespie). Also move asMark Murray1999-09-201-142/+34
| | | | | | | much as possible away from secure/ to make extending easier. Notes: svn path=/head/; revision=51462
* $Header$ -> $FreeBSD$Peter Wemm1999-08-281-1/+1
| | | | Notes: svn path=/head/; revision=50488
* $Id$ -> $FreeBSD$Peter Wemm1999-08-281-2/+2
| | | | Notes: svn path=/head/; revision=50476
* The new crypt code broke "make world". Back it out.Mark Murray1999-01-231-154/+122
| | | | Notes: svn path=/head/; revision=43092
* Rewrite of crypt library to be more modular, and addition of theBrandon Gillespie1999-01-211-122/+154
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Secure Hashing Algorithm - 1 (SHA-1), along with the further refinement of what $x$salt$hash means. With this new crypt the following are all acceptable: $1$ $MD5$ $SHA1$ Note: $2$ is used by OpenBSD's Blowfish, which I considered adding as $BF$, but there is no actual need for it with SHA-1. However, somebody wishing to add OpenBSD password support could easilly add it in now. There is also a malloc_crypt() available in the library now, which behaves exactly the same as crypt(), but it uses a malloced buffer instead of a static buffer. However, this is not standard so will likely not be used much (at all). Also, for those interested I did a brief speed test Pentium 166/MMX, which shows the DES crypt to do approximately 2640 crypts a CPU second, MD5 to do about 62 crypts a CPU second and SHA1 to do about 18 crypts a CPU second. Reviewed by: Mark Murray Notes: svn path=/head/; revision=42981
* Revert $FreeBSD$ to $Id$Peter Wemm1997-02-221-2/+2
| | | | Notes: svn path=/head/; revision=22993
* Make the long-awaited change from $Id$ to $FreeBSD$Jordan K. Hubbard1997-01-141-2/+2
| | | | | | | | | | | This will make a number of things easier in the future, as well as (finally!) avoiding the Id-smashing problem which has plagued developers for so long. Boy, I'm glad we're not using sup anymore. This update would have been insane otherwise. Notes: svn path=/head/; revision=21673
* A couple of minor nits.Poul-Henning Kamp1996-10-141-5/+10
| | | | | | | | Submitted by: Craig Leres <leres@ee.lbl.gov> Submitted by: Theo Deraadt <deraadt@theos.com> Notes: svn path=/head/; revision=18918
* General -Wall warning cleanup, part I.Jordan K. Hubbard1996-07-121-2/+3
| | | | | | | Submitted-By: Kent Vander Velden <graphix@iastate.edu> Notes: svn path=/head/; revision=17141
* Remove trailing whitespace.Rodney W. Grimes1995-05-301-7/+7
| | | | Notes: svn path=/head/; revision=8870
* *** ATTENTION *** YOU MIGHT BE ABOUT TO BE HOSED *** ATTENTION ***Poul-Henning Kamp1994-11-071-153/+120
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This effectively changes the non-DES password algoritm. If you have the "securedist" installed you will have no problems with this. (Though you might want to consider using this password-encryption instead of the DES-based if your system is likely to be hacked) If you are running a -current system without the "securedist" installed: YOU WILL NEED TO CHANGE ALL PASSWORDS !! There is no backwards mode. Suggested procedure is: Update your sources cd /usr/src/lib/libcrypt make clean make all make install passwd root <set roots new password> change password for any other users on the system. This algorithm is expected to be much better than the traditional DES- based algorithm. It uses the MD5 algorithm at what it is best at, as opposed to the DES algorithm at something it isn't good at at all. The algorithm is designed such that it should very hard to shortcut the calculations needed to build a dictionary, and to make partial knowledge (Hmm, his password starts with a 'P'...) useless. Of course if somebody breaks the MD5 algorithm this looses too. The salt is 48 bits (8 char @ base64). The encrypted password is 128 bits. And I am positively delighted to say that it takes 34 msec to crypt() a password on a Pentium/60Mhz, so building a dictionary is not really an option for hackers at the moment. Notes: svn path=/head/; revision=4246
* Nates password scrambler, from FreebSD 1.1.5, but with everything except Geoff Rehmet1994-08-091-0/+184
crypt() ripped out Reviewed by: Geoff Rehmet Submitted by: Nate Williams Notes: svn path=/cvs2svn/branches/natecrypt/; revision=1984