diff --git a/algo/qmc/cipher_rc4_test.go b/algo/qmc/cipher_rc4_test.go index c5f4a23..e874ec2 100644 --- a/algo/qmc/cipher_rc4_test.go +++ b/algo/qmc/cipher_rc4_test.go @@ -6,16 +6,17 @@ import ( "testing" ) -func loadTestRC4CipherData() ([]byte, []byte, []byte, error) { - key, err := os.ReadFile("./testdata/mflac0_rc4_key.bin") +func loadTestRC4CipherData(name string) ([]byte, []byte, []byte, error) { + prefix := "./testdata/" + name + key, err := os.ReadFile(prefix + "_key.bin") if err != nil { return nil, nil, nil, err } - raw, err := os.ReadFile("./testdata/mflac0_rc4_raw.bin") + raw, err := os.ReadFile(prefix + "_raw.bin") if err != nil { return nil, nil, nil, err } - target, err := os.ReadFile("./testdata/mflac0_rc4_target.bin") + target, err := os.ReadFile(prefix + "_target.bin") if err != nil { return nil, nil, nil, err } @@ -23,25 +24,34 @@ func loadTestRC4CipherData() ([]byte, []byte, []byte, error) { return key, raw, target, nil } func Test_rc4Cipher_Decrypt(t *testing.T) { - key, raw, target, err := loadTestRC4CipherData() - if err != nil { - t.Fatalf("load testing data failed: %s", err) + tests := []struct { + name string + wantErr bool + }{ + {"mflac0_rc4", false}, + {"mflac_rc4", false}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + key, raw, target, err := loadTestRC4CipherData(tt.name) + if err != nil { + t.Fatalf("load testing data failed: %s", err) + } + c, err := NewRC4Cipher(key) + if err != nil { + t.Errorf("init rc4Cipher failed: %s", err) + return + } + c.Decrypt(raw, 0) + if !reflect.DeepEqual(raw, target) { + t.Error("overall") + } + }) } - t.Run("overall", func(t *testing.T) { - c, err := NewRC4Cipher(key) - if err != nil { - t.Errorf("init rc4Cipher failed: %s", err) - return - } - c.Decrypt(raw, 0) - if !reflect.DeepEqual(raw, target) { - t.Error("overall") - } - }) } func BenchmarkRc4Cipher_Decrypt(b *testing.B) { - key, raw, _, err := loadTestRC4CipherData() + key, raw, _, err := loadTestRC4CipherData("mflac0_rc4") if err != nil { b.Fatalf("load testing data failed: %s", err) } @@ -57,7 +67,7 @@ func BenchmarkRc4Cipher_Decrypt(b *testing.B) { } func Test_rc4Cipher_encFirstSegment(t *testing.T) { - key, raw, target, err := loadTestRC4CipherData() + key, raw, target, err := loadTestRC4CipherData("mflac0_rc4") if err != nil { t.Fatalf("load testing data failed: %s", err) } @@ -75,7 +85,7 @@ func Test_rc4Cipher_encFirstSegment(t *testing.T) { } func Test_rc4Cipher_encASegment(t *testing.T) { - key, raw, target, err := loadTestRC4CipherData() + key, raw, target, err := loadTestRC4CipherData("mflac0_rc4") if err != nil { t.Fatalf("load testing data failed: %s", err) } diff --git a/algo/qmc/key_dec_test.go b/algo/qmc/key_dec_test.go index aa4fc4d..4ebf8fd 100644 --- a/algo/qmc/key_dec_test.go +++ b/algo/qmc/key_dec_test.go @@ -27,7 +27,6 @@ func loadDecryptKeyData(name string) ([]byte, []byte, error) { return keyRaw, keyDec, nil } func TestDecryptKey(t *testing.T) { - tests := []struct { name string filename string @@ -35,13 +34,15 @@ func TestDecryptKey(t *testing.T) { }{ {"mflac0_rc4(512)", "mflac0_rc4", false}, {"mflac_map(256)", "mflac_map", false}, + {"mflac_rc4(256)", "mflac_rc4", false}, + {"mgg_map(256)", "mgg_map", false}, } for _, tt := range tests { - raw, want, err := loadDecryptKeyData(tt.filename) - if err != nil { - t.Fatalf("load test data failed: %s", err) - } t.Run(tt.name, func(t *testing.T) { + raw, want, err := loadDecryptKeyData(tt.filename) + if err != nil { + t.Fatalf("load test data failed: %s", err) + } got, err := DecryptKey(raw) if (err != nil) != tt.wantErr { t.Errorf("DecryptKey() error = %v, wantErr %v", err, tt.wantErr) diff --git a/algo/qmc/qmc_test.go b/algo/qmc/qmc_test.go index 6209b15..11bbbaf 100644 --- a/algo/qmc/qmc_test.go +++ b/algo/qmc/qmc_test.go @@ -32,6 +32,7 @@ func TestMflac0Decoder_Read(t *testing.T) { wantErr bool }{ {"mflac0_rc4", false}, + {"mflac_rc4", false}, {"mflac_map", false}, {"mgg_map", false}, {"qmc0_static", false}, diff --git a/algo/qmc/testdata/mflac_rc4_key.bin b/algo/qmc/testdata/mflac_rc4_key.bin new file mode 100644 index 0000000..8f1104c --- /dev/null +++ b/algo/qmc/testdata/mflac_rc4_key.bin @@ -0,0 +1 @@ +pUtyvqr0TgAvR95mNmY7DmNl386TsJNAEIz95CEcgIgJCcs28686O7llxD5E74ldn70xMtd5cG58TA5ILw09I8BOTf5EdHKd6wwPn689DUK13y3Req6H0P33my2miJ5bQ2AA22B8vp4V0NJ3hBqNtFf7cId48V6W51e1kwgu1xKKawxe9BByT92MFlqrFaKH32dB2zFgyd38l2P1outr4l2XLq48F9G17ptRz4W8Loxu28RvZgv0BzL26Ht9I2L5VCwMzzt7OeZ55iQs40Tr6k81QGraIUJj5zeBMgJRMTaSgi19hU5x5a08Qd662MbFhZZ0FjVvaDy1nbIDhrC62c1lX6wf70O45h4W42VxloBVeZ9Sef4V7cWrjrEjj3DJ5w2iu6Q9uoal2f4390kue42Um5HcDFWqv3m56k6O89bRV424PaRra1k9Cd2L56IN2zfBYqNo2WP5VC68G8w1hfflOY0O52h4WdcpoHSjZm4b35N7l47dT4dwEXj1U4J5 \ No newline at end of file diff --git a/algo/qmc/testdata/mflac_rc4_key_raw.bin b/algo/qmc/testdata/mflac_rc4_key_raw.bin new file mode 100644 index 0000000..1633371 --- /dev/null +++ b/algo/qmc/testdata/mflac_rc4_key_raw.bin @@ -0,0 +1 @@ +cFV0eXZxcjAF/IXJ9qJT1u5C3S5AgY9BoVtIQNBKfxQMt5hH7BF36ndIJGV5L6qw5h4G0IOIOOewdHmMCNfKJftHM4nv3B0iRlSdqJKdL08wO3sV0v8eZk0OiYAlxgseGcBquQWYS/0b5Lj/Ioi2NfpOthAY9vUiRPnfH3+7/2AJGudHjj4Gg1KkpPW3mXIKbsk+Ou9fhrUqs873BCdsmI6qRmVNhOkLaUcbG6Zin3XU0WkgnnjebR43S8N4bw5BTphFvhy42QvspnD7Ewb1tVZQMQ2N1s38nBjukdfCB9R6aRwITOvg2U7Lr0RjLpbrIn6A6iVilpINjK4VptuKUTlpDXQwgCjoqeHQaHNCWgYpdjB69lXn8km/BfzK7QyDbh0VgTikwAHF9tvPhin3AIDRcU0xsaWYKURRfJelX3pSN495ADlhXdEKL/+l60hVnY7t6iCMxJL3lOtdGtdUYUGUCc76PB1fX+0HTWCcfcwvXTEdczr9J1h2yTeJNqFQ5pNy8vX7Ws8k7vDQVFkw4llZjPhb0kg9aDNePTNIKSGwy/7eofrcUQlC9DI+qqqwQ5abA/93fNsPq6XU3uwawnrbBsdz8DDdjJiEDI7abkPIDIfr/uR0YzgBxW90t5bt6xAtuW+VSYAM7kGxI3RZTl7JgOT60MLyIWkYASrRhRPMGks8zL10ED/4yGTEB1nt \ No newline at end of file diff --git a/algo/qmc/testdata/mflac_rc4_raw.bin b/algo/qmc/testdata/mflac_rc4_raw.bin new file mode 100644 index 0000000..6f02875 Binary files /dev/null and b/algo/qmc/testdata/mflac_rc4_raw.bin differ diff --git a/algo/qmc/testdata/mflac_rc4_suffix.bin b/algo/qmc/testdata/mflac_rc4_suffix.bin new file mode 100644 index 0000000..3762b4c Binary files /dev/null and b/algo/qmc/testdata/mflac_rc4_suffix.bin differ diff --git a/algo/qmc/testdata/mflac_rc4_target.bin b/algo/qmc/testdata/mflac_rc4_target.bin new file mode 100644 index 0000000..f99e219 Binary files /dev/null and b/algo/qmc/testdata/mflac_rc4_target.bin differ