# This file is part of 'NTLM Authorization Proxy Server' http://sourceforge.net/projects/ntlmaps/ # Copyright 2001 Dmitry A. Rozmanov # # This library is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation, either # version 3 of the License, or (at your option) any later version. # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # You should have received a copy of the GNU Lesser General Public # License along with this library. If not, see or . from ntlm_auth.U32 import U32 # static unsigned long des_SPtrans[8][64]={ des_SPtrans = \ [ # nibble 0 [ U32(0x00820200), U32(0x00020000), U32(0x80800000), U32(0x80820200), U32(0x00800000), U32(0x80020200), U32(0x80020000), U32(0x80800000), U32(0x80020200), U32(0x00820200), U32(0x00820000), U32(0x80000200), U32(0x80800200), U32(0x00800000), U32(0x00000000), U32(0x80020000), U32(0x00020000), U32(0x80000000), U32(0x00800200), U32(0x00020200), U32(0x80820200), U32(0x00820000), U32(0x80000200), U32(0x00800200), U32(0x80000000), U32(0x00000200), U32(0x00020200), U32(0x80820000), U32(0x00000200), U32(0x80800200), U32(0x80820000), U32(0x00000000), U32(0x00000000), U32(0x80820200), U32(0x00800200), U32(0x80020000), U32(0x00820200), U32(0x00020000), U32(0x80000200), U32(0x00800200), U32(0x80820000), U32(0x00000200), U32(0x00020200), U32(0x80800000), U32(0x80020200), U32(0x80000000), U32(0x80800000), U32(0x00820000), U32(0x80820200), U32(0x00020200), U32(0x00820000), U32(0x80800200), U32(0x00800000), U32(0x80000200), U32(0x80020000), U32(0x00000000), U32(0x00020000), U32(0x00800000), U32(0x80800200), U32(0x00820200), U32(0x80000000), U32(0x80820000), U32(0x00000200), U32(0x80020200), ], # nibble 1 [ U32(0x10042004), U32(0x00000000), U32(0x00042000), U32(0x10040000), U32(0x10000004), U32(0x00002004), U32(0x10002000), U32(0x00042000), U32(0x00002000), U32(0x10040004), U32(0x00000004), U32(0x10002000), U32(0x00040004), U32(0x10042000), U32(0x10040000), U32(0x00000004), U32(0x00040000), U32(0x10002004), U32(0x10040004), U32(0x00002000), U32(0x00042004), U32(0x10000000), U32(0x00000000), U32(0x00040004), U32(0x10002004), U32(0x00042004), U32(0x10042000), U32(0x10000004), U32(0x10000000), U32(0x00040000), U32(0x00002004), U32(0x10042004), U32(0x00040004), U32(0x10042000), U32(0x10002000), U32(0x00042004), U32(0x10042004), U32(0x00040004), U32(0x10000004), U32(0x00000000), U32(0x10000000), U32(0x00002004), U32(0x00040000), U32(0x10040004), U32(0x00002000), U32(0x10000000), U32(0x00042004), U32(0x10002004), U32(0x10042000), U32(0x00002000), U32(0x00000000), U32(0x10000004), U32(0x00000004), U32(0x10042004), U32(0x00042000), U32(0x10040000), U32(0x10040004), U32(0x00040000), U32(0x00002004), U32(0x10002000), U32(0x10002004), U32(0x00000004), U32(0x10040000), U32(0x00042000), ], # nibble 2 [ U32(0x41000000), U32(0x01010040), U32(0x00000040), U32(0x41000040), U32(0x40010000), U32(0x01000000), U32(0x41000040), U32(0x00010040), U32(0x01000040), U32(0x00010000), U32(0x01010000), U32(0x40000000), U32(0x41010040), U32(0x40000040), U32(0x40000000), U32(0x41010000), U32(0x00000000), U32(0x40010000), U32(0x01010040), U32(0x00000040), U32(0x40000040), U32(0x41010040), U32(0x00010000), U32(0x41000000), U32(0x41010000), U32(0x01000040), U32(0x40010040), U32(0x01010000), U32(0x00010040), U32(0x00000000), U32(0x01000000), U32(0x40010040), U32(0x01010040), U32(0x00000040), U32(0x40000000), U32(0x00010000), U32(0x40000040), U32(0x40010000), U32(0x01010000), U32(0x41000040), U32(0x00000000), U32(0x01010040), U32(0x00010040), U32(0x41010000), U32(0x40010000), U32(0x01000000), U32(0x41010040), U32(0x40000000), U32(0x40010040), U32(0x41000000), U32(0x01000000), U32(0x41010040), U32(0x00010000), U32(0x01000040), U32(0x41000040), U32(0x00010040), U32(0x01000040), U32(0x00000000), U32(0x41010000), U32(0x40000040), U32(0x41000000), U32(0x40010040), U32(0x00000040), U32(0x01010000), ], # nibble 3 [ U32(0x00100402), U32(0x04000400), U32(0x00000002), U32(0x04100402), U32(0x00000000), U32(0x04100000), U32(0x04000402), U32(0x00100002), U32(0x04100400), U32(0x04000002), U32(0x04000000), U32(0x00000402), U32(0x04000002), U32(0x00100402), U32(0x00100000), U32(0x04000000), U32(0x04100002), U32(0x00100400), U32(0x00000400), U32(0x00000002), U32(0x00100400), U32(0x04000402), U32(0x04100000), U32(0x00000400), U32(0x00000402), U32(0x00000000), U32(0x00100002), U32(0x04100400), U32(0x04000400), U32(0x04100002), U32(0x04100402), U32(0x00100000), U32(0x04100002), U32(0x00000402), U32(0x00100000), U32(0x04000002), U32(0x00100400), U32(0x04000400), U32(0x00000002), U32(0x04100000), U32(0x04000402), U32(0x00000000), U32(0x00000400), U32(0x00100002), U32(0x00000000), U32(0x04100002), U32(0x04100400), U32(0x00000400), U32(0x04000000), U32(0x04100402), U32(0x00100402), U32(0x00100000), U32(0x04100402), U32(0x00000002), U32(0x04000400), U32(0x00100402), U32(0x00100002), U32(0x00100400), U32(0x04100000), U32(0x04000402), U32(0x00000402), U32(0x04000000), U32(0x04000002), U32(0x04100400), ], # nibble 4 [ U32(0x02000000), U32(0x00004000), U32(0x00000100), U32(0x02004108), U32(0x02004008), U32(0x02000100), U32(0x00004108), U32(0x02004000), U32(0x00004000), U32(0x00000008), U32(0x02000008), U32(0x00004100), U32(0x02000108), U32(0x02004008), U32(0x02004100), U32(0x00000000), U32(0x00004100), U32(0x02000000), U32(0x00004008), U32(0x00000108), U32(0x02000100), U32(0x00004108), U32(0x00000000), U32(0x02000008), U32(0x00000008), U32(0x02000108), U32(0x02004108), U32(0x00004008), U32(0x02004000), U32(0x00000100), U32(0x00000108), U32(0x02004100), U32(0x02004100), U32(0x02000108), U32(0x00004008), U32(0x02004000), U32(0x00004000), U32(0x00000008), U32(0x02000008), U32(0x02000100), U32(0x02000000), U32(0x00004100), U32(0x02004108), U32(0x00000000), U32(0x00004108), U32(0x02000000), U32(0x00000100), U32(0x00004008), U32(0x02000108), U32(0x00000100), U32(0x00000000), U32(0x02004108), U32(0x02004008), U32(0x02004100), U32(0x00000108), U32(0x00004000), U32(0x00004100), U32(0x02004008), U32(0x02000100), U32(0x00000108), U32(0x00000008), U32(0x00004108), U32(0x02004000), U32(0x02000008), ], # nibble 5 [ U32(0x20000010), U32(0x00080010), U32(0x00000000), U32(0x20080800), U32(0x00080010), U32(0x00000800), U32(0x20000810), U32(0x00080000), U32(0x00000810), U32(0x20080810), U32(0x00080800), U32(0x20000000), U32(0x20000800), U32(0x20000010), U32(0x20080000), U32(0x00080810), U32(0x00080000), U32(0x20000810), U32(0x20080010), U32(0x00000000), U32(0x00000800), U32(0x00000010), U32(0x20080800), U32(0x20080010), U32(0x20080810), U32(0x20080000), U32(0x20000000), U32(0x00000810), U32(0x00000010), U32(0x00080800), U32(0x00080810), U32(0x20000800), U32(0x00000810), U32(0x20000000), U32(0x20000800), U32(0x00080810), U32(0x20080800), U32(0x00080010), U32(0x00000000), U32(0x20000800), U32(0x20000000), U32(0x00000800), U32(0x20080010), U32(0x00080000), U32(0x00080010), U32(0x20080810), U32(0x00080800), U32(0x00000010), U32(0x20080810), U32(0x00080800), U32(0x00080000), U32(0x20000810), U32(0x20000010), U32(0x20080000), U32(0x00080810), U32(0x00000000), U32(0x00000800), U32(0x20000010), U32(0x20000810), U32(0x20080800), U32(0x20080000), U32(0x00000810), U32(0x00000010), U32(0x20080010), ], # nibble 6 [ U32(0x00001000), U32(0x00000080), U32(0x00400080), U32(0x00400001), U32(0x00401081), U32(0x00001001), U32(0x00001080), U32(0x00000000), U32(0x00400000), U32(0x00400081), U32(0x00000081), U32(0x00401000), U32(0x00000001), U32(0x00401080), U32(0x00401000), U32(0x00000081), U32(0x00400081), U32(0x00001000), U32(0x00001001), U32(0x00401081), U32(0x00000000), U32(0x00400080), U32(0x00400001), U32(0x00001080), U32(0x00401001), U32(0x00001081), U32(0x00401080), U32(0x00000001), U32(0x00001081), U32(0x00401001), U32(0x00000080), U32(0x00400000), U32(0x00001081), U32(0x00401000), U32(0x00401001), U32(0x00000081), U32(0x00001000), U32(0x00000080), U32(0x00400000), U32(0x00401001), U32(0x00400081), U32(0x00001081), U32(0x00001080), U32(0x00000000), U32(0x00000080), U32(0x00400001), U32(0x00000001), U32(0x00400080), U32(0x00000000), U32(0x00400081), U32(0x00400080), U32(0x00001080), U32(0x00000081), U32(0x00001000), U32(0x00401081), U32(0x00400000), U32(0x00401080), U32(0x00000001), U32(0x00001001), U32(0x00401081), U32(0x00400001), U32(0x00401080), U32(0x00401000), U32(0x00001001), ], # nibble 7 [ U32(0x08200020), U32(0x08208000), U32(0x00008020), U32(0x00000000), U32(0x08008000), U32(0x00200020), U32(0x08200000), U32(0x08208020), U32(0x00000020), U32(0x08000000), U32(0x00208000), U32(0x00008020), U32(0x00208020), U32(0x08008020), U32(0x08000020), U32(0x08200000), U32(0x00008000), U32(0x00208020), U32(0x00200020), U32(0x08008000), U32(0x08208020), U32(0x08000020), U32(0x00000000), U32(0x00208000), U32(0x08000000), U32(0x00200000), U32(0x08008020), U32(0x08200020), U32(0x00200000), U32(0x00008000), U32(0x08208000), U32(0x00000020), U32(0x00200000), U32(0x00008000), U32(0x08000020), U32(0x08208020), U32(0x00008020), U32(0x08000000), U32(0x00000000), U32(0x00208000), U32(0x08200020), U32(0x08008020), U32(0x08008000), U32(0x00200020), U32(0x08208000), U32(0x00000020), U32(0x00200020), U32(0x08008000), U32(0x08208020), U32(0x00200000), U32(0x08200000), U32(0x08000020), U32(0x00208000), U32(0x00008020), U32(0x08008020), U32(0x08200000), U32(0x00000020), U32(0x08208000), U32(0x00208020), U32(0x00000000), U32(0x08000000), U32(0x08200020), U32(0x00008000), U32(0x00208020), ], ] # static unsigned long des_skb[8][64]={ des_skb = \ [ # for C bits (numbered as per FIPS 46) 1 2 3 4 5 6 [ U32(0x00000000), U32(0x00000010), U32(0x20000000), U32(0x20000010), U32(0x00010000), U32(0x00010010), U32(0x20010000), U32(0x20010010), U32(0x00000800), U32(0x00000810), U32(0x20000800), U32(0x20000810), U32(0x00010800), U32(0x00010810), U32(0x20010800), U32(0x20010810), U32(0x00000020), U32(0x00000030), U32(0x20000020), U32(0x20000030), U32(0x00010020), U32(0x00010030), U32(0x20010020), U32(0x20010030), U32(0x00000820), U32(0x00000830), U32(0x20000820), U32(0x20000830), U32(0x00010820), U32(0x00010830), U32(0x20010820), U32(0x20010830), U32(0x00080000), U32(0x00080010), U32(0x20080000), U32(0x20080010), U32(0x00090000), U32(0x00090010), U32(0x20090000), U32(0x20090010), U32(0x00080800), U32(0x00080810), U32(0x20080800), U32(0x20080810), U32(0x00090800), U32(0x00090810), U32(0x20090800), U32(0x20090810), U32(0x00080020), U32(0x00080030), U32(0x20080020), U32(0x20080030), U32(0x00090020), U32(0x00090030), U32(0x20090020), U32(0x20090030), U32(0x00080820), U32(0x00080830), U32(0x20080820), U32(0x20080830), U32(0x00090820), U32(0x00090830), U32(0x20090820), U32(0x20090830), ], # for C bits (numbered as per FIPS 46) 7 8 10 11 12 13 [ U32(0x00000000), U32(0x02000000), U32(0x00002000), U32(0x02002000), U32(0x00200000), U32(0x02200000), U32(0x00202000), U32(0x02202000), U32(0x00000004), U32(0x02000004), U32(0x00002004), U32(0x02002004), U32(0x00200004), U32(0x02200004), U32(0x00202004), U32(0x02202004), U32(0x00000400), U32(0x02000400), U32(0x00002400), U32(0x02002400), U32(0x00200400), U32(0x02200400), U32(0x00202400), U32(0x02202400), U32(0x00000404), U32(0x02000404), U32(0x00002404), U32(0x02002404), U32(0x00200404), U32(0x02200404), U32(0x00202404), U32(0x02202404), U32(0x10000000), U32(0x12000000), U32(0x10002000), U32(0x12002000), U32(0x10200000), U32(0x12200000), U32(0x10202000), U32(0x12202000), U32(0x10000004), U32(0x12000004), U32(0x10002004), U32(0x12002004), U32(0x10200004), U32(0x12200004), U32(0x10202004), U32(0x12202004), U32(0x10000400), U32(0x12000400), U32(0x10002400), U32(0x12002400), U32(0x10200400), U32(0x12200400), U32(0x10202400), U32(0x12202400), U32(0x10000404), U32(0x12000404), U32(0x10002404), U32(0x12002404), U32(0x10200404), U32(0x12200404), U32(0x10202404), U32(0x12202404), ], # for C bits (numbered as per FIPS 46) 14 15 16 17 19 20 [ U32(0x00000000), U32(0x00000001), U32(0x00040000), U32(0x00040001), U32(0x01000000), U32(0x01000001), U32(0x01040000), U32(0x01040001), U32(0x00000002), U32(0x00000003), U32(0x00040002), U32(0x00040003), U32(0x01000002), U32(0x01000003), U32(0x01040002), U32(0x01040003), U32(0x00000200), U32(0x00000201), U32(0x00040200), U32(0x00040201), U32(0x01000200), U32(0x01000201), U32(0x01040200), U32(0x01040201), U32(0x00000202), U32(0x00000203), U32(0x00040202), U32(0x00040203), U32(0x01000202), U32(0x01000203), U32(0x01040202), U32(0x01040203), U32(0x08000000), U32(0x08000001), U32(0x08040000), U32(0x08040001), U32(0x09000000), U32(0x09000001), U32(0x09040000), U32(0x09040001), U32(0x08000002), U32(0x08000003), U32(0x08040002), U32(0x08040003), U32(0x09000002), U32(0x09000003), U32(0x09040002), U32(0x09040003), U32(0x08000200), U32(0x08000201), U32(0x08040200), U32(0x08040201), U32(0x09000200), U32(0x09000201), U32(0x09040200), U32(0x09040201), U32(0x08000202), U32(0x08000203), U32(0x08040202), U32(0x08040203), U32(0x09000202), U32(0x09000203), U32(0x09040202), U32(0x09040203), ], # for C bits (numbered as per FIPS 46) 21 23 24 26 27 28 [ U32(0x00000000), U32(0x00100000), U32(0x00000100), U32(0x00100100), U32(0x00000008), U32(0x00100008), U32(0x00000108), U32(0x00100108), U32(0x00001000), U32(0x00101000), U32(0x00001100), U32(0x00101100), U32(0x00001008), U32(0x00101008), U32(0x00001108), U32(0x00101108), U32(0x04000000), U32(0x04100000), U32(0x04000100), U32(0x04100100), U32(0x04000008), U32(0x04100008), U32(0x04000108), U32(0x04100108), U32(0x04001000), U32(0x04101000), U32(0x04001100), U32(0x04101100), U32(0x04001008), U32(0x04101008), U32(0x04001108), U32(0x04101108), U32(0x00020000), U32(0x00120000), U32(0x00020100), U32(0x00120100), U32(0x00020008), U32(0x00120008), U32(0x00020108), U32(0x00120108), U32(0x00021000), U32(0x00121000), U32(0x00021100), U32(0x00121100), U32(0x00021008), U32(0x00121008), U32(0x00021108), U32(0x00121108), U32(0x04020000), U32(0x04120000), U32(0x04020100), U32(0x04120100), U32(0x04020008), U32(0x04120008), U32(0x04020108), U32(0x04120108), U32(0x04021000), U32(0x04121000), U32(0x04021100), U32(0x04121100), U32(0x04021008), U32(0x04121008), U32(0x04021108), U32(0x04121108), ], # for D bits (numbered as per FIPS 46) 1 2 3 4 5 6 [ U32(0x00000000), U32(0x10000000), U32(0x00010000), U32(0x10010000), U32(0x00000004), U32(0x10000004), U32(0x00010004), U32(0x10010004), U32(0x20000000), U32(0x30000000), U32(0x20010000), U32(0x30010000), U32(0x20000004), U32(0x30000004), U32(0x20010004), U32(0x30010004), U32(0x00100000), U32(0x10100000), U32(0x00110000), U32(0x10110000), U32(0x00100004), U32(0x10100004), U32(0x00110004), U32(0x10110004), U32(0x20100000), U32(0x30100000), U32(0x20110000), U32(0x30110000), U32(0x20100004), U32(0x30100004), U32(0x20110004), U32(0x30110004), U32(0x00001000), U32(0x10001000), U32(0x00011000), U32(0x10011000), U32(0x00001004), U32(0x10001004), U32(0x00011004), U32(0x10011004), U32(0x20001000), U32(0x30001000), U32(0x20011000), U32(0x30011000), U32(0x20001004), U32(0x30001004), U32(0x20011004), U32(0x30011004), U32(0x00101000), U32(0x10101000), U32(0x00111000), U32(0x10111000), U32(0x00101004), U32(0x10101004), U32(0x00111004), U32(0x10111004), U32(0x20101000), U32(0x30101000), U32(0x20111000), U32(0x30111000), U32(0x20101004), U32(0x30101004), U32(0x20111004), U32(0x30111004), ], # for D bits (numbered as per FIPS 46) 8 9 11 12 13 14 [ U32(0x00000000), U32(0x08000000), U32(0x00000008), U32(0x08000008), U32(0x00000400), U32(0x08000400), U32(0x00000408), U32(0x08000408), U32(0x00020000), U32(0x08020000), U32(0x00020008), U32(0x08020008), U32(0x00020400), U32(0x08020400), U32(0x00020408), U32(0x08020408), U32(0x00000001), U32(0x08000001), U32(0x00000009), U32(0x08000009), U32(0x00000401), U32(0x08000401), U32(0x00000409), U32(0x08000409), U32(0x00020001), U32(0x08020001), U32(0x00020009), U32(0x08020009), U32(0x00020401), U32(0x08020401), U32(0x00020409), U32(0x08020409), U32(0x02000000), U32(0x0A000000), U32(0x02000008), U32(0x0A000008), U32(0x02000400), U32(0x0A000400), U32(0x02000408), U32(0x0A000408), U32(0x02020000), U32(0x0A020000), U32(0x02020008), U32(0x0A020008), U32(0x02020400), U32(0x0A020400), U32(0x02020408), U32(0x0A020408), U32(0x02000001), U32(0x0A000001), U32(0x02000009), U32(0x0A000009), U32(0x02000401), U32(0x0A000401), U32(0x02000409), U32(0x0A000409), U32(0x02020001), U32(0x0A020001), U32(0x02020009), U32(0x0A020009), U32(0x02020401), U32(0x0A020401), U32(0x02020409), U32(0x0A020409), ], # for D bits (numbered as per FIPS 46) 16 17 18 19 20 21 [ U32(0x00000000), U32(0x00000100), U32(0x00080000), U32(0x00080100), U32(0x01000000), U32(0x01000100), U32(0x01080000), U32(0x01080100), U32(0x00000010), U32(0x00000110), U32(0x00080010), U32(0x00080110), U32(0x01000010), U32(0x01000110), U32(0x01080010), U32(0x01080110), U32(0x00200000), U32(0x00200100), U32(0x00280000), U32(0x00280100), U32(0x01200000), U32(0x01200100), U32(0x01280000), U32(0x01280100), U32(0x00200010), U32(0x00200110), U32(0x00280010), U32(0x00280110), U32(0x01200010), U32(0x01200110), U32(0x01280010), U32(0x01280110), U32(0x00000200), U32(0x00000300), U32(0x00080200), U32(0x00080300), U32(0x01000200), U32(0x01000300), U32(0x01080200), U32(0x01080300), U32(0x00000210), U32(0x00000310), U32(0x00080210), U32(0x00080310), U32(0x01000210), U32(0x01000310), U32(0x01080210), U32(0x01080310), U32(0x00200200), U32(0x00200300), U32(0x00280200), U32(0x00280300), U32(0x01200200), U32(0x01200300), U32(0x01280200), U32(0x01280300), U32(0x00200210), U32(0x00200310), U32(0x00280210), U32(0x00280310), U32(0x01200210), U32(0x01200310), U32(0x01280210), U32(0x01280310), ], # for D bits (numbered as per FIPS 46) 22 23 24 25 27 28 [ U32(0x00000000), U32(0x04000000), U32(0x00040000), U32(0x04040000), U32(0x00000002), U32(0x04000002), U32(0x00040002), U32(0x04040002), U32(0x00002000), U32(0x04002000), U32(0x00042000), U32(0x04042000), U32(0x00002002), U32(0x04002002), U32(0x00042002), U32(0x04042002), U32(0x00000020), U32(0x04000020), U32(0x00040020), U32(0x04040020), U32(0x00000022), U32(0x04000022), U32(0x00040022), U32(0x04040022), U32(0x00002020), U32(0x04002020), U32(0x00042020), U32(0x04042020), U32(0x00002022), U32(0x04002022), U32(0x00042022), U32(0x04042022), U32(0x00000800), U32(0x04000800), U32(0x00040800), U32(0x04040800), U32(0x00000802), U32(0x04000802), U32(0x00040802), U32(0x04040802), U32(0x00002800), U32(0x04002800), U32(0x00042800), U32(0x04042800), U32(0x00002802), U32(0x04002802), U32(0x00042802), U32(0x04042802), U32(0x00000820), U32(0x04000820), U32(0x00040820), U32(0x04040820), U32(0x00000822), U32(0x04000822), U32(0x00040822), U32(0x04040822), U32(0x00002820), U32(0x04002820), U32(0x00042820), U32(0x04042820), U32(0x00002822), U32(0x04002822), U32(0x00042822), U32(0x04042822), ] ]