Ejemplo n.º 1
0
        private void TestKey(M1KeyMode keyMode, byte[] key)
        {
            ResultArgs ret = this.reader.Select();

            if (!ret.Succ)
            {
                this.TraceMsg.Trace("Select Card Error!");
                return;
            }

            CardSelectResult info = (CardSelectResult)ret.Result;

            this.TraceMsg.Trace(String.Format("Select card_id={0}, ATQA=0x{1}, SAK={2}",
                                              BitConverter.ToString(info.SN),
                                              info.ATQA.ToString("X4"),
                                              info.SAK.ToString("X2")));

            foreach (CheckBox cb in this.cardSectorSelected)
            {
                if (!cb.Checked)
                {
                    continue;
                }

                int sector = int.Parse(cb.Text.Trim());
                if (!this.reader.Authen(keyMode, sector * 4, key))
                {
                    this.TraceMsg.Trace("Authen sector {0} failed !", sector);
                }
                else
                {
                    this.TraceMsg.Trace("Authen sector {0} OK !", sector);
                }
            }
        }
Ejemplo n.º 2
0
        public static ResultArgs ReadSector(int sector, M1KeyMode keyMode, byte[] key)
        {
            ICardReader cardReader = ContextManager.GetCardReader();

            ResultArgs ret = cardReader.Select();

            if (!ret.Succ)
            {
                return(new ResultArgs(false, null, "Select Card Error!"));
            }

            CardSelectResult info = (CardSelectResult)ret.Result;

            logger.Debug(String.Format("Select card_id={0}, ATQA=0x{1}, SAK={2}",
                                       BitConverter.ToString(info.SN),
                                       info.ATQA.ToString("X4"),
                                       info.SAK.ToString("X2")));

            if (!cardReader.Authen(keyMode, sector * 4, key))
            {
                logger.Debug(String.Format("Auth sector {0} failed !", sector));
                return(new ResultArgs(false, null, "Auth sector failed !"));
            }

            byte[] buffer;
            int    len = 0;

            if (!cardReader.ReadSector(sector, out buffer, out len))
            {
                return(new ResultArgs(false, null, "Read sector failed !"));
            }

            return(new ResultArgs(true, BitConverter.ToString(buffer), "OK"));
        }
Ejemplo n.º 3
0
        /// <summary>
        /// select test 2
        /// return card_id, atqa, sak
        /// </summary>
        private void BtnSelectCard2_Click(object sender, EventArgs e)
        {
            ResultArgs ret = this.reader.Select();

            this.TraceMsg.Trace("Select Card " + ((ret.Succ) ? "OK!" : "Failed!"), true);

            if (ret.Succ)
            {
                CardSelectResult card = (CardSelectResult)ret.Result;

                this.TraceMsg.Trace(String.Format("card_id={0}, atqa=0x{1}, sak=0x{2}",
                                                  BitConverter.ToString(card.SN),
                                                  card.ATQA.ToString("X4"),
                                                  card.SAK.ToString("X2")));
            }
        }
Ejemplo n.º 4
0
        public ResultArgs Select()
        {
            ResultArgs       ret      = new ResultArgs(false);
            CardSelectResult cardInfo = new CardSelectResult();

            if (this.hReader == -1)
            {
                return(ret);
            }

            //atqa :: M1_S50: 0x0004; M1_S70: 0x0002
            UInt16 atqa = 0;

            if (dc_request(this.hReader, 0x00, ref atqa) != SUCC)
            {
                ret.Msg = "Can't request atqa !";
                return(ret);
            }

            cardInfo.ATQA = atqa;

            byte[] sn = ByteUtil.Malloc(16);
            if (dc_anticoll(this.hReader, 0x00, sn) != SUCC)
            {
                ret.Msg = "AntiCollision Failed !";
                return(ret);
            }

            // remove zero at the end
            cardInfo.SN = ByteUtil.TrimEnd(sn);

            //M1: sak = 0x08
            //CPU simulate M1: sak=0x28
            byte sak = 0x00;

            if (dc_select(this.hReader, sn, ref sak) != SUCC)
            {
                ret.Msg = "Can't get SAK!";
                return(ret);
            }
            cardInfo.SAK = sak;
            ret.Succ     = true;
            ret.Result   = cardInfo;
            return(ret);
        }
Ejemplo n.º 5
0
        public bool Initialize(UInt16[] sector)
        {
            ResultArgs ret = this.reader.Select();

            if (!ret.Succ)
            {
                return(false);
            }

            CardSelectResult card = (CardSelectResult)ret.Result;

            this.logger.Debug(String.Format("card_id={0}, atqa=0x{1}, sak=0x{2}", BitConverter.ToString(card.SN), card.ATQA.ToString("X4"), card.SAK.ToString("X2")));

            List <CardInitRequest>  req      = PrepareRequest(card.SN, sector);
            List <CardInitResponse> response = keyService.ComputeKey(req);

            return(UpdateCardKey(response));
        }