]> git.ipfire.org Git - thirdparty/man-pages.git/blobdiff - man3/encrypt.3
des_crypt.3: Minor wording fix in VERSIONS
[thirdparty/man-pages.git] / man3 / encrypt.3
index d3552077a03df088aba8117e5d7e64cc7e58d86f..fb7f87e2f1bfdd00cfb13413d8db0bcdceed8cb6 100644 (file)
@@ -1,6 +1,7 @@
-.\" Copyright 2000 Nicolás Lichtmaier <nick@debian.org>
+.\" Copyright 2000 Nicolás Lichtmaier <nick@debian.org>
 .\" Created 2000-07-22 00:52-0300
 .\"
+.\" %%%LICENSE_START(GPLv2+_DOC_FULL)
 .\" This is free documentation; you can redistribute it and/or
 .\" modify it under the terms of the GNU General Public License as
 .\" published by the Free Software Foundation; either version 2 of
 .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 .\" GNU General Public License for more details.
 .\"
+.\" You should have received a copy of the GNU General Public
+.\" License along with this manual; if not, see
+.\" <http://www.gnu.org/licenses/>.
+.\" %%%LICENSE_END
+.\"
 .\" 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 2003-04-04 "" "Cryptographic Functions"
+.TH ENCRYPT 3 2018-04-30 "" "Linux Programmer's Manual"
 .SH NAME
 encrypt, setkey, encrypt_r, setkey_r \- encrypt 64-bit messages
 .SH SYNOPSIS
-.B #define _XOPEN_SOURCE
-.br
+.nf
+.BR "#define _XOPEN_SOURCE" "       /* See feature_test_macros(7) */"
 .B #include <unistd.h>
-.sp
+.PP
 .BI "void encrypt(char " block "[64], int " edflag );
-.sp
-.B #define _XOPEN_SOURCE
-.br
+
+.BR "#define _XOPEN_SOURCE" "       /* See feature_test_macros(7) */"
 .B #include <stdlib.h>
-.sp
+.PP
 .BI "void setkey(const char *" key );
-.sp
-.B #define _GNU_SOURCE
-.br
-.BI "#include <crypt.h>"
-.sp
+
+.BR "#define _GNU_SOURCE" "         /* See feature_test_macros(7) */"
+.B "#include <crypt.h>"
+.PP
 .BI "void setkey_r(const char *" key ", struct crypt_data *" data );
-.br
 .BI "void encrypt_r(char *" block ", int " edflag \
 ", struct crypt_data *" data );
-.sp
-Each of these requires linking with
-.BR \-lcrypt .
+.fi
+.PP
+Each of these requires linking with \fI\-lcrypt\fP.
 .SH DESCRIPTION
 These functions encrypt and decrypt 64-bit messages.
 The
@@ -56,7 +59,7 @@ function sets the key used by
 .BR encrypt ().
 The
 .I key
-parameter used here is an array of 64 bytes, each of which has
+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.
@@ -66,7 +69,9 @@ The
 function modifies the passed buffer, encoding if
 .I edflag
 is 0, and decoding if 1 is being passed.
-Like the key parameter also
+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.
@@ -80,8 +85,9 @@ and
 are the reentrant versions.
 They use the following
 structure to hold the key data:
-.RS
-.nf
+.PP
+.in +4n
+.EX
 struct crypt_data {
     char     keysched[16 * 8];
     char     sb0[32768];
@@ -94,14 +100,15 @@ struct crypt_data {
     int      direction;
     int      initialized;
 };
-.fi
-.RE
+.EE
+.in
+.PP
 Before calling
 .BR setkey_r ()
 set
-.I data->initialized
+.I data\->initialized
 to zero.
-.SH "RETURN VALUE"
+.SH RETURN VALUE
 These functions do not return any value.
 .SH ERRORS
 Set
@@ -109,46 +116,104 @@ Set
 to zero before calling the above functions.
 On success, it is unchanged.
 .TP
-.BR ENOSYS
+.B ENOSYS
 The function is not provided.
 (For example because of former USA export restrictions.)
+.SH VERSIONS
+Because they employ the DES block cipher,
+which is no longer considered secure,
+.BR crypt (),
+.BR crypt_r (),
+.BR setkey (),
+and
+.BR setkey_r ()
+were removed in glibc 2.28.
+Applications should switch to a modern cryptography library, such as
+.BR libgcrypt .
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lbw23 lb lb
+l l l.
+Interface      Attribute       Value
+T{
+.BR encrypt (),
+.BR setkey ()
+T}     Thread safety   MT-Unsafe race:crypt
+T{
+.BR encrypt_r (),
+.BR setkey_r ()
+T}     Thread safety   MT-Safe
+.TE
+.SH CONFORMING TO
+.BR encrypt (),
+.BR setkey ():
+POSIX.1-2001, POSIX.1-2008, SUS, SVr4.
+.PP
+The functions
+.BR encrypt_r ()
+and
+.BR setkey_r ()
+are GNU extensions.
+.SH NOTES
+.SS Availability in glibc
+See
+.BR crypt (3).
+.SS Features in glibc
+In glibc 2.2, these functions use the DES algorithm.
 .SH EXAMPLE
-You need to link with libcrypt to compile this example with glibc 2.2.
-To do useful work the key[] and txt[] arrays must be filled with a
-useful bit pattern.
-.sp
-.nf
+.EX
 #define _XOPEN_SOURCE
-#include <unistd.h>
+#include <stdio.h>
 #include <stdlib.h>
+#include <unistd.h>
+#include <crypt.h>
 
 int
 main(void)
 {
-    char key[64];      /* bit pattern for key */
-    char txt[64];      /* bit pattern for messages */
+    char key[64];
+    char orig[9] = "eggplant";
+    char buf[64];
+    char txt[9];
+    int i, j;
+
+    for (i = 0; i < 64; i++) {
+        key[i] = rand() & 1;
+    }
+
+    for (i = 0; i < 8; i++) {
+        for (j = 0; j < 8; j++) {
+            buf[i * 8 + j] = orig[i] >> j & 1;
+        }
+        setkey(key);
+    }
+    printf("Before encrypting: %s\en", orig);
 
-    setkey(key);
-    encrypt(txt, 0);   /* encode */
-    encrypt(txt, 1);   /* decode */
+    encrypt(buf, 0);
+    for (i = 0; i < 8; i++) {
+        for (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 (i = 0; i < 8; i++) {
+        for (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);
 }
-.fi
-.SH NOTES
-In glibc 2.2 these functions use the DES algorithm.
-.SH "CONFORMING TO"
-The functions
-.BR encrypt ()
-and
-.BR setkey ()
-conform to SVr4, SUSv2, and POSIX.1-2001.
-The functions
-.BR encrypt_r ()
-and
-.BR setkey_r ()
-are GNU extensions.
-.SH "SEE ALSO"
+.EE
+.SH SEE ALSO
 .BR cbc_crypt (3),
 .BR crypt (3),
 .BR ecb_crypt (3),
-.BR fcrypt (3),
-.BR feature_test_macros (7)
+.\" .BR fcrypt (3)