xref: /onnv-gate/usr/src/common/crypto/des/des_ks.c (revision 416:6f98fe688e7b)
10Sstevel@tonic-gate /*
20Sstevel@tonic-gate  * CDDL HEADER START
30Sstevel@tonic-gate  *
40Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
50Sstevel@tonic-gate  * Common Development and Distribution License, Version 1.0 only
60Sstevel@tonic-gate  * (the "License").  You may not use this file except in compliance
70Sstevel@tonic-gate  * with the License.
80Sstevel@tonic-gate  *
90Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
100Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
110Sstevel@tonic-gate  * See the License for the specific language governing permissions
120Sstevel@tonic-gate  * and limitations under the License.
130Sstevel@tonic-gate  *
140Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
150Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
160Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
170Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
180Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
190Sstevel@tonic-gate  *
200Sstevel@tonic-gate  * CDDL HEADER END
210Sstevel@tonic-gate  */
220Sstevel@tonic-gate /*
23*416Skrishna  * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
240Sstevel@tonic-gate  * Use is subject to license terms.
250Sstevel@tonic-gate  */
260Sstevel@tonic-gate 
270Sstevel@tonic-gate #include <sys/types.h>
280Sstevel@tonic-gate 
290Sstevel@tonic-gate #pragma ident	"%Z%%M%	%I%	%E% SMI"
300Sstevel@tonic-gate 
310Sstevel@tonic-gate /* EXPORT DELETE START */
320Sstevel@tonic-gate 
330Sstevel@tonic-gate static uint64_t pc1_table[2][128]=
340Sstevel@tonic-gate {
35*416Skrishna /* BEGIN CSTYLED */
360Sstevel@tonic-gate {
37*416Skrishna 0x0000000000000000ULL, 0x0000000000100000ULL, 0x0000000000001000ULL, 0x0000000000101000ULL,
38*416Skrishna 0x0000000000000010ULL, 0x0000000000100010ULL, 0x0000000000001010ULL, 0x0000000000101010ULL,
39*416Skrishna 0x0000000000000001ULL, 0x0000000000100001ULL, 0x0000000000001001ULL, 0x0000000000101001ULL,
40*416Skrishna 0x0000000000000011ULL, 0x0000000000100011ULL, 0x0000000000001011ULL, 0x0000000000101011ULL,
41*416Skrishna 0x0000000100000000ULL, 0x0000000100100000ULL, 0x0000000100001000ULL, 0x0000000100101000ULL,
42*416Skrishna 0x0000000100000010ULL, 0x0000000100100010ULL, 0x0000000100001010ULL, 0x0000000100101010ULL,
43*416Skrishna 0x0000000100000001ULL, 0x0000000100100001ULL, 0x0000000100001001ULL, 0x0000000100101001ULL,
44*416Skrishna 0x0000000100000011ULL, 0x0000000100100011ULL, 0x0000000100001011ULL, 0x0000000100101011ULL,
45*416Skrishna 0x0000010000000000ULL, 0x0000010000100000ULL, 0x0000010000001000ULL, 0x0000010000101000ULL,
46*416Skrishna 0x0000010000000010ULL, 0x0000010000100010ULL, 0x0000010000001010ULL, 0x0000010000101010ULL,
47*416Skrishna 0x0000010000000001ULL, 0x0000010000100001ULL, 0x0000010000001001ULL, 0x0000010000101001ULL,
48*416Skrishna 0x0000010000000011ULL, 0x0000010000100011ULL, 0x0000010000001011ULL, 0x0000010000101011ULL,
49*416Skrishna 0x0000010100000000ULL, 0x0000010100100000ULL, 0x0000010100001000ULL, 0x0000010100101000ULL,
50*416Skrishna 0x0000010100000010ULL, 0x0000010100100010ULL, 0x0000010100001010ULL, 0x0000010100101010ULL,
51*416Skrishna 0x0000010100000001ULL, 0x0000010100100001ULL, 0x0000010100001001ULL, 0x0000010100101001ULL,
52*416Skrishna 0x0000010100000011ULL, 0x0000010100100011ULL, 0x0000010100001011ULL, 0x0000010100101011ULL,
53*416Skrishna 0x0001000000000000ULL, 0x0001000000100000ULL, 0x0001000000001000ULL, 0x0001000000101000ULL,
54*416Skrishna 0x0001000000000010ULL, 0x0001000000100010ULL, 0x0001000000001010ULL, 0x0001000000101010ULL,
55*416Skrishna 0x0001000000000001ULL, 0x0001000000100001ULL, 0x0001000000001001ULL, 0x0001000000101001ULL,
56*416Skrishna 0x0001000000000011ULL, 0x0001000000100011ULL, 0x0001000000001011ULL, 0x0001000000101011ULL,
57*416Skrishna 0x0001000100000000ULL, 0x0001000100100000ULL, 0x0001000100001000ULL, 0x0001000100101000ULL,
58*416Skrishna 0x0001000100000010ULL, 0x0001000100100010ULL, 0x0001000100001010ULL, 0x0001000100101010ULL,
59*416Skrishna 0x0001000100000001ULL, 0x0001000100100001ULL, 0x0001000100001001ULL, 0x0001000100101001ULL,
60*416Skrishna 0x0001000100000011ULL, 0x0001000100100011ULL, 0x0001000100001011ULL, 0x0001000100101011ULL,
61*416Skrishna 0x0001010000000000ULL, 0x0001010000100000ULL, 0x0001010000001000ULL, 0x0001010000101000ULL,
62*416Skrishna 0x0001010000000010ULL, 0x0001010000100010ULL, 0x0001010000001010ULL, 0x0001010000101010ULL,
63*416Skrishna 0x0001010000000001ULL, 0x0001010000100001ULL, 0x0001010000001001ULL, 0x0001010000101001ULL,
64*416Skrishna 0x0001010000000011ULL, 0x0001010000100011ULL, 0x0001010000001011ULL, 0x0001010000101011ULL,
65*416Skrishna 0x0001010100000000ULL, 0x0001010100100000ULL, 0x0001010100001000ULL, 0x0001010100101000ULL,
66*416Skrishna 0x0001010100000010ULL, 0x0001010100100010ULL, 0x0001010100001010ULL, 0x0001010100101010ULL,
67*416Skrishna 0x0001010100000001ULL, 0x0001010100100001ULL, 0x0001010100001001ULL, 0x0001010100101001ULL,
68*416Skrishna 0x0001010100000011ULL, 0x0001010100100011ULL, 0x0001010100001011ULL, 0x0001010100101011ULL
690Sstevel@tonic-gate },
700Sstevel@tonic-gate {
71*416Skrishna 0x0000000000000000ULL, 0x0000000001000000ULL, 0x0000000000010000ULL, 0x0000000001010000ULL,
72*416Skrishna 0x0000000000000100ULL, 0x0000000001000100ULL, 0x0000000000010100ULL, 0x0000000001010100ULL,
73*416Skrishna 0x0000000010000000ULL, 0x0000000011000000ULL, 0x0000000010010000ULL, 0x0000000011010000ULL,
74*416Skrishna 0x0000000010000100ULL, 0x0000000011000100ULL, 0x0000000010010100ULL, 0x0000000011010100ULL,
75*416Skrishna 0x0000001000000000ULL, 0x0000001001000000ULL, 0x0000001000010000ULL, 0x0000001001010000ULL,
76*416Skrishna 0x0000001000000100ULL, 0x0000001001000100ULL, 0x0000001000010100ULL, 0x0000001001010100ULL,
77*416Skrishna 0x0000001010000000ULL, 0x0000001011000000ULL, 0x0000001010010000ULL, 0x0000001011010000ULL,
78*416Skrishna 0x0000001010000100ULL, 0x0000001011000100ULL, 0x0000001010010100ULL, 0x0000001011010100ULL,
79*416Skrishna 0x0000100000000000ULL, 0x0000100001000000ULL, 0x0000100000010000ULL, 0x0000100001010000ULL,
80*416Skrishna 0x0000100000000100ULL, 0x0000100001000100ULL, 0x0000100000010100ULL, 0x0000100001010100ULL,
81*416Skrishna 0x0000100010000000ULL, 0x0000100011000000ULL, 0x0000100010010000ULL, 0x0000100011010000ULL,
82*416Skrishna 0x0000100010000100ULL, 0x0000100011000100ULL, 0x0000100010010100ULL, 0x0000100011010100ULL,
83*416Skrishna 0x0000101000000000ULL, 0x0000101001000000ULL, 0x0000101000010000ULL, 0x0000101001010000ULL,
84*416Skrishna 0x0000101000000100ULL, 0x0000101001000100ULL, 0x0000101000010100ULL, 0x0000101001010100ULL,
85*416Skrishna 0x0000101010000000ULL, 0x0000101011000000ULL, 0x0000101010010000ULL, 0x0000101011010000ULL,
86*416Skrishna 0x0000101010000100ULL, 0x0000101011000100ULL, 0x0000101010010100ULL, 0x0000101011010100ULL,
87*416Skrishna 0x0010000000000000ULL, 0x0010000001000000ULL, 0x0010000000010000ULL, 0x0010000001010000ULL,
88*416Skrishna 0x0010000000000100ULL, 0x0010000001000100ULL, 0x0010000000010100ULL, 0x0010000001010100ULL,
89*416Skrishna 0x0010000010000000ULL, 0x0010000011000000ULL, 0x0010000010010000ULL, 0x0010000011010000ULL,
90*416Skrishna 0x0010000010000100ULL, 0x0010000011000100ULL, 0x0010000010010100ULL, 0x0010000011010100ULL,
91*416Skrishna 0x0010001000000000ULL, 0x0010001001000000ULL, 0x0010001000010000ULL, 0x0010001001010000ULL,
92*416Skrishna 0x0010001000000100ULL, 0x0010001001000100ULL, 0x0010001000010100ULL, 0x0010001001010100ULL,
93*416Skrishna 0x0010001010000000ULL, 0x0010001011000000ULL, 0x0010001010010000ULL, 0x0010001011010000ULL,
94*416Skrishna 0x0010001010000100ULL, 0x0010001011000100ULL, 0x0010001010010100ULL, 0x0010001011010100ULL,
95*416Skrishna 0x0010100000000000ULL, 0x0010100001000000ULL, 0x0010100000010000ULL, 0x0010100001010000ULL,
96*416Skrishna 0x0010100000000100ULL, 0x0010100001000100ULL, 0x0010100000010100ULL, 0x0010100001010100ULL,
97*416Skrishna 0x0010100010000000ULL, 0x0010100011000000ULL, 0x0010100010010000ULL, 0x0010100011010000ULL,
98*416Skrishna 0x0010100010000100ULL, 0x0010100011000100ULL, 0x0010100010010100ULL, 0x0010100011010100ULL,
99*416Skrishna 0x0010101000000000ULL, 0x0010101001000000ULL, 0x0010101000010000ULL, 0x0010101001010000ULL,
100*416Skrishna 0x0010101000000100ULL, 0x0010101001000100ULL, 0x0010101000010100ULL, 0x0010101001010100ULL,
101*416Skrishna 0x0010101010000000ULL, 0x0010101011000000ULL, 0x0010101010010000ULL, 0x0010101011010000ULL,
102*416Skrishna 0x0010101010000100ULL, 0x0010101011000100ULL, 0x0010101010010100ULL, 0x0010101011010100ULL
1030Sstevel@tonic-gate }
104*416Skrishna /* END CSTYLED */
1050Sstevel@tonic-gate };
1060Sstevel@tonic-gate 
1070Sstevel@tonic-gate 
1080Sstevel@tonic-gate static uint32_t pc2_1_table[4][64] =
1090Sstevel@tonic-gate {
1100Sstevel@tonic-gate {
1110Sstevel@tonic-gate 0x00000000, 0x00004000, 0x04000000, 0x04004000,
1120Sstevel@tonic-gate 0x00000100, 0x00004100, 0x04000100, 0x04004100,
1130Sstevel@tonic-gate 0x00020000, 0x00024000, 0x04020000, 0x04024000,
1140Sstevel@tonic-gate 0x00020100, 0x00024100, 0x04020100, 0x04024100,
1150Sstevel@tonic-gate 0x00000001, 0x00004001, 0x04000001, 0x04004001,
1160Sstevel@tonic-gate 0x00000101, 0x00004101, 0x04000101, 0x04004101,
1170Sstevel@tonic-gate 0x00020001, 0x00024001, 0x04020001, 0x04024001,
1180Sstevel@tonic-gate 0x00020101, 0x00024101, 0x04020101, 0x04024101,
1190Sstevel@tonic-gate 0x08000000, 0x08004000, 0x0c000000, 0x0c004000,
1200Sstevel@tonic-gate 0x08000100, 0x08004100, 0x0c000100, 0x0c004100,
1210Sstevel@tonic-gate 0x08020000, 0x08024000, 0x0c020000, 0x0c024000,
1220Sstevel@tonic-gate 0x08020100, 0x08024100, 0x0c020100, 0x0c024100,
1230Sstevel@tonic-gate 0x08000001, 0x08004001, 0x0c000001, 0x0c004001,
1240Sstevel@tonic-gate 0x08000101, 0x08004101, 0x0c000101, 0x0c004101,
1250Sstevel@tonic-gate 0x08020001, 0x08024001, 0x0c020001, 0x0c024001,
1260Sstevel@tonic-gate 0x08020101, 0x08024101, 0x0c020101, 0x0c024101
1270Sstevel@tonic-gate },
1280Sstevel@tonic-gate {
1290Sstevel@tonic-gate 0x00000000, 0x00000200, 0x20000000, 0x20000200,
1300Sstevel@tonic-gate 0x00001000, 0x00001200, 0x20001000, 0x20001200,
1310Sstevel@tonic-gate 0x00000000, 0x00000200, 0x20000000, 0x20000200,
1320Sstevel@tonic-gate 0x00001000, 0x00001200, 0x20001000, 0x20001200,
1330Sstevel@tonic-gate 0x00000040, 0x00000240, 0x20000040, 0x20000240,
1340Sstevel@tonic-gate 0x00001040, 0x00001240, 0x20001040, 0x20001240,
1350Sstevel@tonic-gate 0x00000040, 0x00000240, 0x20000040, 0x20000240,
1360Sstevel@tonic-gate 0x00001040, 0x00001240, 0x20001040, 0x20001240,
1370Sstevel@tonic-gate 0x00000010, 0x00000210, 0x20000010, 0x20000210,
1380Sstevel@tonic-gate 0x00001010, 0x00001210, 0x20001010, 0x20001210,
1390Sstevel@tonic-gate 0x00000010, 0x00000210, 0x20000010, 0x20000210,
1400Sstevel@tonic-gate 0x00001010, 0x00001210, 0x20001010, 0x20001210,
1410Sstevel@tonic-gate 0x00000050, 0x00000250, 0x20000050, 0x20000250,
1420Sstevel@tonic-gate 0x00001050, 0x00001250, 0x20001050, 0x20001250,
1430Sstevel@tonic-gate 0x00000050, 0x00000250, 0x20000050, 0x20000250,
1440Sstevel@tonic-gate 0x00001050, 0x00001250, 0x20001050, 0x20001250
1450Sstevel@tonic-gate },
1460Sstevel@tonic-gate {
1470Sstevel@tonic-gate 0x00000000, 0x00000000, 0x40000000, 0x40000000,
1480Sstevel@tonic-gate 0x00000020, 0x00000020, 0x40000020, 0x40000020,
1490Sstevel@tonic-gate 0x00008000, 0x00008000, 0x40008000, 0x40008000,
1500Sstevel@tonic-gate 0x00008020, 0x00008020, 0x40008020, 0x40008020,
1510Sstevel@tonic-gate 0x80000000, 0x80000000, 0xc0000000, 0xc0000000,
1520Sstevel@tonic-gate 0x80000020, 0x80000020, 0xc0000020, 0xc0000020,
1530Sstevel@tonic-gate 0x80008000, 0x80008000, 0xc0008000, 0xc0008000,
1540Sstevel@tonic-gate 0x80008020, 0x80008020, 0xc0008020, 0xc0008020,
1550Sstevel@tonic-gate 0x00000002, 0x00000002, 0x40000002, 0x40000002,
1560Sstevel@tonic-gate 0x00000022, 0x00000022, 0x40000022, 0x40000022,
1570Sstevel@tonic-gate 0x00008002, 0x00008002, 0x40008002, 0x40008002,
1580Sstevel@tonic-gate 0x00008022, 0x00008022, 0x40008022, 0x40008022,
1590Sstevel@tonic-gate 0x80000002, 0x80000002, 0xc0000002, 0xc0000002,
1600Sstevel@tonic-gate 0x80000022, 0x80000022, 0xc0000022, 0xc0000022,
1610Sstevel@tonic-gate 0x80008002, 0x80008002, 0xc0008002, 0xc0008002,
1620Sstevel@tonic-gate 0x80008022, 0x80008022, 0xc0008022, 0xc0008022
1630Sstevel@tonic-gate },
1640Sstevel@tonic-gate {
1650Sstevel@tonic-gate 0x00000000, 0x10000000, 0x00000800, 0x10000800,
1660Sstevel@tonic-gate 0x00000000, 0x10000000, 0x00000800, 0x10000800,
1670Sstevel@tonic-gate 0x00002000, 0x10002000, 0x00002800, 0x10002800,
1680Sstevel@tonic-gate 0x00002000, 0x10002000, 0x00002800, 0x10002800,
1690Sstevel@tonic-gate 0x00000004, 0x10000004, 0x00000804, 0x10000804,
1700Sstevel@tonic-gate 0x00000004, 0x10000004, 0x00000804, 0x10000804,
1710Sstevel@tonic-gate 0x00002004, 0x10002004, 0x00002804, 0x10002804,
1720Sstevel@tonic-gate 0x00002004, 0x10002004, 0x00002804, 0x10002804,
1730Sstevel@tonic-gate 0x00000400, 0x10000400, 0x00000c00, 0x10000c00,
1740Sstevel@tonic-gate 0x00000400, 0x10000400, 0x00000c00, 0x10000c00,
1750Sstevel@tonic-gate 0x00002400, 0x10002400, 0x00002c00, 0x10002c00,
1760Sstevel@tonic-gate 0x00002400, 0x10002400, 0x00002c00, 0x10002c00,
1770Sstevel@tonic-gate 0x00000404, 0x10000404, 0x00000c04, 0x10000c04,
1780Sstevel@tonic-gate 0x00000404, 0x10000404, 0x00000c04, 0x10000c04,
1790Sstevel@tonic-gate 0x00002404, 0x10002404, 0x00002c04, 0x10002c04,
1800Sstevel@tonic-gate 0x00002404, 0x10002404, 0x00002c04, 0x10002c04
1810Sstevel@tonic-gate }
1820Sstevel@tonic-gate };
1830Sstevel@tonic-gate 
1840Sstevel@tonic-gate static uint32_t pc2_1_tail_table[8] =
1850Sstevel@tonic-gate {
1860Sstevel@tonic-gate 0x00000000, 0x00010000, 0x00000008, 0x00010008,
1870Sstevel@tonic-gate 0x00000080, 0x00010080, 0x00000088, 0x00010088
1880Sstevel@tonic-gate };
1890Sstevel@tonic-gate 
1900Sstevel@tonic-gate static uint32_t pc2_2_table[5][32] =
1910Sstevel@tonic-gate {
1920Sstevel@tonic-gate {
1930Sstevel@tonic-gate 0x00000000, 0x00010000, 0x00000008, 0x00010008,
1940Sstevel@tonic-gate 0x20000000, 0x20010000, 0x20000008, 0x20010008,
1950Sstevel@tonic-gate 0x00100000, 0x00110000, 0x00100008, 0x00110008,
1960Sstevel@tonic-gate 0x20100000, 0x20110000, 0x20100008, 0x20110008,
1970Sstevel@tonic-gate 0x00000010, 0x00010010, 0x00000018, 0x00010018,
1980Sstevel@tonic-gate 0x20000010, 0x20010010, 0x20000018, 0x20010018,
1990Sstevel@tonic-gate 0x00100010, 0x00110010, 0x00100018, 0x00110018,
2000Sstevel@tonic-gate 0x20100010, 0x20110010, 0x20100018, 0x20110018
2010Sstevel@tonic-gate },
2020Sstevel@tonic-gate {
2030Sstevel@tonic-gate 0x00000000, 0x00000000, 0x10000000, 0x10000000,
2040Sstevel@tonic-gate 0x00000020, 0x00000020, 0x10000020, 0x10000020,
2050Sstevel@tonic-gate 0x00000000, 0x00000000, 0x10000000, 0x10000000,
2060Sstevel@tonic-gate 0x00000020, 0x00000020, 0x10000020, 0x10000020,
2070Sstevel@tonic-gate 0x00000400, 0x00000400, 0x10000400, 0x10000400,
2080Sstevel@tonic-gate 0x00000420, 0x00000420, 0x10000420, 0x10000420,
2090Sstevel@tonic-gate 0x00000400, 0x00000400, 0x10000400, 0x10000400,
2100Sstevel@tonic-gate 0x00000420, 0x00000420, 0x10000420, 0x10000420
2110Sstevel@tonic-gate },
2120Sstevel@tonic-gate {
2130Sstevel@tonic-gate 0x00000000, 0x00000000, 0x00000080, 0x00000080,
2140Sstevel@tonic-gate 0x80000000, 0x80000000, 0x80000080, 0x80000080,
2150Sstevel@tonic-gate 0x00080000, 0x00080000, 0x00080080, 0x00080080,
2160Sstevel@tonic-gate 0x80080000, 0x80080000, 0x80080080, 0x80080080,
2170Sstevel@tonic-gate 0x00001000, 0x00001000, 0x00001080, 0x00001080,
2180Sstevel@tonic-gate 0x80001000, 0x80001000, 0x80001080, 0x80001080,
2190Sstevel@tonic-gate 0x00081000, 0x00081000, 0x00081080, 0x00081080,
2200Sstevel@tonic-gate 0x80081000, 0x80081000, 0x80081080, 0x80081080
2210Sstevel@tonic-gate },
2220Sstevel@tonic-gate {
2230Sstevel@tonic-gate 0x00000000, 0x00008000, 0x08000000, 0x08008000,
2240Sstevel@tonic-gate 0x00000100, 0x00008100, 0x08000100, 0x08008100,
2250Sstevel@tonic-gate 0x00020000, 0x00028000, 0x08020000, 0x08028000,
2260Sstevel@tonic-gate 0x00020100, 0x00028100, 0x08020100, 0x08028100,
2270Sstevel@tonic-gate 0x00004000, 0x0000c000, 0x08004000, 0x0800c000,
2280Sstevel@tonic-gate 0x00004100, 0x0000c100, 0x08004100, 0x0800c100,
2290Sstevel@tonic-gate 0x00024000, 0x0002c000, 0x08024000, 0x0802c000,
2300Sstevel@tonic-gate 0x00024100, 0x0002c100, 0x08024100, 0x0802c100
2310Sstevel@tonic-gate },
2320Sstevel@tonic-gate {
2330Sstevel@tonic-gate 0x00000000, 0x00000200, 0x40000000, 0x40000200,
2340Sstevel@tonic-gate 0x00040000, 0x00040200, 0x40040000, 0x40040200,
2350Sstevel@tonic-gate 0x00000040, 0x00000240, 0x40000040, 0x40000240,
2360Sstevel@tonic-gate 0x00040040, 0x00040240, 0x40040040, 0x40040240,
2370Sstevel@tonic-gate 0x00002000, 0x00002200, 0x40002000, 0x40002200,
2380Sstevel@tonic-gate 0x00042000, 0x00042200, 0x40042000, 0x40042200,
2390Sstevel@tonic-gate 0x00002040, 0x00002240, 0x40002040, 0x40002240,
2400Sstevel@tonic-gate 0x00042040, 0x00042240, 0x40042040, 0x40042240
2410Sstevel@tonic-gate }
2420Sstevel@tonic-gate };
2430Sstevel@tonic-gate 
2440Sstevel@tonic-gate static uint32_t pc2_2_tail_table[4] =
2450Sstevel@tonic-gate {
2460Sstevel@tonic-gate 0x00000000, 0x00000800, 0x04000000, 0x04000800
2470Sstevel@tonic-gate };
2480Sstevel@tonic-gate 
2490Sstevel@tonic-gate static int ss[16] = {1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1};
2500Sstevel@tonic-gate 
2510Sstevel@tonic-gate 
2520Sstevel@tonic-gate /*
2530Sstevel@tonic-gate  * This routine initializes the key schedule.
2540Sstevel@tonic-gate  */
2550Sstevel@tonic-gate void
des_ks(uint64_t * ks,uint64_t key)2560Sstevel@tonic-gate des_ks(uint64_t *ks, uint64_t key)
2570Sstevel@tonic-gate {
2580Sstevel@tonic-gate 	int i;
2590Sstevel@tonic-gate 	uint32_t upper, lower;
2600Sstevel@tonic-gate 	uint64_t c, d;
2610Sstevel@tonic-gate 
2620Sstevel@tonic-gate 	c = pc1_table[0][key >> 57] |
263*416Skrishna 		((pc1_table[0][(key >> 49) & 127ULL]) << 1) |
264*416Skrishna 		((pc1_table[0][(key >> 41) & 127ULL]) << 2) |
265*416Skrishna 		((pc1_table[0][(key >> 33) & 127ULL]) << 3) |
266*416Skrishna 		pc1_table[1][(key >> 25) & 127ULL] |
267*416Skrishna 		((pc1_table[1][(key >> 17) & 127ULL]) << 1) |
268*416Skrishna 		((pc1_table[1][(key >> 9) & 127ULL]) << 2) |
269*416Skrishna 		((pc1_table[1][(key >> 1) & 127ULL]) << 3);
2700Sstevel@tonic-gate 
271*416Skrishna 	d = (c & 0xfffffffULL) | ((c & 0xfffffffULL) << 28);
272*416Skrishna 	c = (c & 0xfffffff0000000ULL) | ((c & 0xfffffff0000000ULL) >> 28);
2730Sstevel@tonic-gate 
2740Sstevel@tonic-gate 	for (i = 0; i < 16; i++) {
2750Sstevel@tonic-gate 		c = c << ss[i];
2760Sstevel@tonic-gate 		d = d << ss[i];
2770Sstevel@tonic-gate 
2780Sstevel@tonic-gate 		upper = pc2_1_table[0][(c >> 50) & 63] |
2790Sstevel@tonic-gate 			pc2_1_table[1][(c >> 44) & 63] |
2800Sstevel@tonic-gate 			pc2_1_table[2][(c >> 38) & 63] |
2810Sstevel@tonic-gate 			pc2_1_table[3][(c >> 32) & 63] |
2820Sstevel@tonic-gate 			pc2_1_tail_table[(c >> 28) & 7];
2830Sstevel@tonic-gate 
2840Sstevel@tonic-gate 		lower = pc2_2_table[0][(d >> 51) & 31] |
2850Sstevel@tonic-gate 			pc2_2_table[1][(d >> 46) & 31] |
2860Sstevel@tonic-gate 			pc2_2_table[2][(d >> 41) & 31] |
2870Sstevel@tonic-gate 			pc2_2_table[3][(d >> 36) & 31] |
2880Sstevel@tonic-gate 			pc2_2_table[4][(d >> 31) & 31] |
2890Sstevel@tonic-gate 			pc2_2_tail_table[(d >> 28) & 3];
2900Sstevel@tonic-gate 		ks[i] = ((uint64_t)upper)<<32 | ((uint64_t)lower);
2910Sstevel@tonic-gate 	}
2920Sstevel@tonic-gate }
2930Sstevel@tonic-gate 
2940Sstevel@tonic-gate /* EXPORT DELETE END */
295