Skip to content

Commit 8c13a64

Browse files
author
gefeili
committed
Merge branch 'main' into pqc-snova
# Conflicts: # core/src/main/java/org/bouncycastle/asn1/bc/BCObjectIdentifiers.java
2 parents 1b1a40f + 547257e commit 8c13a64

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+4509
-4325
lines changed

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

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,42 @@ static ASN1TaggedObjectParser checkTagClass(ASN1TaggedObjectParser taggedObjectP
6868
return taggedObjectParser;
6969
}
7070

71+
public static Object getInstanceChoiceBaseObject(ASN1TaggedObject taggedObject, boolean declaredExplicit,
72+
String choiceName)
73+
{
74+
if (!declaredExplicit)
75+
{
76+
String message = "Implicit tagging cannot be used with untagged choice type " + choiceName +
77+
" (X.680 30.6, 30.8).";
78+
79+
throw new IllegalArgumentException(message);
80+
}
81+
if (taggedObject == null)
82+
{
83+
throw new NullPointerException("'taggedObject' cannot be null");
84+
}
85+
86+
return getExplicitContextBaseObject(taggedObject);
87+
}
88+
89+
public static Object getTaggedChoiceBaseObject(ASN1TaggedObject taggedObject, boolean declaredExplicit,
90+
String choiceName)
91+
{
92+
if (!declaredExplicit)
93+
{
94+
String message = "Implicit tagging cannot be used with untagged choice type " + choiceName +
95+
" (X.680 30.6, 30.8).";
96+
97+
throw new IllegalArgumentException(message);
98+
}
99+
if (taggedObject == null)
100+
{
101+
throw new NullPointerException("'taggedObject' cannot be null");
102+
}
103+
104+
return taggedObject.getExplicitBaseObject();
105+
}
106+
71107

72108
/*
73109
* Tag text methods
@@ -138,16 +174,36 @@ public static String getTagText(int tagClass, int tagNo)
138174
* Wrappers for ASN1TaggedObject#getExplicitBaseObject
139175
*/
140176

177+
public static ASN1Object getExplicitBaseObject(ASN1TaggedObject taggedObject, int tagClass)
178+
{
179+
return checkTagClass(taggedObject, tagClass).getExplicitBaseObject();
180+
}
181+
141182
public static ASN1Object getExplicitBaseObject(ASN1TaggedObject taggedObject, int tagClass, int tagNo)
142183
{
143184
return checkTag(taggedObject, tagClass, tagNo).getExplicitBaseObject();
144185
}
145186

187+
public static ASN1Object getExplicitContextBaseObject(ASN1TaggedObject taggedObject)
188+
{
189+
return getExplicitBaseObject(taggedObject, BERTags.CONTEXT_SPECIFIC);
190+
}
191+
146192
public static ASN1Object getExplicitContextBaseObject(ASN1TaggedObject taggedObject, int tagNo)
147193
{
148194
return getExplicitBaseObject(taggedObject, BERTags.CONTEXT_SPECIFIC, tagNo);
149195
}
150196

