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;

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> * 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; } }