CRYPT_SIGN_ALG_OID_GROUP_ID

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.

C code specifying table.

//+-------------------------------------------------------------------------
//  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]))