static void WriteBlock(Crypto1 crapto1, byte b, byte[] blockData) { var enWrite = new byte[4] { 0xA0, b, 0, 0 }; Iso14443aCrcAppend(enWrite, 2); var enWriteParity = new byte[4]; crapto1.Encrypt(enWrite, enWriteParity, 0, 4); var resbits = device.InitiatorTransceiveBits(enWrite, 32, enWriteParity, abtRx, MAX_FRAME_LEN, null); var res = 0; for (int i = 0; i < 4; i++) { res |= ((abtRx[0] >> i) ^ crapto1.Crypto1Bit()) << i; } WriteLine("Write Cmd : " + res.ToString("x2")); if (res != 0x0A && res != 0x0E) // 0x0A ACK, 0x0E NAK { throw new Exception("Cmd Error: " + res.ToString("x2")); } var enBlock = new byte[18]; // 16byte data + 2byte crc var enBlockParity = new byte[18]; if (blockData != null) { Array.Copy(blockData, enBlock, blockData.Length > 16 ? 16 : blockData.Length); } Iso14443aCrcAppend(enBlock, 16); Write("Write Block{0,2}: ", b); PrintHex(enBlock, 16); crapto1.Encrypt(enBlock, enBlockParity, 0, 18); resbits = device.InitiatorTransceiveBits(enBlock, 144, enBlockParity, abtRx, MAX_FRAME_LEN, null); res = 0; for (int i = 0; i < 4; i++) { res |= ((abtRx[0] >> i) ^ crapto1.Crypto1Bit()) << i; } WriteLine("Write data: " + res.ToString("x2")); if (res != 0x0A && res != 0x0E) // 0x0A ACK, 0x0E NAK { throw new Exception("Cmd Error: " + res.ToString("x2")); } //var enTransfer = new byte[4] { 0xB0, b, 0, 0 }; //Nfc.Iso14443aCrcAppend(enTransfer, 2); //var enTransferParity = new byte[4]; //crapto1.Encrypt(enTransfer, enTransferParity, 0, 4); //res = device.InitiatorTransceiveBits(enTransfer, 32, enTransferParity, abtRx, MAX_FRAME_LEN, null); }
public void WriteBlock(byte b, byte[] blockData) { if (b / 4 != _sector || Crypto1 == null) { throw new Exception("Not auth"); } var write = new byte[4] { 0xA0, b, 0, 0 }; Iso14443aCrcAppend(write, 2); var writeParity = new byte[4]; Crypto1.Encrypt(write, writeParity, 0, 4); var resbits = Device.InitiatorTransceiveBits(write, 32, writeParity, rxBuffer, MAX_FRAME_LEN, null); var res = 0; for (int i = 0; i < 4; i++) { res |= ((rxBuffer[0] >> i) ^ Crypto1.Crypto1Bit()) << i; } if (res != 0x0A && res != 0x0E) // 0x0A ACK, 0x0E NAK { throw new Exception("Cmd Error: " + res.ToString("x2")); } var block = new byte[18]; // 16byte data + 2byte crc var blockParity = new byte[18]; if (blockData != null) { Array.Copy(blockData, block, blockData.Length > 16 ? 16 : blockData.Length); } Iso14443aCrcAppend(block, 16); Crypto1.Encrypt(block, blockParity, 0, 18); resbits = Device.InitiatorTransceiveBits(block, 144, blockParity, rxBuffer, MAX_FRAME_LEN, null); res = 0; for (int i = 0; i < 4; i++) { res |= ((rxBuffer[0] >> i) ^ Crypto1.Crypto1Bit()) << i; } if (res != 0x0A && res != 0x0E) // 0x0A ACK, 0x0E NAK { throw new Exception("Cmd Error: " + res.ToString("x2")); } }