| package org.bouncycastle.cmc; |
| |
| import java.io.IOException; |
| |
| import org.bouncycastle.asn1.ASN1Primitive; |
| import org.bouncycastle.asn1.cms.ContentInfo; |
| import org.bouncycastle.cert.X509CRLHolder; |
| import org.bouncycastle.cert.X509CertificateHolder; |
| import org.bouncycastle.cms.CMSException; |
| import org.bouncycastle.cms.CMSSignedData; |
| import org.bouncycastle.util.Encodable; |
| import org.bouncycastle.util.Store; |
| |
| /** |
| * Carrier for a Simple PKI Response. |
| * <p> |
| * A Simple PKI Response is defined in RFC 5272 as a CMS SignedData object with no EncapsulatedContentInfo |
| * and no SignerInfos attached. |
| * </p> |
| */ |
| public class SimplePKIResponse |
| implements Encodable |
| { |
| private final CMSSignedData certificateResponse; |
| |
| private static ContentInfo parseBytes(byte[] responseEncoding) |
| throws CMCException |
| { |
| try |
| { |
| return ContentInfo.getInstance(ASN1Primitive.fromByteArray(responseEncoding)); |
| } |
| catch (Exception e) |
| { |
| throw new CMCException("malformed data: " + e.getMessage(), e); |
| } |
| } |
| |
| /** |
| * Create a SimplePKIResponse from the passed in bytes. |
| * |
| * @param responseEncoding BER/DER encoding of the certificate. |
| * @throws IOException in the event of corrupted data, or an incorrect structure. |
| */ |
| public SimplePKIResponse(byte[] responseEncoding) |
| throws CMCException |
| { |
| this(parseBytes(responseEncoding)); |
| } |
| |
| /** |
| * Create a SimplePKIResponse from the passed in ASN.1 structure. |
| * |
| * @param signedData a ContentInfo containing a SignedData. |
| */ |
| public SimplePKIResponse(ContentInfo signedData) |
| throws CMCException |
| { |
| try |
| { |
| this.certificateResponse = new CMSSignedData(signedData); |
| } |
| catch (CMSException e) |
| { |
| throw new CMCException("malformed response: " + e.getMessage(), e); |
| } |
| |
| if (certificateResponse.getSignerInfos().size() != 0) |
| { |
| throw new CMCException("malformed response: SignerInfo structures found"); |
| } |
| if (certificateResponse.getSignedContent() != null) |
| { |
| throw new CMCException("malformed response: Signed Content found"); |
| } |
| } |
| |
| /** |
| * Return any X.509 certificate objects in this SimplePKIResponse structure as a Store of X509CertificateHolder objects. |
| * |
| * @return a Store of X509CertificateHolder objects. |
| */ |
| public Store<X509CertificateHolder> getCertificates() |
| { |
| return certificateResponse.getCertificates(); |
| } |
| |
| /** |
| * Return any X.509 CRL objects in this SimplePKIResponse structure as a Store of X509CRLHolder objects. |
| * |
| * @return a Store of X509CRLHolder objects. |
| */ |
| public Store<X509CRLHolder> getCRLs() |
| { |
| return certificateResponse.getCRLs(); |
| } |
| |
| /** |
| * return the ASN.1 encoded representation of this object. |
| */ |
| public byte[] getEncoded() |
| throws IOException |
| { |
| return certificateResponse.getEncoded(); |
| } |
| } |