31.01.2006 13:07:09JCP: проверка подписи хеша Ответов: 2
Олег
Уважаемые разработчики и пользователи JCP! Помогите разобраться.

В JCP не удаётся проверить результат отработки ф-и "CryptSignHash"
Но удаётся проверить результат отработки "CryptSignMessage"


пусть
byte[] hash = MessageDigest.getInstance("GOST3411").digest("doc".getBytes());

//----------------------- Вот что удаётся -------------------------------
//клиент сделал документу "doc" CryptSignMessage и прислал signature
PKCS7 pkcs7 = new PKCS7(signature);
X509Certificate [] certs = pkcs7.getCertificates();
SignerInfo [] si = pkcs7.getSignerInfos();

byte [] signed_hash = si[0].getEncryptedDigest();
PublicKey pub = certs[0].getPublicKey();
boolean res = MyCheckEncryptedDigest(hash,signed_hash,pub); //возвращает true
//-------------------------------------------------------------------------

//----------------------- Не удаётся --------------------------------------
byte [] signed_hash = ... // присалется клиентом, результат CryptSignHash
PublicKey pub = .. // тоже считаем что есть
boolean res = MyCheckEncryptedDigest(hash,signed_hash,pub); //возвращает false
//-------------------------------------------------------------------------

В CryptCreateHash передаю CALG_GR3411
В CryptSignMessage передаю SigParams.HashAlgorithm.pszObjId = szOID_CP_GOST_R3411_R3410;
В java - MessageDigest.getInstance("GOST3411")

Вывод такой, что CryptSignMessage не "в лоб" считает хаш, подписывает его
и формирует pkcs#7, иначе меня бы во втором случае меня ожидал успех
НО КАК ТОГДА?

В чём здесь может быть дело?
Подскажите пожалуйста
 
Ответы:
01.02.2006 12:03:32Олег
Или всё таки CryptSignMessage в качестве подписи (те самые 64 байта)в pkcs#7 заворачивает не результат работы CryptSignHash??????.....

Ну не проверяется подпись от CryptSignHash в java и всё там!!!
02.02.2006 16:37:14Олег
Может есть у кого нить микрософтовый исходник от CryptSignMessage? А то намыльте :) пожалуйста. Очень интересно чего она с хешем делает.