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); } } }
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")); }
/// <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"))); } }
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); }
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)); }