mirror of
https://github.com/Mezeporta/Erupe.git
synced 2026-03-22 15:43:49 +01:00
Copy MHBridge into the Erupe module as cmd/protbot/ so it can be built, tested, and maintained alongside the server. The bot implements the full sign → entrance → channel login flow and supports lobby entry, chat, session setup, and quest enumeration. The conn/ package keeps its own Blowfish crypto primitives to avoid importing erupe-ce/config (which requires a config file at init).
53 lines
1.5 KiB
Go
53 lines
1.5 KiB
Go
package conn
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
// TestCalcSum32 verifies the checksum against a known input.
|
|
func TestCalcSum32(t *testing.T) {
|
|
// Verify determinism: same input gives same output.
|
|
data := []byte("Hello, MHF!")
|
|
sum1 := CalcSum32(data)
|
|
sum2 := CalcSum32(data)
|
|
if sum1 != sum2 {
|
|
t.Fatalf("CalcSum32 not deterministic: %08X != %08X", sum1, sum2)
|
|
}
|
|
|
|
// Different inputs produce different outputs (basic sanity).
|
|
data2 := []byte("Hello, MHF?")
|
|
sum3 := CalcSum32(data2)
|
|
if sum1 == sum3 {
|
|
t.Fatalf("CalcSum32 collision on different inputs: both %08X", sum1)
|
|
}
|
|
}
|
|
|
|
// TestDecryptBin8RoundTrip verifies that encrypting and decrypting with Bin8
|
|
// produces the original data. We only have DecryptBin8, but we can verify
|
|
// the encrypt→decrypt path by implementing encrypt inline here.
|
|
func TestDecryptBin8RoundTrip(t *testing.T) {
|
|
original := []byte("Test data for Bin8 encryption round-trip")
|
|
key := byte(0x42)
|
|
|
|
// Encrypt (inline copy of Erupe's EncryptBin8)
|
|
k := uint32(key)
|
|
encrypted := make([]byte, len(original))
|
|
for i := 0; i < len(original); i++ {
|
|
rotate(&k)
|
|
tmp := bin8Key[i&7] ^ byte((k>>13)&0xFF)
|
|
encrypted[i] = original[i] ^ tmp
|
|
}
|
|
|
|
// Decrypt
|
|
decrypted := DecryptBin8(encrypted, key)
|
|
|
|
if len(decrypted) != len(original) {
|
|
t.Fatalf("length mismatch: got %d, want %d", len(decrypted), len(original))
|
|
}
|
|
for i := range original {
|
|
if decrypted[i] != original[i] {
|
|
t.Fatalf("byte %d: got 0x%02X, want 0x%02X", i, decrypted[i], original[i])
|
|
}
|
|
}
|
|
}
|