Re: OutofMemory with CMSEnvelopedData from fileInputStream
Massimiliano Ziccardi <[email protected]> Tue, 24 Sep 2019 15:07:46 +0200
| Newsgroups | gmane.comp.encryption.bouncy-castle.devel |
|---|---|
| Message-ID | <CAPwY8YD0+18LMG618ckcEXqHK-_SVWDfx+YGqeDBvULVWi6+ag@mail.gmail.com> |
--000000000000a556db05934c395c Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable With such big files you should use CMSEnvelopedDataParser ( https://github.com/bcgit/bc-java/blob/master/pkix/src/main/java/org/bouncyc= astle/cms/CMSEnvelopedDataParser.java ) Cheers, Massimiliano Il giorno mar 24 set 2019 alle ore 14:28 Emiliano Latini < [email protected]> ha scritto: > Hi there, > > > > I=E2=80=99ve some p7m files which I have to validate, their dimension ran= ges from > 100 Mb to 6Gb. > > I=E2=80=99m creating CMSEnvelopedData with a FileInputStream this way: > > > > CMSEnvelopedData envelopedData =3D new CMSEnvelopedData(encEnvelopedData)= ; > > > > Doing this I get a java.lang.OutOfMemoryError: Java heap space > > > > As far as it seems the only way I have is to raise the Heap Space. > > > > Is there a way to get CMSEnveloped data in chunks ?All I have to do is > extract the content stream. > > > > Below the full code : > > > > [snip] > > > > CMSEnvelopedData envelopedData =3D new > CMSEnvelopedData(encEnvelopedData); > > > > RecipientInformationStore recipients =3D > envelopedData.getRecipientInfos(); > > RecipientInformation recipient =3D recipients.get(new > JceKeyTransRecipientId((java.security.cert.X509Certificate)jcaProvider.ge= tKeystore().getCertificate(alias))); > > if (recipient !=3D null) { > > log.info("recipient!=3Dnull getting > trans"); > > > > JceKeyTransEnvelopedRecipient trans=3Dnew > JceKeyTransEnvelopedRecipient((PrivateKey)jcaProvider.getKeystore().getKe= y(alias,jcaProvider.getPwd().toCharArray())); > > > > trans.setMustProduceEncodableUnwrappedKey(true); > > trans.setProvider(provider); > > trans.setContentProvider(provider); > > > > > > log.info("returning content!"); > > > > CMSTypedStream cmsTs=3D recipient.getContentStream(tran= s); > > return cmsTs.getContentStream(); > > > > > > } > > [\snip] > > > > > > Thanks a lot=E2=80=A6 > > > --000000000000a556db05934c395c Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr">With such big files you should use CMSEnvelopedDataParser = (<a href=3D"https://github.com/bcgit/bc-java/blob/master/pkix/src/main/java= /org/bouncycastle/cms/CMSEnvelopedDataParser.java">https://github.com/bcgit= /bc-java/blob/master/pkix/src/main/java/org/bouncycastle/cms/CMSEnvelopedDa= taParser.java</a>)<div><br></div><div>Cheers,</div><div>Massimiliano</div><= /div><br><div class=3D"gmail_quote"><div dir=3D"ltr" class=3D"gmail_attr">I= l giorno mar 24 set 2019 alle ore 14:28 Emiliano Latini <<a href=3D"mail= to:[email protected]">[email protected]</a>> ha scritto:<br></= div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;bor= der-left:1px solid rgb(204,204,204);padding-left:1ex"> <div lang=3D"IT"> <div class=3D"gmail-m_3173586361870702338WordSection1"> <p class=3D"MsoNormal"><span style=3D"font-size:10pt;font-family:Tahoma,san= s-serif">Hi there,<u></u><u></u></span></p> <p class=3D"MsoNormal"><span style=3D"font-size:10pt;font-family:Tahoma,san= s-serif"><u></u>=C2=A0<u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:Tahoma,sans-serif">I=E2=80=99ve some p7m files which I have to validat= e, their dimension ranges from 100 Mb to 6Gb.<u></u><u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:Tahoma,sans-serif">I=E2=80=99m creating CMSEnvelopedData with a FileIn= putStream this way:<u></u><u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:Tahoma,sans-serif"><u></u>=C2=A0<u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:Tahoma,sans-serif">CMSEnvelopedData envelopedData =3D new CMSEnveloped= Data(encEnvelopedData);<u></u><u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:Tahoma,sans-serif"><u></u>=C2=A0<u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:Tahoma,sans-serif">Doing this I get a=C2=A0 java.lang.OutOfMemoryError= : Java heap space<u></u><u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:Tahoma,sans-serif"><u></u>=C2=A0<u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:Tahoma,sans-serif">As far as it seems the only way I have is to raise = the Heap Space.<u></u><u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:Tahoma,sans-serif"><u></u>=C2=A0<u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:Tahoma,sans-serif">Is there a way to get CMSEnveloped data in chunks ?= All I have to do is extract the content stream.<u></u><u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:Tahoma,sans-serif"><u></u>=C2=A0<u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:Tahoma,sans-serif">Below the full code :<u></u><u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:Tahoma,sans-serif"><u></u>=C2=A0<u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:Tahoma,sans-serif">[snip]<u></u><u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:Tahoma,sans-serif"><u></u>=C2=A0<u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:Tahoma,sans-serif">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 </span><span lang=3D"EN-US" style=3D"font-size:10pt;font-family:"Couri= er New"">CMSEnvelopedData envelopedData =3D new CMSEnvelopedData(encEn= velopedData);<u></u><u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:"Courier New"">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 <u></u><u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:"Courier New"">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 RecipientInformationStore recipients =3D envelopedDat= a.getRecipientInfos();<u></u><u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:"Courier New"">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 RecipientInformation recipient =3D recipients.get(new= JceKeyTransRecipientId((java.security.cert.X509Certificate)jcaProvider.get= Keystore().getCertificate(alias)));<u></u><u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:"Courier New"">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 if (recipient !=3D null) {<u></u><u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:"Courier New"">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <a href=3D"http:/= /log.info" target=3D"_blank">log.info</a>("recipient!=3Dnull getting t= rans");=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <u></u><u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:"Courier New"">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <u></u><u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:"Courier New"">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 JceKeyTransEnvelo= pedRecipient trans=3Dnew JceKeyTransEnvelopedRecipient((PrivateKey)jcaProvi= der.getKeystore().getKey(alias,jcaProvider.getPwd().toCharArray()));<u></u>= <u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:"Courier New""><u></u>=C2=A0<u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:"Courier New"">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 trans.setMustProd= uceEncodableUnwrappedKey(true);<u></u><u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:"Courier New"">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 trans.setProvider= (provider);<u></u><u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:"Courier New"">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 trans.setContentP= rovider(provider);<u></u><u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:"Courier New"">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <u></u><u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:"Courier New"">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <u></u><u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:"Courier New"">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <a href=3D"http:/= /log.info" target=3D"_blank">log.info</a>("returning content!");<= u></u><u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:"Courier New"">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <u></u><u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:"Courier New"">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CMSTypedStream cm= sTs=3D recipient.getContentStream(trans);<u></u><u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:"Courier New"">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return cmsTs.getC= ontentStream();<u></u><u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:"Courier New""><u></u>=C2=A0<u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:"Courier New"">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <u></u><u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:"Courier New"">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 }<u></u><u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:"Courier New"">[\snip]<u></u><u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:"Courier New""><u></u>=C2=A0<u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:"Courier New""><u></u>=C2=A0<u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:Tahoma,sans-serif">Thanks a lot=E2=80=A6<u></u><u></u></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa= mily:"Courier New""><u></u>=C2=A0<u></u></span></p> </div> </div> </blockquote></div> --000000000000a556db05934c395c--