为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM8
【操作系统】:Centos 7
【CPU】:
【问题描述】*:添加自定义算法实现dm提供的接口,请教几个接口参数的含义和具体用法。
- 加密初始化函数
dm_bool cipher_encrypt_init( ulint inner_id, byte* key, ulint key_size, void** encrypt_para );
void** encrypt_para:该参数如何使用
- 获取密文字节数
lint cipher_get_cipher_text_size( ulint inner_id,void* cipher_para, lint plain_text_size );
void* cipher_para: 该参数如何使用,与初始化函数中的encrypt_para 是什么关系
- 参数未使用情况
查阅《DM安全管理文档》中的例子, 自定义函数实现中,加密引擎接口中的参数未使用,比如密文长度,是否正常
- 加密函数中的key是dm自动生成的,是否支持外部生成
- 是否可以提供自定义算法的demo
1、该参数名字不是 encrypt_para,而是cipher_para,
它的作用是要用户自己分配内存,将密钥长度和密钥本身拷入分配的内存:
示例代码如下:
DllExport
dm_bool
cipher_encrypt_init(
ulint inner_id,
byte* key,
ulint key_len,
void** cipher_para
)
{
ulint offset = 0;
ulint key_size;
ulint block_size;
ulint algo_id;
ulint algo_mode;
…
//分配内存
*cipher_para = malloc(sizeof(ulint) + key_len);
if (cipher_para == FM_NULL)
{
return DM_FALSE;
}
//拷贝密钥长度
memcpy((byte)(*cipher_para) + offset, &key_len, sizeof(ulint));
//拷贝密钥本身
offset += sizeof(ulint);
memcpy((byte*)(*cipher_para) + offset, key, key_len);
}
2、该参数和上述参数是一个。
3、示例代码里因为很简单,密文长度=明文长度,因此没有调用获取密文长度的接口,常规算法都存在膨胀,因此都应该是需要的。
4、支持外部key,见问题1的密钥拷贝。
5、安全管理手册里面是完整的可运行的demo。