本發(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)。