diff options
Diffstat (limited to 'crypt/crypt-entry.c')
-rw-r--r-- | crypt/crypt-entry.c | 183 |
1 files changed, 0 insertions, 183 deletions
diff --git a/crypt/crypt-entry.c b/crypt/crypt-entry.c deleted file mode 100644 index c24c0110a6..0000000000 --- a/crypt/crypt-entry.c +++ /dev/null @@ -1,183 +0,0 @@ -/* - * UFC-crypt: ultra fast crypt(3) implementation - * - * Copyright (C) 1991-2023 Free Software Foundation, Inc. - * - * The GNU C Library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * The GNU C Library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the GNU C Library; if not, see - * <https://www.gnu.org/licenses/>. - * - * crypt entry points - * - * @(#)crypt-entry.c 1.2 12/20/96 - * - */ - -#ifdef DEBUG -#include <stdio.h> -#endif -#include <string.h> -#include <errno.h> -#include <fips-private.h> - -#ifndef STATIC -#define STATIC static -#endif - -#include "crypt-private.h" -#include <shlib-compat.h> - -/* Prototypes for local functions. */ -#ifndef __GNU_LIBRARY__ -void _ufc_clearmem (char *start, int cnt); -#else -#define _ufc_clearmem(start, cnt) memset(start, 0, cnt) -#endif -extern char *__md5_crypt_r (const char *key, const char *salt, char *buffer, - int buflen); -extern char *__md5_crypt (const char *key, const char *salt); -extern char *__sha256_crypt_r (const char *key, const char *salt, - char *buffer, int buflen); -extern char *__sha256_crypt (const char *key, const char *salt); -extern char *__sha512_crypt_r (const char *key, const char *salt, - char *buffer, int buflen); -extern char *__sha512_crypt (const char *key, const char *salt); - -/* Define our magic string to mark salt for MD5 encryption - replacement. This is meant to be the same as for other MD5 based - encryption implementations. */ -static const char md5_salt_prefix[] = "$1$"; - -/* Magic string for SHA256 encryption. */ -static const char sha256_salt_prefix[] = "$5$"; - -/* Magic string for SHA512 encryption. */ -static const char sha512_salt_prefix[] = "$6$"; - -/* For use by the old, non-reentrant routines (crypt/encrypt/setkey) */ -extern struct crypt_data _ufc_foobar; - -/* - * UNIX crypt function - */ - -char * -__crypt_r (const char *key, const char *salt, - struct crypt_data * __restrict data) -{ - ufc_long res[4]; - char ktab[9]; - ufc_long xx = 25; /* to cope with GCC long long compiler bugs */ - -#ifdef _LIBC - /* Try to find out whether we have to use MD5 encryption replacement. */ - if (strncmp (md5_salt_prefix, salt, sizeof (md5_salt_prefix) - 1) == 0) - { - /* FIPS rules out MD5 password encryption. */ - if (fips_enabled_p ()) - { - __set_errno (EPERM); - return NULL; - } - return __md5_crypt_r (key, salt, (char *) data, - sizeof (struct crypt_data)); - } - - /* Try to find out whether we have to use SHA256 encryption replacement. */ - if (strncmp (sha256_salt_prefix, salt, sizeof (sha256_salt_prefix) - 1) == 0) - return __sha256_crypt_r (key, salt, (char *) data, - sizeof (struct crypt_data)); - - /* Try to find out whether we have to use SHA512 encryption replacement. */ - if (strncmp (sha512_salt_prefix, salt, sizeof (sha512_salt_prefix) - 1) == 0) - return __sha512_crypt_r (key, salt, (char *) data, - sizeof (struct crypt_data)); -#endif - - /* - * Hack DES tables according to salt - */ - if (!_ufc_setup_salt_r (salt, data)) - { - __set_errno (EINVAL); - return NULL; - } - - /* FIPS rules out DES password encryption. */ - if (fips_enabled_p ()) - { - __set_errno (EPERM); - return NULL; - } - - /* - * Setup key schedule - */ - _ufc_clearmem (ktab, (int) sizeof (ktab)); - (void) strncpy (ktab, key, 8); - _ufc_mk_keytab_r (ktab, data); - - /* - * Go for the 25 DES encryptions - */ - _ufc_clearmem ((char*) res, (int) sizeof (res)); - _ufc_doit_r (xx, data, &res[0]); - - /* - * Do final permutations - */ - _ufc_dofinalperm_r (res, data); - - /* - * And convert back to 6 bit ASCII - */ - _ufc_output_conversion_r (res[0], res[1], salt, data); - - /* - * Erase key-dependent intermediate data. Data dependent only on - * the salt is not considered sensitive. - */ - explicit_bzero (ktab, sizeof (ktab)); - explicit_bzero (data->keysched, sizeof (data->keysched)); - explicit_bzero (res, sizeof (res)); - - return data->crypt_3_buf; -} -weak_alias (__crypt_r, crypt_r) - -char * -crypt (const char *key, const char *salt) -{ -#ifdef _LIBC - /* Try to find out whether we have to use MD5 encryption replacement. */ - if (strncmp (md5_salt_prefix, salt, sizeof (md5_salt_prefix) - 1) == 0 - /* Let __crypt_r deal with the error code if FIPS is enabled. */ - && !fips_enabled_p ()) - return __md5_crypt (key, salt); - - /* Try to find out whether we have to use SHA256 encryption replacement. */ - if (strncmp (sha256_salt_prefix, salt, sizeof (sha256_salt_prefix) - 1) == 0) - return __sha256_crypt (key, salt); - - /* Try to find out whether we have to use SHA512 encryption replacement. */ - if (strncmp (sha512_salt_prefix, salt, sizeof (sha512_salt_prefix) - 1) == 0) - return __sha512_crypt (key, salt); -#endif - - return __crypt_r (key, salt, &_ufc_foobar); -} - -#if SHLIB_COMPAT (libcrypt, GLIBC_2_0, GLIBC_2_28) -weak_alias (crypt, fcrypt) -compat_symbol (libcrypt, fcrypt, fcrypt, GLIBC_2_0); -#endif |