Доброго времени суток
Помогите разобраться в ситуации.
Наступил на следующую проблему:
дважды выполняю подпись одной и той же строки данных с использованием КриПро CSP и получаю разные значения подписи
действия по шагам
использую CryptoApi
1. Выбираю сертификат, проверяю на валидность по времени, считываю имя контейнера aContainer, где хранится закрытый ключ
2. Получаю контекст криптопровайдера
int GetAcquireContext(HCRYPTPROV* hProv, LPCTSTR aContainer) {
if(CryptAcquireContext(hProv, aContainer, NULL, PROV_GOST_2001_DH, 0))
return 1;
else
return -11;
}
3. Выполняю подпись хэша
static HCRYPTHASH hHash = 0;
CryptCreateHash(hProv, CALG_GR3411, 0, 0, &hHash);
CryptSetHashParam(hHash, HP_OID,(BYTE*)OID_HashVerbaO, 0);
CryptHashData(hHash, pbInput, dwInputLen, 0); // pbInput - байт массив с данными для подписи dwInputLen - длина массива
// сама подпись
CryptSignHash(hHash, AT_KEYEXCHANGE, NULL, 0, NULL, &dwSigLen); // AT_KEYEXCHANGE - закрытый ключ на RuTokene
//dwSigLen = 0
pbOutput = (BYTE *)malloc(dwSigLen); /// выделяю память под подпись
CryptSignHash(hHash, AT_KEYEXCHANGE, NULL, 0, pbOutput, &dwSigLen); // sign hash object function
если сравнить pbOutput (результат подписи) при двух вызовах с одинаковой строкой на подпись + выборе одного и тоже сертификата - то он разный
а должен быть одинаковый - в чём я не прав??? причем значения хэша совпадают!
или нужно использовать ЭЦП SDK для данной задачи?