1
package org.bouncycastle.asn1.cmp;
3
import java.util.Enumeration;
5
import org.bouncycastle.asn1.ASN1Encodable;
6
import org.bouncycastle.asn1.ASN1EncodableVector;
7
import org.bouncycastle.asn1.ASN1Sequence;
8
import org.bouncycastle.asn1.ASN1TaggedObject;
9
import org.bouncycastle.asn1.DERBitString;
10
import org.bouncycastle.asn1.DERObject;
11
import org.bouncycastle.asn1.DERSequence;
12
import org.bouncycastle.asn1.DERTaggedObject;
14
public class PKIMessage
17
private PKIHeader header;
19
private DERBitString protection;
20
private ASN1Sequence extraCerts;
22
private PKIMessage(ASN1Sequence seq)
24
Enumeration en = seq.getObjects();
26
header = PKIHeader.getInstance(en.nextElement());
27
body = PKIBody.getInstance(en.nextElement());
29
while (en.hasMoreElements())
31
ASN1TaggedObject tObj = (ASN1TaggedObject)en.nextElement();
33
if (tObj.getTagNo() == 0)
35
protection = DERBitString.getInstance(tObj, true);
39
extraCerts = ASN1Sequence.getInstance(tObj, true);
44
public static PKIMessage getInstance(Object o)
46
if (o instanceof PKIMessage)
52
return new PKIMessage(ASN1Sequence.getInstance(o));
59
* Creates a new PKIMessage.
61
* @param header message header
62
* @param body message body
63
* @param protection message protection (may be null)
64
* @param extraCerts extra certificates (may be null)
69
DERBitString protection,
70
CMPCertificate[] extraCerts)
74
this.protection = protection;
75
if (extraCerts != null) {
76
ASN1EncodableVector v = new ASN1EncodableVector();
77
for (int i = 0; i < extraCerts.length; i++) {
80
this.extraCerts = new DERSequence(v);
87
DERBitString protection)
89
this(header, body, protection, null);
96
this(header, body, null, null);
99
public PKIHeader getHeader()
104
public PKIBody getBody()
109
public DERBitString getProtection()
114
public CMPCertificate[] getExtraCerts()
116
if (extraCerts == null)
121
CMPCertificate[] results = new CMPCertificate[extraCerts.size()];
123
for (int i = 0; i < results.length; i++)
125
results[i] = CMPCertificate.getInstance(extraCerts.getObjectAt(i));
132
* PKIMessage ::= SEQUENCE {
135
* protection [0] PKIProtection OPTIONAL,
136
* extraCerts [1] SEQUENCE SIZE (1..MAX) OF CMPCertificate
140
* @return a basic ASN.1 object representation.
142
public DERObject toASN1Object()
144
ASN1EncodableVector v = new ASN1EncodableVector();
149
addOptional(v, 0, protection);
150
addOptional(v, 1, extraCerts);
152
return new DERSequence(v);
155
private void addOptional(ASN1EncodableVector v, int tagNo, ASN1Encodable obj)
159
v.add(new DERTaggedObject(true, tagNo, obj));