Эти функции кодируют и декодируют 64-битные сообщения. Функция
setkey()
устанавливает ключ, используемый
encrypt().
Параметр
key
является массивом из 64 байтов, каждый из которых имеет значение 1 или 0.
Все байты key[n], где n=8*i-1 - игнорируются,
так что действительная длина ключа равна 56 битам.
Функция encrypt() модифицирует переданный буфер, и если
edflag
равно 0, то кодирует его, а если равно 1 - то декодирует.
Как и параметр key,
block
также является представлением битового вектора действительного кодируемого
значения. Результат возвращается в этом же векторе.
Эти две функции не являются повторно используемыми, то есть данные ключа key
хранятся в статическом хранилище. Функции
setkey_r()
и
encrypt_r()
являются повторно используемыми. они используют следующую структуру
для хранения данных key:
struct crypt_data {
char keysched[16 * 8];
char sb0[32768];
char sb1[32768];
char sb2[32768];
char sb3[32768];
char crypt_3_buf[14];
char current_salt[2];
long int current_saltbits;
int direction, initialized;
};
ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
Эти функции ничего не возвращают.
НАЙДЕННЫЕ ОШИБКИ
Установите переменную
errno
в ноль перед вызовом этих функций.
При нормальном завершении работы ее значение не изменится.
ENOSYS
Функция не предусмотрена.
(Например, из-за старых запретов США на экспорт.)
ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ
Необходимо привязаться к libcrypt для сборки этого примера с glibc2.2.
Для правильной работы массивы key[] и txt[] должны быть заполнены
полезными значениями. Заметим, что заголовок <crypt.h> безоговорочно
дает прототипы для setkey() и encrypt().