1/*
2 * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
3 *
4 * Licensed under the Apache License 2.0 (the "License"). You may not use
5 * this file except in compliance with the License. You can obtain a copy
6 * in the file LICENSE in the source distribution or at
7 * https://www.openssl.org/source/license.html
8 */
9
10const DES_LONG DES_SPtrans[8][64] = {
11 {
12 /* nibble 0 */
13 0x02080800L, 0x00080000L, 0x02000002L, 0x02080802L,
14 0x02000000L, 0x00080802L, 0x00080002L, 0x02000002L,
15 0x00080802L, 0x02080800L, 0x02080000L, 0x00000802L,
16 0x02000802L, 0x02000000L, 0x00000000L, 0x00080002L,
17 0x00080000L, 0x00000002L, 0x02000800L, 0x00080800L,
18 0x02080802L, 0x02080000L, 0x00000802L, 0x02000800L,
19 0x00000002L, 0x00000800L, 0x00080800L, 0x02080002L,
20 0x00000800L, 0x02000802L, 0x02080002L, 0x00000000L,
21 0x00000000L, 0x02080802L, 0x02000800L, 0x00080002L,
22 0x02080800L, 0x00080000L, 0x00000802L, 0x02000800L,
23 0x02080002L, 0x00000800L, 0x00080800L, 0x02000002L,
24 0x00080802L, 0x00000002L, 0x02000002L, 0x02080000L,
25 0x02080802L, 0x00080800L, 0x02080000L, 0x02000802L,
26 0x02000000L, 0x00000802L, 0x00080002L, 0x00000000L,
27 0x00080000L, 0x02000000L, 0x02000802L, 0x02080800L,
28 0x00000002L, 0x02080002L, 0x00000800L, 0x00080802L,
29 },
30 {
31 /* nibble 1 */
32 0x40108010L, 0x00000000L, 0x00108000L, 0x40100000L,
33 0x40000010L, 0x00008010L, 0x40008000L, 0x00108000L,
34 0x00008000L, 0x40100010L, 0x00000010L, 0x40008000L,
35 0x00100010L, 0x40108000L, 0x40100000L, 0x00000010L,
36 0x00100000L, 0x40008010L, 0x40100010L, 0x00008000L,
37 0x00108010L, 0x40000000L, 0x00000000L, 0x00100010L,
38 0x40008010L, 0x00108010L, 0x40108000L, 0x40000010L,
39 0x40000000L, 0x00100000L, 0x00008010L, 0x40108010L,
40 0x00100010L, 0x40108000L, 0x40008000L, 0x00108010L,
41 0x40108010L, 0x00100010L, 0x40000010L, 0x00000000L,
42 0x40000000L, 0x00008010L, 0x00100000L, 0x40100010L,
43 0x00008000L, 0x40000000L, 0x00108010L, 0x40008010L,
44 0x40108000L, 0x00008000L, 0x00000000L, 0x40000010L,
45 0x00000010L, 0x40108010L, 0x00108000L, 0x40100000L,
46 0x40100010L, 0x00100000L, 0x00008010L, 0x40008000L,
47 0x40008010L, 0x00000010L, 0x40100000L, 0x00108000L,
48 },
49 {
50 /* nibble 2 */
51 0x04000001L, 0x04040100L, 0x00000100L, 0x04000101L,
52 0x00040001L, 0x04000000L, 0x04000101L, 0x00040100L,
53 0x04000100L, 0x00040000L, 0x04040000L, 0x00000001L,
54 0x04040101L, 0x00000101L, 0x00000001L, 0x04040001L,
55 0x00000000L, 0x00040001L, 0x04040100L, 0x00000100L,
56 0x00000101L, 0x04040101L, 0x00040000L, 0x04000001L,
57 0x04040001L, 0x04000100L, 0x00040101L, 0x04040000L,
58 0x00040100L, 0x00000000L, 0x04000000L, 0x00040101L,
59 0x04040100L, 0x00000100L, 0x00000001L, 0x00040000L,
60 0x00000101L, 0x00040001L, 0x04040000L, 0x04000101L,
61 0x00000000L, 0x04040100L, 0x00040100L, 0x04040001L,
62 0x00040001L, 0x04000000L, 0x04040101L, 0x00000001L,
63 0x00040101L, 0x04000001L, 0x04000000L, 0x04040101L,
64 0x00040000L, 0x04000100L, 0x04000101L, 0x00040100L,
65 0x04000100L, 0x00000000L, 0x04040001L, 0x00000101L,
66 0x04000001L, 0x00040101L, 0x00000100L, 0x04040000L,
67 },
68 {
69 /* nibble 3 */
70 0x00401008L, 0x10001000L, 0x00000008L, 0x10401008L,
71 0x00000000L, 0x10400000L, 0x10001008L, 0x00400008L,
72 0x10401000L, 0x10000008L, 0x10000000L, 0x00001008L,
73 0x10000008L, 0x00401008L, 0x00400000L, 0x10000000L,
74 0x10400008L, 0x00401000L, 0x00001000L, 0x00000008L,
75 0x00401000L, 0x10001008L, 0x10400000L, 0x00001000L,
76 0x00001008L, 0x00000000L, 0x00400008L, 0x10401000L,
77 0x10001000L, 0x10400008L, 0x10401008L, 0x00400000L,
78 0x10400008L, 0x00001008L, 0x00400000L, 0x10000008L,
79 0x00401000L, 0x10001000L, 0x00000008L, 0x10400000L,
80 0x10001008L, 0x00000000L, 0x00001000L, 0x00400008L,
81 0x00000000L, 0x10400008L, 0x10401000L, 0x00001000L,
82 0x10000000L, 0x10401008L, 0x00401008L, 0x00400000L,
83 0x10401008L, 0x00000008L, 0x10001000L, 0x00401008L,
84 0x00400008L, 0x00401000L, 0x10400000L, 0x10001008L,
85 0x00001008L, 0x10000000L, 0x10000008L, 0x10401000L,
86 },
87 {
88 /* nibble 4 */
89 0x08000000L, 0x00010000L, 0x00000400L, 0x08010420L,
90 0x08010020L, 0x08000400L, 0x00010420L, 0x08010000L,
91 0x00010000L, 0x00000020L, 0x08000020L, 0x00010400L,
92 0x08000420L, 0x08010020L, 0x08010400L, 0x00000000L,
93 0x00010400L, 0x08000000L, 0x00010020L, 0x00000420L,
94 0x08000400L, 0x00010420L, 0x00000000L, 0x08000020L,
95 0x00000020L, 0x08000420L, 0x08010420L, 0x00010020L,
96 0x08010000L, 0x00000400L, 0x00000420L, 0x08010400L,
97 0x08010400L, 0x08000420L, 0x00010020L, 0x08010000L,
98 0x00010000L, 0x00000020L, 0x08000020L, 0x08000400L,
99 0x08000000L, 0x00010400L, 0x08010420L, 0x00000000L,
100 0x00010420L, 0x08000000L, 0x00000400L, 0x00010020L,
101 0x08000420L, 0x00000400L, 0x00000000L, 0x08010420L,
102 0x08010020L, 0x08010400L, 0x00000420L, 0x00010000L,
103 0x00010400L, 0x08010020L, 0x08000400L, 0x00000420L,
104 0x00000020L, 0x00010420L, 0x08010000L, 0x08000020L,
105 },
106 {
107 /* nibble 5 */
108 0x80000040L, 0x00200040L, 0x00000000L, 0x80202000L,
109 0x00200040L, 0x00002000L, 0x80002040L, 0x00200000L,
110 0x00002040L, 0x80202040L, 0x00202000L, 0x80000000L,
111 0x80002000L, 0x80000040L, 0x80200000L, 0x00202040L,
112 0x00200000L, 0x80002040L, 0x80200040L, 0x00000000L,
113 0x00002000L, 0x00000040L, 0x80202000L, 0x80200040L,
114 0x80202040L, 0x80200000L, 0x80000000L, 0x00002040L,
115 0x00000040L, 0x00202000L, 0x00202040L, 0x80002000L,
116 0x00002040L, 0x80000000L, 0x80002000L, 0x00202040L,
117 0x80202000L, 0x00200040L, 0x00000000L, 0x80002000L,
118 0x80000000L, 0x00002000L, 0x80200040L, 0x00200000L,
119 0x00200040L, 0x80202040L, 0x00202000L, 0x00000040L,
120 0x80202040L, 0x00202000L, 0x00200000L, 0x80002040L,
121 0x80000040L, 0x80200000L, 0x00202040L, 0x00000000L,
122 0x00002000L, 0x80000040L, 0x80002040L, 0x80202000L,
123 0x80200000L, 0x00002040L, 0x00000040L, 0x80200040L,
124 },
125 {
126 /* nibble 6 */
127 0x00004000L, 0x00000200L, 0x01000200L, 0x01000004L,
128 0x01004204L, 0x00004004L, 0x00004200L, 0x00000000L,
129 0x01000000L, 0x01000204L, 0x00000204L, 0x01004000L,
130 0x00000004L, 0x01004200L, 0x01004000L, 0x00000204L,
131 0x01000204L, 0x00004000L, 0x00004004L, 0x01004204L,
132 0x00000000L, 0x01000200L, 0x01000004L, 0x00004200L,
133 0x01004004L, 0x00004204L, 0x01004200L, 0x00000004L,
134 0x00004204L, 0x01004004L, 0x00000200L, 0x01000000L,
135 0x00004204L, 0x01004000L, 0x01004004L, 0x00000204L,
136 0x00004000L, 0x00000200L, 0x01000000L, 0x01004004L,
137 0x01000204L, 0x00004204L, 0x00004200L, 0x00000000L,
138 0x00000200L, 0x01000004L, 0x00000004L, 0x01000200L,
139 0x00000000L, 0x01000204L, 0x01000200L, 0x00004200L,
140 0x00000204L, 0x00004000L, 0x01004204L, 0x01000000L,
141 0x01004200L, 0x00000004L, 0x00004004L, 0x01004204L,
142 0x01000004L, 0x01004200L, 0x01004000L, 0x00004004L,
143 },
144 {
145 /* nibble 7 */
146 0x20800080L, 0x20820000L, 0x00020080L, 0x00000000L,
147 0x20020000L, 0x00800080L, 0x20800000L, 0x20820080L,
148 0x00000080L, 0x20000000L, 0x00820000L, 0x00020080L,
149 0x00820080L, 0x20020080L, 0x20000080L, 0x20800000L,
150 0x00020000L, 0x00820080L, 0x00800080L, 0x20020000L,
151 0x20820080L, 0x20000080L, 0x00000000L, 0x00820000L,
152 0x20000000L, 0x00800000L, 0x20020080L, 0x20800080L,
153 0x00800000L, 0x00020000L, 0x20820000L, 0x00000080L,
154 0x00800000L, 0x00020000L, 0x20000080L, 0x20820080L,
155 0x00020080L, 0x20000000L, 0x00000000L, 0x00820000L,
156 0x20800080L, 0x20020080L, 0x20020000L, 0x00800080L,
157 0x20820000L, 0x00000080L, 0x00800080L, 0x20020000L,
158 0x20820080L, 0x00800000L, 0x20800000L, 0x20000080L,
159 0x00820000L, 0x00020080L, 0x20020080L, 0x20800000L,
160 0x00000080L, 0x20820000L, 0x00820080L, 0x00000000L,
161 0x20000000L, 0x20800080L, 0x00020000L, 0x00820080L,
162 }
163};
164