共用方式為


CRYPT_OID_INFO結構 (wincrypt.h)

CRYPT_OID_INFO 結構包含物件標識碼 (OID) 的相關信息。 這些結構會提供 OID 識別碼、其名稱、群組和其他 OID 相關信息之間的關聯性。 您可以使用 CryptEnumOIDInfo 函式來列出這些結構。 您可以使用 CryptRegisterOIDInfo 函式來新增新的CRYPT_OID_STRUCTURES。

語法

typedef struct _CRYPT_OID_INFO {
  DWORD           cbSize;
  LPCSTR          pszOID;
  LPCWSTR         pwszName;
  DWORD           dwGroupId;
  union {
    DWORD  dwValue;
    ALG_ID Algid;
    DWORD  dwLength;
  } DUMMYUNIONNAME;
  CRYPT_DATA_BLOB ExtraInfo;
  LPCWSTR         pwszCNGAlgid;
  LPCWSTR         pwszCNGExtraAlgid;
} CRYPT_OID_INFO, *PCRYPT_OID_INFO;

成員

cbSize

這個 結構的大小,以位元組為單位。

pszOID

與此 OID 資訊相關聯的 OID。

pwszName

與 OID 相關聯的顯示名稱。

dwGroupId

與此 OID 資訊相關聯的群組標識碼。

這個成員可以是下列其中一個 dwGroupId 群組標識碼。

價值觀 意義
CRYPT_ENCRYPT_ALG_OID_GROUP_ID
加密演算法
CRYPT_ENHKEY_USAGE_OID_GROUP_ID
增強金鑰使用方式
CRYPT_EXT_OR_ATTR_OID_GROUP_ID
延伸模組或屬性
CRYPT_HASH_ALG_OID_GROUP_ID
哈希演算法
CRYPT_POLICY_OID_GROUP_ID
政策
CRYPT_PUBKEY_ALG_OID_GROUP_ID
公鑰演演算法
CRYPT_RDN_ATTR_OID_GROUP_ID
RDN 屬性
CRYPT_SIGN_ALG_OID_GROUP_ID
簽章演算法

DUMMYUNIONNAME

DUMMYUNIONNAME.dwValue

與這個 OID 資訊相關聯的數值。 此成員會與 dwGroupId CRYPT_SIGN_ALG_OID_GROUP_ID搭配使用。

DUMMYUNIONNAME.Algid

與此 OID 資訊相關聯的演算法識別碼。

此成員適用於 dwGroupId 的下列值:

  • CRYPT_HASH_ALG_OID_GROUP_ID
  • CRYPT_ENCRYPT_ALG_OID_GROUP_ID
  • CRYPT_PUBKEY_ALG_OID_GROUP_ID
  • CRYPT_SIGN_ALG_OID_GROUP_ID

DUMMYUNIONNAME.dwLength

未實作這個成員。 它一律設定為零。

ExtraInfo

用來尋找或註冊 OID 資訊的額外資訊。 此成員適用於 dwGroupId 的下列值:

  • CRYPT_PUBKEY_ALG_OID_GROUP_ID
  • CRYPT_SIGN_ALG_OID_GROUP_ID
  • CRYPT_RDN_ATTR_OID_GROUP_ID

CRYPT_ENCRYPT_ALG_OID_GROUP_ID OID 群組中的 OID 為 ExtraInfo 成員的 DWORD[0] 成員中的 AES 演演算法設定了位長度。

CRYPT_PUBKEY_ALG_OID_GROUP_ID群組中的 OID 在 ExtraInfo 成員的 DWORD[0] 成員中設定旗標。

例如,ECC 曲線名稱公鑰中的 OID szOID_ECC_CURVE_P256 (“1.2.840.10045.3.1.7”),在 DWORD[0] 成員中設定旗標,在 DWORD[1] 成員中設定BCRYPT_ECCKEY_BLOB dwMagic 域值,以及BCRYPT_ECCKEY_BLOB cbKey 值等於 dwBitLength / 8 + (dwBitLength % 8) 的位長度? 1 : 0) 在 ExtraInfo 成員的 DWORD[2] 成員中設定。

CRYPT_SIGN_ALG_OID_GROUP_ID群組中的 OID 在 DWORD[0] 成員中設定公鑰演演算法識別碼、DWORD[1] 成員中設定的旗標,以及在 ExtraInfo 成員的 DWORD[2] 成員中設定的選擇性提供者類型。

CRYPT_RDN_ATTR_OID_GROUP_ID群組中的 OID 在 ExtraInfo 成員的 DWORD 值陣列中設定的可接受 RDN 屬性值類型清單為 Null 終止。 省略的清單表示值陣列,其中陣列中的第一個值是CERT_RDN_PRINTABLE_STRING、陣列中的第二個值是CERT_RDN_UNICODE_STRING,而陣列中的第三個值是零。

下列值用於 ExtraInfo 成員中的旗標。

價值觀 意義
CRYPT_OID_INHIBIT_SIGNATURE_FORMAT_FLAG
不再使用此旗標。

在呼叫 CryptVerifySignature 函式之前或 呼叫 CryptSignHash 函式之後,停止簽章的重新格式化。

CRYPT_OID_NO_NULL_ALGORITHM_PARA_FLAG
編碼時省略 NULL 參數。
CRYPT_OID_PUBKEY_ENCRYPT_ONLY_FLAG
公鑰僅用於加密。
CRYPT_OID_PUBKEY_SIGN_ONLY_FLAG
公鑰僅用於簽章。
CRYPT_OID_USE_PUBKEY_PARA_FOR_PKCS7_FLAG
不再使用此旗標。

在 PKCS #7 訊息的 digestEncryptionAlgorithm 參數中包含公鑰演算法的參數。

