Search in sources :

Example 1 with ASN1Exception

use of com.unboundid.asn1.ASN1Exception in project ldapsdk by pingidentity.

the class Filter method readFrom.

/**
 * Reads and decodes a search filter from the provided ASN.1 stream reader.
 *
 * @param  reader  The ASN.1 stream reader from which to read the filter.
 *
 * @return  The decoded search filter.
 *
 * @throws  LDAPException  If an error occurs while reading or parsing the
 *                         search filter.
 */
@NotNull()
public static Filter readFrom(@NotNull final ASN1StreamReader reader) throws LDAPException {
    try {
        final Filter[] filterComps;
        final Filter notComp;
        final String attrName;
        final ASN1OctetString assertionValue;
        final ASN1OctetString subInitial;
        final ASN1OctetString[] subAny;
        final ASN1OctetString subFinal;
        final String matchingRuleID;
        final boolean dnAttributes;
        final byte filterType = (byte) reader.peek();
        switch(filterType) {
            case FILTER_TYPE_AND:
            case FILTER_TYPE_OR:
                final ArrayList<Filter> comps = new ArrayList<>(5);
                final ASN1StreamReaderSet elementSet = reader.beginSet();
                while (elementSet.hasMoreElements()) {
                    comps.add(readFrom(reader));
                }
                filterComps = new Filter[comps.size()];
                comps.toArray(filterComps);
                notComp = null;
                attrName = null;
                assertionValue = null;
                subInitial = null;
                subAny = NO_SUB_ANY;
                subFinal = null;
                matchingRuleID = null;
                dnAttributes = false;
                break;
            case FILTER_TYPE_NOT:
                final ASN1Element notFilterElement;
                try {
                    final ASN1Element e = reader.readElement();
                    notFilterElement = ASN1Element.decode(e.getValue());
                } catch (final ASN1Exception ae) {
                    Debug.debugException(ae);
                    throw new LDAPException(ResultCode.DECODING_ERROR, ERR_FILTER_CANNOT_DECODE_NOT_COMP.get(StaticUtils.getExceptionMessage(ae)), ae);
                }
                notComp = decode(notFilterElement);
                filterComps = NO_FILTERS;
                attrName = null;
                assertionValue = null;
                subInitial = null;
                subAny = NO_SUB_ANY;
                subFinal = null;
                matchingRuleID = null;
                dnAttributes = false;
                break;
            case FILTER_TYPE_EQUALITY:
            case FILTER_TYPE_GREATER_OR_EQUAL:
            case FILTER_TYPE_LESS_OR_EQUAL:
            case FILTER_TYPE_APPROXIMATE_MATCH:
                reader.beginSequence();
                attrName = reader.readString();
                assertionValue = new ASN1OctetString(reader.readBytes());
                filterComps = NO_FILTERS;
                notComp = null;
                subInitial = null;
                subAny = NO_SUB_ANY;
                subFinal = null;
                matchingRuleID = null;
                dnAttributes = false;
                break;
            case FILTER_TYPE_SUBSTRING:
                reader.beginSequence();
                attrName = reader.readString();
                ASN1OctetString tempSubInitial = null;
                ASN1OctetString tempSubFinal = null;
                final ArrayList<ASN1OctetString> subAnyList = new ArrayList<>(1);
                final ASN1StreamReaderSequence subSequence = reader.beginSequence();
                while (subSequence.hasMoreElements()) {
                    final byte type = (byte) reader.peek();
                    final ASN1OctetString s = new ASN1OctetString(type, reader.readBytes());
                    switch(type) {
                        case SUBSTRING_TYPE_SUBINITIAL:
                            tempSubInitial = s;
                            break;
                        case SUBSTRING_TYPE_SUBANY:
                            subAnyList.add(s);
                            break;
                        case SUBSTRING_TYPE_SUBFINAL:
                            tempSubFinal = s;
                            break;
                        default:
                            throw new LDAPException(ResultCode.DECODING_ERROR, ERR_FILTER_INVALID_SUBSTR_TYPE.get(StaticUtils.toHex(type)));
                    }
                }
                subInitial = tempSubInitial;
                subFinal = tempSubFinal;
                subAny = new ASN1OctetString[subAnyList.size()];
                subAnyList.toArray(subAny);
                filterComps = NO_FILTERS;
                notComp = null;
                assertionValue = null;
                matchingRuleID = null;
                dnAttributes = false;
                break;
            case FILTER_TYPE_PRESENCE:
                attrName = reader.readString();
                filterComps = NO_FILTERS;
                notComp = null;
                assertionValue = null;
                subInitial = null;
                subAny = NO_SUB_ANY;
                subFinal = null;
                matchingRuleID = null;
                dnAttributes = false;
                break;
            case FILTER_TYPE_EXTENSIBLE_MATCH:
                String tempAttrName = null;
                ASN1OctetString tempAssertionValue = null;
                String tempMatchingRuleID = null;
                boolean tempDNAttributes = false;
                final ASN1StreamReaderSequence emSequence = reader.beginSequence();
                while (emSequence.hasMoreElements()) {
                    final byte type = (byte) reader.peek();
                    switch(type) {
                        case EXTENSIBLE_TYPE_ATTRIBUTE_NAME:
                            tempAttrName = reader.readString();
                            break;
                        case EXTENSIBLE_TYPE_MATCHING_RULE_ID:
                            tempMatchingRuleID = reader.readString();
                            break;
                        case EXTENSIBLE_TYPE_MATCH_VALUE:
                            tempAssertionValue = new ASN1OctetString(type, reader.readBytes());
                            break;
                        case EXTENSIBLE_TYPE_DN_ATTRIBUTES:
                            tempDNAttributes = reader.readBoolean();
                            break;
                        default:
                            throw new LDAPException(ResultCode.DECODING_ERROR, ERR_FILTER_EXTMATCH_INVALID_TYPE.get(StaticUtils.toHex(type)));
                    }
                }
                if ((tempAttrName == null) && (tempMatchingRuleID == null)) {
                    throw new LDAPException(ResultCode.DECODING_ERROR, ERR_FILTER_EXTMATCH_NO_ATTR_OR_MRID.get());
                }
                if (tempAssertionValue == null) {
                    throw new LDAPException(ResultCode.DECODING_ERROR, ERR_FILTER_EXTMATCH_NO_VALUE.get());
                }
                attrName = tempAttrName;
                assertionValue = tempAssertionValue;
                matchingRuleID = tempMatchingRuleID;
                dnAttributes = tempDNAttributes;
                filterComps = NO_FILTERS;
                notComp = null;
                subInitial = null;
                subAny = NO_SUB_ANY;
                subFinal = null;
                break;
            default:
                throw new LDAPException(ResultCode.DECODING_ERROR, ERR_FILTER_ELEMENT_INVALID_TYPE.get(StaticUtils.toHex(filterType)));
        }
        return new Filter(null, filterType, filterComps, notComp, attrName, assertionValue, subInitial, subAny, subFinal, matchingRuleID, dnAttributes);
    } catch (final LDAPException le) {
        Debug.debugException(le);
        throw le;
    } catch (final Exception e) {
        Debug.debugException(e);
        throw new LDAPException(ResultCode.DECODING_ERROR, ERR_FILTER_CANNOT_DECODE.get(StaticUtils.getExceptionMessage(e)), e);
    }
}
Also used : ASN1OctetString(com.unboundid.asn1.ASN1OctetString) ASN1StreamReaderSequence(com.unboundid.asn1.ASN1StreamReaderSequence) ASN1Exception(com.unboundid.asn1.ASN1Exception) ArrayList(java.util.ArrayList) ASN1StreamReaderSet(com.unboundid.asn1.ASN1StreamReaderSet) ASN1OctetString(com.unboundid.asn1.ASN1OctetString) ASN1Exception(com.unboundid.asn1.ASN1Exception) JSONObjectFilter(com.unboundid.ldap.sdk.unboundidds.jsonfilter.JSONObjectFilter) ASN1Element(com.unboundid.asn1.ASN1Element) NotNull(com.unboundid.util.NotNull)

