]> 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 a4deb48c5e8c4d1cf2f435c2a90e51d80cdb7fc9..fb7f87e2f1bfdd00cfb13413d8db0bcdceed8cb6 100644 (file)
@@ -1,7 +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)
+.\" %%%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
 .\"
 .\" Modified 2003-04-04, aeb
 .\"
-.TH ENCRYPT 3 2003-04-04 "" "Linux Programmer's Manual"
+.TH ENCRYPT 3 2018-04-30 "" "Linux Programmer's Manual"
 .SH NAME
 encrypt, setkey, encrypt_r, setkey_r \- encrypt 64-bit messages
 .SH SYNOPSIS
+.nf
 .BR "#define _XOPEN_SOURCE" "       /* See feature_test_macros(7) */"
-.br
 .B #include <unistd.h>
-.sp
+.PP
 .BI "void encrypt(char " block "[64], int " edflag );
-.sp
+
 .BR "#define _XOPEN_SOURCE" "       /* See feature_test_macros(7) */"
-.br
 .B #include <stdlib.h>
-.sp
+.PP
 .BI "void setkey(const char *" key );
-.sp
+
 .BR "#define _GNU_SOURCE" "         /* See feature_test_macros(7) */"
-.br
 .B "#include <crypt.h>"
-.sp
+.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
+.fi
+.PP
 Each of these requires linking with \fI\-lcrypt\fP.
 .SH DESCRIPTION
 These functions encrypt and decrypt 64-bit messages.
@@ -87,9 +85,9 @@ and
 are the reentrant versions.
 They use the following
 structure to hold the key data:
+.PP
 .in +4n
-.nf
-
+.EX
 struct crypt_data {
     char     keysched[16 * 8];
     char     sb0[32768];
@@ -102,7 +100,7 @@ struct crypt_data {
     int      direction;
     int      initialized;
 };
-.fi
+.EE
 .in
 .PP
 Before calling
@@ -121,43 +119,99 @@ On success, it is unchanged.
 .B ENOSYS
 The function is not provided.
 (For example because of former USA export restrictions.)
-.SH CONFORMING TO
-The functions
-.BR encrypt ()
+.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 ()
-conform to SVr4, SUSv2, and POSIX.1-2001.
+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
-In glibc 2.2 these functions use the DES algorithm.
+.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.
-To do useful work the
-.I key[]
-and
-.I 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;
+    }
 
-    setkey(key);
-    encrypt(txt, 0);   /* encode */
-    encrypt(txt, 1);   /* decode */
+    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);
+
+    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
+.EE
 .SH SEE ALSO
 .BR cbc_crypt (3),
 .BR crypt (3),