Статус: Новичок
Группы: Участники
Зарегистрирован: 24.04.2015(UTC) Сообщений: 6 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: none
|
Приветствую! Не могу понять почему после кодирования при помощи Asn1BerEncodeBuffer не получается декодировать при помощи Asn1BerDecodeBuffer. Использую CryptoPro 2.0.38. Пробовал кодировать ContentInfo с EncryptedData, потом передалал на EnvelopedData (с разными OID), как в примере показано. В результате вот такой код дает ошибку: Код:
ContentInfo contentInfo = ... (ContentInfo с EncryptedData или EnvelopedData)
final Asn1BerEncodeBuffer encodeBuffer = new Asn1BerEncodeBuffer();
contentInfo.encode(encodeBuffer);
byte[] encoded = encodeBuffer.getMsgCopy();
final Asn1BerDecodeBuffer decodeBuffer = new Asn1BerDecodeBuffer(encoded);
final ContentInfo ci = new ContentInfo();
ci.decode(decodeBuffer); // здесь ошибка
Ошибка такая: Код:
com.objsys.asn1j.runtime.Asn1TagMatchFailedException: ASN.1 decode error @ offset 0:
Tag match failed: expected [UNIVERSAL 16], parsed [UNIVERSAL 5]
at com.objsys.asn1j.runtime.Asn1Type.matchTag(Asn1Type.java:449)
at com.objsys.asn1j.runtime.Asn1Type.matchTag(Asn1Type.java:466)
at ru.CryptoPro.JCP.ASN.Gost28147_89_EncryptionSyntax.Gost28147_89_Parameters.decode(Gost28147_89_Parameters.java:55)
at ru.CryptoPro.JCP.ASN.PKIX1Explicit88.AlgorithmIdentifier.checkTC(AlgorithmIdentifier.java:162)
at ru.CryptoPro.JCP.ASN.PKIX1Explicit88.AlgorithmIdentifier.decode(AlgorithmIdentifier.java:112)
at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.EncryptedContentInfo.decode(EncryptedContentInfo.java:113)
at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.EnvelopedData.decode(EnvelopedData.java:144)
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:218)
at com.tcs.crypto.engine.cms.parcer.AbstractContentInfoParser.getEnvelopedContentInfoParser(AbstractContentInfoParser.java:28)
at com.tcs.crypto.impl.TcsCryptoServiceImpl.decryptDataAndCheckSign(TcsCryptoServiceImpl.java:87)
at com.tcs.crypto.TcsCryptoServiceTest.perform(TcsCryptoServiceTest.java:34)
at com.tcs.crypto.TcsCryptoServiceTest.testGost3410_2001(TcsCryptoServiceTest.java:57)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164)
at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110)
at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175)
at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68)
com.objsys.asn1j.runtime.Asn1Exception: table constraint: parameters decode failed
at ru.CryptoPro.JCP.ASN.PKIX1Explicit88.AlgorithmIdentifier.checkTC(AlgorithmIdentifier.java:166)
at ru.CryptoPro.JCP.ASN.PKIX1Explicit88.AlgorithmIdentifier.decode(AlgorithmIdentifier.java:112)
at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.EncryptedContentInfo.decode(EncryptedContentInfo.java:113)
at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.EnvelopedData.decode(EnvelopedData.java:144)
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:218)
at com.tcs.crypto.engine.cms.parcer.AbstractContentInfoParser.getEnvelopedContentInfoParser(AbstractContentInfoParser.java:28)
at com.tcs.crypto.impl.TcsCryptoServiceImpl.decryptDataAndCheckSign(TcsCryptoServiceImpl.java:87)
at com.tcs.crypto.TcsCryptoServiceTest.perform(TcsCryptoServiceTest.java:34)
at com.tcs.crypto.TcsCryptoServiceTest.testGost3410_2001(TcsCryptoServiceTest.java:57)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164)
at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110)
at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175)
at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68)
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 24.04.2015(UTC) Сообщений: 6 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: none
|
В общем, разобрался с EncryptedData. Проблема была с тем, что в encryptedData.encryptedContentInfo.contentEncryptionAlgorithm создавался без параметров, т.е. передавался new Asn1Null(): Код:
encryptedData.encryptedContentInfo.contentEncryptionAlgorithm = new ContentEncryptionAlgorithmIdentifier(CmsUtils.oid(CMS.ENCRYPTION_SYNTAX_OID), new Asn1Null());
После вот таких изменений стало работать: Код:
final Gost28147_89_Parameters params = new Gost28147_89_Parameters();
params.iv = new Gost28147_89_IV(iv);
params.encryptionParamSet = new Gost28147_89_ParamSet(AlgIdSpec.getDefaultCryptParams().getOID().value);
encryptedData.encryptedContentInfo.contentEncryptionAlgorithm = new ContentEncryptionAlgorithmIdentifier(CmsUtils.oid(CMS.ENCRYPTION_SYNTAX_OID), params);
Вообще, очень не хватает подробной документации по таким классам как ContentInfo (в частности метода checkTC(..)), а так же описание работы, раз нет исходников, чтобы можно было поотлаживаться. А то энкодинг проходит, а декодинг - нет; и приходится гадать из-за какого параметра (сообщения в стектрейсе не особо информативны для понимания, что происходит). Отредактировано пользователем 6 мая 2015 г. 13:49:38(UTC)
| Причина: уточнение
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,003 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 714 раз в 674 постах
|
Автор: xvector ![Перейти к цитате Перейти к цитате](/forum2/Themes/soclean/icon_latest_reply.gif) Вообще, очень не хватает подробной документации по таким классам как ContentInfo (в частности метода checkTC(..)), а так же описание работы, раз нет исходников, чтобы можно было поотлаживаться. А то энкодинг проходит, а декодинг - нет; и приходится гадать из-за какого параметра (сообщения в стектрейсе не особо информативны для понимания, что происходит).
Код сгенерирован по asn1 структурам, описанным в RFC. Он генерируется специализированным ПО и не документируется. По названиям большинства структур можно найти описание в тех же RFC документах. |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close