DSP TMS320操作加密芯片源代码
DSP TMS320操作SMEC98SP加密芯片的事例代碼,如果需要完整代碼(包括加密芯片代碼),請到中巨偉業(yè) http://www.sinormous.com/download.html下載
//###########################################################################
//
// FILE: SMEC98SPforTMS320
//
// TITLE: SMEC98SP加密芯片在DSP中的應(yīng)用
// 深圳市中巨偉業(yè)信息科技有限公司
// www.sinormous.com;
// Author:顧萬水
// QQ:47583353
#include “DSP2833x_Device.h” // DSP2833x 頭文件
#include “DSP2833x_Examples.h” // DSP2833x 例子相關(guān)頭文件
#include
#include <stdlib.h>
#include “iic_smec98sp.h”
#include “smec98sp.h”
/*
1.獲取SMEC98SP的UID號, 獲取MCU隨機數(shù)
2.驗證PIN
3.內(nèi)外部認(rèn)證
4.SHA1=>前置數(shù)據(jù)^隨機數(shù)
5.密文讀
6.讀數(shù)據(jù)
7.寫數(shù)據(jù)
8.構(gòu)造算法(PA口數(shù)據(jù)->密文送加密芯片, 密文返回)
如果直接引用,請將print的調(diào)試信息去除
*/
void SMEC_Test(void)
{
/*各種密鑰,不會在I2C線路上傳輸,可以使用同一組.應(yīng)該將密鑰分散存儲,防止主控芯片被破解后,被攻擊者在二進制碼中找到密鑰 */
unsigned char InternalKey[16] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F};//內(nèi)部認(rèn)證密鑰,必須和SMEC98SP一致
unsigned char ExternalKey[16] = {0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F};//外部認(rèn)證密鑰,必須和SMEC98SP一致
unsigned char SHA1_Key[16] = {0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F}; //哈希算法認(rèn)證密鑰,必須和SMEC98SP一致
unsigned char MKey[16] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F}; //主控密鑰,用于產(chǎn)生過程密鑰,必須和SMEC98SP一致
unsigned char Pin[8] = {0x55,0x66,0x77,0x88,0x99,0xaa,0xbb,0xcc}; //Pin認(rèn)證密鑰,必須和SMEC98SP一致
// printf(“SMEC_ExtrAuth OK !\r\n”);
/*SHA1摘要算法認(rèn)證, 數(shù)據(jù)長度可自己設(shè)定*/ for(i = 0; i < 16; i ++) {bDataBuf[i] = (unsigned char) rand();//bDataBuf[i] = (unsigned char) i; } ret = SMEC_Sha1Auth(SHA1_Key, (unsigned char)sizeof(SHA1_Key), bDataBuf, 16); if(ret) {//printf("SMEC_Sha1Auth -> Error !\r\n");while(1); } //printf("SMEC_Sha1Auth OK !\r\n");/*調(diào)用加密芯片內(nèi)部計算圓周長算法*/ bDataBuf[0] = 0x02; ret = SMEC_CircleAlg(bDataBuf, 1, bDataBuf, &bLen); if(ret) {//printf("SMEC_CircleAlg -> Error !\r\n");while(1); } //printf("SMEC_CircleAlg OK, C = %02x !\r\n", bDataBuf[0]);/*產(chǎn)生過程密鑰,用于后續(xù)的Flash數(shù)據(jù)加密讀,及構(gòu)造的"端口數(shù)據(jù)運算"*/ for(i = 0; i < 8; i ++) {bRandom[i] = (unsigned char) rand(); } ret = SMEC_GenSessionKey(MKey, bRandom, bSessionKey); if(ret) {//printf("SMEC_GenSessionKey -> Error !\r\n");while(1); } //printf("SMEC_GenSessionKey OK !\r\n");/*密文讀取Flash數(shù)據(jù)*/ ret = SMEC_CryptReadFlash(bSessionKey, 0x0000, bDataBuf, 16); if(ret) {//printf("SMEC_CryptReadFlash -> Error !\r\n");while(1); } //printf("SMEC_CryptReadFlash OK:\r\n"); //PrintHex(bDataBuf, 16);/*讀取Flash數(shù)據(jù)*/ ret = SMEC_ReadFlash(0x0000, bDataBuf, 16); if(ret) {//printf("SMEC_ReadFlash -> Error !\r\n");while(1); } //printf("SMEC_ReadFlash OK:\r\n"); //PrintHex(bDataBuf, 16);/*寫Flash數(shù)據(jù)*/ for(i = 0; i < 16; i ++) {bDataBuf[i] = (unsigned char) i; } ret = SMEC_WriteFlash(0x0000, bDataBuf, 16); if(ret) {//printf("SMEC_WriteFlash -> Error !\r\n");while(1); } //printf("SMEC_WriteFlash OK!\r\n");/*構(gòu)造"端口數(shù)據(jù)運算", 可以用實際的PA~PC端口數(shù)據(jù)*/ bDataBuf[0] = 0x00; bDataBuf[1] = 0x00; ret = SMEC_GpioAlg(bSessionKey, bDataBuf,2, bDataBuf); if(ret) {//printf("SMEC_GpioAlg -> Error !\r\n");while(1); } //printf("SMEC_GpioAlg OK:\r\n");// PrintHex(bDataBuf, 2);
/*調(diào)用加密芯片內(nèi)部計算圓周長算法,并密文在線路上傳輸*/ bDataBuf[0] = 0x02; ret = SMEC_CircleAlgCrypt(bSessionKey, bDataBuf, 1, bDataBuf, &bLen); if(ret) {//printf("SMEC_CircleAlgCrypt -> Error !\r\n");while(1); } //printf("SMEC_CircleAlg OK, C = %02x !\r\n", bDataBuf[0]);}
void main(void)
{
InitSysCtrl();
SMEC_I2cInit();
SMEC_Test();
while(1);
}
總結(jié)
以上是生活随笔為你收集整理的DSP TMS320操作加密芯片源代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机病毒分为哪三类
- 下一篇: python --通过urlretrie