量子後使用

CRYPT_PUBKEY_ALG_OID_GROUP_ID 搭配 PQ OID 使用時,具有下列 ExtraInfo 欄位(上圖):

領域 說明
DWORD[0] 標誌
DWORD[1] 公共魔術(例如 BCRYPT_MLDSA_PUBLIC_MAGIC
DWORD[2] 私人魔術(例如 BCRYPT_MLDSA_PRIVATE_SEED_MAGIC
DWORD[4] 公鑰位組長度
DWORD[5] 私鑰位組長度
DWORD[6] 簽章位元組長度

CRYPT_SIGN_ALG_OID_GROUP_ID 搭配 PQ OID 使用時具有下列 ExtraInfo 字段:

領域 說明
DWORD[0] 標誌
DWORD[1] 簽章位元組長度

CRYPT_HASH_ALG_OID_GROUP_ID 可以設定為 L“NoHash”,表示簽署前沒有哈希,而且 PQ 金鑰會直接簽署 ToBeSigned 位元組。

pwszCNGAlgid

傳遞至 CNG 函式的演算法識別符字串(Bcrypt.h 和 Ncrypt.h 中定義的 BCrypt* 和 NCrypt* 函式)。 CNG 函式會使用演算法識別符字串,例如 L“SHA1”,而不是 ALG_ID 數據類型常數,例如 CALG_SHA1Windows Server 2003 和 Windows XP: 此成員無法使用。

備註

 只有在程式代碼中包含下列語句時, 才能使用 pwszCNGAlgid 成員。

#define CRYPT_OID_INFO_HAS_EXTRA_FIELDS

此成員適用於 dwGroupId 的下列值:

  • CRYPT_HASH_ALG_OID_GROUP_ID
  • CRYPT_ENCRYPT_ALG_OID_GROUP_ID
  • CRYPT_PUBKEY_ALG_OID_GROUP_ID
  • CRYPT_SIGN_ALG_OID_GROUP_ID

pwszCNGAlgid 成員設定為空字串 L“”,以取得 dwGroupId 的其他值。

pwszCNGAlgid 成員也可以設定為未直接傳遞至 CNG 函式的字串值。 下表列出這些值及其意義:

價值觀 意義
CRYPT_OID_INFO_ECC_PARAMETERS_ALGORITHM ECC 曲線演算法是從 OID 演演算法的編碼參數取得。
CRYPT_OID_INFO_ECC_WRAP_PARAMETERS_ALGORITHM 密鑰包裝演算法是從 OID 演演算法的編碼參數取得。
CRYPT_OID_INFO_HASH_PARAMETERS_ALGORITHM 哈希演算法是從 OID 演演算法的編碼參數取得。
CRYPT_OID_INFO_MGF1_PARAMETERS_ALGORITHM PKCS #1 v2.1 遮罩產生哈希演算法是從 OID 演演算法的編碼參數取得。
CRYPT_OID_INFO_NO_SIGN_ALGORITHM 表示簽章值的公鑰演演算法是未簽署的哈希。
CRYPT_OID_INFO_OAEP_PARAMETERS_ALGORITHM RSAES-OAEP 填補哈希演算法是從 OID 演演算法的編碼參數取得。
CRYPT32_MLDSA_44_ALGORITHM
L"ML-DSA:44"
ML-DSA 演演算法結合 ML-DSA 的 CNG 演算法名稱,以及 CNG 參數集 44 (NIST 安全性類別 2)。
CRYPT32_MLDSA_65_ALGORITHM
L"ML-DSA:65"
ML-DSA 演演算法結合 ML-DSA 的 CNG 演算法名稱,以及 CNG 參數集 65(NIST 安全性類別 3)。
CRYPT32_MLDSA_87_ALGORITHM
L"ML-DSA:87"
ML-DSA 演演算法結合 ML-DSA 的 CNG 演算法名稱,以及 CNG 參數集 87 (NIST 安全性類別 5)。
CRYPT_OID_INFO_NO_HASH_ALGORITHM
L"NoHash"
針對 PQ 數位簽名,表示簽署之前沒有哈希,而且 PQ 金鑰會直接簽署 ToBeSigned 位元組。

pwszCNGExtraAlgid

pwszCNGAlgid 成員中字串以外的額外演算法字串,可以傳遞至 CNG 函式(Bcrypt.h 和 Ncrypt.h 中定義的 BCrypt* 和 NCrypt* 函式)。

Windows Server 2003 和 Windows XP: 此成員無法使用。

注意 只有在程式代碼中包含下列語句時,才能使用此成員。
 
#define CRYPT_OID_INFO_HAS_EXTRA_FIELDS

對於簽章演算法 (CRYPT_SIGN_ALG_OID_GROUP_ID),此成員是傳遞至 CNG 函式的公鑰演演算法字串。

對於 ECC 簽章,此成員是特殊CRYPT_OID_INFO_ECC_PARAMETERS_ALGORITHM字串值。

對於未簽署的簽章,此成員是特殊CRYPT_OID_INFO_NO_SIGN_ALGORITHM字串值。

例如,針對 ECC 曲線名稱公鑰,szOID_ECC_CURVE_P256 (“1.2.840.10045.3.1.7”),這是特殊CRYPT_OID_INFO_ECC_PARAMETERS_ALGORITHM字串值。

針對 dwGroupId 的其他值,請將 pwszCNGExtraAlgid 成員設定為空字串 L“”。

需求

要求 價值觀
最低支援的用戶端 Windows XP [僅限傳統型應用程式]
支援的最低伺服器 Windows Server 2003 [僅限傳統型應用程式]
頁首 wincrypt.h

另請參閱

CryptFindOIDInfo

CryptRegisterOIDInfo

CryptUnregisterOIDInfo