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 2006/04/21 13:23:48 UTC

svn commit: r395856 - in /incubator/harmony/enhanced/classlib/trunk/modules/security/src: main/java/common/java/security/cert/X509Certificate.java test/java/common/java/security/cert/X509CertificateTest.java

Author: smishura
Date: Fri Apr 21 04:23:47 2006
New Revision: 395856

URL: http://svn.apache.org/viewcvs?rev=395856&view=rev
Log:
Fixing default implementation of java.security.cert.X509Certificate + modifying regression test.

Modified:
    incubator/harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/java/security/cert/X509Certificate.java
    incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common/java/security/cert/X509CertificateTest.java

Modified: incubator/harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/java/security/cert/X509Certificate.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/java/security/cert/X509Certificate.java?rev=395856&r1=395855&r2=395856&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/java/security/cert/X509Certificate.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/java/security/cert/X509Certificate.java Fri Apr 21 04:23:47 2006
@@ -21,17 +21,13 @@
 
 package java.security.cert;
 
+import java.io.ByteArrayInputStream;
 import java.math.BigInteger;
 import java.security.Principal;
-import java.security.cert.Certificate;
-import java.security.cert.CertificateEncodingException;
-import java.security.cert.CertificateExpiredException;
-import java.security.cert.CertificateNotYetValidException;
-import java.security.cert.CertificateParsingException;
-import java.security.cert.X509Extension;
 import java.util.Collection;
 import java.util.Date;
 import java.util.List;
+
 import javax.security.auth.x500.X500Principal;
 
 /**
@@ -78,7 +74,21 @@
      * @com.intel.drl.spec_ref
      */
     public X500Principal getIssuerX500Principal() {
-        throw new RuntimeException("Method should be overriden.");
+
+        try {
+            // TODO if there is no X.509 certificate provider installed
+            // should we try to access Harmony X509CertImpl via classForName?
+            CertificateFactory factory = CertificateFactory
+                    .getInstance("X.509");
+
+            X509Certificate cert = (X509Certificate) factory
+                    .generateCertificate(new ByteArrayInputStream(getEncoded()));
+
+            return cert.getIssuerX500Principal();
+
+        } catch (Exception e) {
+            throw new RuntimeException("Failed to get X500Principal issuer", e);
+        }
     }
 
     /**
@@ -90,7 +100,21 @@
      * @com.intel.drl.spec_ref
      */
     public X500Principal getSubjectX500Principal() {
-        throw new RuntimeException("Method should be overriden.");
+
+        try {
+            // TODO if there is no X.509 certificate provider installed
+            // should we try to access Harmony X509CertImpl via classForName?
+            CertificateFactory factory = CertificateFactory
+                    .getInstance("X.509");
+
+            X509Certificate cert = (X509Certificate) factory
+                    .generateCertificate(new ByteArrayInputStream(getEncoded()));
+
+            return cert.getSubjectX500Principal();
+
+        } catch (Exception e) {
+            throw new RuntimeException("Failed to get X500Principal subject", e);
+        }
     }
 
     /**

Modified: incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common/java/security/cert/X509CertificateTest.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common/java/security/cert/X509CertificateTest.java?rev=395856&r1=395855&r2=395856&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common/java/security/cert/X509CertificateTest.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common/java/security/cert/X509CertificateTest.java Fri Apr 21 04:23:47 2006
@@ -28,14 +28,11 @@
 import java.security.Principal;
 import java.security.PublicKey;
 import java.security.SignatureException;
-import java.security.cert.CertificateEncodingException;
-import java.security.cert.CertificateException;
-import java.security.cert.CertificateExpiredException;
-import java.security.cert.CertificateNotYetValidException;
-import java.security.cert.X509Certificate;
 import java.util.Date;
 import java.util.Set;
 
+import javax.security.auth.x500.X500Principal;
+
 import junit.framework.Test;
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
@@ -45,6 +42,72 @@
  */
 public class X509CertificateTest extends TestCase {
 
+    // certificate encoding was created by hands
+    // according to X.509 Certificate ASN.1 notation
+    private static final byte[] x509CertEnc = new byte[] {
+    // Certificate: SEQUENCE
+            0x30, 0x6B,
+
+            //
+            // TBSCertificate: SEQUENCE {
+            //
+            0x30, 0x5C,
+
+            // version: [0] EXPLICIT Version DEFAULT v1
+            (byte) 0xA0, 0x03, 0x02, 0x01, 0x00,
+
+            // 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 - missed
+
+            // } end TBSCertificate
+
+            //
+            // signatureAlgorithm: AlgorithmIdentifier
+            //
+            0x30, 0x07, // SEQUENCE
+            0x06, 0x02, 0x03, 0x05,//OID
+            0x01, 0x01, 0x07, //ANY
+
+            //
+            // signature: BIT STRING  
+            //
+            0x03, 0x02, 0x00, 0x01 };
+
     // has stub implementation for abstract methods
     private static class MyX509Certificate extends X509Certificate {
 
@@ -171,27 +234,31 @@
     }
 
     /**
-     * getIssuerX500Principal() method testing.
+     * @tests java.security.cert.X509Certificate#getIssuerX500Principal()
      */
     public void testGetIssuerX500Principal() {
-        try {
-            new MyX509Certificate().getIssuerX500Principal();
-            fail("Runtime exception should be thrown "
-                        + "in default implementation");
-        } catch (RuntimeException e) {
-        }
+        // return valid encoding
+        MyX509Certificate cert = new MyX509Certificate() {
+            public byte[] getEncoded() {
+                return x509CertEnc;
+            };
+        };
+
+        assertEquals(new X500Principal("CN=Z"), cert.getIssuerX500Principal());
     }
 
     /**
-     * getSubjectX500Principal() method testing.
+     * @tests java.security.cert.X509Certificate#getSubjectX500Principal()
      */
     public void testGetSubjectX500Principal() {
-        try {
-            new MyX509Certificate().getSubjectX500Principal();
-            fail("Runtime exception should be thrown "
-                        + "in default implementation");
-        } catch (RuntimeException e) {
-        }
+        // return valid encoding
+        MyX509Certificate cert = new MyX509Certificate() {
+            public byte[] getEncoded() {
+                return x509CertEnc;
+            };
+        };
+
+        assertEquals(new X500Principal("CN=Y"), cert.getSubjectX500Principal());
     }
 
     /**