package org.bouncycastle.cms; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import org.bouncycastle.asn1.ASN1Encodable; import org.bouncycastle.asn1.ASN1Encoding; import org.bouncycastle.asn1.ASN1ObjectIdentifier; public class PKCS7TypedStream extends CMSTypedStream { private final ASN1Encodable content; public PKCS7TypedStream(ASN1ObjectIdentifier oid, ASN1Encodable encodable) throws IOException { super(oid); content = encodable; } public ASN1Encodable getContent() { return content; } public InputStream getContentStream() { try { return getContentStream(content); } catch (IOException e) { throw new CMSRuntimeException("unable to convert content to stream: " + e.getMessage(), e); } } public void drain() throws IOException { getContentStream(content); // this will parse in the data } private InputStream getContentStream(ASN1Encodable encodable) throws IOException { byte[] encoded = encodable.toASN1Primitive().getEncoded(ASN1Encoding.DER); int index = 1; while ((encoded[index] & 0xff) > 127) { index++; } index++; return new ByteArrayInputStream(encoded, index, encoded.length - index); } }