コード例 #1
0
ファイル: Program.cs プロジェクト: kgamecarter/NfcDotNet
        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);
        }
コード例 #2
0
        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"));
            }
        }