Creates the key schedule.
759 if (isset($this->kl[
'key']) && $this->key === $this->kl[
'key'] && $this->des_rounds === $this->kl[
'des_rounds']) {
763 $this->kl = array(
'key' => $this->key,
'des_rounds' => $this->des_rounds);
765 static $shifts = array(
766 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1
769 static $pc1map = array(
770 0x00, 0x00, 0x08, 0x08, 0x04, 0x04, 0x0C, 0x0C,
771 0x02, 0x02, 0x0A, 0x0A, 0x06, 0x06, 0x0E, 0x0E,
772 0x10, 0x10, 0x18, 0x18, 0x14, 0x14, 0x1C, 0x1C,
773 0x12, 0x12, 0x1A, 0x1A, 0x16, 0x16, 0x1E, 0x1E,
774 0x20, 0x20, 0x28, 0x28, 0x24, 0x24, 0x2C, 0x2C,
775 0x22, 0x22, 0x2A, 0x2A, 0x26, 0x26, 0x2E, 0x2E,
776 0x30, 0x30, 0x38, 0x38, 0x34, 0x34, 0x3C, 0x3C,
777 0x32, 0x32, 0x3A, 0x3A, 0x36, 0x36, 0x3E, 0x3E,
778 0x40, 0x40, 0x48, 0x48, 0x44, 0x44, 0x4C, 0x4C,
779 0x42, 0x42, 0x4A, 0x4A, 0x46, 0x46, 0x4E, 0x4E,
780 0x50, 0x50, 0x58, 0x58, 0x54, 0x54, 0x5C, 0x5C,
781 0x52, 0x52, 0x5A, 0x5A, 0x56, 0x56, 0x5E, 0x5E,
782 0x60, 0x60, 0x68, 0x68, 0x64, 0x64, 0x6C, 0x6C,
783 0x62, 0x62, 0x6A, 0x6A, 0x66, 0x66, 0x6E, 0x6E,
784 0x70, 0x70, 0x78, 0x78, 0x74, 0x74, 0x7C, 0x7C,
785 0x72, 0x72, 0x7A, 0x7A, 0x76, 0x76, 0x7E, 0x7E,
786 0x80, 0x80, 0x88, 0x88, 0x84, 0x84, 0x8C, 0x8C,
787 0x82, 0x82, 0x8A, 0x8A, 0x86, 0x86, 0x8E, 0x8E,
788 0x90, 0x90, 0x98, 0x98, 0x94, 0x94, 0x9C, 0x9C,
789 0x92, 0x92, 0x9A, 0x9A, 0x96, 0x96, 0x9E, 0x9E,
790 0xA0, 0xA0, 0xA8, 0xA8, 0xA4, 0xA4, 0xAC, 0xAC,
791 0xA2, 0xA2, 0xAA, 0xAA, 0xA6, 0xA6, 0xAE, 0xAE,
792 0xB0, 0xB0, 0xB8, 0xB8, 0xB4, 0xB4, 0xBC, 0xBC,
793 0xB2, 0xB2, 0xBA, 0xBA, 0xB6, 0xB6, 0xBE, 0xBE,
794 0xC0, 0xC0, 0xC8, 0xC8, 0xC4, 0xC4, 0xCC, 0xCC,
795 0xC2, 0xC2, 0xCA, 0xCA, 0xC6, 0xC6, 0xCE, 0xCE,
796 0xD0, 0xD0, 0xD8, 0xD8, 0xD4, 0xD4, 0xDC, 0xDC,
797 0xD2, 0xD2, 0xDA, 0xDA, 0xD6, 0xD6, 0xDE, 0xDE,
798 0xE0, 0xE0, 0xE8, 0xE8, 0xE4, 0xE4, 0xEC, 0xEC,
799 0xE2, 0xE2, 0xEA, 0xEA, 0xE6, 0xE6, 0xEE, 0xEE,
800 0xF0, 0xF0, 0xF8, 0xF8, 0xF4, 0xF4, 0xFC, 0xFC,
801 0xF2, 0xF2, 0xFA, 0xFA, 0xF6, 0xF6, 0xFE, 0xFE
805 static $pc2mapc1 = array(
806 0x00000000, 0x00000400, 0x00200000, 0x00200400,
807 0x00000001, 0x00000401, 0x00200001, 0x00200401,
808 0x02000000, 0x02000400, 0x02200000, 0x02200400,
809 0x02000001, 0x02000401, 0x02200001, 0x02200401
811 static $pc2mapc2 = array(
812 0x00000000, 0x00000800, 0x08000000, 0x08000800,
813 0x00010000, 0x00010800, 0x08010000, 0x08010800,
814 0x00000000, 0x00000800, 0x08000000, 0x08000800,
815 0x00010000, 0x00010800, 0x08010000, 0x08010800,
816 0x00000100, 0x00000900, 0x08000100, 0x08000900,
817 0x00010100, 0x00010900, 0x08010100, 0x08010900,
818 0x00000100, 0x00000900, 0x08000100, 0x08000900,
819 0x00010100, 0x00010900, 0x08010100, 0x08010900,
820 0x00000010, 0x00000810, 0x08000010, 0x08000810,
821 0x00010010, 0x00010810, 0x08010010, 0x08010810,
822 0x00000010, 0x00000810, 0x08000010, 0x08000810,
823 0x00010010, 0x00010810, 0x08010010, 0x08010810,
824 0x00000110, 0x00000910, 0x08000110, 0x08000910,
825 0x00010110, 0x00010910, 0x08010110, 0x08010910,
826 0x00000110, 0x00000910, 0x08000110, 0x08000910,
827 0x00010110, 0x00010910, 0x08010110, 0x08010910,
828 0x00040000, 0x00040800, 0x08040000, 0x08040800,
829 0x00050000, 0x00050800, 0x08050000, 0x08050800,
830 0x00040000, 0x00040800, 0x08040000, 0x08040800,
831 0x00050000, 0x00050800, 0x08050000, 0x08050800,
832 0x00040100, 0x00040900, 0x08040100, 0x08040900,
833 0x00050100, 0x00050900, 0x08050100, 0x08050900,
834 0x00040100, 0x00040900, 0x08040100, 0x08040900,
835 0x00050100, 0x00050900, 0x08050100, 0x08050900,
836 0x00040010, 0x00040810, 0x08040010, 0x08040810,
837 0x00050010, 0x00050810, 0x08050010, 0x08050810,
838 0x00040010, 0x00040810, 0x08040010, 0x08040810,
839 0x00050010, 0x00050810, 0x08050010, 0x08050810,
840 0x00040110, 0x00040910, 0x08040110, 0x08040910,
841 0x00050110, 0x00050910, 0x08050110, 0x08050910,
842 0x00040110, 0x00040910, 0x08040110, 0x08040910,
843 0x00050110, 0x00050910, 0x08050110, 0x08050910,
844 0x01000000, 0x01000800, 0x09000000, 0x09000800,
845 0x01010000, 0x01010800, 0x09010000, 0x09010800,
846 0x01000000, 0x01000800, 0x09000000, 0x09000800,
847 0x01010000, 0x01010800, 0x09010000, 0x09010800,
848 0x01000100, 0x01000900, 0x09000100, 0x09000900,
849 0x01010100, 0x01010900, 0x09010100, 0x09010900,
850 0x01000100, 0x01000900, 0x09000100, 0x09000900,
851 0x01010100, 0x01010900, 0x09010100, 0x09010900,
852 0x01000010, 0x01000810, 0x09000010, 0x09000810,
853 0x01010010, 0x01010810, 0x09010010, 0x09010810,
854 0x01000010, 0x01000810, 0x09000010, 0x09000810,
855 0x01010010, 0x01010810, 0x09010010, 0x09010810,
856 0x01000110, 0x01000910, 0x09000110, 0x09000910,
857 0x01010110, 0x01010910, 0x09010110, 0x09010910,
858 0x01000110, 0x01000910, 0x09000110, 0x09000910,
859 0x01010110, 0x01010910, 0x09010110, 0x09010910,
860 0x01040000, 0x01040800, 0x09040000, 0x09040800,
861 0x01050000, 0x01050800, 0x09050000, 0x09050800,
862 0x01040000, 0x01040800, 0x09040000, 0x09040800,
863 0x01050000, 0x01050800, 0x09050000, 0x09050800,
864 0x01040100, 0x01040900, 0x09040100, 0x09040900,
865 0x01050100, 0x01050900, 0x09050100, 0x09050900,
866 0x01040100, 0x01040900, 0x09040100, 0x09040900,
867 0x01050100, 0x01050900, 0x09050100, 0x09050900,
868 0x01040010, 0x01040810, 0x09040010, 0x09040810,
869 0x01050010, 0x01050810, 0x09050010, 0x09050810,
870 0x01040010, 0x01040810, 0x09040010, 0x09040810,
871 0x01050010, 0x01050810, 0x09050010, 0x09050810,
872 0x01040110, 0x01040910, 0x09040110, 0x09040910,
873 0x01050110, 0x01050910, 0x09050110, 0x09050910,
874 0x01040110, 0x01040910, 0x09040110, 0x09040910,
875 0x01050110, 0x01050910, 0x09050110, 0x09050910
877 static $pc2mapc3 = array(
878 0x00000000, 0x00000004, 0x00001000, 0x00001004,
879 0x00000000, 0x00000004, 0x00001000, 0x00001004,
880 0x10000000, 0x10000004, 0x10001000, 0x10001004,
881 0x10000000, 0x10000004, 0x10001000, 0x10001004,
882 0x00000020, 0x00000024, 0x00001020, 0x00001024,
883 0x00000020, 0x00000024, 0x00001020, 0x00001024,
884 0x10000020, 0x10000024, 0x10001020, 0x10001024,
885 0x10000020, 0x10000024, 0x10001020, 0x10001024,
886 0x00080000, 0x00080004, 0x00081000, 0x00081004,
887 0x00080000, 0x00080004, 0x00081000, 0x00081004,
888 0x10080000, 0x10080004, 0x10081000, 0x10081004,
889 0x10080000, 0x10080004, 0x10081000, 0x10081004,
890 0x00080020, 0x00080024, 0x00081020, 0x00081024,
891 0x00080020, 0x00080024, 0x00081020, 0x00081024,
892 0x10080020, 0x10080024, 0x10081020, 0x10081024,
893 0x10080020, 0x10080024, 0x10081020, 0x10081024,
894 0x20000000, 0x20000004, 0x20001000, 0x20001004,
895 0x20000000, 0x20000004, 0x20001000, 0x20001004,
896 0x30000000, 0x30000004, 0x30001000, 0x30001004,
897 0x30000000, 0x30000004, 0x30001000, 0x30001004,
898 0x20000020, 0x20000024, 0x20001020, 0x20001024,
899 0x20000020, 0x20000024, 0x20001020, 0x20001024,
900 0x30000020, 0x30000024, 0x30001020, 0x30001024,
901 0x30000020, 0x30000024, 0x30001020, 0x30001024,
902 0x20080000, 0x20080004, 0x20081000, 0x20081004,
903 0x20080000, 0x20080004, 0x20081000, 0x20081004,
904 0x30080000, 0x30080004, 0x30081000, 0x30081004,
905 0x30080000, 0x30080004, 0x30081000, 0x30081004,
906 0x20080020, 0x20080024, 0x20081020, 0x20081024,
907 0x20080020, 0x20080024, 0x20081020, 0x20081024,
908 0x30080020, 0x30080024, 0x30081020, 0x30081024,
909 0x30080020, 0x30080024, 0x30081020, 0x30081024,
910 0x00000002, 0x00000006, 0x00001002, 0x00001006,
911 0x00000002, 0x00000006, 0x00001002, 0x00001006,
912 0x10000002, 0x10000006, 0x10001002, 0x10001006,
913 0x10000002, 0x10000006, 0x10001002, 0x10001006,
914 0x00000022, 0x00000026, 0x00001022, 0x00001026,
915 0x00000022, 0x00000026, 0x00001022, 0x00001026,
916 0x10000022, 0x10000026, 0x10001022, 0x10001026,
917 0x10000022, 0x10000026, 0x10001022, 0x10001026,
918 0x00080002, 0x00080006, 0x00081002, 0x00081006,
919 0x00080002, 0x00080006, 0x00081002, 0x00081006,
920 0x10080002, 0x10080006, 0x10081002, 0x10081006,
921 0x10080002, 0x10080006, 0x10081002, 0x10081006,
922 0x00080022, 0x00080026, 0x00081022, 0x00081026,
923 0x00080022, 0x00080026, 0x00081022, 0x00081026,
924 0x10080022, 0x10080026, 0x10081022, 0x10081026,
925 0x10080022, 0x10080026, 0x10081022, 0x10081026,
926 0x20000002, 0x20000006, 0x20001002, 0x20001006,
927 0x20000002, 0x20000006, 0x20001002, 0x20001006,
928 0x30000002, 0x30000006, 0x30001002, 0x30001006,
929 0x30000002, 0x30000006, 0x30001002, 0x30001006,
930 0x20000022, 0x20000026, 0x20001022, 0x20001026,
931 0x20000022, 0x20000026, 0x20001022, 0x20001026,
932 0x30000022, 0x30000026, 0x30001022, 0x30001026,
933 0x30000022, 0x30000026, 0x30001022, 0x30001026,
934 0x20080002, 0x20080006, 0x20081002, 0x20081006,
935 0x20080002, 0x20080006, 0x20081002, 0x20081006,
936 0x30080002, 0x30080006, 0x30081002, 0x30081006,
937 0x30080002, 0x30080006, 0x30081002, 0x30081006,
938 0x20080022, 0x20080026, 0x20081022, 0x20081026,
939 0x20080022, 0x20080026, 0x20081022, 0x20081026,
940 0x30080022, 0x30080026, 0x30081022, 0x30081026,
941 0x30080022, 0x30080026, 0x30081022, 0x30081026
943 static $pc2mapc4 = array(
944 0x00000000, 0x00100000, 0x00000008, 0x00100008,
945 0x00000200, 0x00100200, 0x00000208, 0x00100208,
946 0x00000000, 0x00100000, 0x00000008, 0x00100008,
947 0x00000200, 0x00100200, 0x00000208, 0x00100208,
948 0x04000000, 0x04100000, 0x04000008, 0x04100008,
949 0x04000200, 0x04100200, 0x04000208, 0x04100208,
950 0x04000000, 0x04100000, 0x04000008, 0x04100008,
951 0x04000200, 0x04100200, 0x04000208, 0x04100208,
952 0x00002000, 0x00102000, 0x00002008, 0x00102008,
953 0x00002200, 0x00102200, 0x00002208, 0x00102208,
954 0x00002000, 0x00102000, 0x00002008, 0x00102008,
955 0x00002200, 0x00102200, 0x00002208, 0x00102208,
956 0x04002000, 0x04102000, 0x04002008, 0x04102008,
957 0x04002200, 0x04102200, 0x04002208, 0x04102208,
958 0x04002000, 0x04102000, 0x04002008, 0x04102008,
959 0x04002200, 0x04102200, 0x04002208, 0x04102208,
960 0x00000000, 0x00100000, 0x00000008, 0x00100008,
961 0x00000200, 0x00100200, 0x00000208, 0x00100208,
962 0x00000000, 0x00100000, 0x00000008, 0x00100008,
963 0x00000200, 0x00100200, 0x00000208, 0x00100208,
964 0x04000000, 0x04100000, 0x04000008, 0x04100008,
965 0x04000200, 0x04100200, 0x04000208, 0x04100208,
966 0x04000000, 0x04100000, 0x04000008, 0x04100008,
967 0x04000200, 0x04100200, 0x04000208, 0x04100208,
968 0x00002000, 0x00102000, 0x00002008, 0x00102008,
969 0x00002200, 0x00102200, 0x00002208, 0x00102208,
970 0x00002000, 0x00102000, 0x00002008, 0x00102008,
971 0x00002200, 0x00102200, 0x00002208, 0x00102208,
972 0x04002000, 0x04102000, 0x04002008, 0x04102008,
973 0x04002200, 0x04102200, 0x04002208, 0x04102208,
974 0x04002000, 0x04102000, 0x04002008, 0x04102008,
975 0x04002200, 0x04102200, 0x04002208, 0x04102208,
976 0x00020000, 0x00120000, 0x00020008, 0x00120008,
977 0x00020200, 0x00120200, 0x00020208, 0x00120208,
978 0x00020000, 0x00120000, 0x00020008, 0x00120008,
979 0x00020200, 0x00120200, 0x00020208, 0x00120208,
980 0x04020000, 0x04120000, 0x04020008, 0x04120008,
981 0x04020200, 0x04120200, 0x04020208, 0x04120208,
982 0x04020000, 0x04120000, 0x04020008, 0x04120008,
983 0x04020200, 0x04120200, 0x04020208, 0x04120208,
984 0x00022000, 0x00122000, 0x00022008, 0x00122008,
985 0x00022200, 0x00122200, 0x00022208, 0x00122208,
986 0x00022000, 0x00122000, 0x00022008, 0x00122008,
987 0x00022200, 0x00122200, 0x00022208, 0x00122208,
988 0x04022000, 0x04122000, 0x04022008, 0x04122008,
989 0x04022200, 0x04122200, 0x04022208, 0x04122208,
990 0x04022000, 0x04122000, 0x04022008, 0x04122008,
991 0x04022200, 0x04122200, 0x04022208, 0x04122208,
992 0x00020000, 0x00120000, 0x00020008, 0x00120008,
993 0x00020200, 0x00120200, 0x00020208, 0x00120208,
994 0x00020000, 0x00120000, 0x00020008, 0x00120008,
995 0x00020200, 0x00120200, 0x00020208, 0x00120208,
996 0x04020000, 0x04120000, 0x04020008, 0x04120008,
997 0x04020200, 0x04120200, 0x04020208, 0x04120208,
998 0x04020000, 0x04120000, 0x04020008, 0x04120008,
999 0x04020200, 0x04120200, 0x04020208, 0x04120208,
1000 0x00022000, 0x00122000, 0x00022008, 0x00122008,
1001 0x00022200, 0x00122200, 0x00022208, 0x00122208,
1002 0x00022000, 0x00122000, 0x00022008, 0x00122008,
1003 0x00022200, 0x00122200, 0x00022208, 0x00122208,
1004 0x04022000, 0x04122000, 0x04022008, 0x04122008,
1005 0x04022200, 0x04122200, 0x04022208, 0x04122208,
1006 0x04022000, 0x04122000, 0x04022008, 0x04122008,
1007 0x04022200, 0x04122200, 0x04022208, 0x04122208
1009 static $pc2mapd1 = array(
1010 0x00000000, 0x00000001, 0x08000000, 0x08000001,
1011 0x00200000, 0x00200001, 0x08200000, 0x08200001,
1012 0x00000002, 0x00000003, 0x08000002, 0x08000003,
1013 0x00200002, 0x00200003, 0x08200002, 0x08200003
1015 static $pc2mapd2 = array(
1016 0x00000000, 0x00100000, 0x00000800, 0x00100800,
1017 0x00000000, 0x00100000, 0x00000800, 0x00100800,
1018 0x04000000, 0x04100000, 0x04000800, 0x04100800,
1019 0x04000000, 0x04100000, 0x04000800, 0x04100800,
1020 0x00000004, 0x00100004, 0x00000804, 0x00100804,
1021 0x00000004, 0x00100004, 0x00000804, 0x00100804,
1022 0x04000004, 0x04100004, 0x04000804, 0x04100804,
1023 0x04000004, 0x04100004, 0x04000804, 0x04100804,
1024 0x00000000, 0x00100000, 0x00000800, 0x00100800,
1025 0x00000000, 0x00100000, 0x00000800, 0x00100800,
1026 0x04000000, 0x04100000, 0x04000800, 0x04100800,
1027 0x04000000, 0x04100000, 0x04000800, 0x04100800,
1028 0x00000004, 0x00100004, 0x00000804, 0x00100804,
1029 0x00000004, 0x00100004, 0x00000804, 0x00100804,
1030 0x04000004, 0x04100004, 0x04000804, 0x04100804,
1031 0x04000004, 0x04100004, 0x04000804, 0x04100804,
1032 0x00000200, 0x00100200, 0x00000A00, 0x00100A00,
1033 0x00000200, 0x00100200, 0x00000A00, 0x00100A00,
1034 0x04000200, 0x04100200, 0x04000A00, 0x04100A00,
1035 0x04000200, 0x04100200, 0x04000A00, 0x04100A00,
1036 0x00000204, 0x00100204, 0x00000A04, 0x00100A04,
1037 0x00000204, 0x00100204, 0x00000A04, 0x00100A04,
1038 0x04000204, 0x04100204, 0x04000A04, 0x04100A04,
1039 0x04000204, 0x04100204, 0x04000A04, 0x04100A04,
1040 0x00000200, 0x00100200, 0x00000A00, 0x00100A00,
1041 0x00000200, 0x00100200, 0x00000A00, 0x00100A00,
1042 0x04000200, 0x04100200, 0x04000A00, 0x04100A00,
1043 0x04000200, 0x04100200, 0x04000A00, 0x04100A00,
1044 0x00000204, 0x00100204, 0x00000A04, 0x00100A04,
1045 0x00000204, 0x00100204, 0x00000A04, 0x00100A04,
1046 0x04000204, 0x04100204, 0x04000A04, 0x04100A04,
1047 0x04000204, 0x04100204, 0x04000A04, 0x04100A04,
1048 0x00020000, 0x00120000, 0x00020800, 0x00120800,
1049 0x00020000, 0x00120000, 0x00020800, 0x00120800,
1050 0x04020000, 0x04120000, 0x04020800, 0x04120800,
1051 0x04020000, 0x04120000, 0x04020800, 0x04120800,
1052 0x00020004, 0x00120004, 0x00020804, 0x00120804,
1053 0x00020004, 0x00120004, 0x00020804, 0x00120804,
1054 0x04020004, 0x04120004, 0x04020804, 0x04120804,
1055 0x04020004, 0x04120004, 0x04020804, 0x04120804,
1056 0x00020000, 0x00120000, 0x00020800, 0x00120800,
1057 0x00020000, 0x00120000, 0x00020800, 0x00120800,
1058 0x04020000, 0x04120000, 0x04020800, 0x04120800,
1059 0x04020000, 0x04120000, 0x04020800, 0x04120800,
1060 0x00020004, 0x00120004, 0x00020804, 0x00120804,
1061 0x00020004, 0x00120004, 0x00020804, 0x00120804,
1062 0x04020004, 0x04120004, 0x04020804, 0x04120804,
1063 0x04020004, 0x04120004, 0x04020804, 0x04120804,
1064 0x00020200, 0x00120200, 0x00020A00, 0x00120A00,
1065 0x00020200, 0x00120200, 0x00020A00, 0x00120A00,
1066 0x04020200, 0x04120200, 0x04020A00, 0x04120A00,
1067 0x04020200, 0x04120200, 0x04020A00, 0x04120A00,
1068 0x00020204, 0x00120204, 0x00020A04, 0x00120A04,
1069 0x00020204, 0x00120204, 0x00020A04, 0x00120A04,
1070 0x04020204, 0x04120204, 0x04020A04, 0x04120A04,
1071 0x04020204, 0x04120204, 0x04020A04, 0x04120A04,
1072 0x00020200, 0x00120200, 0x00020A00, 0x00120A00,
1073 0x00020200, 0x00120200, 0x00020A00, 0x00120A00,
1074 0x04020200, 0x04120200, 0x04020A00, 0x04120A00,
1075 0x04020200, 0x04120200, 0x04020A00, 0x04120A00,
1076 0x00020204, 0x00120204, 0x00020A04, 0x00120A04,
1077 0x00020204, 0x00120204, 0x00020A04, 0x00120A04,
1078 0x04020204, 0x04120204, 0x04020A04, 0x04120A04,
1079 0x04020204, 0x04120204, 0x04020A04, 0x04120A04
1081 static $pc2mapd3 = array(
1082 0x00000000, 0x00010000, 0x02000000, 0x02010000,
1083 0x00000020, 0x00010020, 0x02000020, 0x02010020,
1084 0x00040000, 0x00050000, 0x02040000, 0x02050000,
1085 0x00040020, 0x00050020, 0x02040020, 0x02050020,
1086 0x00002000, 0x00012000, 0x02002000, 0x02012000,
1087 0x00002020, 0x00012020, 0x02002020, 0x02012020,
1088 0x00042000, 0x00052000, 0x02042000, 0x02052000,
1089 0x00042020, 0x00052020, 0x02042020, 0x02052020,
1090 0x00000000, 0x00010000, 0x02000000, 0x02010000,
1091 0x00000020, 0x00010020, 0x02000020, 0x02010020,
1092 0x00040000, 0x00050000, 0x02040000, 0x02050000,
1093 0x00040020, 0x00050020, 0x02040020, 0x02050020,
1094 0x00002000, 0x00012000, 0x02002000, 0x02012000,
1095 0x00002020, 0x00012020, 0x02002020, 0x02012020,
1096 0x00042000, 0x00052000, 0x02042000, 0x02052000,
1097 0x00042020, 0x00052020, 0x02042020, 0x02052020,
1098 0x00000010, 0x00010010, 0x02000010, 0x02010010,
1099 0x00000030, 0x00010030, 0x02000030, 0x02010030,
1100 0x00040010, 0x00050010, 0x02040010, 0x02050010,
1101 0x00040030, 0x00050030, 0x02040030, 0x02050030,
1102 0x00002010, 0x00012010, 0x02002010, 0x02012010,
1103 0x00002030, 0x00012030, 0x02002030, 0x02012030,
1104 0x00042010, 0x00052010, 0x02042010, 0x02052010,
1105 0x00042030, 0x00052030, 0x02042030, 0x02052030,
1106 0x00000010, 0x00010010, 0x02000010, 0x02010010,
1107 0x00000030, 0x00010030, 0x02000030, 0x02010030,
1108 0x00040010, 0x00050010, 0x02040010, 0x02050010,
1109 0x00040030, 0x00050030, 0x02040030, 0x02050030,
1110 0x00002010, 0x00012010, 0x02002010, 0x02012010,
1111 0x00002030, 0x00012030, 0x02002030, 0x02012030,
1112 0x00042010, 0x00052010, 0x02042010, 0x02052010,
1113 0x00042030, 0x00052030, 0x02042030, 0x02052030,
1114 0x20000000, 0x20010000, 0x22000000, 0x22010000,
1115 0x20000020, 0x20010020, 0x22000020, 0x22010020,
1116 0x20040000, 0x20050000, 0x22040000, 0x22050000,
1117 0x20040020, 0x20050020, 0x22040020, 0x22050020,
1118 0x20002000, 0x20012000, 0x22002000, 0x22012000,
1119 0x20002020, 0x20012020, 0x22002020, 0x22012020,
1120 0x20042000, 0x20052000, 0x22042000, 0x22052000,
1121 0x20042020, 0x20052020, 0x22042020, 0x22052020,
1122 0x20000000, 0x20010000, 0x22000000, 0x22010000,
1123 0x20000020, 0x20010020, 0x22000020, 0x22010020,
1124 0x20040000, 0x20050000, 0x22040000, 0x22050000,
1125 0x20040020, 0x20050020, 0x22040020, 0x22050020,
1126 0x20002000, 0x20012000, 0x22002000, 0x22012000,
1127 0x20002020, 0x20012020, 0x22002020, 0x22012020,
1128 0x20042000, 0x20052000, 0x22042000, 0x22052000,
1129 0x20042020, 0x20052020, 0x22042020, 0x22052020,
1130 0x20000010, 0x20010010, 0x22000010, 0x22010010,
1131 0x20000030, 0x20010030, 0x22000030, 0x22010030,
1132 0x20040010, 0x20050010, 0x22040010, 0x22050010,
1133 0x20040030, 0x20050030, 0x22040030, 0x22050030,
1134 0x20002010, 0x20012010, 0x22002010, 0x22012010,
1135 0x20002030, 0x20012030, 0x22002030, 0x22012030,
1136 0x20042010, 0x20052010, 0x22042010, 0x22052010,
1137 0x20042030, 0x20052030, 0x22042030, 0x22052030,
1138 0x20000010, 0x20010010, 0x22000010, 0x22010010,
1139 0x20000030, 0x20010030, 0x22000030, 0x22010030,
1140 0x20040010, 0x20050010, 0x22040010, 0x22050010,
1141 0x20040030, 0x20050030, 0x22040030, 0x22050030,
1142 0x20002010, 0x20012010, 0x22002010, 0x22012010,
1143 0x20002030, 0x20012030, 0x22002030, 0x22012030,
1144 0x20042010, 0x20052010, 0x22042010, 0x22052010,
1145 0x20042030, 0x20052030, 0x22042030, 0x22052030
1147 static $pc2mapd4 = array(
1148 0x00000000, 0x00000400, 0x01000000, 0x01000400,
1149 0x00000000, 0x00000400, 0x01000000, 0x01000400,
1150 0x00000100, 0x00000500, 0x01000100, 0x01000500,
1151 0x00000100, 0x00000500, 0x01000100, 0x01000500,
1152 0x10000000, 0x10000400, 0x11000000, 0x11000400,
1153 0x10000000, 0x10000400, 0x11000000, 0x11000400,
1154 0x10000100, 0x10000500, 0x11000100, 0x11000500,
1155 0x10000100, 0x10000500, 0x11000100, 0x11000500,
1156 0x00080000, 0x00080400, 0x01080000, 0x01080400,
1157 0x00080000, 0x00080400, 0x01080000, 0x01080400,
1158 0x00080100, 0x00080500, 0x01080100, 0x01080500,
1159 0x00080100, 0x00080500, 0x01080100, 0x01080500,
1160 0x10080000, 0x10080400, 0x11080000, 0x11080400,
1161 0x10080000, 0x10080400, 0x11080000, 0x11080400,
1162 0x10080100, 0x10080500, 0x11080100, 0x11080500,
1163 0x10080100, 0x10080500, 0x11080100, 0x11080500,
1164 0x00000008, 0x00000408, 0x01000008, 0x01000408,
1165 0x00000008, 0x00000408, 0x01000008, 0x01000408,
1166 0x00000108, 0x00000508, 0x01000108, 0x01000508,
1167 0x00000108, 0x00000508, 0x01000108, 0x01000508,
1168 0x10000008, 0x10000408, 0x11000008, 0x11000408,
1169 0x10000008, 0x10000408, 0x11000008, 0x11000408,
1170 0x10000108, 0x10000508, 0x11000108, 0x11000508,
1171 0x10000108, 0x10000508, 0x11000108, 0x11000508,
1172 0x00080008, 0x00080408, 0x01080008, 0x01080408,
1173 0x00080008, 0x00080408, 0x01080008, 0x01080408,
1174 0x00080108, 0x00080508, 0x01080108, 0x01080508,
1175 0x00080108, 0x00080508, 0x01080108, 0x01080508,
1176 0x10080008, 0x10080408, 0x11080008, 0x11080408,
1177 0x10080008, 0x10080408, 0x11080008, 0x11080408,
1178 0x10080108, 0x10080508, 0x11080108, 0x11080508,
1179 0x10080108, 0x10080508, 0x11080108, 0x11080508,
1180 0x00001000, 0x00001400, 0x01001000, 0x01001400,
1181 0x00001000, 0x00001400, 0x01001000, 0x01001400,
1182 0x00001100, 0x00001500, 0x01001100, 0x01001500,
1183 0x00001100, 0x00001500, 0x01001100, 0x01001500,
1184 0x10001000, 0x10001400, 0x11001000, 0x11001400,
1185 0x10001000, 0x10001400, 0x11001000, 0x11001400,
1186 0x10001100, 0x10001500, 0x11001100, 0x11001500,
1187 0x10001100, 0x10001500, 0x11001100, 0x11001500,
1188 0x00081000, 0x00081400, 0x01081000, 0x01081400,
1189 0x00081000, 0x00081400, 0x01081000, 0x01081400,
1190 0x00081100, 0x00081500, 0x01081100, 0x01081500,
1191 0x00081100, 0x00081500, 0x01081100, 0x01081500,
1192 0x10081000, 0x10081400, 0x11081000, 0x11081400,
1193 0x10081000, 0x10081400, 0x11081000, 0x11081400,
1194 0x10081100, 0x10081500, 0x11081100, 0x11081500,
1195 0x10081100, 0x10081500, 0x11081100, 0x11081500,
1196 0x00001008, 0x00001408, 0x01001008, 0x01001408,
1197 0x00001008, 0x00001408, 0x01001008, 0x01001408,
1198 0x00001108, 0x00001508, 0x01001108, 0x01001508,
1199 0x00001108, 0x00001508, 0x01001108, 0x01001508,
1200 0x10001008, 0x10001408, 0x11001008, 0x11001408,
1201 0x10001008, 0x10001408, 0x11001008, 0x11001408,
1202 0x10001108, 0x10001508, 0x11001108, 0x11001508,
1203 0x10001108, 0x10001508, 0x11001108, 0x11001508,
1204 0x00081008, 0x00081408, 0x01081008, 0x01081408,
1205 0x00081008, 0x00081408, 0x01081008, 0x01081408,
1206 0x00081108, 0x00081508, 0x01081108, 0x01081508,
1207 0x00081108, 0x00081508, 0x01081108, 0x01081508,
1208 0x10081008, 0x10081408, 0x11081008, 0x11081408,
1209 0x10081008, 0x10081408, 0x11081008, 0x11081408,
1210 0x10081108, 0x10081508, 0x11081108, 0x11081508,
1211 0x10081108, 0x10081508, 0x11081108, 0x11081508
1217 $key = str_pad(substr($this->key, $des_round * 8, 8), 8,
"\0");
1220 $t = unpack(
'Nl/Nr',
$key);
1221 list(
$l,
$r) = array(
$t[
'l'],
$t[
'r']);
1222 $key = ($this->shuffle[$pc1map[
$r & 0xFF]] &
"\x80\x80\x80\x80\x80\x80\x80\x00") |
1223 ($this->shuffle[$pc1map[(
$r >> 8) & 0xFF]] &
"\x40\x40\x40\x40\x40\x40\x40\x00") |
1224 ($this->shuffle[$pc1map[(
$r >> 16) & 0xFF]] &
"\x20\x20\x20\x20\x20\x20\x20\x00") |
1225 ($this->shuffle[$pc1map[(
$r >> 24) & 0xFF]] &
"\x10\x10\x10\x10\x10\x10\x10\x00") |
1226 ($this->shuffle[$pc1map[
$l & 0xFF]] &
"\x08\x08\x08\x08\x08\x08\x08\x00") |
1227 ($this->shuffle[$pc1map[(
$l >> 8) & 0xFF]] &
"\x04\x04\x04\x04\x04\x04\x04\x00") |
1228 ($this->shuffle[$pc1map[(
$l >> 16) & 0xFF]] &
"\x02\x02\x02\x02\x02\x02\x02\x00") |
1229 ($this->shuffle[$pc1map[(
$l >> 24) & 0xFF]] &
"\x01\x01\x01\x01\x01\x01\x01\x00");
1231 $c = (
$key[
'c'] >> 4) & 0x0FFFFFFF;
1232 $d = ((
$key[
'd'] >> 4) & 0x0FFFFFF0) | (
$key[
'c'] & 0x0F);
1234 $keys[$des_round] = array(
1235 self::ENCRYPT => array(),
1236 self::DECRYPT => array_fill(0, 32, 0)
1238 for (
$i = 0, $ki = 31;
$i < 16; ++
$i, $ki-= 2) {
1240 $c = (
$c | (
$c >> 28)) & 0x0FFFFFFF;
1242 $d = (
$d | (
$d >> 28)) & 0x0FFFFFFF;
1245 $cp = $pc2mapc1[
$c >> 24 ] | $pc2mapc2[(
$c >> 16) & 0xFF] |
1246 $pc2mapc3[(
$c >> 8) & 0xFF] | $pc2mapc4[
$c & 0xFF];
1247 $dp = $pc2mapd1[
$d >> 24 ] | $pc2mapd2[(
$d >> 16) & 0xFF] |
1248 $pc2mapd3[(
$d >> 8) & 0xFF] | $pc2mapd4[
$d & 0xFF];
1251 $val1 = ( $cp & 0xFF000000) | (($cp << 8) & 0x00FF0000) |
1252 (($dp >> 16) & 0x0000FF00) | (($dp >> 8) & 0x000000FF);
1253 $val2 = (($cp << 8) & 0xFF000000) | (($cp << 16) & 0x00FF0000) |
1254 (($dp >> 8) & 0x0000FF00) | ( $dp & 0x000000FF);
1255 $keys[$des_round][self::ENCRYPT][ ] = $val1;
1256 $keys[$des_round][self::DECRYPT][$ki - 1] = $val1;
1257 $keys[$des_round][self::ENCRYPT][ ] = $val2;
1258 $keys[$des_round][self::DECRYPT][$ki ] = $val2;
1262 switch ($this->des_rounds) {
1264 $this->keys = array(
1265 self::ENCRYPT => array_merge(
1266 $keys[0][self::ENCRYPT],
1267 $keys[1][self::DECRYPT],
1268 $keys[2][self::ENCRYPT]
1270 self::DECRYPT => array_merge(
1271 $keys[2][self::DECRYPT],
1272 $keys[1][self::ENCRYPT],
1273 $keys[0][self::DECRYPT]
1279 $this->keys = array(
1280 self::ENCRYPT =>
$keys[0][self::ENCRYPT],
1281 self::DECRYPT =>
$keys[0][self::DECRYPT]
for($i=6; $i< 13; $i++) for($i=1; $i< 13; $i++) $d