Example 2 with ASN1Exception

use of com.unboundid.asn1.ASN1Exception in project ldapsdk by pingidentity.

the class Control method decode.

/**
 * Decodes the provided ASN.1 sequence as an LDAP control.
 *
 * @param  controlSequence  The ASN.1 sequence to be decoded.
 *
 * @return  The decoded control.
 *
 * @throws  LDAPException  If a problem occurs while attempting to decode the
 *                         provided ASN.1 sequence as an LDAP control.
 */
@NotNull()
public static Control decode(@NotNull final ASN1Sequence controlSequence) throws LDAPException {
    final ASN1Element[] elements = controlSequence.elements();
    if ((elements.length < 1) || (elements.length > 3)) {
        throw new LDAPException(ResultCode.DECODING_ERROR, ERR_CONTROL_DECODE_INVALID_ELEMENT_COUNT.get(elements.length));
    }
    final String oid = ASN1OctetString.decodeAsOctetString(elements[0]).stringValue();
    boolean isCritical = false;
    ASN1OctetString value = null;
    if (elements.length == 2) {
        switch(elements[1].getType()) {
            case ASN1Constants.UNIVERSAL_BOOLEAN_TYPE:
                try {
                    isCritical = ASN1Boolean.decodeAsBoolean(elements[1]).booleanValue();
                } catch (final ASN1Exception ae) {
                    Debug.debugException(ae);
                    throw new LDAPException(ResultCode.DECODING_ERROR, ERR_CONTROL_DECODE_CRITICALITY.get(StaticUtils.getExceptionMessage(ae)), ae);
                }
                break;
            case ASN1Constants.UNIVERSAL_OCTET_STRING_TYPE:
                value = ASN1OctetString.decodeAsOctetString(elements[1]);
                break;
            default:
                throw new LDAPException(ResultCode.DECODING_ERROR, ERR_CONTROL_INVALID_TYPE.get(StaticUtils.toHex(elements[1].getType())));
        }
    } else if (elements.length == 3) {
        try {
            isCritical = ASN1Boolean.decodeAsBoolean(elements[1]).booleanValue();
        } catch (final ASN1Exception ae) {
            Debug.debugException(ae);
            throw new LDAPException(ResultCode.DECODING_ERROR, ERR_CONTROL_DECODE_CRITICALITY.get(StaticUtils.getExceptionMessage(ae)), ae);
        }
        value = ASN1OctetString.decodeAsOctetString(elements[2]);
    }
    return decode(oid, isCritical, value);
}
Also used : ASN1OctetString(com.unboundid.asn1.ASN1OctetString) ASN1Exception(com.unboundid.asn1.ASN1Exception) ASN1Element(com.unboundid.asn1.ASN1Element) ASN1OctetString(com.unboundid.asn1.ASN1OctetString) NotNull(com.unboundid.util.NotNull)

