4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
23 * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
27 /* Copyright (c) 1988 AT&T */
28 /* All Rights Reserved */
30 #pragma weak _des_encrypt1 = des_encrypt1
32 #include <sys/types.h>
35 des_encrypt1(char *block
, char *L
, char *IP
, char *R
, char *preS
, char *E
,
36 char KS
[][48], char S
[][64], char *f
, char *tempL
, char *P
, char *FP
)
43 * First, permute the bits in the input
45 for (j
= 0; j
< 64; j
++)
46 L
[j
] = block
[IP
[j
]-1];
48 * Perform an encryption operation 16 times.
50 for (i
= 0; i
< 16; i
++) {
53 * which will be the new L.
55 for (j
= 0; j
< 32; j
++)
58 * Expand R to 48 bits using the E selector;
59 * exclusive-or with the current key bits.
61 for (j
= 0; j
< 48; j
++)
62 preS
[j
] = R
[E
[j
]-1] ^ KS
[i
][j
];
64 * The pre-select bits are now considered
65 * in 8 groups of 6 bits each.
66 * The 8 selection functions map these
67 * 6-bit quantities into 4-bit quantities
68 * and the results permuted
70 * The indexing into the selection functions
71 * is peculiar; it could be simplified by
72 * rewriting the tables.
74 for (j
= 0; j
< 8; j
++) {
76 k
= S
[j
][(preS
[t
+0]<<5)+
89 * The new R is L ^ f(R, K).
90 * The f here has to be permuted first, though.
92 for (j
= 0; j
< 32; j
++)
93 R
[j
] = L
[j
] ^ f
[P
[j
]-1];
95 * Finally, the new L (the original R)
98 for (j
= 0; j
< 32; j
++)
102 * The output L and R are reversed.
104 for (j
= 0; j
< 32; j
++) {
111 * gets the inverse permutation of the very original.
113 for (j
= 0; j
< 64; j
++)
114 block
[j
] = L
[FP
[j
]-1];