61 lines
1.6 KiB
Elixir
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
|