Index: src/main/java/common/java/security/BasicPermission.java =================================================================== --- src/main/java/common/java/security/BasicPermission.java (revision 494820) +++ src/main/java/common/java/security/BasicPermission.java (working copy) @@ -140,7 +140,7 @@ * It is assumed that names cannot be null or empty. */ static boolean nameImplies(String thisName, String thatName) { - if (thisName == thatName) { + if (thisName.equals(thatName)) { return true; } int end = thisName.length(); Index: src/main/java/common/java/security/BasicPermissionCollection.java =================================================================== --- src/main/java/common/java/security/BasicPermissionCollection.java (revision 494820) +++ src/main/java/common/java/security/BasicPermissionCollection.java (working copy) @@ -79,7 +79,7 @@ permission)); } else { // this is the first element provided that another thread did not add - synchronized (items) { + synchronized (this) { if (permClass != null && inClass != permClass) { throw new IllegalArgumentException(Messages.getString("security.16", //$NON-NLS-1$ permission)); @@ -178,7 +178,7 @@ ObjectInputStream.GetField fields = in.readFields(); items = new HashMap(); - synchronized (items) { + synchronized (this) { permClass = (Class)fields.get("permClass", null); //$NON-NLS-1$ items.putAll((Hashtable) fields.get( "permissions", new Hashtable())); //$NON-NLS-1$ Index: src/main/java/common/java/security/KeyStore.java =================================================================== --- src/main/java/common/java/security/KeyStore.java (revision 494820) +++ src/main/java/common/java/security/KeyStore.java (working copy) @@ -742,7 +742,7 @@ * * @author Vera Petrashkova */ - private class TmpLSParameter implements LoadStoreParameter { + private static class TmpLSParameter implements LoadStoreParameter { // Store used protection parameter private final ProtectionParameter protPar; @@ -832,7 +832,9 @@ * */ public PasswordProtection(char[] password) { - this.password = password; + if(password != null) { + this.password = password.clone(); + } } /** @@ -935,7 +937,7 @@ * */ public Certificate[] getCertificateChain() { - return chain; + return chain.clone(); } /** Index: src/main/java/common/java/security/Provider.java =================================================================== --- src/main/java/common/java/security/Provider.java (revision 494820) +++ src/main/java/common/java/security/Provider.java (working copy) @@ -24,6 +24,7 @@ import java.io.IOException; import java.io.InputStream; +import java.io.NotActiveException; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -293,7 +294,6 @@ if (prop == null) { alg = getPropertyIgnoreCase("Alg.Alias." + servAlg); //$NON-NLS-1$ if (alg != null) { - servAlg = serv + "." + alg; //$NON-NLS-1$ prop = getPropertyIgnoreCase(serv + "." + alg); //$NON-NLS-1$ } } @@ -895,4 +895,10 @@ return result; } } + + private void readObject(java.io.ObjectInputStream in) throws NotActiveException, IOException, ClassNotFoundException { + in.defaultReadObject(); + versionString = String.valueOf(version); + providerNumber = -1; + } } Index: src/main/java/common/java/security/Timestamp.java =================================================================== --- src/main/java/common/java/security/Timestamp.java (revision 494820) +++ src/main/java/common/java/security/Timestamp.java (working copy) @@ -87,7 +87,7 @@ * @com.intel.drl.spec_ref */ public Date getTimestamp() { - return timestamp; + return (Date) timestamp.clone(); } /** Index: src/main/java/common/java/security/cert/CollectionCertStoreParameters.java =================================================================== --- src/main/java/common/java/security/cert/CollectionCertStoreParameters.java (revision 494820) +++ src/main/java/common/java/security/cert/CollectionCertStoreParameters.java (working copy) @@ -59,7 +59,11 @@ * @com.intel.drl.spec_ref */ public Object clone() { - return new CollectionCertStoreParameters(collection); + try { + return super.clone(); + } catch (CloneNotSupportedException e) { + return null; + } } /** Index: src/main/java/common/java/security/cert/LDAPCertStoreParameters.java =================================================================== --- src/main/java/common/java/security/cert/LDAPCertStoreParameters.java (revision 494820) +++ src/main/java/common/java/security/cert/LDAPCertStoreParameters.java (working copy) @@ -71,7 +71,11 @@ * @com.intel.drl.spec_ref */ public Object clone() { - return new LDAPCertStoreParameters(serverName, port); + try { + return super.clone(); + } catch (CloneNotSupportedException e) { + return null; + } } /** Index: src/main/java/common/java/security/cert/X509CRLSelector.java =================================================================== --- src/main/java/common/java/security/cert/X509CRLSelector.java (revision 494820) +++ src/main/java/common/java/security/cert/X509CRLSelector.java (working copy) @@ -337,14 +337,15 @@ * @com.intel.drl.spec_ref */ public Object clone() { - X509CRLSelector result = new X509CRLSelector(); - if (issuerNames != null) { - result.issuerNames = new ArrayList(issuerNames); - } - result.minCRL = minCRL; - result.maxCRL = maxCRL; - result.dateAndTime = dateAndTime; - result.certificateChecking = certificateChecking; + X509CRLSelector result; + try { + result = (X509CRLSelector) super.clone(); + if (issuerNames != null) { + result.issuerNames = new ArrayList(issuerNames); + } + } catch (CloneNotSupportedException e) { + result = null; + } return result; } } Index: src/main/java/common/java/security/cert/X509CertSelector.java =================================================================== --- src/main/java/common/java/security/cert/X509CertSelector.java (revision 494820) +++ src/main/java/common/java/security/cert/X509CertSelector.java (working copy) @@ -1052,11 +1052,12 @@ * @com.intel.drl.spec_ref */ public Object clone() { - X509CertSelector result = new X509CertSelector(); - result.certificateEquals = this.certificateEquals; - result.serialNumber = this.serialNumber; - result.issuer = this.issuer; - result.subject = this.subject; + X509CertSelector result; + try { + result = (X509CertSelector) super.clone(); + } catch (CloneNotSupportedException e) { + return null; + } if (this.subjectKeyIdentifier != null) { result.subjectKeyIdentifier = new byte[this.subjectKeyIdentifier.length]; @@ -1071,9 +1072,6 @@ result.authorityKeyIdentifier, 0, this.authorityKeyIdentifier.length); } - result.certificateValid = this.certificateValid; - result.subjectPublicKeyAlgID = this.subjectPublicKeyAlgID; - result.privateKeyValid = this.privateKeyValid; if (this.subjectPublicKey != null) { result.subjectPublicKey = new byte[this.subjectPublicKey.length]; System.arraycopy(this.subjectPublicKey, 0, result.subjectPublicKey, @@ -1087,8 +1085,6 @@ result.extendedKeyUsage = (this.extendedKeyUsage == null) ? null : new HashSet(this.extendedKeyUsage); - result.matchAllNames = this.matchAllNames; - result.pathLen = this.pathLen; if (this.subjectAltNames != null) { result.subjectAltNames = new ArrayList[9]; for (int i=0; i<9; i++) { @@ -1098,7 +1094,6 @@ } } } - result.nameConstraints = this.nameConstraints; result.policies = (this.policies == null) ? null : new HashSet(this.policies); @@ -1105,8 +1100,6 @@ result.pathToNames = (this.pathToNames == null) ? null : new ArrayList(this.pathToNames); - result.subjectPublicKeyImpl = this.subjectPublicKeyImpl; - return result; } } Index: src/main/java/common/org/apache/harmony/security/asn1/InformationObjectSet.java =================================================================== --- src/main/java/common/org/apache/harmony/security/asn1/InformationObjectSet.java (revision 494820) +++ src/main/java/common/org/apache/harmony/security/asn1/InformationObjectSet.java (working copy) @@ -95,7 +95,7 @@ return intHash & 0x7FFFFFFF; // only positive } - private class Entry { + private static class Entry { public int[] oid; public Object object; Index: src/main/java/common/org/apache/harmony/security/fortress/DefaultPolicy.java =================================================================== --- src/main/java/common/org/apache/harmony/security/fortress/DefaultPolicy.java (revision 494820) +++ src/main/java/common/org/apache/harmony/security/fortress/DefaultPolicy.java (working copy) @@ -163,7 +163,7 @@ // A flag indicating brand new instance which needs to be loaded // on the first appeal to it's data. - private boolean initiailized; + private boolean initialized; /** * Default constructor, equivalent to @@ -180,7 +180,7 @@ */ public DefaultPolicy(DefaultPolicyParser dpr) { parser = dpr; - initiailized = false; + initialized = false; refresh(); } @@ -191,9 +191,9 @@ * to be null if the domain is null. */ public PermissionCollection getPermissions(ProtectionDomain pd) { - if (!initiailized) { + if (!initialized) { synchronized (this) { - if (!initiailized) { + if (!initialized) { refresh(); } } @@ -230,9 +230,9 @@ * The evaluation assumes that current principals are undefined. */ public PermissionCollection getPermissions(CodeSource cs) { - if (!initiailized) { + if (!initialized) { synchronized (this) { - if (!initiailized) { + if (!initialized) { refresh(); } } @@ -306,6 +306,6 @@ cache.clear(); } - initiailized = true; + initialized = true; } } Index: src/main/java/common/org/apache/harmony/security/fortress/Services.java =================================================================== --- src/main/java/common/org/apache/harmony/security/fortress/Services.java (revision 494820) +++ src/main/java/common/org/apache/harmony/security/fortress/Services.java (working copy) @@ -52,7 +52,7 @@ /** * Refresh number */ - public static int refreshNumber = 1; + static int refreshNumber = 1; // Registered providers private static final List providers = new ArrayList(20); @@ -85,8 +85,10 @@ providers.add(p); providersNames.put(p.getName(), p); initServiceInfo(p); - } catch (Exception e) { // ignore - } + } catch (ClassNotFoundException e) { // ignore Exceptions + } catch (IllegalAccessException e) { + } catch (InstantiationException e) { + } } Engine.door.renumProviders(); } Index: src/main/java/common/org/apache/harmony/security/provider/cert/X509CertFactoryImpl.java =================================================================== --- src/main/java/common/org/apache/harmony/security/provider/cert/X509CertFactoryImpl.java (revision 494820) +++ src/main/java/common/org/apache/harmony/security/provider/cert/X509CertFactoryImpl.java (working copy) @@ -515,9 +515,7 @@ if (boundary_suffix[i] != inStream.read()) { throw new IOException( Messages.getString("security.15B", //$NON-NLS-1$ - ((boundary_suffix == null) - ? "" - : new String(boundary_suffix)))); //$NON-NLS-1$ + new String(boundary_suffix))); //$NON-NLS-1$ } } // read new line characters @@ -574,9 +572,7 @@ if (boundary_suffix[i] != inStream.read()) { throw new IOException( Messages.getString("security.15B1", //$NON-NLS-1$ - ((boundary_suffix == null) - ? "" - : new String(boundary_suffix)))); //$NON-NLS-1$ + new String(boundary_suffix))); //$NON-NLS-1$ } } } Index: src/main/java/common/org/apache/harmony/security/provider/cert/X509CertPathImpl.java =================================================================== --- src/main/java/common/org/apache/harmony/security/provider/cert/X509CertPathImpl.java (revision 494820) +++ src/main/java/common/org/apache/harmony/security/provider/cert/X509CertPathImpl.java (working copy) @@ -313,7 +313,7 @@ /** * ASN.1 DER Encoder/Decoder for PkiPath structure. */ - public static ASN1SequenceOf ASN1 = + public static final ASN1SequenceOf ASN1 = new ASN1SequenceOf(ASN1Any.getInstance()) { /** Index: src/main/java/common/org/apache/harmony/security/provider/crypto/DSAPrivateKeyImpl.java =================================================================== --- src/main/java/common/org/apache/harmony/security/provider/crypto/DSAPrivateKeyImpl.java (revision 494820) +++ src/main/java/common/org/apache/harmony/security/provider/crypto/DSAPrivateKeyImpl.java (working copy) @@ -27,6 +27,7 @@ package org.apache.harmony.security.provider.crypto; import java.io.IOException; +import java.io.NotActiveException; import java.math.BigInteger; import java.security.interfaces.DSAParams; import java.security.interfaces.DSAPrivateKey; @@ -53,9 +54,9 @@ */ private static final long serialVersionUID = -4716227614104950081L; - private BigInteger x; + private BigInteger x, g, p, q; - private DSAParams params; + private transient DSAParams params; /** * Creates object from DSAPrivateKeySpec. @@ -68,9 +69,9 @@ PrivateKeyInfo pki; - BigInteger g = keySpec.getG(); - BigInteger p = keySpec.getP(); - BigInteger q = keySpec.getQ(); + g = keySpec.getG(); + p = keySpec.getP(); + q = keySpec.getQ(); ThreeIntegerSequence threeInts = new ThreeIntegerSequence(p .toByteArray(), q.toByteArray(), g.toByteArray()); @@ -133,9 +134,10 @@ throw new InvalidKeySpecException(Messages.getString( "security.19B", e)); //$NON-NLS-1$ } - params = new DSAParameterSpec(new BigInteger(threeInts.p), - new BigInteger(threeInts.q), new BigInteger(threeInts.g)); - + p = new BigInteger(threeInts.p); + q = new BigInteger(threeInts.q); + g = new BigInteger(threeInts.g); + params = new DSAParameterSpec(p, q, g); setEncoding(encoding); /* @@ -153,5 +155,10 @@ public DSAParams getParams() { return params; } + + private void readObject(java.io.ObjectInputStream in) throws NotActiveException, IOException, ClassNotFoundException { + in.defaultReadObject(); + params = new DSAParameterSpec(p, q, g); + } } Index: src/main/java/common/org/apache/harmony/security/provider/crypto/DSAPublicKeyImpl.java =================================================================== --- src/main/java/common/org/apache/harmony/security/provider/crypto/DSAPublicKeyImpl.java (revision 494820) +++ src/main/java/common/org/apache/harmony/security/provider/crypto/DSAPublicKeyImpl.java (working copy) @@ -29,6 +29,7 @@ package org.apache.harmony.security.provider.crypto; import java.io.IOException; +import java.io.NotActiveException; import java.math.BigInteger; @@ -67,9 +68,9 @@ */ private static final long serialVersionUID = -2279672131310978336L; - private BigInteger y; + private BigInteger y, g, p, q; - private DSAParams params; + private transient DSAParams params; /** * Creates object from DSAPublicKeySpec. @@ -82,9 +83,9 @@ SubjectPublicKeyInfo spki; - BigInteger p = keySpec.getP(); - BigInteger q = keySpec.getQ(); - BigInteger g = keySpec.getG(); + p = keySpec.getP(); + q = keySpec.getQ(); + g = keySpec.getG(); ThreeIntegerSequence threeInts = new ThreeIntegerSequence(p .toByteArray(), q.toByteArray(), g.toByteArray()); @@ -176,5 +177,10 @@ public DSAParams getParams() { return params; } + + private void readObject(java.io.ObjectInputStream in) throws NotActiveException, IOException, ClassNotFoundException { + in.defaultReadObject(); + params = new DSAParameterSpec(p, q, g); + } } Index: src/main/java/common/org/apache/harmony/security/provider/crypto/SHA1withDSA_SignatureImpl.java =================================================================== --- src/main/java/common/org/apache/harmony/security/provider/crypto/SHA1withDSA_SignatureImpl.java (revision 494820) +++ src/main/java/common/org/apache/harmony/security/provider/crypto/SHA1withDSA_SignatureImpl.java (working copy) @@ -83,7 +83,7 @@ DSAParams params; // parameters and private key - BigInteger p, q, g, x; + BigInteger p, q, x; int n; @@ -95,7 +95,6 @@ params = ((DSAPrivateKey) privateKey).getParams(); p = params.getP(); q = params.getQ(); - g = params.getG(); x = ((DSAPrivateKey) privateKey).getX(); // checks described in DSA standard @@ -129,7 +128,7 @@ throws InvalidKeyException { // parameters and public key - BigInteger p, q, g, y; + BigInteger p, q, y; int n1; @@ -141,7 +140,6 @@ DSAParams params = ((DSAPublicKey) publicKey).getParams(); p = params.getP(); q = params.getQ(); - g = params.getG(); y = ((DSAPublicKey) publicKey).getY(); // checks described in DSA standard @@ -207,7 +205,6 @@ // various byte array being used in computing signature byte randomBytes[]; - byte digest[]; byte rBytes[], sBytes[], signature[]; int n, n1, n2; Index: src/main/java/common/org/apache/harmony/security/x501/AttributeTypeAndValue.java =================================================================== --- src/main/java/common/org/apache/harmony/security/x501/AttributeTypeAndValue.java (revision 494820) +++ src/main/java/common/org/apache/harmony/security/x501/AttributeTypeAndValue.java (working copy) @@ -301,7 +301,7 @@ public void appendName(String attrFormat, StringBuffer buf) { boolean hexFormat = false; - if (attrFormat == X500Principal.RFC1779) { + if (X500Principal.RFC1779.equals(attrFormat)) { if (RFC1779_NAMES == oid.getGroup()) { buf.append(oid.getName()); } else { @@ -324,7 +324,7 @@ if (RFC1779_NAMES == group || RFC2253_NAMES == group) { buf.append(oid.getName()); - if (attrFormat == X500Principal.CANONICAL) { + if (X500Principal.CANONICAL.equals(attrFormat)) { // only PrintableString and UTF8String in string format // all others are output in hex format int tag = value.getTag(); @@ -344,7 +344,7 @@ if (hexFormat) { buf.append(value.getHexString()); } else { - if (attrFormat == X500Principal.CANONICAL) { + if (X500Principal.CANONICAL.equals(attrFormat)) { buf.append(value.makeCanonical()); } else { buf.append(value.escapedString); @@ -383,7 +383,7 @@ * */ - public static ASN1Type AttributeValue = new ASN1Type( + public static final ASN1Type attributeValue = new ASN1Type( ASN1Constants.TAG_PRINTABLESTRING) { public boolean checkTag(int tag) { @@ -472,7 +472,7 @@ }; public static final ASN1Sequence ASN1 = new ASN1Sequence(new ASN1Type[] { - ASN1Oid.getInstance(), AttributeValue }) { + ASN1Oid.getInstance(), attributeValue }) { protected Object getDecodedObject(BerInputStream in) throws IOException { Object[] values = (Object[]) in.content; Index: src/main/java/common/org/apache/harmony/security/x501/AttributeTypeAndValueComparator.java =================================================================== --- src/main/java/common/org/apache/harmony/security/x501/AttributeTypeAndValueComparator.java (revision 494820) +++ src/main/java/common/org/apache/harmony/security/x501/AttributeTypeAndValueComparator.java (working copy) @@ -22,6 +22,7 @@ package org.apache.harmony.security.x501; +import java.io.Serializable; import java.util.Comparator; import org.apache.harmony.security.utils.ObjectIdentifier; @@ -30,9 +31,11 @@ * AttributeTypeAndValue comparator * */ -public class AttributeTypeAndValueComparator implements Comparator { +public class AttributeTypeAndValueComparator implements Comparator, Serializable { + + private static final long serialVersionUID = -1286471842007103132L; - /** + /** * compares two AttributeTypeAndValues * * @param obj1 @@ -63,14 +66,7 @@ return compateOids(atav1.getType(), atav2.getType()); } - - /** - * @return false - */ - public boolean equals(Object obj) { - return false; - } - + /** * compares two Object identifiers * Index: src/main/java/common/org/apache/harmony/security/x501/Name.java =================================================================== --- src/main/java/common/org/apache/harmony/security/x501/Name.java (revision 494820) +++ src/main/java/common/org/apache/harmony/security/x501/Name.java (working copy) @@ -118,7 +118,7 @@ // // check X500Principal constants first // - if (format == X500Principal.RFC1779) { + if (X500Principal.RFC1779.equals(format)) { if (rfc1779String == null) { rfc1779String = getName0(format); @@ -125,7 +125,7 @@ } return rfc1779String; - } else if (format == X500Principal.RFC2253) { + } else if (X500Principal.RFC2253.equals(format)) { if (rfc2253String == null) { rfc2253String = getName0(format); @@ -132,7 +132,7 @@ } return rfc2253String; - } else if (format == X500Principal.CANONICAL) { + } else if (X500Principal.CANONICAL.equals(format)) { if (canonicalString == null) { canonicalString = getName0(format); @@ -217,7 +217,7 @@ } String sName = name.toString(); - if (format == X500Principal.CANONICAL) { + if (X500Principal.CANONICAL.equals(format)) { sName = sName.toLowerCase(Locale.US); } return sName; Index: src/main/java/common/org/apache/harmony/security/x509/AlgorithmIdentifier.java =================================================================== --- src/main/java/common/org/apache/harmony/security/x509/AlgorithmIdentifier.java (revision 494820) +++ src/main/java/common/org/apache/harmony/security/x509/AlgorithmIdentifier.java (working copy) @@ -143,6 +143,11 @@ : Arrays.equals(parameters, algid.parameters)); } + public int hashCode() { + return algorithm.hashCode() * 37 + + (parameters != null ? parameters.hashCode() : 0); + } + /** * Places the string representation into the StringBuffer object. */ Index: src/main/java/common/org/apache/harmony/security/x509/AuthorityKeyIdentifier.java =================================================================== --- src/main/java/common/org/apache/harmony/security/x509/AuthorityKeyIdentifier.java (revision 494820) +++ src/main/java/common/org/apache/harmony/security/x509/AuthorityKeyIdentifier.java (working copy) @@ -103,7 +103,7 @@ buffer.append(prefix).append("]\n"); //$NON-NLS-1$ } - public static ASN1Type ASN1 = new ASN1Sequence( + public static final ASN1Type ASN1 = new ASN1Sequence( new ASN1Type[] { new ASN1Implicit(0, ASN1OctetString.getInstance()), new ASN1Implicit(1, GeneralNames.ASN1), Index: src/main/java/common/org/apache/harmony/security/x509/BasicConstraints.java =================================================================== --- src/main/java/common/org/apache/harmony/security/x509/BasicConstraints.java (revision 494820) +++ src/main/java/common/org/apache/harmony/security/x509/BasicConstraints.java (working copy) @@ -105,7 +105,7 @@ /** * ASN.1 Encoder/Decoder. */ - public static ASN1Type ASN1 = new ASN1Sequence(new ASN1Type[] { + public static final ASN1Type ASN1 = new ASN1Sequence(new ASN1Type[] { ASN1Boolean.getInstance(), ASN1Integer.getInstance() }) { { setDefault(Boolean.FALSE, 0); Index: src/main/java/common/org/apache/harmony/security/x509/CRLNumber.java =================================================================== --- src/main/java/common/org/apache/harmony/security/x509/CRLNumber.java (revision 494820) +++ src/main/java/common/org/apache/harmony/security/x509/CRLNumber.java (working copy) @@ -84,5 +84,5 @@ /** * ASN.1 Encoder/Decoder. */ - public static ASN1Type ASN1 = ASN1Integer.getInstance(); + public static final ASN1Type ASN1 = ASN1Integer.getInstance(); } Index: src/main/java/common/org/apache/harmony/security/x509/CertificateIssuer.java =================================================================== --- src/main/java/common/org/apache/harmony/security/x509/CertificateIssuer.java (revision 494820) +++ src/main/java/common/org/apache/harmony/security/x509/CertificateIssuer.java (working copy) @@ -87,7 +87,7 @@ /** * ASN.1 Encoder/Decoder. */ - public static ASN1Type ASN1 = new ASN1Sequence(new ASN1Type[] { + public static final ASN1Type ASN1 = new ASN1Sequence(new ASN1Type[] { GeneralName.ASN1 }) { public Object getDecodedObject(BerInputStream in) { Index: src/main/java/common/org/apache/harmony/security/x509/ExtendedKeyUsage.java =================================================================== --- src/main/java/common/org/apache/harmony/security/x509/ExtendedKeyUsage.java (revision 494820) +++ src/main/java/common/org/apache/harmony/security/x509/ExtendedKeyUsage.java (working copy) @@ -109,7 +109,7 @@ /** * ASN.1 Encoder/Decoder. */ - public static ASN1Type ASN1 = + public static final ASN1Type ASN1 = new ASN1SequenceOf(new ASN1Oid() { public Object getDecodedObject(BerInputStream in) Index: src/main/java/common/org/apache/harmony/security/x509/Extension.java =================================================================== --- src/main/java/common/org/apache/harmony/security/x509/Extension.java (revision 494820) +++ src/main/java/common/org/apache/harmony/security/x509/Extension.java (working copy) @@ -58,34 +58,34 @@ // constants: the extension OIDs // certificate extensions: - public static final int[] SUBJ_DIRECTORY_ATTRS = {2, 5, 29, 9}; - public static final int[] SUBJ_KEY_ID = {2, 5, 29, 14}; - public static final int[] KEY_USAGE = {2, 5, 29, 15}; - public static final int[] PRIVATE_KEY_USAGE_PERIOD = {2, 5, 29, 16}; - public static final int[] SUBJECT_ALT_NAME = {2, 5, 29, 17}; - public static final int[] ISSUER_ALTERNATIVE_NAME = {2, 5, 29, 18}; - public static final int[] BASIC_CONSTRAINTS = {2, 5, 29, 19}; - public static final int[] NAME_CONSTRAINTS = {2, 5, 29, 30}; - public static final int[] CRL_DISTR_POINTS = {2, 5, 29, 31}; - public static final int[] CERTIFICATE_POLICIES = {2, 5, 29, 32}; - public static final int[] POLICY_MAPPINGS = {2, 5, 29, 33}; - public static final int[] AUTH_KEY_ID = {2, 5, 29, 35}; - public static final int[] POLICY_CONSTRAINTS = {2, 5, 29, 36}; - public static final int[] EXTENDED_KEY_USAGE = {2, 5, 29, 37}; - public static final int[] FRESHEST_CRL = {2, 5, 29, 46}; - public static final int[] INHIBIT_ANY_POLICY = {2, 5, 29, 54}; - public static final int[] AUTHORITY_INFO_ACCESS = + static final int[] SUBJ_DIRECTORY_ATTRS = {2, 5, 29, 9}; + static final int[] SUBJ_KEY_ID = {2, 5, 29, 14}; + static final int[] KEY_USAGE = {2, 5, 29, 15}; + static final int[] PRIVATE_KEY_USAGE_PERIOD = {2, 5, 29, 16}; + static final int[] SUBJECT_ALT_NAME = {2, 5, 29, 17}; + static final int[] ISSUER_ALTERNATIVE_NAME = {2, 5, 29, 18}; + static final int[] BASIC_CONSTRAINTS = {2, 5, 29, 19}; + static final int[] NAME_CONSTRAINTS = {2, 5, 29, 30}; + static final int[] CRL_DISTR_POINTS = {2, 5, 29, 31}; + static final int[] CERTIFICATE_POLICIES = {2, 5, 29, 32}; + static final int[] POLICY_MAPPINGS = {2, 5, 29, 33}; + static final int[] AUTH_KEY_ID = {2, 5, 29, 35}; + static final int[] POLICY_CONSTRAINTS = {2, 5, 29, 36}; + static final int[] EXTENDED_KEY_USAGE = {2, 5, 29, 37}; + static final int[] FRESHEST_CRL = {2, 5, 29, 46}; + static final int[] INHIBIT_ANY_POLICY = {2, 5, 29, 54}; + static final int[] AUTHORITY_INFO_ACCESS = {1, 3, 6, 1, 5, 5, 7, 1, 1}; - public static final int[] SUBJECT_INFO_ACCESS = + static final int[] SUBJECT_INFO_ACCESS = {1, 3, 6, 1, 5, 5, 7, 1, 11}; // crl extensions: - public static final int[] ISSUING_DISTR_POINT = {2, 5, 29, 28}; + static final int[] ISSUING_DISTR_POINT = {2, 5, 29, 28}; // crl entry extensions: - public static final int[] CRL_NUMBER = {2, 5, 29, 20}; - public static final int[] CERTIFICATE_ISSUER = {2, 5, 29, 29}; - public static final int[] INVALIDITY_DATE = {2, 5, 29, 24}; - public static final int[] REASON_CODE = {2, 5, 29, 21}; - public static final int[] ISSUING_DISTR_POINTS = {2, 5, 29, 28}; + static final int[] CRL_NUMBER = {2, 5, 29, 20}; + static final int[] CERTIFICATE_ISSUER = {2, 5, 29, 29}; + static final int[] INVALIDITY_DATE = {2, 5, 29, 24}; + static final int[] REASON_CODE = {2, 5, 29, 21}; + static final int[] ISSUING_DISTR_POINTS = {2, 5, 29, 28}; // the value of extnID field of the structure private final int[] extnID; @@ -238,6 +238,10 @@ && (critical == extn.critical) && Arrays.equals(extnValue, extn.extnValue); } + + public int hashCode() { + return (extnID.hashCode() * 37 + (critical ? 1 : 0)) * 37 + extnValue.hashCode(); + } public ExtensionValue getDecodedExtensionValue() throws IOException { if (!valueDecoded) { Index: src/main/java/common/org/apache/harmony/security/x509/Extensions.java =================================================================== --- src/main/java/common/org/apache/harmony/security/x509/Extensions.java (revision 494820) +++ src/main/java/common/org/apache/harmony/security/x509/Extensions.java (working copy) @@ -386,6 +386,14 @@ ); } + public int hashCode() { + int hashcode = 0; + if (extensions != null) { + hashcode = extensions.hashCode(); + } + return hashcode; + } + /** * Places the string representation into the StringBuffer object. */ Index: src/main/java/common/org/apache/harmony/security/x509/GeneralName.java =================================================================== --- src/main/java/common/org/apache/harmony/security/x509/GeneralName.java (revision 494820) +++ src/main/java/common/org/apache/harmony/security/x509/GeneralName.java (working copy) @@ -328,6 +328,24 @@ return false; } + public int hashCode() { + switch(tag) { + case RFC822_NAME: + case DNS_NAME: + case UR_ID: + case REG_ID: + case IP_ADDR: + return name.hashCode(); + case DIR_NAME: + case X400_ADDR: + case OTHER_NAME: + case EDIP_NAME: + return getEncoded().hashCode(); + default: + return super.hashCode(); + } + } + /** * Checks if the other general name is acceptable by this object. * The name is acceptable if it has the same type name and its @@ -585,7 +603,7 @@ if (ch == '.') { // check the end of the previous label, it should not // be '-' sign - if (bytes[i-i] == '-') { + if (bytes[i-1] == '-') { throw new IOException( Messages.getString("security.186", dns)); //$NON-NLS-1$ } Index: src/main/java/common/org/apache/harmony/security/x509/InvalidityDate.java =================================================================== --- src/main/java/common/org/apache/harmony/security/x509/InvalidityDate.java (revision 494820) +++ src/main/java/common/org/apache/harmony/security/x509/InvalidityDate.java (working copy) @@ -82,6 +82,6 @@ /** * ASN.1 Encoder/Decoder. */ - public static ASN1Type ASN1 = ASN1GeneralizedTime.getInstance(); + public static final ASN1Type ASN1 = ASN1GeneralizedTime.getInstance(); } Index: src/main/java/common/org/apache/harmony/security/x509/IssuingDistributionPoint.java =================================================================== --- src/main/java/common/org/apache/harmony/security/x509/IssuingDistributionPoint.java (revision 494820) +++ src/main/java/common/org/apache/harmony/security/x509/IssuingDistributionPoint.java (working copy) @@ -180,7 +180,7 @@ /** * ASN.1 Encoder/Decoder. */ - public static ASN1Type ASN1 = new ASN1Sequence( + public static final ASN1Type ASN1 = new ASN1Sequence( new ASN1Type[] { // ASN.1 prohibits implicitly tagged CHOICE new ASN1Explicit(0, DistributionPointName.ASN1), Index: src/main/java/common/org/apache/harmony/security/x509/ReasonCode.java =================================================================== --- src/main/java/common/org/apache/harmony/security/x509/ReasonCode.java (revision 494820) +++ src/main/java/common/org/apache/harmony/security/x509/ReasonCode.java (working copy) @@ -128,6 +128,6 @@ /** * ASN.1 Encoder/Decoder. */ - public static ASN1Type ASN1 = ASN1Enumerated.getInstance(); + public static final ASN1Type ASN1 = ASN1Enumerated.getInstance(); } Index: src/main/java/common/org/apache/harmony/security/x509/ReasonFlags.java =================================================================== --- src/main/java/common/org/apache/harmony/security/x509/ReasonFlags.java (revision 494820) +++ src/main/java/common/org/apache/harmony/security/x509/ReasonFlags.java (working copy) @@ -55,7 +55,7 @@ /** * The names of the reasons. */ - public static final String[] REASONS = { + static final String[] REASONS = { "unused", //$NON-NLS-1$ "keyCompromise", //$NON-NLS-1$ "cACompromise", //$NON-NLS-1$ @@ -97,7 +97,7 @@ /** * ASN.1 Encoder/Decoder. */ - public static ASN1BitString ASN1 = + public static final ASN1BitString ASN1 = new ASN1BitString.ASN1NamedBitList(REASONS.length) { public Object getDecodedObject(BerInputStream in) throws IOException { return new ReasonFlags((boolean[]) super.getDecodedObject(in)); Index: src/main/java/common/org/apache/harmony/security/x509/TBSCertList.java =================================================================== --- src/main/java/common/org/apache/harmony/security/x509/TBSCertList.java (revision 494820) +++ src/main/java/common/org/apache/harmony/security/x509/TBSCertList.java (working copy) @@ -153,6 +153,11 @@ ? rcert.crlEntryExtensions == null : crlEntryExtensions.equals(rcert.crlEntryExtensions)); } + + public int hashCode() { + return userCertificate.hashCode() * 37 + (int)revocationDate.getTime() / 1000 + + (crlEntryExtensions == null ? 0 : crlEntryExtensions.hashCode()); + } /** * Places the string representation of extension value @@ -171,7 +176,7 @@ } } - public static ASN1Sequence ASN1 = new ASN1Sequence( + public static final ASN1Sequence ASN1 = new ASN1Sequence( new ASN1Type[] {ASN1Integer.getInstance(), Time.ASN1, Extensions.ASN1}) { { @@ -358,6 +363,12 @@ ? tbscert.crlExtensions == null : crlExtensions.equals(tbscert.crlExtensions)); } + + public int hashCode() { + return ((version * 37 + signature.hashCode()) * 37 + + issuer.getEncoded().hashCode()) * 37 + + (int)thisUpdate.getTime() / 1000; + } /** * Places the string representation of extension value Index: src/main/java/common/org/apache/harmony/security/x509/tsp/PKIStatusInfo.java =================================================================== --- src/main/java/common/org/apache/harmony/security/x509/tsp/PKIStatusInfo.java (revision 494820) +++ src/main/java/common/org/apache/harmony/security/x509/tsp/PKIStatusInfo.java (working copy) @@ -122,8 +122,7 @@ int failInfoValue = -1; if (values[2] != null) { - boolean[] failInfoBoolArray = (values[2] == null) ? null - : ((BitString) values[2]).toBooleanArray(); + boolean[] failInfoBoolArray = ((BitString) values[2]).toBooleanArray(); for (int i = 0; i < failInfoBoolArray.length; i++) { if (failInfoBoolArray[i]) { failInfoValue = i; Index: src/test/api/java/org/apache/harmony/security/tests/java/security/KeyStoreTest.java =================================================================== --- src/test/api/java/org/apache/harmony/security/tests/java/security/KeyStoreTest.java (revision 494820) +++ src/test/api/java/org/apache/harmony/security/tests/java/security/KeyStoreTest.java (working copy) @@ -237,6 +237,11 @@ // Regression for HARMONY-1539 // no exception expected assertNull(new KeyStore.PasswordProtection(null).getPassword()); + char[] password = new char[] {'a', 'b', 'c'}; + KeyStore.PasswordProtection pp = new KeyStore.PasswordProtection(password); + assertNotSame(pp.getPassword(), password); + assertSame(pp.getPassword(), pp.getPassword()); + } Index: src/test/api/java/org/apache/harmony/security/tests/java/security/TimestampTest.java =================================================================== --- src/test/api/java/org/apache/harmony/security/tests/java/security/TimestampTest.java (revision 494820) +++ src/test/api/java/org/apache/harmony/security/tests/java/security/TimestampTest.java (working copy) @@ -85,7 +85,9 @@ } public void testGetTimestamp() { - assertEquals(new Timestamp(now, cpath).getTimestamp(), now); + Timestamp t = new Timestamp(now, cpath); + assertEquals(t.getTimestamp(), now); + assertNotSame(t.getTimestamp(), now); } /*