Example 3 with ASN1Exception

use of com.unboundid.asn1.ASN1Exception in project ldapsdk by pingidentity.

the class LDAPResult method readLDAPResultFrom.

/**
 * Creates a new LDAP result object with the provided message ID and with the
 * protocol op and controls read from the given ASN.1 stream reader.
 *
 * @param  messageID        The LDAP message ID for the LDAP message that is
 *                          associated with this LDAP result.
 * @param  messageSequence  The ASN.1 stream reader sequence used in the
 *                          course of reading the LDAP message elements.
 * @param  reader           The ASN.1 stream reader from which to read the
 *                          protocol op and controls.
 *
 * @return  The decoded LDAP result.
 *
 * @throws  LDAPException  If a problem occurs while reading or decoding data
 *                         from the ASN.1 stream reader.
 */
@NotNull()
static LDAPResult readLDAPResultFrom(final int messageID, @NotNull final ASN1StreamReaderSequence messageSequence, @NotNull final ASN1StreamReader reader) throws LDAPException {
    try {
        final ASN1StreamReaderSequence protocolOpSequence = reader.beginSequence();
        final byte protocolOpType = protocolOpSequence.getType();
        final ResultCode resultCode = ResultCode.valueOf(reader.readEnumerated());
        String matchedDN = reader.readString();
        if (matchedDN.isEmpty()) {
            matchedDN = null;
        }
        String diagnosticMessage = reader.readString();
        if (diagnosticMessage.isEmpty()) {
            diagnosticMessage = null;
        }
        String[] referralURLs = StaticUtils.NO_STRINGS;
        if (protocolOpSequence.hasMoreElements()) {
            final ArrayList<String> refList = new ArrayList<>(1);
            final ASN1StreamReaderSequence refSequence = reader.beginSequence();
            while (refSequence.hasMoreElements()) {
                refList.add(reader.readString());
            }
            referralURLs = new String[refList.size()];
            refList.toArray(referralURLs);
        }
        Control[] responseControls = NO_CONTROLS;
        if (messageSequence.hasMoreElements()) {
            final ArrayList<Control> controlList = new ArrayList<>(1);
            final ASN1StreamReaderSequence controlSequence = reader.beginSequence();
            while (controlSequence.hasMoreElements()) {
                controlList.add(Control.readFrom(reader));
            }
            responseControls = new Control[controlList.size()];
            controlList.toArray(responseControls);
        }
        return new LDAPResult(protocolOpType, messageID, resultCode, diagnosticMessage, matchedDN, referralURLs, responseControls);
    } catch (final LDAPException le) {
        Debug.debugException(le);
        throw le;
    } catch (final ASN1Exception ae) {
        Debug.debugException(ae);
        throw new LDAPException(ResultCode.DECODING_ERROR, ERR_RESULT_CANNOT_DECODE.get(ae.getMessage()), ae);
    } catch (final Exception e) {
        Debug.debugException(e);
        throw new LDAPException(ResultCode.DECODING_ERROR, ERR_RESULT_CANNOT_DECODE.get(StaticUtils.getExceptionMessage(e)), e);
    }
}
Also used : ASN1StreamReaderSequence(com.unboundid.asn1.ASN1StreamReaderSequence) ASN1Exception(com.unboundid.asn1.ASN1Exception) ArrayList(java.util.ArrayList) ASN1Exception(com.unboundid.asn1.ASN1Exception) NotNull(com.unboundid.util.NotNull)

