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 组标识符之一。
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_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 参数中包含公钥算法的参数。 |
pwszCNGAlgid
传递给 CNG 函数的算法标识符字符串 (Bcrypt.h 和 Ncrypt.h) 中定义的 BCrypt* 和 NCrypt* 函数。 CNG 函数使用算法标识符字符串,如 L“SHA1”,而不是 ALG_ID 数据类型常量,如 CALG_SHA1。Windows Server 2003 和 Windows XP: 此成员不可用。
#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 成员也可以设置为不直接传递给 CNG 函数的字符串值。 下表列出了这些值及其含义。
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 |