/*
* Copyright 2003 Federal Chancellery Austria
* MOA-SPSS has been developed in a cooperation between BRZ, the Federal
* Chancellery Austria - ICT staff unit, and Graz University of Technology.
*
* Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
* the European Commission - subsequent versions of the EUPL (the "Licence");
* You may not use this work except in compliance with the Licence.
* You may obtain a copy of the Licence at:
* http://www.osor.eu/eupl/
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the Licence is distributed on an "AS IS" basis,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the Licence for the specific language governing permissions and
* limitations under the Licence.
*
* This product combines work with different licenses. See the "NOTICE" text
* file for details on the various modules and licenses.
* The "NOTICE" text file is part of the distribution. Any derivative works
* that you distribute must include a readable copy of the "NOTICE" text file.
*/
package at.gv.egovernment.moa.spss.server.config;
import java.math.BigInteger;
import java.security.Principal;
import iaik.asn1.structures.Name;
import iaik.utils.RFC2253NameParser;
import iaik.utils.RFC2253NameParserException;
/**
* A class containing the issuer and serial number of a certificate, which can
* be used to uniquely identify the certificate.
*
* The issuer is contained as an RFC2253 encoded String
.
*
* @author Patrick Peck
* @version $Id$
*/
public class IssuerAndSerial {
/** The issuer distinguished name. */
private final String issuerDN;
/** The certificate serial number. */
private final BigInteger serial;
/**
* Create an IssuerAndSerial
object.
*
* The name of the issuer is converted to RFC2253. If it cannot be parsed, the
* DN contained in the issuer
is set.
*
* @param issuer The isser of a certificate.
* @param serial The serial number of the certificate.
*/
public IssuerAndSerial(Principal issuer, BigInteger serial) {
String issuerDN = null;
if (issuer instanceof Name) {
try {
issuerDN = ((Name) issuer).getRFC2253String();
} catch (final RFC2253NameParserException e) {
// do nothing
}
}
if (issuerDN == null) {
final RFC2253NameParser parser = new RFC2253NameParser(issuer.getName());
try {
issuerDN = parser.parse().getRFC2253String();
} catch (final RFC2253NameParserException e) {
issuerDN = issuer.getName();
}
}
this.serial = serial;
this.issuerDN = issuerDN;
}
/**
* Create an IssuerAndSerial
object.
*
* @param issuerDN The issuer distinguished name. Should be an RFC2253 name.
* @param serial The serial number of the certificate.
*/
public IssuerAndSerial(String issuerDN, BigInteger serial) {
this.issuerDN = issuerDN;
this.serial = serial;
}
/**
* Return the issuer DN in RFC2253 format.
*
* @return The issuer part of this object.
*/
public String getIssuerDN() {
return issuerDN;
}
/**
* Return the serial number.
*
* @return The serial number of this object.
*/
public BigInteger getSerial() {
return serial;
}
/**
* Compare this IssuerAndSerial
to another object.
*
* @param other The object to compare this IssuerAndSerial
to.
* @return true
, if other
is an
* IssuerAndSerial
object and the issuer
and
* serial
fields are both equal. false
* otherwise.
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object other) {
if (other instanceof IssuerAndSerial) {
final IssuerAndSerial ias = (IssuerAndSerial) other;
return getIssuerDN().equals(ias.getIssuerDN())
&& getSerial().equals(ias.getSerial());
}
return false;
}
/**
* Return the hash code of this IssuerAndSerial
.
*
* @return The hash code of this IssuerAndSerial
.
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode() {
return issuerDN.hashCode() ^ serial.hashCode();
}
/**
* Return a String
representation of this
* IssuerAndSerial
object.
*
* @return The String
representation.
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "(IssuerAndSerial - Issuer<" + getIssuerDN()
+ "> Serial<" + serial.toString() + ">)";
}
}