Example 4 with ASN1Exception

use of com.unboundid.asn1.ASN1Exception in project ldapsdk by pingidentity.

the class GetAuthorizationEntryResponseControl method decodeAuthEntry.

/**
 * Decodes the provided ASN.1 element into an array of auth entry elements.
 * The first element of the array will be the auth ID, and the second element
 * will be the read-only entry.
 *
 * @param  element  The element to decode.
 *
 * @return  The decoded array of elements.
 *
 * @throws  ASN1Exception  If a problem occurs while performing ASN.1 parsing.
 *
 * @throws  LDAPException  If a problem occurs while performing LDAP parsing.
 */
@NotNull()
private static Object[] decodeAuthEntry(@NotNull final ASN1Element element) throws ASN1Exception, LDAPException {
    String authID = null;
    String authDN = null;
    final ArrayList<Attribute> attrs = new ArrayList<>(20);
    for (final ASN1Element e : ASN1Sequence.decodeAsSequence(element).elements()) {
        switch(e.getType()) {
            case TYPE_AUTHID:
                authID = ASN1OctetString.decodeAsOctetString(e).stringValue();
                break;
            case TYPE_AUTHDN:
                authDN = ASN1OctetString.decodeAsOctetString(e).stringValue();
                break;
            case TYPE_ATTRIBUTES:
                for (final ASN1Element ae : ASN1Sequence.decodeAsSequence(e).elements()) {
                    attrs.add(Attribute.decode(ASN1Sequence.decodeAsSequence(ae)));
                }
                break;
            default:
                throw new LDAPException(ResultCode.DECODING_ERROR, ERR_GET_AUTHORIZATION_ENTRY_RESPONSE_INVALID_ENTRY_TYPE.get(StaticUtils.toHex(e.getType())));
        }
    }
    return new Object[] { authID, new ReadOnlyEntry(authDN, attrs) };
}
Also used : ReadOnlyEntry(com.unboundid.ldap.sdk.ReadOnlyEntry) LDAPException(com.unboundid.ldap.sdk.LDAPException) Attribute(com.unboundid.ldap.sdk.Attribute) ASN1Element(com.unboundid.asn1.ASN1Element) ArrayList(java.util.ArrayList) ASN1OctetString(com.unboundid.asn1.ASN1OctetString) NotNull(com.unboundid.util.NotNull)

