Mercurial > repos > rliterman > csp2
diff CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/include/crypt.h @ 69:33d812a61356
planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author | jpayne |
---|---|
date | Tue, 18 Mar 2025 17:55:14 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/include/crypt.h Tue Mar 18 17:55:14 2025 -0400 @@ -0,0 +1,251 @@ +/* High-level libcrypt interfaces. + + Copyright (C) 1991-2017 Free Software Foundation, Inc. + + This 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. + + This 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 this library; if not, see + <https://www.gnu.org/licenses/>. */ + +#ifndef _CRYPT_H +#define _CRYPT_H 1 + +#include <sys/cdefs.h> + +__BEGIN_DECLS + +/* The strings returned by crypt, crypt_r, crypt_rn, and crypt_ra will + be no longer than this, counting the terminating NUL. (Existing + algorithms all produce much shorter strings, but we have reserved + generous space for future expansion.) This is NOT the appropriate + size to use in allocating the buffer supplied to crypt_rn; use + sizeof (struct crypt_data) instead. */ +#define CRYPT_OUTPUT_SIZE 384 + +/* Passphrases longer than this (counting the terminating NUL) are not + supported. Note that some hash algorithms have lower limits. */ +#define CRYPT_MAX_PASSPHRASE_SIZE 512 + +/* The strings returned by crypt_gensalt, crypt_gensalt_rn, and + crypt_gensalt_ra will be no longer than this. This IS the + appropriate size to use when allocating the buffer supplied to + crypt_gensalt_rn. (Again, existing algorithms all produce + much shorter strings, but we have reserved generous space for + future expansion.) */ +#define CRYPT_GENSALT_OUTPUT_SIZE 192 + +/* One-way hash the passphrase PHRASE as specified by SETTING, and + return a string suitable for storage in a Unix-style "passwd" file. + + If SETTING is a previously hashed passphrase, the string returned + will be equal to SETTING if and only if PHRASE is the same as the + passphrase that was previously hashed. See the documentation for + other ways to use this function. + + The string returned by this function is stored in a statically- + allocated buffer, and will be overwritten if the function is called + again. It is not safe to call this function from multiple threads + concurrently. + + If an error occurs (such as SETTING being nonsense or unsupported) + the string returned will begin with '*', and will not be equal to + SETTING nor to any valid hashed passphrase. Otherwise, the string + will not begin with '*'. */ +extern char *crypt (const char *__phrase, const char *__setting) +__THROW; + +/* These sizes are chosen to make sizeof (struct crypt_data) add up to + exactly 32768 bytes. */ +#define CRYPT_DATA_RESERVED_SIZE 767 +#define CRYPT_DATA_INTERNAL_SIZE 30720 + +/* Memory area used by crypt_r. */ +struct crypt_data +{ + /* crypt_r writes the hashed password to this field of its 'data' + argument. crypt_rn and crypt_ra do the same, treating the + untyped data area they are supplied with as this struct. */ + char output[CRYPT_OUTPUT_SIZE]; + + /* Applications are encouraged, but not required, to use this field + to store the "setting" string that must be passed to crypt_*. + Future extensions to the API may make this more ergonomic. + + A valid "setting" is either previously hashed password or the + string produced by one of the crypt_gensalt functions; see the + crypt_gensalt documentation for further details. */ + char setting[CRYPT_OUTPUT_SIZE]; + + /* Applications are encouraged, but not required, to use this field + to store the unhashed passphrase they will pass to crypt_*. + Future extensions to the API may make this more ergonomic. */ + char input[CRYPT_MAX_PASSPHRASE_SIZE]; + + /* Reserved for future application-visible fields. For maximum + forward compatibility, applications should set this field to all + bytes zero before calling crypt_r, crypt_rn, or crypt_ra for the + first time with a just-allocated 'struct crypt_data'. Future + extensions to the API may make this more ergonomic. */ + char reserved[CRYPT_DATA_RESERVED_SIZE]; + + /* This field should be set to 0 before calling crypt_r, crypt_rn, + or crypt_ra for the first time with a just-allocated + 'struct crypt_data'. This is not required if crypt_ra is allowed + to do the allocation itself (i.e. if the *DATA argument is a null + pointer). Future extensions to the API may make this more ergonomic. */ + char initialized; + + /* Scratch space used internally. Applications should not read or + write this field. All data written to this area is erased before + returning from the library. */ + char internal[CRYPT_DATA_INTERNAL_SIZE]; +}; + +/* Thread-safe version of crypt. Instead of writing to a static + storage area, the string returned by this function will be within + DATA->output. Otherwise, behaves exactly the same as crypt. */ +extern char *crypt_r (const char *__phrase, const char *__setting, + struct crypt_data *__restrict __data) +__THROW; + +/* Another thread-safe version of crypt. Instead of writing to a + static storage area, the string returned by this function will be + somewhere within the space provided at DATA, which is of length SIZE + bytes. SIZE must be at least sizeof (struct crypt_data). + + Also, if an error occurs, this function returns a null pointer, + not a special string. (However, the string returned on success + still will never begin with '*'.) */ +extern char *crypt_rn (const char *__phrase, const char *__setting, + void *__data, int __size) +__THROW; + +/* Yet a third thread-safe version of crypt; this one works like + getline(3). *DATA must be either 0 or a pointer to memory + allocated by malloc, and *SIZE must be the size of the allocation. + This space will be allocated or reallocated as necessary and the + values updated. The string returned by this function will be + somewhere within the space at *DATA. It is safe to deallocate + this space with free when it is no longer needed. + + Like crypt_rn, this function returns a null pointer on failure, not + a special string. */ +extern char *crypt_ra (const char *__phrase, const char *__setting, + void **__data, int *__size) +__THROW; + + +/* Generate a string suitable for use as the setting when hashing a + new passphrase. PREFIX controls which hash function will be used, + COUNT controls the computational cost of the hash (for functions + where this is tunable), and RBYTES should point to NRBYTES bytes of + random data. If PREFIX is a null pointer, the current best default + is used; if RBYTES is a null pointer, random data will be retrieved + from the operating system if possible. (Caution: setting PREFIX to + an *empty string* selects the use of the oldest and least secure + hash in the library. Don't do that.) + + The string returned is stored in a statically-allocated buffer, and + will be overwritten if the function is called again. It is not + safe to call this function from multiple threads concurrently. + However, within a single thread, it is safe to pass the string as + the SETTING argument to crypt without copying it first; the two + functions use separate buffers. + + If an error occurs (e.g. a prefix that does not correspond to a + supported hash function, or an inadequate amount of random data), + this function returns a null pointer. */ +extern char *crypt_gensalt (const char *__prefix, unsigned long __count, + const char *__rbytes, int __nrbytes) +__THROW; + +/* Thread-safe version of crypt_gensalt; instead of a + statically-allocated buffer, the generated setting string is + written to OUTPUT, which is OUTPUT_SIZE bytes long. OUTPUT_SIZE + must be at least CRYPT_GENSALT_OUTPUT_SIZE (see above). + + If an error occurs, this function returns a null pointer and writes + a string that does not correspond to any valid setting into OUTPUT. */ +extern char *crypt_gensalt_rn (const char *__prefix, unsigned long __count, + const char *__rbytes, int __nrbytes, + char *__output, int __output_size) +__THROW; + +/* Kept for code compatibility with libxcrypt (v3.1.1 and earlier). + We intentionally declare the function using a macro here, since + we actually want to link compiled applications against the + identical crypt_gensalt_rn function. */ +#ifndef IN_LIBCRYPT /* Defined when building libxcrypt. */ +# ifdef __REDIRECT_NTH +extern char * __REDIRECT_NTH (crypt_gensalt_r, (const char *__prefix, + unsigned long __count, const char *__rbytes, + int __nrbytes, char *__output, + int __output_size), crypt_gensalt_rn); +# else +# define crypt_gensalt_r crypt_gensalt_rn +# endif +#endif + +/* Another thread-safe version of crypt_gensalt; the generated setting + string is in storage allocated by malloc, and should be deallocated + with free when it is no longer needed. */ +extern char *crypt_gensalt_ra (const char *__prefix, unsigned long __count, + const char *__rbytes, int __nrbytes) +__THROW; + +/* Checks whether the given setting is a supported method. + + The return value is 0 if there is nothing wrong with this setting. + Otherwise, it is one of the following constants. */ +extern int crypt_checksalt (const char *__setting); + +/* Constants for checking the return value of the + crypt_checksalt function. */ +#define CRYPT_SALT_OK 0 +#define CRYPT_SALT_INVALID 1 +#define CRYPT_SALT_METHOD_DISABLED 2 /* NOT implemented, yet. */ +#define CRYPT_SALT_METHOD_LEGACY 3 +#define CRYPT_SALT_TOO_CHEAP 4 /* NOT implemented, yet. */ + +/* Convenience function to get the prefix of the preferred hash method, + which is also used by the crypt_gensalt functions, if their given + prefix parameter is NULL. + + The return value is string that equals the prefix of the preferred + hash method. Otherwise, it is NULL. */ +extern const char *crypt_preferred_method (void); + +/* These macros could be checked by portable users of crypt_gensalt* + functions to find out whether null pointers could be specified + as PREFIX and RBYTES arguments. */ +#define CRYPT_GENSALT_IMPLEMENTS_DEFAULT_PREFIX 1 +#define CRYPT_GENSALT_IMPLEMENTS_AUTO_ENTROPY 1 + +/* These macros can be checked by portable users of libxcrypt + to find out whether the function is implemented. */ +#define CRYPT_CHECKSALT_AVAILABLE 1 +#define CRYPT_PREFERRED_METHOD_AVAILABLE 1 + +/* Version number split in single integers. */ +#define XCRYPT_VERSION_MAJOR 4 +#define XCRYPT_VERSION_MINOR 4 + +/* Version number coded into an integer. */ +#define XCRYPT_VERSION_NUM ((XCRYPT_VERSION_MAJOR << 16) | \ + XCRYPT_VERSION_MINOR) + +/* Version number as a string constant. */ +#define XCRYPT_VERSION_STR "4.4.36" + +__END_DECLS + +#endif /* crypt.h */