Files
odinsea-elixir/test/crypto_simple_test.exs
2026-02-25 12:26:26 -07:00

61 lines
1.6 KiB
Elixir

defmodule Odinsea.CryptoSimpleTest do
@moduledoc """
Simple test module for MapleStory crypto implementation.
These tests don't require the full application to start.
"""
use ExUnit.Case
alias Odinsea.Net.Cipher.{IGCipher, ShandaCipher, AESCipher}
describe "IGCipher (IV transformation)" do
test "inno_hash transforms IV correctly" do
iv = <<0x34, 0x9A, 0x0F, 0x0C>>
result = IGCipher.inno_hash(iv)
# Result should be 4 bytes
assert byte_size(result) == 4
# Result should be different from input (usually)
assert result != iv
end
test "inno_hash produces deterministic results" do
iv = <<0xA8, 0xBC, 0x0D, 0xB3>>
result1 = IGCipher.inno_hash(iv)
result2 = IGCipher.inno_hash(iv)
assert result1 == result2
end
end
describe "ShandaCipher" do
test "encrypt and decrypt are inverse operations" do
original = <<1, 0, 7, 112, 0, 4, 0>> # CP_PermissionRequest payload
encrypted = ShandaCipher.encrypt(original)
decrypted = ShandaCipher.decrypt(encrypted)
assert decrypted == original
end
test "encrypt produces different output" do
original = <<1, 0, 7, 112, 0, 4, 0>>
encrypted = ShandaCipher.encrypt(original)
assert encrypted != original
end
end
describe "AESCipher" do
test "crypt is self-inverse (XOR property)" do
data = <<1, 0, 7, 112, 0, 4, 0>>
iv = <<0xA8, 0xBC, 0x0D, 0xB3>>
encrypted = AESCipher.crypt(data, iv)
decrypted = AESCipher.crypt(encrypted, iv)
assert decrypted == data
end
end
end