blob: 35180b18fbf707b79b5f795f97e591e5c8b2150f [file] [log] [blame]
package org.bouncycastle.asn1.cmc;
import org.bouncycastle.asn1.ASN1Encodable;
import org.bouncycastle.asn1.ASN1Object;
import org.bouncycastle.asn1.ASN1Primitive;
import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.asn1.DERSequence;
/**
* <pre>
* PKIData ::= SEQUENCE {
* controlSequence SEQUENCE SIZE(0..MAX) OF TaggedAttribute,
* reqSequence SEQUENCE SIZE(0..MAX) OF TaggedRequest,
* cmsSequence SEQUENCE SIZE(0..MAX) OF TaggedContentInfo,
* otherMsgSequence SEQUENCE SIZE(0..MAX) OF OtherMsg
* }
* </pre>
*/
public class PKIData
extends ASN1Object
{
private final TaggedAttribute[] controlSequence;
private final TaggedRequest[] reqSequence;
private final TaggedContentInfo[] cmsSequence;
private final OtherMsg[] otherMsgSequence;
public PKIData(
TaggedAttribute[] controlSequence,
TaggedRequest[] reqSequence,
TaggedContentInfo[] cmsSequence,
OtherMsg[] otherMsgSequence)
{
this.controlSequence = copy(controlSequence);
this.reqSequence = copy(reqSequence);
this.cmsSequence = copy(cmsSequence);
this.otherMsgSequence = copy(otherMsgSequence);
}
private PKIData(ASN1Sequence seq)
{
if (seq.size() != 4)
{
throw new IllegalArgumentException("Sequence not 4 elements.");
}
ASN1Sequence s = ((ASN1Sequence)seq.getObjectAt(0));
controlSequence = new TaggedAttribute[s.size()];
for (int t = 0; t < controlSequence.length; t++)
{
controlSequence[t] = TaggedAttribute.getInstance(s.getObjectAt(t));
}
s = ((ASN1Sequence)seq.getObjectAt(1));
reqSequence = new TaggedRequest[s.size()];
for (int t = 0; t < reqSequence.length; t++)
{
reqSequence[t] = TaggedRequest.getInstance(s.getObjectAt(t));
}
s = ((ASN1Sequence)seq.getObjectAt(2));
cmsSequence = new TaggedContentInfo[s.size()];
for (int t = 0; t < cmsSequence.length; t++)
{
cmsSequence[t] = TaggedContentInfo.getInstance(s.getObjectAt(t));
}
s = ((ASN1Sequence)seq.getObjectAt(3));
otherMsgSequence = new OtherMsg[s.size()];
for (int t = 0; t < otherMsgSequence.length; t++)
{
otherMsgSequence[t] = OtherMsg.getInstance(s.getObjectAt(t));
}
}
public static PKIData getInstance(Object src)
{
if (src instanceof PKIData)
{
return (PKIData)src;
}
if (src != null)
{
return new PKIData(ASN1Sequence.getInstance(src));
}
return null;
}
public ASN1Primitive toASN1Primitive()
{
return new DERSequence(new ASN1Encodable[]{
new DERSequence(controlSequence),
new DERSequence(reqSequence),
new DERSequence(cmsSequence),
new DERSequence(otherMsgSequence)
});
}
public TaggedAttribute[] getControlSequence()
{
return copy(controlSequence);
}
private TaggedAttribute[] copy(TaggedAttribute[] taggedAtts)
{
TaggedAttribute[] tmp = new TaggedAttribute[taggedAtts.length];
System.arraycopy(taggedAtts, 0, tmp, 0, tmp.length);
return tmp;
}
public TaggedRequest[] getReqSequence()
{
return copy(reqSequence);
}
private TaggedRequest[] copy(TaggedRequest[] taggedReqs)
{
TaggedRequest[] tmp = new TaggedRequest[taggedReqs.length];
System.arraycopy(taggedReqs, 0, tmp, 0, tmp.length);
return tmp;
}
public TaggedContentInfo[] getCmsSequence()
{
return copy(cmsSequence);
}
private TaggedContentInfo[] copy(TaggedContentInfo[] taggedConts)
{
TaggedContentInfo[] tmp = new TaggedContentInfo[taggedConts.length];
System.arraycopy(taggedConts, 0, tmp, 0, tmp.length);
return tmp;
}
public OtherMsg[] getOtherMsgSequence()
{
return copy(otherMsgSequence);
}
private OtherMsg[] copy(OtherMsg[] otherMsgs)
{
OtherMsg[] tmp = new OtherMsg[otherMsgs.length];
System.arraycopy(otherMsgs, 0, tmp, 0, tmp.length);
return tmp;
}
}