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 群組標識碼。
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 成員中的旗標。
| 價值觀 | 意義 |
|---|---|
|
不再使用此旗標。
在呼叫 CryptVerifySignature 函式之前或 呼叫 CryptSignHash 函式之後,停止簽章的重新格式化。 |
|
編碼時省略 NULL 參數。 |
|
公鑰僅用於加密。 |
|
公鑰僅用於簽章。 |
|
不再使用此旗標。
在 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_SHA1。 Windows 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_ALGORITHML"ML-DSA:44" |
ML-DSA 演演算法結合 ML-DSA 的 CNG 演算法名稱,以及 CNG 參數集 44 (NIST 安全性類別 2)。 |
CRYPT32_MLDSA_65_ALGORITHML"ML-DSA:65" |
ML-DSA 演演算法結合 ML-DSA 的 CNG 演算法名稱,以及 CNG 參數集 65(NIST 安全性類別 3)。 |
CRYPT32_MLDSA_87_ALGORITHML"ML-DSA:87" |
ML-DSA 演演算法結合 ML-DSA 的 CNG 演算法名稱,以及 CNG 參數集 87 (NIST 安全性類別 5)。 |
CRYPT_OID_INFO_NO_HASH_ALGORITHML"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 |