如何在自定义ENGINE中正确定义EVP_CIPHER init / update / final函数?

时间:2017-06-26 14:47:22

标签: c openssl cryptography aes evp-cipher

我正在构建一个动态引擎,以支持我在FPGA逻辑中实现的自定义AES硬件模块**,但在阅读完所有可用文档后,并且倾注了源代码,我就是这样做的。我仍然对以下两件事感到困惑.....

  1. 我应该如何以及在哪里定义引擎代码中的EVP_[En/De]cryptInit_ex(..)EVP_[En/De]cryptUpdate(..)EVP_[En/De]cryptFinal_ex(..)函数?
  2. 在此之前,我成功为我的sha256加速器构建了一个引擎,现在我尝试按照AES的相同步骤进行操作。对于sha256,EVP_MD结构允许我声明指向init,update和final函数的指针。这一切都完美无缺。

    现在,当我构建AES引擎时,我发现EVP_CIPHER结构没有这些指针(init,update,final),而是有一个指向init_key和do_cipher函数的指针。但是,EVP加密接口仍然定义了这些功能。

    AFAIK(如果这是错误的话请纠正我)当我调用init_key函数时,EVP接口会调用EVP_[En/De]cryptInit_ex函数,do_cipher函数被调用{ {1}}。但是我应该如何处理EVP_[En/De]cryptUpdate函数?我不应该在我的引擎中实现它们吗?或者我在这里错过了什么......

    1. 当涉及动态引擎时,EVP接口是否处理填充?或者我是否应该在引擎内部实现填充结构?如果是后者,那么我认为前面问题的答案将帮助我确切地知道在哪里实施它。
    2. 如果您希望查看源代码,请参阅源代码HERE,但我不认为这个问题是必要的。

      回顾一下,有两个问题:

      1. 如何从驱动程序调用{​​{1}},EVP_[En/De]cryptFinalEVP_[En/De]cryptInit_ex(..)函数时,如何明确定义引擎中的哪些操作?
      2. 我的引擎是否需要在加密时处理填充输入数据,并在解密时剥离填充?或者EVP API是否为我处理填充,我只需要担心任意输入数据上的核心AES算法? (供参考,我只想使用标准的PKCS填充)
      3. 提前致谢!

        **我使用Xilinx Zynq SoC,因此我可以在可编程逻辑中创建自定义硬件,然后通过存储器映射从处理器上运行的软件与其进行交互,就像任何外围设备一样...... .details无关紧要

0 个答案:

没有答案