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.8 and up. The APIs are designed primarily to be used in conjunction with the BC LTS provider but may also be used with other providers providing cryptographic services.

There is a newer version: 2.73.7
Show 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 ESTException 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 - 2025 Weber Informatics LLC | Privacy Policy