Example 5 with ASN1Exception

use of com.unboundid.asn1.ASN1Exception in project ldapsdk by pingidentity.

the class Attribute method decode.

/**
 * Decodes the provided ASN.1 sequence as an LDAP attribute.
 *
 * @param  encodedAttribute  The ASN.1 sequence to be decoded as an LDAP
 *                           attribute.  It must not be {@code null}.
 *
 * @return  The decoded LDAP attribute.
 *
 * @throws  LDAPException  If a problem occurs while attempting to decode the
 *                         provided ASN.1 sequence as an LDAP attribute.
 */
@NotNull()
public static Attribute decode(@NotNull final ASN1Sequence encodedAttribute) throws LDAPException {
    Validator.ensureNotNull(encodedAttribute);
    final ASN1Element[] elements = encodedAttribute.elements();
    if (elements.length != 2) {
        throw new LDAPException(ResultCode.DECODING_ERROR, ERR_ATTR_DECODE_INVALID_COUNT.get(elements.length));
    }
    final String name = ASN1OctetString.decodeAsOctetString(elements[0]).stringValue();
    final ASN1Set valueSet;
    try {
        valueSet = ASN1Set.decodeAsSet(elements[1]);
    } catch (final ASN1Exception ae) {
        Debug.debugException(ae);
        throw new LDAPException(ResultCode.DECODING_ERROR, ERR_ATTR_DECODE_VALUE_SET.get(StaticUtils.getExceptionMessage(ae)), ae);
    }
    final ASN1OctetString[] values = new ASN1OctetString[valueSet.elements().length];
    for (int i = 0; i < values.length; i++) {
        values[i] = ASN1OctetString.decodeAsOctetString(valueSet.elements()[i]);
    }
    return new Attribute(name, CaseIgnoreStringMatchingRule.getInstance(), values);
}
Also used : ASN1OctetString(com.unboundid.asn1.ASN1OctetString) ASN1Set(com.unboundid.asn1.ASN1Set) ASN1Exception(com.unboundid.asn1.ASN1Exception) ASN1Element(com.unboundid.asn1.ASN1Element) ASN1OctetString(com.unboundid.asn1.ASN1OctetString) NotNull(com.unboundid.util.NotNull)

Aggregations

IOException (java.io.IOException)18 Asn1Exception (es.gob.jmulticard.asn1.Asn1Exception)16 ASN1Exception (com.unboundid.asn1.ASN1Exception)12 TlvException (es.gob.jmulticard.asn1.TlvException)12 Asn1Exception (sun.security.krb5.Asn1Exception)11 ASN1Element (com.unboundid.asn1.ASN1Element)8 ASN1OctetString (com.unboundid.asn1.ASN1OctetString)8 NotNull (com.unboundid.util.NotNull)8 Iso7816FourCardException (es.gob.jmulticard.card.iso7816four.Iso7816FourCardException)7 CertificateException (java.security.cert.CertificateException)7 X509Certificate (java.security.cert.X509Certificate)7 Asn1Exception (org.kse.utilities.asn1.Asn1Exception)7 ASN1Exception (org.wildfly.security.asn1.ASN1Exception)6 ApduConnectionException (es.gob.jmulticard.apdu.connection.ApduConnectionException)5 Cdf (es.gob.jmulticard.asn1.der.pkcs15.Cdf)5 CryptoCardException (es.gob.jmulticard.card.CryptoCardException)5 ASN1Sequence (com.unboundid.asn1.ASN1Sequence)4 DecoderObject (es.gob.jmulticard.asn1.DecoderObject)4 InvalidCardException (es.gob.jmulticard.card.InvalidCardException)4 ArrayList (java.util.ArrayList)4