我正在将一些内核源代码从 Solaris 移植到 Linux,并且我有 7 个函数需要进行等效实现。在 Solaris 中,它们是:
int crypto_create_ctx_template(crypto_mechanism_t *mech,
crypto_key_t *key, crypto_ctx_template_t *tmpl, int kmflag)
void crypto_destroy_ctx_template(crypto_ctx_template_t tmpl)
int crypto_mac(crypto_mechanism_t *mech, crypto_data_t *data,
crypto_key_t *key, crypto_ctx_template_t tmpl, crypto_data_t *mac,
crypto_call_req_t *cr)
int crypto_decrypt(crypto_mechanism_t *mech, crypto_data_t *ciphertext,
crypto_key_t *key, crypto_ctx_template_t tmpl,
crypto_data_t *plaintext, crypto_call_req_t *cr)
int crypto_encrypt(crypto_mechanism_t *mech, crypto_data_t *plaintext,
crypto_key_t *key, crypto_ctx_template_t tmpl, crypto_data_t *ciphertext,
crypto_call_req_t *cr)
crypto_mech_type_t crypto_mech2id(crypto_mech_name_t name)
我最好的猜测是 Solaris 中的加密 API 让我可以对缓冲区进行排队处理,并在任务完成时提供回调函数。
在Linux下,我最初想,我最好的选择是让_ctx_template做“很少,什么都不做”,并直接实现加密和解密(阻塞)并调用CB本身。最终,使用一个同时完成工作的内核线程。
有没有人做过任何内核加密工作?cryptodev 似乎是用于用户态工作的?