fix login issue*
This commit is contained in:
48
test/test_aes.exs
Normal file
48
test/test_aes.exs
Normal file
@@ -0,0 +1,48 @@
|
||||
# Test AES cipher with known values
|
||||
|
||||
Code.require_file("lib/odinsea/util/bit_tools.ex", ".")
|
||||
Code.require_file("lib/odinsea/net/cipher/ig_cipher.ex", ".")
|
||||
Code.require_file("lib/odinsea/net/cipher/aes_cipher.ex", ".")
|
||||
|
||||
alias Odinsea.Net.Cipher.AESCipher
|
||||
|
||||
import Bitwise
|
||||
|
||||
# Test: AES crypt should be self-inverse (since it's just XOR)
|
||||
iv = <<0x0F, 0x0C, 0x0C, 0xA8>>
|
||||
data = <<0xBF, 0x0A, 0xCD, 0xDE, 0xC7, 0x71, 0xAC>>
|
||||
|
||||
IO.puts("Testing AES cipher:")
|
||||
IO.puts("IV: #{Base.encode16(iv)}")
|
||||
IO.puts("Data: #{Base.encode16(data)}")
|
||||
IO.puts("")
|
||||
|
||||
# Expand IV to 16 bytes
|
||||
expanded_iv = :binary.copy(iv, 4)
|
||||
IO.puts("Expanded IV (16 bytes): #{Base.encode16(expanded_iv)}")
|
||||
|
||||
# The AES key (16 bytes)
|
||||
aes_key = <<
|
||||
0x13, 0x00, 0x00, 0x00,
|
||||
0x08, 0x00, 0x00, 0x00,
|
||||
0x06, 0x00, 0x00, 0x00,
|
||||
0xB4, 0x00, 0x00, 0x00
|
||||
>>
|
||||
|
||||
# Encrypt the expanded IV to get keystream
|
||||
keystream = :crypto.crypto_one_time(:aes_128_ecb, aes_key, expanded_iv, true)
|
||||
IO.puts("Keystream: #{Base.encode16(keystream)}")
|
||||
|
||||
# XOR data with keystream (only use as many bytes as data)
|
||||
keystream_bytes = :binary.bin_to_list(keystream) |> Enum.take(byte_size(data))
|
||||
data_bytes = :binary.bin_to_list(data)
|
||||
result_bytes = Enum.zip_with(data_bytes, keystream_bytes, fn x, y -> bxor(x, y) end)
|
||||
result = :binary.list_to_bin(result_bytes)
|
||||
|
||||
IO.puts("XOR result: #{Base.encode16(result)}")
|
||||
IO.puts("")
|
||||
|
||||
# Compare with AESCipher.crypt
|
||||
aes_result = AESCipher.crypt(data, iv)
|
||||
IO.puts("AESCipher.crypt result: #{Base.encode16(aes_result)}")
|
||||
IO.puts("Match: #{result == aes_result}")
|
||||
Reference in New Issue
Block a user