• 关于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)

  • 相关阅读:
    OpenCV 4.0.0学习笔记 (一) 图像与视频的读写
    毕业设计ASP.NET 2368酒店信息管理系统【程序源码+文档+调试运行】
    基于 Python 的豆瓣电影分析、可视化系统,附源码
    汇编基础(2) -- ARM64
    Freeswitch操作基本配置
    2.Spring的优缺点是什么?
    用springboot+elasticserach7的demo,对比sider和百度ai的异同
    猿创征文|机器学习实战(8)——随机森林
    范围求和 II
    使用workerman/mqtt做队列(订阅)
  • 原文地址:https://blog.csdn.net/weixin_39807914/article/details/126235844