0
点赞
收藏
分享

微信扫一扫

《OpenSSL3.0学习之二十三 提供程序-storemgmt》

草原小黄河 2022-02-17 阅读 45

文章目录

🌺概要

 #include <openssl/core_dispatch.h>
 
 /*
  * None of these are actual functions, but are displayed like this for
  * the function signatures for functions that are offered as function
  * pointers in OSSL_DISPATCH arrays.
  */
 
 void *OSSL_FUNC_store_open(void *provctx, const char *uri);
 void *OSSL_FUNC_store_attach(void *provctx, OSSL_CORE_BIO *bio);
 const OSSL_PARAM *store_settable_ctx_params(void *provctx);
 int OSSL_FUNC_store_set_ctx_params(void *loaderctx, const OSSL_PARAM[]);
 int OSSL_FUNC_store_load(void *loaderctx,
                          OSSL_CALLBACK *object_cb, void *object_cbarg,
                          OSSL_PASSPHRASE_CALLBACK *pw_cb, void *pw_cbarg);
 int OSSL_FUNC_store_eof(void *loaderctx);
 int OSSL_FUNC_store_close(void *loaderctx);
 
 int OSSL_FUNC_store_export_object
     (void *loaderctx, const void *objref, size_t objref_sz,
      OSSL_CALLBACK *export_cb, void *export_cbarg);

🌻描述

STORE 操作是 ossl_store API 的提供程序端。

STORE 操作的主要职责是从 URI 指示的容器中加载各种对象。这些对象以提供程序-本机对象抽象形式提供给 OpenSSL 库(参见提供程序-对象)。然后,OpenSSL 库负责将该抽象传递给合适的提供函数。

OpenSSL 库可以传递抽象以包含 OSSL_FUNC_keymgmt_load() (提供程序-keymgmt)、OSSL_FUNC_store_export_object() (以参数化形式导出对象) 的函数示例。

这里提到的所有"函数"都作为函数指针在libcrypto和OSSL_DISPATCH数组中的提供程序之间传递,通过由提供程序的**provider_query_operation()**函数返回的OSSL_ALGORITHM数组(参见提供程序-base中的"提供程序函数")。

所有这些"函数"都有一个名为 OSSL_FUNC_{name}_fn 的相应函数类型定义,以及一个帮助器函数,用于从名为 OSSL_get_{name} OSSL_DISPATCH元素中检索函数指针。例如,"函数"OSSL_FUNC_store_load() 具有以下功能:

 typedef void *(OSSL_OSSL_FUNC_store_load_fn)(void *provctx,
                                              const OSSL_PARAM params[]);
 static ossl_inline OSSL_OSSL_FUNC_store_load_fn
     OSSL_OSSL_FUNC_store_load(const OSSL_DISPATCH *opf);

OSSL_DISPATCH数组由 openssl-core_dispatch.h 中作为宏提供的数字编制索引,如下所示:

 OSSL_FUNC_store_open                 OSSL_FUNC_STORE_OPEN
 OSSL_FUNC_store_attach               OSSL_FUNC_STORE_ATTACH
 OSSL_FUNC_store_settable_ctx_params  OSSL_FUNC_STORE_SETTABLE_CTX_PARAMS
 OSSL_FUNC_store_set_ctx_params       OSSL_FUNC_STORE_SET_CTX_PARAMS
 OSSL_FUNC_store_load                 OSSL_FUNC_STORE_LOAD
 OSSL_FUNC_store_eof                  OSSL_FUNC_STORE_EOF
 OSSL_FUNC_store_close                OSSL_FUNC_STORE_CLOSE
 OSSL_FUNC_store_export_object        OSSL_FUNC_STORE_EXPORT_OBJECT

🌹函数

OSSL_FUNC_store_open() 应使用基于输入 uri 的数据创建提供程序端上下文。实现完全负责 URI 的解释。

OSSL_FUNC_store_attach() 应创建一个附加了核心 BIO BIO 的提供者端上下文。这是使用 URI 查找存储的替代方法,支持 OSSL_STORE_attach

OSSL_FUNC_store_settable_ctx_params() 应返回描述符OSSL_PARAM的常量数组,用于OSSL_FUNC_store_set_ctx_params() 可以处理的参数。

OSSL_FUNC_store_set_ctx_params() 应设置其他参数,例如预期的数据类型、搜索条件等。下面将在"加载参数"中详细介绍这些内容。无法识别的参数是错误还是被忽略,由实现自行决定。为参数传递 NULL 应返回 true。

OSSL_FUNC_store_load() 从 OSSL_FUNC_store_open() 打开的 URI 加载下一个对象,为其创建对象抽象(参见 提供程序-object),并用它来调用object_cb以及object_cbarg。然后,object_cb将解释对象抽象,并尽其所能将其包装或解码为OpenSSL结构。如果需要提示密码来解锁对象,则应调用pw_cb。

OSSL_FUNC_store_eof() 指示是否已到达 URI 中对象集的末尾。当这种情况发生时,尝试进行任何进一步的加载是没有意义的。

OSSL_FUNC_store_close() 释放提供程序端上下文 ctx。

🌷加载参数

  • “expect” (OSSL_STORE_PARAM_EXPECT) < integer >
    是 OpenSSL 库希望获得的数据类型的提示。这仅对优化有用,因为库也会检查对象类型是否符合预期。
    可以通过此参数给出的数字可以在 <openssl/store.h> 中找到,宏的名称以 开头。这些在OSSL_STORE_INFO的"支持的对象"中进行了进一步描述。

  • “subject” (OSSL_STORE_PARAM_SUBJECT) < octet string >
    指示调用方要搜索与给定主题关联的对象。这可用于按使用者选择特定证书。
    八位字节字符串的内容应为 DER 形式。

  • “issuer” (OSSL_STORE_PARAM_ISSUER) < octet string >
    指示调用方想要搜索与给定颁发者关联的对象。这可用于按颁发者选择特定证书。
    八位字节字符串的内容应为 DER 形式。

  • “serial” (OSSL_STORE_PARAM_SERIAL) < integer >
    指示调用方要搜索具有关联给定序列号的对象。

  • “digest” (OSSL_STORE_PARAM_DIGEST) < UTF8 string >
    “fingerprint” (OSSL_STORE_PARAM_FINGERPRINT) < octet string >
    指示调用方要使用给定的指纹搜索对象,该指纹是使用给定摘要计算的。

  • “alias” (OSSL_STORE_PARAM_ALIAS) < UTF8 string >
    指示调用方想要搜索具有给定别名的对象(有人称其为"友好名称")。

  • “properties” (OSSL_STORE_PARAM_PROPERTIES) < utf8 string >
    查询算法(如OSSL_DECODER解码器实现)时要使用的属性字符串。

  • “input-type” (OSSL_STORE_PARAM_INPUT_TYPE) < utf8 string >
    键入输入格式作为解码存储中的对象时要使用的提示。

其中几个搜索条件可以组合在一起。例如,要按issuer+serial搜索证书,将同时给出"issuer"和"serial"参数。

举报

相关推荐

0 条评论