]> git.ipfire.org Git - thirdparty/man-pages.git/blame - man3/encrypt.3
cacheflush.2: Refer reader to BUGS in discussion of EINVAL error
[thirdparty/man-pages.git] / man3 / encrypt.3
CommitLineData
e00c3a07 1.\" Copyright 2000 Nicolás Lichtmaier <nick@debian.org>
fea681da
MK
2.\" Created 2000-07-22 00:52-0300
3.\"
1dd72f9c 4.\" %%%LICENSE_START(GPLv2+_DOC_FULL)
fea681da
MK
5.\" This is free documentation; you can redistribute it and/or
6.\" modify it under the terms of the GNU General Public License as
7.\" published by the Free Software Foundation; either version 2 of
8.\" the License, or (at your option) any later version.
9.\"
10.\" The GNU General Public License's references to "object code"
11.\" and "executables" are to be interpreted as the output of any
12.\" document formatting or typesetting system, including
13.\" intermediate and printed output.
14.\"
15.\" This manual is distributed in the hope that it will be useful,
16.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
17.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18.\" GNU General Public License for more details.
19.\"
faede11f
MK
20.\" You should have received a copy of the GNU General Public
21.\" License along with this manual; if not, see
22.\" <http://www.gnu.org/licenses/>.
6a8d8745 23.\" %%%LICENSE_END
faede11f 24.\"
fea681da
MK
25.\" Modified 2002-07-23 19:21:35 CEST 2002 Walter Harms
26.\" <walter.harms@informatik.uni-oldenburg.de>
27.\"
28.\" Modified 2003-04-04, aeb
29.\"
1e88bbc0 30.TH ENCRYPT 3 2013-07-22 "" "Linux Programmer's Manual"
fea681da
MK
31.SH NAME
32encrypt, setkey, encrypt_r, setkey_r \- encrypt 64-bit messages
33.SH SYNOPSIS
b80f966b 34.BR "#define _XOPEN_SOURCE" " /* See feature_test_macros(7) */"
fea681da
MK
35.br
36.B #include <unistd.h>
37.sp
38.BI "void encrypt(char " block "[64], int " edflag );
39.sp
b80f966b 40.BR "#define _XOPEN_SOURCE" " /* See feature_test_macros(7) */"
fea681da
MK
41.br
42.B #include <stdlib.h>
43.sp
44.BI "void setkey(const char *" key );
45.sp
b80f966b 46.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
fea681da 47.br
0daa9e92 48.B "#include <crypt.h>"
fea681da 49.sp
b9f02710 50.BI "void setkey_r(const char *" key ", struct crypt_data *" data );
fea681da 51.br
b9f02710
MK
52.BI "void encrypt_r(char *" block ", int " edflag \
53", struct crypt_data *" data );
fea681da 54.sp
e9329f6d 55Each of these requires linking with \fI\-lcrypt\fP.
fea681da 56.SH DESCRIPTION
c13182ef
MK
57These functions encrypt and decrypt 64-bit messages.
58The
63aa9df0 59.BR setkey ()
fea681da 60function sets the key used by
63aa9df0 61.BR encrypt ().
fea681da
MK
62The
63.I key
c4bb193f 64argument used here is an array of 64 bytes, each of which has
c13182ef
MK
65numerical value 1 or 0.
66The bytes key[n] where n=8*i-1 are ignored,
fea681da
MK
67so that the effective key length is 56 bits.
68.PP
c13182ef
MK
69The
70.BR encrypt ()
b5cc2ffb 71function modifies the passed buffer, encoding if
fea681da 72.I edflag
c13182ef 73is 0, and decoding if 1 is being passed.
c4bb193f
MK
74Like the
75.I key
76argument, also
fea681da
MK
77.I block
78is a bit vector representation of the actual value that is encoded.
79The result is returned in that same vector.
80.PP
81These two functions are not reentrant, that is, the key data is
c13182ef
MK
82kept in static storage.
83The functions
63aa9df0 84.BR setkey_r ()
fea681da 85and
63aa9df0 86.BR encrypt_r ()
c13182ef
MK
87are the reentrant versions.
88They use the following
fea681da 89structure to hold the key data:
bd191423 90.in +4n
fea681da 91.nf
e5056894 92
fea681da 93struct crypt_data {
42ca79eb
MK
94 char keysched[16 * 8];
95 char sb0[32768];
96 char sb1[32768];
97 char sb2[32768];
98 char sb3[32768];
99 char crypt_3_buf[14];
100 char current_salt[2];
101 long int current_saltbits;
102 int direction;
103 int initialized;
fea681da
MK
104};
105.fi
bd191423 106.in
e5056894 107.PP
fea681da 108Before calling
63aa9df0 109.BR setkey_r ()
fea681da 110set
94e9d9fe 111.I data\->initialized
fea681da 112to zero.
47297adb 113.SH RETURN VALUE
fea681da
MK
114These functions do not return any value.
115.SH ERRORS
116Set
117.I errno
118to zero before calling the above functions.
119On success, it is unchanged.
120.TP
0daa9e92 121.B ENOSYS
fea681da
MK
122The function is not provided.
123(For example because of former USA export restrictions.)
4fc2f647
PH
124.SH ATTRIBUTES
125.SS Multithreading (see pthreads(7))
1e88bbc0 126The
4fc2f647
PH
127.BR encrypt ()
128and
129.BR setkey ()
1e88bbc0 130functions are not thread-safe.
4fc2f647 131.LP
1e88bbc0 132The
4fc2f647
PH
133.BR encrypt_r ()
134and
135.BR setkey_r ()
1e88bbc0 136functions are thread-safe.
47297adb 137.SH CONFORMING TO
2b2581ee
MK
138The functions
139.BR encrypt ()
140and
141.BR setkey ()
142conform to SVr4, SUSv2, and POSIX.1-2001.
143The functions
144.BR encrypt_r ()
145and
146.BR setkey_r ()
147are GNU extensions.
148.SH NOTES
a53a30b7 149In glibc 2.2, these functions use the DES algorithm.
fea681da 150.SH EXAMPLE
e05ccae5 151You need to link with libcrypt to compile this example with glibc.
a53a30b7 152To do useful work, the
e5056894
MK
153.I key[]
154and
155.I txt[]
156arrays must be filled with a useful bit pattern.
fea681da
MK
157.sp
158.nf
5aa145bd
MK
159#define _XOPEN_SOURCE
160#include <unistd.h>
161#include <stdlib.h>
fea681da 162
cf0a9ace 163int
c13182ef 164main(void)
cf0a9ace
MK
165{
166 char key[64]; /* bit pattern for key */
167 char txt[64]; /* bit pattern for messages */
168
169 setkey(key);
170 encrypt(txt, 0); /* encode */
171 encrypt(txt, 1); /* decode */
fea681da
MK
172}
173.fi
47297adb 174.SH SEE ALSO
fea681da
MK
175.BR cbc_crypt (3),
176.BR crypt (3),
177.BR ecb_crypt (3),
0a4f8b7b 178.\" .BR fcrypt (3)