コード例 #1
0
ファイル: Encryption.cs プロジェクト: soufflee/ClassicUO
        public static void CalculateEncryption(ClientVersion version)
        {
            if (version == ClientVersion.CV_200X)
            {
                KEY_1 = 0x2D13A5FC;
                KEY_2 = 0x2D13A5FD;
                KEY_3 = 0xA39D527F;

                Type = ENCRYPTION_TYPE.BLOWFISH__2_0_3;
            }
            else
            {
                int a = ((int)version >> 24) & 0xFF;
                int b = ((int)version >> 16) & 0xFF;
                int c = ((int)version >> 8) & 0xFF;

                int temp = ((((a << 9) | b) << 10) | c) ^ ((c * c) << 5);

                KEY_2 = (uint)((temp << 4) ^ (b * b) ^ (b * 0x0B000000) ^ (c * 0x380000) ^ 0x2C13A5FD);
                temp  = (((((a << 9) | c) << 10) | b) * 8) ^ (c * c * 0x0c00);
                KEY_3 = (uint)(temp ^ (b * b) ^ (b * 0x6800000) ^ (c * 0x1c0000) ^ 0x0A31D527F);
                KEY_1 = KEY_2 - 1;


                if (version < (ClientVersion)(((1 & 0xFF) << 24) |
                                              ((25 & 0xFF) << 16) |
                                              ((35 & 0xFF) << 8) |
                                              (0 & 0xFF)))
                {
                    Type = ENCRYPTION_TYPE.OLD_BFISH;
                }


                else if (version == (ClientVersion)(((1 & 0xFF) << 24) |
                                                    ((25 & 0xFF) << 16) |
                                                    ((36 & 0xFF) << 8) |
                                                    (0 & 0xFF)))
                {
                    Type = ENCRYPTION_TYPE.BLOWFISH__1_25_36;
                }


                else if (version <= ClientVersion.CV_200)
                {
                    Type = ENCRYPTION_TYPE.BLOWFISH;
                }

                else if (version <= (ClientVersion)(((2 & 0xFF) << 24) |
                                                    ((0 & 0xFF) << 16) |
                                                    ((3 & 0xFF) << 8) |
                                                    (0 & 0xFF)))
                {
                    Type = ENCRYPTION_TYPE.BLOWFISH__2_0_3;
                }
                else
                {
                    Type = ENCRYPTION_TYPE.TWOFISH_MD5;
                }
            }
        }
コード例 #2
0
        public static void Initialize(bool is_login, uint seed, ENCRYPTION_TYPE encryption)
        {
            if (encryption == ENCRYPTION_TYPE.NONE)
                return;

            if (is_login)
            {
                _loginCrypt.Initialize(seed, KEY_1, KEY_2, KEY_3);
            }
            else
            {
                if (encryption >= ENCRYPTION_TYPE.OLD_BFISH && encryption < ENCRYPTION_TYPE.TWOFISH_MD5)
                {
                    _blowfishEncryption.Initialize();
                }

                if (encryption == ENCRYPTION_TYPE.BLOWFISH__2_0_3 || encryption == ENCRYPTION_TYPE.TWOFISH_MD5)
                {
                    _twoFishBehaviour.Initialize(seed, encryption == ENCRYPTION_TYPE.TWOFISH_MD5);
                }
            }
        }