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 参数中包含公钥算法的参数。

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
对于 dwGroupId 的其他值,将 pwszCNGAlgid 成员设置为空字符串 L“”。

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 算法的编码参数中获取的。

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