ERROR 0x2e06307f: Verify Data - verify error

Здравствуйте!

При проверке подписи получаю ошибку err:772157567, message:ERROR 0x2e06307f: Verify Data - verify error.
В документации такого кода ошибки нет. Что это значит?

Проверка делается следующим кодом:

    KalkanCrypt_Init();
    KalkanCrypt_TSASetUrl("http://tsp.pki.gov.kz:80");


    $base64Data = base64_encode('test');
    $sign = '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';

    $alias = '';
    $flags = self::KC_SIGN_CMS + self::KC_IN_BASE64;
    $outData  = '';
    $outVerifyInfo  = '';
    $outCert  = '';
    $err = KalkanCrypt_VerifyData($alias, $flags, $base64Data, 0, $sign, $outData, $outVerifyInfo, $outCert);

    if ($err) {
        Log::error(__METHOD__ . ' err:' . $err . ', message:' . KalkanCrypt_GetLastErrorString());
    } else {
        Log::info(__METHOD__ . 'cert:' . $outCert);
        Log::info(__METHOD__ . 'verifyInfo:' . $outVerifyInfo);
        Log::info(__METHOD__ . 'outData:' . $outData);
    }

    KalkanCrypt_Finalize();

Добрый день!

Вы формируете DetachedSign (подпись без вложенных данных).
При проверке тоже надо указывать, что подпись detached с помощью флага KC_DETACHED_DATA.

Т.е. $flags = self::KC_SIGN_CMS + self::KC_IN_BASE64 + self::KC_DETACHED_DATA;

Еще заметил, что Вы кодируете inData в формат Base64.
Но в методе VerifyData() при отправке в параметре inData данных в формате Base64, необходимо указать флаг - KC_IN2_BASE64.

Т.е. $flags = self::KC_SIGN_CMS + self::KC_IN_BASE64 + self::KC_DETACHED_DATA + self::KC_IN2_BASE64;

Также замечу, что когда используется метод VerifyData(), то нет необходимости вызывать метод KalkanCrypt_TSASetUrl();

Спасибо! Очень ценные замечания. Вечером попробую, напишу как получилось.

Все работает. Спасибо