一般来说,提供Crypto模块的时候应当有一个预配置,这个预配置代表了Crypto模块的能力,能够提供什么样的加密功能。如果Crypto不能提供某种加密方式的处理,那么Csm里也不可能配置的出来。
从项目角度来说,通常的配置方式是从Csm开始,然后配置CryIf,再然后配置Crypto。
Csm的配置基本概念可参考
从Csm开始,用户先选择好使用哪种加密方式以及对应的key。之后用户可以定义Job以及队列。
在CryIf中,用户需要定义Csm需要用到的功能以及Crypro能够提供的功能之间的关联关系。
在Crypto中,用户调整或者扩展预配置的算法以及密钥。
以MAC为例
我们来看一个消息认证码的例子:用户创建了一个使用MAC算法的job,选择了对应的key,并且选择了同步(或者异步)处理方式。

相关API
如果是启用了RTE port,那么RTE会生成对应的C/S接口CsmMacGenerate_{Primitive}(),这个接口有一个Port Defined Argument(Crypto_OperationModeType),其值为CRYPTO_OPERATIONMODE_SINGLECALL。因此,SWC通过调用这个接口,将所有数据传进去,请求执行MAC计算。
如果是上图所示,没有启用RTE port,那么对应的模块只需要直接调用Csm_MacGenerate(), 传入对应的Job和模式,以及数据。

我们在Primitive里配置了同步模式,所以job会以同步方式被处理。Csm将MAC请求通过CryIf_ProcessJob()接口分配给CryIf,然后CryIf通过Crypto_ProcessJob()接口将请求传递给Crypto模块,Crypto模块根据job参数中的Primitive信息,最终执行MAC计算。计算结果最终会放入调用Csm接口的macPtr输入输出参数。
