国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種金融終端、安全處理器及安全處理器的工作方法與流程

      文檔序號(hào):11865239閱讀:334來源:國知局
      一種金融終端、安全處理器及安全處理器的工作方法與流程

      本發(fā)明涉及信息安全領(lǐng)域,尤其涉及一種金融終端、安全處理器及安全處理器的工作方法。



      背景技術(shù):

      在現(xiàn)有技術(shù)中,金融終端中的安全處理器通過專用7816芯片與卡槽連接,7816芯片上有電平轉(zhuǎn)換電路和短路保護(hù)電路;如圖1所示,當(dāng)接觸卡插入卡槽后,金融終端上電之后主控模塊對(duì)接觸卡進(jìn)行控制操作。由于7816芯片對(duì)應(yīng)的協(xié)議流程較為復(fù)雜,要實(shí)現(xiàn)金融終端與接觸卡的通信,成本較高。



      技術(shù)實(shí)現(xiàn)要素:

      本發(fā)明的目的是為了克服現(xiàn)有技術(shù)的不足,提供一種金融終端、安全處理器及安全處理器的工作方法。

      本發(fā)明提供了一種金融終端,包括安全處理器和卡槽,所述安全處理器與所述卡槽連接,所述安全處理器硬件包括電平轉(zhuǎn)換電路和短路保護(hù)電路,所述電平轉(zhuǎn)換電路和短路保護(hù)電路用于實(shí)現(xiàn)所述金融終端的電氣特性;所述安全處理器用于實(shí)現(xiàn)金融終端與卡片之間的數(shù)據(jù)通訊。

      其中,上述金融終端還包括液晶屏,所述液晶屏與所述安全處理器連接。

      其中,上述金融終端還包括鍵盤,所述鍵盤與所述安全處理器連接。

      本發(fā)明還提供了一種金融終端上的安全處理器的工作方法,包括:

      步驟S1:當(dāng)所述安全處理器檢測(cè)到卡槽中有IC卡插入時(shí),所述安全處理器向所述IC卡發(fā)送上電復(fù)位指令,并等待接收所述IC卡返回的復(fù)位應(yīng)答數(shù)據(jù);

      步驟S2:當(dāng)所述安全處理器接收到復(fù)位應(yīng)答數(shù)據(jù)后,判斷上電復(fù)位是否成功,是則執(zhí)行步驟S3,否則執(zhí)行步驟S6;

      步驟S3:所述安全處理器向所述IC卡發(fā)送選擇應(yīng)用環(huán)境指令,并判斷是否接收到所述IC卡返回的正確選擇應(yīng)答,是則執(zhí)行步驟S4,否則報(bào)錯(cuò);

      步驟S4:所述安全處理器向所述IC卡發(fā)送數(shù)據(jù)交互指令,并判斷是否接收到所述IC卡返回的正確交互應(yīng)答,是則執(zhí)行步驟S5,否則報(bào)錯(cuò);

      步驟S5:所述安全處理器判斷本次操作是否完成,是則執(zhí)行步驟S6,否則返回步驟S4;

      步驟S6:所述安全處理器對(duì)所述IC卡執(zhí)行下電操作,當(dāng)檢測(cè)到所述IC卡被拔出時(shí)返回步驟S1。

      其中,所述步驟S1之前還包括:

      步驟b1:所述安全處理器將卡槽中與IC卡相關(guān)的引腳進(jìn)行初始化配置;

      步驟b2:所述安全處理器設(shè)置通訊參數(shù)的缺省值;

      步驟b3:所述安全處理器根據(jù)所述通訊參數(shù)計(jì)算時(shí)序控制參數(shù):

      步驟b4:所述安全處理器啟動(dòng)冷復(fù)位時(shí)序;

      步驟b5:所述安全處理器使能UART接收中斷,準(zhǔn)備接收IC卡發(fā)送的復(fù)位應(yīng)答數(shù)據(jù)。

      其中,所述步驟b5還包括:開啟接收中斷;

      所述方法包括:

      步驟c1:當(dāng)所述安全處理器檢測(cè)到接收中斷時(shí),保存接收到的字符;

      步驟c2:所述安全處理器判斷所述接收到的字符的類型;如為初始字符則執(zhí)行步驟c3;如為格式字符則執(zhí)行步驟c5;如為接口字符則執(zhí)行步驟c10;如為歷史字符則執(zhí)行步驟c20;如為校驗(yàn)字符則執(zhí)行步驟c24;

      步驟c3:所述安全處理器設(shè)置等待定時(shí)器,將接收狀態(tài)機(jī)設(shè)為接收格式字符;

      步驟c4:所述安全處理器判斷初始字符的邏輯方向是否錯(cuò)誤,是則將所述金融終端狀態(tài)機(jī)設(shè)置為參數(shù)無效,執(zhí)行步驟c25,否則直接執(zhí)行步驟c25;

      步驟c5:所述安全處理器判斷是否保存有第一組接口字符,是則執(zhí)行步驟c6,否則執(zhí)行步驟c7;

      步驟c6:所述安全處理器將所述接收狀態(tài)機(jī)設(shè)為接收接口字符,執(zhí)行步驟c25;

      步驟c7:所述安全處理器判斷是否保存有歷史字符,是則執(zhí)行步驟c8,否則執(zhí)行步驟c9;

      步驟c8:所述安全處理器將所述接收狀態(tài)機(jī)設(shè)為接收歷史字符,記錄歷史字符的數(shù)量,執(zhí)行步驟c25;

      步驟c9:所述安全處理器將所述接收狀態(tài)機(jī)設(shè)為接收額外字符,設(shè)置等待定時(shí)器,執(zhí)行步驟c25;

      步驟c10:所述安全處理器將第一個(gè)協(xié)議組作為當(dāng)前協(xié)議組;

      步驟c11:所述安全處理器根據(jù)當(dāng)前協(xié)議組最后一個(gè)接口字符計(jì)算下一組字符的接口字符數(shù)量;

      步驟c12:所述安全處理器通過當(dāng)前協(xié)議本組最后一個(gè)接口字符判斷是否還有下一組接口字符,是則執(zhí)行步驟c13;否則執(zhí)行步驟c14;

      步驟c13:所述安全處理器將參與計(jì)算應(yīng)答數(shù)據(jù)的校驗(yàn)值的字符數(shù)自加1,執(zhí)行步驟c14;

      步驟c14:所述安全處理器判斷是否已經(jīng)接收到最后一個(gè)接口字符,是則執(zhí)行步驟c15,否則將下一個(gè)協(xié)議組作為當(dāng)前協(xié)議組,返回步驟c11;

      步驟c15:所述安全處理器判斷是否已計(jì)錄歷史字符數(shù)量,是則執(zhí)行步驟c16,否則執(zhí)行步驟c17;

      步驟c16:所述安全處理器更新歷史字符數(shù)量,將所述接收狀態(tài)機(jī)設(shè)置為接收歷史字符,執(zhí)行步驟c25;

      步驟c17:所述安全處理器判斷是否計(jì)算應(yīng)答數(shù)據(jù)的檢驗(yàn)值,是則執(zhí)行步驟c18,否則執(zhí)行步驟c19;

      步驟c18:所述安全處理器將所述接收狀態(tài)機(jī)設(shè)置為接收校驗(yàn)字符,執(zhí)行步驟c25;

      步驟c19:所述安全處理器將所述接收狀態(tài)機(jī)設(shè)置為接收額外字符,設(shè)置等待定時(shí)器,執(zhí)行步驟c25;

      步驟c20:所述安全處理器判斷所有的歷史字符是否都已接收完畢,是則執(zhí)行步驟c25,否則執(zhí)行步驟c21;

      步驟c21:所述安全處理器判斷是否需要執(zhí)行數(shù)據(jù)校驗(yàn),是則執(zhí)行步驟c22,否則執(zhí)行步驟c23;

      步驟c22:所述安全處理器將所述接收狀態(tài)機(jī)設(shè)置為接收校驗(yàn)字符,執(zhí)行步驟c25;

      步驟c23:所述安全處理器將所述接收狀態(tài)機(jī)設(shè)置為接收額外字符,執(zhí)行步驟c25;

      步驟c24:所述安全處理器將所述接收狀態(tài)機(jī)設(shè)置為接收額外字符,設(shè)置字符等待時(shí)間,執(zhí)行步驟c25;

      步驟c25:所述安全處理器判斷所述金融終端狀態(tài)機(jī),如為接收完成則執(zhí)行步驟c26,如為參數(shù)無效則直接退出接收中斷,如為其他則執(zhí)行步驟c28;

      步驟c26:所述安全處理器判斷接收參數(shù)過程中是否出錯(cuò),是則調(diào)用接收異常處理函數(shù)進(jìn)行操作,操作完成后退出接收中斷,否則執(zhí)行步驟c27;

      步驟c27:所述安全處理器將所述金融終端狀態(tài)機(jī)設(shè)置為空閑狀態(tài),并解析接收到的復(fù)位應(yīng)答數(shù)據(jù),解析完成后退出接收中斷;

      步驟c28:所述安全處理器重新向所述IC卡發(fā)命令,并重新設(shè)置等待定時(shí)器,退出接收中斷。

      其中,所述步驟b5還包括:開啟時(shí)鐘定時(shí)器超時(shí)中斷;

      所述方法還包括:當(dāng)所述安全處理器檢測(cè)到時(shí)鐘定時(shí)器超時(shí)中斷時(shí),所述安全處理器關(guān)閉時(shí)鐘定時(shí)器,將所述金融終端狀態(tài)機(jī)設(shè)置為接收超時(shí),退出時(shí)鐘定時(shí)器超時(shí)中斷。

      其中,所述步驟b5還包括:開啟奇偶校驗(yàn)錯(cuò)誤中斷;

      所述方法還包括:當(dāng)所述安全處理器檢測(cè)到奇偶校驗(yàn)錯(cuò)誤中斷時(shí),所述安全處理器將所述卡槽上與IC卡的復(fù)位引腳相關(guān)的引腳設(shè)為低電平,將所述金融終端狀態(tài)機(jī)設(shè)為奇偶檢驗(yàn)錯(cuò)誤,將所述IC卡的時(shí)鐘信號(hào)關(guān)閉,退出奇偶校驗(yàn)錯(cuò)誤中斷。

      其中,所述步驟b5還包括:開啟等待定時(shí)器中斷;

      所述方法還包括:當(dāng)所述安全處理器檢測(cè)到等待定時(shí)器中斷時(shí),所述安全處理器判斷是否接收到多余字符,是則執(zhí)行步驟f1,否則執(zhí)行步驟f2;

      步驟f1:所述安全處理器將所述金融終端狀態(tài)機(jī)設(shè)置為塊保護(hù)時(shí)間錯(cuò)誤,執(zhí)行步驟f2;

      步驟f2:所述安全處理器關(guān)閉接收中斷,將接收狀態(tài)機(jī)設(shè)置為接收完成,退出等待定時(shí)器中斷。

      其中,所述步驟c20具體包括:所述安全處理器根據(jù)所述格式字符計(jì)算得到歷史字符的個(gè)數(shù),判斷所述歷史字符的個(gè)數(shù)是否等于預(yù)設(shè)值,是則歷史字符都已接收完畢,否則歷史字符未接收完畢。

      其中,所述步驟S2包括:

      步驟e1:所述安全處理器等待接收初始字符,并設(shè)置第一接收定時(shí)器;

      步驟e2:所述安全處理器判斷是否接收到初始字符,是則執(zhí)行步驟e3,否則給上位機(jī)返回復(fù)位應(yīng)答數(shù)據(jù)接收超時(shí)信息;

      步驟e3:所述安全處理器判斷所述接收到的初始字符是否為第一預(yù)設(shè)值,是則執(zhí)行步驟e6,否則執(zhí)行步驟e4;

      步驟e4:所述安全處理器判斷所述接收到的初始字符是否為第二預(yù)設(shè)值,是則執(zhí)行步驟e5,否則給上位機(jī)返回復(fù)位應(yīng)答數(shù)據(jù)接收出錯(cuò)信息;

      步驟e5:所述安全處理器將字符傳輸?shù)倪壿嫾s定設(shè)置為反向約定,執(zhí)行步驟e7;

      步驟e6:所述安全處理器將字符傳輸?shù)倪壿嫾s定設(shè)置為正向約定,執(zhí)行步驟e7;

      步驟e7:所述安全處理器將所述接收到的初始字符保存到復(fù)位應(yīng)答數(shù)據(jù)緩存區(qū)中,等待接收格式字符,并設(shè)定第二接收定時(shí)器;

      步驟e8:所述安全處理器判斷在所述第二定時(shí)器的設(shè)定時(shí)間內(nèi)是否接收到格式字符,是則執(zhí)行步驟e9,否則給上位機(jī)返回復(fù)位應(yīng)答數(shù)據(jù)接收超時(shí)信息;

      步驟e9:所述安全處理器根據(jù)設(shè)置好的邏輯約定轉(zhuǎn)換格式字符,并將轉(zhuǎn)換后的格式字符保存到所述復(fù)位應(yīng)答數(shù)據(jù)緩存區(qū)中,根據(jù)格式字符計(jì)算歷史字符長(zhǎng)度并保存,將所述復(fù)位應(yīng)答數(shù)據(jù)緩存區(qū)中的第一個(gè)協(xié)議組作為當(dāng)前協(xié)議組;

      步驟e10:所述安全處理器判斷所述復(fù)位應(yīng)答數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)的長(zhǎng)度是否超過預(yù)設(shè)長(zhǎng)度,是則執(zhí)行步驟e18,否則將當(dāng)前協(xié)議組中的第一個(gè)接口字符作為當(dāng)前接口字符,執(zhí)行步驟e11;

      步驟e11:所述安全處理器判斷當(dāng)前接口字符是否超出當(dāng)前協(xié)議組中的接口字符長(zhǎng)度,是則執(zhí)行步驟e12,否則執(zhí)行步驟e14;

      步驟e12:所述安全處理器將所述復(fù)位應(yīng)答數(shù)據(jù)緩沖區(qū)中的下一個(gè)協(xié)議組作為當(dāng)前協(xié)議組,獲取當(dāng)前協(xié)議組中的第四個(gè)接口字符作為當(dāng)前接口字符;

      步驟e13:所述安全處理器判斷所述復(fù)位應(yīng)答數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)的長(zhǎng)度是否超過預(yù)設(shè)長(zhǎng)度,是則執(zhí)行步驟e18,否則返回步驟e11;

      步驟e14:所述安全處理器通過所述格式字符判斷當(dāng)前協(xié)議組的接口字符組中是否存在接口字符,是則執(zhí)行步驟e15,否則執(zhí)行步驟e17;

      步驟e15:所述安全處理器判斷在所述第一預(yù)設(shè)時(shí)間內(nèi)是否收到接口字符,是則執(zhí)行步驟e16,否則給上位機(jī)返回復(fù)位應(yīng)答數(shù)據(jù)接收超時(shí)信息;

      步驟e16:所述安全處理器根據(jù)設(shè)置好的邏輯約定進(jìn)行接口字符轉(zhuǎn)換,并將轉(zhuǎn)換后的接口字符保存到所述復(fù)位應(yīng)答數(shù)據(jù)緩存區(qū)中,執(zhí)行步驟e17;

      步驟e17:所述安全處理器將當(dāng)前協(xié)議組中的下一個(gè)接口字符作為當(dāng)前接口字符,返回步驟e11;

      步驟e18:所述安全處理器根據(jù)所述歷史字符長(zhǎng)度判斷是否接收完所有的歷史字符,是則執(zhí)行步驟e21,否則執(zhí)行步驟e19;

      步驟e19:所述安全處理器判斷在所述第一預(yù)設(shè)時(shí)間內(nèi)是否收到歷史字符,是則執(zhí)行步驟e20,否則給上位機(jī)返回復(fù)位應(yīng)答數(shù)據(jù)接收超時(shí)信息;

      步驟e20:所述安全處理器根據(jù)設(shè)置好的邏輯約定進(jìn)行歷史字符轉(zhuǎn)換,將轉(zhuǎn)換后的歷史字符保存到所述復(fù)位應(yīng)答數(shù)據(jù)緩存區(qū)中;

      步驟e21:所述安全處理器遍歷所述復(fù)位應(yīng)答數(shù)據(jù)緩存區(qū)中每個(gè)協(xié)議組中的第四接口字符,查詢是否存在T=1協(xié)議,是則執(zhí)行步驟e22,否則給上位機(jī)返回復(fù)位應(yīng)答數(shù)據(jù)接收成功信息;

      步驟e22:所述安全處理器判斷在所述第一預(yù)設(shè)時(shí)間內(nèi)是否接收到校驗(yàn)字符,是則執(zhí)行步驟e23,否則給上位機(jī)返回復(fù)位應(yīng)答數(shù)據(jù)接收超時(shí)信息;

      步驟e23:所述安全處理器根據(jù)設(shè)置好的邏輯約定進(jìn)行校驗(yàn)字符轉(zhuǎn)換;并將轉(zhuǎn)換后的校驗(yàn)字符保存到所述復(fù)位應(yīng)答數(shù)據(jù)緩存區(qū)中,給所述上位機(jī)返回復(fù)位應(yīng)答數(shù)據(jù)接收成功信息。

      其中,所述步驟S4包括:

      步驟d1:所述安全處理器根據(jù)復(fù)位應(yīng)答數(shù)據(jù)設(shè)定位持續(xù)時(shí)間;

      步驟d2:所述安全處理器判斷所述IC卡是否已插入且處于激活狀態(tài),是則執(zhí)行步驟d3,否則給上位機(jī)返回所述IC卡無響應(yīng)信息;

      步驟d3:所述安全處理器判斷發(fā)送的數(shù)據(jù)交互指令是否為PPS指令,是則執(zhí)行步驟d4,否則執(zhí)行步驟d7;

      步驟d4:所述安全處理器判斷所述ATR緩沖區(qū)中是否有預(yù)設(shè)接口字符,是則執(zhí)行步驟d5,否則給所述上位機(jī)返回指令取消信息;

      步驟d5:所述安全處理器與IC卡進(jìn)行PPS參數(shù)協(xié)商操作,并判斷協(xié)商操作是否成功,是則執(zhí)行步驟d6,否則對(duì)所述IC卡進(jìn)行下電操作,并給上位機(jī)返回錯(cuò)誤信息;

      步驟d6:所述安全處理器使用協(xié)商成功的參數(shù)開始與IC卡進(jìn)行通訊,執(zhí)行步驟d7;

      步驟d7:所述安全處理器設(shè)置將要發(fā)送的APDU指令;

      步驟d8:所述安全處理器將所述要發(fā)送的APDU指令發(fā)送給所述IC卡,并判斷是否發(fā)送成功,是則執(zhí)行步驟d9,否則給所述上位機(jī)返回錯(cuò)誤碼;

      步驟d9:安全處理器設(shè)置工作等待時(shí)間;

      步驟d10:所述安全處理器判斷在所述工作等待時(shí)間內(nèi)是否收到所述IC卡發(fā)送的第一個(gè)過程字,是則執(zhí)行步驟d11,否則給所述上位機(jī)返回錯(cuò)誤碼;

      步驟d11:所述安全處理器判斷接收到的所述第一個(gè)過程字是否等于第一預(yù)設(shè)數(shù)據(jù),是則執(zhí)行步驟d12,否則執(zhí)行步驟d13;

      步驟d12:所述安全處理器丟棄接收到的所述第一個(gè)過程字,并重新設(shè)定所述工作等待時(shí)間,等待接收后續(xù)字符,返回步驟d10;

      步驟d13:所述安全處理器判斷接收到的第一個(gè)過程字是否為第二預(yù)設(shè)數(shù)據(jù),是則執(zhí)行步驟d14,否則執(zhí)行步驟d17;

      步驟d14:所述安全處理器保存接收到的所述第一個(gè)過程字,并重新設(shè)定所述工作等待時(shí)間,等待接收第二個(gè)過程字;

      步驟d15:所述安全處理器判斷在所述工作等待時(shí)間內(nèi)是否接收到第二個(gè)過程字,是則執(zhí)行步驟d16,否則給所述上位機(jī)返回錯(cuò)誤碼;

      步驟d16:所述安全處理器保存所述第二個(gè)過程字,給所述上位機(jī)返回操作成功信息;

      步驟d17:所述安全處理器判斷接收到的第一過程字是否為INS字符,是則執(zhí)行步驟d18,否則執(zhí)行步驟d24;

      步驟d18:所述安全處理器判斷是否還有數(shù)據(jù)需要繼續(xù)發(fā)送給所述IC卡,是則執(zhí)行步驟d19,否則返回步驟d9;

      步驟d19:所述安全處理器判斷發(fā)送給所述IC卡指令中的le是否為0,是則執(zhí)行步驟d20,否則執(zhí)行步驟d22;

      步驟d20:所述安全處理器判斷在預(yù)設(shè)時(shí)間內(nèi)是否接收到所述IC卡返回的應(yīng)答數(shù)據(jù),是則執(zhí)行步驟d21,否則給所述上位機(jī)返回錯(cuò)誤信息;

      步驟d21:所述安全處理器保存IC卡返回的應(yīng)答數(shù)據(jù),給所述上位機(jī)返回操作成功信息;

      步驟d22:所述安全處理器判斷所述工作等待時(shí)間內(nèi)是否接收到IC卡發(fā)送的指定長(zhǎng)度的數(shù)據(jù),是則執(zhí)行步驟d23,否則給所述上位機(jī)返回錯(cuò)誤信息;

      步驟d23:所述安全處理器保存所述IC卡返回的指令長(zhǎng)度的應(yīng)答數(shù)據(jù),給所述上位機(jī)返回操作成功信息;

      步驟d24:所述安全處理器判斷接收到的第一過程字是否為INS的補(bǔ)碼,是則執(zhí)行步驟d25,否則給所述上位機(jī)返回錯(cuò)誤信息;

      步驟d25:所述安全處理器判斷是否還有數(shù)據(jù)繼續(xù)發(fā)送給所述IC卡,是則執(zhí)行步驟d26,否則執(zhí)行步驟d27;

      步驟d26:所述安全處理器給所述IC卡發(fā)送一個(gè)字節(jié)的數(shù)據(jù),返回步驟d9;

      步驟d27:所述安全處理器判斷是否接收到所述IC卡返回的一個(gè)字節(jié)數(shù)據(jù),是則執(zhí)行步驟d28,否則給所述上位機(jī)返回錯(cuò)誤信息;

      步驟d28:所述安全處理器保存所述IC卡返回的一個(gè)字節(jié)數(shù)據(jù),返回步驟d9。

      其中,所述步驟d7具體包括:

      步驟d71:所述安全處理器判斷將要發(fā)送的APDU指令的類型,如為第一預(yù)設(shè)命令則執(zhí)行步驟d72,如為第二預(yù)設(shè)命令則執(zhí)行步驟d73,如為第三預(yù)設(shè)命令則執(zhí)行步驟d74,如為其他則執(zhí)行步驟d75;

      步驟d72:所述安全處理器將所述要發(fā)送的APDU指令中的P3設(shè)置為0x00,發(fā)送數(shù)據(jù)總長(zhǎng)度設(shè)置為5個(gè)字節(jié),Le設(shè)為0,執(zhí)行步驟d8;

      步驟d73:所述安全處理器將所述要發(fā)送的APDU指令中的P3設(shè)置為0x00,發(fā)送數(shù)據(jù)總長(zhǎng)度設(shè)置為與Le相同,執(zhí)行步驟d8;

      步驟d74:所述安全處理器將所述要發(fā)送的APDU指令中的P3設(shè)置為0x00,執(zhí)行步驟d8;

      步驟d75:所述安全處理器將所述要發(fā)送的APDU指令中的Le設(shè)置為APDU數(shù)據(jù)域長(zhǎng)度-1,執(zhí)行步驟d8。

      其中,所述方法還包括:

      步驟p1:所述安全處理器在應(yīng)用層將金融終端狀態(tài)機(jī)設(shè)置為操作等待狀態(tài);

      步驟p2:所述安全處理器在應(yīng)用層判斷當(dāng)前通訊協(xié)議是否為T=1,是則執(zhí)行T=1的數(shù)據(jù)傳送,執(zhí)行步驟p3,否則執(zhí)行T=0的數(shù)據(jù)傳送,執(zhí)行步驟p3;

      步驟p3:所述安全處理器判斷所述金融終端狀態(tài)機(jī)是否為操作等待狀態(tài),是則返回步驟p3,否則執(zhí)行步驟p4;

      步驟p4:所述安全處理器在傳輸層判斷發(fā)送的數(shù)據(jù)長(zhǎng)度是否大于IC卡的信息域空間,是則執(zhí)行步驟p5,否則執(zhí)行步驟p6;

      步驟p5:所述安全處理器將鏈接標(biāo)志位置位,根據(jù)所述IC卡的信息域空間將命令數(shù)據(jù)分割為多組數(shù)據(jù)發(fā)送給終端數(shù)據(jù)鏈路層,執(zhí)行步驟p7;

      步驟p6:所述安全處理器清除鏈接標(biāo)志位,將所有的命令數(shù)據(jù)通過一組數(shù)據(jù)發(fā)送給終端數(shù)據(jù)鏈路層,執(zhí)行步驟p7;

      步驟p7:所述安全處理器在所述數(shù)據(jù)鏈路層把需要傳送的字符數(shù)據(jù)封裝成一幀數(shù)據(jù)塊;

      步驟p8:所述安全處理器將封裝好的數(shù)據(jù)塊發(fā)送給物理層;

      步驟p9:所述安全處理器在所述物理層驗(yàn)證接收到的數(shù)據(jù)塊的合法性,如合法則執(zhí)行步驟p10,否則給所述上位機(jī)返回錯(cuò)誤碼,結(jié)束;

      步驟p10:所述安全處理器通過I/O口將數(shù)據(jù)塊發(fā)送給所述IC卡。

      其中,所述方法還包括:

      步驟q1:當(dāng)所述安全處理器檢測(cè)到中斷時(shí)判斷中斷類型,如為定時(shí)器中斷則執(zhí)行步驟q2,如為發(fā)送緩沖器中斷則執(zhí)行步驟q3,如為字符發(fā)送完成中斷則執(zhí)行步驟q6,如為字符接收完成中斷則執(zhí)行步驟q9;

      步驟q2:所述安全處理器向所述IC卡發(fā)送數(shù)據(jù)塊,并使能發(fā)送完成中斷,退出定時(shí)器中斷;

      步驟q3:所述安全處理器判斷當(dāng)前數(shù)據(jù)塊中是否還有數(shù)據(jù)未發(fā)送完畢,是則執(zhí)行步驟q4,否則執(zhí)行步驟q5;

      步驟q4:所述安全處理器更新未發(fā)送完成的數(shù)據(jù)字符個(gè)數(shù),重新設(shè)定塊保護(hù)時(shí)間,準(zhǔn)備發(fā)送下一個(gè)數(shù)據(jù)字符,退出發(fā)送緩沖器中斷;

      步驟q5:所述安全處理器關(guān)閉字符發(fā)送完成中斷,關(guān)閉定時(shí)器中斷,退出發(fā)送緩沖器中斷;

      步驟q6:所述安全處理器判斷數(shù)據(jù)塊中的所有字符是否都已發(fā)送完成,是則執(zhí)行步驟q7,否則執(zhí)行步驟q8;

      步驟q7:所述安全處理器重新設(shè)定塊保護(hù)時(shí)間和塊等待時(shí)間,退出字符發(fā)送完成中斷;

      步驟q8:所述安全處理器在數(shù)據(jù)塊的最后一個(gè)字符開始時(shí),開啟定時(shí)器中斷,退出字符發(fā)送完成中斷;

      步驟q9:所述安全處理器將接收到的數(shù)據(jù)塊頭中的數(shù)據(jù)存入接收緩存區(qū)中;

      步驟q10:所述安全處理器判斷塊保護(hù)時(shí)間是否符合要求,是則執(zhí)行步驟q11,否則執(zhí)行步驟q15;

      步驟q11:所述安全處理器判斷數(shù)據(jù)塊頭是否接收完畢,是則執(zhí)行步驟q12,否則執(zhí)行步驟q14;

      步驟q12:所述安全處理器將接收到的數(shù)據(jù)域的數(shù)據(jù)存入接收緩存區(qū),并判斷接收狀態(tài)機(jī)是否為接收完成狀態(tài),是則執(zhí)行步驟q13,否則退出字符接收完成中斷;

      步驟q13:所述安全處理器清除金融終端狀態(tài)機(jī)的操作等待狀態(tài),退出字符接收完成中斷;

      步驟q14:所述安全處理器將接收到的數(shù)據(jù)域中的數(shù)據(jù)存入接收緩存區(qū),將接收狀態(tài)機(jī)設(shè)置為接收完成狀態(tài),關(guān)閉接收中斷,退出字符接收完成中斷;

      步驟q15:所述安全處理器判斷接收緩存區(qū)中的數(shù)據(jù)的長(zhǎng)度是否不超過預(yù)設(shè)長(zhǎng)度,是則執(zhí)行步驟q16,否則執(zhí)行步驟q17;

      步驟q16:所述安全處理器關(guān)閉等待定時(shí)器,將接收狀態(tài)機(jī)設(shè)為接收完成,清除所述金融終端狀態(tài)機(jī)的操作等待狀態(tài),調(diào)用硬件異常處理函數(shù),退出字符接收完成中斷;

      步驟q17:所述安全處理器關(guān)閉等待定時(shí)器然后重新開啟,退出字符接收完成中斷。

      本發(fā)明又提供了一種金融終端上的安全處理器,包括:

      第一檢測(cè)模塊,用于檢測(cè)卡槽中是否有IC卡插入;

      接收模塊,用于接收所述IC卡返回的復(fù)位應(yīng)答數(shù)據(jù);

      第一判斷模塊,用于當(dāng)所述接收模塊接收到復(fù)位應(yīng)答數(shù)據(jù)后,判斷上電復(fù)位是否成功,是則觸發(fā)發(fā)送模塊,否則觸發(fā)下電模塊;

      所述第二判斷模塊,用于判斷是否接收到所述IC卡返回的正確選擇應(yīng)答,是則觸發(fā)發(fā)送模塊,否則觸發(fā)報(bào)錯(cuò)模塊;

      所述第三判斷模塊,用于判斷是否接收到所述IC卡返回的正確交互應(yīng)答,是則觸發(fā)第四判斷模塊,否則觸發(fā)報(bào)錯(cuò)模塊;

      所述報(bào)錯(cuò)模塊,用于當(dāng)所述第二判斷模塊和所述第三判斷模塊判斷為否時(shí)報(bào)錯(cuò);

      所述第四判斷模塊,用于當(dāng)所述第三判斷模塊判斷為是時(shí)判斷本次操作是否完成,是則觸發(fā)下電模塊,否則觸發(fā)所述發(fā)送模塊;

      所述下電模塊,用于當(dāng)?shù)谝慌袛嗄K判斷為否和第四判斷模塊判斷是時(shí)對(duì)所述IC卡執(zhí)行下電操作,觸發(fā)所述第一檢測(cè)模塊;

      所述發(fā)送模塊,用于當(dāng)所述第一檢測(cè)模塊檢測(cè)到卡槽中有IC卡插入時(shí)向所述IC卡發(fā)送上電復(fù)位指令,當(dāng)所述第一判斷模塊判斷為是時(shí)向所述IC卡發(fā)送選擇應(yīng)用環(huán)境指令;當(dāng)所述第二判斷模塊判斷為是和所述第四判斷模塊判斷為否時(shí)向所述IC卡發(fā)送數(shù)據(jù)交互指令。

      其中,所述安全處理器還包括:

      第一設(shè)置模塊,用于將卡槽中與IC卡相關(guān)的引腳進(jìn)行初始化配置;設(shè)置通訊參數(shù)的缺省值;

      第一計(jì)算模塊,用于根據(jù)所述通訊參數(shù)計(jì)算時(shí)序控制參數(shù):

      啟動(dòng)模塊,用于啟動(dòng)冷復(fù)位時(shí)序;

      第一使能模塊,用于使能UART接收中斷,準(zhǔn)備接收IC卡發(fā)送的復(fù)位應(yīng)答數(shù)據(jù)。

      其中,所述安全處理器還包括:

      第一開啟模塊,用于開啟接收中斷;

      第二檢測(cè)模塊,用于檢測(cè)是否有中斷;

      第一保存模塊,用于當(dāng)所述第二檢測(cè)模塊檢測(cè)到接收中斷時(shí),保存接收到的字符;

      第五判斷模塊,用于判斷所述接收到的字符的類型;如為初始字符則觸發(fā)第二設(shè)置模塊;如為格式字符則觸發(fā)第七判斷模塊;如為接口字符則觸發(fā)作為模塊;如為歷史字符則觸發(fā)第十三判斷模塊;如為校驗(yàn)字符則觸發(fā)第十一設(shè)置模塊;

      所述第二設(shè)置模塊,用于設(shè)置等待定時(shí)器,將接收狀態(tài)機(jī)設(shè)為接收格式字符;

      第六判斷模塊,用于判斷初始字符的邏輯方向是否錯(cuò)誤,是則將所述金融終端狀態(tài)機(jī)設(shè)置為參數(shù)無效,觸發(fā)第十五判斷模塊,否則觸發(fā)第十五判斷模塊;

      所述第七判斷模塊,用于判斷是否保存有第一組接口字符,是則觸發(fā)第三設(shè)置模塊,否則觸發(fā)第八判斷模塊;

      所述第三設(shè)置模塊,用于將所述接收狀態(tài)機(jī)設(shè)為接收接口字符,觸發(fā)第十五判斷模塊;

      所述第八判斷模塊,用于判斷是否保存有歷史字符,是則觸發(fā)第四設(shè)置模塊,否則觸發(fā)第五設(shè)置模塊;

      所述第四設(shè)置模塊,用于將所述接收狀態(tài)機(jī)設(shè)為接收歷史字符,記錄歷史字符的數(shù)量,觸發(fā)第十五判斷模塊;

      所述第五設(shè)置模塊,用于將所述接收狀態(tài)機(jī)設(shè)為接收額外字符,設(shè)置等待定時(shí)器,觸發(fā)第十五判斷模塊;

      作為模塊,用于將第一個(gè)協(xié)議組作為當(dāng)前協(xié)議組;

      第二計(jì)算模塊,用于根據(jù)當(dāng)前協(xié)議組最后一個(gè)接口字符計(jì)算下一組字符的接口字符數(shù)量;

      第九判斷模塊,用于通過當(dāng)前協(xié)議本組最后一個(gè)接口字符判斷是否還有下一組接口字符,是則觸發(fā)第三計(jì)算模塊;否則觸發(fā)第十判斷模塊;

      所述第三計(jì)算模塊,用于將參與計(jì)算應(yīng)答數(shù)據(jù)的校驗(yàn)值的字符數(shù)自加1,觸發(fā)第十判斷模塊;

      所述第十判斷模塊,用于判斷是否已經(jīng)接收到最后一個(gè)接口字符,是則觸發(fā)第十一判斷模塊,否則將下一個(gè)協(xié)議組作為當(dāng)前協(xié)議組,觸發(fā)第二計(jì)算模塊;

      所述第十一判斷模塊,用于判斷是否已計(jì)錄歷史字符數(shù)量,是則觸發(fā)第六設(shè)置模塊,否則觸發(fā)第十二判斷模塊;

      所述第六設(shè)置模塊,用于更新歷史字符數(shù)量,將所述接收狀態(tài)機(jī)設(shè)置為接收歷史字符,觸發(fā)第十五判斷模塊;

      所述第十二判斷模塊,用于判斷是否計(jì)算應(yīng)答數(shù)據(jù)的檢驗(yàn)值,是則觸發(fā)第七設(shè)置模塊,否則觸發(fā)第八設(shè)置模塊;

      所述第七設(shè)置模塊,用于將所述接收狀態(tài)機(jī)設(shè)置為接收校驗(yàn)字符,觸發(fā)第十五判斷模塊;

      所述第八設(shè)置模塊,用于將所述接收狀態(tài)機(jī)設(shè)置為接收額外字符,設(shè)置等待定時(shí)器,觸發(fā)第十五判斷模塊;

      所述第十三判斷模塊,用于判斷所有的歷史字符是否都已接收完畢,是則觸發(fā)第十五判斷模塊,否則觸發(fā)第十四判斷模塊;

      所述第十四判斷模塊,用于判斷是否需要執(zhí)行數(shù)據(jù)校驗(yàn),是則觸發(fā)第九設(shè)置模塊,否則觸發(fā)第十設(shè)置模塊;

      所述第九設(shè)置模塊,用于將所述接收狀態(tài)機(jī)設(shè)置為接收校驗(yàn)字符,觸發(fā)第十五判斷模塊;

      所述第十設(shè)置模塊,用于將所述接收狀態(tài)機(jī)設(shè)置為接收額外字符,觸發(fā)第十五判斷模塊;

      所述第十一設(shè)置模塊,用于將所述接收狀態(tài)機(jī)設(shè)置為接收額外字符,設(shè)置字符等待時(shí)間,觸發(fā)第十五判斷模塊;

      所述第十五判斷模塊,用于判斷所述金融終端狀態(tài)機(jī),如為接收完成則觸發(fā)第十六判斷模塊,如為參數(shù)無效則直接退出接收中斷,如為其他則觸發(fā)第十二設(shè)置模塊;

      所述第十六判斷模塊,用于判斷接收參數(shù)過程中是否出錯(cuò),是則調(diào)用接收異常處理函數(shù)進(jìn)行操作,操作完成后退出接收中斷,否則觸發(fā)設(shè)置解析模塊;

      所述設(shè)置解析模塊,用于將所述金融終端狀態(tài)機(jī)設(shè)置為空閑狀態(tài),并解析接收到的復(fù)位應(yīng)答數(shù)據(jù),解析完成后退出接收中斷;

      所述第十二設(shè)置模塊,用于重新設(shè)置等待定時(shí)器,退出接收中斷。

      其中,所述第一開啟模塊還用于開啟時(shí)鐘定時(shí)器超時(shí)中斷;

      所述安全處理器還包括關(guān)閉設(shè)置模塊,用于當(dāng)所述第二檢測(cè)模塊檢測(cè)到時(shí)鐘定時(shí)器超時(shí)中斷時(shí),關(guān)閉時(shí)鐘定時(shí)器,將所述金融終端狀態(tài)機(jī)設(shè)置為接收超時(shí),退出時(shí)鐘定時(shí)器超時(shí)中斷。

      其中,所述第一開啟模塊還用于開啟奇偶校驗(yàn)錯(cuò)誤中斷;

      所述安全處理器還包括第十三設(shè)置模塊:用于當(dāng)所述第二檢測(cè)模塊檢測(cè)到奇偶校驗(yàn)錯(cuò)誤中斷時(shí),將所述卡槽上與IC卡的復(fù)位引腳相關(guān)的引腳設(shè)為低電平,將所述金融終端狀態(tài)機(jī)設(shè)為奇偶檢驗(yàn)錯(cuò)誤,將所述IC卡的時(shí)鐘信號(hào)關(guān)閉,退出奇偶校驗(yàn)錯(cuò)誤中斷。

      其中,所述第一開啟模塊還用于開啟等待定時(shí)器中斷;

      所述安全處理器還包括第十七判斷模塊:用于當(dāng)所述第二檢測(cè)模塊檢測(cè)到等待定時(shí)器中斷時(shí),判斷是否接收到多余字符,是則觸發(fā)第十四設(shè)置模塊,否則觸發(fā)第十五設(shè)置模塊;

      所述第十四設(shè)置模塊,用于將所述金融終端狀態(tài)機(jī)設(shè)置為塊保護(hù)時(shí)間錯(cuò)誤,觸發(fā)第十五設(shè)置模塊;

      所述第十五設(shè)置模塊,用于關(guān)閉接收中斷,將接收狀態(tài)機(jī)設(shè)置為接收完成,退出等待定時(shí)器中斷。

      其中,所述第十三判斷模塊具體用于根據(jù)所述格式字符計(jì)算得到歷史字符的個(gè)數(shù),判斷所述歷史字符的個(gè)數(shù)是否等于預(yù)設(shè)值,是則歷史字符都已接收完畢,否則歷史字符未接收完畢。

      其中,所述第二判斷模塊包括:

      第一設(shè)置子模塊,用于設(shè)置第一接收定時(shí)器;

      第一判斷子模塊,用于判斷是否接收到初始字符,是則觸發(fā)第二判斷子模塊,否則觸發(fā)所述發(fā)送模塊給上位機(jī)返回復(fù)位應(yīng)答數(shù)據(jù)接收超時(shí)信息;

      所述第二判斷子模塊,用于判斷所述接收到的初始字符是否為第一預(yù)設(shè)值,是則觸發(fā)第三設(shè)置子模塊,否則觸發(fā)第三判斷子模塊;

      所述第三判斷子模塊,用于判斷所述接收到的初始字符是否為第二預(yù)設(shè)值,是則觸發(fā)第二設(shè)置子模塊,否則觸發(fā)所述發(fā)送模塊給所述上位機(jī)返回復(fù)位應(yīng)答數(shù)據(jù)接收出錯(cuò)信息;

      所述第二設(shè)置子模塊,用于將字符傳輸?shù)倪壿嫾s定設(shè)置為反向約定,觸發(fā)第一保存設(shè)定子模塊;

      所述第三設(shè)置子模塊,用于將字符傳輸?shù)倪壿嫾s定設(shè)置為正向約定,觸發(fā)第一保存設(shè)定子模塊;

      所述第一保存設(shè)定子模塊,用于將所述接收到的初始字符保存到復(fù)位應(yīng)答數(shù)據(jù)緩存區(qū)中,并設(shè)定第二接收定時(shí)器;

      第四判斷子模塊,用于判斷在所述第二定時(shí)器的設(shè)定時(shí)間內(nèi)是否接收到格式字符,是則觸發(fā)第一轉(zhuǎn)換保存子模塊,否則觸發(fā)所述發(fā)送模塊給所述上位機(jī)返回復(fù)位應(yīng)答數(shù)據(jù)接收超時(shí)信息;

      所述第一轉(zhuǎn)換保存子模塊,用于根據(jù)設(shè)置好的邏輯約定轉(zhuǎn)換格式字符,并將轉(zhuǎn)換后的格式字符保存到所述復(fù)位應(yīng)答數(shù)據(jù)緩存區(qū)中,根據(jù)格式字符計(jì)算歷史字符長(zhǎng)度并保存,將所述復(fù)位應(yīng)答數(shù)據(jù)緩存區(qū)中的第一個(gè)協(xié)議組作為當(dāng)前協(xié)議組;

      第五判斷子模塊,用于判斷所述復(fù)位應(yīng)答數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)的長(zhǎng)度是否超過預(yù)設(shè)長(zhǎng)度,是則觸發(fā)第九判斷子模塊,否則將當(dāng)前協(xié)議組中的第一個(gè)接口字符作為當(dāng)前接口字符,執(zhí)行觸發(fā)第六判斷子模塊;

      所述第六判斷子模塊,用于判斷當(dāng)前接口字符是否超出當(dāng)前協(xié)議組中的接口字符長(zhǎng)度,是則觸發(fā)第一獲取子模塊,否則觸發(fā)第八判斷子模塊;

      所述第一獲取子模塊,用于將所述復(fù)位應(yīng)答數(shù)據(jù)緩沖區(qū)中的下一個(gè)協(xié)議組作為當(dāng)前協(xié)議組,獲取當(dāng)前協(xié)議組中的第四個(gè)接口字符作為當(dāng)前接口字符;

      第七判斷子模塊,判斷所述復(fù)位應(yīng)答數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)的長(zhǎng)度是否超過預(yù)設(shè)長(zhǎng)度,是則觸發(fā)第九判斷子模塊,否則觸發(fā)所述第六判斷子模塊;

      所述第八判斷子模塊,用于通過所述格式字符判斷當(dāng)前協(xié)議組的接口字符組中是否存在接口字符,是則觸發(fā)第八判斷子模塊,否則觸發(fā)第一作為子模塊;

      所述第八判斷子模塊,用于判斷在所述第一預(yù)設(shè)時(shí)間內(nèi)是否收到接口字符,是則觸發(fā)所述第二轉(zhuǎn)換保存子模塊,否則觸發(fā)所述發(fā)送模塊給所述上位機(jī)返回復(fù)位應(yīng)答數(shù)據(jù)接收超時(shí)信息;

      所述第二轉(zhuǎn)換保存子模塊,用于根據(jù)設(shè)置好的邏輯約定進(jìn)行接口字符轉(zhuǎn)換,并將轉(zhuǎn)換后的接口字符保存到所述復(fù)位應(yīng)答數(shù)據(jù)緩存區(qū)中,觸發(fā)第一作為子模塊;

      所述第一作為子模塊,用于將當(dāng)前協(xié)議組中的下一個(gè)接口字符作為當(dāng)前接口字符,觸發(fā)所述第六判斷子模塊;

      所述第九判斷子模塊,用于根據(jù)所述歷史字符長(zhǎng)度判斷是否接收完所有的歷史字符,是則觸發(fā)查詢子模塊,否則觸發(fā)第十判斷子模塊;

      所述第十判斷子模塊,用于判斷在所述第一預(yù)設(shè)時(shí)間內(nèi)是否收到歷史字符,是則觸發(fā)第三轉(zhuǎn)換保存子模塊,否則觸發(fā)所述發(fā)送模塊給所述上位機(jī)返回復(fù)位應(yīng)答數(shù)據(jù)接收超時(shí)信息;

      所述第三轉(zhuǎn)換保存子模塊,用于根據(jù)設(shè)置好的邏輯約定進(jìn)行歷史字符轉(zhuǎn)換,將轉(zhuǎn)換后的歷史字符保存到所述復(fù)位應(yīng)答數(shù)據(jù)緩存區(qū)中;

      所述查詢子模塊,用于遍歷所述復(fù)位應(yīng)答數(shù)據(jù)緩存區(qū)中每個(gè)協(xié)議組中的第四接口字符,查詢是否存在T=1協(xié)議,是則觸發(fā)第十一判斷子模塊,否則觸發(fā)所述發(fā)送模塊給所述上位機(jī)返回復(fù)位應(yīng)答數(shù)據(jù)接收成功信息;

      所述第十一判斷子模塊,用于判斷在所述第一預(yù)設(shè)時(shí)間內(nèi)是否接收到校驗(yàn)字符,是則觸發(fā)第四轉(zhuǎn)換保存子模塊,否則觸發(fā)所述發(fā)送模塊給所述上位機(jī)返回復(fù)位應(yīng)答數(shù)據(jù)接收超時(shí)信息;

      所述第四轉(zhuǎn)換保存子模塊,用于根據(jù)設(shè)置好的邏輯約定進(jìn)行校驗(yàn)字符轉(zhuǎn)換;并將轉(zhuǎn)換后的校驗(yàn)字符保存到所述復(fù)位應(yīng)答數(shù)據(jù)緩存區(qū)中,觸發(fā)所述發(fā)送模塊給所述上位機(jī)返回復(fù)位應(yīng)答數(shù)據(jù)接收成功信息。

      其中,所述第三判斷模塊包括:

      第四設(shè)置子模塊,用于根據(jù)復(fù)位應(yīng)答數(shù)據(jù)設(shè)置位持續(xù)時(shí)間;

      第十二判斷子模塊,用于判斷所述IC卡是否已插入且處于激活狀態(tài),是則觸發(fā)第十三判斷子模塊,否則觸發(fā)所述發(fā)送模塊給所述上位機(jī)返回IC卡無響應(yīng)信息;

      所述第十三判斷子模塊,用于判斷發(fā)送的數(shù)據(jù)交互指令是否為PPS指令,是則觸發(fā)第十四判斷子模塊,否則第五設(shè)置子模塊;

      所述第十四判斷子模塊,用于判斷所述ATR緩沖區(qū)中是否有預(yù)設(shè)接口字符,是則觸發(fā)第十五判斷子模塊,否則觸發(fā)所述發(fā)送模塊給所述上位機(jī)返回指令取消信息;

      所述第十五判斷子模塊,用于與IC卡進(jìn)行PPS參數(shù)協(xié)商操作,并判斷協(xié)商操作是否成功,是則觸發(fā)通訊子模塊,否則觸發(fā)所述下電模塊對(duì)IC卡進(jìn)行下電操作,并觸發(fā)所述發(fā)送模塊給上位機(jī)返回錯(cuò)誤信息;

      所述通訊子模塊,用于使用協(xié)商成功的參數(shù)開始與IC卡進(jìn)行通訊,觸發(fā)設(shè)置子模塊;

      所述第五設(shè)置子模塊,用于設(shè)置將要發(fā)送的APDU指令;

      第十六判斷子模塊,用于當(dāng)所述發(fā)送模塊將所述要發(fā)送的APDU指令發(fā)送給所述IC卡后,判斷所述APDU指令是否發(fā)送成功,是則觸發(fā)第六設(shè)置子模塊,否則觸發(fā)所述發(fā)送模塊給所述上位機(jī)返回錯(cuò)誤碼;

      所述第六設(shè)置子模塊,設(shè)置工作等待時(shí)間;

      第十七判斷子模塊,用于判斷在所述工作等待時(shí)間內(nèi)是否收到所述IC卡發(fā)送的第一個(gè)過程字,是則觸發(fā)第十八判斷子模塊,否則觸發(fā)所述發(fā)送模塊給所述上位機(jī)返回錯(cuò)誤碼;

      所述第十八判斷子模塊,用于判斷接收到的所述第一個(gè)過程字是否等于第一預(yù)設(shè)數(shù)據(jù),是則觸發(fā)丟棄設(shè)定子模塊,否則觸發(fā)第十九判斷子模塊;

      所述丟棄設(shè)定子模塊,用于丟棄接收到的所述第一個(gè)過程字,并重新設(shè)定所述工作等待時(shí)間,等待接收后續(xù)字符,觸發(fā)所述第十七判斷子模塊;

      所述第十九判斷子模塊,用于判斷接收到的第一個(gè)過程字是否為第二預(yù)設(shè)數(shù)據(jù),是則觸發(fā)第二保存設(shè)定子模塊,否則觸發(fā)第二十一判斷子模塊;

      所述第二保存設(shè)定子模塊,用于保存接收到的所述第一個(gè)過程字,并重新設(shè)定所述工作等待時(shí)間;

      第二十判斷子模塊,用于判斷在所述工作等待時(shí)間內(nèi)是否接收到第二個(gè)過程字,是則觸發(fā)第一保存子模塊,否則觸發(fā)所述發(fā)送模塊給所述上位機(jī)返回錯(cuò)誤碼;

      所述第一保存子模塊,保存所述第二個(gè)過程字,觸發(fā)所述發(fā)送模塊給所述上位機(jī)返回操作成功信息;

      所述第二十一判斷子模塊,用于判斷接收到的第一過程字是否為INS字符,是則觸發(fā)第二十二判斷子模塊,否則觸發(fā)第二十六判斷子模塊;

      所述第二十二判斷子模塊,用于判斷是否還有數(shù)據(jù)需要繼續(xù)發(fā)送給所述IC卡,是則觸發(fā)第二十三判斷子模塊,否則觸發(fā)所述第六設(shè)置子模塊;

      所述觸發(fā)第二十三判斷子模塊,用于判斷發(fā)送給所述IC卡指令中的le是否為0,是則觸發(fā)第二十四判斷子模塊,否則觸發(fā)第二十五判斷子模塊;

      所述第二十四判斷子模塊,用于判斷在預(yù)設(shè)時(shí)間內(nèi)是否接收到所述IC卡返回的應(yīng)答數(shù)據(jù),是則觸發(fā)第二保存子模塊,否則觸發(fā)所述發(fā)送模塊給所述上位機(jī)返回錯(cuò)誤信息;

      所述第二保存子模塊,用于保存所述IC卡返回的應(yīng)答數(shù)據(jù),給所述上位機(jī)返回操作成功信息;

      所述第二十五判斷子模塊,用于判斷所述工作等待時(shí)間內(nèi)是否接收到IC卡發(fā)送的指定長(zhǎng)度的數(shù)據(jù),是則觸發(fā)第三保存子模塊,否則觸發(fā)所述發(fā)送模塊給所述上位機(jī)返回錯(cuò)誤信息;

      所述第三保存子模塊,用于保存所述IC卡返回的指令長(zhǎng)度的應(yīng)答數(shù)據(jù),觸發(fā)所述發(fā)送模塊給所述上位機(jī)返回操作成功信息;

      所述第二十六判斷子模塊,用于判斷接收到的第一過程字是否為INS的補(bǔ)碼,是則觸發(fā)第二十七判斷子模塊,否則觸發(fā)所述發(fā)送模塊給所述上位機(jī)返回錯(cuò)誤信息;

      所述觸發(fā)第二十七判斷子模塊,用于判斷是否還有數(shù)據(jù)繼續(xù)發(fā)送給所述IC卡,是則觸發(fā)發(fā)送模塊給所述IC卡發(fā)送一個(gè)字節(jié)的數(shù)據(jù),觸發(fā)所述第六設(shè)置子模塊,否則觸發(fā)第二十八判斷子模塊;

      所述觸發(fā)第二十八判斷子模塊,用于判斷是否接收到所述IC卡返回的一個(gè)字節(jié)數(shù)據(jù),是則觸發(fā)第四保存子模塊,否則觸發(fā)所述發(fā)送模塊給所述上位機(jī)返回錯(cuò)誤信息;

      所述第四保存子模塊,用于保存所述IC卡返回的一個(gè)字節(jié)數(shù)據(jù),觸發(fā)所述第六設(shè)置子模塊。

      其中,所述第五設(shè)置子模塊包括:

      第一判斷單元,用于判斷將要發(fā)送的APDU指令的類型,如為第一預(yù)設(shè)命令則觸發(fā)第一設(shè)置單元,如為第二預(yù)設(shè)命令則觸發(fā)第二設(shè)置單元,如為第三預(yù)設(shè)命令則觸發(fā)第三設(shè)置單元,如為其他則觸發(fā)第四設(shè)置單元;

      所述第一設(shè)置單元用于將所述要發(fā)送的APDU指令中的P3設(shè)置為0x00,發(fā)送數(shù)據(jù)總長(zhǎng)度設(shè)置為5個(gè)字節(jié),Le設(shè)為0;

      所述第二設(shè)置單元用于將所述要發(fā)送的APDU指令中的P3設(shè)置為0x00,發(fā)送數(shù)據(jù)總長(zhǎng)度設(shè)置為與Le相同;

      所述第三設(shè)置單元用于將所述要發(fā)送的APDU指令中的P3設(shè)置為0x00;

      所述第四設(shè)置單元用于將所述要發(fā)送的APDU指令中的Le設(shè)置為APDU數(shù)據(jù)域長(zhǎng)度-1。

      其中,所述安全處理器還包括:

      第十七設(shè)置模塊,用于在應(yīng)用層將金融終端狀態(tài)機(jī)設(shè)置為操作等待狀態(tài);

      第十八判斷模塊,用于在應(yīng)用層判斷當(dāng)前通訊協(xié)議是否為T=1,是則執(zhí)行T=1的數(shù)據(jù)傳送,觸發(fā)第十九判斷模塊,否則執(zhí)行T=0的數(shù)據(jù)傳送,觸發(fā)第十九判斷模塊;

      所述第十九判斷模塊,用于判斷所述金融終端狀態(tài)機(jī)是否為操作等待狀態(tài);

      第二十判斷模塊,用于當(dāng)所述第十九判斷模塊判斷為否時(shí)在傳輸層判斷發(fā)送的數(shù)據(jù)長(zhǎng)度是否大于IC卡的信息域空間,是則觸發(fā)置位發(fā)送模塊,否則觸發(fā)清除發(fā)送模塊;

      置位發(fā)送模塊,用于將鏈接標(biāo)志位置位,根據(jù)所述IC卡的信息域空間將命令數(shù)據(jù)分割為多組數(shù)據(jù)發(fā)送給終端數(shù)據(jù)鏈路層;

      清除發(fā)送模塊,用于清除鏈接標(biāo)志位,將所有的命令數(shù)據(jù)通過一組數(shù)據(jù)發(fā)送給終端數(shù)據(jù)鏈路層;

      封裝發(fā)送模塊,用于在所述數(shù)據(jù)鏈路層把需要傳送的字符數(shù)據(jù)封裝成一幀數(shù)據(jù)塊,并將封裝好的數(shù)據(jù)塊發(fā)送給物理層;

      驗(yàn)證模塊,用于在所述物理層驗(yàn)證接收到的數(shù)據(jù)塊的合法性,如合法則觸發(fā)所述發(fā)送模塊通過I/O口將數(shù)據(jù)塊發(fā)送給所述IC卡,否則觸發(fā)所述發(fā)送模塊給所述上位機(jī)返回錯(cuò)誤碼,結(jié)束。

      其中,所述安全處理器還包括:

      第二十一判斷模塊,用于當(dāng)檢測(cè)到中斷時(shí)判斷中斷類型,如為定時(shí)器中斷則觸發(fā)所述發(fā)送模塊向所述IC卡發(fā)送數(shù)據(jù)塊并觸發(fā)第二使能模塊,如為發(fā)送緩沖器中斷則觸發(fā)第二十一判斷模塊,如為字符發(fā)送完成中斷則觸發(fā)第二十二判斷模塊,如為字符接收完成中斷則觸發(fā)存入模塊;

      所述第二使能模塊,用于使能發(fā)送完成中斷,退出定時(shí)器中斷;

      所述第二十一判斷模塊,用于判斷當(dāng)前數(shù)據(jù)塊中是否還有數(shù)據(jù)未發(fā)送完畢,是則觸發(fā)更新設(shè)定模塊,否則觸發(fā)第一關(guān)閉模塊;

      所述更新設(shè)定模塊,用于更新未發(fā)送完成的數(shù)據(jù)字符個(gè)數(shù),重新設(shè)定塊保護(hù)時(shí)間,準(zhǔn)備發(fā)送下一個(gè)數(shù)據(jù)字符,退出發(fā)送緩沖器中斷;

      第一關(guān)閉模塊:所述安全處理器關(guān)閉字符發(fā)送完成中斷,關(guān)閉定時(shí)器中斷,退出發(fā)送緩沖器中斷;

      所述第二十二判斷模塊,用于判斷數(shù)據(jù)塊中的所有字符是否都已發(fā)送完成,是則觸發(fā)重新設(shè)定模塊,否則觸發(fā)第二開啟模塊;

      所述重新設(shè)定模塊,用于重新設(shè)定塊保護(hù)時(shí)間和塊等待時(shí)間,退出字符發(fā)送完成中斷;

      所述第二開啟模塊,用于在數(shù)據(jù)塊的最后一個(gè)字符開始時(shí),開啟定時(shí)器中斷,退出字符發(fā)送完成中斷;

      所述存入模塊,用于將接收到的數(shù)據(jù)塊頭中的數(shù)據(jù)存入接收緩存區(qū)中;

      第二十三判斷模塊,用于判斷塊保護(hù)時(shí)間是否符合要求,是則觸發(fā)第二十四判斷模塊,否則觸發(fā)第二十五判斷模塊;

      所述第二十四判斷模塊,用于判斷數(shù)據(jù)塊頭是否接收完畢,是則觸發(fā)存入判斷模塊,否則觸發(fā)存入設(shè)置模塊;

      所述存入判斷模塊,用于將接收到的數(shù)據(jù)域的數(shù)據(jù)存入接收緩存區(qū),并判斷接收狀態(tài)機(jī)是否為接收完成狀態(tài),是則觸發(fā)清除模塊,否則退出字符接收完成中斷;

      所述清除模塊,用于清除金融終端狀態(tài)機(jī)的操作等待狀態(tài),退出字符接收完成中斷;

      所述存入設(shè)置模塊,用于將接收到的數(shù)據(jù)域中的數(shù)據(jù)存入接收緩存區(qū),將接收狀態(tài)機(jī)設(shè)置為接收完成狀態(tài),關(guān)閉接收中斷,退出字符接收完成中斷;

      所述第二十五判斷模塊,用于判斷接收緩存區(qū)中的數(shù)據(jù)的長(zhǎng)度是否不超過預(yù)設(shè)長(zhǎng)度,是則觸發(fā)關(guān)閉清除模塊,否則觸發(fā)第二關(guān)閉模塊;

      所述關(guān)閉清除模塊,用于關(guān)閉等待定時(shí)器,將接收狀態(tài)機(jī)設(shè)為接收完成,清除所述金融終端狀態(tài)機(jī)的操作等待狀態(tài),調(diào)用硬件異常處理函數(shù),退出字符接收完成中斷;

      所述第二關(guān)閉模塊,用于關(guān)閉等待定時(shí)器然后重新開啟,退出字符接收完成中斷。

      本發(fā)明與現(xiàn)有技術(shù)相比,具有以下優(yōu)點(diǎn):

      本發(fā)明的技術(shù)方案采用安全處理器內(nèi)置的7816保護(hù)接口,將電氣相關(guān)的功能用安全處理器內(nèi)部軟件代碼來實(shí)現(xiàn),降低了金融終端的成本、縮小體積并提高了產(chǎn)品的可維護(hù)性,使終端設(shè)計(jì)的結(jié)構(gòu)更簡(jiǎn)單、高集成化,還提高了產(chǎn)品的穩(wěn)定性以及簡(jiǎn)化生產(chǎn)工藝。

      附圖說明

      圖1為現(xiàn)有技術(shù)中的金融終端的電路圖;

      圖2為本發(fā)明實(shí)施例一提供的金融終端的電路圖;

      圖3為實(shí)施例二提供的一種安全處理器的工作方法流程圖;

      圖4為實(shí)施例三提供的一種安全處理器的工作方法流程圖;

      圖5為實(shí)施例四提供一種安全處理器通過7816控制器根據(jù)復(fù)位應(yīng)答數(shù)據(jù)判斷上電復(fù)位操作是否成功的實(shí)現(xiàn)方法流程圖;

      圖6為實(shí)施例五提供一種安全處理器通過串口根據(jù)復(fù)位應(yīng)答數(shù)據(jù)判斷上電復(fù)位操作是否成功的實(shí)現(xiàn)方法流程圖;

      圖7和圖8為實(shí)施例六提供一種安全處理器使用應(yīng)用協(xié)議數(shù)據(jù)單元的數(shù)據(jù)塊交互函數(shù)執(zhí)行交易的實(shí)現(xiàn)方法流程圖;

      圖9為實(shí)施例七提供一種安全處理器在各個(gè)網(wǎng)絡(luò)層之間接收發(fā)送數(shù)據(jù)的實(shí)現(xiàn)方法流程圖;

      圖10為實(shí)施例八提供一種安全處理器執(zhí)行T=1的數(shù)據(jù)傳送的實(shí)現(xiàn)方法流程圖;

      圖11為實(shí)施例九提供一種金融終端上的安全處理器的方框圖。

      具體實(shí)施方式

      下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。

      實(shí)施例一

      本發(fā)明實(shí)施例一提供一種金融終端,如圖2所示,安全處理器MCU直接與卡槽連接。具體的,在本實(shí)施例中,MCU通過八個(gè)引腳VCC、RST、CLK、C4、GND、I/O、C8、DET與卡槽的C1、C2、C3、C4、C5、C6、C7、C8連接。其中金融終端的電氣特性由安全處理器的內(nèi)部的電平轉(zhuǎn)換電路和短路保護(hù)電路實(shí)現(xiàn),而金融終端相關(guān)的邏輯接口由軟件代碼來設(shè)置,傳輸協(xié)議中終端傳輸層(TTL)、應(yīng)用層由軟件來完成,再將安全處理器MCU的I/O直接連接到卡槽的相關(guān)引腳以滿足其機(jī)械特性的要求,將底層的電氣、通訊協(xié)議測(cè)試集成在安全處理器的內(nèi)部,即通過安全處理器上的軟件代碼來實(shí)現(xiàn)金融終端與卡片之間的數(shù)據(jù)通訊。

      在本發(fā)明實(shí)施例中,控制芯片的引腳直接連接到卡槽的引腳處,通過處理器直接訪問接觸卡。

      本實(shí)施例中的金融終端還可以包括按鍵和/或顯示屏,均與安全處理器連接。

      實(shí)施例二

      本發(fā)明實(shí)施例二提供一種安全處理器的工作方法,該安全處理器設(shè)置在實(shí)施例一中的金融終端中,金融終端與測(cè)試系統(tǒng)相連接進(jìn)行工作,測(cè)試系統(tǒng)包括IC卡,如圖3所示,本實(shí)施例方法包括:

      步驟S1:當(dāng)安全處理器檢測(cè)到卡槽中有IC卡插入時(shí),安全處理器向IC卡發(fā)送上電復(fù)位指令,并等待接收IC卡返回的復(fù)位應(yīng)答數(shù)據(jù);

      步驟S2:當(dāng)安全處理器接收到復(fù)位應(yīng)答數(shù)據(jù)后,判斷上電復(fù)位是否成功,是則執(zhí)行步驟S3,否則執(zhí)行步驟S6;

      步驟S3:安全處理器向IC卡發(fā)送選擇應(yīng)用環(huán)境指令,并判斷是否接收到IC卡返回的正確選擇應(yīng)答,是則執(zhí)行步驟S4,否則報(bào)錯(cuò);

      步驟S4:安全處理器向IC卡發(fā)送數(shù)據(jù)交互指令,并判斷是否接收到IC卡返回的正確交互應(yīng)答,是則執(zhí)行步驟S5,否則報(bào)錯(cuò);

      在本實(shí)施例中,數(shù)據(jù)交互指令包括外部認(rèn)證指令,外部認(rèn)證指令用于IC卡向終端設(shè)備發(fā)送一個(gè)密文,終端設(shè)備對(duì)該密文進(jìn)行解密,解密成功則認(rèn)證通過,解密失敗則認(rèn)證未通過;

      步驟S5:安全處理器判斷本次操作是否完成,是則執(zhí)行步驟S6,否則返回步驟S4;

      步驟S6:安全處理器對(duì)IC卡執(zhí)行下電操作,當(dāng)檢測(cè)到IC卡被拔出時(shí)返回步驟S1。

      實(shí)施例三

      本發(fā)明實(shí)施例三提供一種安全處理器的工作方法,如圖4所示,包括:

      步驟101:安全處理器查詢卡槽中是否有IC卡插入,是則執(zhí)行步驟102,否則執(zhí)行步驟101;

      在本實(shí)施例中,在步驟101之前需進(jìn)行初始化,有兩種實(shí)現(xiàn)方式;

      (1)第一種方式安全處理器與7816芯片連接,進(jìn)行初始化具體包括:

      步驟a1:安全處理器將卡槽中與IC卡相關(guān)的引腳進(jìn)行初始化配置;

      步驟a2:安全處理器將ATR時(shí)鐘定時(shí)器溢出時(shí)間設(shè)置為第一預(yù)設(shè)值;

      具體的,本實(shí)施例中的第一預(yù)設(shè)值為32400個(gè)時(shí)鐘周期;

      步驟a3:安全處理器判斷ATR時(shí)鐘定時(shí)器是否溢出,是則執(zhí)行步驟a4,否則返回步驟a3;

      步驟a4:安全處理器將安全處理器中與IC卡的復(fù)位引腳相關(guān)的引腳設(shè)為高電平,開啟中斷程序,將ATR時(shí)鐘定時(shí)器的溢出時(shí)間設(shè)置為第二預(yù)設(shè)值,將接收狀態(tài)機(jī)設(shè)置接收初始字符,將金融終端狀態(tài)機(jī)設(shè)置為操作等待;

      具體的,本實(shí)施例中的第二預(yù)設(shè)值為42000個(gè)時(shí)鐘周期;

      步驟a5:安全處理器判斷金融終端狀態(tài)機(jī)是否為操作等待狀態(tài),是則繼續(xù)步驟101,否則返回步驟a5;

      (2)第二種安全處理器中安全處理器直接與卡槽連接,進(jìn)行初始化具體包括:

      步驟b1:安全處理器將卡槽中與IC卡相關(guān)的引腳進(jìn)行初始化配置;

      具體的,本實(shí)施例中的步驟b1包括:將卡槽中與IC卡電源引腳相關(guān)的引腳禁止供電,即VCC='0';將卡槽中與IC卡復(fù)位引腳相關(guān)的引腳設(shè)為低電平,即RST='0';將卡槽中與IC卡時(shí)鐘引腳相關(guān)的引腳設(shè)為低電平,即CLK='0';將卡槽中與IC卡數(shù)據(jù)引腳相關(guān)的引腳設(shè)為低電平,即I/O='0';

      步驟b2:安全處理器設(shè)置通訊參數(shù)的缺省值;

      具體的,本實(shí)施例中的步驟b2包括:設(shè)置傳輸層使用T=0協(xié)議;卡片狀態(tài)設(shè)為未上電;設(shè)置時(shí)鐘速率轉(zhuǎn)換因子整數(shù)值Fi=1;設(shè)置位速率調(diào)節(jié)因子整數(shù)值Di=1;字符傳輸設(shè)為正向邏輯約定;字符的校驗(yàn)使用LRC方式;額外保護(hù)時(shí)間N=1;工作等待時(shí)間整數(shù)WI=10;使用格式字符定時(shí)器實(shí)現(xiàn)ETU計(jì)數(shù):即372個(gè)CLK增加1個(gè)ETU,PWM初始化,準(zhǔn)備為IC卡提供時(shí)鐘;

      步驟b3:安全處理器根據(jù)通訊參數(shù)計(jì)算時(shí)序控制參數(shù):

      具體的,本實(shí)施例中的步驟b3包括:通過Fi查表獲取時(shí)鐘速率轉(zhuǎn)換因子F值;通過Di查表獲取位速率調(diào)節(jié)因子D值;T=0協(xié)議的字符間的保護(hù)時(shí)間為2個(gè)ETU;通過工作等待時(shí)間整數(shù)WI和額外保護(hù)時(shí)間N計(jì)算工作等待時(shí)間WWT;

      步驟b4:安全處理器啟動(dòng)冷復(fù)位時(shí)序;

      具體的,本實(shí)施例中的步驟b4包括:向卡槽中與IC卡相關(guān)的引腳提供VCC電源;UART初始化,關(guān)閉接收中斷,根據(jù)時(shí)鐘速率轉(zhuǎn)換因子F值、位速率調(diào)節(jié)因子D值以及CLK設(shè)定通訊波特率,校驗(yàn)?zāi)J皆O(shè)為偶校驗(yàn);數(shù)據(jù)格式為1個(gè)起始位+8個(gè)數(shù)據(jù)位+1個(gè)校驗(yàn)位;使能PWM方波輸出,向卡槽中與IC卡時(shí)鐘引腳相關(guān)的引腳提供CLK;將卡槽中與IC卡復(fù)位引腳RST相關(guān)的引腳設(shè)為低電平,并保持40000到45000個(gè)CLK時(shí)鐘周期;將卡槽中與IC卡復(fù)位引腳RST相關(guān)的引腳設(shè)為高電平;

      步驟b5:安全處理器使能UART接收中斷,準(zhǔn)備接收IC卡發(fā)送的復(fù)位應(yīng)答數(shù)據(jù);

      在本實(shí)施例中,當(dāng)安全處理器硬件接收到數(shù)據(jù)時(shí)進(jìn)入U(xiǎn)ART接收中斷,接收IC卡返回的數(shù)據(jù),數(shù)據(jù)接收完成后退出UART接收中斷;

      在本實(shí)施例中,步驟b5中還包括:開啟接收中斷、時(shí)鐘定時(shí)器超時(shí)中斷、奇偶校驗(yàn)錯(cuò)誤中斷、等待定時(shí)器中斷等中斷程序;

      步驟102:安全處理器向IC卡發(fā)送上電復(fù)位指令,并等待接收IC卡返回的復(fù)位應(yīng)答數(shù)據(jù);

      步驟103:當(dāng)安全處理器接收到復(fù)位應(yīng)答數(shù)據(jù)后,判斷上電復(fù)位是否成功,是則執(zhí)行步驟104,否則執(zhí)行步驟107;

      在本實(shí)施例中,步驟103有兩種實(shí)現(xiàn)方法,具體的在實(shí)施例四和實(shí)施例五中進(jìn)行詳述;

      步驟104:安全處理器向IC卡發(fā)送選擇應(yīng)用環(huán)境指令,并判斷是否接收到IC卡返回的正確選擇應(yīng)答,是則執(zhí)行步驟105,否則報(bào)錯(cuò);

      步驟105:安全處理器向IC卡發(fā)送數(shù)據(jù)交互指令,并判斷是否接收到IC卡返回的正確交互應(yīng)答,是則執(zhí)行步驟106,否則報(bào)錯(cuò);

      在本實(shí)施例中,步驟105有兩種實(shí)現(xiàn)方法,具體的在實(shí)施例四和實(shí)施例五中進(jìn)行詳述;

      步驟106:安全處理器判斷本次操作是否完成,是則執(zhí)行步驟107,否則返回步驟105;

      步驟107:安全處理器對(duì)IC卡執(zhí)行下電操作,當(dāng)檢測(cè)到卡槽中的IC卡被拔出時(shí),返回步驟101。

      實(shí)施例四

      本發(fā)明實(shí)施例四提供一種安全處理器根據(jù)復(fù)位應(yīng)答數(shù)據(jù)判斷上電復(fù)位操作是否成功的實(shí)現(xiàn)方法,如圖5所示,包括:

      步驟201:當(dāng)安全處理器檢測(cè)到中斷時(shí),判斷中斷類型,如為時(shí)鐘定時(shí)器超時(shí)中斷則執(zhí)行步驟202,如為奇偶校驗(yàn)錯(cuò)誤中斷則執(zhí)行步驟203,如為等待定時(shí)器中斷則執(zhí)行步驟204;如為接收中斷則執(zhí)行步驟207;

      步驟202:安全處理器關(guān)閉時(shí)鐘定時(shí)器,將金融終端狀態(tài)機(jī)設(shè)置為接收超時(shí),退出時(shí)鐘定時(shí)器超時(shí)中斷;

      步驟203:安全處理器將卡槽上與IC卡的復(fù)位引腳相關(guān)的引腳設(shè)為低電平,將金融終端狀態(tài)機(jī)設(shè)為奇偶檢驗(yàn)錯(cuò)誤,將IC卡的時(shí)鐘信號(hào)關(guān)閉,退出奇偶校驗(yàn)錯(cuò)誤中斷;

      在本實(shí)施例中,IC卡的時(shí)鐘信號(hào)用于安全處理器通過卡槽與IC進(jìn)行通訊,關(guān)閉該IC卡的時(shí)鐘信號(hào)后通訊中斷;

      步驟204:安全處理器判斷是否接收到多余字符,是則執(zhí)行步驟205,否則執(zhí)行步驟206;

      步驟205:安全處理器將金融終端狀態(tài)機(jī)設(shè)置為塊保護(hù)時(shí)間錯(cuò)誤,執(zhí)行步驟206;

      步驟206:安全處理器關(guān)閉接收中斷;將接收狀態(tài)機(jī)設(shè)置為接收完成,退出等待定時(shí)器中斷;

      步驟207:安全處理器保存接收到的字符,重新設(shè)置字符保護(hù)時(shí)間,執(zhí)行步驟208;

      具體的,在本實(shí)施例中,安全處理器重新設(shè)置字符保護(hù)時(shí)間為10190個(gè)ETU(英文全稱elementary time unit,中文全稱:位持續(xù)時(shí)間);

      步驟208:安全處理器判斷接收到的字符的類型;如為初始字符則執(zhí)行步驟209;如為格式字符則執(zhí)行步驟211;如為接口字符則執(zhí)行步驟216;如為歷史字符則執(zhí)行步驟226;如為校驗(yàn)字符則執(zhí)行步驟230;

      步驟209:安全處理器將等待定時(shí)器設(shè)置20180個(gè)ETU,將接收狀態(tài)機(jī)設(shè)為接收格式字符;

      步驟210:安全處理器判斷初始字符的邏輯方向是否錯(cuò)誤,是則將金融終端狀態(tài)機(jī)設(shè)置為參數(shù)無效,執(zhí)行步驟231,否則直接執(zhí)行步驟231;

      步驟211:安全處理器判斷是否保存有第一組接口字符,是則執(zhí)行步驟212,否則執(zhí)行步驟213;

      在本實(shí)施例中,格式字符的高四位對(duì)應(yīng)四個(gè)接口字符,判斷格式字符的高四位中是否全部為0,說明沒有第一組接口字符,否則保存有第一組接口字符;

      步驟212:安全處理器將接收狀態(tài)機(jī)設(shè)為接收接口字符,執(zhí)行步驟231;

      步驟213:安全處理器判斷是否保存有歷史字符,是則執(zhí)行步驟214,否則執(zhí)行步驟215;

      步驟214:安全處理器將接收狀態(tài)機(jī)設(shè)為接收歷史字符,記錄歷史字符的數(shù)量,執(zhí)行步驟231;

      步驟215:安全處理器將接收狀態(tài)機(jī)設(shè)為接收額外字符,設(shè)置等待定時(shí)器為25etu,執(zhí)行步驟231;

      步驟216:安全處理器將第一個(gè)協(xié)議組作為當(dāng)前協(xié)議組;

      步驟217:安全處理器根據(jù)當(dāng)前協(xié)議組最后一個(gè)接口字符計(jì)算下一組字符的接口字符數(shù)量;

      步驟218:安全處理器通過當(dāng)前協(xié)議本組最后一個(gè)接口字符判斷是否還有下一組接口字符,是則執(zhí)行步驟219;否則執(zhí)行步驟220;

      在本實(shí)施例中,最后一個(gè)接口字符為1個(gè)字節(jié)的數(shù)據(jù),其高四位對(duì)應(yīng)四個(gè)接口字符,如高四位全部為0則下一組字符的接口字符不存在;

      步驟219:安全處理器將參與計(jì)算應(yīng)答數(shù)據(jù)的校驗(yàn)值的字符數(shù)自加1,執(zhí)行步驟220;

      步驟220:安全處理器判斷是否已經(jīng)接收到最后一個(gè)接口字符,是則執(zhí)行步驟221,否則將下一個(gè)協(xié)議組作為當(dāng)前協(xié)議組,返回步驟217;

      步驟221:安全處理器判斷是否已計(jì)錄歷史字符數(shù)量,是則執(zhí)行步驟222,否則執(zhí)行步驟223;

      步驟222:安全處理器更新歷史字符數(shù)量,將接收狀態(tài)機(jī)設(shè)置為接收歷史字符,執(zhí)行步驟231;

      步驟223:安全處理器判斷是否計(jì)算應(yīng)答數(shù)據(jù)的檢驗(yàn)值,是則執(zhí)行步驟224,否則執(zhí)行步驟225;

      步驟224:安全處理器將接收狀態(tài)機(jī)設(shè)置為接收校驗(yàn)字符,執(zhí)行步驟231;

      步驟225:安全處理器將接收狀態(tài)機(jī)設(shè)置為接收額外字符,設(shè)置等待定時(shí)器的時(shí)間為25etu,執(zhí)行步驟231;

      步驟226:安全處理器判斷所有的歷史字符是否都已接收完畢,是則執(zhí)行步驟231,否則執(zhí)行步驟227;

      具體的,在本實(shí)施例中,安全處理器根據(jù)格式字符計(jì)算得到歷史字符的個(gè)數(shù),判斷歷史字符的個(gè)數(shù)是否等于預(yù)設(shè)值,是則歷史字符都已接收完畢,否則歷史字符未接收完畢;

      步驟227:安全處理器判斷是否需要執(zhí)行數(shù)據(jù)校驗(yàn),是則執(zhí)行步驟228,否則執(zhí)行步驟229;

      步驟228:安全處理器將接收狀態(tài)機(jī)設(shè)置為接收校驗(yàn)字符,執(zhí)行步驟231;

      步驟229:安全處理器將接收狀態(tài)機(jī)設(shè)置為接收額外字符,執(zhí)行步驟231;

      步驟230:安全處理器將接收狀態(tài)機(jī)設(shè)置為接收額外字符,執(zhí)行步驟231;

      步驟231:安全處理器判斷金融終端狀態(tài)機(jī),如為接收完成則執(zhí)行步驟232,如為參數(shù)無效則直接退出接收中斷,如為其他則執(zhí)行步驟234;

      步驟232:安全處理器判斷接收參數(shù)過程中是否出錯(cuò),是則調(diào)用接收異常處理函數(shù)進(jìn)行操作,操作完成后退出接收中斷,否則執(zhí)行步驟233;

      步驟233:安全處理器將金融終端狀態(tài)機(jī)設(shè)置為空閑狀態(tài),并解析接收到的復(fù)位應(yīng)答數(shù)據(jù),解析完成后退出接收中斷;

      在本實(shí)施例中,復(fù)位應(yīng)答數(shù)據(jù)包括:初始字符、格式字符、接口字符、歷史字符、校驗(yàn)字符;

      步驟234:安全處理器重新向IC卡發(fā)命令,并重新設(shè)置等待定時(shí)器,退出接收中斷。

      實(shí)施例五

      本發(fā)明實(shí)施例五提供一種安全處理器根據(jù)復(fù)位應(yīng)答數(shù)據(jù)判斷上電復(fù)位操作是否成功的實(shí)現(xiàn)方法,具體是通過串口實(shí)現(xiàn)的,如圖6所示,包括:

      步驟301:安全處理器等待接收初始字符,并設(shè)置第一接收定時(shí)器;

      具體的,在本實(shí)施例中,設(shè)置接收定時(shí)器包括:設(shè)置定時(shí)器定時(shí)400-400000時(shí)鐘周期接收初始字符;

      在本實(shí)施例中,收初始字符為復(fù)位應(yīng)答數(shù)據(jù)(即ATR)里的數(shù)據(jù);

      步驟302:安全處理器判斷是否接收到初始字符,是則執(zhí)行步驟303,否則給上位機(jī)返回ATR接收超時(shí)信息;

      步驟303:安全處理器判斷接收到的初始字符是否為第一預(yù)設(shè)值,是則執(zhí)行步驟306,否則執(zhí)行步驟304;

      在本實(shí)施例中,第一預(yù)設(shè)值具體為0X3B;

      步驟304:安全處理器判斷接收到的初始字符是否為第二預(yù)設(shè)值,是則執(zhí)行步驟305,否則給上位機(jī)返回ATR接收出錯(cuò)信息;

      在本實(shí)施例中,第二預(yù)設(shè)值具體為0X3F;

      步驟305:安全處理器將字符傳輸?shù)倪壿嫾s定設(shè)置為反向約定,執(zhí)行步驟307;

      步驟306:安全處理器將字符傳輸?shù)倪壿嫾s定設(shè)置為正向約定,執(zhí)行步驟307;

      步驟307:安全處理器將接收到的初始字符保存到ATR緩存區(qū)中,等待接收格式字符,并設(shè)定第二接收定時(shí)器;

      具體的,在本實(shí)施例中,設(shè)置第二接收定時(shí)器具體為:設(shè)置第二定時(shí)器控制安全處理器每隔10080etu接收格式字符;

      步驟308:安全處理器判斷在第二定時(shí)器的設(shè)定時(shí)間內(nèi)是否接收到格式字符,是則執(zhí)行步驟309,否則給上位機(jī)返回ATR接收超時(shí)信息;

      步驟309:安全處理器根據(jù)設(shè)置好的邏輯約定轉(zhuǎn)換格式字符,并將轉(zhuǎn)換后的格式字符保存到ATR緩存區(qū)中,根據(jù)格式字符計(jì)算歷史字符長(zhǎng)度并保存,將ATR緩存區(qū)中的第一個(gè)協(xié)議組作為當(dāng)前協(xié)議組;

      步驟310:安全處理器判斷ATR緩存區(qū)中的數(shù)據(jù)的長(zhǎng)度是否超過預(yù)設(shè)長(zhǎng)度,是則執(zhí)行步驟318,否則將當(dāng)前協(xié)議組中的第一個(gè)接口字符作為當(dāng)前接口字符,執(zhí)行步驟311;

      步驟311:安全處理器判斷當(dāng)前接口字符是否超出當(dāng)前協(xié)議組中的接口字符長(zhǎng)度,是則執(zhí)行步驟312,否則執(zhí)行步驟314;

      步驟312:安全處理器將ATR緩沖區(qū)中的下一個(gè)協(xié)議組作為當(dāng)前協(xié)議組,獲取當(dāng)前協(xié)議組中的第四個(gè)接口字符作為當(dāng)前接口字符;

      具體的,在本實(shí)施例中,一個(gè)協(xié)議組中包含[TA][TB][TC][TD]共四個(gè)接口字符,這些接口字符是否存在,是由上個(gè)協(xié)議組中的TD中的高四位決定;

      步驟313:安全處理器判斷ATR緩存區(qū)中的數(shù)據(jù)的長(zhǎng)度是否超過預(yù)設(shè)長(zhǎng)度,是則執(zhí)行步驟318,否則返回步驟311;

      步驟314:安全處理器通過格式字符判斷當(dāng)前協(xié)議組的接口字符中是否存在接口字符,是則執(zhí)行步驟315,否則執(zhí)行步驟317;

      具體的,在本實(shí)施例中,接口字符為[TAi][TBi][TCi][TDi];

      步驟315:安全處理器判斷在第一預(yù)設(shè)時(shí)間內(nèi)是否收到接口字符,是則執(zhí)行步驟316,否則給上位機(jī)返回ATR接收超時(shí)信息;

      具體的,本實(shí)施例中的第一預(yù)設(shè)時(shí)間為10080etu;

      步驟316:安全處理器根據(jù)設(shè)置好的邏輯約定進(jìn)行接口字符轉(zhuǎn)換,并將轉(zhuǎn)換后的接口字符保存到ATR緩存區(qū)中,執(zhí)行步驟317;

      步驟317:安全處理器將當(dāng)前協(xié)議組中的下一個(gè)接口字符作為當(dāng)前接口字符,返回步驟311;

      步驟318:安全處理器根據(jù)歷史字符長(zhǎng)度判斷是否接收完所有的歷史字符,是則執(zhí)行步驟321,否則執(zhí)行步驟319;

      步驟319:安全處理器判斷在第一預(yù)設(shè)時(shí)間內(nèi)是否收到歷史字符,是則執(zhí)行步驟320,否則給上位機(jī)返回ATR接收超時(shí)信息;

      步驟320:安全處理器根據(jù)設(shè)置好的邏輯約定進(jìn)行歷史字符轉(zhuǎn)換,將轉(zhuǎn)換后的歷史字符保存到ATR緩存區(qū)中;

      步驟321:安全處理器遍歷ATR緩存區(qū)中每個(gè)協(xié)議組中的第四接口字符,查詢是否存在T=1協(xié)議,是則執(zhí)行步驟322,否則給上位機(jī)返回ATR接收成功信息;

      在本實(shí)施例中,如果第四接口字符的低四位為0001則存在T=1協(xié)議;

      步驟322:安全處理器判斷在第一預(yù)設(shè)時(shí)間內(nèi)是否接收到校驗(yàn)字符,是則執(zhí)行步驟323,否則給上位機(jī)返回ATR接收超時(shí)信息;

      步驟323:安全處理器根據(jù)設(shè)置好的邏輯約定進(jìn)行校驗(yàn)字符轉(zhuǎn)換;并將轉(zhuǎn)換后的校驗(yàn)字符保存到ATR緩存區(qū)中,給上位機(jī)返回ATR接收成功信息。

      實(shí)施例六

      本發(fā)明實(shí)施例六提供一種安全處理器使用應(yīng)用協(xié)議數(shù)據(jù)單元的數(shù)據(jù)塊交互函數(shù)執(zhí)行交易的實(shí)現(xiàn)方法,具體是通過UART模擬7816傳輸層通訊協(xié)議來實(shí)現(xiàn)的,如圖7和圖8所示,本實(shí)施例的方法包括:

      步驟401:安全處理器根據(jù)復(fù)位應(yīng)答(ATR)數(shù)據(jù)設(shè)定位持續(xù)時(shí)間(ETU),將相關(guān)變量初始化;

      具體的,在本實(shí)施例中,將相關(guān)變量初始化包括:設(shè)置時(shí)鐘速率轉(zhuǎn)換因子整數(shù)值F;設(shè)置位速率調(diào)節(jié)因子整數(shù)值D;字符傳輸設(shè)為正向邏輯約定;字符的校驗(yàn)使用LRC方式;額外保護(hù)時(shí)間N;工作等待時(shí)間整數(shù)WI;

      步驟402:安全處理器判斷IC卡是否已插入且處于激活狀態(tài),是則執(zhí)行步驟403,否則給上位機(jī)返回IC卡無響應(yīng)信息;

      步驟403:安全處理器判斷發(fā)送的APDU指令(數(shù)據(jù)交互指令)是否為PPS指令,是則執(zhí)行步驟404,否則執(zhí)行步驟407;

      具體的,在本實(shí)施例中,安全處理器判斷發(fā)送的APDU指令中的CLA是否為0xff,是則發(fā)送的APDU指令為PPS指令,否則發(fā)送的APDU指令不為PPS指令;

      步驟404:安全處理器判斷ATR緩沖區(qū)中是否有預(yù)設(shè)接口字符,是則執(zhí)行步驟405,否則給上位機(jī)返回指令取消信息;

      在本實(shí)施例中,預(yù)設(shè)接口字符為TA1;

      步驟405:安全處理器與IC卡進(jìn)行PPS參數(shù)協(xié)商操作,并判斷協(xié)商操作是否成功,是則執(zhí)行步驟406,否則對(duì)IC卡進(jìn)行下電操作,并給上位機(jī)返回錯(cuò)誤信息;

      步驟406:安全處理器使用協(xié)商成功的參數(shù)開始與IC卡進(jìn)行通訊;

      步驟407:安全處理器判斷將要發(fā)送的APDU指令的類型,如為第一預(yù)設(shè)命令,是則執(zhí)行步驟408,如為第二預(yù)設(shè)命令則執(zhí)行步驟409,如為第三預(yù)設(shè)命令則執(zhí)行步驟410,如為其他則執(zhí)行步驟411;

      在本實(shí)施例中,第一預(yù)設(shè)命令為CASE1、第二預(yù)設(shè)命令為CASE2、第二預(yù)設(shè)命令為CASE3;

      在本實(shí)施例中,步驟407具體為:安全處理器判斷發(fā)送的APDU指令中的數(shù)據(jù)域長(zhǎng)度,如等于4個(gè)字節(jié)則發(fā)送的APDU指令為CASE1命令,如等于5個(gè)字節(jié)則發(fā)送的APDU指令為CASE2命令,如等于Lc加上5個(gè)字節(jié)的數(shù)值則發(fā)送的APDU指令為CASE3命令;

      具體的,在本實(shí)施例中,步驟408-411為根據(jù)不同的預(yù)設(shè)命令類型設(shè)置將要發(fā)送的APDU指令;

      步驟408:安全處理器將要發(fā)送的APDU指令中的P3(Lc)設(shè)置為0x00,發(fā)送數(shù)據(jù)總長(zhǎng)度設(shè)置為5個(gè)字節(jié),Le設(shè)為0,執(zhí)行步驟412;

      步驟409:安全處理器將要發(fā)送的APDU指令中的P3(Lc)設(shè)置為0x00,發(fā)送數(shù)據(jù)總長(zhǎng)度設(shè)置為與Le相同,執(zhí)行步驟412;

      步驟410:安全處理器將要發(fā)送的APDU指令中的P3(Lc)設(shè)置為0x00,執(zhí)行步驟412;

      步驟411:安全處理器將要發(fā)送的APDU指令中的Le設(shè)置為APDU數(shù)據(jù)域長(zhǎng)度-1,執(zhí)行步驟412;

      步驟412:安全處理器將要發(fā)送的APDU指令發(fā)送給IC卡,并判斷是否發(fā)送成功,是則執(zhí)行步驟413,否則給上位機(jī)返回錯(cuò)誤碼;

      步驟413:安全處理器設(shè)置工作等待時(shí)間;

      具體的,在本實(shí)施例中,安全處理器設(shè)置工作等待時(shí)間=960×D×WI;

      步驟414:安全處理器判斷在工作等待時(shí)間內(nèi)是否收到IC卡發(fā)送的第一個(gè)過程字,是則執(zhí)行步驟415,否則給上位機(jī)返回錯(cuò)誤碼;

      步驟415:安全處理器判斷接收到的第一個(gè)過程字是否等于第一預(yù)設(shè)數(shù)據(jù),是則執(zhí)行步驟416,否則執(zhí)行步驟417;

      具體的,本實(shí)施例中的第一預(yù)設(shè)數(shù)據(jù)為0x60;

      步驟416:安全處理器丟棄接收到的第一個(gè)過程字,并重新設(shè)定工作等待時(shí)間,等待接收后續(xù)字符,返回步驟414;

      步驟417:安全處理器判斷接收到的第一個(gè)過程字是否為第二預(yù)設(shè)數(shù)據(jù),是則執(zhí)行步驟418,否則執(zhí)行步驟421;

      具體的,本實(shí)施例中的第二預(yù)設(shè)數(shù)據(jù)為0x6x或0x9x;

      步驟418:安全處理器保存接收到的第一個(gè)過程字,并重新設(shè)定工作等待時(shí)間,等待接收第二個(gè)過程字,執(zhí)行步驟419;

      具體的,在本實(shí)施例中,安全處理器接收到的第一個(gè)過程字為SW1;

      步驟419:安全處理器判斷在工作等待時(shí)間內(nèi)是否接收到第二個(gè)過程字,是則執(zhí)行步驟420,否則給上位機(jī)返回錯(cuò)誤碼;

      具體的,在本實(shí)施例中,安全處理器接收到的第二個(gè)過程字為SW2;

      步驟420:安全處理器保存第二個(gè)過程字,給上位機(jī)返回操作成功信息;

      步驟421:安全處理器判斷接收到的第一過程字是否為INS字符,是則執(zhí)行步驟422,否則執(zhí)行步驟428;

      步驟422:安全處理器判斷是否還有數(shù)據(jù)需要繼續(xù)發(fā)送給IC卡,是則執(zhí)行步驟423,否則返回步驟413;

      步驟423:安全處理器判斷發(fā)送給IC卡指令中的le是否為0,是則執(zhí)行步驟424,否則執(zhí)行步驟426;

      步驟424:安全處理器判斷在預(yù)設(shè)時(shí)間內(nèi)是否接收到IC卡返回的應(yīng)答數(shù)據(jù),是則執(zhí)行步驟425,否則給上位機(jī)返回錯(cuò)誤信息;

      步驟425:安全處理器保存IC卡返回的應(yīng)答數(shù)據(jù),給上位機(jī)返回操作成功信息;

      步驟426:安全處理器判斷工作等待時(shí)間內(nèi)是否接收到IC卡發(fā)送的指定長(zhǎng)度的數(shù)據(jù),是則執(zhí)行步驟427,否則給上位機(jī)返回錯(cuò)誤信息;

      步驟427:安全處理器保存IC卡返回的指令長(zhǎng)度的應(yīng)答數(shù)據(jù),給上位機(jī)返回操作成功信息;

      步驟428:安全處理器判斷接收到的第一過程字是否為INS的補(bǔ)碼,是則執(zhí)行步驟429,否則給上位機(jī)返回錯(cuò)誤信息;

      步驟429:安全處理器判斷是否還有數(shù)據(jù)繼續(xù)發(fā)送給IC卡,是則執(zhí)行步驟430,否則執(zhí)行步驟431;

      步驟430:安全處理器給IC卡發(fā)送一個(gè)字節(jié)的數(shù)據(jù),返回步驟413;

      步驟431:安全處理器判斷是否接收到IC卡返回的一個(gè)字節(jié)數(shù)據(jù),是則執(zhí)行步驟432,否則給上位機(jī)返回錯(cuò)誤信息;

      步驟432:安全處理器保存IC卡返回的一個(gè)字節(jié)數(shù)據(jù),返回步驟413。

      實(shí)施例七

      本發(fā)明實(shí)施例七提供一種安全處理器在各個(gè)網(wǎng)絡(luò)層之間接收發(fā)送數(shù)據(jù)的實(shí)現(xiàn)方法,網(wǎng)絡(luò)層包括應(yīng)用層、傳輸層、數(shù)據(jù)鏈路層、物理層,如圖9所示,本實(shí)施例的方法包括:

      步驟601:安全處理器在應(yīng)用層將金融終端狀態(tài)機(jī)設(shè)置為操作等待狀態(tài);

      步驟602:安全處理器在應(yīng)用層判斷當(dāng)前通訊協(xié)議是否為T=1,是則執(zhí)行T=1的數(shù)據(jù)傳送,執(zhí)行步驟603,否則執(zhí)行T=0的數(shù)據(jù)傳送,執(zhí)行步驟603;

      具體的,在本實(shí)施例中,執(zhí)行T=1的數(shù)據(jù)傳送在實(shí)施例八進(jìn)行詳述;

      步驟603:安全處理器判斷金融終端狀態(tài)機(jī)是否為操作等待狀態(tài),是則返回步驟603,否則執(zhí)行步驟604;

      步驟604:安全處理器在傳輸層判斷發(fā)送的數(shù)據(jù)長(zhǎng)度是否大于IC卡的信息域空間,是則執(zhí)行步驟605,否則執(zhí)行步驟606;

      步驟605:安全處理器將鏈接標(biāo)志位置位,根據(jù)IC卡的信息域空間將命令數(shù)據(jù)分割為多組數(shù)據(jù)發(fā)送給終端數(shù)據(jù)鏈路層,執(zhí)行步驟607;

      步驟606:安全處理器清除鏈接標(biāo)志位,將所有的命令數(shù)據(jù)通過一組數(shù)據(jù)發(fā)送給終端數(shù)據(jù)鏈路層,執(zhí)行步驟607;

      步驟607:安全處理器在數(shù)據(jù)鏈路層把需要傳送的字符數(shù)據(jù)封裝成一幀數(shù)據(jù)塊;

      具體的,在本實(shí)施例中,步驟607包括:安全處理器把終端傳輸層傳送過來的數(shù)據(jù)作為數(shù)據(jù)塊的信息域,在信息域前面添加一個(gè)數(shù)據(jù)塊頭域,在信息域的結(jié)尾處添加一個(gè)尾域。數(shù)據(jù)塊頭域用來控制數(shù)據(jù)塊的傳輸,尾域用來對(duì)數(shù)據(jù)塊的數(shù)據(jù)塊頭域和信息域進(jìn)行錯(cuò)誤校驗(yàn);

      步驟608:安全處理器將封裝好的數(shù)據(jù)塊發(fā)送給物理層;

      步驟609:安全處理器在物理層驗(yàn)證接收到的數(shù)據(jù)塊的合法性,如合法則執(zhí)行步驟610,如不合法則給上位機(jī)返回錯(cuò)誤碼,結(jié)束;

      步驟610:安全處理器通過I/O口將數(shù)據(jù)塊發(fā)送給IC卡。

      實(shí)施例八

      本發(fā)明實(shí)施例八提供一種安全處理器執(zhí)行T=1的數(shù)據(jù)傳送的實(shí)現(xiàn)方法,如圖10所示,包括:

      步驟701:安全處理器檢測(cè)到中斷時(shí)判斷中斷類型,如為定時(shí)器中斷則執(zhí)行步驟702,如為發(fā)送緩沖器中斷則執(zhí)行步驟703,如為字符發(fā)送完成中斷則執(zhí)行步驟706,如為字符接收完成中斷則執(zhí)行步驟709;

      步驟702:安全處理器向IC卡發(fā)送數(shù)據(jù)塊,并使能發(fā)送完成中斷,退出定時(shí)器中斷;

      步驟703:安全處理器判斷當(dāng)前數(shù)據(jù)塊中是否還有數(shù)據(jù)未發(fā)送完畢,是則執(zhí)行步驟704,否則執(zhí)行步驟705;

      具體的,在本實(shí)施例中,安全處理器判斷未發(fā)送完成的數(shù)據(jù)字符個(gè)數(shù)是否為0,是則發(fā)送完畢,否則為發(fā)送完畢;

      步驟704:安全處理器更新未發(fā)送完成的數(shù)據(jù)字符個(gè)數(shù),重新設(shè)定塊保護(hù)時(shí)間,準(zhǔn)備發(fā)送下一個(gè)數(shù)據(jù)字符,退出發(fā)送緩沖器中斷;

      具體的,在本實(shí)施例中,安全處理器更新未發(fā)送完成的數(shù)據(jù)字符個(gè)數(shù)為:將未發(fā)送完成的數(shù)據(jù)字符個(gè)數(shù)自減1;

      步驟705:安全處理器關(guān)閉字符發(fā)送完成中斷,關(guān)閉定時(shí)器中斷,退出發(fā)送緩沖器中斷;

      步驟706:安全處理器判斷數(shù)據(jù)塊中的所有字符是否都已發(fā)送完成,是則執(zhí)行步驟707,否則執(zhí)行步驟708;

      步驟707:安全處理器重新設(shè)定塊保護(hù)時(shí)間和塊等待時(shí)間,退出字符發(fā)送完成中斷;

      步驟708:安全處理器在數(shù)據(jù)塊的最后一個(gè)字符開始時(shí),開啟定時(shí)器中斷,退出字符發(fā)送完成中斷;

      步驟709:安全處理器將接收到的數(shù)據(jù)塊頭的數(shù)據(jù)存入接收緩存區(qū)中;

      步驟710:安全處理器判斷塊保護(hù)時(shí)間是否符合要求,是則執(zhí)行步驟711,否則執(zhí)行步驟715;

      步驟711:安全處理器判斷數(shù)據(jù)塊頭是否接收完畢,是則執(zhí)行步驟712,否則執(zhí)行步驟714;

      步驟712:安全處理器將接收到的數(shù)據(jù)域的數(shù)據(jù)存入接收緩存區(qū),并判斷接收狀態(tài)機(jī)是否為接收完成狀態(tài),是則執(zhí)行步驟713,否則退出字符接收完成中斷;

      步驟713:安全處理器清除金融終端狀態(tài)機(jī)的操作等待狀態(tài),退出字符接收完成中斷;

      步驟714:安全處理器將接收到的數(shù)據(jù)域中的數(shù)據(jù)存入接收緩存區(qū),將接收狀態(tài)機(jī)設(shè)置為接收完成狀態(tài),關(guān)閉接收中斷,退出字符接收完成中斷;

      在本實(shí)施例中,當(dāng)安全處理器的硬件接收到數(shù)據(jù)時(shí)觸發(fā)接收中斷,數(shù)據(jù)接收完成后退出接收中斷;

      步驟715:安全處理器判斷接收緩存區(qū)中的數(shù)據(jù)的長(zhǎng)度是否不超過預(yù)設(shè)長(zhǎng)度,是則執(zhí)行步驟716,否則執(zhí)行步驟717;

      在本實(shí)施例中,預(yù)設(shè)長(zhǎng)度為254個(gè)字節(jié);

      步驟716:安全處理器關(guān)閉等待定時(shí)器,將接收狀態(tài)機(jī)設(shè)為接收完成,清除金融終端狀態(tài)機(jī)的操作等待狀態(tài),調(diào)用硬件異常處理函數(shù),退出字符接收完成中斷;

      具體的,在本實(shí)施例中,硬件異常處理函數(shù)用來恢復(fù)安全處理器狀態(tài);等待定時(shí)器的計(jì)數(shù)器不能超出25etu

      步驟717:安全處理器關(guān)閉等待定時(shí)器然后重新開啟,退出字符接收完成中斷。

      實(shí)施例九

      本發(fā)明實(shí)施例九提供一種安全處理器,該安全處理器用于實(shí)現(xiàn)金融終端與卡片之間數(shù)據(jù)通訊的安全處理器,如圖11所示,該安全處理器包括:

      第一檢測(cè)模塊11,用于檢測(cè)卡槽中是否有IC卡插入;

      接收模塊12,用于接收IC卡返回的復(fù)位應(yīng)答數(shù)據(jù);

      第一判斷模塊13,用于當(dāng)接收模塊12接收到復(fù)位應(yīng)答數(shù)據(jù)后,判斷上電復(fù)位是否成功,是則觸發(fā)發(fā)送模塊19向IC卡發(fā)送選擇應(yīng)用環(huán)境指令,否則觸發(fā)下電模塊18;

      第二判斷模塊14,用于判斷是否接收到IC卡返回的正確選擇應(yīng)答,是則觸發(fā)發(fā)送模塊19向IC卡發(fā)送數(shù)據(jù)交互指令,否則觸發(fā)報(bào)錯(cuò)模塊16;

      第三判斷模塊15,用于判斷是否接收到IC卡返回的正確交互應(yīng)答,是則觸發(fā)第四判斷模塊17,否則觸發(fā)報(bào)錯(cuò)模塊16;

      報(bào)錯(cuò)模塊16,用于當(dāng)?shù)诙袛嗄K14和第三判斷模塊15判斷為否時(shí)報(bào)錯(cuò);

      第四判斷模塊17,用于當(dāng)?shù)谌袛嗄K15判斷為是時(shí)判斷本次操作是否完成,是則觸發(fā)下電模塊18,否則觸發(fā)發(fā)送模塊19繼續(xù)發(fā)送數(shù)據(jù)交互指令;

      下電模塊18,用于當(dāng)?shù)谝慌袛嗄K13判斷為否和第四判斷模塊17判斷是時(shí)對(duì)IC卡執(zhí)行下電操作,觸發(fā)第一檢測(cè)模塊11;

      發(fā)送模塊19,用于當(dāng)?shù)谝粰z測(cè)模塊11檢測(cè)到卡槽中有IC卡插入時(shí)向IC卡發(fā)送上電復(fù)位指令,當(dāng)?shù)谝慌袛嗄K13判斷為是時(shí)向IC卡發(fā)送選擇應(yīng)用環(huán)境指令;當(dāng)?shù)诙袛嗄K14判斷為是和第四判斷模塊17判斷為否時(shí)向IC卡發(fā)送數(shù)據(jù)交互指令。

      本實(shí)施例中的安全處理器還包括:

      第一設(shè)置模塊,用于將卡槽中與IC卡相關(guān)的引腳進(jìn)行初始化配置;設(shè)置通訊參數(shù)的缺省值;

      第一計(jì)算模塊,用于根據(jù)通訊參數(shù)計(jì)算時(shí)序控制參數(shù):

      啟動(dòng)模塊,用于啟動(dòng)冷復(fù)位時(shí)序;

      第一使能模塊,用于使能UART接收中斷,準(zhǔn)備接收IC卡發(fā)送的復(fù)位應(yīng)答數(shù)據(jù)。

      本實(shí)施例的安全處理器還包括:

      第一開啟模塊,用于開啟接收中斷;

      第二檢測(cè)模塊,用于檢測(cè)是否有中斷;

      第一保存模塊,用于當(dāng)?shù)诙z測(cè)模塊檢測(cè)到接收中斷時(shí),保存接收到的字符;

      第五判斷模塊,用于判斷接收到的字符的類型;如為初始字符則觸發(fā)第二設(shè)置模塊;如為格式字符則觸發(fā)第七判斷模塊;如為接口字符則觸發(fā)作為模塊;如為歷史字符則觸發(fā)第十三判斷模塊;如為校驗(yàn)字符則觸發(fā)第十一設(shè)置模塊;

      第二設(shè)置模塊,用于設(shè)置等待定時(shí)器,將接收狀態(tài)機(jī)設(shè)為接收格式字符;

      第六判斷模塊,用于判斷初始字符的邏輯方向是否錯(cuò)誤,是則將金融終端狀態(tài)機(jī)設(shè)置為參數(shù)無效,觸發(fā)第十五判斷模塊,否則觸發(fā)第十五判斷模塊;

      第七判斷模塊,用于判斷是否保存有第一組接口字符,是則觸發(fā)第三設(shè)置模塊,否則觸發(fā)第八判斷模塊;

      第三設(shè)置模塊,用于將接收狀態(tài)機(jī)設(shè)為接收接口字符,觸發(fā)第十五判斷模塊;

      第八判斷模塊,用于判斷是否保存有歷史字符,是則觸發(fā)第四設(shè)置模塊,否則觸發(fā)第五設(shè)置模塊;

      第四設(shè)置模塊,用于將接收狀態(tài)機(jī)設(shè)為接收歷史字符,記錄歷史字符的數(shù)量,觸發(fā)第十五判斷模塊;

      第五設(shè)置模塊,用于將接收狀態(tài)機(jī)設(shè)為接收額外字符,設(shè)置等待定時(shí)器,觸發(fā)第十五判斷模塊;

      作為模塊,用于將第一個(gè)協(xié)議組作為當(dāng)前協(xié)議組;

      第二計(jì)算模塊,用于根據(jù)當(dāng)前協(xié)議組最后一個(gè)接口字符計(jì)算下一組字符的接口字符數(shù)量;

      第九判斷模塊,用于通過當(dāng)前協(xié)議本組最后一個(gè)接口字符判斷是否還有下一組接口字符,是則觸發(fā)第三計(jì)算模塊;否則觸發(fā)第十判斷模塊;

      第三計(jì)算模塊,用于將參與計(jì)算應(yīng)答數(shù)據(jù)的校驗(yàn)值的字符數(shù)自加1,觸發(fā)第十判斷模塊;

      第十判斷模塊,用于判斷是否已經(jīng)接收到最后一個(gè)接口字符,是則觸發(fā)第十一判斷模塊,否則將下一個(gè)協(xié)議組作為當(dāng)前協(xié)議組,觸發(fā)第二計(jì)算模塊;

      第十一判斷模塊,用于判斷是否已計(jì)錄歷史字符數(shù)量,是則觸發(fā)第六設(shè)置模塊,否則觸發(fā)第十二判斷模塊;

      第六設(shè)置模塊,用于更新歷史字符數(shù)量,將接收狀態(tài)機(jī)設(shè)置為接收歷史字符,觸發(fā)第十五判斷模塊;

      第十二判斷模塊,用于判斷是否計(jì)算應(yīng)答數(shù)據(jù)的檢驗(yàn)值,是則觸發(fā)第七設(shè)置模塊,否則觸發(fā)第八設(shè)置模塊;

      第七設(shè)置模塊,用于將接收狀態(tài)機(jī)設(shè)置為接收校驗(yàn)字符,觸發(fā)第十五判斷模塊;

      第八設(shè)置模塊,用于將接收狀態(tài)機(jī)設(shè)置為接收額外字符,設(shè)置等待定時(shí)器,觸發(fā)第十五判斷模塊;

      第十三判斷模塊,用于判斷所有的歷史字符是否都已接收完畢,是則觸發(fā)第十五判斷模塊,否則觸發(fā)第十四判斷模塊;

      具體的,在本實(shí)施例中,第十三判斷模塊具體用于根據(jù)格式字符計(jì)算得到歷史字符的個(gè)數(shù),判斷歷史字符的個(gè)數(shù)是否等于預(yù)設(shè)值,是則歷史字符都已接收完畢,否則歷史字符未接收完畢。

      第十四判斷模塊,用于判斷是否需要執(zhí)行數(shù)據(jù)校驗(yàn),是則觸發(fā)第九設(shè)置模塊,否則觸發(fā)第十設(shè)置模塊;

      第九設(shè)置模塊,用于將接收狀態(tài)機(jī)設(shè)置為接收校驗(yàn)字符,觸發(fā)第十五判斷模塊;

      第十設(shè)置模塊,用于將接收狀態(tài)機(jī)設(shè)置為接收額外字符,觸發(fā)第十五判斷模塊;

      第十一設(shè)置模塊,用于將接收狀態(tài)機(jī)設(shè)置為接收額外字符,設(shè)置字符等待時(shí)間,觸發(fā)第十五判斷模塊;

      第十五判斷模塊,用于判斷金融終端狀態(tài)機(jī),如為接收完成則觸發(fā)第十六判斷模塊,如為參數(shù)無效則直接退出接收中斷,如為其他則觸發(fā)第十二設(shè)置模塊;

      第十六判斷模塊,用于判斷接收參數(shù)過程中是否出錯(cuò),是則調(diào)用接收異常處理函數(shù)進(jìn)行操作,操作完成后退出接收中斷,否則觸發(fā)設(shè)置解析模塊;

      設(shè)置解析模塊,用于將金融終端狀態(tài)機(jī)設(shè)置為空閑狀態(tài),并解析接收到的復(fù)位應(yīng)答數(shù)據(jù),解析完成后退出接收中斷;

      第十二設(shè)置模塊,用于重新設(shè)置等待定時(shí)器,退出接收中斷。

      在本實(shí)施例中,第一開啟模塊還用于開啟時(shí)鐘定時(shí)器超時(shí)中斷;

      安全處理器還包括關(guān)閉設(shè)置模塊,用于當(dāng)?shù)诙z測(cè)模塊檢測(cè)到時(shí)鐘定時(shí)器超時(shí)中斷時(shí),關(guān)閉時(shí)鐘定時(shí)器,將金融終端狀態(tài)機(jī)設(shè)置為接收超時(shí),退出時(shí)鐘定時(shí)器超時(shí)中斷。

      在本實(shí)施例中,第一開啟模塊還用于開啟奇偶校驗(yàn)錯(cuò)誤中斷;

      安全處理器還包括第十三設(shè)置模塊:用于當(dāng)?shù)诙z測(cè)模塊檢測(cè)到奇偶校驗(yàn)錯(cuò)誤中斷時(shí),將卡槽上與IC卡的復(fù)位引腳相關(guān)的引腳設(shè)為低電平,將金融終端狀態(tài)機(jī)設(shè)為奇偶檢驗(yàn)錯(cuò)誤,將IC卡的時(shí)鐘信號(hào)關(guān)閉,退出奇偶校驗(yàn)錯(cuò)誤中斷。

      在本實(shí)施例中,第一開啟模塊還用于開啟等待定時(shí)器中斷;

      安全處理器還包括第十七判斷模塊:用于當(dāng)?shù)诙z測(cè)模塊檢測(cè)到等待定時(shí)器中斷時(shí),判斷是否接收到多余字符,是則觸發(fā)第十四設(shè)置模塊,否則觸發(fā)第十五設(shè)置模塊;

      第十四設(shè)置模塊,用于將金融終端狀態(tài)機(jī)設(shè)置為塊保護(hù)時(shí)間錯(cuò)誤,觸發(fā)第十五設(shè)置模塊;

      第十五設(shè)置模塊,用于關(guān)閉接收中斷,將接收狀態(tài)機(jī)設(shè)置為接收完成,退出等待定時(shí)器中斷。

      在本實(shí)施例中,第二判斷模14塊包括:

      第一設(shè)置子模塊,用于設(shè)置第一接收定時(shí)器;

      第一判斷子模塊,用于判斷是否接收到初始字符,是則觸發(fā)第二判斷子模塊,否則觸發(fā)發(fā)送模塊19給上位機(jī)返回ATR(復(fù)位應(yīng)答數(shù)據(jù))接收超時(shí)信息;

      第二判斷子模塊,用于判斷接收到的初始字符是否為第一預(yù)設(shè)值,是則觸發(fā)第三設(shè)置子模塊,否則觸發(fā)第三判斷子模塊;

      第三判斷子模塊,用于判斷接收到的初始字符是否為第二預(yù)設(shè)值,是則觸發(fā)第二設(shè)置子模塊,否則觸發(fā)發(fā)送模塊19給上位機(jī)返回ATR接收出錯(cuò)信息;

      第二設(shè)置子模塊,用于將字符傳輸?shù)倪壿嫾s定設(shè)置為反向約定,觸發(fā)第一保存設(shè)定子模塊;

      第三設(shè)置子模塊,用于將字符傳輸?shù)倪壿嫾s定設(shè)置為正向約定,觸發(fā)第一保存設(shè)定子模塊;

      第一保存設(shè)定子模塊,用于將接收到的初始字符保存到ATR緩存區(qū)中,并設(shè)定第二接收定時(shí)器;

      第四判斷子模塊,用于判斷在第二定時(shí)器的設(shè)定時(shí)間內(nèi)是否接收到格式字符,是則觸發(fā)第一轉(zhuǎn)換保存子模塊,否則觸發(fā)發(fā)送模塊19給上位機(jī)返回ATR接收超時(shí)信息;

      第一轉(zhuǎn)換保存子模塊,用于根據(jù)設(shè)置好的邏輯約定轉(zhuǎn)換格式字符,并將轉(zhuǎn)換后的格式字符保存到ATR緩存區(qū)中,根據(jù)格式字符計(jì)算歷史字符長(zhǎng)度并保存,將ATR緩存區(qū)中的第一個(gè)協(xié)議組作為當(dāng)前協(xié)議組;

      第五判斷子模塊,用于判斷ATR緩存區(qū)中的數(shù)據(jù)的長(zhǎng)度是否超過預(yù)設(shè)長(zhǎng)度,是則觸發(fā)第九判斷子模塊,否則將當(dāng)前協(xié)議組中的第一個(gè)接口字符作為當(dāng)前接口字符,執(zhí)行觸發(fā)第六判斷子模塊;

      第六判斷子模塊,用于判斷當(dāng)前接口字符是否超出當(dāng)前協(xié)議組中的接口字符長(zhǎng)度,是則觸發(fā)第一獲取子模塊,否則觸發(fā)第八判斷子模塊;

      第一獲取子模塊,用于將ATR緩沖區(qū)中的下一個(gè)協(xié)議組作為當(dāng)前協(xié)議組,獲取當(dāng)前協(xié)議組中的第四個(gè)接口字符作為當(dāng)前接口字符;

      第七判斷子模塊,判斷ATR緩存區(qū)中的數(shù)據(jù)的長(zhǎng)度是否超過預(yù)設(shè)長(zhǎng)度,是則觸發(fā)第九判斷子模塊,否則觸發(fā)第六判斷子模塊;

      第八判斷子模塊,用于通過格式字符判斷當(dāng)前協(xié)議組的接口字符組中是否存在接口字符,是則觸發(fā)第八判斷子模塊,否則觸發(fā)第一作為子模塊;

      第八判斷子模塊,用于判斷在第一預(yù)設(shè)時(shí)間內(nèi)是否收到接口字符,是則觸發(fā)第二轉(zhuǎn)換保存子模塊,否則觸發(fā)發(fā)送模塊19給上位機(jī)返回ATR接收超時(shí)信息;

      第二轉(zhuǎn)換保存子模塊,用于根據(jù)設(shè)置好的邏輯約定進(jìn)行接口字符轉(zhuǎn)換,并將轉(zhuǎn)換后的接口字符保存到ATR緩存區(qū)中,觸發(fā)第一作為子模塊;

      第一作為子模塊,用于將當(dāng)前協(xié)議組中的下一個(gè)接口字符作為當(dāng)前接口字符,觸發(fā)第六判斷子模塊;

      第九判斷子模塊,用于根據(jù)歷史字符長(zhǎng)度判斷是否接收完所有的歷史字符,是則觸發(fā)查詢子模塊,否則觸發(fā)第十判斷子模塊;

      第十判斷子模塊,用于判斷在第一預(yù)設(shè)時(shí)間內(nèi)是否收到歷史字符,是則觸發(fā)第三轉(zhuǎn)換保存子模塊,否則觸發(fā)發(fā)送模塊19給上位機(jī)返回ATR接收超時(shí)信息;

      第三轉(zhuǎn)換保存子模塊,用于根據(jù)設(shè)置好的邏輯約定進(jìn)行歷史字符轉(zhuǎn)換,將轉(zhuǎn)換后的歷史字符保存到ATR緩存區(qū)中;

      查詢子模塊,用于遍歷是ATR緩存區(qū)中每個(gè)協(xié)議組中的第四接口字符,查詢是否存在T=1協(xié)議,是則觸發(fā)第十一判斷子模塊,否則觸發(fā)發(fā)送模塊19給上位機(jī)返回ATR接收成功信息;

      第十一判斷子模塊,用于判斷在第一預(yù)設(shè)時(shí)間內(nèi)是否接收到校驗(yàn)字符,是則觸發(fā)第四轉(zhuǎn)換保存子模塊,否則觸發(fā)發(fā)送模塊19給上位機(jī)返回ATR接收超時(shí)信息;

      第四轉(zhuǎn)換保存子模塊,用于根據(jù)設(shè)置好的邏輯約定進(jìn)行校驗(yàn)字符轉(zhuǎn)換;并將轉(zhuǎn)換后的校驗(yàn)字符保存到ATR緩存區(qū)中,觸發(fā)發(fā)送模塊19給上位機(jī)返回ATR接收成功信息。

      在本實(shí)施例中,第三判斷模塊15包括:

      第四設(shè)置子模塊,用于根據(jù)復(fù)位應(yīng)答數(shù)據(jù)設(shè)置位持續(xù)時(shí)間;

      第十二判斷子模塊,用于判斷IC卡是否已插入且處于激活狀態(tài),是則觸發(fā)第十三判斷子模塊,否則觸發(fā)發(fā)送模塊19給上位機(jī)返回IC卡無響應(yīng)信息;

      第十三判斷子模塊,用于判斷發(fā)送的數(shù)據(jù)交互指令是否為PPS指令,是則觸發(fā)第十四判斷子模塊,否則第五設(shè)置子模塊;

      第十四判斷子模塊,用于判斷ATR緩沖區(qū)中是否有預(yù)設(shè)接口字符,是則觸發(fā)第十五判斷子模塊,否則觸發(fā)發(fā)送模塊19給上位機(jī)返回指令取消信息;

      第十五判斷子模塊,用于與IC卡進(jìn)行PPS參數(shù)協(xié)商操作,并判斷協(xié)商操作是否成功,是則觸發(fā)通訊子模塊,否則觸發(fā)下電模塊對(duì)IC卡進(jìn)行下電操作,并觸發(fā)發(fā)送模塊19給上位機(jī)返回錯(cuò)誤信息;

      通訊子模塊,用于使用協(xié)商成功的參數(shù)開始與IC卡進(jìn)行通訊,觸發(fā)設(shè)置子模塊;

      第五設(shè)置子模塊,用于設(shè)置將要發(fā)送的APDU指令;

      第十六判斷子模塊,用于當(dāng)發(fā)送模塊19將要發(fā)送的APDU指令發(fā)送給IC卡后,判斷APDU指令是否發(fā)送成功,是則觸發(fā)第六設(shè)置子模塊,否則觸發(fā)發(fā)送模塊19給上位機(jī)返回錯(cuò)誤碼;

      第六設(shè)置子模塊,設(shè)置工作等待時(shí)間;

      第十七判斷子模塊,用于判斷在工作等待時(shí)間內(nèi)是否收到IC卡發(fā)送的第一個(gè)過程字,是則觸發(fā)第十八判斷子模塊,否則觸發(fā)發(fā)送模塊19給上位機(jī)返回錯(cuò)誤碼;

      第十八判斷子模塊,用于判斷接收到的第一個(gè)過程字是否等于第一預(yù)設(shè)數(shù)據(jù),是則觸發(fā)丟棄設(shè)定子模塊,否則觸發(fā)第十九判斷子模塊;

      丟棄設(shè)定子模塊,用于丟棄接收到的第一個(gè)過程字,并重新設(shè)定工作等待時(shí)間,等待接收后續(xù)字符,觸發(fā)第十七判斷子模塊;

      第十九判斷子模塊,用于判斷接收到的第一個(gè)過程字是否為第二預(yù)設(shè)數(shù)據(jù),是則觸發(fā)第二保存設(shè)定子模塊,否則觸發(fā)第二十一判斷子模塊;

      第二保存設(shè)定子模塊,用于保存接收到的第一個(gè)過程字,并重新設(shè)定工作等待時(shí)間;

      第二十判斷子模塊,用于判斷在工作等待時(shí)間內(nèi)是否接收到第二個(gè)過程字,是則觸發(fā)第一保存子模塊,否則觸發(fā)發(fā)送模塊19給上位機(jī)返回錯(cuò)誤碼;

      第一保存子模塊,保存第二個(gè)過程字,觸發(fā)發(fā)送模塊19給上位機(jī)返回操作成功信息;

      第二十一判斷子模塊,用于判斷接收到的第一過程字是否為INS字符,是則觸發(fā)第二十二判斷子模塊,否則觸發(fā)第二十六判斷子模塊;

      第二十二判斷子模塊,用于判斷是否還有數(shù)據(jù)需要繼續(xù)發(fā)送給IC卡,是則觸發(fā)第二十三判斷子模塊,否則觸發(fā)第六設(shè)置子模塊;

      觸發(fā)第二十三判斷子模塊,用于判斷發(fā)送給IC卡指令中的le是否為0,是則觸發(fā)第二十四判斷子模塊,否則觸發(fā)第二十五判斷子模塊;

      第二十四判斷子模塊,用于判斷在預(yù)設(shè)時(shí)間內(nèi)是否接收到IC卡返回的應(yīng)答數(shù)據(jù),是則觸發(fā)第二保存子模塊,否則觸發(fā)發(fā)送模塊19給上位機(jī)返回錯(cuò)誤信息;

      第二保存子模塊,用于保存IC卡返回的應(yīng)答數(shù)據(jù),給上位機(jī)返回操作成功信息;

      第二十五判斷子模塊,用于判斷工作等待時(shí)間內(nèi)是否接收到IC卡發(fā)送的指定長(zhǎng)度的數(shù)據(jù),是則觸發(fā)第三保存子模塊,否則觸發(fā)發(fā)送模塊19給上位機(jī)返回錯(cuò)誤信息;

      第三保存子模塊,用于保存IC卡返回的指令長(zhǎng)度的應(yīng)答數(shù)據(jù),觸發(fā)發(fā)送模塊19給上位機(jī)返回操作成功信息;

      第二十六判斷子模塊,用于判斷接收到的第一過程字是否為INS的補(bǔ)碼,是則觸發(fā)第二十七判斷子模塊,否則觸發(fā)發(fā)送模塊19給上位機(jī)返回錯(cuò)誤信息;

      觸發(fā)第二十七判斷子模塊,用于判斷是否還有數(shù)據(jù)繼續(xù)發(fā)送給IC卡,是則觸發(fā)發(fā)送模塊19給IC卡發(fā)送一個(gè)字節(jié)的數(shù)據(jù),觸發(fā)第六設(shè)置子模塊,否則觸發(fā)第二十八判斷子模塊;

      觸發(fā)第二十八判斷子模塊,用于判斷是否接收到IC卡返回的一個(gè)字節(jié)數(shù)據(jù),是則觸發(fā)第四保存子模塊,否則觸發(fā)發(fā)送模塊19給上位機(jī)返回錯(cuò)誤信息;

      第四保存子模塊,用于保存IC卡返回的一個(gè)字節(jié)數(shù)據(jù),觸發(fā)第六設(shè)置子模塊。

      具體的,本實(shí)施例中的第五設(shè)置子模塊包括:

      第一判斷單元,用于判斷將要發(fā)送的APDU指令的類型,如為第一預(yù)設(shè)命令則觸發(fā)第一設(shè)置單元,如為第二預(yù)設(shè)命令則觸發(fā)第二設(shè)置單元,如為第三預(yù)設(shè)命令則觸發(fā)第三設(shè)置單元,如為其他則觸發(fā)第四設(shè)置單元;

      第一設(shè)置單元用于將要發(fā)送的APDU指令中的P3設(shè)置為0x00,發(fā)送數(shù)據(jù)總長(zhǎng)度設(shè)置為5個(gè)字節(jié),Le設(shè)為0;

      第二設(shè)置單元用于將要發(fā)送的APDU指令中的P3設(shè)置為0x00,發(fā)送數(shù)據(jù)總長(zhǎng)度設(shè)置為與Le相同;

      第三設(shè)置單元用于將要發(fā)送的APDU指令中的P3設(shè)置為0x00;

      第四設(shè)置單元用于將要發(fā)送的APDU指令中的Le設(shè)置為APDU數(shù)據(jù)域長(zhǎng)度-1。

      本實(shí)施例的安全處理器還包括:

      第十七設(shè)置模塊,用于在應(yīng)用層將金融終端狀態(tài)機(jī)設(shè)置為操作等待狀態(tài);

      第十八判斷模塊,用于在應(yīng)用層判斷當(dāng)前通訊協(xié)議是否為T=1,是則執(zhí)行T=1的數(shù)據(jù)傳送,觸發(fā)第十九判斷模塊,否則執(zhí)行T=0的數(shù)據(jù)傳送,觸發(fā)第十九判斷模塊;

      第十九判斷模塊,用于判斷金融終端狀態(tài)機(jī)是否為操作等待狀態(tài);

      第二十判斷模塊,用于當(dāng)?shù)谑排袛嗄K判斷為否時(shí)在傳輸層判斷發(fā)送的數(shù)據(jù)長(zhǎng)度是否大于IC卡的信息域空間,是則觸發(fā)置位發(fā)送模塊,否則觸發(fā)清除發(fā)送模塊;

      置位發(fā)送模塊,用于將鏈接標(biāo)志位置位,根據(jù)IC卡的信息域空間將命令數(shù)據(jù)分割為多組數(shù)據(jù)發(fā)送給終端數(shù)據(jù)鏈路層;

      清除發(fā)送模塊,用于清除鏈接標(biāo)志位,將所有的命令數(shù)據(jù)通過一組數(shù)據(jù)發(fā)送給終端數(shù)據(jù)鏈路層;

      封裝發(fā)送模塊,用于在數(shù)據(jù)鏈路層把需要傳送的字符數(shù)據(jù)封裝成一幀數(shù)據(jù)塊,并將封裝好的數(shù)據(jù)塊發(fā)送給物理層;

      驗(yàn)證模塊,用于在物理層驗(yàn)證接收到的數(shù)據(jù)塊的合法性,如合法則觸發(fā)發(fā)送模塊通過I/O口將數(shù)據(jù)塊發(fā)送給IC卡,否則觸發(fā)發(fā)送模塊給上位機(jī)返回錯(cuò)誤碼,結(jié)束。

      本實(shí)施例的安全處理器還包括:

      第二十一判斷模塊,用于當(dāng)檢測(cè)到中斷時(shí)判斷中斷類型,如為定時(shí)器中斷則觸發(fā)發(fā)送模塊向IC卡發(fā)送數(shù)據(jù)塊并觸發(fā)第二使能模塊,如為發(fā)送緩沖器中斷則觸發(fā)第二十一判斷模塊,如為字符發(fā)送完成中斷則觸發(fā)第二十二判斷模塊,如為字符接收完成中斷則觸發(fā)存入模塊;

      第二使能模塊,用于使能發(fā)送完成中斷,退出定時(shí)器中斷;

      第二十一判斷模塊,用于判斷當(dāng)前數(shù)據(jù)塊中是否還有數(shù)據(jù)未發(fā)送完畢,是則觸發(fā)更新設(shè)定模塊,否則觸發(fā)第一關(guān)閉模塊;

      更新設(shè)定模塊,用于更新未發(fā)送完成的數(shù)據(jù)字符個(gè)數(shù),重新設(shè)定塊保護(hù)時(shí)間,準(zhǔn)備發(fā)送下一個(gè)數(shù)據(jù)字符,退出發(fā)送緩沖器中斷;

      第一關(guān)閉模塊:安全處理器關(guān)閉字符發(fā)送完成中斷,關(guān)閉定時(shí)器中斷,退出發(fā)送緩沖器中斷;

      第二十二判斷模塊,用于判斷數(shù)據(jù)塊中的所有字符是否都已發(fā)送完成,是則觸發(fā)重新設(shè)定模塊,否則觸發(fā)第二開啟模塊;

      重新設(shè)定模塊,用于重新設(shè)定塊保護(hù)時(shí)間和塊等待時(shí)間,退出字符發(fā)送完成中斷;

      第二開啟模塊,用于在數(shù)據(jù)塊的最后一個(gè)字符開始時(shí),開啟定時(shí)器中斷,退出字符發(fā)送完成中斷;

      存入模塊,用于將接收到的數(shù)據(jù)塊頭中的數(shù)據(jù)存入接收緩存區(qū)中;

      第二十三判斷模塊,用于判斷塊保護(hù)時(shí)間是否符合要求,是則觸發(fā)第二十四判斷模塊,否則觸發(fā)第二十五判斷模塊;

      第二十四判斷模塊,用于判斷數(shù)據(jù)塊頭是否接收完畢,是則觸發(fā)存入判斷模塊,否則觸發(fā)存入設(shè)置模塊;

      存入判斷模塊,用于將接收到的數(shù)據(jù)域的數(shù)據(jù)存入接收緩存區(qū),并判斷接收狀態(tài)機(jī)是否為接收完成狀態(tài),是則觸發(fā)清除模塊,否則退出字符接收完成中斷;

      清除模塊,用于清除金融終端狀態(tài)機(jī)的操作等待狀態(tài),退出字符接收完成中斷;

      存入設(shè)置模塊,用于將接收到的數(shù)據(jù)域中的數(shù)據(jù)存入接收緩存區(qū),將接收狀態(tài)機(jī)設(shè)置為接收完成狀態(tài),關(guān)閉接收中斷,退出字符接收完成中斷;

      第二十五判斷模塊,用于判斷接收緩存區(qū)中的數(shù)據(jù)的長(zhǎng)度是否不超過預(yù)設(shè)長(zhǎng)度,是則觸發(fā)關(guān)閉清除模塊,否則觸發(fā)第二關(guān)閉模塊;

      關(guān)閉清除模塊,用于關(guān)閉等待定時(shí)器,將接收狀態(tài)機(jī)設(shè)為接收完成,清除金融終端狀態(tài)機(jī)的操作等待狀態(tài),調(diào)用硬件異常處理函數(shù),退出字符接收完成中斷;

      第二關(guān)閉模塊,用于關(guān)閉等待定時(shí)器然后重新開啟,退出字符接收完成中斷。

      以上所述,僅為本發(fā)明較佳的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明公開的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)該以權(quán)利要求的保護(hù)范圍為準(zhǔn)。

      當(dāng)前第1頁1 2 3 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1