diff options
Diffstat (limited to '')
-rw-r--r-- | man3/encrypt.3 | 212 |
1 files changed, 212 insertions, 0 deletions
diff --git a/man3/encrypt.3 b/man3/encrypt.3 new file mode 100644 index 0000000..a3fae2f --- /dev/null +++ b/man3/encrypt.3 @@ -0,0 +1,212 @@ +'\" t +.\" Copyright 2000 Nicolás Lichtmaier <nick@debian.org> +.\" Created 2000-07-22 00:52-0300 +.\" +.\" SPDX-License-Identifier: GPL-2.0-or-later +.\" +.\" Modified 2002-07-23 19:21:35 CEST 2002 Walter Harms +.\" <walter.harms@informatik.uni-oldenburg.de> +.\" +.\" Modified 2003-04-04, aeb +.\" +.TH encrypt 3 2023-07-20 "Linux man-pages 6.05.01" +.SH NAME +encrypt, setkey, encrypt_r, setkey_r \- encrypt 64-bit messages +.SH LIBRARY +Password hashing library +.RI ( libcrypt ", " \-lcrypt ) +.SH SYNOPSIS +.nf +.BR "#define _XOPEN_SOURCE" " /* See feature_test_macros(7) */" +.B #include <unistd.h> +.PP +.BI "[[deprecated]] void encrypt(char " block "[64], int " edflag ); +.PP +.BR "#define _XOPEN_SOURCE" " /* See feature_test_macros(7) */" +.B #include <stdlib.h> +.PP +.BI "[[deprecated]] void setkey(const char *" key ); +.PP +.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */" +.B #include <crypt.h> +.PP +.BI "[[deprecated]] void setkey_r(const char *" key ", struct crypt_data *" data ); +.BI "[[deprecated]] void encrypt_r(char *" block ", int " edflag , +.BI " struct crypt_data *" data ); +.fi +.SH DESCRIPTION +These functions encrypt and decrypt 64-bit messages. +The +.BR setkey () +function sets the key used by +.BR encrypt (). +The +.I key +argument used here is an array of 64 bytes, each of which has +numerical value 1 or 0. +The bytes key[n] where n=8*i-1 are ignored, +so that the effective key length is 56 bits. +.PP +The +.BR encrypt () +function modifies the passed buffer, encoding if +.I edflag +is 0, and decoding if 1 is being passed. +Like the +.I key +argument, also +.I block +is a bit vector representation of the actual value that is encoded. +The result is returned in that same vector. +.PP +These two functions are not reentrant, that is, the key data is +kept in static storage. +The functions +.BR setkey_r () +and +.BR encrypt_r () +are the reentrant versions. +They use the following +structure to hold the key data: +.PP +.in +4n +.EX +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 current_saltbits; + int direction; + int initialized; +}; +.EE +.in +.PP +Before calling +.BR setkey_r () +set +.I data\->initialized +to zero. +.SH RETURN VALUE +These functions do not return any value. +.SH ERRORS +Set +.I errno +to zero before calling the above functions. +On success, +.I errno +is unchanged. +.TP +.B ENOSYS +The function is not provided. +(For example because of former USA export restrictions.) +.SH ATTRIBUTES +For an explanation of the terms used in this section, see +.BR attributes (7). +.TS +allbox; +lbx lb lb +l l l. +Interface Attribute Value +T{ +.na +.nh +.BR encrypt (), +.BR setkey () +T} Thread safety MT-Unsafe race:crypt +T{ +.na +.nh +.BR encrypt_r (), +.BR setkey_r () +T} Thread safety MT-Safe +.TE +.sp 1 +.SH STANDARDS +.TP +.BR encrypt () +.TQ +.BR setkey () +POSIX.1-2008. +.TP +.BR encrypt_r () +.TQ +.BR setkey_r () +None. +.SH HISTORY +Removed in glibc 2.28. +.PP +Because they employ the DES block cipher, +which is no longer considered secure, +these functions were removed from glibc. +Applications should switch to a modern cryptography library, such as +.BR libgcrypt . +.TP +.BR encrypt () +.TQ +.BR setkey () +POSIX.1-2001, SUS, SVr4. +.SS Availability in glibc +See +.BR crypt (3). +.SS Features in glibc +In glibc 2.2, these functions use the DES algorithm. +.SH EXAMPLES +.\" [[deprecated]] SRC BEGIN (encrypt.c) +.EX +#define _XOPEN_SOURCE +#include <crypt.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +\& +int +main(void) +{ + char key[64]; + char orig[9] = "eggplant"; + char buf[64]; + char txt[9]; +\& + for (size_t i = 0; i < 64; i++) { + key[i] = rand() & 1; + } +\& + for (size_t i = 0; i < 8; i++) { + for (size_t j = 0; j < 8; j++) { + buf[i * 8 + j] = orig[i] >> j & 1; + } + setkey(key); + } + printf("Before encrypting: %s\en", orig); +\& + encrypt(buf, 0); + for (size_t i = 0; i < 8; i++) { + for (size_t j = 0, txt[i] = \[aq]\e0\[aq]; j < 8; j++) { + txt[i] |= buf[i * 8 + j] << j; + } + txt[8] = \[aq]\e0\[aq]; + } + printf("After encrypting: %s\en", txt); +\& + encrypt(buf, 1); + for (size_t i = 0; i < 8; i++) { + for (size_t j = 0, txt[i] = \[aq]\e0\[aq]; j < 8; j++) { + txt[i] |= buf[i * 8 + j] << j; + } + txt[8] = \[aq]\e0\[aq]; + } + printf("After decrypting: %s\en", txt); + exit(EXIT_SUCCESS); +} +.EE +.\" SRC END +.SH SEE ALSO +.BR cbc_crypt (3), +.BR crypt (3), +.BR ecb_crypt (3) +.\" .BR fcrypt (3) |