18.01.2003 14:02:14База OID`oв Ответов: 3
Den
После апгрейда 1.2 -> 2.0 происходит нечто странное : CryptFindOIDInfo по запросу на id алгоритма 0x0000801E
возвращает "1.2.643.2.2.3" (ГОСТ Р 34.11/34.10-2001), хотя по идее должна отдавать "1.2.643.2.2.9"....
(проверялось на XP & 2000, CPCSP 2.0(2049) лицензионный )
 
Ответы:
20.01.2003 15:30:07Den
То-же самое происходит и на WinNT4.0, причем cpcsp 2.0 (2049) был установлен сразу...
21.01.2003 11:29:18Василий
Дело в том, что, согласно MSDN, данная функция CryptFindOIDInfo возвращает первое зарегистрированное для такого алгида значение. Причем поиск может быть сужен для группы алгидов - третий параметр функции.
Так вот, если его задать константой CRYPT_HASH_ALG_OID_GROUP_ID, то будет возвращено именно 1.2.643.2.2.9, а если константой CRYPT_SIGN_ALG_OID_GROUP_ID - то 1.2.643.2.2.3. При поиске без указания группы результат непредсказуем, поскольку зависит от порядка, в котором зарегистрированы OID-ы для данного значения ALG_ID.
В данном случае для ALG_ID = CALG_GR3411 = 0x0000801E есть три OID-а - 1.2.643.2.2.3, 1.2.643.2.2.4, 1.2.643.2.2.9.
21.01.2003 13:46:24Den
Да, спасибо ;) Понятно что при указании группы все работает корректно, но смущает что для получения 1.2.643.2.2.3 или 1.2.643.2.2.4 достаточно указать только id хеша. Получается что в данном случае CryptFindOIDInfo может работать не по строгому соответствию? Ведь 1.2.643.2.2.3 или 1.2.643.2.2.4 означают сразу по два алгаида, и резонно ожидать что их можно получить скорее через CRYPT_OID_INFO_SIGN_KEY, чем через CRYPT_OID_INFO_ALGID_KEY...