The

and

functions compile a string for use as the

argument to

and

selects the hashing method to use.

controls the CPU time cost of the hash; the valid range for

and the exact meaning of

depends on the hashing method, but larger numbers correspond to more costly hashes.

should point to

cryptographically random bytes for use as

If

is a null pointer, the best available hashing method will be selected.

if

is an empty string, the

DES-based hashing method will be selected; this method is unacceptably weak by modern standards.

If

is 0, a low default cost will be selected. If

is a null pointer, an appropriate number of random bytes will be obtained from the operating system, and

is ignored.

See

for other strings that can be used as

and valid values of

for each.

and

return a pointer to an encoded setting string. This string will be entirely printable ASCII, and will not contain whitespace or the characters

or

See

for more detail on the format of this string. Upon error, they return a null pointer and set

to an appropriate error code.

places its result in a static storage area, which will be overwritten by subsequent calls to

It is not safe to call

from multiple threads simultaneously. However, it

safe to pass the string returned by

directly to

without copying it; each function has its own static storage area.

places its result in the supplied

buffer, which has

bytes of storage available.

should be greater than or equal to

allocates memory for its result using

It should be freed with

after use.

Upon error, in addition to returning a null pointer,

and

will write an invalid setting string to their output buffer, if there is enough space; this string will begin with a

and will not be equal to

is invalid or not supported by this implementation;

is invalid for the requested

the input

is insufficient for the smallest valid salt with the requested

only:

is too small to hold the compiled

string.

Failed to allocate internal scratch memory.

only: failed to allocate memory for the compiled

string.

Obtaining random bytes from the operating system failed. This can only happen when

is a null pointer.

The following macros are defined by

A null pointer can be specified as the

argument.

A null pointer can be specified as the

argument.

The functions

and

are not part of any standard. They originate with the Openwall project. A function with the name

also exists on Solaris 10 and newer, but its prototype and semantics differ.

The default prefix and auto entropy features are available since libxcrypt version 4.0.0. Portable software can use feature test macros to find out whether null pointers can be used for the

and

arguments.

The set of supported hashing methods varies considerably from system to system.

For an explanation of the terms used in this section, see

Interface Attribute Value
Thread safety MT-Unsafe race:crypt_gensalt
Thread safety MT-Safe