0
点赞
收藏
分享

微信扫一扫

《OpenSSL3.0学习之二十四 提供程序-object》

mjjackey 2022-02-18 阅读 49

文章目录

🌺概要

 #include <openssl/core_object.h>
 #include <openssl/core_names.h>

🌻描述

提供程序本机对象抽象是一组OSSL_PARAM键和值,可用于将提供程序本机对象传递到 OpenSSL 库代码,或者在 OpenSSL 库代码的帮助下在不同的提供程序操作实现之间传递。

其目的是使某些提供程序本机操作可以传递属于其他操作或 OpenSSL 库代码的任何类型的对象。

可以通过以下方式传递对象:

  1. 按值
    这意味着对象数据作为八位字节字符串或 UTF8 字符串传递,其他提供的实现可以以不同的方式处理这些字符串。对象的编码取决于它使用的上下文;例如,== OSSL_DECODER==允许多种编码, 这取决于现有的解码器。如果中央 OpenSSL 库功能是直接处理数据,则必须在 DER 中对所有对象类型进行编码,但OSSL_OBJECT_NAME除外(请参阅下面的"参数参考"),其中假定为纯 UTF8 字符串。

  2. 通过引用
    这意味着不会直接传递对象数据,而是传递对象引用。它是一个八位字节字符串,只有正确的提供程序才能正确理解。

按值排序的对象可由处理 DER 编码对象的任何内容使用。

通过引用,对象需要来自对象的实现(我们称之为 X)及其目标实现(我们称之为 Y)的更高级别的协作:

  1. 目标实现中的对象加载函数

    目标实现 (Y) 可能具有可以采用对象引用的函数。仅当目标实现与发起相关对象抽象的提供程序 (X) 来自同一提供程序时,才能使用此选项。

    要使用的确切目标实现是根据对象类型(可能还有对象数据类型)确定的。例如,当 OpenSSL 库接收到对象类型为 OSSL_OBJECT_PKEY 的对象抽象时,它将使用对象数据类型作为其键类型(EVP_KEYMGMT_fetch中的第二个参数)获取提供程序-keymgmt

  2. 原始实现中的对象导出程序

    原始实现 (X) 可能具有导出器函数。此导出器函数可用于以 OSSL_PARAM 形式导出对象,然后可以通过目标实现的导入函数导入该对象。

    当无法从同一提供程序获取目标实现 (Y) 时,可以使用此选项。

🌹参数参考

提供程序原生对象抽象是一个OSSL_PARAM,其中包含以下参数:

  • “data” (OSSL_OBJECT_PARAM_DATA) < octet string > or < UTF8 string >
    按值传递的对象数据。

  • “reference” (OSSL_OBJECT_PARAM_REFERENCE) < octet string >
    通过引用传递的对象数据。

  • “type” (OSSL_OBJECT_PARAM_TYPE) < integer >
    对象类型,一个可能具有以下任何值的数字(全部定义在 <openssl/core_object.h> 中):

    1. OSSL_OBJECT_NAME
      对象数据只能按值传递,并且应为 UTF8 字符串。

      这对于提供程序-storemgmt很有用 当 URI 加载导致新的 URI 时。

    2. OSSL_OBJECT_PKEY
      对象数据适合用作提供程序本机EVP_PKEY键数据。对象数据可以按值传递,也可以按引用传递。

    3. OSSL_OBJECT_CERT
      对象数据适合用作 X509 数据。此对象类型的对象数据只能按值传递,并且应为八位字节字符串。

      由于没有提供程序本机 X.509 对象,因此接收此对象抽象的 OpenSSL 库应将数据转换为具有 d2i_X509() 的 X509 对象。

    4. OSSL_OBJECT_CRL
      对象数据适合用作X509_CRL数据。对象数据只能按值传递,并且应该是八位字节字符串。

      由于没有提供程序本机 X.509 CRL 对象,因此接收此对象抽象的 OpenSSL 库应将数据转换为具有 d2i_X509_CRL() X509_CRL对象。

  • “data-type” (OSSL_OBJECT_PARAM_DATA_TYPE) < UTF8 string >
    对象内容的特定类型。合法值取决于对象类型;如果OSSL_OBJECT_PKEY, 则数据类型应为适合获取可以处理数据的提供程序-keymgmt的密钥类型。

  • “data-structure” (OSSL_OBJECT_PARAM_DATA_STRUCTURE) < UTF8 string >
    对象内容的最外层结构。合法值取决于对象类型。

  • “desc” (OSSL_OBJECT_PARAM_DESC) < UTF8 string >
    描述对象的额外详细信息的人类可读文本。

当使用提供程序本机对象 abtraction 时,它必须包含至少一种形式的对象数据(按值传递的对象数据,即"数据"项,或通过引用传递的对象数据,即"引用"项)。两者可能同时存在,在这种情况下,接收它的OpenSSL库代码将使用最佳变体。

对于对象类型OSSL_OBJECT_NAME的对象,必须指定该对象类型。

举报

相关推荐

0 条评论