2

我正在将一些内核源代码从 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 似乎是用于用户态工作的?

4

0 回答 0