summaryrefslogtreecommitdiff
path: root/bcprov/src/main/java/org/bouncycastle/asn1
diff options
context:
space:
mode:
authorBrian Carlstrom <bdc@google.com>2013-01-30 18:26:40 -0800
committerBrian Carlstrom <bdc@google.com>2013-02-12 11:49:49 -0800
commite1142c149e244797ce73b0e7fad40816e447a817 (patch)
tree1b21a376dea5f398b558a6e3d2ed4a73667ba2f7 /bcprov/src/main/java/org/bouncycastle/asn1
parent2d8d9ce072842c1c67e912686fd20795c43f221d (diff)
downloadbouncycastle-e1142c149e244797ce73b0e7fad40816e447a817.tar.gz
bouncycastle 1.48 upgrade
Change-Id: Idb04baf42de07b18ddb162e5cd1f98cdadf366f4
Diffstat (limited to 'bcprov/src/main/java/org/bouncycastle/asn1')
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/ASN1EncodableVector.java9
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/ASN1Integer.java2
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/ASN1Null.java3
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/ASN1Set.java4
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/DERBMPString.java12
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/DERBitString.java21
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/DERBoolean.java15
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/DEREnumerated.java12
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/DERGeneralString.java12
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/DERGeneralizedTime.java12
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/DERIA5String.java12
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/DERInteger.java14
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/DERNull.java3
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/DERNumericString.java12
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/DERObjectIdentifier.java139
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/DERPrintableString.java12
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/DERT61String.java16
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/DERUTCTime.java12
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/DERUTF8String.java12
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/DERUniversalString.java12
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/DERVisibleString.java12
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/DefiniteLengthInputStream.java1
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/cms/AttributeTable.java6
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/pkcs/EncryptedPrivateKeyInfo.java3
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/pkcs/IssuerAndSerialNumber.java8
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers.java1
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/pkcs/RSAESOAEPparams.java2
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/pkcs/RSASSAPSSparams.java2
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/pkcs/SignedData.java5
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/util/ASN1Dump.java87
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/x500/X500NameBuilder.java6
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/x500/style/BCStrictStyle.java5
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/x500/style/BCStyle.java103
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/x500/style/IETFUtils.java108
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/x500/style/RFC4519Style.java99
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/x500/style/X500NameTokenizer.java18
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/x509/AttCertValidityPeriod.java18
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/x509/AuthorityKeyIdentifier.java5
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/x509/BasicConstraints.java20
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/x509/CRLReason.java5
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/x509/DSAParameter.java10
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/x509/ExtendedKeyUsage.java48
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/x509/Extensions.java31
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/x509/GeneralNames.java6
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/x509/IssuerSerial.java21
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/x509/IssuingDistributionPoint.java26
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/x509/KeyPurposeId.java100
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/x509/KeyUsage.java47
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/x509/NameConstraints.java52
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/x509/ObjectDigestInfo.java5
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/x509/SubjectKeyIdentifier.java5
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/x509/SubjectPublicKeyInfo.java1
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/x509/V1TBSCertificateGenerator.java8
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/x509/X509Extensions.java4
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/x509/X509Name.java2
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/x509/X509NameTokenizer.java27
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/x9/X962NamedCurves.java2
57 files changed, 754 insertions, 501 deletions
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/ASN1EncodableVector.java b/bcprov/src/main/java/org/bouncycastle/asn1/ASN1EncodableVector.java
index 2aa68b38..ecfca6ad 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/ASN1EncodableVector.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/ASN1EncodableVector.java
@@ -1,5 +1,6 @@
package org.bouncycastle.asn1;
+import java.util.Enumeration;
import java.util.Vector;
public class ASN1EncodableVector
@@ -15,6 +16,14 @@ public class ASN1EncodableVector
v.addElement(obj);
}
+ public void addAll(ASN1EncodableVector other)
+ {
+ for (Enumeration en = other.v.elements(); en.hasMoreElements();)
+ {
+ v.addElement(en.nextElement());
+ }
+ }
+
public ASN1Encodable get(int i)
{
return (ASN1Encodable)v.elementAt(i);
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/ASN1Integer.java b/bcprov/src/main/java/org/bouncycastle/asn1/ASN1Integer.java
index 71009a03..d60c6a8e 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/ASN1Integer.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/ASN1Integer.java
@@ -15,7 +15,7 @@ public class ASN1Integer
super(value);
}
- public ASN1Integer(int value)
+ public ASN1Integer(long value)
{
super(value);
}
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/ASN1Null.java b/bcprov/src/main/java/org/bouncycastle/asn1/ASN1Null.java
index 5b52da8a..84814c54 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/ASN1Null.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/ASN1Null.java
@@ -8,6 +8,9 @@ import java.io.IOException;
public abstract class ASN1Null
extends ASN1Primitive
{
+ /**
+ * @deprecated use DERNull.INSTANCE
+ */
// BEGIN android-changed
/*package*/ ASN1Null()
{
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/ASN1Set.java b/bcprov/src/main/java/org/bouncycastle/asn1/ASN1Set.java
index 8f785b88..f1ac6c7d 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/ASN1Set.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/ASN1Set.java
@@ -110,10 +110,6 @@ abstract public class ASN1Set
// in this case the parser returns a sequence, convert it
// into a set.
//
-
-
- ASN1EncodableVector v = new ASN1EncodableVector();
-
if (obj.getObject() instanceof ASN1Sequence)
{
ASN1Sequence s = (ASN1Sequence)obj.getObject();
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/DERBMPString.java b/bcprov/src/main/java/org/bouncycastle/asn1/DERBMPString.java
index 33a09f81..341e46a6 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/DERBMPString.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/DERBMPString.java
@@ -27,6 +27,18 @@ public class DERBMPString
return (DERBMPString)obj;
}
+ if (obj instanceof byte[])
+ {
+ try
+ {
+ return (DERBMPString)fromByteArray((byte[])obj);
+ }
+ catch (Exception e)
+ {
+ throw new IllegalArgumentException("encoding error in getInstance: " + e.toString());
+ }
+ }
+
throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
}
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/DERBitString.java b/bcprov/src/main/java/org/bouncycastle/asn1/DERBitString.java
index f7f2462c..a7b02ec6 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/DERBitString.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/DERBitString.java
@@ -159,17 +159,18 @@ public class DERBitString
}
public DERBitString(
- ASN1Encodable obj)
+ int value)
{
- try
- {
- this.data = obj.toASN1Primitive().getEncoded(ASN1Encoding.DER);
- this.padBits = 0;
- }
- catch (IOException e)
- {
- throw new IllegalArgumentException("Error processing object : " + e.toString());
- }
+ this.data = getBytes(value);
+ this.padBits = getPadBits(value);
+ }
+
+ public DERBitString(
+ ASN1Encodable obj)
+ throws IOException
+ {
+ this.data = obj.toASN1Primitive().getEncoded(ASN1Encoding.DER);
+ this.padBits = 0;
}
public byte[] getBytes()
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/DERBoolean.java b/bcprov/src/main/java/org/bouncycastle/asn1/DERBoolean.java
index a519fa2e..c8d7bd0e 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/DERBoolean.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/DERBoolean.java
@@ -40,7 +40,7 @@ public class DERBoolean
}
/**
- * return a DERBoolean from the passed in boolean.
+ * return a ASN1Boolean from the passed in boolean.
*/
public static ASN1Boolean getInstance(
boolean value)
@@ -48,6 +48,15 @@ public class DERBoolean
return (value ? TRUE : FALSE);
}
+ /**
+ * return a ASN1Boolean from the passed in boolean.
+ */
+ public static ASN1Boolean getInstance(
+ int value)
+ {
+ return (value != 0 ? TRUE : FALSE);
+ }
+
// BEGIN android-added
/**
* return a DERBoolean from the passed in array.
@@ -108,6 +117,10 @@ public class DERBoolean
}
}
+ /**
+ * @deprecated use getInstance(boolean) method.
+ * @param value
+ */
// BEGIN android-changed
protected DERBoolean(
boolean value)
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/DEREnumerated.java b/bcprov/src/main/java/org/bouncycastle/asn1/DEREnumerated.java
index 2cf17f1f..2f299ee2 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/DEREnumerated.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/DEREnumerated.java
@@ -28,6 +28,18 @@ public class DEREnumerated
return new ASN1Enumerated(((DEREnumerated)obj).getValue());
}
+ if (obj instanceof byte[])
+ {
+ try
+ {
+ return (ASN1Enumerated)fromByteArray((byte[])obj);
+ }
+ catch (Exception e)
+ {
+ throw new IllegalArgumentException("encoding error in getInstance: " + e.toString());
+ }
+ }
+
throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
}
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/DERGeneralString.java b/bcprov/src/main/java/org/bouncycastle/asn1/DERGeneralString.java
index d7cd5942..c6354f46 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/DERGeneralString.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/DERGeneralString.java
@@ -19,6 +19,18 @@ public class DERGeneralString
return (DERGeneralString) obj;
}
+ if (obj instanceof byte[])
+ {
+ try
+ {
+ return (DERGeneralString)fromByteArray((byte[])obj);
+ }
+ catch (Exception e)
+ {
+ throw new IllegalArgumentException("encoding error in getInstance: " + e.toString());
+ }
+ }
+
throw new IllegalArgumentException("illegal object in getInstance: "
+ obj.getClass().getName());
}
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/DERGeneralizedTime.java b/bcprov/src/main/java/org/bouncycastle/asn1/DERGeneralizedTime.java
index bb3b575d..43e46731 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/DERGeneralizedTime.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/DERGeneralizedTime.java
@@ -36,6 +36,18 @@ public class DERGeneralizedTime
return new ASN1GeneralizedTime(((DERGeneralizedTime)obj).time);
}
+ if (obj instanceof byte[])
+ {
+ try
+ {
+ return (ASN1GeneralizedTime)fromByteArray((byte[])obj);
+ }
+ catch (Exception e)
+ {
+ throw new IllegalArgumentException("encoding error in getInstance: " + e.toString());
+ }
+ }
+
throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
}
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/DERIA5String.java b/bcprov/src/main/java/org/bouncycastle/asn1/DERIA5String.java
index abb28112..631672ef 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/DERIA5String.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/DERIA5String.java
@@ -27,6 +27,18 @@ public class DERIA5String
return (DERIA5String)obj;
}
+ if (obj instanceof byte[])
+ {
+ try
+ {
+ return (DERIA5String)fromByteArray((byte[])obj);
+ }
+ catch (Exception e)
+ {
+ throw new IllegalArgumentException("encoding error in getInstance: " + e.toString());
+ }
+ }
+
throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
}
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/DERInteger.java b/bcprov/src/main/java/org/bouncycastle/asn1/DERInteger.java
index d5e826d1..3804450e 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/DERInteger.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/DERInteger.java
@@ -27,6 +27,18 @@ public class DERInteger
return new ASN1Integer((((DERInteger)obj).getValue()));
}
+ if (obj instanceof byte[])
+ {
+ try
+ {
+ return (ASN1Integer)fromByteArray((byte[])obj);
+ }
+ catch (Exception e)
+ {
+ throw new IllegalArgumentException("encoding error in getInstance: " + e.toString());
+ }
+ }
+
throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
}
@@ -56,7 +68,7 @@ public class DERInteger
}
public DERInteger(
- int value)
+ long value)
{
bytes = BigInteger.valueOf(value).toByteArray();
}
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/DERNull.java b/bcprov/src/main/java/org/bouncycastle/asn1/DERNull.java
index 9bbc8265..7df2acf6 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/DERNull.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/DERNull.java
@@ -12,6 +12,9 @@ public class DERNull
private static final byte[] zeroBytes = new byte[0];
+ /**
+ * @deprecated use DERNull.INSTANCE
+ */
// BEGIN android-changed
protected DERNull()
// END android-changed
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/DERNumericString.java b/bcprov/src/main/java/org/bouncycastle/asn1/DERNumericString.java
index fae4063c..eca4eea2 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/DERNumericString.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/DERNumericString.java
@@ -27,6 +27,18 @@ public class DERNumericString
return (DERNumericString)obj;
}
+ if (obj instanceof byte[])
+ {
+ try
+ {
+ return (DERNumericString)fromByteArray((byte[])obj);
+ }
+ catch (Exception e)
+ {
+ throw new IllegalArgumentException("encoding error in getInstance: " + e.toString());
+ }
+ }
+
throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
}
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/DERObjectIdentifier.java b/bcprov/src/main/java/org/bouncycastle/asn1/DERObjectIdentifier.java
index 02a0945d..8e2ee4e9 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/DERObjectIdentifier.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/DERObjectIdentifier.java
@@ -31,6 +31,16 @@ public class DERObjectIdentifier
return new ASN1ObjectIdentifier(((DERObjectIdentifier)obj).getId());
}
+ if (obj instanceof ASN1Encodable && ((ASN1Encodable)obj).toASN1Primitive() instanceof ASN1ObjectIdentifier)
+ {
+ return (ASN1ObjectIdentifier)((ASN1Encodable)obj).toASN1Primitive();
+ }
+
+ if (obj instanceof byte[])
+ {
+ return ASN1ObjectIdentifier.fromOctetString((byte[])obj);
+ }
+
throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
}
@@ -59,6 +69,8 @@ public class DERObjectIdentifier
}
}
+ private static final long LONG_LIMIT = (Long.MAX_VALUE >> 7) - 0x7f;
+
DERObjectIdentifier(
byte[] bytes)
{
@@ -71,26 +83,27 @@ public class DERObjectIdentifier
{
int b = bytes[i] & 0xff;
- if (value < 0x80000000000000L)
+ if (value <= LONG_LIMIT)
{
- value = value * 128 + (b & 0x7f);
+ value += (b & 0x7f);
if ((b & 0x80) == 0) // end of number reached
{
if (first)
{
- switch ((int)value / 40)
- {
- case 0:
- objId.append('0');
- break;
- case 1:
- objId.append('1');
+ if (value < 40)
+ {
+ objId.append('0');
+ }
+ else if (value < 80)
+ {
+ objId.append('1');
value -= 40;
- break;
- default:
- objId.append('2');
+ }
+ else
+ {
+ objId.append('2');
value -= 80;
- }
+ }
first = false;
}
@@ -98,6 +111,10 @@ public class DERObjectIdentifier
objId.append(value);
value = 0;
}
+ else
+ {
+ value <<= 7;
+ }
}
else
{
@@ -105,15 +122,25 @@ public class DERObjectIdentifier
{
bigValue = BigInteger.valueOf(value);
}
- bigValue = bigValue.shiftLeft(7);
bigValue = bigValue.or(BigInteger.valueOf(b & 0x7f));
if ((b & 0x80) == 0)
{
+ if (first)
+ {
+ objId.append('2');
+ bigValue = bigValue.subtract(BigInteger.valueOf(80));
+ first = false;
+ }
+
objId.append('.');
objId.append(bigValue);
bigValue = null;
value = 0;
}
+ else
+ {
+ bigValue = bigValue.shiftLeft(7);
+ }
}
}
@@ -124,6 +151,7 @@ public class DERObjectIdentifier
*/
this.identifier = objId.toString().intern();
// END android-changed
+ this.body = Arrays.clone(bytes);
}
public DERObjectIdentifier(
@@ -188,16 +216,23 @@ public class DERObjectIdentifier
private void doOutput(ByteArrayOutputStream aOut)
{
- OIDTokenizer tok = new OIDTokenizer(identifier);
-
- writeField(aOut,
- Integer.parseInt(tok.nextToken()) * 40
- + Integer.parseInt(tok.nextToken()));
+ OIDTokenizer tok = new OIDTokenizer(identifier);
+ int first = Integer.parseInt(tok.nextToken()) * 40;
+
+ String secondToken = tok.nextToken();
+ if (secondToken.length() <= 18)
+ {
+ writeField(aOut, first + Long.parseLong(secondToken));
+ }
+ else
+ {
+ writeField(aOut, new BigInteger(secondToken).add(BigInteger.valueOf(first)));
+ }
while (tok.hasMoreTokens())
{
String token = tok.nextToken();
- if (token.length() < 18)
+ if (token.length() <= 18)
{
writeField(aOut, Long.parseLong(token));
}
@@ -208,7 +243,7 @@ public class DERObjectIdentifier
}
}
- protected byte[] getBody()
+ protected synchronized byte[] getBody()
{
if (body == null)
{
@@ -287,6 +322,7 @@ public class DERObjectIdentifier
{
char ch = identifier.charAt(i);
+ // TODO Leading zeroes?
if ('0' <= ch && ch <= '9')
{
periodAllowed = true;
@@ -310,7 +346,7 @@ public class DERObjectIdentifier
return periodAllowed;
}
- private static ASN1ObjectIdentifier[][] cache = new ASN1ObjectIdentifier[255][];
+ private static ASN1ObjectIdentifier[][] cache = new ASN1ObjectIdentifier[256][];
static ASN1ObjectIdentifier fromOctetString(byte[] enc)
{
@@ -320,42 +356,23 @@ public class DERObjectIdentifier
}
int idx1 = enc[enc.length - 2] & 0xff;
- ASN1ObjectIdentifier[] first = cache[idx1];
-
- if (first == null)
- {
- first = cache[idx1] = new ASN1ObjectIdentifier[255];
- }
+ // in this case top bit is always zero
+ int idx2 = enc[enc.length - 1] & 0x7f;
- int idx2 = enc[enc.length - 1] & 0xff;
-
- ASN1ObjectIdentifier possibleMatch = first[idx2];
-
- if (possibleMatch == null)
- {
- possibleMatch = first[idx2] = new ASN1ObjectIdentifier(enc);
- return possibleMatch;
- }
+ ASN1ObjectIdentifier possibleMatch;
- if (Arrays.areEqual(enc, possibleMatch.getBody()))
- {
- return possibleMatch;
- }
- else
+ synchronized (cache)
{
- idx1 = (idx1 + 1) % 256;
- first = cache[idx1];
- if (first == null)
+ ASN1ObjectIdentifier[] first = cache[idx1];
+ if (first == null)
{
- first = cache[idx1] = new ASN1ObjectIdentifier[255];
+ first = cache[idx1] = new ASN1ObjectIdentifier[128];
}
possibleMatch = first[idx2];
-
if (possibleMatch == null)
{
- possibleMatch = first[idx2] = new ASN1ObjectIdentifier(enc);
- return possibleMatch;
+ return first[idx2] = new ASN1ObjectIdentifier(enc);
}
if (Arrays.areEqual(enc, possibleMatch.getBody()))
@@ -363,19 +380,35 @@ public class DERObjectIdentifier
return possibleMatch;
}
- idx2 = (idx2 + 1) % 256;
- possibleMatch = first[idx2];
+ idx1 = (idx1 + 1) & 0xff;
+ first = cache[idx1];
+ if (first == null)
+ {
+ first = cache[idx1] = new ASN1ObjectIdentifier[128];
+ }
+ possibleMatch = first[idx2];
if (possibleMatch == null)
{
- possibleMatch = first[idx2] = new ASN1ObjectIdentifier(enc);
- return possibleMatch;
+ return first[idx2] = new ASN1ObjectIdentifier(enc);
}
if (Arrays.areEqual(enc, possibleMatch.getBody()))
{
return possibleMatch;
}
+
+ idx2 = (idx2 + 1) & 0x7f;
+ possibleMatch = first[idx2];
+ if (possibleMatch == null)
+ {
+ return first[idx2] = new ASN1ObjectIdentifier(enc);
+ }
+ }
+
+ if (Arrays.areEqual(enc, possibleMatch.getBody()))
+ {
+ return possibleMatch;
}
return new ASN1ObjectIdentifier(enc);
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/DERPrintableString.java b/bcprov/src/main/java/org/bouncycastle/asn1/DERPrintableString.java
index 6c56e836..59d0110d 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/DERPrintableString.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/DERPrintableString.java
@@ -29,6 +29,18 @@ public class DERPrintableString
return (DERPrintableString)obj;
}
+ if (obj instanceof byte[])
+ {
+ try
+ {
+ return (DERPrintableString)fromByteArray((byte[])obj);
+ }
+ catch (Exception e)
+ {
+ throw new IllegalArgumentException("encoding error in getInstance: " + e.toString());
+ }
+ }
+
throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
}
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/DERT61String.java b/bcprov/src/main/java/org/bouncycastle/asn1/DERT61String.java
index f023e7f0..bb4e9a84 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/DERT61String.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/DERT61String.java
@@ -27,6 +27,18 @@ public class DERT61String
return (DERT61String)obj;
}
+ if (obj instanceof byte[])
+ {
+ try
+ {
+ return (DERT61String)fromByteArray((byte[])obj);
+ }
+ catch (Exception e)
+ {
+ throw new IllegalArgumentException("encoding error in getInstance: " + e.toString());
+ }
+ }
+
throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
}
@@ -70,16 +82,12 @@ public class DERT61String
public DERT61String(
String string)
{
- // BEGIN android-changed
this.string = Strings.toUTF8ByteArray(string);
- // END android-changed
}
public String getString()
{
- // BEGIN android-changed
return Strings.fromUTF8ByteArray(string);
- // END android-changed
}
public String toString()
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/DERUTCTime.java b/bcprov/src/main/java/org/bouncycastle/asn1/DERUTCTime.java
index a5bdef19..c5bd536f 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/DERUTCTime.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/DERUTCTime.java
@@ -35,6 +35,18 @@ public class DERUTCTime
return new ASN1UTCTime(((DERUTCTime)obj).time);
}
+ if (obj instanceof byte[])
+ {
+ try
+ {
+ return (ASN1UTCTime)fromByteArray((byte[])obj);
+ }
+ catch (Exception e)
+ {
+ throw new IllegalArgumentException("encoding error in getInstance: " + e.toString());
+ }
+ }
+
throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
}
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/DERUTF8String.java b/bcprov/src/main/java/org/bouncycastle/asn1/DERUTF8String.java
index f46f5581..fa34b22a 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/DERUTF8String.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/DERUTF8String.java
@@ -27,6 +27,18 @@ public class DERUTF8String
return (DERUTF8String)obj;
}
+ if (obj instanceof byte[])
+ {
+ try
+ {
+ return (DERUTF8String)fromByteArray((byte[])obj);
+ }
+ catch (Exception e)
+ {
+ throw new IllegalArgumentException("encoding error in getInstance: " + e.toString());
+ }
+ }
+
throw new IllegalArgumentException("illegal object in getInstance: "
+ obj.getClass().getName());
}
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/DERUniversalString.java b/bcprov/src/main/java/org/bouncycastle/asn1/DERUniversalString.java
index 4fe82f09..51b07993 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/DERUniversalString.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/DERUniversalString.java
@@ -28,6 +28,18 @@ public class DERUniversalString
return (DERUniversalString)obj;
}
+ if (obj instanceof byte[])
+ {
+ try
+ {
+ return (DERUniversalString)fromByteArray((byte[])obj);
+ }
+ catch (Exception e)
+ {
+ throw new IllegalArgumentException("encoding error getInstance: " + e.toString());
+ }
+ }
+
throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
}
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/DERVisibleString.java b/bcprov/src/main/java/org/bouncycastle/asn1/DERVisibleString.java
index 1c385b7a..18e7d73b 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/DERVisibleString.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/DERVisibleString.java
@@ -27,6 +27,18 @@ public class DERVisibleString
return (DERVisibleString)obj;
}
+ if (obj instanceof byte[])
+ {
+ try
+ {
+ return (DERVisibleString)fromByteArray((byte[])obj);
+ }
+ catch (Exception e)
+ {
+ throw new IllegalArgumentException("encoding error in getInstance: " + e.toString());
+ }
+ }
+
throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
}
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/DefiniteLengthInputStream.java b/bcprov/src/main/java/org/bouncycastle/asn1/DefiniteLengthInputStream.java
index 3f6ce221..37851748 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/DefiniteLengthInputStream.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/DefiniteLengthInputStream.java
@@ -17,7 +17,6 @@ class DefiniteLengthInputStream
DefiniteLengthInputStream(
InputStream in,
int length)
- throws IOException
{
super(in, length);
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/cms/AttributeTable.java b/bcprov/src/main/java/org/bouncycastle/asn1/cms/AttributeTable.java
index 4c88c7b6..f114623b 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/cms/AttributeTable.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/cms/AttributeTable.java
@@ -44,6 +44,12 @@ public class AttributeTable
}
public AttributeTable(
+ Attribute attr)
+ {
+ addAttribute(attr.getAttrType(), attr);
+ }
+
+ public AttributeTable(
Attributes attrs)
{
this(ASN1Set.getInstance(attrs.toASN1Primitive()));
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/pkcs/EncryptedPrivateKeyInfo.java b/bcprov/src/main/java/org/bouncycastle/asn1/pkcs/EncryptedPrivateKeyInfo.java
index 2aa2fae6..acbe04a9 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/pkcs/EncryptedPrivateKeyInfo.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/pkcs/EncryptedPrivateKeyInfo.java
@@ -37,13 +37,10 @@ public class EncryptedPrivateKeyInfo
public static EncryptedPrivateKeyInfo getInstance(
Object obj)
{
- // BEGIN android-changed
- // fix copy and paste error in instanceof call
if (obj instanceof EncryptedPrivateKeyInfo)
{
return (EncryptedPrivateKeyInfo)obj;
}
- // END android-changed
else if (obj != null)
{
return new EncryptedPrivateKeyInfo(ASN1Sequence.getInstance(obj));
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/pkcs/IssuerAndSerialNumber.java b/bcprov/src/main/java/org/bouncycastle/asn1/pkcs/IssuerAndSerialNumber.java
index bb944404..6cbf907a 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/pkcs/IssuerAndSerialNumber.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/pkcs/IssuerAndSerialNumber.java
@@ -24,15 +24,15 @@ public class IssuerAndSerialNumber
{
return (IssuerAndSerialNumber)obj;
}
- else if (obj instanceof ASN1Sequence)
+ else if (obj != null)
{
- return new IssuerAndSerialNumber((ASN1Sequence)obj);
+ return new IssuerAndSerialNumber(ASN1Sequence.getInstance(obj));
}
- throw new IllegalArgumentException("unknown object in factory: " + obj.getClass().getName());
+ return null;
}
- public IssuerAndSerialNumber(
+ private IssuerAndSerialNumber(
ASN1Sequence seq)
{
this.name = X500Name.getInstance(seq.getObjectAt(0));
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers.java b/bcprov/src/main/java/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers.java
index fa4c20e3..8ca8dc3a 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers.java
@@ -60,6 +60,7 @@ public interface PKCSObjectIdentifiers
static final ASN1ObjectIdentifier des_EDE3_CBC = encryptionAlgorithm.branch("7");
static final ASN1ObjectIdentifier RC2_CBC = encryptionAlgorithm.branch("2");
+ static final ASN1ObjectIdentifier rc4 = encryptionAlgorithm.branch("4");
//
// object identifiers for digests
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/pkcs/RSAESOAEPparams.java b/bcprov/src/main/java/org/bouncycastle/asn1/pkcs/RSAESOAEPparams.java
index 25ff98d9..515b515a 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/pkcs/RSAESOAEPparams.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/pkcs/RSAESOAEPparams.java
@@ -19,9 +19,7 @@ public class RSAESOAEPparams
private AlgorithmIdentifier maskGenAlgorithm;
private AlgorithmIdentifier pSourceAlgorithm;
- // BEGIN android-changed
public final static AlgorithmIdentifier DEFAULT_HASH_ALGORITHM = new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1, DERNull.INSTANCE);
- // END android-changed
public final static AlgorithmIdentifier DEFAULT_MASK_GEN_FUNCTION = new AlgorithmIdentifier(PKCSObjectIdentifiers.id_mgf1, DEFAULT_HASH_ALGORITHM);
public final static AlgorithmIdentifier DEFAULT_P_SOURCE_ALGORITHM = new AlgorithmIdentifier(PKCSObjectIdentifiers.id_pSpecified, new DEROctetString(new byte[0]));
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/pkcs/RSASSAPSSparams.java b/bcprov/src/main/java/org/bouncycastle/asn1/pkcs/RSASSAPSSparams.java
index 73cfcdc5..dc91c9c1 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/pkcs/RSASSAPSSparams.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/pkcs/RSASSAPSSparams.java
@@ -22,9 +22,7 @@ public class RSASSAPSSparams
private ASN1Integer saltLength;
private ASN1Integer trailerField;
- // BEGIN android-changed
public final static AlgorithmIdentifier DEFAULT_HASH_ALGORITHM = new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1, DERNull.INSTANCE);
- // END android-changed
public final static AlgorithmIdentifier DEFAULT_MASK_GEN_FUNCTION = new AlgorithmIdentifier(PKCSObjectIdentifiers.id_mgf1, DEFAULT_HASH_ALGORITHM);
public final static ASN1Integer DEFAULT_SALT_LENGTH = new ASN1Integer(20);
public final static ASN1Integer DEFAULT_TRAILER_FIELD = new ASN1Integer(1);
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/pkcs/SignedData.java b/bcprov/src/main/java/org/bouncycastle/asn1/pkcs/SignedData.java
index 234eb2e7..3d3089bc 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/pkcs/SignedData.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/pkcs/SignedData.java
@@ -8,6 +8,7 @@ import org.bouncycastle.asn1.ASN1Object;
import org.bouncycastle.asn1.ASN1Primitive;
import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.asn1.ASN1Set;
+import org.bouncycastle.asn1.ASN1TaggedObject;
import org.bouncycastle.asn1.BERSequence;
import org.bouncycastle.asn1.DERTaggedObject;
@@ -73,9 +74,9 @@ public class SignedData
// an interesting feature of SignedData is that there appear to be varying implementations...
// for the moment we ignore anything which doesn't fit.
//
- if (o instanceof DERTaggedObject)
+ if (o instanceof ASN1TaggedObject)
{
- DERTaggedObject tagged = (DERTaggedObject)o;
+ ASN1TaggedObject tagged = (ASN1TaggedObject)o;
switch (tagged.getTagNo())
{
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/util/ASN1Dump.java b/bcprov/src/main/java/org/bouncycastle/asn1/util/ASN1Dump.java
index 976f556a..9886b731 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/util/ASN1Dump.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/util/ASN1Dump.java
@@ -10,8 +10,10 @@ import org.bouncycastle.asn1.ASN1OctetString;
import org.bouncycastle.asn1.ASN1Primitive;
import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.asn1.ASN1Set;
+import org.bouncycastle.asn1.ASN1TaggedObject;
import org.bouncycastle.asn1.BERApplicationSpecific;
import org.bouncycastle.asn1.BERConstructedOctetString;
+import org.bouncycastle.asn1.BEROctetString;
import org.bouncycastle.asn1.BERSequence;
import org.bouncycastle.asn1.BERSet;
import org.bouncycastle.asn1.BERTaggedObject;
@@ -25,12 +27,9 @@ import org.bouncycastle.asn1.DERExternal;
import org.bouncycastle.asn1.DERGeneralizedTime;
import org.bouncycastle.asn1.DERIA5String;
import org.bouncycastle.asn1.DERNull;
-import org.bouncycastle.asn1.DEROctetString;
import org.bouncycastle.asn1.DERPrintableString;
import org.bouncycastle.asn1.DERSequence;
-import org.bouncycastle.asn1.DERSet;
import org.bouncycastle.asn1.DERT61String;
-import org.bouncycastle.asn1.DERTaggedObject;
import org.bouncycastle.asn1.DERUTCTime;
import org.bouncycastle.asn1.DERUTF8String;
import org.bouncycastle.asn1.DERVisibleString;
@@ -78,9 +77,7 @@ public class ASN1Dump
{
Object o = e.nextElement();
- // BEGIN android-changed
if (o == null || o.equals(DERNull.INSTANCE))
- // END android-changed
{
buf.append(tab);
buf.append("NULL");
@@ -96,7 +93,7 @@ public class ASN1Dump
}
}
}
- else if (obj instanceof DERTaggedObject)
+ else if (obj instanceof ASN1TaggedObject)
{
String tab = indent + TAB;
@@ -110,7 +107,7 @@ public class ASN1Dump
buf.append("Tagged [");
}
- DERTaggedObject o = (DERTaggedObject)obj;
+ ASN1TaggedObject o = (ASN1TaggedObject)obj;
buf.append(Integer.toString(o.getTagNo()));
buf.append(']');
@@ -133,42 +130,22 @@ public class ASN1Dump
_dumpAsString(tab, verbose, o.getObject(), buf);
}
}
- else if (obj instanceof BERSet)
+ else if (obj instanceof ASN1Set)
{
Enumeration e = ((ASN1Set)obj).getObjects();
String tab = indent + TAB;
buf.append(indent);
- buf.append("BER Set");
- buf.append(nl);
- while (e.hasMoreElements())
+ if (obj instanceof BERSet)
{
- Object o = e.nextElement();
-
- if (o == null)
- {
- buf.append(tab);
- buf.append("NULL");
- buf.append(nl);
- }
- else if (o instanceof ASN1Primitive)
- {
- _dumpAsString(tab, verbose, (ASN1Primitive)o, buf);
- }
- else
- {
- _dumpAsString(tab, verbose, ((ASN1Encodable)o).toASN1Primitive(), buf);
- }
+ buf.append("BER Set");
+ }
+ else
+ {
+ buf.append("DER Set");
}
- }
- else if (obj instanceof DERSet)
- {
- Enumeration e = ((ASN1Set)obj).getObjects();
- String tab = indent + TAB;
- buf.append(indent);
- buf.append("DER Set");
buf.append(nl);
while (e.hasMoreElements())
@@ -191,34 +168,18 @@ public class ASN1Dump
}
}
}
- else if (obj instanceof ASN1ObjectIdentifier)
- {
- buf.append(indent + "ObjectIdentifier(" + ((ASN1ObjectIdentifier)obj).getId() + ")" + nl);
- }
- else if (obj instanceof DERBoolean)
- {
- buf.append(indent + "Boolean(" + ((DERBoolean)obj).isTrue() + ")" + nl);
- }
- else if (obj instanceof ASN1Integer)
- {
- buf.append(indent + "Integer(" + ((ASN1Integer)obj).getValue() + ")" + nl);
- }
- else if (obj instanceof BERConstructedOctetString)
+ else if (obj instanceof ASN1OctetString)
{
ASN1OctetString oct = (ASN1OctetString)obj;
- buf.append(indent + "BER Constructed Octet String" + "[" + oct.getOctets().length + "] ");
- if (verbose)
+
+ if (obj instanceof BEROctetString || obj instanceof BERConstructedOctetString)
{
- buf.append(dumpBinaryDataAsString(indent, oct.getOctets()));
+ buf.append(indent + "BER Constructed Octet String" + "[" + oct.getOctets().length + "] ");
}
- else{
- buf.append(nl);
+ else
+ {
+ buf.append(indent + "DER Octet String" + "[" + oct.getOctets().length + "] ");
}
- }
- else if (obj instanceof DEROctetString)
- {
- ASN1OctetString oct = (ASN1OctetString)obj;
- buf.append(indent + "DER Octet String" + "[" + oct.getOctets().length + "] ");
if (verbose)
{
buf.append(dumpBinaryDataAsString(indent, oct.getOctets()));
@@ -227,6 +188,18 @@ public class ASN1Dump
buf.append(nl);
}
}
+ else if (obj instanceof ASN1ObjectIdentifier)
+ {
+ buf.append(indent + "ObjectIdentifier(" + ((ASN1ObjectIdentifier)obj).getId() + ")" + nl);
+ }
+ else if (obj instanceof DERBoolean)
+ {
+ buf.append(indent + "Boolean(" + ((DERBoolean)obj).isTrue() + ")" + nl);
+ }
+ else if (obj instanceof ASN1Integer)
+ {
+ buf.append(indent + "Integer(" + ((ASN1Integer)obj).getValue() + ")" + nl);
+ }
else if (obj instanceof DERBitString)
{
DERBitString bt = (DERBitString)obj;
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/x500/X500NameBuilder.java b/bcprov/src/main/java/org/bouncycastle/asn1/x500/X500NameBuilder.java
index 30e871c9..7c9506a9 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/x500/X500NameBuilder.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/x500/X500NameBuilder.java
@@ -4,12 +4,18 @@ import java.util.Vector;
import org.bouncycastle.asn1.ASN1Encodable;
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
+import org.bouncycastle.asn1.x500.style.BCStyle;
public class X500NameBuilder
{
private X500NameStyle template;
private Vector rdns = new Vector();
+ public X500NameBuilder()
+ {
+ this(BCStyle.INSTANCE);
+ }
+
public X500NameBuilder(X500NameStyle template)
{
this.template = template;
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/x500/style/BCStrictStyle.java b/bcprov/src/main/java/org/bouncycastle/asn1/x500/style/BCStrictStyle.java
index af10fef0..eb627c0e 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/x500/style/BCStrictStyle.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/x500/style/BCStrictStyle.java
@@ -2,6 +2,7 @@ package org.bouncycastle.asn1.x500.style;
import org.bouncycastle.asn1.x500.RDN;
import org.bouncycastle.asn1.x500.X500Name;
+import org.bouncycastle.asn1.x500.X500NameStyle;
/**
* Variation of BCStyle that insists on strict ordering for equality
@@ -10,6 +11,8 @@ import org.bouncycastle.asn1.x500.X500Name;
public class BCStrictStyle
extends BCStyle
{
+ public static final X500NameStyle INSTANCE = new BCStrictStyle();
+
public boolean areEqual(X500Name name1, X500Name name2)
{
RDN[] rdns1 = name1.getRDNs();
@@ -22,7 +25,7 @@ public class BCStrictStyle
for (int i = 0; i != rdns1.length; i++)
{
- if (rdnAreEqual(rdns1[i], rdns2[i]))
+ if (!rdnAreEqual(rdns1[i], rdns2[i]))
{
return false;
}
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/x500/style/BCStyle.java b/bcprov/src/main/java/org/bouncycastle/asn1/x500/style/BCStyle.java
index 32f93ff9..777cc563 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/x500/style/BCStyle.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/x500/style/BCStyle.java
@@ -4,8 +4,8 @@ import java.io.IOException;
import java.util.Hashtable;
import org.bouncycastle.asn1.ASN1Encodable;
+import org.bouncycastle.asn1.ASN1GeneralizedTime;
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
-import org.bouncycastle.asn1.DERGeneralizedTime;
import org.bouncycastle.asn1.DERIA5String;
import org.bouncycastle.asn1.DERPrintableString;
import org.bouncycastle.asn1.DERUTF8String;
@@ -303,7 +303,7 @@ public class BCStyle
}
else if (oid.equals(DATE_OF_BIRTH)) // accept time string as well as # (for compatibility)
{
- return new DERGeneralizedTime(value);
+ return new ASN1GeneralizedTime(value);
}
else if (oid.equals(C) || oid.equals(SN) || oid.equals(DN_QUALIFIER)
|| oid.equals(TELEPHONE_NUMBER))
@@ -378,80 +378,7 @@ public class BCStyle
protected boolean rdnAreEqual(RDN rdn1, RDN rdn2)
{
- if (rdn1.isMultiValued())
- {
- if (rdn2.isMultiValued())
- {
- AttributeTypeAndValue[] atvs1 = rdn1.getTypesAndValues();
- AttributeTypeAndValue[] atvs2 = rdn2.getTypesAndValues();
-
- if (atvs1.length != atvs2.length)
- {
- return false;
- }
-
- for (int i = 0; i != atvs1.length; i++)
- {
- if (!atvAreEqual(atvs1[i], atvs2[i]))
- {
- return false;
- }
- }
- }
- else
- {
- return false;
- }
- }
- else
- {
- if (!rdn2.isMultiValued())
- {
- return atvAreEqual(rdn1.getFirst(), rdn2.getFirst());
- }
- else
- {
- return false;
- }
- }
-
- return true;
- }
-
- private boolean atvAreEqual(AttributeTypeAndValue atv1, AttributeTypeAndValue atv2)
- {
- if (atv1 == atv2)
- {
- return true;
- }
-
- if (atv1 == null)
- {
- return false;
- }
-
- if (atv2 == null)
- {
- return false;
- }
-
- ASN1ObjectIdentifier o1 = atv1.getType();
- ASN1ObjectIdentifier o2 = atv2.getType();
-
- if (!o1.equals(o2))
- {
- return false;
- }
-
- String v1 = IETFUtils.canonicalize(IETFUtils.valueToString(atv1.getValue()));
- String v2 = IETFUtils.canonicalize(IETFUtils.valueToString(atv2.getValue()));
-
- if (!v1.equals(v2))
- {
- return false;
- }
-
- return true;
+ return IETFUtils.rDNAreEqual(rdn1, rdn2);
}
public RDN[] fromString(String dirName)
@@ -514,29 +441,7 @@ public class BCStyle
buf.append(',');
}
- if (rdns[i].isMultiValued())
- {
- AttributeTypeAndValue[] atv = rdns[i].getTypesAndValues();
- boolean firstAtv = true;
-
- for (int j = 0; j != atv.length; j++)
- {
- if (firstAtv)
- {
- firstAtv = false;
- }
- else
- {
- buf.append('+');
- }
-
- IETFUtils.appendTypeAndValue(buf, atv[j], DefaultSymbols);
- }
- }
- else
- {
- IETFUtils.appendTypeAndValue(buf, rdns[i].getFirst(), DefaultSymbols);
- }
+ IETFUtils.appendRDN(buf, rdns[i], DefaultSymbols);
}
return buf.toString();
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/x500/style/IETFUtils.java b/bcprov/src/main/java/org/bouncycastle/asn1/x500/style/IETFUtils.java
index 5c60c89f..861108d4 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/x500/style/IETFUtils.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/x500/style/IETFUtils.java
@@ -151,6 +151,36 @@ public class IETFUtils
return ASN1Primitive.fromByteArray(data);
}
+ public static void appendRDN(
+ StringBuffer buf,
+ RDN rdn,
+ Hashtable oidSymbols)
+ {
+ if (rdn.isMultiValued())
+ {
+ AttributeTypeAndValue[] atv = rdn.getTypesAndValues();
+ boolean firstAtv = true;
+
+ for (int j = 0; j != atv.length; j++)
+ {
+ if (firstAtv)
+ {
+ firstAtv = false;
+ }
+ else
+ {
+ buf.append('+');
+ }
+
+ IETFUtils.appendTypeAndValue(buf, atv[j], oidSymbols);
+ }
+ }
+ else
+ {
+ IETFUtils.appendTypeAndValue(buf, rdn.getFirst(), oidSymbols);
+ }
+ }
+
public static void appendTypeAndValue(
StringBuffer buf,
AttributeTypeAndValue typeAndValue,
@@ -298,4 +328,82 @@ public class IETFUtils
return res.toString();
}
+
+ public static boolean rDNAreEqual(RDN rdn1, RDN rdn2)
+ {
+ if (rdn1.isMultiValued())
+ {
+ if (rdn2.isMultiValued())
+ {
+ AttributeTypeAndValue[] atvs1 = rdn1.getTypesAndValues();
+ AttributeTypeAndValue[] atvs2 = rdn2.getTypesAndValues();
+
+ if (atvs1.length != atvs2.length)
+ {
+ return false;
+ }
+
+ for (int i = 0; i != atvs1.length; i++)
+ {
+ if (!atvAreEqual(atvs1[i], atvs2[i]))
+ {
+ return false;
+ }
+ }
+ }
+ else
+ {
+ return false;
+ }
+ }
+ else
+ {
+ if (!rdn2.isMultiValued())
+ {
+ return atvAreEqual(rdn1.getFirst(), rdn2.getFirst());
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ private static boolean atvAreEqual(AttributeTypeAndValue atv1, AttributeTypeAndValue atv2)
+ {
+ if (atv1 == atv2)
+ {
+ return true;
+ }
+
+ if (atv1 == null)
+ {
+ return false;
+ }
+
+ if (atv2 == null)
+ {
+ return false;
+ }
+
+ ASN1ObjectIdentifier o1 = atv1.getType();
+ ASN1ObjectIdentifier o2 = atv2.getType();
+
+ if (!o1.equals(o2))
+ {
+ return false;
+ }
+
+ String v1 = IETFUtils.canonicalize(IETFUtils.valueToString(atv1.getValue()));
+ String v2 = IETFUtils.canonicalize(IETFUtils.valueToString(atv2.getValue()));
+
+ if (!v1.equals(v2))
+ {
+ return false;
+ }
+
+ return true;
+ }
}
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/x500/style/RFC4519Style.java b/bcprov/src/main/java/org/bouncycastle/asn1/x500/style/RFC4519Style.java
index 63f1a25c..430d3794 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/x500/style/RFC4519Style.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/x500/style/RFC4519Style.java
@@ -267,80 +267,7 @@ public class RFC4519Style
protected boolean rdnAreEqual(RDN rdn1, RDN rdn2)
{
- if (rdn1.isMultiValued())
- {
- if (rdn2.isMultiValued())
- {
- AttributeTypeAndValue[] atvs1 = rdn1.getTypesAndValues();
- AttributeTypeAndValue[] atvs2 = rdn2.getTypesAndValues();
-
- if (atvs1.length != atvs2.length)
- {
- return false;
- }
-
- for (int i = 0; i != atvs1.length; i++)
- {
- if (!atvAreEqual(atvs1[i], atvs2[i]))
- {
- return false;
- }
- }
- }
- else
- {
- return false;
- }
- }
- else
- {
- if (!rdn2.isMultiValued())
- {
- return atvAreEqual(rdn1.getFirst(), rdn2.getFirst());
- }
- else
- {
- return false;
- }
- }
-
- return true;
- }
-
- private boolean atvAreEqual(AttributeTypeAndValue atv1, AttributeTypeAndValue atv2)
- {
- if (atv1 == atv2)
- {
- return true;
- }
-
- if (atv1 == null)
- {
- return false;
- }
-
- if (atv2 == null)
- {
- return false;
- }
-
- ASN1ObjectIdentifier o1 = atv1.getType();
- ASN1ObjectIdentifier o2 = atv2.getType();
-
- if (!o1.equals(o2))
- {
- return false;
- }
-
- String v1 = IETFUtils.canonicalize(IETFUtils.valueToString(atv1.getValue()));
- String v2 = IETFUtils.canonicalize(IETFUtils.valueToString(atv2.getValue()));
-
- if (!v1.equals(v2))
- {
- return false;
- }
-
- return true;
+ return IETFUtils.rDNAreEqual(rdn1, rdn2);
}
// parse backwards
@@ -413,29 +340,7 @@ public class RFC4519Style
buf.append(',');
}
- if (rdns[i].isMultiValued())
- {
- AttributeTypeAndValue[] atv = rdns[i].getTypesAndValues();
- boolean firstAtv = true;
-
- for (int j = 0; j != atv.length; j++)
- {
- if (firstAtv)
- {
- firstAtv = false;
- }
- else
- {
- buf.append('+');
- }
-
- IETFUtils.appendTypeAndValue(buf, atv[j], DefaultSymbols);
- }
- }
- else
- {
- IETFUtils.appendTypeAndValue(buf, rdns[i].getFirst(), DefaultSymbols);
- }
+ IETFUtils.appendRDN(buf, rdns[i], DefaultSymbols);
}
return buf.toString();
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/x500/style/X500NameTokenizer.java b/bcprov/src/main/java/org/bouncycastle/asn1/x500/style/X500NameTokenizer.java
index 7549a729..a02295af 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/x500/style/X500NameTokenizer.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/x500/style/X500NameTokenizer.java
@@ -10,7 +10,7 @@ class X500NameTokenizer
{
private String value;
private int index;
- private char seperator;
+ private char separator;
private StringBuffer buf = new StringBuffer();
public X500NameTokenizer(
@@ -21,11 +21,11 @@ class X500NameTokenizer
public X500NameTokenizer(
String oid,
- char seperator)
+ char separator)
{
this.value = oid;
this.index = -1;
- this.seperator = seperator;
+ this.separator = separator;
}
public boolean hasMoreTokens()
@@ -58,6 +58,14 @@ class X500NameTokenizer
}
else
{
+ if (c == '#' && buf.charAt(buf.length() - 1) == '=')
+ {
+ buf.append('\\');
+ }
+ else if (c == '+' && separator != '+')
+ {
+ buf.append('\\');
+ }
buf.append(c);
}
escaped = false;
@@ -70,7 +78,7 @@ class X500NameTokenizer
{
buf.append('\\');
}
- else if (c == '+' && seperator != '+')
+ else if (c == '+' && separator != '+')
{
buf.append('\\');
}
@@ -81,7 +89,7 @@ class X500NameTokenizer
{
escaped = true;
}
- else if (c == seperator)
+ else if (c == separator)
{
break;
}
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/x509/AttCertValidityPeriod.java b/bcprov/src/main/java/org/bouncycastle/asn1/x509/AttCertValidityPeriod.java
index e157b66c..2f781564 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/x509/AttCertValidityPeriod.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/x509/AttCertValidityPeriod.java
@@ -1,17 +1,17 @@
package org.bouncycastle.asn1.x509;
import org.bouncycastle.asn1.ASN1EncodableVector;
+import org.bouncycastle.asn1.ASN1GeneralizedTime;
import org.bouncycastle.asn1.ASN1Object;
import org.bouncycastle.asn1.ASN1Primitive;
import org.bouncycastle.asn1.ASN1Sequence;
-import org.bouncycastle.asn1.DERGeneralizedTime;
import org.bouncycastle.asn1.DERSequence;
public class AttCertValidityPeriod
extends ASN1Object
{
- DERGeneralizedTime notBeforeTime;
- DERGeneralizedTime notAfterTime;
+ ASN1GeneralizedTime notBeforeTime;
+ ASN1GeneralizedTime notAfterTime;
public static AttCertValidityPeriod getInstance(
Object obj)
@@ -37,8 +37,8 @@ public class AttCertValidityPeriod
+ seq.size());
}
- notBeforeTime = DERGeneralizedTime.getInstance(seq.getObjectAt(0));
- notAfterTime = DERGeneralizedTime.getInstance(seq.getObjectAt(1));
+ notBeforeTime = ASN1GeneralizedTime.getInstance(seq.getObjectAt(0));
+ notAfterTime = ASN1GeneralizedTime.getInstance(seq.getObjectAt(1));
}
/**
@@ -46,19 +46,19 @@ public class AttCertValidityPeriod
* @param notAfterTime
*/
public AttCertValidityPeriod(
- DERGeneralizedTime notBeforeTime,
- DERGeneralizedTime notAfterTime)
+ ASN1GeneralizedTime notBeforeTime,
+ ASN1GeneralizedTime notAfterTime)
{
this.notBeforeTime = notBeforeTime;
this.notAfterTime = notAfterTime;
}
- public DERGeneralizedTime getNotBeforeTime()
+ public ASN1GeneralizedTime getNotBeforeTime()
{
return notBeforeTime;
}
- public DERGeneralizedTime getNotAfterTime()
+ public ASN1GeneralizedTime getNotAfterTime()
{
return notAfterTime;
}
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/x509/AuthorityKeyIdentifier.java b/bcprov/src/main/java/org/bouncycastle/asn1/x509/AuthorityKeyIdentifier.java
index 84ef3dad..3746f9ea 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/x509/AuthorityKeyIdentifier.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/x509/AuthorityKeyIdentifier.java
@@ -61,6 +61,11 @@ public class AuthorityKeyIdentifier
return null;
}
+ public static AuthorityKeyIdentifier fromExtensions(Extensions extensions)
+ {
+ return AuthorityKeyIdentifier.getInstance(extensions.getExtensionParsedValue(Extension.authorityKeyIdentifier));
+ }
+
protected AuthorityKeyIdentifier(
ASN1Sequence seq)
{
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/x509/BasicConstraints.java b/bcprov/src/main/java/org/bouncycastle/asn1/x509/BasicConstraints.java
index 19fa762c..4a16bd4b 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/x509/BasicConstraints.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/x509/BasicConstraints.java
@@ -2,6 +2,7 @@ package org.bouncycastle.asn1.x509;
import java.math.BigInteger;
+import org.bouncycastle.asn1.ASN1Boolean;
import org.bouncycastle.asn1.ASN1EncodableVector;
import org.bouncycastle.asn1.ASN1Integer;
import org.bouncycastle.asn1.ASN1Object;
@@ -14,9 +15,7 @@ import org.bouncycastle.asn1.DERSequence;
public class BasicConstraints
extends ASN1Object
{
- // BEGIN android-changed
- DERBoolean cA = DERBoolean.FALSE;
- // END android-changed
+ ASN1Boolean cA = ASN1Boolean.getInstance(false);
ASN1Integer pathLenConstraint = null;
public static BasicConstraints getInstance(
@@ -44,7 +43,12 @@ public class BasicConstraints
return null;
}
-
+
+ public static BasicConstraints fromExtensions(Extensions extensions)
+ {
+ return BasicConstraints.getInstance(extensions.getExtensionParsedValue(Extension.basicConstraints));
+ }
+
private BasicConstraints(
ASN1Sequence seq)
{
@@ -83,9 +87,7 @@ public class BasicConstraints
{
if (cA)
{
- // BEGIN android-changed
- this.cA = DERBoolean.TRUE;
- // END android-changed
+ this.cA = ASN1Boolean.getInstance(true);
}
else
{
@@ -102,9 +104,7 @@ public class BasicConstraints
public BasicConstraints(
int pathLenConstraint)
{
- // BEGIN android-changed
- this.cA = DERBoolean.TRUE;
- // END android-changed
+ this.cA = ASN1Boolean.getInstance(true);
this.pathLenConstraint = new ASN1Integer(pathLenConstraint);
}
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/x509/CRLReason.java b/bcprov/src/main/java/org/bouncycastle/asn1/x509/CRLReason.java
index 621b5c86..ecc68721 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/x509/CRLReason.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/x509/CRLReason.java
@@ -6,6 +6,7 @@ import java.util.Hashtable;
import org.bouncycastle.asn1.ASN1Enumerated;
import org.bouncycastle.asn1.ASN1Object;
import org.bouncycastle.asn1.ASN1Primitive;
+import org.bouncycastle.util.Integers;
/**
* The CRLReason enumeration.
@@ -138,9 +139,7 @@ public class CRLReason
public static CRLReason lookup(int value)
{
- // BEGIN android-changed
- Integer idx = Integer.valueOf(value);
- // END android-changed
+ Integer idx = Integers.valueOf(value);
if (!table.containsKey(idx))
{
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/x509/DSAParameter.java b/bcprov/src/main/java/org/bouncycastle/asn1/x509/DSAParameter.java
index 853bd35e..056798ca 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/x509/DSAParameter.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/x509/DSAParameter.java
@@ -26,17 +26,17 @@ public class DSAParameter
public static DSAParameter getInstance(
Object obj)
{
- if(obj == null || obj instanceof DSAParameter)
+ if (obj instanceof DSAParameter)
{
return (DSAParameter)obj;
}
- if(obj instanceof ASN1Sequence)
+ if(obj != null)
{
- return new DSAParameter((ASN1Sequence)obj);
+ return new DSAParameter(ASN1Sequence.getInstance(obj));
}
- throw new IllegalArgumentException("Invalid DSAParameter: " + obj.getClass().getName());
+ return null;
}
public DSAParameter(
@@ -49,7 +49,7 @@ public class DSAParameter
this.g = new ASN1Integer(g);
}
- public DSAParameter(
+ private DSAParameter(
ASN1Sequence seq)
{
if (seq.size() != 3)
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/x509/ExtendedKeyUsage.java b/bcprov/src/main/java/org/bouncycastle/asn1/x509/ExtendedKeyUsage.java
index 97f1c544..dcc1b1fa 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/x509/ExtendedKeyUsage.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/x509/ExtendedKeyUsage.java
@@ -4,6 +4,7 @@ import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Vector;
+import org.bouncycastle.asn1.ASN1Encodable;
import org.bouncycastle.asn1.ASN1EncodableVector;
import org.bouncycastle.asn1.ASN1Object;
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
@@ -38,8 +39,7 @@ public class ExtendedKeyUsage
{
return (ExtendedKeyUsage)obj;
}
-
- if (obj != null)
+ else if (obj != null)
{
return new ExtendedKeyUsage(ASN1Sequence.getInstance(obj));
}
@@ -47,6 +47,11 @@ public class ExtendedKeyUsage
return null;
}
+ public static ExtendedKeyUsage fromExtensions(Extensions extensions)
+ {
+ return ExtendedKeyUsage.getInstance(extensions.getExtensionParsedValue(Extension.extendedKeyUsage));
+ }
+
public ExtendedKeyUsage(
KeyPurposeId usage)
{
@@ -55,7 +60,7 @@ public class ExtendedKeyUsage
this.usageTable.put(usage, usage);
}
- public ExtendedKeyUsage(
+ private ExtendedKeyUsage(
ASN1Sequence seq)
{
this.seq = seq;
@@ -64,8 +69,8 @@ public class ExtendedKeyUsage
while (e.hasMoreElements())
{
- Object o = e.nextElement();
- if (!(o instanceof ASN1ObjectIdentifier))
+ ASN1Encodable o = (ASN1Encodable)e.nextElement();
+ if (!(o.toASN1Primitive() instanceof ASN1ObjectIdentifier))
{
throw new IllegalArgumentException("Only ASN1ObjectIdentifiers allowed in ExtendedKeyUsage.");
}
@@ -74,7 +79,24 @@ public class ExtendedKeyUsage
}
public ExtendedKeyUsage(
- Vector usages)
+ KeyPurposeId[] usages)
+ {
+ ASN1EncodableVector v = new ASN1EncodableVector();
+
+ for (int i = 0; i != usages.length; i++)
+ {
+ v.add(usages[i]);
+ this.usageTable.put(usages[i], usages[i]);
+ }
+
+ this.seq = new DERSequence(v);
+ }
+
+ /**
+ * @deprecated use KeyPurposeId[] constructor.
+ */
+ public ExtendedKeyUsage(
+ Vector usages)
{
ASN1EncodableVector v = new ASN1EncodableVector();
Enumeration e = usages.elements();
@@ -98,15 +120,17 @@ public class ExtendedKeyUsage
/**
* Returns all extended key usages.
- * The returned vector contains ASN1ObjectIdentifiers.
- * @return A vector with all key purposes.
+ * The returned vector contains DERObjectIdentifiers.
+ * @return An array with all key purposes.
*/
- public Vector getUsages()
+ public KeyPurposeId[] getUsages()
{
- Vector temp = new Vector();
- for (Enumeration it = usageTable.elements(); it.hasMoreElements();)
+ KeyPurposeId[] temp = new KeyPurposeId[seq.size()];
+
+ int i = 0;
+ for (Enumeration it = seq.getObjects(); it.hasMoreElements();)
{
- temp.addElement(it.nextElement());
+ temp[i++] = KeyPurposeId.getInstance(it.nextElement());
}
return temp;
}
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/x509/Extensions.java b/bcprov/src/main/java/org/bouncycastle/asn1/x509/Extensions.java
index 1b933057..33175dbc 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/x509/Extensions.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/x509/Extensions.java
@@ -5,6 +5,7 @@ import java.util.Hashtable;
import java.util.Vector;
import org.bouncycastle.asn1.ASN1Boolean;
+import org.bouncycastle.asn1.ASN1Encodable;
import org.bouncycastle.asn1.ASN1EncodableVector;
import org.bouncycastle.asn1.ASN1Object;
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
@@ -75,6 +76,18 @@ public class Extensions
/**
* Base Constructor
+ *
+ * @param extension a single extension.
+ */
+ public Extensions(
+ Extension extension)
+ {
+ this.ordering.addElement(extension.getExtnId());
+ this.extensions.put(extension.getExtnId(), extension);
+ }
+
+ /**
+ * Base Constructor
*
* @param extensions an array of extensions.
*/
@@ -111,6 +124,24 @@ public class Extensions
}
/**
+ * return the parsed value of the extension represented by the object identifier
+ * passed in.
+ *
+ * @return the parsed value of the extension if it's present, null otherwise.
+ */
+ public ASN1Encodable getExtensionParsedValue(ASN1ObjectIdentifier oid)
+ {
+ Extension ext = this.getExtension(oid);
+
+ if (ext != null)
+ {
+ return ext.getParsedValue();
+ }
+
+ return null;
+ }
+
+ /**
* <pre>
* Extensions ::= SEQUENCE SIZE (1..MAX) OF Extension
*
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/x509/GeneralNames.java b/bcprov/src/main/java/org/bouncycastle/asn1/x509/GeneralNames.java
index bd45407f..7118d107 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/x509/GeneralNames.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/x509/GeneralNames.java
@@ -1,6 +1,7 @@
package org.bouncycastle.asn1.x509;
import org.bouncycastle.asn1.ASN1Object;
+import org.bouncycastle.asn1.ASN1ObjectIdentifier;
import org.bouncycastle.asn1.ASN1Primitive;
import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.asn1.ASN1TaggedObject;
@@ -34,6 +35,11 @@ public class GeneralNames
return getInstance(ASN1Sequence.getInstance(obj, explicit));
}
+ public static GeneralNames fromExtensions(Extensions extensions, ASN1ObjectIdentifier extOID)
+ {
+ return GeneralNames.getInstance(extensions.getExtensionParsedValue(extOID));
+ }
+
/**
* Construct a GeneralNames object containing one GeneralName.
*
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/x509/IssuerSerial.java b/bcprov/src/main/java/org/bouncycastle/asn1/x509/IssuerSerial.java
index d082a9d2..8d3036b2 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/x509/IssuerSerial.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/x509/IssuerSerial.java
@@ -1,5 +1,7 @@
package org.bouncycastle.asn1.x509;
+import java.math.BigInteger;
+
import org.bouncycastle.asn1.ASN1EncodableVector;
import org.bouncycastle.asn1.ASN1Integer;
import org.bouncycastle.asn1.ASN1Object;
@@ -19,17 +21,17 @@ public class IssuerSerial
public static IssuerSerial getInstance(
Object obj)
{
- if (obj == null || obj instanceof IssuerSerial)
+ if (obj instanceof IssuerSerial)
{
return (IssuerSerial)obj;
}
- if (obj instanceof ASN1Sequence)
+ if (obj != null)
{
- return new IssuerSerial((ASN1Sequence)obj);
+ return new IssuerSerial(ASN1Sequence.getInstance(obj));
}
- throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
+ return null;
}
public static IssuerSerial getInstance(
@@ -39,7 +41,7 @@ public class IssuerSerial
return getInstance(ASN1Sequence.getInstance(obj, explicit));
}
- public IssuerSerial(
+ private IssuerSerial(
ASN1Sequence seq)
{
if (seq.size() != 2 && seq.size() != 3)
@@ -55,7 +57,14 @@ public class IssuerSerial
issuerUID = DERBitString.getInstance(seq.getObjectAt(2));
}
}
-
+
+ public IssuerSerial(
+ GeneralNames issuer,
+ BigInteger serial)
+ {
+ this(issuer, new ASN1Integer(serial));
+ }
+
public IssuerSerial(
GeneralNames issuer,
ASN1Integer serial)
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/x509/IssuingDistributionPoint.java b/bcprov/src/main/java/org/bouncycastle/asn1/x509/IssuingDistributionPoint.java
index e31471c2..1f29162b 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/x509/IssuingDistributionPoint.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/x509/IssuingDistributionPoint.java
@@ -1,11 +1,11 @@
package org.bouncycastle.asn1.x509;
+import org.bouncycastle.asn1.ASN1Boolean;
import org.bouncycastle.asn1.ASN1EncodableVector;
import org.bouncycastle.asn1.ASN1Object;
import org.bouncycastle.asn1.ASN1Primitive;
import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.asn1.ASN1TaggedObject;
-import org.bouncycastle.asn1.DERBoolean;
import org.bouncycastle.asn1.DERSequence;
import org.bouncycastle.asn1.DERTaggedObject;
@@ -96,15 +96,11 @@ public class IssuingDistributionPoint
}
if (onlyContainsUserCerts)
{
- // BEGIN android-changed
- vec.add(new DERTaggedObject(false, 1, DERBoolean.TRUE));
- // END android-changed
+ vec.add(new DERTaggedObject(false, 1, ASN1Boolean.getInstance(true)));
}
if (onlyContainsCACerts)
{
- // BEGIN android-changed
- vec.add(new DERTaggedObject(false, 2, DERBoolean.TRUE));
- // END android-changed
+ vec.add(new DERTaggedObject(false, 2, ASN1Boolean.getInstance(true)));
}
if (onlySomeReasons != null)
{
@@ -112,15 +108,11 @@ public class IssuingDistributionPoint
}
if (indirectCRL)
{
- // BEGIN android-changed
- vec.add(new DERTaggedObject(false, 4, DERBoolean.TRUE));
- // END android-changed
+ vec.add(new DERTaggedObject(false, 4, ASN1Boolean.getInstance(true)));
}
if (onlyContainsAttributeCerts)
{
- // BEGIN android-changed
- vec.add(new DERTaggedObject(false, 5, DERBoolean.TRUE));
- // END android-changed
+ vec.add(new DERTaggedObject(false, 5, ASN1Boolean.getInstance(true)));
}
seq = new DERSequence(vec);
@@ -163,19 +155,19 @@ public class IssuingDistributionPoint
distributionPoint = DistributionPointName.getInstance(o, true);
break;
case 1:
- onlyContainsUserCerts = DERBoolean.getInstance(o, false).isTrue();
+ onlyContainsUserCerts = ASN1Boolean.getInstance(o, false).isTrue();
break;
case 2:
- onlyContainsCACerts = DERBoolean.getInstance(o, false).isTrue();
+ onlyContainsCACerts = ASN1Boolean.getInstance(o, false).isTrue();
break;
case 3:
onlySomeReasons = new ReasonFlags(ReasonFlags.getInstance(o, false));
break;
case 4:
- indirectCRL = DERBoolean.getInstance(o, false).isTrue();
+ indirectCRL = ASN1Boolean.getInstance(o, false).isTrue();
break;
case 5:
- onlyContainsAttributeCerts = DERBoolean.getInstance(o, false).isTrue();
+ onlyContainsAttributeCerts = ASN1Boolean.getInstance(o, false).isTrue();
break;
default:
throw new IllegalArgumentException(
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/x509/KeyPurposeId.java b/bcprov/src/main/java/org/bouncycastle/asn1/x509/KeyPurposeId.java
index 542a26bf..3955fb7e 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/x509/KeyPurposeId.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/x509/KeyPurposeId.java
@@ -1,6 +1,8 @@
package org.bouncycastle.asn1.x509;
+import org.bouncycastle.asn1.ASN1Object;
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
+import org.bouncycastle.asn1.ASN1Primitive;
/**
* The KeyPurposeId object.
@@ -13,101 +15,91 @@ import org.bouncycastle.asn1.ASN1ObjectIdentifier;
* </pre>
*/
public class KeyPurposeId
- extends ASN1ObjectIdentifier
+ extends ASN1Object
{
- private static final String id_kp = "1.3.6.1.5.5.7.3";
-
- /**
- * Create a KeyPurposeId from an OID string
- *
- * @param id OID String. E.g. "1.3.6.1.5.5.7.3.1"
- */
- public KeyPurposeId(
- String id)
- {
- super(id);
- }
+ private static final ASN1ObjectIdentifier id_kp = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.3");
/**
* { 2 5 29 37 0 }
*/
- public static final KeyPurposeId anyExtendedKeyUsage = new KeyPurposeId(X509Extensions.ExtendedKeyUsage.getId() + ".0");
+ public static final KeyPurposeId anyExtendedKeyUsage = new KeyPurposeId(Extension.extendedKeyUsage.branch("0"));
+
/**
* { id-kp 1 }
*/
- public static final KeyPurposeId id_kp_serverAuth = new KeyPurposeId(id_kp + ".1");
+ public static final KeyPurposeId id_kp_serverAuth = new KeyPurposeId(id_kp.branch("1"));
/**
* { id-kp 2 }
*/
- public static final KeyPurposeId id_kp_clientAuth = new KeyPurposeId(id_kp + ".2");
+ public static final KeyPurposeId id_kp_clientAuth = new KeyPurposeId(id_kp.branch("2"));
/**
* { id-kp 3 }
*/
- public static final KeyPurposeId id_kp_codeSigning = new KeyPurposeId(id_kp + ".3");
+ public static final KeyPurposeId id_kp_codeSigning = new KeyPurposeId(id_kp.branch("3"));
/**
* { id-kp 4 }
*/
- public static final KeyPurposeId id_kp_emailProtection = new KeyPurposeId(id_kp + ".4");
+ public static final KeyPurposeId id_kp_emailProtection = new KeyPurposeId(id_kp.branch("4"));
/**
* Usage deprecated by RFC4945 - was { id-kp 5 }
*/
- public static final KeyPurposeId id_kp_ipsecEndSystem = new KeyPurposeId(id_kp + ".5");
+ public static final KeyPurposeId id_kp_ipsecEndSystem = new KeyPurposeId(id_kp.branch("5"));
/**
* Usage deprecated by RFC4945 - was { id-kp 6 }
*/
- public static final KeyPurposeId id_kp_ipsecTunnel = new KeyPurposeId(id_kp + ".6");
+ public static final KeyPurposeId id_kp_ipsecTunnel = new KeyPurposeId(id_kp.branch("6"));
/**
* Usage deprecated by RFC4945 - was { idkp 7 }
*/
- public static final KeyPurposeId id_kp_ipsecUser = new KeyPurposeId(id_kp + ".7");
+ public static final KeyPurposeId id_kp_ipsecUser = new KeyPurposeId(id_kp.branch("7"));
/**
* { id-kp 8 }
*/
- public static final KeyPurposeId id_kp_timeStamping = new KeyPurposeId(id_kp + ".8");
+ public static final KeyPurposeId id_kp_timeStamping = new KeyPurposeId(id_kp.branch("8"));
/**
* { id-kp 9 }
*/
- public static final KeyPurposeId id_kp_OCSPSigning = new KeyPurposeId(id_kp + ".9");
+ public static final KeyPurposeId id_kp_OCSPSigning = new KeyPurposeId(id_kp.branch("9"));
/**
* { id-kp 10 }
*/
- public static final KeyPurposeId id_kp_dvcs = new KeyPurposeId(id_kp + ".10");
+ public static final KeyPurposeId id_kp_dvcs = new KeyPurposeId(id_kp.branch("10"));
/**
* { id-kp 11 }
*/
- public static final KeyPurposeId id_kp_sbgpCertAAServerAuth = new KeyPurposeId(id_kp + ".11");
+ public static final KeyPurposeId id_kp_sbgpCertAAServerAuth = new KeyPurposeId(id_kp.branch("11"));
/**
* { id-kp 12 }
*/
- public static final KeyPurposeId id_kp_scvp_responder = new KeyPurposeId(id_kp + ".12");
+ public static final KeyPurposeId id_kp_scvp_responder = new KeyPurposeId(id_kp.branch("12"));
/**
* { id-kp 13 }
*/
- public static final KeyPurposeId id_kp_eapOverPPP = new KeyPurposeId(id_kp + ".13");
+ public static final KeyPurposeId id_kp_eapOverPPP = new KeyPurposeId(id_kp.branch("13"));
/**
* { id-kp 14 }
*/
- public static final KeyPurposeId id_kp_eapOverLAN = new KeyPurposeId(id_kp + ".14");
+ public static final KeyPurposeId id_kp_eapOverLAN = new KeyPurposeId(id_kp.branch("14"));
/**
* { id-kp 15 }
*/
- public static final KeyPurposeId id_kp_scvpServer = new KeyPurposeId(id_kp + ".15");
+ public static final KeyPurposeId id_kp_scvpServer = new KeyPurposeId(id_kp.branch("15"));
/**
* { id-kp 16 }
*/
- public static final KeyPurposeId id_kp_scvpClient = new KeyPurposeId(id_kp + ".16");
+ public static final KeyPurposeId id_kp_scvpClient = new KeyPurposeId(id_kp.branch("16"));
/**
* { id-kp 17 }
*/
- public static final KeyPurposeId id_kp_ipsecIKE = new KeyPurposeId(id_kp + ".17");
+ public static final KeyPurposeId id_kp_ipsecIKE = new KeyPurposeId(id_kp.branch("17"));
/**
* { id-kp 18 }
*/
- public static final KeyPurposeId id_kp_capwapAC = new KeyPurposeId(id_kp + ".18");
+ public static final KeyPurposeId id_kp_capwapAC = new KeyPurposeId(id_kp.branch("18"));
/**
* { id-kp 19 }
*/
- public static final KeyPurposeId id_kp_capwapWTP = new KeyPurposeId(id_kp + ".19");
+ public static final KeyPurposeId id_kp_capwapWTP = new KeyPurposeId(id_kp.branch("19"));
//
// microsoft key purpose ids
@@ -115,5 +107,45 @@ public class KeyPurposeId
/**
* { 1 3 6 1 4 1 311 20 2 2 }
*/
- public static final KeyPurposeId id_kp_smartcardlogon = new KeyPurposeId("1.3.6.1.4.1.311.20.2.2");
+ public static final KeyPurposeId id_kp_smartcardlogon = new KeyPurposeId(new ASN1ObjectIdentifier("1.3.6.1.4.1.311.20.2.2"));
+
+ private ASN1ObjectIdentifier id;
+
+ private KeyPurposeId(ASN1ObjectIdentifier id)
+ {
+ this.id = id;
+ }
+
+ /**
+ * @deprecated use getInstance and an OID or one of the constants above.
+ * @param id string representation of an OID.
+ */
+ public KeyPurposeId(String id)
+ {
+ this(new ASN1ObjectIdentifier(id));
+ }
+
+ public static KeyPurposeId getInstance(Object o)
+ {
+ if (o instanceof KeyPurposeId)
+ {
+ return (KeyPurposeId)o;
+ }
+ else if (o != null)
+ {
+ return new KeyPurposeId(ASN1ObjectIdentifier.getInstance(o));
+ }
+
+ return null;
+ }
+
+ public ASN1Primitive toASN1Primitive()
+ {
+ return id;
+ }
+
+ public String getId()
+ {
+ return id.getId();
+ }
}
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/x509/KeyUsage.java b/bcprov/src/main/java/org/bouncycastle/asn1/x509/KeyUsage.java
index 3ffd94b4..2943c0b6 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/x509/KeyUsage.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/x509/KeyUsage.java
@@ -1,5 +1,7 @@
package org.bouncycastle.asn1.x509;
+import org.bouncycastle.asn1.ASN1Object;
+import org.bouncycastle.asn1.ASN1Primitive;
import org.bouncycastle.asn1.DERBitString;
/**
@@ -20,7 +22,7 @@ import org.bouncycastle.asn1.DERBitString;
* </pre>
*/
public class KeyUsage
- extends DERBitString
+ extends ASN1Object
{
public static final int digitalSignature = (1 << 7);
public static final int nonRepudiation = (1 << 6);
@@ -32,21 +34,27 @@ public class KeyUsage
public static final int encipherOnly = (1 << 0);
public static final int decipherOnly = (1 << 15);
- public static DERBitString getInstance(Object obj) // needs to be DERBitString for other VMs
+ private DERBitString bitString;
+
+ public static KeyUsage getInstance(Object obj) // needs to be DERBitString for other VMs
{
if (obj instanceof KeyUsage)
{
return (KeyUsage)obj;
}
-
- if (obj instanceof X509Extension)
+ else if (obj != null)
{
- return new KeyUsage(DERBitString.getInstance(X509Extension.convertValueToObject((X509Extension)obj)));
+ return new KeyUsage(DERBitString.getInstance(obj));
}
- return new KeyUsage(DERBitString.getInstance(obj));
+ return null;
+ }
+
+ public static KeyUsage fromExtensions(Extensions extensions)
+ {
+ return KeyUsage.getInstance(extensions.getExtensionParsedValue(Extension.keyUsage));
}
-
+
/**
* Basic constructor.
*
@@ -57,21 +65,38 @@ public class KeyUsage
public KeyUsage(
int usage)
{
- super(getBytes(usage), getPadBits(usage));
+ this.bitString = new DERBitString(usage);
}
- public KeyUsage(
- DERBitString usage)
+ private KeyUsage(
+ DERBitString bitString)
{
- super(usage.getBytes(), usage.getPadBits());
+ this.bitString = bitString;
+ }
+
+ public byte[] getBytes()
+ {
+ return bitString.getBytes();
+ }
+
+ public int getPadBits()
+ {
+ return bitString.getPadBits();
}
public String toString()
{
+ byte[] data = bitString.getBytes();
+
if (data.length == 1)
{
return "KeyUsage: 0x" + Integer.toHexString(data[0] & 0xff);
}
return "KeyUsage: 0x" + Integer.toHexString((data[1] & 0xff) << 8 | (data[0] & 0xff));
}
+
+ public ASN1Primitive toASN1Primitive()
+ {
+ return bitString;
+ }
}
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/x509/NameConstraints.java b/bcprov/src/main/java/org/bouncycastle/asn1/x509/NameConstraints.java
index 02096f2d..0a923a85 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/x509/NameConstraints.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/x509/NameConstraints.java
@@ -1,7 +1,6 @@
package org.bouncycastle.asn1.x509;
import java.util.Enumeration;
-import java.util.Vector;
import org.bouncycastle.asn1.ASN1EncodableVector;
import org.bouncycastle.asn1.ASN1Object;
@@ -14,7 +13,7 @@ import org.bouncycastle.asn1.DERTaggedObject;
public class NameConstraints
extends ASN1Object
{
- private ASN1Sequence permitted, excluded;
+ private GeneralSubtree[] permitted, excluded;
public static NameConstraints getInstance(Object obj)
{
@@ -38,12 +37,12 @@ public class NameConstraints
ASN1TaggedObject o = ASN1TaggedObject.getInstance(e.nextElement());
switch (o.getTagNo())
{
- case 0:
- permitted = ASN1Sequence.getInstance(o, false);
- break;
- case 1:
- excluded = ASN1Sequence.getInstance(o, false);
- break;
+ case 0:
+ permitted = createArray(ASN1Sequence.getInstance(o, false));
+ break;
+ case 1:
+ excluded = createArray(ASN1Sequence.getInstance(o, false));
+ break;
}
}
}
@@ -52,7 +51,7 @@ public class NameConstraints
* Constructor from a given details.
*
* <p>
- * permitted and excluded are Vectors of GeneralSubtree objects.
+ * permitted and excluded are arrays of GeneralSubtree objects.
*
* @param permitted
* Permitted subtrees
@@ -60,37 +59,38 @@ public class NameConstraints
* Excludes subtrees
*/
public NameConstraints(
- Vector permitted,
- Vector excluded)
+ GeneralSubtree[] permitted,
+ GeneralSubtree[] excluded)
{
if (permitted != null)
{
- this.permitted = createSequence(permitted);
+ this.permitted = permitted;
}
+
if (excluded != null)
{
- this.excluded = createSequence(excluded);
+ this.excluded = excluded;
}
}
- private DERSequence createSequence(Vector subtree)
+ private GeneralSubtree[] createArray(ASN1Sequence subtree)
{
- ASN1EncodableVector vec = new ASN1EncodableVector();
- Enumeration e = subtree.elements();
- while (e.hasMoreElements())
+ GeneralSubtree[] ar = new GeneralSubtree[subtree.size()];
+
+ for (int i = 0; i != ar.length; i++)
{
- vec.add((GeneralSubtree)e.nextElement());
+ ar[i] = GeneralSubtree.getInstance(subtree.getObjectAt(i));
}
-
- return new DERSequence(vec);
+
+ return ar;
}
- public ASN1Sequence getPermittedSubtrees()
+ public GeneralSubtree[] getPermittedSubtrees()
{
return permitted;
}
- public ASN1Sequence getExcludedSubtrees()
+ public GeneralSubtree[] getExcludedSubtrees()
{
return excluded;
}
@@ -103,14 +103,14 @@ public class NameConstraints
{
ASN1EncodableVector v = new ASN1EncodableVector();
- if (permitted != null)
+ if (permitted != null)
{
- v.add(new DERTaggedObject(false, 0, permitted));
+ v.add(new DERTaggedObject(false, 0, new DERSequence(permitted)));
}
- if (excluded != null)
+ if (excluded != null)
{
- v.add(new DERTaggedObject(false, 1, excluded));
+ v.add(new DERTaggedObject(false, 1, new DERSequence(excluded)));
}
return new DERSequence(v);
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/x509/ObjectDigestInfo.java b/bcprov/src/main/java/org/bouncycastle/asn1/x509/ObjectDigestInfo.java
index 7a2d77e3..c4668b76 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/x509/ObjectDigestInfo.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/x509/ObjectDigestInfo.java
@@ -8,7 +8,6 @@ import org.bouncycastle.asn1.ASN1Primitive;
import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.asn1.ASN1TaggedObject;
import org.bouncycastle.asn1.DERBitString;
-import org.bouncycastle.asn1.DEREnumerated;
import org.bouncycastle.asn1.DERSequence;
/**
@@ -118,7 +117,7 @@ public class ObjectDigestInfo
+ seq.size());
}
- digestedObjectType = DEREnumerated.getInstance(seq.getObjectAt(0));
+ digestedObjectType = ASN1Enumerated.getInstance(seq.getObjectAt(0));
int offset = 0;
@@ -133,7 +132,7 @@ public class ObjectDigestInfo
objectDigest = DERBitString.getInstance(seq.getObjectAt(2 + offset));
}
- public DEREnumerated getDigestedObjectType()
+ public ASN1Enumerated getDigestedObjectType()
{
return digestedObjectType;
}
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/x509/SubjectKeyIdentifier.java b/bcprov/src/main/java/org/bouncycastle/asn1/x509/SubjectKeyIdentifier.java
index e56d89fc..1a9400dd 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/x509/SubjectKeyIdentifier.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/x509/SubjectKeyIdentifier.java
@@ -43,6 +43,11 @@ public class SubjectKeyIdentifier
return null;
}
+ public static SubjectKeyIdentifier fromExtensions(Extensions extensions)
+ {
+ return SubjectKeyIdentifier.getInstance(extensions.getExtensionParsedValue(Extension.subjectKeyIdentifier));
+ }
+
public SubjectKeyIdentifier(
byte[] keyid)
{
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/x509/SubjectPublicKeyInfo.java b/bcprov/src/main/java/org/bouncycastle/asn1/x509/SubjectPublicKeyInfo.java
index 660ca054..9e09cd72 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/x509/SubjectPublicKeyInfo.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/x509/SubjectPublicKeyInfo.java
@@ -50,6 +50,7 @@ public class SubjectPublicKeyInfo
public SubjectPublicKeyInfo(
AlgorithmIdentifier algId,
ASN1Encodable publicKey)
+ throws IOException
{
this.keyData = new DERBitString(publicKey);
this.algId = algId;
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/x509/V1TBSCertificateGenerator.java b/bcprov/src/main/java/org/bouncycastle/asn1/x509/V1TBSCertificateGenerator.java
index 437d6c0d..fe4cb5eb 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/x509/V1TBSCertificateGenerator.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/x509/V1TBSCertificateGenerator.java
@@ -2,9 +2,9 @@ package org.bouncycastle.asn1.x509;
import org.bouncycastle.asn1.ASN1EncodableVector;
import org.bouncycastle.asn1.ASN1Integer;
+import org.bouncycastle.asn1.ASN1UTCTime;
import org.bouncycastle.asn1.DERSequence;
import org.bouncycastle.asn1.DERTaggedObject;
-import org.bouncycastle.asn1.DERUTCTime;
import org.bouncycastle.asn1.x500.X500Name;
/**
@@ -71,7 +71,7 @@ public class V1TBSCertificateGenerator
}
public void setStartDate(
- DERUTCTime startDate)
+ ASN1UTCTime startDate)
{
this.startDate = new Time(startDate);
}
@@ -83,12 +83,12 @@ public class V1TBSCertificateGenerator
}
public void setEndDate(
- DERUTCTime endDate)
+ ASN1UTCTime endDate)
{
this.endDate = new Time(endDate);
}
- /**
+ /**
* @deprecated use X500Name method
*/
public void setSubject(
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/x509/X509Extensions.java b/bcprov/src/main/java/org/bouncycastle/asn1/x509/X509Extensions.java
index 5e9bb465..c72e3cc0 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/x509/X509Extensions.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/x509/X509Extensions.java
@@ -289,6 +289,7 @@ public class X509Extensions
* Constructor from a table of extensions with ordering.
* <p>
* It's is assumed the table contains OID/String pairs.
+ * @deprecated use Extensions
*/
public X509Extensions(
Vector ordering,
@@ -326,6 +327,7 @@ public class X509Extensions
*
* @param objectIDs a vector of the object identifiers.
* @param values a vector of the extension values.
+ * @deprecated use Extensions
*/
public X509Extensions(
Vector objectIDs,
@@ -408,9 +410,7 @@ public class X509Extensions
if (ext.isCritical())
{
- // BEGIN android-changed
v.add(DERBoolean.TRUE);
- // END android-changed
}
v.add(ext.getValue());
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/x509/X509Name.java b/bcprov/src/main/java/org/bouncycastle/asn1/x509/X509Name.java
index 2dc630f2..d1c7d8ee 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/x509/X509Name.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/x509/X509Name.java
@@ -706,9 +706,7 @@ public class X509Name
if (index == -1)
{
- // BEGIN android-changed
throw new IllegalArgumentException("badly formatted directory string");
- // END android-changed
}
String name = token.substring(0, index);
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/x509/X509NameTokenizer.java b/bcprov/src/main/java/org/bouncycastle/asn1/x509/X509NameTokenizer.java
index 32e93468..ceca1ec3 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/x509/X509NameTokenizer.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/x509/X509NameTokenizer.java
@@ -5,12 +5,13 @@ package org.bouncycastle.asn1.x509;
* java.util.StringTokenizer. We need this class as some of the
* lightweight Java environment don't support classes like
* StringTokenizer.
+ * @deprecated use X500NameTokenizer
*/
public class X509NameTokenizer
{
private String value;
private int index;
- private char seperator;
+ private char separator;
private StringBuffer buf = new StringBuffer();
public X509NameTokenizer(
@@ -21,11 +22,11 @@ public class X509NameTokenizer
public X509NameTokenizer(
String oid,
- char seperator)
+ char separator)
{
this.value = oid;
this.index = -1;
- this.seperator = seperator;
+ this.separator = separator;
}
public boolean hasMoreTokens()
@@ -58,17 +59,14 @@ public class X509NameTokenizer
}
else
{
- // BEGIN android-added
- // copied from a newer version of BouncyCastle
if (c == '#' && buf.charAt(buf.length() - 1) == '=')
{
buf.append('\\');
}
- else if (c == '+' && seperator != '+')
+ else if (c == '+' && separator != '+')
{
buf.append('\\');
}
- // END android-added
buf.append(c);
}
escaped = false;
@@ -81,7 +79,7 @@ public class X509NameTokenizer
{
buf.append('\\');
}
- else if (c == '+' && seperator != '+')
+ else if (c == '+' && separator != '+')
{
buf.append('\\');
}
@@ -92,12 +90,23 @@ public class X509NameTokenizer
{
escaped = true;
}
- else if (c == seperator)
+ else if (c == separator)
{
break;
}
else
{
+ // BEGIN android-added
+ // copied from a newer version of BouncyCastle
+ if (c == '#' && buf.charAt(buf.length() - 1) == '=')
+ {
+ buf.append('\\');
+ }
+ else if (c == '+' && separator != '+')
+ {
+ buf.append('\\');
+ }
+ // END android-added
buf.append(c);
}
}
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/x9/X962NamedCurves.java b/bcprov/src/main/java/org/bouncycastle/asn1/x9/X962NamedCurves.java
index 06e47b6e..764017e7 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/x9/X962NamedCurves.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/x9/X962NamedCurves.java
@@ -170,7 +170,7 @@ public class X962NamedCurves
c2m163v1.decodePoint(
Hex.decode("0307AF69989546103D79329FCC3D74880F33BBE803CB")),
c2m163v1n, c2m163v1h,
- Hex.decode("D2COFB15760860DEF1EEF4D696E6768756151754"));
+ Hex.decode("D2C0FB15760860DEF1EEF4D696E6768756151754"));
}
};