public void TestNestedStructure()
{
MemoryStream bOut = new MemoryStream();
BerSequenceGenerator sGen = new BerSequenceGenerator(bOut);
sGen.AddObject(new DerObjectIdentifier(CmsObjectIdentifiers.CompressedData.Id));
BerSequenceGenerator cGen = new BerSequenceGenerator(sGen.GetRawOutputStream(), 0, true);
cGen.AddObject(new DerInteger(0));
//
// AlgorithmIdentifier
//
DerSequenceGenerator algGen = new DerSequenceGenerator(cGen.GetRawOutputStream());
algGen.AddObject(new DerObjectIdentifier("1.2"));
algGen.Close();
//
// Encapsulated ContentInfo
//
BerSequenceGenerator eiGen = new BerSequenceGenerator(cGen.GetRawOutputStream());
eiGen.AddObject(new DerObjectIdentifier("1.1"));
BerOctetStringGenerator octGen = new BerOctetStringGenerator(eiGen.GetRawOutputStream(), 0, true);
//
// output containing zeroes
//
Stream outStream = octGen.GetOctetOutputStream();
outStream.Write(new byte[] { 1, 2, 3, 4 }, 0, 4);
outStream.Write(new byte[4], 0, 4);
outStream.Write(new byte[20], 0, 20);
outStream.Close();
eiGen.Close();
cGen.Close();
sGen.Close();
//
// reading back
//
Asn1StreamParser aIn = new Asn1StreamParser(bOut.ToArray());
ContentInfoParser cp = new ContentInfoParser((Asn1SequenceParser)aIn.ReadObject());
CompressedDataParser comData = new CompressedDataParser((Asn1SequenceParser)cp.GetContent(Asn1Tags.Sequence));
ContentInfoParser content = comData.GetEncapContentInfo();
Asn1OctetStringParser bytes = (Asn1OctetStringParser)content.GetContent(Asn1Tags.OctetString);
Stream inStream = bytes.GetOctetStream();
int count = 0;
while (inStream.ReadByte() >= 0)
{
count++;
}
Assert.AreEqual(28, count);
}