聯(lián)系我們
13482583038DX8加密芯片應(yīng)用開發(fā)手冊(四)
7.??? DX8_API庫函數(shù)詳細(xì)介紹
這章節(jié)主講DX8_API函數(shù)的詳細(xì)介紹的第一部分系統(tǒng)函數(shù)
7.1. 系統(tǒng)函數(shù):
7.1.1. 獲取API版本
u8_x *DX8_Version(void);
功能描述: 獲取DX8_API版本
參數(shù):? ? ? ?void
返回值:?? 字符串指針
示例代碼:;
char *apiVersion = DX8_Version();
printf(“Version = %s\n”, apiVersion);
7.1.2. 復(fù)位設(shè)備
u8_x? DX8_Reset(void);
功能描述:復(fù)位DX8芯片,并獲取芯片的配置信息
參數(shù):? ? ? void
返回值:? 成功返回0,否則返回錯誤代碼
示例代碼:
u8_x rv;
rv = DX8_Reset();
if (rv) {
?? printf(“Reset device failed, rv = 0x%.2x\n”, rv);
?? return rv;
}
DX8_Reset獲取DX8芯片的配置信息存儲在CHIP_INFO dx8_info結(jié)構(gòu)體中,dx8_info在庫中已經(jīng)定義,在DX8_API.h頭文件extern 出來了,用戶可以直接訪問dx8_info來獲取芯片的信息,如SN、UID和Zone的配置模式等:
? ? ? CHIP_INFO結(jié)構(gòu)體C定義:??? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?CHIP_INFO結(jié)構(gòu)體Java類定義:
? ? ? ?? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ??? ? ? ? ? ? ? ?
DX81/DX82芯片基本信息列表:
Product |
Type |
PageSize (Bytes) |
ZoneNum |
ZoneSize (Bytes) |
EEPROM (Bits) |
DX81系列芯片 |
|||||
DX81C01 |
0x10 |
16 |
4 |
32 |
1K |
DX81C02 |
0x11 |
4 |
64 |
2K |
|
DX81C04 |
0x12 |
4 |
128 |
4K |
|
DX81C08 |
0x13 |
32 |
8 |
128 |
8K |
DX81C16 |
0x14 |
16 |
128 |
16K |
|
DX81C32 |
0x15 |
16 |
256 |
32K |
|
DX81C64 |
0x16 |
16 |
512 |
64K |
|
DX81C128 |
0x17 |
64 |
16 |
1024 |
128K |
DX81C256 |
0x18 |
16 |
2048 |
256K |
|
DX82系列芯片 |
|||||
DX82C01 |
0x20 |
16 |
4 |
32 |
1K |
DX82C02 |
0x21 |
4 |
64 |
2K |
|
DX82C04 |
0x22 |
4 |
128 |
4K |
|
DX82C08 |
0x23 |
32 |
8 |
128 |
8K |
DX82C16 |
0x24 |
16 |
128 |
16K |
|
DX82C32 |
0x25 |
16 |
256 |
32K |
|
DX82C64 |
0x26 |
16 |
512 |
64K |
|
DX82C128 |
0x27 |
64 |
16 |
1024 |
128K |
DX82C256 |
0x28 |
16 |
2048 |
256K |
SN:? 8個字節(jié),每顆芯片有全球唯一的序列號,永遠(yuǎn)無法修改
UID:7個字節(jié),用戶可以對每個產(chǎn)品自行設(shè)置ID號,設(shè)置后可鎖定,永遠(yuǎn)無法修改,出廠時為全0xff
MID:6個字節(jié),廠商代碼,只讀
ZoneMode:16個字節(jié),每個字節(jié)對應(yīng)一個Zone的配置信息,配置完成后將鎖定,將永遠(yuǎn)無法修改,每個字節(jié)定義如下:
Fuse:1個OTP字節(jié),該字節(jié)每bit只能從1寫成0, 0永遠(yuǎn)無法再變成1,該字節(jié)每bit代表相應(yīng)配置信息的鎖定狀態(tài),定義如下:
說明:DX8芯片經(jīng)專用燒錄器個人化后,Fuse字節(jié)為0x00,即配置全部鎖定。
7.1.3. 睡眠
u8_x? DX8_Sleep(void);
功能描述:使DX8芯片進(jìn)入睡眠狀態(tài)
參數(shù):???? void
返回值:? 成功返回0,否則返回錯誤代碼
示例代碼:
u8_x rv;
rv = DX8_Sleep();
if (rv) {
?? printf(“Sleep device failed, rv = 0x%.2x\n”, rv);
?? return rv;
}
7.1.4. 喚醒
u8_x? DX8_Wakeup(void);
功能描述:喚醒DX8芯片進(jìn)入工作狀態(tài),DX8_Reset()函數(shù)也可以喚醒DX8芯片
參數(shù):???? void
返回值:? 成功返回0,否則返回錯誤代碼
示例代碼:
u8_x rv;
rv = DX8_Wakeup();
if (rv) {
?? printf(“Wakeup device failed, rv = 0x%.2x\n”, rv);
?? return rv;
}
7.1.5. 獲取隨機(jī)數(shù)
u8_x DX8_GetRandom(u8_x *random, u8_x len);
功能描述:從DX8芯片中獲取真隨機(jī)數(shù),長度必須不大于32
參數(shù):??? random?? 返回的隨機(jī)數(shù)存儲buffer
????????? len??????? 獲取隨機(jī)數(shù)的長度,最小為1,最大為32
返回值:? 成功返回0,否則返回錯誤代碼
示例代碼:
u8_x rv;
u8_x random[32];
rv = DX8_GetRandom(random, 32);
if (rv) {
?? printf(“Get Random failed, rv = 0x%.2x\n”, rv);
?? return rv;
}
7.1.6. 驗證PIN
u8_x DX8_VerifyPin(u8_x *seed, u8_x *buf);
功能描述:驗證PIN,主機(jī)對DX8進(jìn)行驗證,同時DX8對主機(jī)進(jìn)行驗證
參數(shù):? ? ? seed? 輸入32個字節(jié)的隨機(jī)數(shù),主機(jī)對DX8進(jìn)行認(rèn)證
? ? ? ? ? ? ? ? buf?? 輸入8個字節(jié)PIN碼,DX8對主機(jī)進(jìn)行認(rèn)證
返回值:? 驗證通過返回0,否則返回錯誤代碼
說明:該函數(shù)不會將用戶PIN碼暴漏在傳輸線上,PIN碼本身是對芯片配置權(quán)限作認(rèn)證的,當(dāng)芯片配置被全部鎖定后,該函數(shù)任然可以用作Passwords Checking雙向認(rèn)證功能,芯片出廠PIN碼為8個0xff
示例代碼:
u8_x rv;
u8_x seed[32];
GetSoftRandom(seed,32);
rv = DX8_VerifyPin(seed, pin_value);
if (rv) {
?? printf(“Verify PIN failed, rv = 0x%.2x\n”, rv);
?? return rv;
}
說明:pin_value是在使用Dx8Configuration.exe時產(chǎn)生的dx8_engineer.h中定義,需要將dx8_engineer.h包含到應(yīng)用程序中
待續(xù)......
【返回列表】相關(guān)新聞
- DX8加密芯片應(yīng)用開發(fā)手冊(六)2017-09-05
- DX8加密芯片應(yīng)用開發(fā)手冊(五)2017-09-03
- DX8加密芯片應(yīng)用開發(fā)手冊(三)2017-08-31
- DX8加密芯片應(yīng)用開發(fā)手冊(二)2017-08-30
- DX8加密芯片應(yīng)用開發(fā)手冊(一)2017-08-29