Phase 1 of package refactor. Moves all source modules into pm3py/core/ with file renames (hf_14a→hf_iso14a, hf_15→hf_iso15, hf_mf→hf_mfc) and client attribute normalization (hf.a14→hf.iso14a, hf.mf→hf.mfc). pm3py/__init__.py re-exports from core for backward compat. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
27 lines
1007 B
Python
27 lines
1007 B
Python
import struct
|
|
import asyncio
|
|
from unittest.mock import AsyncMock
|
|
from pm3py.core.protocol import Cmd
|
|
from pm3py.core.transport import PM3Response
|
|
from pm3py.core.hf_mfc import HFMFCommands
|
|
|
|
def test_mf_rdbl():
|
|
t = AsyncMock()
|
|
mf = HFMFCommands(t)
|
|
block_data = bytes(range(16))
|
|
t.send_ng.return_value = PM3Response(cmd=Cmd.HF_MIFARE_READBL, status=0,
|
|
reason=0, ng=True, data=block_data)
|
|
result = asyncio.get_event_loop().run_until_complete(
|
|
mf.rdbl(block=0, key="FFFFFFFFFFFF"))
|
|
assert result["data"] == block_data.hex()
|
|
assert len(result["raw"]) == 16
|
|
|
|
def test_mf_wrbl():
|
|
t = AsyncMock()
|
|
mf = HFMFCommands(t)
|
|
t.send_mix.return_value = PM3Response(cmd=Cmd.ACK, status=0, reason=0,
|
|
ng=False, data=b"", oldarg=[1, 0, 0])
|
|
result = asyncio.get_event_loop().run_until_complete(
|
|
mf.wrbl(block=4, key="FFFFFFFFFFFF", data="00" * 16))
|
|
assert result["success"] is True
|