Commit 301c3abb6279718397a51b832a16205524210d03
1 parent
691a0ae0
feat(dlcm):新增m1卡操作接口
Showing
7 changed files
with
121 additions
and
1 deletions
dlcm/dlcm/DLCCard.cc
... | ... | @@ -858,4 +858,58 @@ int DLCCard::SelectCardDir(const unsigned char* dir) const |
858 | 858 | result = SelectDir(dir_hex); |
859 | 859 | |
860 | 860 | return result; |
861 | -} | |
862 | 861 | \ No newline at end of file |
862 | +} | |
863 | + | |
864 | +int DLCCard::M1AuthenticationKey(const unsigned short section, unsigned char* key) const | |
865 | +{ | |
866 | + int result = kSuccess; | |
867 | + | |
868 | + do | |
869 | + { | |
870 | + if (kSuccess != DLCDevice::Instance().M1LoadKeyHex(0, (const unsigned char*)"ffffffffffff", section)) | |
871 | + { | |
872 | + result = kM1LoadKeyFailed; | |
873 | + break; | |
874 | + } | |
875 | + | |
876 | + if (kSuccess != DLCDevice::Instance().M1Authentication(0, section)) | |
877 | + { | |
878 | + result = kVerifyKeyFailure; | |
879 | + break; | |
880 | + } | |
881 | + } while (0); | |
882 | + | |
883 | + return result; | |
884 | +} | |
885 | + | |
886 | +int DLCCard::M1ReadCard(const unsigned short block_num, const unsigned char* data) const | |
887 | +{ | |
888 | + int result = kSuccess; | |
889 | + | |
890 | + do | |
891 | + { | |
892 | + if (kSuccess != DLCDevice::Instance().M1Read(block_num, data)) | |
893 | + { | |
894 | + result = kM1ReadCardFailed; | |
895 | + break; | |
896 | + } | |
897 | + } while (0); | |
898 | + | |
899 | + return result; | |
900 | +} | |
901 | + | |
902 | +int DLCCard::M1WriteCard(const unsigned short block_num, const unsigned char* data) const | |
903 | +{ | |
904 | + int result = kSuccess; | |
905 | + | |
906 | + do | |
907 | + { | |
908 | + if (kSuccess != DLCDevice::Instance().M1Write(block_num, data)) | |
909 | + { | |
910 | + result = kM1WriteCardFailed; | |
911 | + break; | |
912 | + } | |
913 | + } while (0); | |
914 | + | |
915 | + return result; | |
916 | +} | ... | ... |
dlcm/dlcm/DLCCard.h
... | ... | @@ -58,6 +58,10 @@ public: |
58 | 58 | int SOWriteData(const unsigned char* write_key, const unsigned char* random, const unsigned int data_offfset, const unsigned int data_len, const unsigned char* data, unsigned char* cmd) const; |
59 | 59 | int SOSelectDir(const unsigned char* dir, unsigned char* cmd) const; |
60 | 60 | |
61 | + int M1AuthenticationKey(const unsigned short section, unsigned char* key) const; | |
62 | + int M1ReadCard(const unsigned short block_num, const unsigned char* data) const; | |
63 | + int M1WriteCard(const unsigned short block_num, const unsigned char* data) const; | |
64 | + | |
61 | 65 | private: |
62 | 66 | |
63 | 67 | CardManufacturer CheckCardMF() const; | ... | ... |
dlcm/dlcm/DLCCardManager.cc
... | ... | @@ -77,4 +77,20 @@ int __stdcall DLCSOWriteData(const unsigned char* write_key, const unsigned char |
77 | 77 | int __stdcall DLCSOSelectDir(const unsigned char* dir, unsigned char* cmd) |
78 | 78 | { |
79 | 79 | return DLCCard::Instance().SOSelectDir(dir, cmd); |
80 | +} | |
81 | + | |
82 | +//for m1 | |
83 | +DL_DLL_API int __stdcall DLCM1AuthenticationKey(const unsigned short section, unsigned char* key) | |
84 | +{ | |
85 | + return DLCCard::Instance().M1AuthenticationKey(section, key); | |
86 | +} | |
87 | + | |
88 | +DL_DLL_API int __stdcall DLCM1ReadCard(const unsigned short block_num, const unsigned char* data) | |
89 | +{ | |
90 | + return DLCCard::Instance().M1ReadCard(block_num, data); | |
91 | +} | |
92 | + | |
93 | +DL_DLL_API int __stdcall DLCM1WriteCard(const unsigned short block_num, const unsigned char* data) | |
94 | +{ | |
95 | + return DLCCard::Instance().M1WriteCard(block_num, data); | |
80 | 96 | } |
81 | 97 | \ No newline at end of file | ... | ... |
dlcm/dlcm/DLCDevice.cc
... | ... | @@ -54,6 +54,7 @@ int DLCDevice::FindAndResetCard() |
54 | 54 | |
55 | 55 | if (!dc_card(dev_, 0, &snr)) |
56 | 56 | { |
57 | + result = kSuccessFindCard; | |
57 | 58 | if (!dc_pro_reset(dev_, recv_data_len, recv_data)) |
58 | 59 | { |
59 | 60 | result = kSuccess; |
... | ... | @@ -107,3 +108,24 @@ int DLCDevice::FindCard() |
107 | 108 | { |
108 | 109 | return FindAndResetCard(); |
109 | 110 | } |
111 | + | |
112 | + | |
113 | +int DLCDevice::M1Authentication(const unsigned char mode, const unsigned short section) | |
114 | +{ | |
115 | + return dc_authentication(dev_, mode, section); | |
116 | +} | |
117 | + | |
118 | +int DLCDevice::M1LoadKeyHex(const unsigned char mode, const unsigned char* key, const unsigned char section) | |
119 | +{ | |
120 | + return dc_load_key_hex(dev_, mode, section, (char*)key); | |
121 | +} | |
122 | + | |
123 | +int DLCDevice::M1Read(const unsigned char adr, const unsigned char* data) | |
124 | +{ | |
125 | + return dc_read(dev_, adr, (unsigned char*)data); | |
126 | +} | |
127 | + | |
128 | +int DLCDevice::M1Write(const unsigned char adr, const unsigned char* data) | |
129 | +{ | |
130 | + return dc_write(dev_, adr, (unsigned char*)data); | |
131 | +} | |
110 | 132 | \ No newline at end of file | ... | ... |
dlcm/dlcm/DLCDevice.h
... | ... | @@ -19,6 +19,10 @@ public: |
19 | 19 | int DisconnectDevice(); |
20 | 20 | int FindCard(); |
21 | 21 | int SendCommand(unsigned char* send_cmd, const unsigned char send_cmd_len, unsigned char* recv_data, unsigned char& recv_data_len); |
22 | + int M1Authentication(const unsigned char mode, const unsigned short section); | |
23 | + int M1LoadKeyHex(const unsigned char mode, const unsigned char* key, const unsigned char section); | |
24 | + int M1Read(const unsigned char adr, const unsigned char* data); | |
25 | + int M1Write(const unsigned char adr, const unsigned char* data); | |
22 | 26 | |
23 | 27 | private: |
24 | 28 | int Connect(); | ... | ... |
dlcm/dlcm/DLCardManager.h
... | ... | @@ -94,4 +94,20 @@ int __stdcall DLCSOWriteData(const unsigned char* write_key, const unsigned char |
94 | 94 | **/ |
95 | 95 | int __stdcall DLCSOSelectDir(const unsigned char* dir, unsigned char* cmd); |
96 | 96 | |
97 | + | |
98 | +//m1卡api | |
99 | +/*输入section扇区编号,长度为12的16进制秘钥key | |
100 | + **/ | |
101 | +DL_DLL_API int __stdcall DLCM1AuthenticationKey(const unsigned short section, unsigned char* key); | |
102 | + | |
103 | +/*读取m1卡 | |
104 | + *输入block_num数据块编号,返回16字节数据块 | |
105 | + */ | |
106 | +DL_DLL_API int __stdcall DLCM1ReadCard(const unsigned short block_num, const unsigned char* data); | |
107 | + | |
108 | +/*写入m1卡 | |
109 | + *输入block_num数据块编号,返回16字节数据块 | |
110 | + **/ | |
111 | +DL_DLL_API int __stdcall DLCM1WriteCard(const unsigned short block_num, const unsigned char* data); | |
112 | + | |
97 | 113 | #endif //end DL_CARD_MANAGER_H |
98 | 114 | \ No newline at end of file | ... | ... |
dlcm/dlcm/stdafx.h
... | ... | @@ -46,5 +46,9 @@ const int kCardDoNotSupport = 2006; //卡片不支持 |
46 | 46 | const int kCreateKeyFileFailed = 2007; //创建秘钥文件失败 |
47 | 47 | const int kVerifyKeyFailure = 2008; //验证秘钥失败 |
48 | 48 | const int kParameterIsNull = 2009; //参数为空 |
49 | +const int kSuccessFindCard = 2010; //dc_card执行成功,dc_pro_reset失败 | |
50 | +const int kM1LoadKeyFailed = 2011; //m1卡装载秘钥失败 | |
51 | +const int kM1ReadCardFailed = 2018; //m1卡读取失败 | |
52 | +const int kM1WriteCardFailed = 2019; //m1卡写入失败 | |
49 | 53 | |
50 | 54 | #endif //end DL_STDAFX_H |
51 | 55 | \ No newline at end of file | ... | ... |