提供者
名稱
提供者 - OpenSSL 作業實作提供者
語法
#include <openssl/provider.h>
說明
一般
此頁面包含對提供者作者有用的資訊。
在 OpenSSL 條款中,提供者是提供一個或多個實作,用於各種演算法的不同作業的程式碼單元,而這些演算法可能是您想要執行的演算法。
作業是您想要執行的事項,例如加密和解密、金鑰衍生、MAC 計算、簽署和驗證等。
演算法是執行作業的命名方法。演算法通常圍繞著密碼學作業進行,但也可能圍繞著其他類型的作業進行,例如管理特定類型的物件。
請參閱 crypto(7) 以取得進一步的詳細資料。
提供者
提供者提供初始化函式,作為 OSSL_DISPATCH(3) 陣列形式的基本函式組,並進一步提供一組 OSSL_ALGORITHM(3)(請參閱 openssl-core.h(7))。它可能是動態載入的模組,或可能是內建的,在 OpenSSL 函式庫或應用程式中。如果是動態載入的模組,則初始化函式必須命名為 OSSL_provider_init
並且必須匯出。如果是內建的,則初始化函式可以有任何名稱。
初始化函式必須具有下列簽章
int NAME(const OSSL_CORE_HANDLE *handle,
const OSSL_DISPATCH *in, const OSSL_DISPATCH **out,
void **provctx);
handle 是提供者的 OpenSSL 函式庫物件,並作為 OpenSSL 函式庫需要了解的提供者所有資訊的控制代碼。對於提供者本身,它會傳遞給 in 中提供的派遣陣列中的一些函式。
in 是由 OpenSSL 函式庫提供的基本函式派遣陣列,而可用的函式會進一步在 provider-base(7) 中說明。
*out 必須指定提供者提供給 OpenSSL 函式庫的基本函式派遣陣列。可在 provider-base(7) 中進一步說明可提供的函式,而它們是 OpenSSL 函式庫和提供者之間的中央通訊方式。
*provctx 應指定提供者特定內容,以允許提供者同時使用多次。此指標會傳遞給提供者提供的各種作業函式。
請注意,在初始化函式完成並成功傳回之前,提供者不會提供給應用程式使用。
提供者提供給 OpenSSL 函式庫的其中一個函式是 OpenSSL 函式庫取得各種演算法作業實作的中央機制。它會以數字 OSSL_FUNC_PROVIDER_QUERY_OPERATION 進行參照,並具有下列簽章
const OSSL_ALGORITHM *provider_query_operation(void *provctx,
int operation_id,
const int *no_store);
provctx 是由初始化函式傳回的提供者特定內容。
operation_id 是作業識別碼(請參閱下列「作業」)。
no_store 是回傳給 OpenSSL 函式庫的旗標,當其非零時,表示 OpenSSL 函式庫不會在其內部儲存實作的儲存中儲存對回傳資料的參考。
回傳的 OSSL_ALGORITHM(3) 是任何 OpenSSL 函式庫 API 的基礎,其使用提供者作為實作,最常見於擷取類型的函式(請參閱 crypto(7) 中的「演算法擷取」)。
操作
操作以數字表示,透過巨集,名稱以 OSSL_OP_
開頭。
每個操作都附帶一組已定義的函式類型,提供者可以或不能提供,視其需要而定。
目前可用的操作為
- 摘要
-
在 OpenSSL 函式庫中,對應的方法物件為 EVP_MD。此操作的數字為 OSSL_OP_DIGEST。提供者可以提供的函式說明於 provider-digest(7) 中。
- 對稱式密碼
-
在 OpenSSL 函式庫中,對應的方法物件為 EVP_CIPHER。此操作的數字為 OSSL_OP_CIPHER。提供者可以提供的函式說明於 provider-cipher(7) 中。
- 訊息驗證碼 (MAC)
-
在 OpenSSL 函式庫中,對應的方法物件為 EVP_MAC。此操作的數字為 OSSL_OP_MAC。提供者可以提供的函式說明於 provider-mac(7) 中。
- 金鑰衍生函式 (KDF)
-
在 OpenSSL 函式庫中,對應的方法物件為 EVP_KDF。此操作的數字為 OSSL_OP_KDF。提供者可以提供的函式說明於 provider-kdf(7) 中。
- 金鑰交換
-
在 OpenSSL 函式庫中,對應的方法物件為 EVP_KEYEXCH。此操作的數字為 OSSL_OP_KEYEXCH。提供者可以提供的函式說明於 provider-keyexch(7) 中。
- 非對稱式密碼
-
在 OpenSSL 函式庫中,對應的方法物件為 EVP_ASYM_CIPHER。此操作的數字為 OSSL_OP_ASYM_CIPHER。提供者可以提供的函式說明於 provider-asym_cipher(7) 中。
- 非對稱式金鑰封裝
-
在 OpenSSL 函式庫中,對應的方法物件為 EVP_KEM。此操作的數字為 OSSL_OP_KEM。提供者可以提供的函式說明於 provider-kem(7) 中。
- 編碼
-
在 OpenSSL 函式庫中,對應的方法物件為 OSSL_ENCODER。此操作的數字為 OSSL_OP_ENCODER。提供者可以提供的函式說明於 provider-encoder(7) 中。
- 解碼
-
在 OpenSSL 函式庫中,對應的方法物件為 OSSL_DECODER。此操作的數字為 OSSL_OP_DECODER。提供者可以提供的函式說明於 provider-decoder(7) 中。
- 亂數產生
-
此操作的數字為 OSSL_OP_RAND。提供者可以提供的亂數產生函式說明於 provider-rand(7) 中。
- 金鑰管理
-
此操作的數字為 OSSL_OP_KEYMGMT。提供者可以提供的金鑰管理函式說明於 provider-keymgmt(7) 中。
- 簽署和簽章驗證
-
此操作的編號為 OSSL_OP_SIGNATURE。供應商可提供的數位簽章功能說明於 provider-signature(7)。
- 儲存管理
-
此操作的編號為 OSSL_OP_STORE。供應商可提供的儲存管理功能說明於 provider-storemgmt(7)。
演算法命名
演算法名稱不區分大小寫。任何特定演算法都可以有多個別名與其關聯。OpenSSL 正規命名方式遵循下列格式
ALGNAME[VERSION?][-SUBNAME[VERSION?]?][-SIZE?][-MODE?]
VERSION 僅在演算法有多個版本時出現(例如 MD2、MD4、MD5)。如果只有一個版本,則可以省略。
SUBNAME 可以在將多個演算法組合在一起時出現,例如 MD5-SHA1。
SIZE 僅在演算法有多個不同大小的版本時出現(例如 AES-128-CBC、AES-256-CBC)
MODE 僅在適用的情況下出現。
其他別名可能存在,例如標準組織或慣例使用替代名稱或 OpenSSL 歷史上使用的名稱。
OPENSSL 供應商
OpenSSL 提供多個自己的供應商。這些供應商為預設、基本、fips、舊版和 null 供應商。請參閱 crypto(7) 以取得這些供應商的概觀。
另請參閱
EVP_DigestInit_ex(3)、EVP_EncryptInit_ex(3)、OSSL_LIB_CTX(3)、EVP_set_default_properties(3)、EVP_MD_fetch(3)、EVP_CIPHER_fetch(3)、EVP_KEYMGMT_fetch(3)、openssl-core.h(7)、provider-base(7)、provider-digest(7)、provider-cipher(7)、provider-keyexch(7)
歷史記錄
供應商的概念及其周邊的一切在 OpenSSL 3.0 中引入。
版權
版權所有 2019-2022 OpenSSL 專案作者。保留所有權利。
根據 Apache 許可證 2.0(「許可證」)授權。您不得使用此檔案,除非符合許可證。您可以在原始程式碼中的 LICENSE 檔案或 https://www.openssl.org/source/license.html 取得一份副本。