You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by sm...@apache.org on 2007/03/22 04:09:58 UTC
svn commit: r521100 - in
/harmony/enhanced/classlib/trunk/modules/security/src:
main/java/common/org/apache/harmony/security/x509/
test/api/java/org/apache/harmony/security/tests/java/security/cert/
test/support/common/java/org/apache/harmony/security/...
Author: smishura
Date: Wed Mar 21 20:09:57 2007
New Revision: 521100
URL: http://svn.apache.org/viewvc?view=rev&rev=521100
Log:
Fix and regression test for HARMONY-3384:
([classlib][security]java.security.cert.X509Certificate.toString() throws NullPointerException)
Modified:
harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/AuthorityKeyIdentifier.java
harmony/enhanced/classlib/trunk/modules/security/src/test/api/java/org/apache/harmony/security/tests/java/security/cert/X509Certificate2Test.java
harmony/enhanced/classlib/trunk/modules/security/src/test/support/common/java/org/apache/harmony/security/tests/support/cert/TestUtils.java
Modified: harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/AuthorityKeyIdentifier.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/AuthorityKeyIdentifier.java?view=diff&rev=521100&r1=521099&r2=521100
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/AuthorityKeyIdentifier.java (original)
+++ harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/AuthorityKeyIdentifier.java Wed Mar 21 20:09:57 2007
@@ -118,8 +118,14 @@
protected Object getDecodedObject(BerInputStream in) throws IOException {
Object[] values = (Object[]) in.content;
+ byte[] enc = (byte[]) values[2];
+ BigInteger authorityCertSerialNumber = null;
+ if (enc != null) {
+ authorityCertSerialNumber = new BigInteger(enc);
+ }
+
return new AuthorityKeyIdentifier((byte[]) values[0],
- (GeneralNames) values[1], new BigInteger((byte[]) values[2]));
+ (GeneralNames) values[1], authorityCertSerialNumber);
}
protected void getValues(Object object, Object[] values) {
@@ -128,7 +134,9 @@
values[0] = akid.keyIdentifier;
values[1] = akid.authorityCertIssuer;
- values[2] = akid.authorityCertSerialNumber.toByteArray();
+ if (akid.authorityCertSerialNumber != null) {
+ values[2] = akid.authorityCertSerialNumber.toByteArray();
+ }
}
};
}
Modified: harmony/enhanced/classlib/trunk/modules/security/src/test/api/java/org/apache/harmony/security/tests/java/security/cert/X509Certificate2Test.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/security/src/test/api/java/org/apache/harmony/security/tests/java/security/cert/X509Certificate2Test.java?view=diff&rev=521100&r1=521099&r2=521100
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/security/src/test/api/java/org/apache/harmony/security/tests/java/security/cert/X509Certificate2Test.java (original)
+++ harmony/enhanced/classlib/trunk/modules/security/src/test/api/java/org/apache/harmony/security/tests/java/security/cert/X509Certificate2Test.java Wed Mar 21 20:09:57 2007
@@ -17,15 +17,18 @@
package org.apache.harmony.security.tests.java.security.cert;
+import java.io.ByteArrayInputStream;
import java.io.InputStream;
+import java.io.ObjectInputStream;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
+import java.util.Arrays;
import java.util.Iterator;
import java.util.Vector;
-import tests.support.resource.Support_Resources;
+import org.apache.harmony.security.tests.support.cert.TestUtils;
-import junit.framework.TestCase;
+import tests.support.resource.Support_Resources;
public class X509Certificate2Test extends junit.framework.TestCase {
private X509Certificate pemCert = null;
@@ -62,4 +65,23 @@
fail("Unable to obtain X509Certificate");
}
}
-}
\ No newline at end of file
+
+ /**
+ * Test for X.509 Certificate provider
+ */
+ public void test_toString() throws Exception {
+
+ // Regression for HARMONY-3384
+ CertificateFactory certFact = CertificateFactory.getInstance("X509");
+ pemCert = (X509Certificate) certFact
+ .generateCertificate(new ByteArrayInputStream(TestUtils
+ .getX509Certificate_v3()));
+
+ // extension value is empty sequence
+ byte[] extnValue = pemCert.getExtensionValue("2.5.29.35");
+ assertTrue(Arrays.equals(new byte[] { 0x04, 0x02, 0x30, 0x00 },
+ extnValue));
+ assertNotNull(pemCert.toString());
+ // End regression for HARMONY-3384
+ }
+}
Modified: harmony/enhanced/classlib/trunk/modules/security/src/test/support/common/java/org/apache/harmony/security/tests/support/cert/TestUtils.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/security/src/test/support/common/java/org/apache/harmony/security/tests/support/cert/TestUtils.java?view=diff&rev=521100&r1=521099&r2=521100
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/security/src/test/support/common/java/org/apache/harmony/security/tests/support/cert/TestUtils.java (original)
+++ harmony/enhanced/classlib/trunk/modules/security/src/test/support/common/java/org/apache/harmony/security/tests/support/cert/TestUtils.java Wed Mar 21 20:09:57 2007
@@ -387,7 +387,105 @@
//
0x03, 0x02, 0x00, 0x01 };
}
-
+
+ /**
+ * Returns X.509 certificate encoding corresponding to version v3.
+ *
+ * Certificate encoding was created by hands according to X.509 Certificate
+ * ASN.1 notation. The certificate encoding has the following encoded
+ * field values:<br>
+ * - version: 3<br>
+ * - serialNumber: 5<br>
+ * - issuer: CN=Z<br>
+ * - notBefore: 13 Dec 1999 14:15:16<br>
+ * - notAfter: 01 Jan 2000 00:00:00<br>
+ * - subject: CN=Y<br>
+ * - extensions:
+ * 1) AuthorityKeyIdentifier(OID=2.5.29.35): no values in it(empty sequence)
+ *
+ * @return X.509 certificate encoding corresponding to version v3.
+ */
+ public static byte[] getX509Certificate_v3() {
+ return new byte[] {
+ // Certificate: SEQUENCE
+ 0x30, 0x7D,
+
+ //
+ // TBSCertificate: SEQUENCE {
+ //
+ 0x30, 0x6E,
+
+ // version: [0] EXPLICIT Version DEFAULT v1
+ (byte) 0xA0, 0x03, 0x02, 0x01, 0x02,
+
+ // serialNumber: CertificateSerialNumber
+ 0x02, 0x01, 0x05,
+
+ // signature: AlgorithmIdentifier
+ 0x30, 0x07, // SEQUENCE
+ 0x06, 0x02, 0x03, 0x05,//OID
+ 0x01, 0x01, 0x07, //ANY
+
+ //issuer: Name
+ 0x30, 0x0C, 0x31, 0x0A, 0x30, 0x08, 0x06, 0x03, 0x55, 0x04, 0x03,
+ 0x13, 0x01, 0x5A, // CN=Z
+
+ //validity: Validity
+ 0x30, 0x1E, // SEQUENCE
+ // notBefore: UTCTime
+ 0x17, 0x0D, 0x39, 0x39, 0x31, 0x32, 0x31, 0x33, 0x31, 0x34, 0x31,
+ 0x35, 0x31, 0x36, 0x5A, // 13 Dec 1999 14:15:16
+ // notAfter: UTCTime
+ 0x17, 0x0D, 0x30, 0x30, 0x30, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30,
+ 0x30, 0x30, 0x30, 0x5A, // 01 Jan 2000 00:00:00
+
+ //subject: Name
+ 0x30, 0x0C, 0x31, 0x0A, 0x30, 0x08, 0x06, 0x03, 0x55, 0x04, 0x03,
+ 0x13, 0x01, 0x59, // CN=Y
+ //SubjectPublicKeyInfo ::= SEQUENCE {
+ // algorithm AlgorithmIdentifier,
+ // subjectPublicKey BIT STRING }
+ 0x30, 0x0D, // SEQUENCE
+ 0x30, 0x07, // SEQUENCE
+ 0x06, 0x02, 0x03, 0x05,//OID
+ 0x01, 0x01, 0x07, //ANY
+ 0x03, 0x02, 0x00, 0x01, // subjectPublicKey
+
+ // issuerUniqueID - missed
+ // subjectUniqueID - missed
+ // extensions : [3] EXPLICIT Extensions OPTIONAL
+ (byte) 0xA3, 0x10,
+ // Extensions ::= SEQUENCE SIZE (1..MAX) OF Extension
+ 0x30, 0x0E,
+ // Extension ::= SEQUENCE {
+ // extnID OBJECT IDENTIFIER,
+ // critical BOOLEAN DEFAULT FALSE,
+ // extnValue OCTET STRING }
+
+ // 1) AuthorityKeyIdentifier extension (see HARMONY-3384)
+ 0x30, 0x0C,
+ 0x06, 0x03, 0x55, 0x1D, 0x23, // OID = 2.5.29.35
+ 0x01, 0x01, 0x00, // critical = FALSE
+ 0x04, 0x02, 0x30, 0x00, // extnValue: MUST be empty sequence
+ // missed: keyIdentifier
+ // missed: authorityCertIssuer
+ // missed" authorityCertSerialNumber
+
+ // } end TBSCertificate
+
+ //
+ // signatureAlgorithm: AlgorithmIdentifier
+ //
+ 0x30, 0x07, // SEQUENCE
+ 0x06, 0x02, 0x03, 0x05,//OID
+ 0x01, 0x01, 0x07, //ANY
+
+ //
+ // signature: BIT STRING
+ //
+ 0x03, 0x02, 0x00, 0x01 };
+ }
+
/**
* Returns X.509 CRL encoding corresponding to version v1.
*