blob: e110de5aa67ec9bbb86bb1b6cf56924d6331555d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
package org.bouncycastle.cms;
import java.io.IOException;
import java.io.InputStream;
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
import org.bouncycastle.asn1.ASN1OctetString;
import org.bouncycastle.asn1.cms.CompressedData;
import org.bouncycastle.asn1.cms.ContentInfo;
import org.bouncycastle.operator.InputExpander;
import org.bouncycastle.operator.InputExpanderProvider;
import org.bouncycastle.util.Encodable;
/**
* containing class for an CMS Compressed Data object
* <pre>
* CMSCompressedData cd = new CMSCompressedData(inputStream);
*
* process(cd.getContent(new ZlibExpanderProvider()));
* </pre>
*/
public class CMSCompressedData
implements Encodable
{
ContentInfo contentInfo;
CompressedData comData;
public CMSCompressedData(
byte[] compressedData)
throws CMSException
{
this(CMSUtils.readContentInfo(compressedData));
}
public CMSCompressedData(
InputStream compressedData)
throws CMSException
{
this(CMSUtils.readContentInfo(compressedData));
}
public CMSCompressedData(
ContentInfo contentInfo)
throws CMSException
{
this.contentInfo = contentInfo;
try
{
this.comData = CompressedData.getInstance(contentInfo.getContent());
}
catch (ClassCastException e)
{
throw new CMSException("Malformed content.", e);
}
catch (IllegalArgumentException e)
{
throw new CMSException("Malformed content.", e);
}
}
public ASN1ObjectIdentifier getContentType()
{
return contentInfo.getContentType();
}
/**
* Return the uncompressed content.
*
* @param expanderProvider a provider of expander algorithm implementations.
* @return the uncompressed content
* @throws CMSException if there is an exception un-compressing the data.
*/
public byte[] getContent(InputExpanderProvider expanderProvider)
throws CMSException
{
ContentInfo content = comData.getEncapContentInfo();
ASN1OctetString bytes = (ASN1OctetString)content.getContent();
InputExpander expander = expanderProvider.get(comData.getCompressionAlgorithmIdentifier());
InputStream zIn = expander.getInputStream(bytes.getOctetStream());
try
{
return CMSUtils.streamToByteArray(zIn);
}
catch (IOException e)
{
throw new CMSException("exception reading compressed stream.", e);
}
}
/**
* return the ContentInfo
*/
public ContentInfo toASN1Structure()
{
return contentInfo;
}
/**
* return the ASN.1 encoded representation of this object.
*/
public byte[] getEncoded()
throws IOException
{
return contentInfo.getEncoded();
}
}
|