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 的 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 参数中包含公钥算法的参数。 |
量子后使用
当与 PQ OID 一起使用时,CRYPT_PUBKEY_ALG_OID_GROUP_ID具有以下 ExtraInfo 字段(上):
| 领域 | DESCRIPTION |
|---|---|
| DWORD[0] | 旗帜 |
| DWORD[1] | 公共魔术(例如 BCRYPT_MLDSA_PUBLIC_MAGIC) |
| DWORD[2] | 私人魔术(例如 BCRYPT_MLDSA_PRIVATE_SEED_MAGIC) |
| DWORD[4] | 公钥字节长度 |
| DWORD[5] | 私钥字节长度 |
| DWORD[6] | 签名字节长度 |
在 PQ OID 中使用时,CRYPT_SIGN_ALG_OID_GROUP_ID具有以下 ExtraInfo 字段:
| 领域 | DESCRIPTION |
|---|---|
| DWORD[0] | 旗帜 |
| DWORD[1] | 签名字节长度 |
CRYPT_HASH_ALG_OID_GROUP_ID 可以设置为 L“NoHash”以指示签名前没有哈希,PQ 密钥将直接对 ToBeSigned 字节进行签名。
pwszCNGAlgid
传递给 CNG 函数(BCrypt* 和 NCrypt* 函数(Bcrypt.h 和 Ncrypt.h 中定义的 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字符串值。
例如 szOID_ECC_CURVE_P256,对于 ECC 曲线名称公钥(“1.2.840.10045.3.1.7”),这是特殊的CRYPT_OID_INFO_ECC_PARAMETERS_ALGORITHM字符串值。
对于 dwGroupId 的其他值,请将 pwszCNGExtraAlgid 成员设置为空字符串 L“。
要求
| 要求 | 价值 |
|---|---|
| 最低支持的客户端 | Windows XP [仅限桌面应用] |
| 支持的最低服务器 | Windows Server 2003 [仅限桌面应用] |
| 标头 | wincrypt.h |