Wraphelp.c revision ff559fab
1ff559fabSmrg/* 2ff559fabSmrg * $Xorg: A8Eq.c,v 1.4 2001/02/09 02:03:48 xorgcvs Exp $ 3ff559fabSmrg * 4ff559fabSmrg */ 5ff559fabSmrg 6ff559fabSmrg#ifdef HAVE_CONFIG_H 7ff559fabSmrg#include <config.h> 8ff559fabSmrg#endif 9ff559fabSmrg#include <sys/types.h> 10ff559fabSmrg#include <X11/Xmd.h> 11ff559fabSmrg#include "Wrap.h" 12ff559fabSmrg 13ff559fabSmrg/* des routines for non-usa - eay 10/9/1991 eay@psych.psy.uq.oz.au 14ff559fabSmrg * These routines were written for speed not size so they are bigger than 15ff559fabSmrg * needed. I have removed some of the loop unrolling, this will reduce 16ff559fabSmrg * code size at the expense of some speed. 17ff559fabSmrg * 25/9/1991 eay - much faster _XdmcpAuthSetup (4 times faster). 18ff559fabSmrg * 19/9/1991 eay - cleaned up the IP and FP code. 19ff559fabSmrg * 10/9/1991 eay - first release. 20ff559fabSmrg * The des routines this file has been made from can be found in 21ff559fabSmrg * ftp.psy.uq.oz.au /pub/DES 22ff559fabSmrg * This particular version derived from OpenBSD Revsion 1.3. 23ff559fabSmrg */ 24ff559fabSmrg 25ff559fabSmrg/* 26ff559fabSmrg * 27ff559fabSmrg * Export Requirements. 28ff559fabSmrg * You may not export or re-export this software or any copy or 29ff559fabSmrg * adaptation in violation of any applicable laws or regulations. 30ff559fabSmrg * 31ff559fabSmrg * Without limiting the generality of the foregoing, hardware, software, 32ff559fabSmrg * technology or services provided under this license agreement may not 33ff559fabSmrg * be exported, reexported, transferred or downloaded to or within (or to 34ff559fabSmrg * a national resident of) countries under U.S. economic embargo 35ff559fabSmrg * including the following countries: 36ff559fabSmrg * 37ff559fabSmrg * Cuba, Iran, Libya, North Korea, Sudan and Syria. This list is subject 38ff559fabSmrg * to change. 39ff559fabSmrg * 40ff559fabSmrg * Hardware, software, technology or services may not be exported, 41ff559fabSmrg * reexported, transferred or downloaded to persons or entities listed on 42ff559fabSmrg * the U.S. Department of Commerce Denied Persons List, Entity List of 43ff559fabSmrg * proliferation concern or on any U.S. Treasury Department Designated 44ff559fabSmrg * Nationals exclusion list, or to parties directly or indirectly 45ff559fabSmrg * involved in the development or production of nuclear, chemical, 46ff559fabSmrg * biological weapons or in missile technology programs as specified in 47ff559fabSmrg * the U.S. Export Administration Regulations (15 CFR 744). 48ff559fabSmrg * 49ff559fabSmrg * By accepting this license agreement you confirm that you are not 50ff559fabSmrg * located in (or a national resident of) any country under U.S. economic 51ff559fabSmrg * embargo, not identified on any U.S. Department of Commerce Denied 52ff559fabSmrg * Persons List, Entity List or Treasury Department Designated Nationals 53ff559fabSmrg * exclusion list, and not directly or indirectly involved in the 54ff559fabSmrg * development or production of nuclear, chemical, biological weapons or 55ff559fabSmrg * in missile technology programs as specified in the U.S. Export 56ff559fabSmrg * Administration Regulations. 57ff559fabSmrg * 58ff559fabSmrg * 59ff559fabSmrg * Local Country Import Requirements. The software you are about to 60ff559fabSmrg * download contains cryptography technology. Some countries regulate the 61ff559fabSmrg * import, use and/or export of certain products with cryptography. The 62ff559fabSmrg * X.org Foundation makes no claims as to the applicability of local 63ff559fabSmrg * country import, use and/or export regulations in relation to the 64ff559fabSmrg * download of this product. If you are located outside the U.S. and 65ff559fabSmrg * Canada you are advised to consult your local country regulations to 66ff559fabSmrg * insure compliance. 67ff559fabSmrg */ 68ff559fabSmrg 69ff559fabSmrgstatic const CARD32 skb[8][64] = { 70ff559fabSmrg /* for C bits (numbered as per FIPS 46) 1 2 3 4 5 6 */ 71ff559fabSmrg { 0x00000000,0x00000010,0x20000000,0x20000010, 72ff559fabSmrg 0x00010000,0x00010010,0x20010000,0x20010010, 73ff559fabSmrg 0x00000800,0x00000810,0x20000800,0x20000810, 74ff559fabSmrg 0x00010800,0x00010810,0x20010800,0x20010810, 75ff559fabSmrg 0x00000020,0x00000030,0x20000020,0x20000030, 76ff559fabSmrg 0x00010020,0x00010030,0x20010020,0x20010030, 77ff559fabSmrg 0x00000820,0x00000830,0x20000820,0x20000830, 78ff559fabSmrg 0x00010820,0x00010830,0x20010820,0x20010830, 79ff559fabSmrg 0x00080000,0x00080010,0x20080000,0x20080010, 80ff559fabSmrg 0x00090000,0x00090010,0x20090000,0x20090010, 81ff559fabSmrg 0x00080800,0x00080810,0x20080800,0x20080810, 82ff559fabSmrg 0x00090800,0x00090810,0x20090800,0x20090810, 83ff559fabSmrg 0x00080020,0x00080030,0x20080020,0x20080030, 84ff559fabSmrg 0x00090020,0x00090030,0x20090020,0x20090030, 85ff559fabSmrg 0x00080820,0x00080830,0x20080820,0x20080830, 86ff559fabSmrg 0x00090820,0x00090830,0x20090820,0x20090830 }, 87ff559fabSmrg /* for C bits (numbered as per FIPS 46) 7 8 10 11 12 13 */ 88ff559fabSmrg { 0x00000000,0x02000000,0x00002000,0x02002000, 89ff559fabSmrg 0x00200000,0x02200000,0x00202000,0x02202000, 90ff559fabSmrg 0x00000004,0x02000004,0x00002004,0x02002004, 91ff559fabSmrg 0x00200004,0x02200004,0x00202004,0x02202004, 92ff559fabSmrg 0x00000400,0x02000400,0x00002400,0x02002400, 93ff559fabSmrg 0x00200400,0x02200400,0x00202400,0x02202400, 94ff559fabSmrg 0x00000404,0x02000404,0x00002404,0x02002404, 95ff559fabSmrg 0x00200404,0x02200404,0x00202404,0x02202404, 96ff559fabSmrg 0x10000000,0x12000000,0x10002000,0x12002000, 97ff559fabSmrg 0x10200000,0x12200000,0x10202000,0x12202000, 98ff559fabSmrg 0x10000004,0x12000004,0x10002004,0x12002004, 99ff559fabSmrg 0x10200004,0x12200004,0x10202004,0x12202004, 100ff559fabSmrg 0x10000400,0x12000400,0x10002400,0x12002400, 101ff559fabSmrg 0x10200400,0x12200400,0x10202400,0x12202400, 102ff559fabSmrg 0x10000404,0x12000404,0x10002404,0x12002404, 103ff559fabSmrg 0x10200404,0x12200404,0x10202404,0x12202404 }, 104ff559fabSmrg /* for C bits (numbered as per FIPS 46) 14 15 16 17 19 20 */ 105ff559fabSmrg { 0x00000000,0x00000001,0x00040000,0x00040001, 106ff559fabSmrg 0x01000000,0x01000001,0x01040000,0x01040001, 107ff559fabSmrg 0x00000002,0x00000003,0x00040002,0x00040003, 108ff559fabSmrg 0x01000002,0x01000003,0x01040002,0x01040003, 109ff559fabSmrg 0x00000200,0x00000201,0x00040200,0x00040201, 110ff559fabSmrg 0x01000200,0x01000201,0x01040200,0x01040201, 111ff559fabSmrg 0x00000202,0x00000203,0x00040202,0x00040203, 112ff559fabSmrg 0x01000202,0x01000203,0x01040202,0x01040203, 113ff559fabSmrg 0x08000000,0x08000001,0x08040000,0x08040001, 114ff559fabSmrg 0x09000000,0x09000001,0x09040000,0x09040001, 115ff559fabSmrg 0x08000002,0x08000003,0x08040002,0x08040003, 116ff559fabSmrg 0x09000002,0x09000003,0x09040002,0x09040003, 117ff559fabSmrg 0x08000200,0x08000201,0x08040200,0x08040201, 118ff559fabSmrg 0x09000200,0x09000201,0x09040200,0x09040201, 119ff559fabSmrg 0x08000202,0x08000203,0x08040202,0x08040203, 120ff559fabSmrg 0x09000202,0x09000203,0x09040202,0x09040203 }, 121ff559fabSmrg /* for C bits (numbered as per FIPS 46) 21 23 24 26 27 28 */ 122ff559fabSmrg { 0x00000000,0x00100000,0x00000100,0x00100100, 123ff559fabSmrg 0x00000008,0x00100008,0x00000108,0x00100108, 124ff559fabSmrg 0x00001000,0x00101000,0x00001100,0x00101100, 125ff559fabSmrg 0x00001008,0x00101008,0x00001108,0x00101108, 126ff559fabSmrg 0x04000000,0x04100000,0x04000100,0x04100100, 127ff559fabSmrg 0x04000008,0x04100008,0x04000108,0x04100108, 128ff559fabSmrg 0x04001000,0x04101000,0x04001100,0x04101100, 129ff559fabSmrg 0x04001008,0x04101008,0x04001108,0x04101108, 130ff559fabSmrg 0x00020000,0x00120000,0x00020100,0x00120100, 131ff559fabSmrg 0x00020008,0x00120008,0x00020108,0x00120108, 132ff559fabSmrg 0x00021000,0x00121000,0x00021100,0x00121100, 133ff559fabSmrg 0x00021008,0x00121008,0x00021108,0x00121108, 134ff559fabSmrg 0x04020000,0x04120000,0x04020100,0x04120100, 135ff559fabSmrg 0x04020008,0x04120008,0x04020108,0x04120108, 136ff559fabSmrg 0x04021000,0x04121000,0x04021100,0x04121100, 137ff559fabSmrg 0x04021008,0x04121008,0x04021108,0x04121108 }, 138ff559fabSmrg /* for D bits (numbered as per FIPS 46) 1 2 3 4 5 6 */ 139ff559fabSmrg { 0x00000000,0x10000000,0x00010000,0x10010000, 140ff559fabSmrg 0x00000004,0x10000004,0x00010004,0x10010004, 141ff559fabSmrg 0x20000000,0x30000000,0x20010000,0x30010000, 142ff559fabSmrg 0x20000004,0x30000004,0x20010004,0x30010004, 143ff559fabSmrg 0x00100000,0x10100000,0x00110000,0x10110000, 144ff559fabSmrg 0x00100004,0x10100004,0x00110004,0x10110004, 145ff559fabSmrg 0x20100000,0x30100000,0x20110000,0x30110000, 146ff559fabSmrg 0x20100004,0x30100004,0x20110004,0x30110004, 147ff559fabSmrg 0x00001000,0x10001000,0x00011000,0x10011000, 148ff559fabSmrg 0x00001004,0x10001004,0x00011004,0x10011004, 149ff559fabSmrg 0x20001000,0x30001000,0x20011000,0x30011000, 150ff559fabSmrg 0x20001004,0x30001004,0x20011004,0x30011004, 151ff559fabSmrg 0x00101000,0x10101000,0x00111000,0x10111000, 152ff559fabSmrg 0x00101004,0x10101004,0x00111004,0x10111004, 153ff559fabSmrg 0x20101000,0x30101000,0x20111000,0x30111000, 154ff559fabSmrg 0x20101004,0x30101004,0x20111004,0x30111004 }, 155ff559fabSmrg /* for D bits (numbered as per FIPS 46) 8 9 11 12 13 14 */ 156ff559fabSmrg { 0x00000000,0x08000000,0x00000008,0x08000008, 157ff559fabSmrg 0x00000400,0x08000400,0x00000408,0x08000408, 158ff559fabSmrg 0x00020000,0x08020000,0x00020008,0x08020008, 159ff559fabSmrg 0x00020400,0x08020400,0x00020408,0x08020408, 160ff559fabSmrg 0x00000001,0x08000001,0x00000009,0x08000009, 161ff559fabSmrg 0x00000401,0x08000401,0x00000409,0x08000409, 162ff559fabSmrg 0x00020001,0x08020001,0x00020009,0x08020009, 163ff559fabSmrg 0x00020401,0x08020401,0x00020409,0x08020409, 164ff559fabSmrg 0x02000000,0x0A000000,0x02000008,0x0A000008, 165ff559fabSmrg 0x02000400,0x0A000400,0x02000408,0x0A000408, 166ff559fabSmrg 0x02020000,0x0A020000,0x02020008,0x0A020008, 167ff559fabSmrg 0x02020400,0x0A020400,0x02020408,0x0A020408, 168ff559fabSmrg 0x02000001,0x0A000001,0x02000009,0x0A000009, 169ff559fabSmrg 0x02000401,0x0A000401,0x02000409,0x0A000409, 170ff559fabSmrg 0x02020001,0x0A020001,0x02020009,0x0A020009, 171ff559fabSmrg 0x02020401,0x0A020401,0x02020409,0x0A020409 }, 172ff559fabSmrg /* for D bits (numbered as per FIPS 46) 16 17 18 19 20 21 */ 173ff559fabSmrg { 0x00000000,0x00000100,0x00080000,0x00080100, 174ff559fabSmrg 0x01000000,0x01000100,0x01080000,0x01080100, 175ff559fabSmrg 0x00000010,0x00000110,0x00080010,0x00080110, 176ff559fabSmrg 0x01000010,0x01000110,0x01080010,0x01080110, 177ff559fabSmrg 0x00200000,0x00200100,0x00280000,0x00280100, 178ff559fabSmrg 0x01200000,0x01200100,0x01280000,0x01280100, 179ff559fabSmrg 0x00200010,0x00200110,0x00280010,0x00280110, 180ff559fabSmrg 0x01200010,0x01200110,0x01280010,0x01280110, 181ff559fabSmrg 0x00000200,0x00000300,0x00080200,0x00080300, 182ff559fabSmrg 0x01000200,0x01000300,0x01080200,0x01080300, 183ff559fabSmrg 0x00000210,0x00000310,0x00080210,0x00080310, 184ff559fabSmrg 0x01000210,0x01000310,0x01080210,0x01080310, 185ff559fabSmrg 0x00200200,0x00200300,0x00280200,0x00280300, 186ff559fabSmrg 0x01200200,0x01200300,0x01280200,0x01280300, 187ff559fabSmrg 0x00200210,0x00200310,0x00280210,0x00280310, 188ff559fabSmrg 0x01200210,0x01200310,0x01280210,0x01280310 }, 189ff559fabSmrg /* for D bits (numbered as per FIPS 46) 22 23 24 25 27 28 */ 190ff559fabSmrg { 0x00000000,0x04000000,0x00040000,0x04040000, 191ff559fabSmrg 0x00000002,0x04000002,0x00040002,0x04040002, 192ff559fabSmrg 0x00002000,0x04002000,0x00042000,0x04042000, 193ff559fabSmrg 0x00002002,0x04002002,0x00042002,0x04042002, 194ff559fabSmrg 0x00000020,0x04000020,0x00040020,0x04040020, 195ff559fabSmrg 0x00000022,0x04000022,0x00040022,0x04040022, 196ff559fabSmrg 0x00002020,0x04002020,0x00042020,0x04042020, 197ff559fabSmrg 0x00002022,0x04002022,0x00042022,0x04042022, 198ff559fabSmrg 0x00000800,0x04000800,0x00040800,0x04040800, 199ff559fabSmrg 0x00000802,0x04000802,0x00040802,0x04040802, 200ff559fabSmrg 0x00002800,0x04002800,0x00042800,0x04042800, 201ff559fabSmrg 0x00002802,0x04002802,0x00042802,0x04042802, 202ff559fabSmrg 0x00000820,0x04000820,0x00040820,0x04040820, 203ff559fabSmrg 0x00000822,0x04000822,0x00040822,0x04040822, 204ff559fabSmrg 0x00002820,0x04002820,0x00042820,0x04042820, 205ff559fabSmrg 0x00002822,0x04002822,0x00042822,0x04042822 } 206ff559fabSmrg}; 207ff559fabSmrg 208ff559fabSmrg 209ff559fabSmrgstatic const CARD32 SPtrans[8][64] = { 210ff559fabSmrg /* nibble 0 */ 211ff559fabSmrg { 0x00410100, 0x00010000, 0x40400000, 0x40410100, 212ff559fabSmrg 0x00400000, 0x40010100, 0x40010000, 0x40400000, 213ff559fabSmrg 0x40010100, 0x00410100, 0x00410000, 0x40000100, 214ff559fabSmrg 0x40400100, 0x00400000, 0x00000000, 0x40010000, 215ff559fabSmrg 0x00010000, 0x40000000, 0x00400100, 0x00010100, 216ff559fabSmrg 0x40410100, 0x00410000, 0x40000100, 0x00400100, 217ff559fabSmrg 0x40000000, 0x00000100, 0x00010100, 0x40410000, 218ff559fabSmrg 0x00000100, 0x40400100, 0x40410000, 0x00000000, 219ff559fabSmrg 0x00000000, 0x40410100, 0x00400100, 0x40010000, 220ff559fabSmrg 0x00410100, 0x00010000, 0x40000100, 0x00400100, 221ff559fabSmrg 0x40410000, 0x00000100, 0x00010100, 0x40400000, 222ff559fabSmrg 0x40010100, 0x40000000, 0x40400000, 0x00410000, 223ff559fabSmrg 0x40410100, 0x00010100, 0x00410000, 0x40400100, 224ff559fabSmrg 0x00400000, 0x40000100, 0x40010000, 0x00000000, 225ff559fabSmrg 0x00010000, 0x00400000, 0x40400100, 0x00410100, 226ff559fabSmrg 0x40000000, 0x40410000, 0x00000100, 0x40010100 }, 227ff559fabSmrg 228ff559fabSmrg /* nibble 1 */ 229ff559fabSmrg { 0x08021002, 0x00000000, 0x00021000, 0x08020000, 230ff559fabSmrg 0x08000002, 0x00001002, 0x08001000, 0x00021000, 231ff559fabSmrg 0x00001000, 0x08020002, 0x00000002, 0x08001000, 232ff559fabSmrg 0x00020002, 0x08021000, 0x08020000, 0x00000002, 233ff559fabSmrg 0x00020000, 0x08001002, 0x08020002, 0x00001000, 234ff559fabSmrg 0x00021002, 0x08000000, 0x00000000, 0x00020002, 235ff559fabSmrg 0x08001002, 0x00021002, 0x08021000, 0x08000002, 236ff559fabSmrg 0x08000000, 0x00020000, 0x00001002, 0x08021002, 237ff559fabSmrg 0x00020002, 0x08021000, 0x08001000, 0x00021002, 238ff559fabSmrg 0x08021002, 0x00020002, 0x08000002, 0x00000000, 239ff559fabSmrg 0x08000000, 0x00001002, 0x00020000, 0x08020002, 240ff559fabSmrg 0x00001000, 0x08000000, 0x00021002, 0x08001002, 241ff559fabSmrg 0x08021000, 0x00001000, 0x00000000, 0x08000002, 242ff559fabSmrg 0x00000002, 0x08021002, 0x00021000, 0x08020000, 243ff559fabSmrg 0x08020002, 0x00020000, 0x00001002, 0x08001000, 244ff559fabSmrg 0x08001002, 0x00000002, 0x08020000, 0x00021000 }, 245ff559fabSmrg 246ff559fabSmrg /* nibble 2 */ 247ff559fabSmrg { 0x20800000, 0x00808020, 0x00000020, 0x20800020, 248ff559fabSmrg 0x20008000, 0x00800000, 0x20800020, 0x00008020, 249ff559fabSmrg 0x00800020, 0x00008000, 0x00808000, 0x20000000, 250ff559fabSmrg 0x20808020, 0x20000020, 0x20000000, 0x20808000, 251ff559fabSmrg 0x00000000, 0x20008000, 0x00808020, 0x00000020, 252ff559fabSmrg 0x20000020, 0x20808020, 0x00008000, 0x20800000, 253ff559fabSmrg 0x20808000, 0x00800020, 0x20008020, 0x00808000, 254ff559fabSmrg 0x00008020, 0x00000000, 0x00800000, 0x20008020, 255ff559fabSmrg 0x00808020, 0x00000020, 0x20000000, 0x00008000, 256ff559fabSmrg 0x20000020, 0x20008000, 0x00808000, 0x20800020, 257ff559fabSmrg 0x00000000, 0x00808020, 0x00008020, 0x20808000, 258ff559fabSmrg 0x20008000, 0x00800000, 0x20808020, 0x20000000, 259ff559fabSmrg 0x20008020, 0x20800000, 0x00800000, 0x20808020, 260ff559fabSmrg 0x00008000, 0x00800020, 0x20800020, 0x00008020, 261ff559fabSmrg 0x00800020, 0x00000000, 0x20808000, 0x20000020, 262ff559fabSmrg 0x20800000, 0x20008020, 0x00000020, 0x00808000 }, 263ff559fabSmrg 264ff559fabSmrg /* nibble 3 */ 265ff559fabSmrg { 0x00080201, 0x02000200, 0x00000001, 0x02080201, 266ff559fabSmrg 0x00000000, 0x02080000, 0x02000201, 0x00080001, 267ff559fabSmrg 0x02080200, 0x02000001, 0x02000000, 0x00000201, 268ff559fabSmrg 0x02000001, 0x00080201, 0x00080000, 0x02000000, 269ff559fabSmrg 0x02080001, 0x00080200, 0x00000200, 0x00000001, 270ff559fabSmrg 0x00080200, 0x02000201, 0x02080000, 0x00000200, 271ff559fabSmrg 0x00000201, 0x00000000, 0x00080001, 0x02080200, 272ff559fabSmrg 0x02000200, 0x02080001, 0x02080201, 0x00080000, 273ff559fabSmrg 0x02080001, 0x00000201, 0x00080000, 0x02000001, 274ff559fabSmrg 0x00080200, 0x02000200, 0x00000001, 0x02080000, 275ff559fabSmrg 0x02000201, 0x00000000, 0x00000200, 0x00080001, 276ff559fabSmrg 0x00000000, 0x02080001, 0x02080200, 0x00000200, 277ff559fabSmrg 0x02000000, 0x02080201, 0x00080201, 0x00080000, 278ff559fabSmrg 0x02080201, 0x00000001, 0x02000200, 0x00080201, 279ff559fabSmrg 0x00080001, 0x00080200, 0x02080000, 0x02000201, 280ff559fabSmrg 0x00000201, 0x02000000, 0x02000001, 0x02080200 }, 281ff559fabSmrg 282ff559fabSmrg /* nibble 4 */ 283ff559fabSmrg { 0x01000000, 0x00002000, 0x00000080, 0x01002084, 284ff559fabSmrg 0x01002004, 0x01000080, 0x00002084, 0x01002000, 285ff559fabSmrg 0x00002000, 0x00000004, 0x01000004, 0x00002080, 286ff559fabSmrg 0x01000084, 0x01002004, 0x01002080, 0x00000000, 287ff559fabSmrg 0x00002080, 0x01000000, 0x00002004, 0x00000084, 288ff559fabSmrg 0x01000080, 0x00002084, 0x00000000, 0x01000004, 289ff559fabSmrg 0x00000004, 0x01000084, 0x01002084, 0x00002004, 290ff559fabSmrg 0x01002000, 0x00000080, 0x00000084, 0x01002080, 291ff559fabSmrg 0x01002080, 0x01000084, 0x00002004, 0x01002000, 292ff559fabSmrg 0x00002000, 0x00000004, 0x01000004, 0x01000080, 293ff559fabSmrg 0x01000000, 0x00002080, 0x01002084, 0x00000000, 294ff559fabSmrg 0x00002084, 0x01000000, 0x00000080, 0x00002004, 295ff559fabSmrg 0x01000084, 0x00000080, 0x00000000, 0x01002084, 296ff559fabSmrg 0x01002004, 0x01002080, 0x00000084, 0x00002000, 297ff559fabSmrg 0x00002080, 0x01002004, 0x01000080, 0x00000084, 298ff559fabSmrg 0x00000004, 0x00002084, 0x01002000, 0x01000004 }, 299ff559fabSmrg 300ff559fabSmrg /* nibble 5 */ 301ff559fabSmrg { 0x10000008, 0x00040008, 0x00000000, 0x10040400, 302ff559fabSmrg 0x00040008, 0x00000400, 0x10000408, 0x00040000, 303ff559fabSmrg 0x00000408, 0x10040408, 0x00040400, 0x10000000, 304ff559fabSmrg 0x10000400, 0x10000008, 0x10040000, 0x00040408, 305ff559fabSmrg 0x00040000, 0x10000408, 0x10040008, 0x00000000, 306ff559fabSmrg 0x00000400, 0x00000008, 0x10040400, 0x10040008, 307ff559fabSmrg 0x10040408, 0x10040000, 0x10000000, 0x00000408, 308ff559fabSmrg 0x00000008, 0x00040400, 0x00040408, 0x10000400, 309ff559fabSmrg 0x00000408, 0x10000000, 0x10000400, 0x00040408, 310ff559fabSmrg 0x10040400, 0x00040008, 0x00000000, 0x10000400, 311ff559fabSmrg 0x10000000, 0x00000400, 0x10040008, 0x00040000, 312ff559fabSmrg 0x00040008, 0x10040408, 0x00040400, 0x00000008, 313ff559fabSmrg 0x10040408, 0x00040400, 0x00040000, 0x10000408, 314ff559fabSmrg 0x10000008, 0x10040000, 0x00040408, 0x00000000, 315ff559fabSmrg 0x00000400, 0x10000008, 0x10000408, 0x10040400, 316ff559fabSmrg 0x10040000, 0x00000408, 0x00000008, 0x10040008 }, 317ff559fabSmrg 318ff559fabSmrg /* nibble 6 */ 319ff559fabSmrg { 0x00000800, 0x00000040, 0x00200040, 0x80200000, 320ff559fabSmrg 0x80200840, 0x80000800, 0x00000840, 0x00000000, 321ff559fabSmrg 0x00200000, 0x80200040, 0x80000040, 0x00200800, 322ff559fabSmrg 0x80000000, 0x00200840, 0x00200800, 0x80000040, 323ff559fabSmrg 0x80200040, 0x00000800, 0x80000800, 0x80200840, 324ff559fabSmrg 0x00000000, 0x00200040, 0x80200000, 0x00000840, 325ff559fabSmrg 0x80200800, 0x80000840, 0x00200840, 0x80000000, 326ff559fabSmrg 0x80000840, 0x80200800, 0x00000040, 0x00200000, 327ff559fabSmrg 0x80000840, 0x00200800, 0x80200800, 0x80000040, 328ff559fabSmrg 0x00000800, 0x00000040, 0x00200000, 0x80200800, 329ff559fabSmrg 0x80200040, 0x80000840, 0x00000840, 0x00000000, 330ff559fabSmrg 0x00000040, 0x80200000, 0x80000000, 0x00200040, 331ff559fabSmrg 0x00000000, 0x80200040, 0x00200040, 0x00000840, 332ff559fabSmrg 0x80000040, 0x00000800, 0x80200840, 0x00200000, 333ff559fabSmrg 0x00200840, 0x80000000, 0x80000800, 0x80200840, 334ff559fabSmrg 0x80200000, 0x00200840, 0x00200800, 0x80000800 }, 335ff559fabSmrg 336ff559fabSmrg /* nibble 7 */ 337ff559fabSmrg { 0x04100010, 0x04104000, 0x00004010, 0x00000000, 338ff559fabSmrg 0x04004000, 0x00100010, 0x04100000, 0x04104010, 339ff559fabSmrg 0x00000010, 0x04000000, 0x00104000, 0x00004010, 340ff559fabSmrg 0x00104010, 0x04004010, 0x04000010, 0x04100000, 341ff559fabSmrg 0x00004000, 0x00104010, 0x00100010, 0x04004000, 342ff559fabSmrg 0x04104010, 0x04000010, 0x00000000, 0x00104000, 343ff559fabSmrg 0x04000000, 0x00100000, 0x04004010, 0x04100010, 344ff559fabSmrg 0x00100000, 0x00004000, 0x04104000, 0x00000010, 345ff559fabSmrg 0x00100000, 0x00004000, 0x04000010, 0x04104010, 346ff559fabSmrg 0x00004010, 0x04000000, 0x00000000, 0x00104000, 347ff559fabSmrg 0x04100010, 0x04004010, 0x04004000, 0x00100010, 348ff559fabSmrg 0x04104000, 0x00000010, 0x00100010, 0x04004000, 349ff559fabSmrg 0x04104010, 0x00100000, 0x04100000, 0x04000010, 350ff559fabSmrg 0x00104000, 0x00004010, 0x04004010, 0x04100000, 351ff559fabSmrg 0x00000010, 0x04104000, 0x00104010, 0x00000000, 352ff559fabSmrg 0x04000000, 0x04100010, 0x00004000, 0x00104010} 353ff559fabSmrg}; 354ff559fabSmrg 355ff559fabSmrg#define ITERATIONS 16 356ff559fabSmrg#define HALF_ITERATIONS 8 357ff559fabSmrg 358ff559fabSmrg#define c2l(c,l) (l =((CARD32)(*((c)++))) , \ 359ff559fabSmrg l|=((CARD32)(*((c)++)))<< 8, \ 360ff559fabSmrg l|=((CARD32)(*((c)++)))<<16, \ 361ff559fabSmrg l|=((CARD32)(*((c)++)))<<24) 362ff559fabSmrg 363ff559fabSmrg#define l2c(l,c) (*((c)++)=(CARD8)(((l) )&0xff), \ 364ff559fabSmrg *((c)++)=(CARD8)(((l)>> 8)&0xff), \ 365ff559fabSmrg *((c)++)=(CARD8)(((l)>>16)&0xff), \ 366ff559fabSmrg *((c)++)=(CARD8)(((l)>>24)&0xff)) 367ff559fabSmrg 368ff559fabSmrg#define PERM_OP(a,b,t,n,m) ((t)=((((a)>>(n))^(b))&(m)),\ 369ff559fabSmrg (b)^=(t),\ 370ff559fabSmrg (a)^=((t)<<(n))) 371ff559fabSmrg 372ff559fabSmrg#define HPERM_OP(a,t,n,m) ((t)=((((a)<<(16-(n)))^(a))&(m)),\ 373ff559fabSmrg (a)=(a)^(t)^(t>>(16-(n))))\ 374ff559fabSmrg 375ff559fabSmrgstatic const char shifts2[16] = {0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0}; 376ff559fabSmrg 377ff559fabSmrgvoid _XdmcpAuthSetup(auth_cblock key, auth_wrapper_schedule schedule) 378ff559fabSmrg{ 379ff559fabSmrg CARD32 c,d,t,s; 380ff559fabSmrg CARD8 *in; 381ff559fabSmrg CARD32 *k; 382ff559fabSmrg int i; 383ff559fabSmrg 384ff559fabSmrg k=(CARD32 *)schedule; 385ff559fabSmrg in=(CARD8 *)key; 386ff559fabSmrg 387ff559fabSmrg c2l(in,c); 388ff559fabSmrg c2l(in,d); 389ff559fabSmrg 390ff559fabSmrg /* do PC1 in 60 simple operations */ 391ff559fabSmrg PERM_OP(d,c,t,4,0x0f0f0f0f); 392ff559fabSmrg HPERM_OP(c,t,-2, 0xcccc0000); 393ff559fabSmrg HPERM_OP(c,t,-1, 0xaaaa0000); 394ff559fabSmrg HPERM_OP(c,t, 8, 0x00ff0000); 395ff559fabSmrg HPERM_OP(c,t,-1, 0xaaaa0000); 396ff559fabSmrg HPERM_OP(d,t,-8, 0xff000000); 397ff559fabSmrg HPERM_OP(d,t, 8, 0x00ff0000); 398ff559fabSmrg HPERM_OP(d,t, 2, 0x33330000); 399ff559fabSmrg d=((d&0x00aa00aa)<<7)|((d&0x55005500)>>7)|(d&0xaa55aa55); 400ff559fabSmrg d=(d>>8)|((c&0xf0000000)>>4); 401ff559fabSmrg c&=0x0fffffff; 402ff559fabSmrg 403ff559fabSmrg for (i=0; i<ITERATIONS; i++) { 404ff559fabSmrg if (shifts2[i]) { 405ff559fabSmrg c=((c>>2)|(c<<26)); d=((d>>2)|(d<<26)); 406ff559fabSmrg } else { 407ff559fabSmrg c=((c>>1)|(c<<27)); d=((d>>1)|(d<<27)); 408ff559fabSmrg } 409ff559fabSmrg c&=0x0fffffff; 410ff559fabSmrg d&=0x0fffffff; 411ff559fabSmrg /* could be a few less shifts but I am to lazy at this 412ff559fabSmrg * point in time to investigate */ 413ff559fabSmrg s= skb[0][ (c )&0x3f ]| 414ff559fabSmrg skb[1][((c>> 6)&0x03)|((c>> 7)&0x3c)]| 415ff559fabSmrg skb[2][((c>>13)&0x0f)|((c>>14)&0x30)]| 416ff559fabSmrg skb[3][((c>>20)&0x01)|((c>>21)&0x06) | 417ff559fabSmrg ((c>>22)&0x38)]; 418ff559fabSmrg t= skb[4][ (d )&0x3f ]| 419ff559fabSmrg skb[5][((d>> 7)&0x03)|((d>> 8)&0x3c)]| 420ff559fabSmrg skb[6][ (d>>15)&0x3f ]| 421ff559fabSmrg skb[7][((d>>21)&0x0f)|((d>>22)&0x30)]; 422ff559fabSmrg 423ff559fabSmrg /* table contained 0213 4657 */ 424ff559fabSmrg *(k++)=((t<<16)|(s&0x0000ffff)); 425ff559fabSmrg s= ((s>>16)|(t&0xffff0000)); 426ff559fabSmrg 427ff559fabSmrg s=(s<<4)|(s>>28); 428ff559fabSmrg *(k++)=s; 429ff559fabSmrg } 430ff559fabSmrg return; 431ff559fabSmrg} 432ff559fabSmrg 433ff559fabSmrg#define D_ENCRYPT(L,R,S) \ 434ff559fabSmrg t=(R<<1)|(R>>31); \ 435ff559fabSmrg u=(t^s[S ]); \ 436ff559fabSmrg t=(t^s[S+1]); \ 437ff559fabSmrg t=(t>>4)|(t<<28); \ 438ff559fabSmrg L^= SPtrans[1][(t )&0x3f]| \ 439ff559fabSmrg SPtrans[3][(t>> 8)&0x3f]| \ 440ff559fabSmrg SPtrans[5][(t>>16)&0x3f]| \ 441ff559fabSmrg SPtrans[7][(t>>24)&0x3f]| \ 442ff559fabSmrg SPtrans[0][(u )&0x3f]| \ 443ff559fabSmrg SPtrans[2][(u>> 8)&0x3f]| \ 444ff559fabSmrg SPtrans[4][(u>>16)&0x3f]| \ 445ff559fabSmrg SPtrans[6][(u>>24)&0x3f]; 446ff559fabSmrg 447ff559fabSmrg 448ff559fabSmrgvoid _XdmcpAuthDoIt(auth_cblock input, auth_cblock output, 449ff559fabSmrg auth_wrapper_schedule ks, int encrypt) 450ff559fabSmrg{ 451ff559fabSmrg CARD32 l,r,t,u; 452ff559fabSmrg CARD32 *s; 453ff559fabSmrg CARD8 *in,*out; 454ff559fabSmrg int i; 455ff559fabSmrg 456ff559fabSmrg in=(CARD8 *)input; 457ff559fabSmrg out=(CARD8 *)output; 458ff559fabSmrg c2l(in,l); 459ff559fabSmrg c2l(in,r); 460ff559fabSmrg 461ff559fabSmrg /* do IP */ 462ff559fabSmrg PERM_OP(r,l,t, 4,0x0f0f0f0f); 463ff559fabSmrg PERM_OP(l,r,t,16,0x0000ffff); 464ff559fabSmrg PERM_OP(r,l,t, 2,0x33333333); 465ff559fabSmrg PERM_OP(l,r,t, 8,0x00ff00ff); 466ff559fabSmrg PERM_OP(r,l,t, 1,0x55555555); 467ff559fabSmrg /* r and l are reversed - remember that :-) */ 468ff559fabSmrg t=l; 469ff559fabSmrg l=r; 470ff559fabSmrg r=t; 471ff559fabSmrg 472ff559fabSmrg s=(CARD32 *)ks; 473ff559fabSmrg 474ff559fabSmrg if (encrypt) { 475ff559fabSmrg for (i=0; i<(ITERATIONS*2); i+=4) { 476ff559fabSmrg D_ENCRYPT(l,r, i); /* 1 */ 477ff559fabSmrg D_ENCRYPT(r,l, i+2); /* 2 */ 478ff559fabSmrg } 479ff559fabSmrg } else { 480ff559fabSmrg for (i=(ITERATIONS*2)-2; i >= 0; i-=4) { 481ff559fabSmrg D_ENCRYPT(l,r, i); /* 1 */ 482ff559fabSmrg D_ENCRYPT(r,l, i-2); /* 2 */ 483ff559fabSmrg } 484ff559fabSmrg } 485ff559fabSmrg 486ff559fabSmrg /* swap l and r 487ff559fabSmrg * we will not do the swap so just remember they are 488ff559fabSmrg * reversed for the rest of the subroutine 489ff559fabSmrg * luckily by FP fixes this problem :-) */ 490ff559fabSmrg 491ff559fabSmrg PERM_OP(r,l,t, 1,0x55555555); 492ff559fabSmrg PERM_OP(l,r,t, 8,0x00ff00ff); 493ff559fabSmrg PERM_OP(r,l,t, 2,0x33333333); 494ff559fabSmrg PERM_OP(l,r,t,16,0x0000ffff); 495ff559fabSmrg PERM_OP(r,l,t, 4,0x0f0f0f0f); 496ff559fabSmrg 497ff559fabSmrg l2c(l,out); 498ff559fabSmrg l2c(r,out); 499ff559fabSmrg return; 500ff559fabSmrg} 501