summaryrefslogtreecommitdiffstats
path: root/man3/encrypt.3
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--man3/encrypt.3212
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)