CMSEvelopedDataParser - Ошибка
(1 чел.) (1) гость
  • Страница:
  • 1

ТЕМА: CMSEvelopedDataParser - Ошибка

CMSEvelopedDataParser - Ошибка 1 год, 4 мес. назад #3878

  • urmnurbo
  • Осваиваюсь на форуме
  • Постов: 26
  • Репутация: 0
Добрый день. Пытаюсь получит подписанный контент.
Код подписание:
CMSSignedDataGenerator gen = new CMSSignedDataGenerator();
InputStream dataLoaded = this.getClass().getResourceAsStream("/Tickets.pdf");
byte[] data = dataLoaded.toString().getBytes();
Signature sig = Signature.getInstance(certToCheck.getSigAlgName(), provider);
KeyStore.PrivateKeyEntry pkEntry = (KeyStore.PrivateKeyEntry) store.getEntry(alias,new KeyStore.PasswordProtection(password.toCharArray()));
privateKey = pkEntry.getPrivateKey();
sig.initSign(privateKey);
sig.update(data);
CMSProcessableByteArray cmsData = new CMSProcessableByteArray(data);
gen.addSigner(privateKey, certToCheck, CMSSignedDataGenerator.DIGEST_SHA256);
CertStore chainStore = CertStore.getInstance("Collection", new CollectionCertStoreParameters(Arrays.asList(certToCheck)),provider.getName());
gen.addCertificatesAndCRLs(chainStore);
CMSSignedData signed = gen.generate(cmsData, true, provider.getName());
FileOutputStream fileOuputStream = new FileOutputStream("C:\\Test\\test_4.txt");
byte[] signedDataEncoded = signed.getEncoded();
fileOuputStream.write(Base64.encode(signedDataEncoded));


Сохраняю в формате txt. Внутри:
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


Код который считаю этот файл:
String envelopedData  = "MIIJ2AYJKoZIhvcNAQcCoIIJyTCCCcUCAQExDzANBglghkgBZQMEAgEFADAzBgkqhk...."
Provider provider = new KalkanProvider();
Security.addProvider(provider);
CMSSignedData cms = new CMSSignedData(Base64.decode(envelopedData.getBytes()));
SignerInformationStore signers = cms.getSignerInfos(); 
Collection c = signers.getSigners(); 
		        Iterator it = c.iterator();
		        while (it.hasNext()) { 
		            SignerInformation signer = (SignerInformation) it.next(); 
		            CertStore cs = cms.getCertificatesAndCRLs("Collection", provider.getName());
		            CMSProcessableByteArray cpb = (CMSProcessableByteArray) cms.getSignedContent();
		            byte[] signedContent = (byte[]) cpb.getContent();
		            
		    		

		            CMSEnvelopedDataParser cmsEnvelopedDataParser = new CMSEnvelopedDataParser(signedContent);
		            System.out.println("content encryption algo: "
		        			+ cmsEnvelopedDataParser.getEncryptionAlgOID());
		            
		            RecipientInformationStore recipientInformationStore = cmsEnvelopedDataParser
		        			.getRecipientInfos();
		            Collection<RecipientInformation> recipients = recipientInformationStore
		        			.getRecipients();
		            RecipientInformation recipientInformation = recipients.iterator()
		        			.next();
		            System.out.println("recipient info type: "
		        			+ recipientInformation.getClass().getName());
		            KeyTransRecipientInformation keyTransRecipientInformation = (KeyTransRecipientInformation) recipientInformation;
		            try {
						Iterator iter = cs.getCertificates((CertSelector) signer.getSID()).iterator();
						X509Certificate certificate = (X509Certificate) iter.next();
						
			            System.out.println(signer.verify(certificate,provider.getName()));

						
					} catch (CertStoreException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}

		        }




Проблема в линии:

CMSEnvelopedDataParser cmsEnvelopedDataParser = new CMSEnvelopedDataParser(signedContent);

Ошибка:
kz.gov.pki.kalkan.jce.provider.cms.CMSException: IOException reading content.
	at kz.gov.pki.kalkan.jce.provider.cms.CMSContentInfoParser.<init>(CMSContentInfoParser.java:29)
	at kz.gov.pki.kalkan.jce.provider.cms.CMSEnvelopedDataParser.<init>(CMSEnvelopedDataParser.java:84)
	at kz.gov.pki.kalkan.jce.provider.cms.CMSEnvelopedDataParser.<init>(CMSEnvelopedDataParser.java:79)
	at jti.com.CertificateValidation.fileVerification(CertificateValidation.java:293)
	at jti.com.Main.main(Main.java:28)
Caused by: java.io.EOFException: DEF length 97 object truncated by 63
	at kz.gov.pki.kalkan.asn1.DefiniteLengthInputStream.toByteArray(DefiniteLengthInputStream.java:100)
	at kz.gov.pki.kalkan.asn1.ASN1StreamParser.readObject(ASN1StreamParser.java:113)
	at kz.gov.pki.kalkan.jce.provider.cms.CMSContentInfoParser.<init>(CMSContentInfoParser.java:27)
	... 4 more

Почему он не может прочитать?
Если ли примеры ?
В интернете нашел код который и отталкивался( www.programcreek.com/java-api-examples/?...t/etee/SealTest.java):

CMSTypedData signedContent = cmsSignedData.getSignedContent();
		byte[] data = (byte[]) signedContent.getContent();

		// decrypt content

		CMSEnvelopedDataParser cmsEnvelopedDataParser = new CMSEnvelopedDataParser(
				data);


Но там CMSTypedData а у меня CMSProcessableByteArray , так как в библиотеке KALKAN нету обьекта с типом CMSTypedData.

Re: CMSEvelopedDataParser - Ошибка 1 год, 4 мес. назад #3882

  • ololo
  • Живу я здесь
  • Постов: 464
  • Репутация: 57
byte[] signedContent = (byte[]) cpb.getContent();
это и есть подписанный контент в виде байтового массива. не нужно его ни к чему приводить.
gg wp

Re: CMSEvelopedDataParser - Ошибка 1 год, 4 мес. назад #3883

  • urmnurbo
  • Осваиваюсь на форуме
  • Постов: 26
  • Репутация: 0
и как же мне его преобразить в текст?
кажется вопрос тупой, но погуглил, и везде код таков:

String s = new String(bytes);


А в программе мне возвращает не сам текст контента, а вот это:

java.io.BufferedInputStream@17211155


Как именно мне декодировать, чтобы получить оригинальный контент Tickets.pdf?
Искал в интернете, было только с объектом CMSTypedData

Re: CMSEvelopedDataParser - Ошибка 1 год, 4 мес. назад #3885

  • ololo
  • Живу я здесь
  • Постов: 464
  • Репутация: 57
Если вы хотите это содержимое вытащить и передать куда-то, то закодируйте в Base64, например, так:
String s = Base64.encodeStr(signedContent);
gg wp
  • Страница:
  • 1
FaLang translation system by Faboba