Статус: Новичок
Группы: Участники
Зарегистрирован: 07.07.2024(UTC) Сообщений: 2
|
Здравствуйте! Файл подписи, созданной программно, весит 2.6кБ Файл подписи, созданной в CryptoPro CSP весит 3.2кБ При проверке подписи, созданной программно, в CryptoPro CSP (Инструменты КриптоПро) получаю ошибку Ошибка при проверке (0x80090008: Указан неправильный алгоритм.)Что-то возможно не хватает в коде? Что-то упускаю? Но не пойму что именно. Если кто знает или догадывается - очень прошу помощи! Код:public static byte[] createPKCS7(byte[] data, PrivateKey privateKey,
X509Certificate certificate) throws Exception {
// Получаем бинарную подпись длиной 64 байта.
final Signature signature = Signature.getInstance(JCP.GOST_SIGN_2012_256_NAME);
signature.initSign(privateKey);
signature.update(data);
final byte[] sign = signature.sign();
// Формируем контекст подписи формата PKCS7.
final ContentInfo all = new ContentInfo();
all.contentType = new Asn1ObjectIdentifier(
new OID(CMStools.STR_CMS_OID_SIGNED).value);
final SignedData cms = new SignedData();
all.content = cms;
cms.version = new CMSVersion(1);
// Идентификатор алгоритма хеширования.
cms.digestAlgorithms = new DigestAlgorithmIdentifiers(1);
final DigestAlgorithmIdentifier a = new DigestAlgorithmIdentifier(
new OID(CMStools.DIGEST_OID).value);
a.parameters = new Asn1Null();
cms.digestAlgorithms.elements[0] = a;
// Т.к. подпись отсоединенная, то содержимое отсутствует.
cms.encapContentInfo = new EncapsulatedContentInfo(
new Asn1ObjectIdentifier(new OID(CMStools.STR_CMS_OID_DATA).value), null);
// Добавляем сертификат подписи.
cms.certificates = new CertificateSet(1);
final ru.CryptoPro.JCP.ASN.PKIX1Explicit88.Certificate asnCertificate =
new ru.CryptoPro.JCP.ASN.PKIX1Explicit88.Certificate();
final Asn1BerDecodeBuffer decodeBuffer =
new Asn1BerDecodeBuffer(certificate.getEncoded());
asnCertificate.decode(decodeBuffer);
cms.certificates.elements = new CertificateChoices[1];
cms.certificates.elements[0] = new CertificateChoices();
cms.certificates.elements[0].set_certificate(asnCertificate);
// Добавялем информацию о подписанте.
cms.signerInfos = new SignerInfos(1);
cms.signerInfos.elements[0] = new SignerInfo();
cms.signerInfos.elements[0].version = new CMSVersion(1);
cms.signerInfos.elements[0].sid = new SignerIdentifier();
final byte[] encodedName = certificate.getIssuerX500Principal().getEncoded();
final Asn1BerDecodeBuffer nameBuf = new Asn1BerDecodeBuffer(encodedName);
final Name name = new Name();
name.decode(nameBuf);
final CertificateSerialNumber num = new CertificateSerialNumber(
certificate.getSerialNumber());
cms.signerInfos.elements[0].sid.set_issuerAndSerialNumber(
new IssuerAndSerialNumber(name, num));
cms.signerInfos.elements[0].digestAlgorithm =
new DigestAlgorithmIdentifier(new OID(CMStools.DIGEST_OID).value);
cms.signerInfos.elements[0].digestAlgorithm.parameters = new Asn1Null();
cms.signerInfos.elements[0].signatureAlgorithm =
new SignatureAlgorithmIdentifier(new OID(CMStools.SIGN_OID).value);
cms.signerInfos.elements[0].signatureAlgorithm.parameters = new Asn1Null();
cms.signerInfos.elements[0].signature = new SignatureValue(sign);
// Получаем закодированную подпись.
final Asn1BerEncodeBuffer asnBuf = new Asn1BerEncodeBuffer();
all.encode(asnBuf, true);
return asnBuf.getMsgCopy();
}
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 07.07.2024(UTC) Сообщений: 2
|
Решено. Поменял OID(CMStools.DIGEST_OID).value) на OID(JCP.GOST_DIGEST_2012_256_OID).value) OID(CMStools.SIGN_OID).value) на OID(JCP.GOST_PARAMS_SIG_2012_256_KEY_OID).value) Отредактировано пользователем 7 июля 2024 г. 20:58:59(UTC)
| Причина: Не указана
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close