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

量子后使用

当与 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_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字符串值。

例如 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

另请参阅

CryptFindOIDInfo

CryptRegisterOIDInfo

CryptUnregisterOIDInfo