Skip to content

Commit 73d30e8

Browse files
committed
Updates in asn1.cmp
1 parent 175151c commit 73d30e8

12 files changed

Lines changed: 100 additions & 36 deletions

File tree

core/src/main/java/org/bouncycastle/asn1/ASN1TaggedObject.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,11 @@ public int getTagNo()
211211
return tagNo;
212212
}
213213

214+
public boolean hasContextTag()
215+
{
216+
return this.tagClass == BERTags.CONTEXT_SPECIFIC;
217+
}
218+
214219
public boolean hasContextTag(int tagNo)
215220
{
216221
return this.tagClass == BERTags.CONTEXT_SPECIFIC && this.tagNo == tagNo;
@@ -221,6 +226,11 @@ public boolean hasTag(int tagClass, int tagNo)
221226
return this.tagClass == tagClass && this.tagNo == tagNo;
222227
}
223228

229+
public boolean hasTagClass(int tagClass)
230+
{
231+
return this.tagClass == tagClass;
232+
}
233+
224234
/**
225235
* return whether or not the object may be explicitly tagged.
226236
* <p>

util/src/main/java/org/bouncycastle/asn1/cmp/CRLSource.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import org.bouncycastle.asn1.ASN1Object;
55
import org.bouncycastle.asn1.ASN1Primitive;
66
import org.bouncycastle.asn1.ASN1TaggedObject;
7+
import org.bouncycastle.asn1.ASN1Util;
78
import org.bouncycastle.asn1.DERTaggedObject;
89
import org.bouncycastle.asn1.x509.DistributionPointName;
910
import org.bouncycastle.asn1.x509.GeneralNames;
@@ -28,18 +29,19 @@ public class CRLSource
2829

2930
private CRLSource(ASN1TaggedObject ato)
3031
{
31-
switch (ato.getTagNo())
32+
if (ato.hasContextTag(0))
3233
{
33-
case 0:
3434
dpn = DistributionPointName.getInstance(ato, true);
3535
issuer = null;
36-
break;
37-
case 1:
36+
}
37+
else if (ato.hasContextTag(1))
38+
{
3839
dpn = null;
3940
issuer = GeneralNames.getInstance(ato, true);
40-
break;
41-
default:
42-
throw new IllegalArgumentException("unknown tag " + ato.getTagNo());
41+
}
42+
else
43+
{
44+
throw new IllegalArgumentException("unknown tag " + ASN1Util.getTagText(ato));
4345
}
4446
}
4547

util/src/main/java/org/bouncycastle/asn1/cmp/CertOrEncCert.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import org.bouncycastle.asn1.ASN1Object;
55
import org.bouncycastle.asn1.ASN1Primitive;
66
import org.bouncycastle.asn1.ASN1TaggedObject;
7+
import org.bouncycastle.asn1.ASN1Util;
78
import org.bouncycastle.asn1.BERTags;
89
import org.bouncycastle.asn1.DERTaggedObject;
910
import org.bouncycastle.asn1.crmf.EncryptedKey;
@@ -24,17 +25,17 @@ public class CertOrEncCert
2425

2526
private CertOrEncCert(ASN1TaggedObject tagged)
2627
{
27-
if (tagged.getTagNo() == 0)
28+
if (tagged.hasContextTag(0))
2829
{
2930
certificate = CMPCertificate.getInstance(tagged.getExplicitBaseObject());
3031
}
31-
else if (tagged.getTagNo() == 1)
32+
else if (tagged.hasContextTag(1))
3233
{
3334
encryptedCert = EncryptedKey.getInstance(tagged.getExplicitBaseObject());
3435
}
3536
else
3637
{
37-
throw new IllegalArgumentException("unknown tag: " + tagged.getTagNo());
38+
throw new IllegalArgumentException("unknown tag: " + ASN1Util.getTagText(tagged));
3839
}
3940
}
4041

@@ -48,24 +49,24 @@ public CertOrEncCert(CMPCertificate certificate)
4849
this.certificate = certificate;
4950
}
5051

51-
public CertOrEncCert(EncryptedValue encryptedCert)
52+
public CertOrEncCert(EncryptedValue encryptedValue)
5253
{
53-
if (encryptedCert == null)
54+
if (encryptedValue == null)
5455
{
5556
throw new IllegalArgumentException("'encryptedCert' cannot be null");
5657
}
5758

58-
this.encryptedCert = new EncryptedKey(encryptedCert);
59+
this.encryptedCert = new EncryptedKey(encryptedValue);
5960
}
6061

61-
public CertOrEncCert(EncryptedKey encryptedCert)
62+
public CertOrEncCert(EncryptedKey encryptedKey)
6263
{
63-
if (encryptedCert == null)
64+
if (encryptedKey == null)
6465
{
6566
throw new IllegalArgumentException("'encryptedCert' cannot be null");
6667
}
6768

68-
this.encryptedCert = encryptedCert;
69+
this.encryptedCert = encryptedKey;
6970
}
7071

7172
public static CertOrEncCert getInstance(Object o)

util/src/main/java/org/bouncycastle/asn1/cmp/CertRepMessage.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
public class CertRepMessage
1919
extends ASN1Object
2020
{
21-
private ASN1Sequence caPubs;
21+
private final ASN1Sequence caPubs;
2222
private final ASN1Sequence response;
2323

2424
private CertRepMessage(ASN1Sequence seq)
@@ -29,6 +29,10 @@ private CertRepMessage(ASN1Sequence seq)
2929
{
3030
caPubs = ASN1Sequence.getInstance((ASN1TaggedObject)seq.getObjectAt(index++), true);
3131
}
32+
else
33+
{
34+
caPubs = null;
35+
}
3236

3337
response = ASN1Sequence.getInstance(seq.getObjectAt(index));
3438
}
@@ -44,6 +48,10 @@ public CertRepMessage(CMPCertificate[] caPubs, CertResponse[] response)
4448
{
4549
this.caPubs = new DERSequence(caPubs);
4650
}
51+
else
52+
{
53+
this.caPubs = null;
54+
}
4755

4856
this.response = new DERSequence(response);
4957
}

util/src/main/java/org/bouncycastle/asn1/cmp/CertResponse.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,11 @@ public CertifiedKeyPair getCertifiedKeyPair()
111111
return certifiedKeyPair;
112112
}
113113

114+
public ASN1OctetString getRspInfo()
115+
{
116+
return rspInfo;
117+
}
118+
114119
/**
115120
* <pre>
116121
* CertResponse ::= SEQUENCE {

util/src/main/java/org/bouncycastle/asn1/cmp/CertStatus.java

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import org.bouncycastle.asn1.ASN1Primitive;
1111
import org.bouncycastle.asn1.ASN1Sequence;
1212
import org.bouncycastle.asn1.ASN1TaggedObject;
13+
import org.bouncycastle.asn1.ASN1Util;
1314
import org.bouncycastle.asn1.DEROctetString;
1415
import org.bouncycastle.asn1.DERSequence;
1516
import org.bouncycastle.asn1.DERTaggedObject;
@@ -29,13 +30,16 @@ public class CertStatus
2930
{
3031
private final ASN1OctetString certHash;
3132
private final ASN1Integer certReqId;
32-
private PKIStatusInfo statusInfo;
33-
private AlgorithmIdentifier hashAlg;
33+
private final PKIStatusInfo statusInfo;
34+
private final AlgorithmIdentifier hashAlg;
3435

3536
private CertStatus(ASN1Sequence seq)
3637
{
37-
certHash = ASN1OctetString.getInstance(seq.getObjectAt(0));
38-
certReqId = ASN1Integer.getInstance(seq.getObjectAt(1));
38+
this.certHash = ASN1OctetString.getInstance(seq.getObjectAt(0));
39+
this.certReqId = ASN1Integer.getInstance(seq.getObjectAt(1));
40+
41+
PKIStatusInfo statusInfo = null;
42+
AlgorithmIdentifier hashAlg = null;
3943

4044
if (seq.size() > 2)
4145
{
@@ -49,14 +53,17 @@ private CertStatus(ASN1Sequence seq)
4953
if (p instanceof ASN1TaggedObject)
5054
{
5155
ASN1TaggedObject dto = (ASN1TaggedObject)p;
52-
if (dto.getTagNo() != 0)
56+
if (!dto.hasContextTag(0))
5357
{
54-
throw new IllegalArgumentException("unknown tag " + dto.getTagNo());
58+
throw new IllegalArgumentException("unknown tag " + ASN1Util.getTagText(dto));
5559
}
5660
hashAlg = AlgorithmIdentifier.getInstance(dto, true);
5761
}
5862
}
5963
}
64+
65+
this.statusInfo = statusInfo;
66+
this.hashAlg = hashAlg;
6067
}
6168

6269
public CertStatus(byte[] certHash, BigInteger certReqId)
@@ -68,13 +75,16 @@ public CertStatus(byte[] certHash, ASN1Integer certReqId)
6875
{
6976
this.certHash = new DEROctetString(certHash);
7077
this.certReqId = certReqId;
78+
this.statusInfo = null;
79+
this.hashAlg = null;
7180
}
7281

7382
public CertStatus(byte[] certHash, BigInteger certReqId, PKIStatusInfo statusInfo)
7483
{
7584
this.certHash = new DEROctetString(certHash);
7685
this.certReqId = new ASN1Integer(certReqId);
7786
this.statusInfo = statusInfo;
87+
this.hashAlg = null;
7888
}
7989

8090
public CertStatus(byte[] certHash, BigInteger certReqId, PKIStatusInfo statusInfo, AlgorithmIdentifier hashAlg)

util/src/main/java/org/bouncycastle/asn1/cmp/Challenge.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
public class Challenge
4242
extends ASN1Object
4343
{
44-
private AlgorithmIdentifier owf;
44+
private final AlgorithmIdentifier owf;
4545
private final ASN1OctetString witness;
4646
private final ASN1OctetString challenge;
4747

@@ -53,6 +53,10 @@ private Challenge(ASN1Sequence seq)
5353
{
5454
owf = AlgorithmIdentifier.getInstance(seq.getObjectAt(index++));
5555
}
56+
else
57+
{
58+
owf = null;
59+
}
5660

5761
witness = ASN1OctetString.getInstance(seq.getObjectAt(index++));
5862
challenge = ASN1OctetString.getInstance(seq.getObjectAt(index));

util/src/main/java/org/bouncycastle/asn1/cmp/OOBCertHash.java

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import org.bouncycastle.asn1.ASN1Primitive;
88
import org.bouncycastle.asn1.ASN1Sequence;
99
import org.bouncycastle.asn1.ASN1TaggedObject;
10+
import org.bouncycastle.asn1.ASN1Util;
1011
import org.bouncycastle.asn1.DERBitString;
1112
import org.bouncycastle.asn1.DERSequence;
1213
import org.bouncycastle.asn1.DERTaggedObject;
@@ -27,30 +28,39 @@
2728
public class OOBCertHash
2829
extends ASN1Object
2930
{
30-
private AlgorithmIdentifier hashAlg;
31-
private CertId certId;
31+
private final AlgorithmIdentifier hashAlg;
32+
private final CertId certId;
3233
private final ASN1BitString hashVal;
3334

3435
private OOBCertHash(ASN1Sequence seq)
3536
{
3637
int index = seq.size() - 1;
3738

38-
hashVal = ASN1BitString.getInstance(seq.getObjectAt(index--));
39+
this.hashVal = ASN1BitString.getInstance(seq.getObjectAt(index--));
40+
41+
AlgorithmIdentifier hashAlg = null;
42+
CertId certId = null;
3943

4044
for (int i = index; i >= 0; i--)
4145
{
4246
ASN1TaggedObject tObj = (ASN1TaggedObject)seq.getObjectAt(i);
4347

44-
if (tObj.getTagNo() == 0)
48+
if (tObj.hasContextTag(0))
4549
{
4650
hashAlg = AlgorithmIdentifier.getInstance(tObj, true);
4751
}
48-
else
52+
else if (tObj.hasContextTag(1))
4953
{
5054
certId = CertId.getInstance(tObj, true);
5155
}
56+
else
57+
{
58+
throw new IllegalArgumentException("unknown tag " + ASN1Util.getTagText(tObj));
59+
}
5260
}
5361

62+
this.hashAlg = hashAlg;
63+
this.certId = certId;
5464
}
5565

5666
public OOBCertHash(AlgorithmIdentifier hashAlg, CertId certId, byte[] hashVal)

util/src/main/java/org/bouncycastle/asn1/cmp/PKIHeader.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.bouncycastle.asn1.ASN1Primitive;
1212
import org.bouncycastle.asn1.ASN1Sequence;
1313
import org.bouncycastle.asn1.ASN1TaggedObject;
14+
import org.bouncycastle.asn1.ASN1Util;
1415
import org.bouncycastle.asn1.DERSequence;
1516
import org.bouncycastle.asn1.DERTaggedObject;
1617
import org.bouncycastle.asn1.x500.X500Name;
@@ -89,6 +90,10 @@ private PKIHeader(ASN1Sequence seq)
8990
while (en.hasMoreElements())
9091
{
9192
ASN1TaggedObject tObj = (ASN1TaggedObject)en.nextElement();
93+
if (!tObj.hasContextTag())
94+
{
95+
throw new IllegalArgumentException("unknown tag: " + ASN1Util.getTagText(tObj));
96+
}
9297

9398
switch (tObj.getTagNo())
9499
{

util/src/main/java/org/bouncycastle/asn1/cmp/PKIMessage.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ public class PKIMessage
2626
{
2727
private final PKIHeader header;
2828
private final PKIBody body;
29-
private ASN1BitString protection;
30-
private ASN1Sequence extraCerts;
29+
private final ASN1BitString protection;
30+
private final ASN1Sequence extraCerts;
3131

3232
private PKIMessage(ASN1Sequence seq)
3333
{
@@ -36,6 +36,9 @@ private PKIMessage(ASN1Sequence seq)
3636
header = PKIHeader.getInstance(en.nextElement());
3737
body = PKIBody.getInstance(en.nextElement());
3838

39+
ASN1BitString protection = null;
40+
ASN1Sequence extraCerts = null;
41+
3942
while (en.hasMoreElements())
4043
{
4144
ASN1TaggedObject tObj = (ASN1TaggedObject)en.nextElement();
@@ -49,6 +52,9 @@ private PKIMessage(ASN1Sequence seq)
4952
extraCerts = ASN1Sequence.getInstance(tObj, true);
5053
}
5154
}
55+
56+
this.protection = protection;
57+
this.extraCerts = extraCerts;
5258
}
5359

5460
/**
@@ -72,6 +78,10 @@ public PKIMessage(
7278
{
7379
this.extraCerts = new DERSequence(extraCerts);
7480
}
81+
else
82+
{
83+
this.extraCerts = null;
84+
}
7585
}
7686

7787
public PKIMessage(

0 commit comments

Comments
 (0)