@ -63,231 +63,231 @@
static const uint32_t des_skb [ 8 ] [ 64 ] = {
{ // for C bits (numbered as per FIPS 46) 1 2 3 4 5 6
0x00000000L , 0x00000010L , 0x20000000L , 0x20000010L , 0x00010000L ,
0x00010010L , 0x20010000L , 0x20010010L , 0x00000800L , 0x00000810L ,
0x20000800L , 0x20000810L , 0x00010800L , 0x00010810L , 0x20010800L ,
0x20010810L , 0x00000020L , 0x00000030L , 0x20000020L , 0x20000030L ,
0x00010020L , 0x00010030L , 0x20010020L , 0x20010030L , 0x00000820L ,
0x00000830L , 0x20000820L , 0x20000830L , 0x00010820L , 0x00010830L ,
0x20010820L , 0x20010830L , 0x00080000L , 0x00080010L , 0x20080000L ,
0x20080010L , 0x00090000L , 0x00090010L , 0x20090000L , 0x20090010L ,
0x00080800L , 0x00080810L , 0x20080800L , 0x20080810L , 0x00090800L ,
0x00090810L , 0x20090800L , 0x20090810L , 0x00080020L , 0x00080030L ,
0x20080020L , 0x20080030L , 0x00090020L , 0x00090030L , 0x20090020L ,
0x20090030L , 0x00080820L , 0x00080830L , 0x20080820L , 0x20080830L ,
0x00090820L , 0x00090830L , 0x20090820L , 0x20090830L , } ,
0x00000000 , 0x00000010 , 0x20000000 , 0x20000010 , 0x00010000 ,
0x00010010 , 0x20010000 , 0x20010010 , 0x00000800 , 0x00000810 ,
0x20000800 , 0x20000810 , 0x00010800 , 0x00010810 , 0x20010800 ,
0x20010810 , 0x00000020 , 0x00000030 , 0x20000020 , 0x20000030 ,
0x00010020 , 0x00010030 , 0x20010020 , 0x20010030 , 0x00000820 ,
0x00000830 , 0x20000820 , 0x20000830 , 0x00010820 , 0x00010830 ,
0x20010820 , 0x20010830 , 0x00080000 , 0x00080010 , 0x20080000 ,
0x20080010 , 0x00090000 , 0x00090010 , 0x20090000 , 0x20090010 ,
0x00080800 , 0x00080810 , 0x20080800 , 0x20080810 , 0x00090800 ,
0x00090810 , 0x20090800 , 0x20090810 , 0x00080020 , 0x00080030 ,
0x20080020 , 0x20080030 , 0x00090020 , 0x00090030 , 0x20090020 ,
0x20090030 , 0x00080820 , 0x00080830 , 0x20080820 , 0x20080830 ,
0x00090820 , 0x00090830 , 0x20090820 , 0x20090830 , } ,
{ // for C bits (numbered as per FIPS 46) 7 8 10 11 12 13
0x00000000L , 0x02000000L , 0x00002000L , 0x02002000L , 0x00200000L ,
0x02200000L , 0x00202000L , 0x02202000L , 0x00000004L , 0x02000004L ,
0x00002004L , 0x02002004L , 0x00200004L , 0x02200004L , 0x00202004L ,
0x02202004L , 0x00000400L , 0x02000400L , 0x00002400L , 0x02002400L ,
0x00200400L , 0x02200400L , 0x00202400L , 0x02202400L , 0x00000404L ,
0x02000404L , 0x00002404L , 0x02002404L , 0x00200404L , 0x02200404L ,
0x00202404L , 0x02202404L , 0x10000000L , 0x12000000L , 0x10002000L ,
0x12002000L , 0x10200000L , 0x12200000L , 0x10202000L , 0x12202000L ,
0x10000004L , 0x12000004L , 0x10002004L , 0x12002004L , 0x10200004L ,
0x12200004L , 0x10202004L , 0x12202004L , 0x10000400L , 0x12000400L ,
0x10002400L , 0x12002400L , 0x10200400L , 0x12200400L , 0x10202400L ,
0x12202400L , 0x10000404L , 0x12000404L , 0x10002404L , 0x12002404L ,
0x10200404L , 0x12200404L , 0x10202404L , 0x12202404L , } ,
0x00000000 , 0x02000000 , 0x00002000 , 0x02002000 , 0x00200000 ,
0x02200000 , 0x00202000 , 0x02202000 , 0x00000004 , 0x02000004 ,
0x00002004 , 0x02002004 , 0x00200004 , 0x02200004 , 0x00202004 ,
0x02202004 , 0x00000400 , 0x02000400 , 0x00002400 , 0x02002400 ,
0x00200400 , 0x02200400 , 0x00202400 , 0x02202400 , 0x00000404 ,
0x02000404 , 0x00002404 , 0x02002404 , 0x00200404 , 0x02200404 ,
0x00202404 , 0x02202404 , 0x10000000 , 0x12000000 , 0x10002000 ,
0x12002000 , 0x10200000 , 0x12200000 , 0x10202000 , 0x12202000 ,
0x10000004 , 0x12000004 , 0x10002004 , 0x12002004 , 0x10200004 ,
0x12200004 , 0x10202004 , 0x12202004 , 0x10000400 , 0x12000400 ,
0x10002400 , 0x12002400 , 0x10200400 , 0x12200400 , 0x10202400 ,
0x12202400 , 0x10000404 , 0x12000404 , 0x10002404 , 0x12002404 ,
0x10200404 , 0x12200404 , 0x10202404 , 0x12202404 , } ,
{ // for C bits (numbered as per FIPS 46) 14 15 16 17 19 20
0x00000000L , 0x00000001L , 0x00040000L , 0x00040001L , 0x01000000L ,
0x01000001L , 0x01040000L , 0x01040001L , 0x00000002L , 0x00000003L ,
0x00040002L , 0x00040003L , 0x01000002L , 0x01000003L , 0x01040002L ,
0x01040003L , 0x00000200L , 0x00000201L , 0x00040200L , 0x00040201L ,
0x01000200L , 0x01000201L , 0x01040200L , 0x01040201L , 0x00000202L ,
0x00000203L , 0x00040202L , 0x00040203L , 0x01000202L , 0x01000203L ,
0x01040202L , 0x01040203L , 0x08000000L , 0x08000001L , 0x08040000L ,
0x08040001L , 0x09000000L , 0x09000001L , 0x09040000L , 0x09040001L ,
0x08000002L , 0x08000003L , 0x08040002L , 0x08040003L , 0x09000002L ,
0x09000003L , 0x09040002L , 0x09040003L , 0x08000200L , 0x08000201L ,
0x08040200L , 0x08040201L , 0x09000200L , 0x09000201L , 0x09040200L ,
0x09040201L , 0x08000202L , 0x08000203L , 0x08040202L , 0x08040203L ,
0x09000202L , 0x09000203L , 0x09040202L , 0x09040203L , } ,
0x00000000 , 0x00000001 , 0x00040000 , 0x00040001 , 0x01000000 ,
0x01000001 , 0x01040000 , 0x01040001 , 0x00000002 , 0x00000003 ,
0x00040002 , 0x00040003 , 0x01000002 , 0x01000003 , 0x01040002 ,
0x01040003 , 0x00000200 , 0x00000201 , 0x00040200 , 0x00040201 ,
0x01000200 , 0x01000201 , 0x01040200 , 0x01040201 , 0x00000202 ,
0x00000203 , 0x00040202 , 0x00040203 , 0x01000202 , 0x01000203 ,
0x01040202 , 0x01040203 , 0x08000000 , 0x08000001 , 0x08040000 ,
0x08040001 , 0x09000000 , 0x09000001 , 0x09040000 , 0x09040001 ,
0x08000002 , 0x08000003 , 0x08040002 , 0x08040003 , 0x09000002 ,
0x09000003 , 0x09040002 , 0x09040003 , 0x08000200 , 0x08000201 ,
0x08040200 , 0x08040201 , 0x09000200 , 0x09000201 , 0x09040200 ,
0x09040201 , 0x08000202 , 0x08000203 , 0x08040202 , 0x08040203 ,
0x09000202 , 0x09000203 , 0x09040202 , 0x09040203 , } ,
{ // for C bits (numbered as per FIPS 46) 21 23 24 26 27 28
0x00000000L , 0x00100000L , 0x00000100L , 0x00100100L , 0x00000008L ,
0x00100008L , 0x00000108L , 0x00100108L , 0x00001000L , 0x00101000L ,
0x00001100L , 0x00101100L , 0x00001008L , 0x00101008L , 0x00001108L ,
0x00101108L , 0x04000000L , 0x04100000L , 0x04000100L , 0x04100100L ,
0x04000008L , 0x04100008L , 0x04000108L , 0x04100108L , 0x04001000L ,
0x04101000L , 0x04001100L , 0x04101100L , 0x04001008L , 0x04101008L ,
0x04001108L , 0x04101108L , 0x00020000L , 0x00120000L , 0x00020100L ,
0x00120100L , 0x00020008L , 0x00120008L , 0x00020108L , 0x00120108L ,
0x00021000L , 0x00121000L , 0x00021100L , 0x00121100L , 0x00021008L ,
0x00121008L , 0x00021108L , 0x00121108L , 0x04020000L , 0x04120000L ,
0x04020100L , 0x04120100L , 0x04020008L , 0x04120008L , 0x04020108L ,
0x04120108L , 0x04021000L , 0x04121000L , 0x04021100L , 0x04121100L ,
0x04021008L , 0x04121008L , 0x04021108L , 0x04121108L , } ,
0x00000000 , 0x00100000 , 0x00000100 , 0x00100100 , 0x00000008 ,
0x00100008 , 0x00000108 , 0x00100108 , 0x00001000 , 0x00101000 ,
0x00001100 , 0x00101100 , 0x00001008 , 0x00101008 , 0x00001108 ,
0x00101108 , 0x04000000 , 0x04100000 , 0x04000100 , 0x04100100 ,
0x04000008 , 0x04100008 , 0x04000108 , 0x04100108 , 0x04001000 ,
0x04101000 , 0x04001100 , 0x04101100 , 0x04001008 , 0x04101008 ,
0x04001108 , 0x04101108 , 0x00020000 , 0x00120000 , 0x00020100 ,
0x00120100 , 0x00020008 , 0x00120008 , 0x00020108 , 0x00120108 ,
0x00021000 , 0x00121000 , 0x00021100 , 0x00121100 , 0x00021008 ,
0x00121008 , 0x00021108 , 0x00121108 , 0x04020000 , 0x04120000 ,
0x04020100 , 0x04120100 , 0x04020008 , 0x04120008 , 0x04020108 ,
0x04120108 , 0x04021000 , 0x04121000 , 0x04021100 , 0x04121100 ,
0x04021008 , 0x04121008 , 0x04021108 , 0x04121108 , } ,
{ // for D bits (numbered as per FIPS 46) 1 2 3 4 5 6
0x00000000L , 0x10000000L , 0x00010000L , 0x10010000L , 0x00000004L ,
0x10000004L , 0x00010004L , 0x10010004L , 0x20000000L , 0x30000000L ,
0x20010000L , 0x30010000L , 0x20000004L , 0x30000004L , 0x20010004L ,
0x30010004L , 0x00100000L , 0x10100000L , 0x00110000L , 0x10110000L ,
0x00100004L , 0x10100004L , 0x00110004L , 0x10110004L , 0x20100000L ,
0x30100000L , 0x20110000L , 0x30110000L , 0x20100004L , 0x30100004L ,
0x20110004L , 0x30110004L , 0x00001000L , 0x10001000L , 0x00011000L ,
0x10011000L , 0x00001004L , 0x10001004L , 0x00011004L , 0x10011004L ,
0x20001000L , 0x30001000L , 0x20011000L , 0x30011000L , 0x20001004L ,
0x30001004L , 0x20011004L , 0x30011004L , 0x00101000L , 0x10101000L ,
0x00111000L , 0x10111000L , 0x00101004L , 0x10101004L , 0x00111004L ,
0x10111004L , 0x20101000L , 0x30101000L , 0x20111000L , 0x30111000L ,
0x20101004L , 0x30101004L , 0x20111004L , 0x30111004L , } ,
0x00000000 , 0x10000000 , 0x00010000 , 0x10010000 , 0x00000004 ,
0x10000004 , 0x00010004 , 0x10010004 , 0x20000000 , 0x30000000 ,
0x20010000 , 0x30010000 , 0x20000004 , 0x30000004 , 0x20010004 ,
0x30010004 , 0x00100000 , 0x10100000 , 0x00110000 , 0x10110000 ,
0x00100004 , 0x10100004 , 0x00110004 , 0x10110004 , 0x20100000 ,
0x30100000 , 0x20110000 , 0x30110000 , 0x20100004 , 0x30100004 ,
0x20110004 , 0x30110004 , 0x00001000 , 0x10001000 , 0x00011000 ,
0x10011000 , 0x00001004 , 0x10001004 , 0x00011004 , 0x10011004 ,
0x20001000 , 0x30001000 , 0x20011000 , 0x30011000 , 0x20001004 ,
0x30001004 , 0x20011004 , 0x30011004 , 0x00101000 , 0x10101000 ,
0x00111000 , 0x10111000 , 0x00101004 , 0x10101004 , 0x00111004 ,
0x10111004 , 0x20101000 , 0x30101000 , 0x20111000 , 0x30111000 ,
0x20101004 , 0x30101004 , 0x20111004 , 0x30111004 , } ,
{ // for D bits (numbered as per FIPS 46) 8 9 11 12 13 14
0x00000000L , 0x08000000L , 0x00000008L , 0x08000008L , 0x00000400L ,
0x08000400L , 0x00000408L , 0x08000408L , 0x00020000L , 0x08020000L ,
0x00020008L , 0x08020008L , 0x00020400L , 0x08020400L , 0x00020408L ,
0x08020408L , 0x00000001L , 0x08000001L , 0x00000009L , 0x08000009L ,
0x00000401L , 0x08000401L , 0x00000409L , 0x08000409L , 0x00020001L ,
0x08020001L , 0x00020009L , 0x08020009L , 0x00020401L , 0x08020401L ,
0x00020409L , 0x08020409L , 0x02000000L , 0x0A000000L , 0x02000008L ,
0x0A000008L , 0x02000400L , 0x0A000400L , 0x02000408L , 0x0A000408L ,
0x02020000L , 0x0A020000L , 0x02020008L , 0x0A020008L , 0x02020400L ,
0x0A020400L , 0x02020408L , 0x0A020408L , 0x02000001L , 0x0A000001L ,
0x02000009L , 0x0A000009L , 0x02000401L , 0x0A000401L , 0x02000409L ,
0x0A000409L , 0x02020001L , 0x0A020001L , 0x02020009L , 0x0A020009L ,
0x02020401L , 0x0A020401L , 0x02020409L , 0x0A020409L , } ,
0x00000000 , 0x08000000 , 0x00000008 , 0x08000008 , 0x00000400 ,
0x08000400 , 0x00000408 , 0x08000408 , 0x00020000 , 0x08020000 ,
0x00020008 , 0x08020008 , 0x00020400 , 0x08020400 , 0x00020408 ,
0x08020408 , 0x00000001 , 0x08000001 , 0x00000009 , 0x08000009 ,
0x00000401 , 0x08000401 , 0x00000409 , 0x08000409 , 0x00020001 ,
0x08020001 , 0x00020009 , 0x08020009 , 0x00020401 , 0x08020401 ,
0x00020409 , 0x08020409 , 0x02000000 , 0x0A000000 , 0x02000008 ,
0x0A000008 , 0x02000400 , 0x0A000400 , 0x02000408 , 0x0A000408 ,
0x02020000 , 0x0A020000 , 0x02020008 , 0x0A020008 , 0x02020400 ,
0x0A020400 , 0x02020408 , 0x0A020408 , 0x02000001 , 0x0A000001 ,
0x02000009 , 0x0A000009 , 0x02000401 , 0x0A000401 , 0x02000409 ,
0x0A000409 , 0x02020001 , 0x0A020001 , 0x02020009 , 0x0A020009 ,
0x02020401 , 0x0A020401 , 0x02020409 , 0x0A020409 , } ,
{ // for D bits (numbered as per FIPS 46) 16 17 18 19 20 21
0x00000000L , 0x00000100L , 0x00080000L , 0x00080100L , 0x01000000L ,
0x01000100L , 0x01080000L , 0x01080100L , 0x00000010L , 0x00000110L ,
0x00080010L , 0x00080110L , 0x01000010L , 0x01000110L , 0x01080010L ,
0x01080110L , 0x00200000L , 0x00200100L , 0x00280000L , 0x00280100L ,
0x01200000L , 0x01200100L , 0x01280000L , 0x01280100L , 0x00200010L ,
0x00200110L , 0x00280010L , 0x00280110L , 0x01200010L , 0x01200110L ,
0x01280010L , 0x01280110L , 0x00000200L , 0x00000300L , 0x00080200L ,
0x00080300L , 0x01000200L , 0x01000300L , 0x01080200L , 0x01080300L ,
0x00000210L , 0x00000310L , 0x00080210L , 0x00080310L , 0x01000210L ,
0x01000310L , 0x01080210L , 0x01080310L , 0x00200200L , 0x00200300L ,
0x00280200L , 0x00280300L , 0x01200200L , 0x01200300L , 0x01280200L ,
0x01280300L , 0x00200210L , 0x00200310L , 0x00280210L , 0x00280310L ,
0x01200210L , 0x01200310L , 0x01280210L , 0x01280310L , } ,
0x00000000 , 0x00000100 , 0x00080000 , 0x00080100 , 0x01000000 ,
0x01000100 , 0x01080000 , 0x01080100 , 0x00000010 , 0x00000110 ,
0x00080010 , 0x00080110 , 0x01000010 , 0x01000110 , 0x01080010 ,
0x01080110 , 0x00200000 , 0x00200100 , 0x00280000 , 0x00280100 ,
0x01200000 , 0x01200100 , 0x01280000 , 0x01280100 , 0x00200010 ,
0x00200110 , 0x00280010 , 0x00280110 , 0x01200010 , 0x01200110 ,
0x01280010 , 0x01280110 , 0x00000200 , 0x00000300 , 0x00080200 ,
0x00080300 , 0x01000200 , 0x01000300 , 0x01080200 , 0x01080300 ,
0x00000210 , 0x00000310 , 0x00080210 , 0x00080310 , 0x01000210 ,
0x01000310 , 0x01080210 , 0x01080310 , 0x00200200 , 0x00200300 ,
0x00280200 , 0x00280300 , 0x01200200 , 0x01200300 , 0x01280200 ,
0x01280300 , 0x00200210 , 0x00200310 , 0x00280210 , 0x00280310 ,
0x01200210 , 0x01200310 , 0x01280210 , 0x01280310 , } ,
{ // for D bits (numbered as per FIPS 46) 22 23 24 25 27 28
0x00000000L , 0x04000000L , 0x00040000L , 0x04040000L , 0x00000002L ,
0x04000002L , 0x00040002L , 0x04040002L , 0x00002000L , 0x04002000L ,
0x00042000L , 0x04042000L , 0x00002002L , 0x04002002L , 0x00042002L ,
0x04042002L , 0x00000020L , 0x04000020L , 0x00040020L , 0x04040020L ,
0x00000022L , 0x04000022L , 0x00040022L , 0x04040022L , 0x00002020L ,
0x04002020L , 0x00042020L , 0x04042020L , 0x00002022L , 0x04002022L ,
0x00042022L , 0x04042022L , 0x00000800L , 0x04000800L , 0x00040800L ,
0x04040800L , 0x00000802L , 0x04000802L , 0x00040802L , 0x04040802L ,
0x00002800L , 0x04002800L , 0x00042800L , 0x04042800L , 0x00002802L ,
0x04002802L , 0x00042802L , 0x04042802L , 0x00000820L , 0x04000820L ,
0x00040820L , 0x04040820L , 0x00000822L , 0x04000822L , 0x00040822L ,
0x04040822L , 0x00002820L , 0x04002820L , 0x00042820L , 0x04042820L ,
0x00002822L , 0x04002822L , 0x00042822L , 0x04042822L , } } ;
0x00000000 , 0x04000000 , 0x00040000 , 0x04040000 , 0x00000002 ,
0x04000002 , 0x00040002 , 0x04040002 , 0x00002000 , 0x04002000 ,
0x00042000 , 0x04042000 , 0x00002002 , 0x04002002 , 0x00042002 ,
0x04042002 , 0x00000020 , 0x04000020 , 0x00040020 , 0x04040020 ,
0x00000022 , 0x04000022 , 0x00040022 , 0x04040022 , 0x00002020 ,
0x04002020 , 0x00042020 , 0x04042020 , 0x00002022 , 0x04002022 ,
0x00042022 , 0x04042022 , 0x00000800 , 0x04000800 , 0x00040800 ,
0x04040800 , 0x00000802 , 0x04000802 , 0x00040802 , 0x04040802 ,
0x00002800 , 0x04002800 , 0x00042800 , 0x04042800 , 0x00002802 ,
0x04002802 , 0x00042802 , 0x04042802 , 0x00000820 , 0x04000820 ,
0x00040820 , 0x04040820 , 0x00000822 , 0x04000822 , 0x00040822 ,
0x04040822 , 0x00002820 , 0x04002820 , 0x00042820 , 0x04042820 ,
0x00002822 , 0x04002822 , 0x00042822 , 0x04042822 , } } ;
static const uint32_t DES_SPtrans [ 8 ] [ 64 ] = {
{ // nibble 0
0x02080800L , 0x00080000L , 0x02000002L , 0x02080802L , 0x02000000L ,
0x00080802L , 0x00080002L , 0x02000002L , 0x00080802L , 0x02080800L ,
0x02080000L , 0x00000802L , 0x02000802L , 0x02000000L , 0x00000000L ,
0x00080002L , 0x00080000L , 0x00000002L , 0x02000800L , 0x00080800L ,
0x02080802L , 0x02080000L , 0x00000802L , 0x02000800L , 0x00000002L ,
0x00000800L , 0x00080800L , 0x02080002L , 0x00000800L , 0x02000802L ,
0x02080002L , 0x00000000L , 0x00000000L , 0x02080802L , 0x02000800L ,
0x00080002L , 0x02080800L , 0x00080000L , 0x00000802L , 0x02000800L ,
0x02080002L , 0x00000800L , 0x00080800L , 0x02000002L , 0x00080802L ,
0x00000002L , 0x02000002L , 0x02080000L , 0x02080802L , 0x00080800L ,
0x02080000L , 0x02000802L , 0x02000000L , 0x00000802L , 0x00080002L ,
0x00000000L , 0x00080000L , 0x02000000L , 0x02000802L , 0x02080800L ,
0x00000002L , 0x02080002L , 0x00000800L , 0x00080802L , } ,
0x02080800 , 0x00080000 , 0x02000002 , 0x02080802 , 0x02000000 ,
0x00080802 , 0x00080002 , 0x02000002 , 0x00080802 , 0x02080800 ,
0x02080000 , 0x00000802 , 0x02000802 , 0x02000000 , 0x00000000 ,
0x00080002 , 0x00080000 , 0x00000002 , 0x02000800 , 0x00080800 ,
0x02080802 , 0x02080000 , 0x00000802 , 0x02000800 , 0x00000002 ,
0x00000800 , 0x00080800 , 0x02080002 , 0x00000800 , 0x02000802 ,
0x02080002 , 0x00000000 , 0x00000000 , 0x02080802 , 0x02000800 ,
0x00080002 , 0x02080800 , 0x00080000 , 0x00000802 , 0x02000800 ,
0x02080002 , 0x00000800 , 0x00080800 , 0x02000002 , 0x00080802 ,
0x00000002 , 0x02000002 , 0x02080000 , 0x02080802 , 0x00080800 ,
0x02080000 , 0x02000802 , 0x02000000 , 0x00000802 , 0x00080002 ,
0x00000000 , 0x00080000 , 0x02000000 , 0x02000802 , 0x02080800 ,
0x00000002 , 0x02080002 , 0x00000800 , 0x00080802 , } ,
{ // nibble 1
0x40108010L , 0x00000000L , 0x00108000L , 0x40100000L , 0x40000010L ,
0x00008010L , 0x40008000L , 0x00108000L , 0x00008000L , 0x40100010L ,
0x00000010L , 0x40008000L , 0x00100010L , 0x40108000L , 0x40100000L ,
0x00000010L , 0x00100000L , 0x40008010L , 0x40100010L , 0x00008000L ,
0x00108010L , 0x40000000L , 0x00000000L , 0x00100010L , 0x40008010L ,
0x00108010L , 0x40108000L , 0x40000010L , 0x40000000L , 0x00100000L ,
0x00008010L , 0x40108010L , 0x00100010L , 0x40108000L , 0x40008000L ,
0x00108010L , 0x40108010L , 0x00100010L , 0x40000010L , 0x00000000L ,
0x40000000L , 0x00008010L , 0x00100000L , 0x40100010L , 0x00008000L ,
0x40000000L , 0x00108010L , 0x40008010L , 0x40108000L , 0x00008000L ,
0x00000000L , 0x40000010L , 0x00000010L , 0x40108010L , 0x00108000L ,
0x40100000L , 0x40100010L , 0x00100000L , 0x00008010L , 0x40008000L ,
0x40008010L , 0x00000010L , 0x40100000L , 0x00108000L , } ,
0x40108010 , 0x00000000 , 0x00108000 , 0x40100000 , 0x40000010 ,
0x00008010 , 0x40008000 , 0x00108000 , 0x00008000 , 0x40100010 ,
0x00000010 , 0x40008000 , 0x00100010 , 0x40108000 , 0x40100000 ,
0x00000010 , 0x00100000 , 0x40008010 , 0x40100010 , 0x00008000 ,
0x00108010 , 0x40000000 , 0x00000000 , 0x00100010 , 0x40008010 ,
0x00108010 , 0x40108000 , 0x40000010 , 0x40000000 , 0x00100000 ,
0x00008010 , 0x40108010 , 0x00100010 , 0x40108000 , 0x40008000 ,
0x00108010 , 0x40108010 , 0x00100010 , 0x40000010 , 0x00000000 ,
0x40000000 , 0x00008010 , 0x00100000 , 0x40100010 , 0x00008000 ,
0x40000000 , 0x00108010 , 0x40008010 , 0x40108000 , 0x00008000 ,
0x00000000 , 0x40000010 , 0x00000010 , 0x40108010 , 0x00108000 ,
0x40100000 , 0x40100010 , 0x00100000 , 0x00008010 , 0x40008000 ,
0x40008010 , 0x00000010 , 0x40100000 , 0x00108000 , } ,
{ // nibble 2
0x04000001L , 0x04040100L , 0x00000100L , 0x04000101L , 0x00040001L ,
0x04000000L , 0x04000101L , 0x00040100L , 0x04000100L , 0x00040000L ,
0x04040000L , 0x00000001L , 0x04040101L , 0x00000101L , 0x00000001L ,
0x04040001L , 0x00000000L , 0x00040001L , 0x04040100L , 0x00000100L ,
0x00000101L , 0x04040101L , 0x00040000L , 0x04000001L , 0x04040001L ,
0x04000100L , 0x00040101L , 0x04040000L , 0x00040100L , 0x00000000L ,
0x04000000L , 0x00040101L , 0x04040100L , 0x00000100L , 0x00000001L ,
0x00040000L , 0x00000101L , 0x00040001L , 0x04040000L , 0x04000101L ,
0x00000000L , 0x04040100L , 0x00040100L , 0x04040001L , 0x00040001L ,
0x04000000L , 0x04040101L , 0x00000001L , 0x00040101L , 0x04000001L ,
0x04000000L , 0x04040101L , 0x00040000L , 0x04000100L , 0x04000101L ,
0x00040100L , 0x04000100L , 0x00000000L , 0x04040001L , 0x00000101L ,
0x04000001L , 0x00040101L , 0x00000100L , 0x04040000L , } ,
0x04000001 , 0x04040100 , 0x00000100 , 0x04000101 , 0x00040001 ,
0x04000000 , 0x04000101 , 0x00040100 , 0x04000100 , 0x00040000 ,
0x04040000 , 0x00000001 , 0x04040101 , 0x00000101 , 0x00000001 ,
0x04040001 , 0x00000000 , 0x00040001 , 0x04040100 , 0x00000100 ,
0x00000101 , 0x04040101 , 0x00040000 , 0x04000001 , 0x04040001 ,
0x04000100 , 0x00040101 , 0x04040000 , 0x00040100 , 0x00000000 ,
0x04000000 , 0x00040101 , 0x04040100 , 0x00000100 , 0x00000001 ,
0x00040000 , 0x00000101 , 0x00040001 , 0x04040000 , 0x04000101 ,
0x00000000 , 0x04040100 , 0x00040100 , 0x04040001 , 0x00040001 ,
0x04000000 , 0x04040101 , 0x00000001 , 0x00040101 , 0x04000001 ,
0x04000000 , 0x04040101 , 0x00040000 , 0x04000100 , 0x04000101 ,
0x00040100 , 0x04000100 , 0x00000000 , 0x04040001 , 0x00000101 ,
0x04000001 , 0x00040101 , 0x00000100 , 0x04040000 , } ,
{ // nibble 3
0x00401008L , 0x10001000L , 0x00000008L , 0x10401008L , 0x00000000L ,
0x10400000L , 0x10001008L , 0x00400008L , 0x10401000L , 0x10000008L ,
0x10000000L , 0x00001008L , 0x10000008L , 0x00401008L , 0x00400000L ,
0x10000000L , 0x10400008L , 0x00401000L , 0x00001000L , 0x00000008L ,
0x00401000L , 0x10001008L , 0x10400000L , 0x00001000L , 0x00001008L ,
0x00000000L , 0x00400008L , 0x10401000L , 0x10001000L , 0x10400008L ,
0x10401008L , 0x00400000L , 0x10400008L , 0x00001008L , 0x00400000L ,
0x10000008L , 0x00401000L , 0x10001000L , 0x00000008L , 0x10400000L ,
0x10001008L , 0x00000000L , 0x00001000L , 0x00400008L , 0x00000000L ,
0x10400008L , 0x10401000L , 0x00001000L , 0x10000000L , 0x10401008L ,
0x00401008L , 0x00400000L , 0x10401008L , 0x00000008L , 0x10001000L ,
0x00401008L , 0x00400008L , 0x00401000L , 0x10400000L , 0x10001008L ,
0x00001008L , 0x10000000L , 0x10000008L , 0x10401000L , } ,
0x00401008 , 0x10001000 , 0x00000008 , 0x10401008 , 0x00000000 ,
0x10400000 , 0x10001008 , 0x00400008 , 0x10401000 , 0x10000008 ,
0x10000000 , 0x00001008 , 0x10000008 , 0x00401008 , 0x00400000 ,
0x10000000 , 0x10400008 , 0x00401000 , 0x00001000 , 0x00000008 ,
0x00401000 , 0x10001008 , 0x10400000 , 0x00001000 , 0x00001008 ,
0x00000000 , 0x00400008 , 0x10401000 , 0x10001000 , 0x10400008 ,
0x10401008 , 0x00400000 , 0x10400008 , 0x00001008 , 0x00400000 ,
0x10000008 , 0x00401000 , 0x10001000 , 0x00000008 , 0x10400000 ,
0x10001008 , 0x00000000 , 0x00001000 , 0x00400008 , 0x00000000 ,
0x10400008 , 0x10401000 , 0x00001000 , 0x10000000 , 0x10401008 ,
0x00401008 , 0x00400000 , 0x10401008 , 0x00000008 , 0x10001000 ,
0x00401008 , 0x00400008 , 0x00401000 , 0x10400000 , 0x10001008 ,
0x00001008 , 0x10000000 , 0x10000008 , 0x10401000 , } ,
{ // nibble 4
0x08000000L , 0x00010000L , 0x00000400L , 0x08010420L , 0x08010020L ,
0x08000400L , 0x00010420L , 0x08010000L , 0x00010000L , 0x00000020L ,
0x08000020L , 0x00010400L , 0x08000420L , 0x08010020L , 0x08010400L ,
0x00000000L , 0x00010400L , 0x08000000L , 0x00010020L , 0x00000420L ,
0x08000400L , 0x00010420L , 0x00000000L , 0x08000020L , 0x00000020L ,
0x08000420L , 0x08010420L , 0x00010020L , 0x08010000L , 0x00000400L ,
0x00000420L , 0x08010400L , 0x08010400L , 0x08000420L , 0x00010020L ,
0x08010000L , 0x00010000L , 0x00000020L , 0x08000020L , 0x08000400L ,
0x08000000L , 0x00010400L , 0x08010420L , 0x00000000L , 0x00010420L ,
0x08000000L , 0x00000400L , 0x00010020L , 0x08000420L , 0x00000400L ,
0x00000000L , 0x08010420L , 0x08010020L , 0x08010400L , 0x00000420L ,
0x00010000L , 0x00010400L , 0x08010020L , 0x08000400L , 0x00000420L ,
0x00000020L , 0x00010420L , 0x08010000L , 0x08000020L , } ,
0x08000000 , 0x00010000 , 0x00000400 , 0x08010420 , 0x08010020 ,
0x08000400 , 0x00010420 , 0x08010000 , 0x00010000 , 0x00000020 ,
0x08000020 , 0x00010400 , 0x08000420 , 0x08010020 , 0x08010400 ,
0x00000000 , 0x00010400 , 0x08000000 , 0x00010020 , 0x00000420 ,
0x08000400 , 0x00010420 , 0x00000000 , 0x08000020 , 0x00000020 ,
0x08000420 , 0x08010420 , 0x00010020 , 0x08010000 , 0x00000400 ,
0x00000420 , 0x08010400 , 0x08010400 , 0x08000420 , 0x00010020 ,
0x08010000 , 0x00010000 , 0x00000020 , 0x08000020 , 0x08000400 ,
0x08000000 , 0x00010400 , 0x08010420 , 0x00000000 , 0x00010420 ,
0x08000000 , 0x00000400 , 0x00010020 , 0x08000420 , 0x00000400 ,
0x00000000 , 0x08010420 , 0x08010020 , 0x08010400 , 0x00000420 ,
0x00010000 , 0x00010400 , 0x08010020 , 0x08000400 , 0x00000420 ,
0x00000020 , 0x00010420 , 0x08010000 , 0x08000020 , } ,
{ // nibble 5
0x80000040L , 0x00200040L , 0x00000000L , 0x80202000L , 0x00200040L ,
0x00002000L , 0x80002040L , 0x00200000L , 0x00002040L , 0x80202040L ,
0x00202000L , 0x80000000L , 0x80002000L , 0x80000040L , 0x80200000L ,
0x00202040L , 0x00200000L , 0x80002040L , 0x80200040L , 0x00000000L ,
0x00002000L , 0x00000040L , 0x80202000L , 0x80200040L , 0x80202040L ,
0x80200000L , 0x80000000L , 0x00002040L , 0x00000040L , 0x00202000L ,
0x00202040L , 0x80002000L , 0x00002040L , 0x80000000L , 0x80002000L ,
0x00202040L , 0x80202000L , 0x00200040L , 0x00000000L , 0x80002000L ,
0x80000000L , 0x00002000L , 0x80200040L , 0x00200000L , 0x00200040L ,
0x80202040L , 0x00202000L , 0x00000040L , 0x80202040L , 0x00202000L ,
0x00200000L , 0x80002040L , 0x80000040L , 0x80200000L , 0x00202040L ,
0x00000000L , 0x00002000L , 0x80000040L , 0x80002040L , 0x80202000L ,
0x80200000L , 0x00002040L , 0x00000040L , 0x80200040L , } ,
0x80000040 , 0x00200040 , 0x00000000 , 0x80202000 , 0x00200040 ,
0x00002000 , 0x80002040 , 0x00200000 , 0x00002040 , 0x80202040 ,
0x00202000 , 0x80000000 , 0x80002000 , 0x80000040 , 0x80200000 ,
0x00202040 , 0x00200000 , 0x80002040 , 0x80200040 , 0x00000000 ,
0x00002000 , 0x00000040 , 0x80202000 , 0x80200040 , 0x80202040 ,
0x80200000 , 0x80000000 , 0x00002040 , 0x00000040 , 0x00202000 ,
0x00202040 , 0x80002000 , 0x00002040 , 0x80000000 , 0x80002000 ,
0x00202040 , 0x80202000 , 0x00200040 , 0x00000000 , 0x80002000 ,
0x80000000 , 0x00002000 , 0x80200040 , 0x00200000 , 0x00200040 ,
0x80202040 , 0x00202000 , 0x00000040 , 0x80202040 , 0x00202000 ,
0x00200000 , 0x80002040 , 0x80000040 , 0x80200000 , 0x00202040 ,
0x00000000 , 0x00002000 , 0x80000040 , 0x80002040 , 0x80202000 ,
0x80200000 , 0x00002040 , 0x00000040 , 0x80200040 , } ,
{ // nibble 6
0x00004000L , 0x00000200L , 0x01000200L , 0x01000004L , 0x01004204L ,
0x00004004L , 0x00004200L , 0x00000000L , 0x01000000L , 0x01000204L ,
0x00000204L , 0x01004000L , 0x00000004L , 0x01004200L , 0x01004000L ,
0x00000204L , 0x01000204L , 0x00004000L , 0x00004004L , 0x01004204L ,
0x00000000L , 0x01000200L , 0x01000004L , 0x00004200L , 0x01004004L ,
0x00004204L , 0x01004200L , 0x00000004L , 0x00004204L , 0x01004004L ,
0x00000200L , 0x01000000L , 0x00004204L , 0x01004000L , 0x01004004L ,
0x00000204L , 0x00004000L , 0x00000200L , 0x01000000L , 0x01004004L ,
0x01000204L , 0x00004204L , 0x00004200L , 0x00000000L , 0x00000200L ,
0x01000004L , 0x00000004L , 0x01000200L , 0x00000000L , 0x01000204L ,
0x01000200L , 0x00004200L , 0x00000204L , 0x00004000L , 0x01004204L ,
0x01000000L , 0x01004200L , 0x00000004L , 0x00004004L , 0x01004204L ,
0x01000004L , 0x01004200L , 0x01004000L , 0x00004004L , } ,
0x00004000 , 0x00000200 , 0x01000200 , 0x01000004 , 0x01004204 ,
0x00004004 , 0x00004200 , 0x00000000 , 0x01000000 , 0x01000204 ,
0x00000204 , 0x01004000 , 0x00000004 , 0x01004200 , 0x01004000 ,
0x00000204 , 0x01000204 , 0x00004000 , 0x00004004 , 0x01004204 ,
0x00000000 , 0x01000200 , 0x01000004 , 0x00004200 , 0x01004004 ,
0x00004204 , 0x01004200 , 0x00000004 , 0x00004204 , 0x01004004 ,
0x00000200 , 0x01000000 , 0x00004204 , 0x01004000 , 0x01004004 ,
0x00000204 , 0x00004000 , 0x00000200 , 0x01000000 , 0x01004004 ,
0x01000204 , 0x00004204 , 0x00004200 , 0x00000000 , 0x00000200 ,
0x01000004 , 0x00000004 , 0x01000200 , 0x00000000 , 0x01000204 ,
0x01000200 , 0x00004200 , 0x00000204 , 0x00004000 , 0x01004204 ,
0x01000000 , 0x01004200 , 0x00000004 , 0x00004004 , 0x01004204 ,
0x01000004 , 0x01004200 , 0x01004000 , 0x00004004 , } ,
{ // nibble 7
0x20800080L , 0x20820000L , 0x00020080L , 0x00000000L , 0x20020000L ,
0x00800080L , 0x20800000L , 0x20820080L , 0x00000080L , 0x20000000L ,
0x00820000L , 0x00020080L , 0x00820080L , 0x20020080L , 0x20000080L ,
0x20800000L , 0x00020000L , 0x00820080L , 0x00800080L , 0x20020000L ,
0x20820080L , 0x20000080L , 0x00000000L , 0x00820000L , 0x20000000L ,
0x00800000L , 0x20020080L , 0x20800080L , 0x00800000L , 0x00020000L ,
0x20820000L , 0x00000080L , 0x00800000L , 0x00020000L , 0x20000080L ,
0x20820080L , 0x00020080L , 0x20000000L , 0x00000000L , 0x00820000L ,
0x20800080L , 0x20020080L , 0x20020000L , 0x00800080L , 0x20820000L ,
0x00000080L , 0x00800080L , 0x20020000L , 0x20820080L , 0x00800000L ,
0x20800000L , 0x20000080L , 0x00820000L , 0x00020080L , 0x20020080L ,
0x20800000L , 0x00000080L , 0x20820000L , 0x00820080L , 0x00000000L ,
0x20000000L , 0x20800080L , 0x00020000L , 0x00820080L , } } ;
0x20800080 , 0x20820000 , 0x00020080 , 0x00000000 , 0x20020000 ,
0x00800080 , 0x20800000 , 0x20820080 , 0x00000080 , 0x20000000 ,
0x00820000 , 0x00020080 , 0x00820080 , 0x20020080 , 0x20000080 ,
0x20800000 , 0x00020000 , 0x00820080 , 0x00800080 , 0x20020000 ,
0x20820080 , 0x20000080 , 0x00000000 , 0x00820000 , 0x20000000 ,
0x00800000 , 0x20020080 , 0x20800080 , 0x00800000 , 0x00020000 ,
0x20820000 , 0x00000080 , 0x00800000 , 0x00020000 , 0x20000080 ,
0x20820080 , 0x00020080 , 0x20000000 , 0x00000000 , 0x00820000 ,
0x20800080 , 0x20020080 , 0x20020000 , 0x00800080 , 0x20820000 ,
0x00000080 , 0x00800080 , 0x20020000 , 0x20820080 , 0x00800000 ,
0x20800000 , 0x20000080 , 0x00820000 , 0x00020080 , 0x20020080 ,
0x20800000 , 0x00000080 , 0x20820000 , 0x00820080 , 0x00000000 ,
0x20000000 , 0x20800080 , 0x00020000 , 0x00820080 , } } ;
# define HPERM_OP(a, t, n, m) \
( ( t ) = ( ( ( ( a ) < < ( 16 - ( n ) ) ) ^ ( a ) ) & ( m ) ) , \
@ -308,43 +308,43 @@ void DES_set_key(const DES_cblock *key, DES_key_schedule *schedule) {
// do PC1 in 47 simple operations :-)
// Thanks to John Fletcher (john_fletcher@lccmail.ocf.llnl.gov)
// for the inspiration. :-)
PERM_OP ( d , c , t , 4 , 0x0f0f0f0fL ) ;
HPERM_OP ( c , t , - 2 , 0xcccc0000L ) ;
HPERM_OP ( d , t , - 2 , 0xcccc0000L ) ;
PERM_OP ( d , c , t , 1 , 0x55555555L ) ;
PERM_OP ( c , d , t , 8 , 0x00ff00ffL ) ;
PERM_OP ( d , c , t , 1 , 0x55555555L ) ;
d = ( ( ( d & 0x000000ffL ) < < 16L ) | ( d & 0x0000ff00L ) |
( ( d & 0x00ff0000L ) > > 16L ) | ( ( c & 0xf0000000L ) > > 4L ) ) ;
c & = 0x0fffffffL ;
PERM_OP ( d , c , t , 4 , 0x0f0f0f0f ) ;
HPERM_OP ( c , t , - 2 , 0xcccc0000 ) ;
HPERM_OP ( d , t , - 2 , 0xcccc0000 ) ;
PERM_OP ( d , c , t , 1 , 0x55555555 ) ;
PERM_OP ( c , d , t , 8 , 0x00ff00ff ) ;
PERM_OP ( d , c , t , 1 , 0x55555555 ) ;
d = ( ( ( d & 0x000000ff ) < < 16 ) | ( d & 0x0000ff00 ) |
( ( d & 0x00ff0000 ) > > 16 ) | ( ( c & 0xf0000000 ) > > 4 ) ) ;
c & = 0x0fffffff ;
for ( i = 0 ; i < ITERATIONS ; i + + ) {
if ( shifts2 [ i ] ) {
c = ( ( c > > 2L ) | ( c < < 26L ) ) ;
d = ( ( d > > 2L ) | ( d < < 26L ) ) ;
c = ( ( c > > 2 ) | ( c < < 26 ) ) ;
d = ( ( d > > 2 ) | ( d < < 26 ) ) ;
} else {
c = ( ( c > > 1L ) | ( c < < 27L ) ) ;
d = ( ( d > > 1L ) | ( d < < 27L ) ) ;
c = ( ( c > > 1 ) | ( c < < 27 ) ) ;
d = ( ( d > > 1 ) | ( d < < 27 ) ) ;
}
c & = 0x0fffffffL ;
d & = 0x0fffffffL ;
c & = 0x0fffffff ;
d & = 0x0fffffff ;
// could be a few less shifts but I am to lazy at this
// point in time to investigate
s = des_skb [ 0 ] [ ( c ) & 0x3f ] |
des_skb [ 1 ] [ ( ( c > > 6L ) & 0x03 ) | ( ( c > > 7L ) & 0x3c ) ] |
des_skb [ 2 ] [ ( ( c > > 13L ) & 0x0f ) | ( ( c > > 14L ) & 0x30 ) ] |
des_skb [ 3 ] [ ( ( c > > 20L ) & 0x01 ) | ( ( c > > 21L ) & 0x06 ) |
( ( c > > 22L ) & 0x38 ) ] ;
des_skb [ 1 ] [ ( ( c > > 6 ) & 0x03 ) | ( ( c > > 7 ) & 0x3c ) ] |
des_skb [ 2 ] [ ( ( c > > 13 ) & 0x0f ) | ( ( c > > 14 ) & 0x30 ) ] |
des_skb [ 3 ] [ ( ( c > > 20 ) & 0x01 ) | ( ( c > > 21 ) & 0x06 ) |
( ( c > > 22 ) & 0x38 ) ] ;
t = des_skb [ 4 ] [ ( d ) & 0x3f ] |
des_skb [ 5 ] [ ( ( d > > 7L ) & 0x03 ) | ( ( d > > 8L ) & 0x3c ) ] |
des_skb [ 6 ] [ ( d > > 15L ) & 0x3f ] |
des_skb [ 7 ] [ ( ( d > > 21L ) & 0x0f ) | ( ( d > > 22L ) & 0x30 ) ] ;
des_skb [ 5 ] [ ( ( d > > 7 ) & 0x03 ) | ( ( d > > 8 ) & 0x3c ) ] |
des_skb [ 6 ] [ ( d > > 15 ) & 0x3f ] |
des_skb [ 7 ] [ ( ( d > > 21 ) & 0x0f ) | ( ( d > > 22 ) & 0x30 ) ] ;
// table contained 0213 4657
t2 = ( ( t < < 16L ) | ( s & 0x0000ffffL ) ) & 0xffffffffL ;
t2 = ( ( t < < 16 ) | ( s & 0x0000ffff ) ) & 0xffffffff ;
schedule - > subkeys [ i ] [ 0 ] = CRYPTO_rotr_u32 ( t2 , 30 ) ;
t2 = ( ( s > > 16L ) | ( t & 0xffff0000L ) ) ;
t2 = ( ( s > > 16 ) | ( t & 0xffff0000 ) ) ;
schedule - > subkeys [ i ] [ 1 ] = CRYPTO_rotr_u32 ( t2 , 26 ) ;
}
}