xref: /freebsd/lib/libc/rpc/des_soft.c (revision 2e322d379631c3bd6107e295f3e5d814c7845fc7)
1*2e322d37SHiroki Sato /*-
2*2e322d37SHiroki Sato  * Copyright (c) 2009, Sun Microsystems, Inc.
3*2e322d37SHiroki Sato  * All rights reserved.
4e8636dfdSBill Paul  *
5*2e322d37SHiroki Sato  * Redistribution and use in source and binary forms, with or without
6*2e322d37SHiroki Sato  * modification, are permitted provided that the following conditions are met:
7*2e322d37SHiroki Sato  * - Redistributions of source code must retain the above copyright notice,
8*2e322d37SHiroki Sato  *   this list of conditions and the following disclaimer.
9*2e322d37SHiroki Sato  * - Redistributions in binary form must reproduce the above copyright notice,
10*2e322d37SHiroki Sato  *   this list of conditions and the following disclaimer in the documentation
11*2e322d37SHiroki Sato  *   and/or other materials provided with the distribution.
12*2e322d37SHiroki Sato  * - Neither the name of Sun Microsystems, Inc. nor the names of its
13*2e322d37SHiroki Sato  *   contributors may be used to endorse or promote products derived
14*2e322d37SHiroki Sato  *   from this software without specific prior written permission.
15e8636dfdSBill Paul  *
16*2e322d37SHiroki Sato  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17*2e322d37SHiroki Sato  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18*2e322d37SHiroki Sato  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19*2e322d37SHiroki Sato  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20*2e322d37SHiroki Sato  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21*2e322d37SHiroki Sato  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22*2e322d37SHiroki Sato  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23*2e322d37SHiroki Sato  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24*2e322d37SHiroki Sato  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25*2e322d37SHiroki Sato  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26*2e322d37SHiroki Sato  * POSSIBILITY OF SUCH DAMAGE.
27e8636dfdSBill Paul  */
28a986ef57SDavid E. O'Brien 
29a986ef57SDavid E. O'Brien #if defined(LIBC_SCCS) && !defined(lint)
30a986ef57SDavid E. O'Brien static char sccsid[] = "@(#)des_soft.c	2.2 88/08/10 4.0 RPCSRC; from 1.13 88/02/08 SMI";
31a986ef57SDavid E. O'Brien #endif
32a986ef57SDavid E. O'Brien #include <sys/cdefs.h>
33a986ef57SDavid E. O'Brien __FBSDID("$FreeBSD$");
34a986ef57SDavid E. O'Brien 
35e8636dfdSBill Paul /*
36e8636dfdSBill Paul  * Table giving odd parity in the low bit for ASCII characters
37e8636dfdSBill Paul  */
38e8636dfdSBill Paul static char partab[128] = {
39e8636dfdSBill Paul 	0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x07, 0x07,
40e8636dfdSBill Paul 	0x08, 0x08, 0x0b, 0x0b, 0x0d, 0x0d, 0x0e, 0x0e,
41e8636dfdSBill Paul 	0x10, 0x10, 0x13, 0x13, 0x15, 0x15, 0x16, 0x16,
42e8636dfdSBill Paul 	0x19, 0x19, 0x1a, 0x1a, 0x1c, 0x1c, 0x1f, 0x1f,
43e8636dfdSBill Paul 	0x20, 0x20, 0x23, 0x23, 0x25, 0x25, 0x26, 0x26,
44e8636dfdSBill Paul 	0x29, 0x29, 0x2a, 0x2a, 0x2c, 0x2c, 0x2f, 0x2f,
45e8636dfdSBill Paul 	0x31, 0x31, 0x32, 0x32, 0x34, 0x34, 0x37, 0x37,
46e8636dfdSBill Paul 	0x38, 0x38, 0x3b, 0x3b, 0x3d, 0x3d, 0x3e, 0x3e,
47e8636dfdSBill Paul 	0x40, 0x40, 0x43, 0x43, 0x45, 0x45, 0x46, 0x46,
48e8636dfdSBill Paul 	0x49, 0x49, 0x4a, 0x4a, 0x4c, 0x4c, 0x4f, 0x4f,
49e8636dfdSBill Paul 	0x51, 0x51, 0x52, 0x52, 0x54, 0x54, 0x57, 0x57,
50e8636dfdSBill Paul 	0x58, 0x58, 0x5b, 0x5b, 0x5d, 0x5d, 0x5e, 0x5e,
51e8636dfdSBill Paul 	0x61, 0x61, 0x62, 0x62, 0x64, 0x64, 0x67, 0x67,
52e8636dfdSBill Paul 	0x68, 0x68, 0x6b, 0x6b, 0x6d, 0x6d, 0x6e, 0x6e,
53e8636dfdSBill Paul 	0x70, 0x70, 0x73, 0x73, 0x75, 0x75, 0x76, 0x76,
54e8636dfdSBill Paul 	0x79, 0x79, 0x7a, 0x7a, 0x7c, 0x7c, 0x7f, 0x7f,
55e8636dfdSBill Paul };
56e8636dfdSBill Paul 
57e8636dfdSBill Paul /*
58e8636dfdSBill Paul  * Add odd parity to low bit of 8 byte key
59e8636dfdSBill Paul  */
60e8636dfdSBill Paul void
61e8636dfdSBill Paul des_setparity(p)
62e8636dfdSBill Paul 	char *p;
63e8636dfdSBill Paul {
64e8636dfdSBill Paul 	int i;
65e8636dfdSBill Paul 
66e8636dfdSBill Paul 	for (i = 0; i < 8; i++) {
67e8636dfdSBill Paul 		*p = partab[*p & 0x7f];
68e8636dfdSBill Paul 		p++;
69e8636dfdSBill Paul 	}
70e8636dfdSBill Paul }
71