Crypto API - 8. 加密引擎

Crypto API - 8. 加密引擎

概述

加密引擎 (CE) API 是一个加密队列管理器。

要求

您必须在您的转换上下文 your_tfm_ctx 的开头放置结构体 crypto_engine:

struct your_tfm_ctx {
        struct crypto_engine engine;
        ...
};

加密引擎仅能管理以 crypto_async_request 形式的异步请求。它无法知道底层请求类型,因此只能访问转换结构体(transform structure)。无法使用 container_of 访问上下文。此外,引擎对您的结构体 “struct your_tfm_ctx” 一无所知。引擎假设(要求)已知成员结构体 crypto_engine 放置在开头。

操作顺序

您需要通过 crypto_engine_alloc_init() 获取一个结构体 crypto_engine。使用 crypto_engine_start() 启动它。完成工作后,使用 crypto_engine_stop() 关闭引擎,并使用 crypto_engine_exit() 销毁引擎。

在传输任何请求之前,您需要通过提供以下函数来填充上下文 enginectx:

  • prepare_crypt_hardware: 在调用任何 prepare 函数之前调用一次。
  • unprepare_crypt_hardware: 在调用所有 unprepare 函数之后调用一次。
  • prepare_cipher_request/prepare_hash_request: 在执行每个对应的请求之前调用。如果需要进行某些处理或其他准备工作,请在此处进行。
  • unprepare_cipher_request/unprepare_hash_request: 在处理每个请求后调用。清理 / 撤消 prepare 函数中完成的工作。
  • cipher_one_request/hash_one_request: 通过执行操作处理当前请求。

请注意,这些函数访问收到的请求关联的 crypto_async_request 结构体。您可以通过以下方式获取原始请求:

container_of(areq, struct yourrequesttype_request, base);

当驱动程序收到crypto_request时,必须通过以下方法之一将其传输到加密引擎:

  • crypto_transfer_aead_request_to_engine()
  • crypto_transfer_akcipher_request_to_engine()
  • crypto_transfer_hash_request_to_engine()
  • crypto_transfer_kpp_request_to_engine()
  • crypto_transfer_skcipher_request_to_engine()

在请求过程结束时,需要调用以下函数之一:

  • crypto_finalize_aead_request()
  • crypto_finalize_akcipher_request()
  • crypto_finalize_hash_request()
  • crypto_finalize_kpp_request()
  • crypto_finalize_skcipher_request()

ref: https://www.kernel.org/doc/html/latest/crypto/crypto_engine.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值