197+
public static ASN1Object tryGetExplicitBaseObject(ASN1TaggedObject taggedObject, int tagClass)
198+
{
199+
if (!taggedObject.hasTagClass(tagClass))
200+
{
201+
return null;
202+
}
203+
204+
return taggedObject.getExplicitBaseObject();
205+
}
206+
151207
public static ASN1Object tryGetExplicitBaseObject(ASN1TaggedObject taggedObject, int tagClass, int tagNo)
152208
{
153209
if (!taggedObject.hasTag(tagClass, tagNo))
@@ -158,6 +214,11 @@ public static ASN1Object tryGetExplicitBaseObject(ASN1TaggedObject taggedObject,
158214
return taggedObject.getExplicitBaseObject();
159215
}
160216

217+
public static ASN1Object tryGetExplicitContextBaseObject(ASN1TaggedObject taggedObject)
218+
{
219+
return tryGetExplicitBaseObject(taggedObject, BERTags.CONTEXT_SPECIFIC);
220+
}
221+
161222
public static ASN1Object tryGetExplicitContextBaseObject(ASN1TaggedObject taggedObject, int tagNo)
162223
{
163224
return tryGetExplicitBaseObject(taggedObject, BERTags.CONTEXT_SPECIFIC, tagNo);

core/src/main/java/org/bouncycastle/asn1/bc/BCObjectIdentifiers.java

Lines changed: 205 additions & 6 deletions
Large diffs are not rendered by default.

core/src/main/java/org/bouncycastle/asn1/ocsp/CertStatus.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,8 @@ public ASN1Encodable getStatus()
104104
* good [0] IMPLICIT NULL,
105105
* revoked [1] IMPLICIT RevokedInfo,
106106
* unknown [2] IMPLICIT UnknownInfo }
107+
*
108+
* UnknownInfo ::= NULL
107109
* </pre>
108110
*/
109111
public ASN1Primitive toASN1Primitive()

core/src/main/java/org/bouncycastle/asn1/x509/DistributionPointName.java

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import org.bouncycastle.asn1.ASN1Primitive;
77
import org.bouncycastle.asn1.ASN1Set;
88
import org.bouncycastle.asn1.ASN1TaggedObject;
9+
import org.bouncycastle.asn1.ASN1Util;
910
import org.bouncycastle.asn1.DERTaggedObject;
1011
import org.bouncycastle.util.Strings;
1112

@@ -22,21 +23,10 @@ public class DistributionPointName
2223
extends ASN1Object
2324
implements ASN1Choice
2425
{
25-
ASN1Encodable name;
26-
int type;
27-
2826
public static final int FULL_NAME = 0;
2927
public static final int NAME_RELATIVE_TO_CRL_ISSUER = 1;
3028

31-
public static DistributionPointName getInstance(
32-
ASN1TaggedObject obj,
33-
boolean explicit)
34-
{
35-
return getInstance(ASN1TaggedObject.getInstance(obj, true));
36-
}
37-
38-
public static DistributionPointName getInstance(
39-
Object obj)
29+
public static DistributionPointName getInstance(Object obj)
4030
{
4131
if (obj == null || obj instanceof DistributionPointName)
4232
{
@@ -50,6 +40,19 @@ else if (obj instanceof ASN1TaggedObject)
5040
throw new IllegalArgumentException("unknown object in factory: " + obj.getClass().getName());
5141
}
5242

43+
public static DistributionPointName getInstance(ASN1TaggedObject taggedObject, boolean declaredExplicit)
44+
{
45+
return getInstance(ASN1Util.getInstanceChoiceBaseObject(taggedObject, declaredExplicit, "DistributionPointName"));
46+
}
47+
48+
public static DistributionPointName getTagged(ASN1TaggedObject taggedObject, boolean declaredExplicit)
49+
{
50+
return getInstance(ASN1Util.getTaggedChoiceBaseObject(taggedObject, declaredExplicit, "DistributionPointName"));
51+
}
52+
53+
private final ASN1Encodable name;
54+
private final int type;
55+
5356
public DistributionPointName(
5457
int type,
5558
ASN1Encodable name)
@@ -83,22 +86,25 @@ public ASN1Encodable getName()
8386
{
8487
return (ASN1Encodable)name;
8588
}
86-
87-
public DistributionPointName(
88-
ASN1TaggedObject obj)
89+
90+
public DistributionPointName(ASN1TaggedObject obj)
8991
{
9092
this.type = obj.getTagNo();
91-
92-
if (type == 0)
93+
94+
if (obj.hasContextTag(FULL_NAME))
9395
{
9496
this.name = GeneralNames.getInstance(obj, false);
9597
}
96-
else
98+
else if (obj.hasContextTag(NAME_RELATIVE_TO_CRL_ISSUER))
9799
{
98100
this.name = ASN1Set.getInstance(obj, false);
99101
}
102+
else
103+
{
104+
throw new IllegalArgumentException("unknown tag: " + ASN1Util.getTagText(obj));
105+
}
100106
}
101-
107+
102108
public ASN1Primitive toASN1Primitive()
103109
{
104110
return new DERTaggedObject(false, type, name);

core/src/main/java/org/bouncycastle/asn1/x509/IssuingDistributionPoint.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,12 @@ public IssuingDistributionPoint(
8484
boolean indirectCRL,
8585
boolean onlyContainsAttributeCerts)
8686
{
87+
if ((onlyContainsCACerts && (onlyContainsUserCerts || onlyContainsAttributeCerts))
88+
|| (onlyContainsUserCerts && onlyContainsAttributeCerts))
89+
{
90+
throw new IllegalArgumentException("only one of onlyContainsCACerts, onlyContainsUserCerts, or onlyContainsAttributeCerts can be true");
91+
}
92+
8793
this.distributionPoint = distributionPoint;
8894
this.indirectCRL = indirectCRL;
8995
this.onlyContainsAttributeCerts = onlyContainsAttributeCerts;

core/src/main/java/org/bouncycastle/asn1/x9/X9Curve.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,16 +115,21 @@ else if (ECAlgorithms.isF2mCurve(curve))
115115
}
116116
}
117117

118-
public ECCurve getCurve()
118+
public ECCurve getCurve()
119119
{
120120
return curve;
121121
}
122122

123-
public byte[] getSeed()
123+
public byte[] getSeed()
124124
{
125125
return Arrays.clone(seed);
126126
}
127127

128+
public boolean hasSeed()
129+
{
130+
return seed != null;
131+
}
132+
128133
/**
129134
* Produce an object suitable for an ASN1OutputStream.
130135
* <pre>

core/src/main/java/org/bouncycastle/asn1/x9/X9ECParameters.java

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import org.bouncycastle.math.ec.ECPoint;
1515
import org.bouncycastle.math.field.FiniteField;
1616
import org.bouncycastle.math.field.PolynomialExtensionField;
17-
import org.bouncycastle.util.Arrays;
1817

1918
/**
2019
* ASN.1 def for Elliptic-Curve ECParameters structure. See
@@ -27,11 +26,10 @@ public class X9ECParameters
2726
private static final BigInteger ONE = BigInteger.valueOf(1);
2827

2928
private X9FieldID fieldID;
30-
private ECCurve curve;
29+
private X9Curve curve;
3130
private X9ECPoint g;
3231
private BigInteger n;
3332
private BigInteger h;
34-
private byte[] seed;
3533

3634
private X9ECParameters(
3735
ASN1Sequence seq)
@@ -49,11 +47,10 @@ private X9ECParameters(
4947
this.h = ((ASN1Integer)seq.getObjectAt(5)).getValue();
5048
}
5149

52-
X9Curve x9c = new X9Curve(
53-
X9FieldID.getInstance(seq.getObjectAt(1)), n, h,
54-
ASN1Sequence.getInstance(seq.getObjectAt(2)));
50+
this.fieldID = X9FieldID.getInstance(seq.getObjectAt(1));
51+
52+
this.curve = new X9Curve(fieldID, n, h, ASN1Sequence.getInstance(seq.getObjectAt(2)));
5553

56-
this.curve = x9c.getCurve();
5754
Object p = seq.getObjectAt(3);
5855

5956
if (p instanceof X9ECPoint)
@@ -62,10 +59,8 @@ private X9ECParameters(
6259
}
6360
else
6461
{
65-
this.g = new X9ECPoint(curve, (ASN1OctetString)p);
62+
this.g = new X9ECPoint(curve.getCurve(), (ASN1OctetString)p);
6663
}
67-
68-
this.seed = x9c.getSeed();
6964
}
7065

7166
public static X9ECParameters getInstance(Object obj)
@@ -107,11 +102,10 @@ public X9ECParameters(
107102
BigInteger h,
108103
byte[] seed)
109104
{
110-
this.curve = curve;
105+
this.curve = new X9Curve(curve, seed);
111106
this.g = g;
112107
this.n = n;
113108
this.h = h;
114-
this.seed = Arrays.clone(seed);
115109

116110
FiniteField field = curve.getField();
117111
if (ECAlgorithms.isFpField(field))
@@ -143,7 +137,7 @@ else if (exponents.length == 5)
143137

144138
public ECCurve getCurve()
145139
{
146-
return curve;
140+
return curve.getCurve();
147141
}
148142

149143
public ECPoint getG()
@@ -163,12 +157,12 @@ public BigInteger getH()
163157

164158
public byte[] getSeed()
165159
{
166-
return Arrays.clone(seed);
160+
return curve.getSeed();
167161
}
168162

169163
public boolean hasSeed()
170164
{
171-
return null != seed;
165+
return curve.hasSeed();
172166
}
173167

174168
/**
@@ -178,7 +172,7 @@ public boolean hasSeed()
178172
*/
179173
public X9Curve getCurveEntry()
180174
{
181-
return new X9Curve(curve, seed);
175+
return curve;
182176
}
183177

184178
/**
@@ -220,7 +214,7 @@ public ASN1Primitive toASN1Primitive()
220214

221215
v.add(new ASN1Integer(ONE));
222216
v.add(fieldID);
223-
v.add(new X9Curve(curve, seed));
217+
v.add(curve);
224218
v.add(g);
225219
v.add(new ASN1Integer(n));
226220

core/src/main/java/org/bouncycastle/pqc/crypto/falcon/ComplexNumberWrapper.java

Lines changed: 0 additions & 13 deletions
This file was deleted.

0 commit comments

Comments
 (0)