blob: 84673b14ed9237b4271c32549784f2caa6bc1bdd [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007 IBM Corporation and others. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors: IBM Corporation - initial API and implementation
******************************************************************************/
package org.eclipse.osgi.internal.signedcontent;
import java.security.cert.Certificate;
import org.eclipse.osgi.signedcontent.SignerInfo;
public class SignerInfoImpl implements SignerInfo {
private final Certificate[] chain;
private final String mdAlgorithm;
volatile private Certificate trustAnchor;
public SignerInfoImpl(Certificate[] chain, Certificate trustAnchor, String mdAlgorithm) {
this.chain = chain;
this.trustAnchor = trustAnchor;
this.mdAlgorithm = mdAlgorithm;
}
public Certificate[] getCertificateChain() {
return chain;
}
public Certificate getTrustAnchor() {
return trustAnchor;
}
public boolean isTrusted() {
return trustAnchor != null;
}
void setTrustAnchor(Certificate trustAnchor) {
this.trustAnchor = trustAnchor;
}
public String getMessageDigestAlgorithm() {
return mdAlgorithm;
}
public int hashCode() {
int result = mdAlgorithm.hashCode();
for (int i = 0; i < chain.length; i++)
result += chain[i].hashCode();
// Note that we do not hash based on trustAnchor;
// this changes dynamically but we need a constant hashCode for purposes of
// hashing in a Set.
return result;
}
public boolean equals(Object obj) {
if (!(obj instanceof SignerInfo))
return false;
if (obj == this)
return true;
SignerInfo other = (SignerInfo) obj;
if (!mdAlgorithm.equals(other.getMessageDigestAlgorithm()))
return false;
Certificate[] otherCerts = other.getCertificateChain();
if (otherCerts.length != chain.length)
return false;
for (int i = 0; i < chain.length; i++)
if (!chain[i].equals(otherCerts[i]))
return false;
return trustAnchor == null ? other.getTrustAnchor() == null : trustAnchor.equals(other.getTrustAnchor());
}
}