package org.bouncycastle.x509;

import java.io.IOException;
import java.security.cert.CertificateEncodingException;
import java.security.cert.CertificateParsingException;
import java.security.cert.X509Certificate;

import org.bouncycastle.asn1.ASN1Encoding;
import org.bouncycastle.asn1.ASN1InputStream;
import org.bouncycastle.asn1.x509.Certificate;
import org.bouncycastle.asn1.x509.CertificatePair;
import org.bouncycastle.jcajce.util.BCJcaJceHelper;
import org.bouncycastle.jcajce.util.JcaJceHelper;
import org.bouncycastle.jce.provider.X509CertificateObject;

This class contains a cross certificate pair. Cross certificates pairs may contain two cross signed certificates from two CAs. A certificate from the other CA to this CA is contained in the forward certificate, the certificate from this CA to the other CA is contained in the reverse certificate.
/** * This class contains a cross certificate pair. Cross certificates pairs may * contain two cross signed certificates from two CAs. A certificate from the * other CA to this CA is contained in the forward certificate, the certificate * from this CA to the other CA is contained in the reverse certificate. */
public class X509CertificatePair { private final JcaJceHelper bcHelper = new BCJcaJceHelper(); // needed to force provider loading private X509Certificate forward; private X509Certificate reverse; // TODO: should get rid of this class
Constructor.
Params:
  • forward – Certificate from the other CA to this CA.
  • reverse – Certificate from this CA to the other CA.
/** * Constructor. * * @param forward Certificate from the other CA to this CA. * @param reverse Certificate from this CA to the other CA. */
public X509CertificatePair( X509Certificate forward, X509Certificate reverse) { this.forward = forward; this.reverse = reverse; }
Constructor from a ASN.1 CertificatePair structure.
Params:
  • pair – The CertificatePair ASN.1 object.
/** * Constructor from a ASN.1 CertificatePair structure. * * @param pair The <code>CertificatePair</code> ASN.1 object. */
public X509CertificatePair( CertificatePair pair) throws CertificateParsingException { if (pair.getForward() != null) { this.forward = new X509CertificateObject(pair.getForward()); } if (pair.getReverse() != null) { this.reverse = new X509CertificateObject(pair.getReverse()); } } public byte[] getEncoded() throws CertificateEncodingException { Certificate f = null; Certificate r = null; try { if (forward != null) { f = Certificate.getInstance(new ASN1InputStream( forward.getEncoded()).readObject()); if (f == null) { throw new CertificateEncodingException("unable to get encoding for forward"); } } if (reverse != null) { r = Certificate.getInstance(new ASN1InputStream( reverse.getEncoded()).readObject()); if (r == null) { throw new CertificateEncodingException("unable to get encoding for reverse"); } } return new CertificatePair(f, r).getEncoded(ASN1Encoding.DER); } catch (IllegalArgumentException e) { throw new ExtCertificateEncodingException(e.toString(), e); } catch (IOException e) { throw new ExtCertificateEncodingException(e.toString(), e); } }
Returns the certificate from the other CA to this CA.
Returns:Returns the forward certificate.
/** * Returns the certificate from the other CA to this CA. * * @return Returns the forward certificate. */
public X509Certificate getForward() { return forward; }
Return the certificate from this CA to the other CA.
Returns:Returns the reverse certificate.
/** * Return the certificate from this CA to the other CA. * * @return Returns the reverse certificate. */
public X509Certificate getReverse() { return reverse; } public boolean equals(Object o) { if (o == null) { return false; } if (!(o instanceof X509CertificatePair)) { return false; } X509CertificatePair pair = (X509CertificatePair)o; boolean equalReverse = true; boolean equalForward = true; if (forward != null) { equalForward = this.forward.equals(pair.forward); } else { if (pair.forward != null) { equalForward = false; } } if (reverse != null) { equalReverse = this.reverse.equals(pair.reverse); } else { if (pair.reverse != null) { equalReverse = false; } } return equalForward && equalReverse; } public int hashCode() { int hash = -1; if (forward != null) { hash ^= forward.hashCode(); } if (reverse != null) { hash *= 17; hash ^= reverse.hashCode(); } return hash; } }