src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509SKI.java

Print this page

        

@@ -1,33 +1,31 @@
 /*
  * reserved comment block
  * DO NOT REMOVE OR ALTER!
  */
-/*
- * Copyright  1999-2004 The Apache Software Foundation.
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
  *
  *      http://www.apache.org/licenses/LICENSE-2.0
  *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.sun.org.apache.xml.internal.security.keys.content.x509;
 
-import java.io.IOException;
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
 import java.security.cert.X509Certificate;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
+import java.util.Arrays;
 
 import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException;
 import com.sun.org.apache.xml.internal.security.utils.Base64;
 import com.sun.org.apache.xml.internal.security.utils.Constants;
 import com.sun.org.apache.xml.internal.security.utils.SignatureElementProxy;

@@ -35,27 +33,26 @@
 import org.w3c.dom.Element;
 
 /**
  * Handles SubjectKeyIdentifier (SKI) for X.509v3.
  *
- * @author $Author: mullan $
- * @see <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/security/cert/X509Extension.html">Interface X509Extension</A>
+ * @see <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/security/cert/X509Extension.html">
+ * Interface X509Extension</A>
  */
-public class XMLX509SKI extends SignatureElementProxy
-        implements XMLX509DataContent {
+public class XMLX509SKI extends SignatureElementProxy implements XMLX509DataContent {
 
-    /** {@link java.util.logging} logging facility */
-    static java.util.logging.Logger log =
+    /** {@link org.apache.commons.logging} logging facility */
+    private static java.util.logging.Logger log = 
         java.util.logging.Logger.getLogger(XMLX509SKI.class.getName());
 
     /**
      * <CODE>SubjectKeyIdentifier (id-ce-subjectKeyIdentifier) (2.5.29.14)</CODE>:
      * This extension identifies the public key being certified. It enables
      * distinct keys used by the same subject to be differentiated
      * (e.g., as key updating occurs).
      * <BR />
-     * A key identifer shall be unique with respect to all key identifiers
+     * A key identifier shall be unique with respect to all key identifiers
      * for the subject with which it is used. This extension is always non-critical.
      */
     public static final String SKI_OID = "2.5.29.14";
 
     /**

@@ -87,12 +84,11 @@
      *
      * @param element
      * @param BaseURI
      * @throws XMLSecurityException
      */
-    public XMLX509SKI(Element element, String BaseURI)
-           throws XMLSecurityException {
+    public XMLX509SKI(Element element, String BaseURI) throws XMLSecurityException {
         super(element, BaseURI);
     }
 
     /**
      * Method getSKIBytes

@@ -115,13 +111,12 @@
      */
     public static byte[] getSKIBytesFromCert(X509Certificate cert)
         throws XMLSecurityException {
 
         if (cert.getVersion() < 3) {
-            Object exArgs[] = { new Integer(cert.getVersion()) };
-            throw new XMLSecurityException("certificate.noSki.lowVersion",
-                                           exArgs);
+            Object exArgs[] = { Integer.valueOf(cert.getVersion()) };
+            throw new XMLSecurityException("certificate.noSki.lowVersion", exArgs);
         }
 
         /*
          * Gets the DER-encoded OCTET string for the extension value
          * (extnValue) identified by the passed-in oid String. The oid

@@ -135,11 +130,11 @@
 
         /**
          * Strip away first four bytes from the extensionValue
          * The first two bytes are the tag and length of the extensionValue
          * OCTET STRING, and the next two bytes are the tag and length of
-         * the skid OCTET STRING.
+         * the ski OCTET STRING.
          */
         byte skidValue[] = new byte[extensionValue.length - 4];
 
         System.arraycopy(extensionValue, 4, skidValue, 0, skidValue.length);
 

@@ -150,27 +145,39 @@
         return skidValue;
     }
 
     /** @inheritDoc */
     public boolean equals(Object obj) {
-        if (obj == null) {
-            return false;
-        }
-        if (!this.getClass().getName().equals(obj.getClass().getName())) {
+        if (!(obj instanceof XMLX509SKI)) {
             return false;
         }
 
         XMLX509SKI other = (XMLX509SKI) obj;
 
         try {
-            return java.security.MessageDigest.isEqual(other.getSKIBytes(),
-                                        this.getSKIBytes());
+            return Arrays.equals(other.getSKIBytes(), this.getSKIBytes());
         } catch (XMLSecurityException ex) {
             return false;
         }
     }
 
+    public int hashCode() {
+        int result = 17;
+        try {
+            byte[] bytes = getSKIBytes();
+            for (int i = 0; i < bytes.length; i++) {
+                result = 31 * result + bytes[i];
+            }
+        } catch (XMLSecurityException e) {
+            if (log.isLoggable(java.util.logging.Level.FINE)) {
+                log.log(java.util.logging.Level.FINE, e.getMessage(), e);
+            }
+        }
+        return result;
+
+    }
+
     /** @inheritDoc */
     public String getBaseLocalName() {
         return Constants._TAG_X509SKI;
     }
 }