All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.bouncycastle.est.CSRAttributesResponse Maven / Gradle / Ivy

Go to download

The Bouncy Castle Java APIs for CMS, PKCS, EAC, TSP, CMP, CRMF, OCSP, and certificate generation. This jar contains APIs for JDK 1.5 to JDK 1.8. The APIs can be used in conjunction with a JCE/JCA provider such as the one provided with the Bouncy Castle Cryptography APIs.

The newest version!
package org.bouncycastle.est;

import java.io.IOException;
import java.util.Collection;
import java.util.HashMap;

import org.bouncycastle.asn1.ASN1ObjectIdentifier;
import org.bouncycastle.asn1.ASN1Primitive;
import org.bouncycastle.asn1.est.AttrOrOID;
import org.bouncycastle.asn1.est.CsrAttrs;
import org.bouncycastle.util.Encodable;

/**
 * Wrapper class around a CsrAttrs structure.
 */
public class CSRAttributesResponse
    implements Encodable
{
    private final CsrAttrs csrAttrs;
    private final HashMap index;

    /**
     * Create a CSRAttributesResponse 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 CSRAttributesResponse(byte[] responseEncoding)
        throws ESTException
    {
        this(parseBytes(responseEncoding));
    }

    /**
     * Create a CSRAttributesResponse from the passed in ASN.1 structure.
     *
     * @param csrAttrs an RFC 7030 CsrAttrs structure.
     */
    public CSRAttributesResponse(CsrAttrs csrAttrs)
        throws ESTException
    {
        this.csrAttrs = csrAttrs;
        this.index = new HashMap(csrAttrs.size());

        AttrOrOID[] attrOrOIDs = csrAttrs.getAttrOrOIDs();
        for (int i = 0; i != attrOrOIDs.length; i++)
        {
            AttrOrOID attrOrOID = attrOrOIDs[i];

            if (attrOrOID.isOid())
            {
                index.put(attrOrOID.getOid(), attrOrOID);
            }
            else
            {
                index.put(attrOrOID.getAttribute().getAttrType(), attrOrOID);
            }
        }
    }

    private static CsrAttrs parseBytes(byte[] responseEncoding)
        throws ESTException
    {
        try
        {
            return CsrAttrs.getInstance(ASN1Primitive.fromByteArray(responseEncoding));
        }
        catch (Exception e)
        {
            throw new ESTException("malformed data: " + e.getMessage(), e);
        }
    }

    public boolean hasRequirement(ASN1ObjectIdentifier requirementOid)
    {
        return index.containsKey(requirementOid);
    }

    public boolean isAttribute(ASN1ObjectIdentifier requirementOid)
    {
        if (index.containsKey(requirementOid))
        {
            return !(((AttrOrOID)index.get(requirementOid)).isOid());
        }

        return false;
    }

    public boolean isEmpty()
    {
        return csrAttrs.size() == 0;
    }

    public Collection getRequirements()
    {
        return index.keySet();
    }

    public byte[] getEncoded()
        throws IOException
    {
        return csrAttrs.getEncoded();
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy