16.12.2003 17:35:09Как узнать OID алгоритма? Ответов: 3
Сергей
Возникла такая проблема - для вызова криптографических ф-ий Microsoft бывает нужно заполнить CRYPT_ALGORITHM_IDENTIFIER, а для этого надо знать OID алгоритма. С помощью ф-ии CryptGetProvParam я могу получить PROV_ENUMALGS и PROV_ENUMALGS_EX, но они содержат лишь названия и ALG_ID (например CALG_GR3410EL), но не OID. Можн. конечно, посмотреть глазами в WinCryptEx.h и найти, скажем, szOID_CP_GOST_R3411_R3410EL, но хотелось бы получить эту же информацию программным путём. Есть ли такая возможность? Спасибо.
 
Ответы:
18.12.2003 0:30:15Алексей
попробуйте
CryptFindOIDInfo,
CertAlgIdToOID,
CertOIDToAlgId
18.12.2003 10:38:11Сергей
К сожалению, нужный мне Oid - szOID_CP_GOST_R3411_R3410EL не возвращается ф-ей CertAlgIdToOID() ни с какими ALG_ID.
Более того, если выполнить CertOIDToAlgId(szOID_CP_GOST_R3411_R3410EL), получим CALG_GR3411, а сделав обратное преобразование CertAlgIdToOID(CALG_GR3411), получаем szOID_CP_GOST_R3411 вместо szOID_CP_GOST_R3411_R3410EL, то есть отсутствует взаимно-однозначное соответствие. Мне это кажется странным.
18.12.2003 13:29:03Алексей
С ГОСТ Р 34.11-94 все нормально, это так и должно быть. а с подписью ГОСТ Р 34.10-94/ГОСТ Р 34.11-94 по схеме эльгамаля другая ситуация: в системе не загеристрирован OID szOID_CP_GOST_R3411_R3410EL "1.2.643.2.2.3"

поэтому ничего удивительного.

зарегистрированные OID смотрите в разделе реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\OID\EncodingType 0\CryptDllFindOIDInfo