For the CRYPT_SIGN_ALG_OID_GROUP_ID, the following predefined entries exist. Note that the varying members of the CRYPT_OID_INFO structure for this group are shown in the table. These correspond to the find criteria that should be used for this group when making calls to CryptFindOIDInfo. The values for members that do not vary for entries in this group are typically set to zero, or NULL, except that cbSize which always is set to the size of CRYPT_OID_INFO, and the dwGroupId always is set to this group.
pszOID | pwszName | dwValue | Extra Info see Note below |
---|---|---|---|
szOID_OIWSEC_sha1RSASign | L"shaRSA" | CALG_SHA | aiRsaPubKey |
szOID_OIWSEC_sha1RSASign | L"sha1RSA" | CALG_SHA | aiRsaPubKey |
szOID_OIWSEC_shaRSA | L"shaRSA" | CALG_SHA | aiRsaPubKey |
szOID_RSA_MD5RSA | L"md5RSA" | CALG_MD5 | aiRsaPubKey |
szOID_OIWSEC_md5RSA | L"md5RSA" | CALG_MD5 | aiRsaPubKey |
szOID_RSA_MD2RSA | L"md2RSA" | CALG_MD2 | aiRsaPubKey |
szOID_RSA_MD4RSA | L"md4RSA" | CALG_MD4 | aiRsaPubKey |
szOID_OIWSEC_md4RSA | L"md4RSA" | CALG_MD4 | aiRsaPubKey |
szOID_OIWSEC_md4RSA2 | L"md4RSA" | CALG_MD4 | aiRsaPubKey |
szOID_OIWDIR_md2RSA | L"md2RSA" | CALG_MD2 | aiRsaPubKey |
szOID_INFOSEC_mosaicUpdatedSig | L"mosaicUpdatedSig" | CALG_SHA | rgdwMosaicSign |
szOID_OIWSEC_shaDSA | L"shaDSA" | CALG_SHA | aiDssPubKey |
szOID_RSA_SHA1RSA | L"shaRSA" | CALG_SHA | aiRsaPubKey |
Note For the Extra Info aiRsaPubKey,
static const ALG_ID aiRsaPubKey = CALG_RSA_SIGN;
cbData = sizeof( aiRsaPubKey);
pbData = (BYTE *) &aiRsaPubKey;
For the Extra Info aiDssPubKey,
static const ALG_ID aiDssPubKey = CALG_DSS_SIGN;
cbData = sizeof( aiDssPubKey );
pbData = (BYTE *) &aiDssPubKey;
For the Extra Info rgdwMosaicSign,
static const DWORD rgdwMosaicSign[] = {CALG_DSS_SIGN,
CRYPT_OID_INHIBIT_SIGNATURE_FORMAT_FLAG};
cbData = sizeof( rgdwMosaicSign[]);
pbData = (BYTE *) &rgdwMosaicSign;
The C code used to populate the table (an array of CCRYPT_OID_INFO structures) is shown below.
//+-------------------------------------------------------------------------
// Signature Algorithm Table
//--------------------------------------------------------------------------
static const ALG_ID aiDssPubKey = CALG_DSS_SIGN;
static const ALG_ID aiRsaPubKey = CALG_RSA_SIGN;
static const DWORD rgdwMosaicSign[] = {
CALG_DSS_SIGN, CRYPT_OID_INHIBIT_SIGNATURE_FORMAT_FLAG
};
#define SIGN_ALG_ENTRY(pszOID, pwszName, aiHash, aiPubKey) \
OID_INFO_LEN, pszOID, pwszName, CRYPT_SIGN_ALG_OID_GROUP_ID, aiHash, \
sizeof(aiPubKey), (BYTE *) &aiPubKey
#define DSS_SIGN_ALG_ENTRY(pszOID, pwszName) \
SIGN_ALG_ENTRY(pszOID, pwszName, CALG_SHA, aiDssPubKey)
#define RSA_SIGN_ALG_ENTRY(pszOID, pwszName, aiHash) \
SIGN_ALG_ENTRY(pszOID, pwszName, aiHash, aiRsaPubKey)
#define SIGN_EXTRA_ALG_ENTRY(pszOID, pwszName, aiHash, rgdwExtra) \
OID_INFO_LEN, pszOID, pwszName, CRYPT_SIGN_ALG_OID_GROUP_ID, aiHash, \
sizeof(rgdwExtra), (BYTE *) rgdwExtra
static CCRYPT_OID_INFO SignAlgTable[] = {
RSA_SIGN_ALG_ENTRY(szOID_OIWSEC_sha1RSASign, L"shaRSA", CALG_SHA),
RSA_SIGN_ALG_ENTRY(szOID_OIWSEC_sha1RSASign, L"sha1RSA", CALG_SHA),
RSA_SIGN_ALG_ENTRY(szOID_OIWSEC_shaRSA, L"shaRSA", CALG_SHA),
RSA_SIGN_ALG_ENTRY(szOID_RSA_MD5RSA, L"md5RSA", CALG_MD5),
RSA_SIGN_ALG_ENTRY(szOID_OIWSEC_md5RSA, L"md5RSA", CALG_MD5),
RSA_SIGN_ALG_ENTRY(szOID_RSA_MD2RSA, L"md2RSA", CALG_MD2),
RSA_SIGN_ALG_ENTRY(szOID_RSA_MD4RSA, L"md4RSA", CALG_MD4),
RSA_SIGN_ALG_ENTRY(szOID_OIWSEC_md4RSA, L"md4RSA", CALG_MD4),
RSA_SIGN_ALG_ENTRY(szOID_OIWSEC_md4RSA2, L"md4RSA", CALG_MD4),
RSA_SIGN_ALG_ENTRY(szOID_OIWDIR_md2RSA, L"md2RSA", CALG_MD2),
SIGN_EXTRA_ALG_ENTRY(szOID_INFOSEC_mosaicUpdatedSig, L"mosaicUpdatedSig",
CALG_SHA, rgdwMosaicSign),
DSS_SIGN_ALG_ENTRY(szOID_OIWSEC_shaDSA, L"shaDSA"),
RSA_SIGN_ALG_ENTRY(szOID_RSA_SHA1RSA, L"shaRSA", CALG_SHA)
};
#define SIGN_ALG_CNT (sizeof(SignAlgTable) / sizeof(SignAlgTable[0]))