关于XCP标定CANape的界面安全会话DLL库

DLL库我们一般用VS工具来生成,首先选择生成DLL例程模板。和其他安全会话一样,主要分为3部分;首先上位机获取DLL库的权限,然后向下位机发送获取当前权限下的种子(SEED)请求,进行上位机SEED值的计算比较,然后向下位机发送KEY值来获取权限。

//*****************************************************************************
/// @fn   DllMain ... Windows DLL entrance point
//*****************************************************************************
BOOL WINAPI DllMain (HANDLE hModule,  DWORD  fdwReason, LPVOID lpReserved)
{
   switch (fdwReason) {
      case DLL_PROCESS_ATTACH: setMyPrivilege(); break;
      case DLL_PROCESS_DETACH: break;
      default:                 break;
   } // switch

   return TRUE;
}
 

XCP标定安全会话,一般会加密四种工况,分别为标定页切换(XcpSkPrivCalPag)、DAQ测量(XcpSkPrivDaq)、STIM旁路(XcpSkPrivStim)和PGM刷写(XcpSkPrivPgm)。根据下位机底层代码的实现情况,使能这几种模式。

static void setMyPrivilege()
{
   MyPrivilege = 0;
   // to do:   comment out unsupported privileges
   // example: MyPrivilege |= XcpSkPrivCalPag; -> //MyPrivilege |= XcpSkPrivCalPag;
   MyPrivilege |= XcpSkPrivCalPag;
   MyPrivilege |= XcpSkPrivDaq;
   MyPrivilege |= XcpSkPrivStim;
   MyPrivilege |= XcpSkPrivPgm;
}

// privileges
const BYTE            XcpSkPrivCalPag                     = 0x01; // Calibration & Page Mngmnt privilege
const BYTE            XcpSkPrivDaq                        = 0x04; // Acquisition privilege
const BYTE            XcpSkPrivStim                       = 0x08; // Stimulation privilege
const BYTE            XcpSkPrivPgm                        = 0x10; // Programming privilege

获取可用权限

EXTERN_C __declspec(dllexport) TXcpSkExtFncRet __cdecl XCP_GetAvailablePrivileges(BYTE *privilege)
{
   // check input parameter

   // set available privileges
}

然后发送获取种子并进行比较,并返回KEY值:

EXTERN_C __declspec(dllexport) TXcpSkExtFncRet __cdecl XCP_ComputeKeyFromSeed(BYTE privilege, 
                                                       BYTE byteLenSeed, BYTE *seed,
                                                       BYTE *byteLenKey, BYTE *key)
{
   // check input parameter
  // unsupported privilege request
  // check key length

  // compute key for respective privilege
}

注意:这两个函数是CANape给的标准接口函数

EXTERN_C __declspec(dllexport) TXcpSkExtFncRet __cdecl XCP_GetAvailablePrivileges(BYTE *privilege)

EXTERN_C __declspec(dllexport) TXcpSkExtFncRet __cdecl XCP_ComputeKeyFromSeed(BYTE privilege, 
                                                       BYTE byteLenSeed, BYTE *seed,
                                                       BYTE *byteLenKey, BYTE *key)

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值