一種pc/sc驅(qū)動庫在ios設(shè)備中的工作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種信息安全領(lǐng)域,特別涉及一種PC/SC驅(qū)動庫在1S設(shè)備中的工作方法。
【背景技術(shù)】
[0002]PC/SC接口是一種基于WINDOWS平臺的一個標(biāo)準(zhǔn)用戶接口,提供了一個從個人電腦(Personal Computer)到智能卡(SmartCard)的整合環(huán)境,允許多個應(yīng)用共享使用系統(tǒng)同一張智能卡的資源管理器;
[0003]隨著蘋果設(shè)備的廣泛應(yīng)用,智能卡與蘋果設(shè)備相結(jié)合進行使用,也受到用戶關(guān)注。本領(lǐng)域技術(shù)人員發(fā)現(xiàn),目前,1S作為蘋果設(shè)備的操作系統(tǒng),不支持PC/SC接口。
【發(fā)明內(nèi)容】
[0004]為解決現(xiàn)有技術(shù)中存在的缺陷,本發(fā)明提出一種PC/SC驅(qū)動庫在1S設(shè)備中的工作方法,使PC/SC接口能夠應(yīng)用在1S系統(tǒng)中,實現(xiàn)1S系統(tǒng)與外接設(shè)備進行通信,該方法包括:
[0005]步驟SI:PC/SC驅(qū)動庫從1S系統(tǒng)中的外接設(shè)備信息中獲取外接設(shè)備配件協(xié)議信息,從應(yīng)用程序中預(yù)設(shè)的讀卡器設(shè)備信息中獲取讀卡器配件協(xié)議信息;
[0006]步驟S2:所述PC/SC驅(qū)動庫根據(jù)所述外接設(shè)備配件協(xié)議信息和所述讀卡器配件協(xié)議信息,判斷是否存在與所述讀卡器設(shè)備信息匹配的外接設(shè)備與所述1S系統(tǒng)連接,是則執(zhí)行步驟S3 ;否則執(zhí)行步驟S5 ;
[0007]步驟S3:所述PC/SC驅(qū)動庫將設(shè)備匹配標(biāo)志置位,根據(jù)所述外接設(shè)備配件協(xié)議信息和所述讀卡器配件協(xié)議信息獲取相應(yīng)的外接設(shè)備對象,執(zhí)行步驟S4 ;
[0008]步驟S4:所述PC/SC驅(qū)動庫根據(jù)所述外接設(shè)備對象和所述外接設(shè)備配件協(xié)議信息,對所述外接設(shè)備與所述1S系統(tǒng)之間的通信通道進行初始化,獲取通信通道對象,并保存相應(yīng)的外接設(shè)備信息,執(zhí)行步驟S5 ;
[0009]步驟S5:所述PC/SC驅(qū)動庫判斷是否已經(jīng)向1S系統(tǒng)注冊中心注冊第一通知,是則執(zhí)行步驟S6 ;否則所述PC/SC驅(qū)動庫向所述1S系統(tǒng)注冊中心注冊第一通知,執(zhí)行步驟S6 ;
[0010]步驟S6:所述PC/SC驅(qū)動庫根據(jù)所述設(shè)備匹配標(biāo)志,判斷是否存在與所述讀卡器設(shè)備信息匹配的外接設(shè)備與所述1S系統(tǒng)連接,是則執(zhí)行步驟S8 ;否則執(zhí)行步驟S7 ;
[0011 ] 步驟S7:所述PC/SC驅(qū)動庫通過所述第一通知檢測外接設(shè)備插入或拔出,將所述外接設(shè)備的外接設(shè)備信息發(fā)送給所述應(yīng)用程序,結(jié)束;
[0012]其中,當(dāng)所述PC/SC驅(qū)動庫通過所述第一通知檢測外接設(shè)備拔出時,還包括,將所述設(shè)備匹配標(biāo)志復(fù)位;
[0013]步驟S8:所述PC/SC驅(qū)動庫從所述外接設(shè)備信息中獲取第一信息,將所述第一信息報告給所述應(yīng)用程序;
[0014]當(dāng)所述PC/SC驅(qū)動庫提供的訪問外接設(shè)備的指令接口被調(diào)用時,判斷接收到的參數(shù)是否合法,是則執(zhí)行步驟Wl ;否則向應(yīng)用程序發(fā)送參數(shù)不合法信息,結(jié)束;
[0015]步驟Wl:根據(jù)所述接收到的參數(shù)封裝訪問外部設(shè)備指令,將封裝的訪問外接設(shè)備的指令通過所述通信通道對象發(fā)送給所述外接設(shè)備;
[0016]步驟W2:接收所述外接設(shè)備返回的訪問外接設(shè)備響應(yīng),將所述訪問外接設(shè)備響應(yīng)發(fā)送給所述應(yīng)用程序,結(jié)束。
[0017]所述步驟S2,具體包括:
[0018]步驟S2-1:所述PC/SC驅(qū)動庫對所述外接設(shè)備配件協(xié)議信息進行判斷,如果所述讀卡器配件協(xié)議信息中包含所述外接設(shè)備配件協(xié)議信息,則執(zhí)行步驟S3 ;否則執(zhí)行步驟S5o
[0019]所述步驟SI,具體包括:
[0020]PC/SC驅(qū)動庫獲取1S系統(tǒng)中的ExternalAccessory.framework框架中的第一單例對象,通過所述第一單例對象的第一實例方法獲取1S系統(tǒng)中的外接設(shè)備信息,對獲取到的外接設(shè)備信息進行枚舉,從所述外接設(shè)備信息中獲取外接設(shè)備配件協(xié)議信息;獲取應(yīng)用程序已經(jīng)注冊的讀卡器設(shè)備信息,從所述讀卡器設(shè)備信息中獲取讀卡器配件協(xié)議信息。
[0021]所述步驟S6,具體包括:
[0022]所述PC/SC驅(qū)動庫判斷所述設(shè)備匹配標(biāo)志是否置位,是則存在與所述讀卡器設(shè)備信息匹配的外接設(shè)備與所述1S系統(tǒng)連接,執(zhí)行步驟S8 ;否則不存在與所述讀卡器設(shè)備信息匹配的外接設(shè)備與所述1S系統(tǒng)連接,執(zhí)行步驟S7。
[0023]所述步驟S8,具體包括:
[0024]所述PC/SC驅(qū)動庫從所述外接設(shè)備信息中獲取第一信息,保存所述外接設(shè)備信息,將所述第一信息通過所述PC/SC驅(qū)動庫的第一接口報告給所述應(yīng)用程序。
[0025]所述PC/SC驅(qū)動庫將封裝的訪問外接設(shè)備的指令通過所述通信通道對象發(fā)送給所述外接設(shè)備,具體包括:
[0026]所述PC/SC驅(qū)動庫將封裝的訪問外接設(shè)備的指令通過所述通信通道對象和所述1S系統(tǒng)提供的接口發(fā)送給所述外接設(shè)備。
[0027]所述步驟S4之后,還包括:
[0028]步驟Al:所述PC/SC驅(qū)動庫初始化卡槽狀態(tài)標(biāo)識;
[0029]步驟A2:所述PC/SC驅(qū)動庫根據(jù)所述外接設(shè)備配件協(xié)議信息和所述讀卡器配件協(xié)議信息,判斷是否存在與所述讀卡器配件協(xié)議匹配的外接設(shè)備,是則執(zhí)行步驟A4 ;否則執(zhí)行步驟A3 ;
[0030]步驟A3:所述PC/SC驅(qū)動庫休眠,預(yù)設(shè)時間后再喚醒,返回步驟A2 ;
[0031]步驟A4:所述PC/SC驅(qū)動庫判斷所述應(yīng)用程序是否設(shè)置PC/SC驅(qū)動庫提供的委派函數(shù),是則執(zhí)行步驟A5 ;否則執(zhí)行步驟A3 ;
[0032]步驟A5:所述PC/SC驅(qū)動庫休眠,預(yù)設(shè)時間后再喚醒,向所述1S系統(tǒng)發(fā)送查詢卡槽狀態(tài)指令;
[0033]步驟A6:所述PC/SC驅(qū)動庫接收所述1S系統(tǒng)返回的卡槽狀態(tài)響應(yīng),根據(jù)所述卡槽狀態(tài)響應(yīng)和所述卡槽狀態(tài)標(biāo)識,判斷卡槽狀態(tài)是否發(fā)生改變,是則執(zhí)行步驟A7;否則返回步驟A2 ;
[0034]步驟A7:所述PC/SC驅(qū)動庫根據(jù)所述卡槽狀態(tài)響應(yīng)設(shè)置卡槽狀態(tài)標(biāo)識,判斷所述應(yīng)用程序是否設(shè)置所述PC/SC驅(qū)動庫提供的委派函數(shù),是則執(zhí)行步驟AS ;否則返回步驟A2 ;
[0035]步驟AS:所述PC/SC驅(qū)動庫通過委派函數(shù)向所述應(yīng)用程序發(fā)送卡槽狀態(tài)變化信息。
[0036]所述步驟S4之后,還包括:
[0037]所述PC/SC驅(qū)動庫啟動查詢卡槽狀態(tài)線程,循環(huán)進行查詢卡槽狀態(tài)的操作,直到所述PC/SC驅(qū)動庫釋放第一句柄時結(jié)束;
[0038]當(dāng)所述PC/SC驅(qū)動庫的釋放資源函數(shù)被調(diào)用時,釋放所述第一句柄。
[0039]所述查詢卡槽狀態(tài)的操作,具體包括:
[0040]步驟B1:所述PC/SC驅(qū)動庫初始化卡槽狀態(tài)標(biāo)識;
[0041 ] 步驟B2:所述PC/SC驅(qū)動庫根據(jù)所述外接設(shè)備配件協(xié)議信息和所述讀卡器配件協(xié)議信息,判斷是否存在與所述讀卡器配件協(xié)議匹配的外接設(shè)備,是則執(zhí)行步驟B4 ;否則執(zhí)行步驟B3 ;
[0042]步驟B3:所述PC/SC驅(qū)動庫休眠,預(yù)設(shè)時間后再喚醒,返回步驟B2 ;
[0043]步驟B4:所述PC/SC驅(qū)動庫向所述1S系統(tǒng)發(fā)送查詢卡槽狀態(tài)指令,執(zhí)行步驟B5 ;
[0044]步驟B5:所述PC/SC驅(qū)動庫接收所述1S系統(tǒng)返回的卡槽狀態(tài)響應(yīng),根據(jù)所述卡槽狀態(tài)響應(yīng)設(shè)置卡槽狀態(tài)標(biāo)識。
[0045]所述步驟S8之后,還包括:
[0046]步驟Cl:當(dāng)所述PC/SC驅(qū)動庫的第二接口被調(diào)用時,判斷所述設(shè)備匹配標(biāo)志是否置位,是則執(zhí)行步驟C2 ;否則退出所述第二接口 ;
[0047]步驟C2:所述PC/SC驅(qū)動庫初始化計時標(biāo)識;
[0048]步驟C3:所述PC/SC驅(qū)動庫的第二接口判斷外部傳入的智能卡狀態(tài)參數(shù)是否與所述PC/SC驅(qū)動庫中保存的卡槽狀態(tài)標(biāo)識相同,是則執(zhí)行步驟C5 ;否則執(zhí)行步驟C4 ;
[0049]步驟C4:所述PC/SC驅(qū)動返回卡槽狀態(tài)變化信息,退出所述第二接口 ;
[0050]步驟C5:所述PC/SC驅(qū)動庫判斷是否需要計算超時,是則執(zhí)行步驟C6 ;否則執(zhí)行步驟C3 ;
[0051]步驟C6:所述PC/SC驅(qū)動庫根據(jù)所述計時標(biāo)識和外部傳入的超時時間參數(shù),判斷是否超時,是則退出所述第二接口 ;否則執(zhí)行步驟C7 ;
[0052]步驟C7:所述PC/SC驅(qū)動庫休眠,預(yù)設(shè)時間后再喚醒,更新所述計時標(biāo)識,返回步驟C3。
[0053]所述PC/SC驅(qū)動庫根據(jù)所述外接設(shè)備對象和所述外接設(shè)備配件協(xié)議信息,對所述外接設(shè)備與所述1S系統(tǒng)之間的通信通道進行初始化,具體包括:
[0054]所述PC/SC驅(qū)動庫根據(jù)外接設(shè)備對象和所述外接設(shè)備配件協(xié)議信息,通過所述1S系統(tǒng)提供的初始化通道接口,對所述外接設(shè)備與所述1S系統(tǒng)之間的通信通道進行初始化。
[0055]所述第一通知,具體為:
[0056]實時監(jiān)控外接設(shè)備插入通知和實時監(jiān)控外接設(shè)備拔出通知;
[0057]所述PC/SC驅(qū)動庫向所述1S系統(tǒng)注冊中心注冊第一通知,具體為:
[0058]所述PC/SC驅(qū)動庫通過執(zhí)行包含通知的監(jiān)控者、通知的回調(diào)方法、通知的名稱以及通知的入?yún)?shù)的注冊第一通知的方法,向所述1S系統(tǒng)注冊中心注冊第一通知;
[0059]當(dāng)所述PC/SC驅(qū)動庫的釋放資源函數(shù)被調(diào)用的時,從所述1S系統(tǒng)注冊中心中移除所述第一通知。
[0060]所述步驟S8中,還包括,當(dāng)所述PC/SC驅(qū)動庫的第一函數(shù)被調(diào)用時,PC/SC驅(qū)動庫對所述第一函數(shù)進行初始化操作,生成并保存資源管理器上下文,將所述資源管理器上下文發(fā)送給所述應(yīng)用程序。
[0061]所述PC/SC驅(qū)動庫提供的接口,包括:卡片上電指令接口、卡片下電指令接口、查詢卡槽狀態(tài)指令接口、數(shù)據(jù)通訊指令接口 ;
[0062]當(dāng)所述PC/SC驅(qū)動庫提供的卡片上電指令接口被調(diào)用時,判斷第一個入?yún)?shù)與已保存的資源管理器上下文是否匹配,是則執(zhí)行步驟a ;否則報錯;
[0063]步驟a:判斷第二個入?yún)?shù)是否與已保存的外接設(shè)備信息中的第一信息匹配,是則將所述卡片句柄發(fā)送給應(yīng)用程序,保存已上電的卡片信息,并將其與已保存的資源管理器上下文建立對應(yīng)關(guān)系;否則報錯;
[0064]當(dāng)PC/SC驅(qū)動庫提供的查詢卡槽狀態(tài)接口被應(yīng)用程序調(diào)用時,判斷是否已經(jīng)獲取到卡片句柄,是則根據(jù)所述接收到的參數(shù)封裝查詢卡槽狀態(tài)指令,將封裝的查詢卡槽狀態(tài)指令通過所述通信通道對象發(fā)送給所述外接設(shè)備,接收所述外接設(shè)備返回的查詢卡槽狀態(tài)響應(yīng),用所述查詢卡槽狀態(tài)響應(yīng)中的卡槽狀態(tài)更新卡片信息里面的卡槽狀態(tài),將所述查詢卡槽狀態(tài)響應(yīng)發(fā)送給所述應(yīng)用程序;否則報錯;
[0065]當(dāng)所述PC/SC驅(qū)動庫提供的數(shù)據(jù)通訊指令接口被調(diào)用時,判斷是否已經(jīng)獲取到卡片句柄,并且所述卡片句柄里的卡槽狀態(tài)信息是有卡已上電,是則根據(jù)所述接收到的參數(shù)封裝智能卡操作指令,將封裝的智能卡操作指令通過所述通信通道對象發(fā)送給所述外接設(shè)備,接收所述外接設(shè)備返回的智能卡操作響應(yīng),將所述智能卡操作響應(yīng)發(fā)送給所述應(yīng)用程序;否則報錯;
[0066]當(dāng)所述PC/SC驅(qū)動庫提供的卡片下電指令接口被調(diào)用時,判斷是否獲取到卡片句柄,是則封裝下電指令,并將封裝的下電指令通過所述通信通道對象發(fā)送