Добрый день!
В нашей информационной системе (СЭД) выполняется проверка “сырой” подписи внутри CMS.
Формирование сырой подписи выполняется так (для старого и нового калкана одинаково):
SignFlags = (int)KALKANCRYPTCOM_FLAGS.KC_SIGN_DRAFT
| (int)KALKANCRYPTCOM_FLAGS.KC_OUT_BASE64;
kalkanCryptCom.SignDataBytes(string.Empty, SignFlags, ref data[0], data.Length, out signData);
Чтобы проверить одну и туже сырую подпись по ГОСТ2004 старым и новым калканом необходимо использовать разный набор флагов:
для старого:
VerifyFlags = (int)KALKANCRYPTCOM_FLAGS.KC_SIGN_DRAFT
| (int)KALKANCRYPTCOM_FLAGS.KC_IN2_BASE64
| (int)KALKANCRYPTCOM_FLAGS.KC_OUT_BASE64
| (int)KALKANCRYPTCOM_FLAGS.KC_NOCHECKCERTTIME;
kalkanCryptCom.VerifyDataBytes(string.Empty, VerifyFlags, 0, ref data[0], data.Length, signData, out outData, out verifyInfo, out outCert);
для нового:
int VerifyFlags = (int)KALKANCRYPTCOM_FLAGS.KC_SIGN_DRAFT
| (int)KALKANCRYPTCOM_FLAGS.KC_IN_BASE64
| (int)KALKANCRYPTCOM_FLAGS.KC_OUT_BASE64
| (int)KALKANCRYPTCOM_FLAGS.KC_NOCHECKCERTTIME;
kalkanCryptCom.VerifyDataBytes(string.Empty, VerifyFlags, 0, ref data[0], data.Length, signData, out outData, out verifyInfo, out outCert);
то есть разница в том, что в “старом” калкане надо использовать KC_IN2_BASE64, а в новом - KC_IN_BASE64.
иначе будет ошибка 0x8f0001d: Verify Data - decode error.
Подскажите, такой набор флагов в новом KalkanCryptCom (с поддержкой GOST-2015) так и планируется оставить, или он будет приведен к тому же виду, как для старого KalkanCryptCom (без поддержки ГОСТ 2015)?
Для нас это важно, так как небходимо оставить возможность быстро “откатиться” к использованию старого KalkanCryptCom, если в новом окажется много ошибок или если будут недовольны скоростью подписания и проверки (новый KalkanCryptCom в 2 раза медленнее хэширует данные - подробнее писал тут Проблема с OCSP-квитанциями для KalkanCryptCom GOST2015)