Добрый день
У нас установлен CSP 3.6.5236 (core version: 3.6.4071KC1)
Мы создаем P7S DER подписи при помощи CryptoARM, затем проверяем их с помощью JCP 1.0.46
Все работает при выборе опции в CryptoARM "сохранить подпись в отдельном файле"
Но когда эта опция не указывается все валится со следующей ошибкой:
Exception in thread "main" java.io.IOException: short read on DerValue buffer
at sun.security.util.DerValue.getOctetString(DerValue.java:459)
at sun.security.pkcs.ContentInfo.getData(ContentInfo.java:155)
Как вы заметили мы работаем используя стандартные Java API и используем sun.security.pkcs.PKCS7
Т.о. генерируемая подпись с включенным контентом не понимается классом PKCS7 - это известная проблема, или мы делаем что-то не так?
Привожу наш код:
Код:
final CertificateFactory cf = CertificateFactory.getInstance("X509");
java.security.cert.Certificate certificate = cf.generateCertificate(new FileInputStream(args[2]));
PublicKey publicKey = certificate.getPublicKey();
FileInputStream fis = new FileInputStream(args[0]);
byte[] fileBytes = new byte[(int) new File(args[0]).length()];
int offset = 0;
int numRead;
while (offset < fileBytes.length && (numRead = fis.read(fileBytes, offset, fileBytes.length - offset)) >= 0) {
offset += numRead;
}
fis.close();
byte[] p7sBytes = Array.readFile(args[1]);
PKCS7 p7 = new PKCS7(p7sBytes);
SignerInfo[] si = p7.getSignerInfos();
if (null != p7.getContentInfo().getData()) {
fileBytes = p7.getContentInfo().getData(); // <------- здесь валится
}
При попытке декодировать подпись используя JCP API также программа валится со следующей ошибкой:
com.objsys.asn1j.runtime.Asn1MissingRequiredException: ASN.1 decode error @ offset 257:
SEQUENCE or SET is missing a required element.
at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.SignedData.decode(SignedData.java:171)
at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.ContentInfo.checkTC(ContentInfo.java:137)
at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.ContentInfo.decode(ContentInfo.java:90)
at com.objsys.asn1j.runtime.Asn1Type.decode(Asn1Type.java:15)
at com.geminisystems.cryptopro.VerifyP7s.cmsVerify(VerifyP7s.java:78)
at com.geminisystems.cryptopro.VerifyP7s.main(VerifyP7s.java:68)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:110)
Exception in thread "main" com.objsys.asn1j.runtime.Asn1Exception: table constraint: content decode failed
at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.ContentInfo.checkTC(ContentInfo.java:141)
at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.ContentInfo.decode(ContentInfo.java:90)
at com.objsys.asn1j.runtime.Asn1Type.decode(Asn1Type.java:15)
at com.geminisystems.cryptopro.VerifyP7s.cmsVerify(VerifyP7s.java:78)
at com.geminisystems.cryptopro.VerifyP7s.main(VerifyP7s.java:68)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:110)
Вот код для этого случая:
Код:
byte[] buffer = Array.readFile(args[1]);
final Asn1BerDecodeBuffer asnBuf = new Asn1BerDecodeBuffer(buffer);
final ContentInfo all = new ContentInfo();
all.decode(asnBuf); <----------------------------- здесь валится
Причем вариант использования JCP API валится как для случая с включенным контентом, так и для отдельной подписи.
Что мы делаем не так?
Примеры подписей попробую приаттачить
Отредактировано пользователем 1 ноября 2010 г. 19:15:24(UTC)
| Причина: Не указана
Вложение(я):
boot.ini.sig
(1kb) загружен 34 раз(а). boot.ini.separate.sig
(1kb) загружен 25 раз(а).У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.