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 &lt;<a href=3D"mail=
to:[email protected]">[email protected]</a>&gt; 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:&quot;Couri=
er New&quot;">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:&quot;Courier New&quot;">=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:&quot;Courier New&quot;">=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:&quot;Courier New&quot;">=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:&quot;Courier New&quot;">=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:&quot;Courier New&quot;">=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>(&quot;recipient!=3Dnull getting t=
rans&quot;);=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:&quot;Courier New&quot;">=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:&quot;Courier New&quot;">=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:&quot;Courier New&quot;"><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:&quot;Courier New&quot;">=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:&quot;Courier New&quot;">=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:&quot;Courier New&quot;">=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:&quot;Courier New&quot;">=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:&quot;Courier New&quot;">=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:&quot;Courier New&quot;">=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>(&quot;returning content!&quot;);<=
u></u><u></u></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa=
mily:&quot;Courier New&quot;">=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:&quot;Courier New&quot;">=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:&quot;Courier New&quot;">=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:&quot;Courier New&quot;"><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:&quot;Courier New&quot;">=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:&quot;Courier New&quot;">=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:&quot;Courier New&quot;">[\snip]<u></u><u></u></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt;font-fa=
mily:&quot;Courier New&quot;"><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:&quot;Courier New&quot;"><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:&quot;Courier New&quot;"><u></u>=C2=A0<u></u></span></p>
</div>
</div>

</blockquote></div>

--000000000000a556db05934c395c--