2 * Copyright (c) 1989 The Regents of the University of California.
5 * This code is derived from software contributed to Berkeley by
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 * 3. All advertising materials mentioning features or use of this software
17 * must display the following acknowledgement:
18 * This product includes software developed by the University of
19 * California, Berkeley and its contributors.
20 * 4. Neither the name of the University nor the names of its contributors
21 * may be used to endorse or promote products derived from this software
22 * without specific prior written permission.
24 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
37 #if defined(LIBC_SCCS) && !defined(lint)
38 /* from static char sccsid[] = "@(#)crypt.c 5.11 (Berkeley) 6/25/91"; */
39 static char rcsid[] = "$Header: /home/ncvs/src/gnu/usr.bin/perl/perl/crypt.c,v 1.1.1.1 1994/09/10 06:27:37 gclarkii Exp $";
40 #endif /* LIBC_SCCS and not lint */
46 * UNIX password, and DES, encryption.
48 * since this is non-exportable, this is just a dummy. if you want real
49 * encryption, make sure you've got libcrypt.a around.
52 #define SCRAMBLE /* Don't leave them in plaintext */
55 static char cryptresult[1+4+4+11+1]; /* "encrypted" result */
59 register const char *key;
60 register const char *setting;
62 fprintf(stderr, "WARNING! crypt(3) not present in the system!\n");
63 strncpy(cryptresult, key, sizeof cryptresult);
64 cryptresult[sizeof cryptresult - 1] = '\0';
72 register const char *pw;
73 register const char *salt;
75 static char password[14];
76 long matrix[128], *m, vector[2];
82 /* Ugly hack, but I'm too lazy to find the real problem - NW */
83 bzero(matrix, 128 * sizeof(long));
105 value = (a | (b << 6)) & 07777;
113 crc = (crc << 1) ^ 0x1021;
132 for (value = 07777; value >= 0; value--) {
136 crc = (crc << 1) ^ 0x1021;
159 for (i = 0; i < 7; i++)
169 for (i = 077; i >= 0; i--) {
189 for (i = 2; i < 13; i++) {
191 if (password[i] > '9')
193 if (password[i] > 'Z')