mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

Manuel Gaupp
02.13.2014 1a32ba623a05567be6be1203a8025b82dd4f153c
CR-2890: Port certificateSyntax and certificateExactMatch to SDK
6 files added
13 files modified
3471 ■■■■ changed files
opendj-core/src/main/java/org/forgerock/opendj/io/ASN1Reader.java 34 ●●●●● patch | view | raw | blame | history
opendj-core/src/main/java/org/forgerock/opendj/io/AbstractASN1Reader.java 25 ●●●●● patch | view | raw | blame | history
opendj-core/src/main/java/org/forgerock/opendj/ldap/GSERParser.java 406 ●●●●● patch | view | raw | blame | history
opendj-core/src/main/java/org/forgerock/opendj/ldap/schema/CertificateExactAssertionSyntaxImpl.java 71 ●●●●● patch | view | raw | blame | history
opendj-core/src/main/java/org/forgerock/opendj/ldap/schema/CertificateExactMatchingRuleImpl.java 241 ●●●●● patch | view | raw | blame | history
opendj-core/src/main/java/org/forgerock/opendj/ldap/schema/CertificateSyntaxImpl.java 181 ●●●●● patch | view | raw | blame | history
opendj-core/src/main/java/org/forgerock/opendj/ldap/schema/CoreSchema.java 1539 ●●●● patch | view | raw | blame | history
opendj-core/src/main/java/org/forgerock/opendj/ldap/schema/CoreSchemaImpl.java 108 ●●●●● patch | view | raw | blame | history
opendj-core/src/main/java/org/forgerock/opendj/ldap/schema/GenerateCoreSchema.java 7 ●●●●● patch | view | raw | blame | history
opendj-core/src/main/java/org/forgerock/opendj/ldap/schema/Schema.java 43 ●●●●● patch | view | raw | blame | history
opendj-core/src/main/java/org/forgerock/opendj/ldap/schema/SchemaBuilder.java 25 ●●●●● patch | view | raw | blame | history
opendj-core/src/main/java/org/forgerock/opendj/ldap/schema/SchemaConstants.java 27 ●●●●● patch | view | raw | blame | history
opendj-core/src/main/resources/com/forgerock/opendj/ldap/core.properties 40 ●●●●● patch | view | raw | blame | history
opendj-core/src/test/java/org/forgerock/opendj/io/ASN1ReaderTestCase.java 31 ●●●●● patch | view | raw | blame | history
opendj-core/src/test/java/org/forgerock/opendj/ldap/GSERParserTestCase.java 299 ●●●●● patch | view | raw | blame | history
opendj-core/src/test/java/org/forgerock/opendj/ldap/schema/CertificateExactMatchingRuleImplTest.java 212 ●●●●● patch | view | raw | blame | history
opendj-core/src/test/java/org/forgerock/opendj/ldap/schema/CertificateSyntaxTest.java 166 ●●●●● patch | view | raw | blame | history
opendj-core/src/test/java/org/forgerock/opendj/ldap/schema/SyntaxTestCase.java 3 ●●●● patch | view | raw | blame | history
opendj-core/src/test/java/org/forgerock/opendj/ldif/LDIFChangeRecordReaderTestCase.java 13 ●●●● patch | view | raw | blame | history
opendj-core/src/main/java/org/forgerock/opendj/io/ASN1Reader.java
@@ -23,6 +23,7 @@
 *
 *      Copyright 2006-2008 Sun Microsystems, Inc.
 *      Portions copyright 2012-2013 ForgeRock AS.
 *      Portions Copyright 2014 Manuel Gaupp
 */
package org.forgerock.opendj.io;
@@ -338,9 +339,9 @@
    void readStartSequence() throws DecodeException, IOException;
    /**
     * Reads the next element as an explicit tag having the Universal Sequence
     * ASN.1 type tag. All further reads will read the elements in the explicit
     * tag until {@link #readEndExplicitTag()} is called.
     * Reads the next element as an explicit ignoring the ASN.1 type tag. All
     * further reads will read the elements in the explicit tag until
     * {@link #readEndExplicitTag()} is called.
     *
     * @throws DecodeException
     *             If the element cannot be decoded as an explicit tag.
@@ -350,6 +351,20 @@
    void readStartExplicitTag() throws DecodeException, IOException;
    /**
     * Reads the next element as an explicit tag having the provided tag type.
     * All further reads will read the elements in the explicit tag until
     * {@link #readEndExplicitTag()} is called.
     *
     * @param type
     *            The expected type tag of the element.
     * @throws DecodeException
     *             If the element cannot be decoded as an explicit tag.
     * @throws IOException
     *             If an unexpected IO error occurred.
     */
    void readStartExplicitTag(byte type) throws DecodeException, IOException;
    /**
     * Reads the next element as a sequence having the provided type tag. All
     * further reads will read the elements in the sequence until
     * {@link #readEndSequence()} is called.
@@ -399,4 +414,17 @@
     *             If an unexpected IO error occurred.
     */
    ASN1Reader skipElement() throws DecodeException, IOException;
    /**
     * Skips the next element having the provided type tag without decoding it.
     *
     * @param type
     *            The expected type tag of the element.
     * @return A reference to this ASN.1 reader.
     * @throws DecodeException
     *             If the next element does not have the provided type tag.
     * @throws IOException
     *             If an unexpected IO error occurred.
     */
    ASN1Reader skipElement(byte type) throws DecodeException, IOException;
}
opendj-core/src/main/java/org/forgerock/opendj/io/AbstractASN1Reader.java
@@ -23,6 +23,7 @@
 *
 *      Copyright 2006-2008 Sun Microsystems, Inc.
 *      Portions copyright 2012-2013 ForgeRock AS.
 *      Portions Copyright 2014 Manuel Gaupp
 */
package org.forgerock.opendj.io;
@@ -132,6 +133,17 @@
    /**
     * {@inheritDoc}
     */
    public void readStartExplicitTag(byte type) throws IOException {
        if (type == 0x00) {
            type = (ASN1.TYPE_MASK_CONTEXT | ASN1.TYPE_MASK_CONSTRUCTED);
        }
        checkType(type);
        readStartExplicitTag();
    }
    /**
     * {@inheritDoc}
     */
    public void readStartSequence(byte type) throws IOException {
        if (type == 0x00) {
            type = ASN1.UNIVERSAL_SEQUENCE_TYPE;
@@ -153,6 +165,19 @@
        readStartSet();
    }
    /**
     * {@inheritDoc}
     */
    public ASN1Reader skipElement(final byte expectedType) throws IOException {
        if (peekType() != expectedType) {
            final LocalizableMessage message =
                    ERR_ASN1_UNEXPECTED_TAG.get(expectedType, peekType());
            throw DecodeException.fatalError(message);
        }
        skipElement();
        return this;
    }
    private void checkType(final byte expectedType) throws IOException {
        if (peekType() != expectedType) {
            final LocalizableMessage message =
opendj-core/src/main/java/org/forgerock/opendj/ldap/GSERParser.java
New file
@@ -0,0 +1,406 @@
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
 * or http://forgerock.org/license/CDDLv1.0.html.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at legal-notices/CDDLv1_0.txt.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information:
 *      Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 *
 *
 *      Copyright 2013-2014 Manuel Gaupp
 */
package org.forgerock.opendj.ldap;
import java.math.BigInteger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.forgerock.util.Reject;
import org.forgerock.i18n.LocalizableMessage;
import static com.forgerock.opendj.ldap.CoreMessages.WARN_GSER_NO_VALID_IDENTIFIEDCHOICE;
import static com.forgerock.opendj.ldap.CoreMessages.WARN_GSER_NO_VALID_IDENTIFIER;
import static com.forgerock.opendj.ldap.CoreMessages.WARN_GSER_NO_VALID_INTEGER;
import static com.forgerock.opendj.ldap.CoreMessages.WARN_GSER_NO_VALID_SEPARATOR;
import static com.forgerock.opendj.ldap.CoreMessages.WARN_GSER_NO_VALID_STRING;
import static com.forgerock.opendj.ldap.CoreMessages.WARN_GSER_PATTERN_NO_MATCH;
import static com.forgerock.opendj.ldap.CoreMessages.WARN_GSER_SPACE_CHAR_EXPECTED;
/**
 * This class implements a parser for strings which are encoded using the
 * Generic String Encoding Rules (GSER) defined in RFC 3641.
 *
 * @see <a href="http://tools.ietf.org/html/rfc3641">RFC 3641 - Generic String
 * Encoding Rules (GSER) for ASN.1 Types</a>
 */
public final class GSERParser {
    private final String gserValue;
    private int pos;
    private final int length;
    /**
     * Pattern to match an identifier defined in RFC 3641, section 3.4.
     * <pre>
     * An &lt;identifier&gt; conforms to the definition of an identifier in ASN.1
     * notation (Clause 11.3 of X.680 [8]).  It begins with a lowercase
     * letter and is followed by zero or more letters, digits, and hyphens.
     * A hyphen is not permitted to be the last character, nor is it to be
     * followed by another hyphen.  The case of letters in an identifier is
     * always significant.
     *
     *    identifier    = lowercase *alphanumeric *(hyphen 1*alphanumeric)
     *    alphanumeric  = uppercase / lowercase / decimal-digit
     *    uppercase     = %x41-5A  ; "A" to "Z"
     *    lowercase     = %x61-7A  ; "a" to "z"
     *    decimal-digit = %x30-39  ; "0" to "9"
     *    hyphen        = "-"
     * </pre>
     */
    private static final Pattern GSER_IDENTIFIER = Pattern.compile("^([a-z]([A-Za-z0-9]|(-[A-Za-z0-9]))*)");
    /**
     * Pattern to match the identifier part (including the colon) of an
     * IdentifiedChoiceValue defined in RFC 3641, section 3.12.
     * <pre>
     *    IdentifiedChoiceValue = identifier ":" Value
     * </pre>
     */
    private static final Pattern GSER_CHOICE_IDENTIFIER = Pattern.compile("^([a-z]([A-Za-z0-9]|(-[A-Za-z0-9]))*:)");
    /**
     * Pattern to match "sp", containing zero, one or more space characters.
     * <pre>
     *    sp = *%x20  ; zero, one or more space characters
     * </pre>
     */
    private static final Pattern GSER_SP = Pattern.compile("^( *)");
    /**
     * Pattern to match "msp", containing at least one space character.
     * <pre>
     *    msp = 1*%x20  ; one or more space characters
     * </pre>
     */
    private static final Pattern GSER_MSP = Pattern.compile("^( +)");
    /**
     * Pattern to match an Integer value.
     */
    private static final Pattern GSER_INTEGER = Pattern.compile("^(\\d+)");
    /**
     * Pattern to match a GSER StringValue, defined in RFC 3641, section 3.2:
     * <pre>
     * Any embedded double quotes in the resulting UTF-8 character string
     * are escaped by repeating the double quote characters.
     *
     * [...]
     *
     *    StringValue       = dquote *SafeUTF8Character dquote
     *    dquote            = %x22 ; &quot; (double quote)
     * </pre>
     */
    private static final Pattern GSER_STRING = Pattern.compile("^(\"([^\"]|(\"\"))*\")");
    /**
     * Pattern to match the beginning of a GSER encoded Sequence.
     * <pre>
     *    SequenceValue = ComponentList
     *    ComponentList = "{" [ sp NamedValue *( "," sp NamedValue) ] sp "}"
     * </pre>
     */
    private static final Pattern GSER_SEQUENCE_START = Pattern.compile("^(\\{)");
    /**
     * Pattern to match the end of a GSER encoded Sequence.
     * <pre>
     *    SequenceValue = ComponentList
     *    ComponentList = "{" [ sp NamedValue *( "," sp NamedValue) ] sp "}"
     * </pre>
     */
    private static final Pattern GSER_SEQUENCE_END = Pattern.compile("^(\\})");
    /**
     * Pattern to match the separator used in GSER encoded sequences.
     */
    private static final Pattern GSER_SEP = Pattern.compile("^(,)");
    /**
     * Creates a new GSER Parser.
     *
     * @param value the GSER encoded String value
     */
    public GSERParser(CharSequence value) {
        Reject.checkNotNull(value);
        this.gserValue = value.toString();
        this.pos = 0;
        this.length = value.length();
    }
    /**
     * Determines if the GSER String contains at least one character to be read.
     *
     * @return <code>true</code> if there is at least one remaining character or
     * <code>false</code> otherwise.
     */
    public boolean hasNext() {
        return (pos < length);
    }
    /**
     * Determines if the remaining GSER String matches the provided pattern.
     *
     * @param pattern the pattern to search for
     *
     * @return <code>true</code> if the remaining string matches the pattern or
     * <code>false</code> otherwise.
     */
    private boolean hasNext(Pattern pattern) {
        if (!hasNext()) {
            return false;
        }
        Matcher matcher = pattern.matcher(gserValue.substring(pos, length));
        return matcher.find();
    }
    /**
     * Returns the String matched by the first capturing group of the pattern.
     * The parser advances past the input matched by the first capturing group.
     *
     * @param pattern the pattern to search for
     *
     * @return the String matched by the first capturing group of the pattern
     *
     * @throws DecodeException If no match could be found
     */
    private String next(Pattern pattern) throws DecodeException {
        Matcher matcher = pattern.matcher(gserValue.substring(pos, length));
        if (matcher.find() && matcher.groupCount() >= 1) {
            pos += matcher.end(1);
            return matcher.group(1);
        } else {
            final LocalizableMessage msg =
                    WARN_GSER_PATTERN_NO_MATCH.get(pattern.pattern(),
                                                   gserValue.substring(pos, length));
            throw DecodeException.error(msg);
        }
    }
    /**
     * Skips the input matched by the first capturing group.
     *
     * @param pattern the pattern to search for
     *
     * @throws DecodeException If no match could be found
     */
    private void skip(Pattern pattern) throws DecodeException {
        Matcher matcher = pattern.matcher(gserValue.substring(pos, length));
        if (matcher.find() && matcher.groupCount() >= 1) {
            pos += matcher.end(1);
        } else {
            final LocalizableMessage msg =
                    WARN_GSER_PATTERN_NO_MATCH.get(pattern.pattern(),
                                                   gserValue.substring(pos, length));
            throw DecodeException.error(msg);
        }
    }
    /**
     * Skips the input matching zero, one or more space characters.
     *
     * @return reference to this GSERParser
     *
     * @throws DecodeException If no match could be found
     */
    public GSERParser skipSP() throws DecodeException {
        skip(GSER_SP);
        return this;
    }
    /**
     * Skips the input matching one or more space characters.
     *
     * @return reference to this GSERParser
     *
     * @throws DecodeException If no match could be found
     */
    public GSERParser skipMSP() throws DecodeException {
        skip(GSER_MSP);
        return this;
    }
    /**
     * Skips the input matching the start of a sequence and subsequent space
     * characters.
     *
     * @return reference to this GSERParser
     *
     * @throws DecodeException If the input does not match the start of a
     * sequence
     */
    public GSERParser readStartSequence() throws DecodeException {
        next(GSER_SEQUENCE_START);
        skip(GSER_SP);
        return this;
    }
    /**
     * Skips the input matching the end of a sequence and preceding space
     * characters.
     *
     * @return reference to this GSERParser
     *
     * @throws DecodeException If the input does not match the end of a sequence
     */
    public GSERParser readEndSequence() throws DecodeException {
        skip(GSER_SP);
        next(GSER_SEQUENCE_END);
        return this;
    }
    /**
     * Skips the input matching the separator pattern (",") and subsequenct
     * space characters.
     *
     * @return reference to this GSERParser
     *
     * @throws DecodeException If the input does not match the separator
     * pattern.
     */
    public GSERParser skipSeparator() throws DecodeException {
        if (!hasNext(GSER_SEP)) {
            final LocalizableMessage msg =
                    WARN_GSER_NO_VALID_SEPARATOR.get(gserValue.substring(pos, length));
            throw DecodeException.error(msg);
        }
        skip(GSER_SEP);
        skip(GSER_SP);
        return this;
    }
    /**
     * Returns the next element as a String.
     *
     * @return the input matching the String pattern
     *
     * @throws DecodeException If the input does not match the string pattern.
     */
    public String nextString() throws DecodeException {
        if (!hasNext(GSER_STRING)) {
            final LocalizableMessage msg =
                    WARN_GSER_NO_VALID_STRING.get(gserValue.substring(pos, length));
            throw DecodeException.error(msg);
        }
        String str = next(GSER_STRING);
        // Strip leading and trailing dquotes; unescape double dquotes
        return str.substring(1, str.length() - 1).replace("\"\"", "\"");
    }
    /**
     * Returns the next element as an Integer.
     *
     * @return the input matching the integer pattern
     *
     * @throws DecodeException If the input does not match the integer pattern
     */
    public int nextInteger() throws DecodeException {
        if (!hasNext(GSER_INTEGER)) {
            final LocalizableMessage msg =
                    WARN_GSER_NO_VALID_INTEGER.get(gserValue.substring(pos, length));
            throw DecodeException.error(msg);
        }
        return Integer.valueOf(next(GSER_INTEGER)).intValue();
    }
    /**
     * Returns the next element as a BigInteger.
     *
     * @return the input matching the integer pattern
     *
     * @throws DecodeException If the input does not match the integer pattern
     */
    public BigInteger nextBigInteger() throws DecodeException {
        if (!hasNext(GSER_INTEGER)) {
            final LocalizableMessage msg =
                    WARN_GSER_NO_VALID_INTEGER.get(gserValue.substring(pos, length));
            throw DecodeException.error(msg);
        }
        return new BigInteger(next(GSER_INTEGER));
    }
    /**
     * Returns the identifier of the next NamedValue element.
     *
     * @return the identifier of the NamedValue element
     *
     * @throws DecodeException If the input does not match the identifier
     * pattern of a NamedValue
     */
    public String nextNamedValueIdentifier() throws DecodeException {
        if (!hasNext(GSER_IDENTIFIER)) {
            final LocalizableMessage msg =
                    WARN_GSER_NO_VALID_IDENTIFIER.get(gserValue.substring(pos, length));
            throw DecodeException.error(msg);
        }
        String identifier = next(GSER_IDENTIFIER);
        if (!hasNext(GSER_MSP)) {
            final LocalizableMessage msg =
                    WARN_GSER_SPACE_CHAR_EXPECTED.get(gserValue.substring(pos, length));
            throw DecodeException.error(msg);
        }
        skipMSP();
        return identifier;
    }
    /**
     * Return the identifier of the next IdentifiedChoiceValue element.
     *
     * @return the identifier of the IdentifiedChoiceValue element
     *
     * @throws DecodeException If the input does not match the identifier
     * pattern of an IdentifiedChoiceValue
     */
    public String nextChoiceValueIdentifier() throws DecodeException {
        if (!hasNext(GSER_CHOICE_IDENTIFIER)) {
            final LocalizableMessage msg =
                    WARN_GSER_NO_VALID_IDENTIFIEDCHOICE.get(gserValue.substring(pos, length));
            throw DecodeException.error(msg);
        }
        String identifier = next(GSER_CHOICE_IDENTIFIER);
        // Remove the colon at the end of the identifier
        return identifier.substring(0, identifier.length() - 1);
    }
    /**
     * Returns the GSER encoded String value.
     *
     * @return The GSER encoded String value.
     */
    @Override
    public String toString() {
        return gserValue;
    }
}
opendj-core/src/main/java/org/forgerock/opendj/ldap/schema/CertificateExactAssertionSyntaxImpl.java
New file
@@ -0,0 +1,71 @@
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
 * or http://forgerock.org/license/CDDLv1.0.html.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at legal-notices/CDDLv1_0.txt.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information:
 *      Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 *
 *
 *      Copyright 2009 Sun Microsystems, Inc.
 *      Portions Copyright 2014 Manuel Gaupp
 */
package org.forgerock.opendj.ldap.schema;
import static org.forgerock.opendj.ldap.schema.SchemaConstants.SYNTAX_CERTIFICATE_EXACT_ASSERTION_NAME;
import org.forgerock.i18n.LocalizableMessageBuilder;
import org.forgerock.opendj.ldap.ByteSequence;
/**
 * This class defines the Certificate Exact Assertion attribute syntax, which
 * contains components for matching X.509 certificates.
 */
final class CertificateExactAssertionSyntaxImpl extends AbstractSyntaxImpl {
    /**
     * {@inheritDoc}
     */
    public String getName() {
        return SYNTAX_CERTIFICATE_EXACT_ASSERTION_NAME;
    }
    /**
     * {@inheritDoc}
     */
    @Override
    public boolean isBEREncodingRequired() {
        return false;
    }
    /**
     * {@inheritDoc}
     */
    public boolean isHumanReadable() {
        return true;
    }
    /**
     * {@inheritDoc}
     */
    public boolean valueIsAcceptable(final Schema schema, final ByteSequence value,
            final LocalizableMessageBuilder invalidReason) {
        // This method will never be called because this syntax is only used
        // within assertions.
        return true;
    }
}
opendj-core/src/main/java/org/forgerock/opendj/ldap/schema/CertificateExactMatchingRuleImpl.java
New file
@@ -0,0 +1,241 @@
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
 * or http://forgerock.org/license/CDDLv1.0.html.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at legal-notices/CDDLv1_0.txt.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information:
 *      Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 *
 *
 *      Copyright 2006-2009 Sun Microsystems, Inc.
 *      Portions Copyright 2013-2014 Manuel Gaupp
 */
package org.forgerock.opendj.ldap.schema;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.math.BigInteger;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import javax.security.auth.x500.X500Principal;
import com.forgerock.opendj.util.StaticUtils;
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.i18n.slf4j.LocalizedLogger;
import org.forgerock.opendj.ldap.Assertion;
import org.forgerock.opendj.ldap.ByteSequence;
import org.forgerock.opendj.ldap.ByteString;
import org.forgerock.opendj.ldap.ByteStringBuilder;
import org.forgerock.opendj.ldap.DecodeException;
import org.forgerock.opendj.ldap.GSERParser;
import org.forgerock.opendj.ldap.DN;
import static com.forgerock.opendj.ldap.CoreMessages.ERR_MR_CERTIFICATE_MATCH_EXPECTED_END;
import static com.forgerock.opendj.ldap.CoreMessages.ERR_MR_CERTIFICATE_MATCH_GSER_INVALID;
import static com.forgerock.opendj.ldap.CoreMessages.ERR_MR_CERTIFICATE_MATCH_INVALID_DN;
import static com.forgerock.opendj.ldap.CoreMessages.ERR_MR_CERTIFICATE_MATCH_IDENTIFIER_NOT_FOUND;
import static com.forgerock.opendj.ldap.CoreMessages.ERR_MR_CERTIFICATE_MATCH_PARSE_ERROR;
/**
 * This class implements the certificateExactMatch matching rule defined in
 * X.509 and referenced in RFC 4523.
 */
final class CertificateExactMatchingRuleImpl
        extends AbstractMatchingRuleImpl {
    private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
    /**
     * The GSER identifier for the serialNumber named value.
     */
    private static final String GSER_ID_SERIALNUMBER = "serialNumber";
    /**
     * The GSER identifier for the issuer named value.
     */
    private static final String GSER_ID_ISSUER = "issuer";
    /**
     * The GSER identifier for the rdnSequence IdentifiedChoiceValue.
     */
    private static final String GSER_ID_RDNSEQUENCE = "rdnSequence";
    /**
     * Retrieves the normalized form of the provided value, which is best suited
     * for efficiently performing matching operations on that value.
     *
     * @param value The value to be normalized.
     *
     * @return The normalized version of the provided value.
     *
     * @throws DirectoryException If the provided value is invalid according to
     * the associated attribute syntax.
     */
    public ByteString normalizeAttributeValue(final Schema schema, final ByteSequence value)
            throws DecodeException {
        final BigInteger serialNumber;
        final String dnstring;
        String certificateIssuer;
        // Read the X.509 Certificate and extract serialNumber and issuerDN
        try {
            CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
            InputStream inputStream = new ByteArrayInputStream(value.toByteArray());
            X509Certificate certValue = (X509Certificate) certFactory
                    .generateCertificate(inputStream);
            serialNumber = certValue.getSerialNumber();
            X500Principal issuer = certValue.getIssuerX500Principal();
            dnstring = issuer.getName(X500Principal.RFC2253);
        } catch (CertificateException ce) {
            // There seems to be a problem while parsing the certificate.
            final LocalizableMessage message =
                    ERR_MR_CERTIFICATE_MATCH_PARSE_ERROR.get(ce.getMessage());
            logger.trace(message);
            // return the raw bytes as a fall back
            return value.toByteString();
        }
        // Normalize the DN
        try {
            DN dn = DN.valueOf(dnstring, schema.asNonStrictSchema());
            certificateIssuer = dn.toNormalizedString();
        } catch (Exception e) {
            // We couldn't normalize the DN for some reason.
            final LocalizableMessage message
                = ERR_MR_CERTIFICATE_MATCH_INVALID_DN.get(dnstring,
                    StaticUtils.getExceptionMessage(e));
            throw DecodeException.error(message);
        }
        // Create the encoded value
        return createEncodedValue(serialNumber, certificateIssuer);
    }
    /**
     * {@inheritDoc}
     */
    public Assertion getAssertion(final Schema schema, final ByteSequence value)
            throws DecodeException {
        // validate and normalize the GSER structure
        // according to the definitions from RFC 4523, Appendix A.1
        final BigInteger serialNumber;
        final String dnstring;
        String certificateIssuer;
        final GSERParser parser;
        String identifier;
        parser = new GSERParser(value.toString());
        try {
            // the String starts with a sequence
            parser.readStartSequence();
        } catch (DecodeException e) {
            logger.traceException(e);
            // Assume the assertion value is a certificate and parse issuer and
            // serial number. If the value is not even a certificate then the
            // raw bytes will be returned.
            return new DefaultEqualityAssertion(normalizeAttributeValue(schema, value));
        }
        try {
            // the first namedValue is serialNumber
            identifier = parser.nextNamedValueIdentifier();
            if (!identifier.equals(GSER_ID_SERIALNUMBER)) {
                LocalizableMessage message =
                        ERR_MR_CERTIFICATE_MATCH_IDENTIFIER_NOT_FOUND.get(GSER_ID_SERIALNUMBER);
                throw DecodeException.error(message);
            }
            // The value for the serialNumber
            serialNumber = parser.nextBigInteger();
            // separator
            parser.skipSeparator();
            // the next namedValue is issuer
            identifier = parser.nextNamedValueIdentifier();
            if (!identifier.equals(GSER_ID_ISSUER)) {
                LocalizableMessage message =
                        ERR_MR_CERTIFICATE_MATCH_IDENTIFIER_NOT_FOUND.get(GSER_ID_ISSUER);
                throw DecodeException.error(message);
            }
            // expecting "rdnSequence:"
            identifier = parser.nextChoiceValueIdentifier();
            if (!identifier.equals(GSER_ID_RDNSEQUENCE)) {
                LocalizableMessage message =
                        ERR_MR_CERTIFICATE_MATCH_IDENTIFIER_NOT_FOUND.get(GSER_ID_RDNSEQUENCE);
                throw DecodeException.error(message);
            }
            // now the issuer dn
            dnstring = parser.nextString();
            // Closing the Sequence
            parser.readEndSequence();
            // There should not be additional characters
            if (parser.hasNext()) {
                LocalizableMessage message = ERR_MR_CERTIFICATE_MATCH_EXPECTED_END.get();
                throw DecodeException.error(message);
            }
        } catch (DecodeException e) {
            LocalizableMessage message =
                    ERR_MR_CERTIFICATE_MATCH_GSER_INVALID.get(StaticUtils.getExceptionMessage(e));
            throw DecodeException.error(message);
        }
        // Normalize the DN
        try {
            DN dn = DN.valueOf(dnstring, schema.asNonStrictSchema());
            certificateIssuer = dn.toNormalizedString();
        } catch (Exception e) {
            logger.traceException(e);
            // We couldn't normalize the DN for some reason.
            LocalizableMessage message =
                    ERR_MR_CERTIFICATE_MATCH_INVALID_DN.get(dnstring,
                            StaticUtils.getExceptionMessage(e));
            throw DecodeException.error(message);
        }
        // Create the encoded value
        return new DefaultEqualityAssertion(createEncodedValue(serialNumber, certificateIssuer));
    }
    /**
     * Creates the value containing serialNumber and issuer DN.
     *
     * @param serial the serialNumber
     * @param issuerDN the issuer DN String
     *
     * @return the encoded ByteString
     */
    private static ByteString createEncodedValue(BigInteger serial,
            String issuerDN) {
        ByteStringBuilder builder = new ByteStringBuilder();
        builder.append(StaticUtils.getBytes(issuerDN));
        builder.append((byte) 0); // Separator
        builder.append(serial.toByteArray());
        return builder.toByteString();
    }
}
opendj-core/src/main/java/org/forgerock/opendj/ldap/schema/CertificateSyntaxImpl.java
@@ -22,63 +22,208 @@
 *
 *
 *      Copyright 2009 Sun Microsystems, Inc.
 *      Portions Copyright 2014 Manuel Gaupp
 */
package org.forgerock.opendj.ldap.schema;
import static org.forgerock.opendj.ldap.schema.SchemaConstants.EMR_OCTET_STRING_OID;
import java.io.IOException;
import static com.forgerock.opendj.ldap.CoreMessages.ERR_SYNTAX_CERTIFICATE_INVALID_DER;
import static com.forgerock.opendj.ldap.CoreMessages.ERR_SYNTAX_CERTIFICATE_INVALID_VERSION;
import static com.forgerock.opendj.ldap.CoreMessages.ERR_SYNTAX_CERTIFICATE_NO_ELEMENT_EXPECTED;
import static com.forgerock.opendj.ldap.CoreMessages.ERR_SYNTAX_CERTIFICATE_NOTVALID;
import static com.forgerock.opendj.ldap.CoreMessages.ERR_SYNTAX_CERTIFICATE_ONLY_VALID_V23;
import static com.forgerock.opendj.ldap.CoreMessages.ERR_SYNTAX_CERTIFICATE_ONLY_VALID_V3;
import static org.forgerock.opendj.ldap.schema.SchemaConstants.EMR_CERTIFICATE_EXACT_OID;
import static org.forgerock.opendj.ldap.schema.SchemaConstants.OMR_OCTET_STRING_OID;
import static org.forgerock.opendj.ldap.schema.SchemaConstants.SYNTAX_CERTIFICATE_NAME;
import static org.forgerock.opendj.io.ASN1.*;
import com.forgerock.opendj.util.StaticUtils;
import org.forgerock.i18n.LocalizableMessageBuilder;
import org.forgerock.opendj.io.ASN1;
import org.forgerock.opendj.io.ASN1Reader;
import org.forgerock.opendj.ldap.ByteSequence;
import org.forgerock.opendj.ldap.DecodeException;
/**
 * This class implements the certificate attribute syntax. This should be
 * restricted to holding only X.509 certificates, but we will accept any set of
 * bytes. It will be treated much like the octet string attribute syntax.
 * This class implements the certificate attribute syntax. It is restricted to
 * accept only X.509 certificates.
 */
final class CertificateSyntaxImpl extends AbstractSyntaxImpl {
    /**
     * {@inheritDoc}
     */
    @Override
    public String getEqualityMatchingRule() {
        return EMR_OCTET_STRING_OID;
        return EMR_CERTIFICATE_EXACT_OID;
    }
    /**
     * {@inheritDoc}
     */
    @Override
    public String getName() {
        return SYNTAX_CERTIFICATE_NAME;
    }
    /**
     * {@inheritDoc}
     */
    @Override
    public String getOrderingMatchingRule() {
        return OMR_OCTET_STRING_OID;
    }
    /**
     * {@inheritDoc}
     */
    @Override
    public boolean isBEREncodingRequired() {
        return true;
    }
    /**
     * {@inheritDoc}
     */
    @Override
    public boolean isHumanReadable() {
        return false;
    }
    /**
     * Indicates whether the provided value is acceptable for use in an
     * attribute with this syntax. If it is not, then the reason may be appended
     * to the provided buffer.
     *
     * @param schema
     *            The schema in which this syntax is defined.
     * @param value
     *            The value for which to make the determination.
     * @param invalidReason
     *            The buffer to which the invalid reason should be appended.
     * @return <CODE>true</CODE> if the provided value is acceptable for use
     *         with this syntax, or <CODE>false</CODE> if not.
     * {@inheritDoc}
     */
    @Override
    public boolean valueIsAcceptable(final Schema schema, final ByteSequence value,
            final LocalizableMessageBuilder invalidReason) {
        // All values will be acceptable for the certificate syntax.
        // Skip validation if strict validation is disabled.
        if (schema.allowMalformedCertificates()) {
            return true;
        }
        // Validate the ByteSequence against the definitions of X.509, clause 7
        ASN1Reader reader = ASN1.getReader(value);
        try {
            // Certificate SIGNED SEQUENCE
            reader.readStartSequence(UNIVERSAL_SEQUENCE_TYPE);
            // CertificateContent SEQUENCE
            reader.readStartSequence(UNIVERSAL_SEQUENCE_TYPE);
            // Optional Version
            long x509Version = 0;
            if (reader.hasNextElement() && reader.peekType() == (TYPE_MASK_CONTEXT | TYPE_MASK_CONSTRUCTED)) {
                reader.readStartExplicitTag((byte) (TYPE_MASK_CONTEXT | TYPE_MASK_CONSTRUCTED));
                x509Version = reader.readInteger(UNIVERSAL_INTEGER_TYPE);
                if (x509Version < 0 || x509Version > 2) {
                    // invalid Version specified
                    invalidReason.append(ERR_SYNTAX_CERTIFICATE_INVALID_VERSION.get(x509Version));
                    return false;
                }
                if (x509Version == 0) {
                    // DEFAULT values shall not be included in DER encoded
                    // SEQUENCE (X.690, 11.5)
                    invalidReason.append(ERR_SYNTAX_CERTIFICATE_INVALID_DER.get());
                    return false;
                }
                reader.readEndExplicitTag();
            }
            // serialNumber
            reader.skipElement(UNIVERSAL_INTEGER_TYPE);
            // signature AlgorithmIdentifier
            reader.skipElement(UNIVERSAL_SEQUENCE_TYPE);
            // issuer name (SEQUENCE as of X.501, 9.2)
            reader.skipElement(UNIVERSAL_SEQUENCE_TYPE);
            // validity (SEQUENCE)
            reader.skipElement(UNIVERSAL_SEQUENCE_TYPE);
            // subject name (SEQUENCE as of X.501, 9.2)
            reader.skipElement(UNIVERSAL_SEQUENCE_TYPE);
            // SubjectPublicKeyInfo (SEQUENCE)
            reader.skipElement(UNIVERSAL_SEQUENCE_TYPE);
            // OPTIONAL issuerUniqueIdentifier
            if (reader.hasNextElement() && reader.peekType() == (TYPE_MASK_CONTEXT + 1)) {
                if (x509Version < 1) {
                    // only valid in v2 and v3
                    invalidReason.append(ERR_SYNTAX_CERTIFICATE_ONLY_VALID_V23.get("issuerUniqueIdentifier"));
                    return false;
                }
                reader.skipElement();
            }
            // OPTIONAL subjectUniqueIdentifier
            if (reader.hasNextElement() && reader.peekType() == (TYPE_MASK_CONTEXT + 2)) {
                if (x509Version < 1) {
                    // only valid in v2 and v3
                    invalidReason.append(ERR_SYNTAX_CERTIFICATE_ONLY_VALID_V23.get("subjectUniqueIdentifier"));
                    return false;
                }
                reader.skipElement();
            }
            // OPTIONAL extensions
            if (reader.hasNextElement() && reader.peekType() == ((TYPE_MASK_CONTEXT | TYPE_MASK_CONSTRUCTED) + 3)) {
                if (x509Version < 2) {
                    // only valid in v3
                    invalidReason.append(ERR_SYNTAX_CERTIFICATE_ONLY_VALID_V3.get("extensions"));
                    return false;
                }
                reader.readStartExplicitTag((byte) ((TYPE_MASK_CONTEXT | TYPE_MASK_CONSTRUCTED) + 3));
                reader.skipElement(UNIVERSAL_SEQUENCE_TYPE);
                reader.readEndExplicitTag();
            }
            // There should not be any further ASN.1 elements within this SEQUENCE
            if (reader.hasNextElement()) {
                invalidReason.append(ERR_SYNTAX_CERTIFICATE_NO_ELEMENT_EXPECTED.get());
                return false;
            }
            reader.readEndSequence(); // End CertificateContent SEQUENCE
            // AlgorithmIdentifier SEQUENCE
            reader.skipElement(UNIVERSAL_SEQUENCE_TYPE);
            // ENCRYPTED HASH BIT STRING
            reader.skipElement(UNIVERSAL_BIT_STRING_TYPE);
            // There should not be any further ASN.1 elements within this SEQUENCE
            if (reader.hasNextElement()) {
                invalidReason.append(ERR_SYNTAX_CERTIFICATE_NO_ELEMENT_EXPECTED.get());
                return false;
            }
            reader.readEndSequence(); // End Certificate SEQUENCE
            // There should not be any further ASN.1 elements
            if (reader.hasNextElement()) {
                invalidReason.append(ERR_SYNTAX_CERTIFICATE_NO_ELEMENT_EXPECTED.get());
                return false;
            }
            // End of the certificate
        } catch (DecodeException de) {
            invalidReason.append(ERR_SYNTAX_CERTIFICATE_NOTVALID.get(de));
            return false;
        } catch (IOException e) {
            invalidReason.append(StaticUtils.getExceptionMessage(e));
            return false;
        }
        // The basic structure of the value is an X.509 certificate
        return true;
    }
}
opendj-core/src/main/java/org/forgerock/opendj/ldap/schema/CoreSchema.java
@@ -23,384 +23,415 @@
 *
 *      Copyright 2009 Sun Microsystems, Inc.
 */
package org.forgerock.opendj.ldap.schema;
/**
 * The OpenDJ SDK core schema contains standard LDAP RFC schema elements. These
 * include:
 * The OpenDJ SDK core schema contains standard LDAP RFC schema elements. These include:
 * <ul>
 * <li><a href="http://tools.ietf.org/html/rfc4512">RFC 4512 - Lightweight
 * Directory Access Protocol (LDAP): Directory Information Models </a>
 * <li><a href="http://tools.ietf.org/html/rfc4517">RFC 4517 - Lightweight
 * Directory Access Protocol (LDAP): Syntaxes and Matching Rules </a>
 * <li><a href="http://tools.ietf.org/html/rfc4519">RFC 4519 - Lightweight
 * Directory Access Protocol (LDAP): Schema for User Applications </a>
 * <li><a href="http://tools.ietf.org/html/rfc4530">RFC 4530 - Lightweight
 * Directory Access Protocol (LDAP): entryUUID Operational Attribute </a>
 * <li><a href="http://tools.ietf.org/html/rfc3045">RFC 3045 - Storing Vendor
 * Information in the LDAP Root DSE </a>
 * <li><a href="http://tools.ietf.org/html/rfc3112">RFC 3112 - LDAP
 * Authentication Password Schema </a>
 * <li><a href="http://tools.ietf.org/html/rfc4512">RFC 4512 - Lightweight Directory Access Protocol (LDAP): Directory
 * Information Models </a>
 * <li><a href="http://tools.ietf.org/html/rfc4517">RFC 4517 - Lightweight Directory Access Protocol (LDAP): Syntaxes
 * and Matching Rules </a>
 * <li><a href="http://tools.ietf.org/html/rfc4519">RFC 4519 - Lightweight Directory Access Protocol (LDAP): Schema for
 * User Applications </a>
 * <li><a href="http://tools.ietf.org/html/rfc4530">RFC 4530 - Lightweight Directory Access Protocol (LDAP): entryUUID
 * Operational Attribute </a>
 * <li><a href="http://tools.ietf.org/html/rfc3045">RFC 3045 - Storing Vendor Information in the LDAP Root DSE </a>
 * <li><a href="http://tools.ietf.org/html/rfc3112">RFC 3112 - LDAP Authentication Password Schema </a>
 * </ul>
 * <p>
 * The core schema is non-strict: attempts to retrieve non-existent Attribute
 * Types will return a temporary Attribute Type having the Octet String syntax.
 * The core schema is non-strict: attempts to retrieve non-existent Attribute Types will return a temporary Attribute
 * Type having the Octet String syntax.
 */
public final class CoreSchema {
    // Core Syntaxes
    private static final Syntax ATTRIBUTE_TYPE_DESCRIPTION_SYNTAX = CoreSchemaImpl.getInstance()
            .getSyntax("1.3.6.1.4.1.1466.115.121.1.3");
    private static final Syntax AUTHENTICATION_PASSWORD_SYNTAX = CoreSchemaImpl.getInstance()
            .getSyntax("1.3.6.1.4.1.4203.1.1.2");
    private static final Syntax BINARY_SYNTAX = CoreSchemaImpl.getInstance().getSyntax(
            "1.3.6.1.4.1.1466.115.121.1.5");
    private static final Syntax BIT_STRING_SYNTAX = CoreSchemaImpl.getInstance().getSyntax(
            "1.3.6.1.4.1.1466.115.121.1.6");
    private static final Syntax BOOLEAN_SYNTAX = CoreSchemaImpl.getInstance().getSyntax(
            "1.3.6.1.4.1.1466.115.121.1.7");
    private static final Syntax CERTIFICATE_LIST_SYNTAX = CoreSchemaImpl.getInstance().getSyntax(
            "1.3.6.1.4.1.1466.115.121.1.9");
    private static final Syntax CERTIFICATE_PAIR_SYNTAX = CoreSchemaImpl.getInstance().getSyntax(
            "1.3.6.1.4.1.1466.115.121.1.10");
    private static final Syntax CERTIFICATE_SYNTAX = CoreSchemaImpl.getInstance().getSyntax(
            "1.3.6.1.4.1.1466.115.121.1.8");
    private static final Syntax COUNTRY_STRING_SYNTAX = CoreSchemaImpl.getInstance().getSyntax(
            "1.3.6.1.4.1.1466.115.121.1.11");
    private static final Syntax DELIVERY_METHOD_SYNTAX = CoreSchemaImpl.getInstance().getSyntax(
            "1.3.6.1.4.1.1466.115.121.1.14");
    private static final Syntax DIRECTORY_STRING_SYNTAX = CoreSchemaImpl.getInstance().getSyntax(
            "1.3.6.1.4.1.1466.115.121.1.15");
    private static final Syntax DIT_CONTENT_RULE_DESCRIPTION_SYNTAX = CoreSchemaImpl.getInstance()
            .getSyntax("1.3.6.1.4.1.1466.115.121.1.16");
    private static final Syntax DIT_STRUCTURE_RULE_DESCRIPTION_SYNTAX = CoreSchemaImpl
            .getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.17");
    private static final Syntax DN_SYNTAX = CoreSchemaImpl.getInstance().getSyntax(
            "1.3.6.1.4.1.1466.115.121.1.12");
    private static final Syntax ENHANCED_GUIDE_SYNTAX = CoreSchemaImpl.getInstance().getSyntax(
            "1.3.6.1.4.1.1466.115.121.1.21");
    private static final Syntax FACSIMILE_TELEPHONE_NUMBER_SYNTAX = CoreSchemaImpl.getInstance()
            .getSyntax("1.3.6.1.4.1.1466.115.121.1.22");
    private static final Syntax FAX_SYNTAX = CoreSchemaImpl.getInstance().getSyntax(
            "1.3.6.1.4.1.1466.115.121.1.23");
    private static final Syntax GENERALIZED_TIME_SYNTAX = CoreSchemaImpl.getInstance().getSyntax(
            "1.3.6.1.4.1.1466.115.121.1.24");
    private static final Syntax GUIDE_SYNTAX = CoreSchemaImpl.getInstance().getSyntax(
            "1.3.6.1.4.1.1466.115.121.1.25");
    private static final Syntax IA5_STRING_SYNTAX = CoreSchemaImpl.getInstance().getSyntax(
            "1.3.6.1.4.1.1466.115.121.1.26");
    private static final Syntax INTEGER_SYNTAX = CoreSchemaImpl.getInstance().getSyntax(
            "1.3.6.1.4.1.1466.115.121.1.27");
    private static final Syntax JPEG_SYNTAX = CoreSchemaImpl.getInstance().getSyntax(
            "1.3.6.1.4.1.1466.115.121.1.28");
    private static final Syntax LDAP_SYNTAX_DESCRIPTION_SYNTAX = CoreSchemaImpl.getInstance()
            .getSyntax("1.3.6.1.4.1.1466.115.121.1.54");
    private static final Syntax MATCHING_RULE_DESCRIPTION_SYNTAX = CoreSchemaImpl.getInstance()
            .getSyntax("1.3.6.1.4.1.1466.115.121.1.30");
    private static final Syntax MATCHING_RULE_USE_DESCRIPTION_SYNTAX = CoreSchemaImpl.getInstance()
            .getSyntax("1.3.6.1.4.1.1466.115.121.1.31");
    private static final Syntax NAME_AND_OPTIONAL_UID_SYNTAX = CoreSchemaImpl.getInstance()
            .getSyntax("1.3.6.1.4.1.1466.115.121.1.34");
    private static final Syntax NAME_FORM_DESCRIPTION_SYNTAX = CoreSchemaImpl.getInstance()
            .getSyntax("1.3.6.1.4.1.1466.115.121.1.35");
    private static final Syntax NUMERIC_STRING_SYNTAX = CoreSchemaImpl.getInstance().getSyntax(
            "1.3.6.1.4.1.1466.115.121.1.36");
    private static final Syntax OBJECT_CLASS_DESCRIPTION_SYNTAX = CoreSchemaImpl.getInstance()
            .getSyntax("1.3.6.1.4.1.1466.115.121.1.37");
    private static final Syntax OCTET_STRING_SYNTAX = CoreSchemaImpl.getInstance().getSyntax(
            "1.3.6.1.4.1.1466.115.121.1.40");
    private static final Syntax OID_SYNTAX = CoreSchemaImpl.getInstance().getSyntax(
            "1.3.6.1.4.1.1466.115.121.1.38");
    private static final Syntax OTHER_MAILBOX_SYNTAX = CoreSchemaImpl.getInstance().getSyntax(
            "1.3.6.1.4.1.1466.115.121.1.39");
    private static final Syntax POSTAL_ADDRESS_SYNTAX = CoreSchemaImpl.getInstance().getSyntax(
            "1.3.6.1.4.1.1466.115.121.1.41");
    private static final Syntax PRESENTATION_ADDRESS_SYNTAX = CoreSchemaImpl.getInstance()
            .getSyntax("1.3.6.1.4.1.1466.115.121.1.43");
    private static final Syntax PRINTABLE_STRING_SYNTAX = CoreSchemaImpl.getInstance().getSyntax(
            "1.3.6.1.4.1.1466.115.121.1.44");
    private static final Syntax PROTOCOL_INFORMATION_SYNTAX = CoreSchemaImpl.getInstance()
            .getSyntax("1.3.6.1.4.1.1466.115.121.1.42");
    private static final Syntax SUBSTRING_ASSERTION_SYNTAX = CoreSchemaImpl.getInstance()
            .getSyntax("1.3.6.1.4.1.1466.115.121.1.58");
    private static final Syntax SUPPORTED_ALGORITHM_SYNTAX = CoreSchemaImpl.getInstance()
            .getSyntax("1.3.6.1.4.1.1466.115.121.1.49");
    private static final Syntax TELEPHONE_NUMBER_SYNTAX = CoreSchemaImpl.getInstance().getSyntax(
            "1.3.6.1.4.1.1466.115.121.1.50");
    private static final Syntax TELETEX_TERMINAL_IDENTIFIER_SYNTAX = CoreSchemaImpl.getInstance()
            .getSyntax("1.3.6.1.4.1.1466.115.121.1.51");
    private static final Syntax TELEX_NUMBER_SYNTAX = CoreSchemaImpl.getInstance().getSyntax(
            "1.3.6.1.4.1.1466.115.121.1.52");
    private static final Syntax UTC_TIME_SYNTAX = CoreSchemaImpl.getInstance().getSyntax(
            "1.3.6.1.4.1.1466.115.121.1.53");
    private static final Syntax UUID_SYNTAX = CoreSchemaImpl.getInstance().getSyntax(
            "1.3.6.1.1.16.1");
    private static final Syntax ATTRIBUTE_TYPE_DESCRIPTION_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.3");
    private static final Syntax AUTHENTICATION_PASSWORD_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.4203.1.1.2");
    private static final Syntax BINARY_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.5");
    private static final Syntax BIT_STRING_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.6");
    private static final Syntax BOOLEAN_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.7");
    private static final Syntax CERTIFICATE_LIST_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.9");
    private static final Syntax CERTIFICATE_PAIR_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.10");
    private static final Syntax CERTIFICATE_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.8");
    private static final Syntax COUNTRY_STRING_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.11");
    private static final Syntax DELIVERY_METHOD_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.14");
    private static final Syntax DIRECTORY_STRING_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.15");
    private static final Syntax DIT_CONTENT_RULE_DESCRIPTION_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.16");
    private static final Syntax DIT_STRUCTURE_RULE_DESCRIPTION_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.17");
    private static final Syntax DN_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.12");
    private static final Syntax ENHANCED_GUIDE_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.21");
    private static final Syntax FACSIMILE_TELEPHONE_NUMBER_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.22");
    private static final Syntax FAX_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.23");
    private static final Syntax GENERALIZED_TIME_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.24");
    private static final Syntax GUIDE_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.25");
    private static final Syntax IA5_STRING_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.26");
    private static final Syntax INTEGER_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.27");
    private static final Syntax JPEG_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.28");
    private static final Syntax LDAP_SYNTAX_DESCRIPTION_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.54");
    private static final Syntax MATCHING_RULE_DESCRIPTION_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.30");
    private static final Syntax MATCHING_RULE_USE_DESCRIPTION_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.31");
    private static final Syntax NAME_AND_OPTIONAL_UID_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.34");
    private static final Syntax NAME_FORM_DESCRIPTION_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.35");
    private static final Syntax NUMERIC_STRING_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.36");
    private static final Syntax OBJECT_CLASS_DESCRIPTION_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.37");
    private static final Syntax OCTET_STRING_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.40");
    private static final Syntax OID_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.38");
    private static final Syntax OTHER_MAILBOX_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.39");
    private static final Syntax POSTAL_ADDRESS_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.41");
    private static final Syntax PRESENTATION_ADDRESS_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.43");
    private static final Syntax PRINTABLE_STRING_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.44");
    private static final Syntax PROTOCOL_INFORMATION_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.42");
    private static final Syntax SUBSTRING_ASSERTION_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.58");
    private static final Syntax SUPPORTED_ALGORITHM_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.49");
    private static final Syntax TELEPHONE_NUMBER_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.50");
    private static final Syntax TELETEX_TERMINAL_IDENTIFIER_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.51");
    private static final Syntax TELEX_NUMBER_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.52");
    private static final Syntax UTC_TIME_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.4.1.1466.115.121.1.53");
    private static final Syntax UUID_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.1.16.1");
    private static final Syntax X509_CERTIFICATE_EXACT_ASSERTION_SYNTAX
        = CoreSchemaImpl.getInstance().getSyntax("1.3.6.1.1.15.1");
    // Core Matching Rules
    private static final MatchingRule AUTH_PASSWORD_EXACT_MATCHING_RULE = CoreSchemaImpl
            .getInstance().getMatchingRule("1.3.6.1.4.1.4203.1.2.2");
    private static final MatchingRule BIT_STRING_MATCHING_RULE = CoreSchemaImpl.getInstance()
            .getMatchingRule("2.5.13.16");
    private static final MatchingRule BOOLEAN_MATCHING_RULE = CoreSchemaImpl.getInstance()
            .getMatchingRule("2.5.13.13");
    private static final MatchingRule CASE_EXACT_IA5_MATCHING_RULE = CoreSchemaImpl.getInstance()
            .getMatchingRule("1.3.6.1.4.1.1466.109.114.1");
    private static final MatchingRule CASE_EXACT_MATCHING_RULE = CoreSchemaImpl.getInstance()
            .getMatchingRule("2.5.13.5");
    private static final MatchingRule CASE_EXACT_ORDERING_MATCHING_RULE = CoreSchemaImpl
            .getInstance().getMatchingRule("2.5.13.6");
    private static final MatchingRule CASE_EXACT_SUBSTRINGS_MATCHING_RULE = CoreSchemaImpl
            .getInstance().getMatchingRule("2.5.13.7");
    private static final MatchingRule CASE_IGNORE_IA5_MATCHING_RULE = CoreSchemaImpl.getInstance()
            .getMatchingRule("1.3.6.1.4.1.1466.109.114.2");
    private static final MatchingRule CASE_IGNORE_IA5_SUBSTRINGS_MATCHING_RULE = CoreSchemaImpl
            .getInstance().getMatchingRule("1.3.6.1.4.1.1466.109.114.3");
    private static final MatchingRule CASE_IGNORE_LIST_MATCHING_RULE = CoreSchemaImpl.getInstance()
            .getMatchingRule("2.5.13.11");
    private static final MatchingRule CASE_IGNORE_LIST_SUBSTRINGS_MATCHING_RULE = CoreSchemaImpl
            .getInstance().getMatchingRule("2.5.13.12");
    private static final MatchingRule CASE_IGNORE_MATCHING_RULE = CoreSchemaImpl.getInstance()
            .getMatchingRule("2.5.13.2");
    private static final MatchingRule CASE_IGNORE_ORDERING_MATCHING_RULE = CoreSchemaImpl
            .getInstance().getMatchingRule("2.5.13.3");
    private static final MatchingRule CASE_IGNORE_SUBSTRINGS_MATCHING_RULE = CoreSchemaImpl
            .getInstance().getMatchingRule("2.5.13.4");
    private static final MatchingRule DIRECTORY_STRING_FIRST_COMPONENT_MATCHING_RULE =
            CoreSchemaImpl.getInstance().getMatchingRule("2.5.13.31");
    private static final MatchingRule DISTINGUISHED_NAME_MATCHING_RULE = CoreSchemaImpl
            .getInstance().getMatchingRule("2.5.13.1");
    private static final MatchingRule GENERALIZED_TIME_MATCHING_RULE = CoreSchemaImpl.getInstance()
            .getMatchingRule("2.5.13.27");
    private static final MatchingRule GENERALIZED_TIME_ORDERING_MATCHING_RULE = CoreSchemaImpl
            .getInstance().getMatchingRule("2.5.13.28");
    private static final MatchingRule INTEGER_FIRST_COMPONENT_MATCHING_RULE = CoreSchemaImpl
            .getInstance().getMatchingRule("2.5.13.29");
    private static final MatchingRule INTEGER_MATCHING_RULE = CoreSchemaImpl.getInstance()
            .getMatchingRule("2.5.13.14");
    private static final MatchingRule INTEGER_ORDERING_MATCHING_RULE = CoreSchemaImpl.getInstance()
            .getMatchingRule("2.5.13.15");
    private static final MatchingRule KEYWORD_MATCHING_RULE = CoreSchemaImpl.getInstance()
            .getMatchingRule("2.5.13.33");
    private static final MatchingRule NUMERIC_STRING_MATCHING_RULE = CoreSchemaImpl.getInstance()
            .getMatchingRule("2.5.13.8");
    private static final MatchingRule NUMERIC_STRING_ORDERING_MATCHING_RULE = CoreSchemaImpl
            .getInstance().getMatchingRule("2.5.13.9");
    private static final MatchingRule NUMERIC_STRING_SUBSTRINGS_MATCHING_RULE = CoreSchemaImpl
            .getInstance().getMatchingRule("2.5.13.10");
    private static final MatchingRule OBJECT_IDENTIFIER_FIRST_COMPONENT_MATCHING_RULE =
            CoreSchemaImpl.getInstance().getMatchingRule("2.5.13.30");
    private static final MatchingRule OBJECT_IDENTIFIER_MATCHING_RULE = CoreSchemaImpl
            .getInstance().getMatchingRule("2.5.13.0");
    private static final MatchingRule OCTET_STRING_MATCHING_RULE = CoreSchemaImpl.getInstance()
            .getMatchingRule("2.5.13.17");
    private static final MatchingRule OCTET_STRING_ORDERING_MATCHING_RULE = CoreSchemaImpl
            .getInstance().getMatchingRule("2.5.13.18");
    private static final MatchingRule OCTET_STRING_SUBSTRINGS_MATCHING_RULE = CoreSchemaImpl
            .getInstance().getMatchingRule("2.5.13.19");
    private static final MatchingRule PRESENTATION_ADDRESS_MATCHING_RULE = CoreSchemaImpl
            .getInstance().getMatchingRule("2.5.13.22");
    private static final MatchingRule PROTOCOL_INFORMATION_MATCHING_RULE = CoreSchemaImpl
            .getInstance().getMatchingRule("2.5.13.24");
    private static final MatchingRule TELEPHONE_NUMBER_MATCHING_RULE = CoreSchemaImpl.getInstance()
            .getMatchingRule("2.5.13.20");
    private static final MatchingRule TELEPHONE_NUMBER_SUBSTRINGS_MATCHING_RULE = CoreSchemaImpl
            .getInstance().getMatchingRule("2.5.13.21");
    private static final MatchingRule UNIQUE_MEMBER_MATCHING_RULE = CoreSchemaImpl.getInstance()
            .getMatchingRule("2.5.13.23");
    private static final MatchingRule UUID_MATCHING_RULE = CoreSchemaImpl.getInstance()
            .getMatchingRule("1.3.6.1.1.16.2");
    private static final MatchingRule UUID_ORDERING_MATCHING_RULE = CoreSchemaImpl.getInstance()
            .getMatchingRule("1.3.6.1.1.16.3");
    private static final MatchingRule WORD_MATCHING_RULE = CoreSchemaImpl.getInstance()
            .getMatchingRule("2.5.13.32");
    private static final MatchingRule AUTH_PASSWORD_EXACT_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("1.3.6.1.4.1.4203.1.2.2");
    private static final MatchingRule BIT_STRING_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("2.5.13.16");
    private static final MatchingRule BOOLEAN_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("2.5.13.13");
    private static final MatchingRule CASE_EXACT_IA5_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("1.3.6.1.4.1.1466.109.114.1");
    private static final MatchingRule CASE_EXACT_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("2.5.13.5");
    private static final MatchingRule CASE_EXACT_ORDERING_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("2.5.13.6");
    private static final MatchingRule CASE_EXACT_SUBSTRINGS_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("2.5.13.7");
    private static final MatchingRule CASE_IGNORE_IA5_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("1.3.6.1.4.1.1466.109.114.2");
    private static final MatchingRule CASE_IGNORE_IA5_SUBSTRINGS_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("1.3.6.1.4.1.1466.109.114.3");
    private static final MatchingRule CASE_IGNORE_LIST_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("2.5.13.11");
    private static final MatchingRule CASE_IGNORE_LIST_SUBSTRINGS_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("2.5.13.12");
    private static final MatchingRule CASE_IGNORE_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("2.5.13.2");
    private static final MatchingRule CASE_IGNORE_ORDERING_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("2.5.13.3");
    private static final MatchingRule CASE_IGNORE_SUBSTRINGS_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("2.5.13.4");
    private static final MatchingRule CERTIFICATE_EXACT_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("2.5.13.34");
    private static final MatchingRule DIRECTORY_STRING_FIRST_COMPONENT_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("2.5.13.31");
    private static final MatchingRule DISTINGUISHED_NAME_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("2.5.13.1");
    private static final MatchingRule GENERALIZED_TIME_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("2.5.13.27");
    private static final MatchingRule GENERALIZED_TIME_ORDERING_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("2.5.13.28");
    private static final MatchingRule INTEGER_FIRST_COMPONENT_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("2.5.13.29");
    private static final MatchingRule INTEGER_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("2.5.13.14");
    private static final MatchingRule INTEGER_ORDERING_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("2.5.13.15");
    private static final MatchingRule KEYWORD_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("2.5.13.33");
    private static final MatchingRule NUMERIC_STRING_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("2.5.13.8");
    private static final MatchingRule NUMERIC_STRING_ORDERING_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("2.5.13.9");
    private static final MatchingRule NUMERIC_STRING_SUBSTRINGS_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("2.5.13.10");
    private static final MatchingRule OBJECT_IDENTIFIER_FIRST_COMPONENT_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("2.5.13.30");
    private static final MatchingRule OBJECT_IDENTIFIER_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("2.5.13.0");
    private static final MatchingRule OCTET_STRING_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("2.5.13.17");
    private static final MatchingRule OCTET_STRING_ORDERING_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("2.5.13.18");
    private static final MatchingRule OCTET_STRING_SUBSTRINGS_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("2.5.13.19");
    private static final MatchingRule PRESENTATION_ADDRESS_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("2.5.13.22");
    private static final MatchingRule PROTOCOL_INFORMATION_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("2.5.13.24");
    private static final MatchingRule TELEPHONE_NUMBER_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("2.5.13.20");
    private static final MatchingRule TELEPHONE_NUMBER_SUBSTRINGS_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("2.5.13.21");
    private static final MatchingRule UNIQUE_MEMBER_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("2.5.13.23");
    private static final MatchingRule UUID_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("1.3.6.1.1.16.2");
    private static final MatchingRule UUID_ORDERING_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("1.3.6.1.1.16.3");
    private static final MatchingRule WORD_MATCHING_RULE
        = CoreSchemaImpl.getInstance().getMatchingRule("2.5.13.32");
    // Core Attribute Types
    private static final AttributeType ALIASED_OBJECT_NAME_ATTRIBUTE_TYPE = CoreSchemaImpl
            .getInstance().getAttributeType("2.5.4.1");
    private static final AttributeType ALT_SERVER_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("1.3.6.1.4.1.1466.101.120.6");
    private static final AttributeType ATTRIBUTE_TYPES_ATTRIBUTE_TYPE = CoreSchemaImpl
            .getInstance().getAttributeType("2.5.21.5");
    private static final AttributeType AUTH_PASSWORD_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("1.3.6.1.4.1.4203.1.3.4");
    private static final AttributeType BUSINESS_CATEGORY_ATTRIBUTE_TYPE = CoreSchemaImpl
            .getInstance().getAttributeType("2.5.4.15");
    private static final AttributeType CN_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("2.5.4.3");
    private static final AttributeType CREATE_TIMESTAMP_ATTRIBUTE_TYPE = CoreSchemaImpl
            .getInstance().getAttributeType("2.5.18.1");
    private static final AttributeType CREATORS_NAME_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("2.5.18.3");
    private static final AttributeType C_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("2.5.4.6");
    private static final AttributeType DC_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("0.9.2342.19200300.100.1.25");
    private static final AttributeType DESCRIPTION_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("2.5.4.13");
    private static final AttributeType DESTINATION_INDICATOR_ATTRIBUTE_TYPE = CoreSchemaImpl
            .getInstance().getAttributeType("2.5.4.27");
    private static final AttributeType DISTINGUISHED_NAME_ATTRIBUTE_TYPE = CoreSchemaImpl
            .getInstance().getAttributeType("2.5.4.49");
    private static final AttributeType DIT_CONTENT_RULES_ATTRIBUTE_TYPE = CoreSchemaImpl
            .getInstance().getAttributeType("2.5.21.2");
    private static final AttributeType DIT_STRUCTURE_RULES_ATTRIBUTE_TYPE = CoreSchemaImpl
            .getInstance().getAttributeType("2.5.21.1");
    private static final AttributeType DN_QUALIFIER_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("2.5.4.46");
    private static final AttributeType ENHANCED_SEARCH_GUIDE_ATTRIBUTE_TYPE = CoreSchemaImpl
            .getInstance().getAttributeType("2.5.4.47");
    private static final AttributeType ENTRY_DN_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("1.3.6.1.1.20");
    private static final AttributeType ENTRY_UUID_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("1.3.6.1.1.16.4");
    private static final AttributeType FACSIMILE_TELEPHONE_NUMBER_ATTRIBUTE_TYPE = CoreSchemaImpl
            .getInstance().getAttributeType("2.5.4.23");
    private static final AttributeType GENERATION_QUALIFIER_ATTRIBUTE_TYPE = CoreSchemaImpl
            .getInstance().getAttributeType("2.5.4.44");
    private static final AttributeType GIVEN_NAME_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("2.5.4.42");
    private static final AttributeType GOVERNING_STRUCTURE_RULE_ATTRIBUTE_TYPE = CoreSchemaImpl
            .getInstance().getAttributeType("2.5.21.10");
    private static final AttributeType HOUSE_IDENTIFIER_ATTRIBUTE_TYPE = CoreSchemaImpl
            .getInstance().getAttributeType("2.5.4.51");
    private static final AttributeType INITIALS_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("2.5.4.43");
    private static final AttributeType INTERNATIONAL_ISDN_NUMBER_ATTRIBUTE_TYPE = CoreSchemaImpl
            .getInstance().getAttributeType("2.5.4.25");
    private static final AttributeType LDAP_SYNTAXES_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("1.3.6.1.4.1.1466.101.120.16");
    private static final AttributeType L_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("2.5.4.7");
    private static final AttributeType MATCHING_RULES_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("2.5.21.4");
    private static final AttributeType MATCHING_RULE_USE_ATTRIBUTE_TYPE = CoreSchemaImpl
            .getInstance().getAttributeType("2.5.21.8");
    private static final AttributeType MEMBER_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("2.5.4.31");
    private static final AttributeType MODIFIERS_NAME_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("2.5.18.4");
    private static final AttributeType MODIFY_TIMESTAMP_ATTRIBUTE_TYPE = CoreSchemaImpl
            .getInstance().getAttributeType("2.5.18.2");
    private static final AttributeType NAME_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("2.5.4.41");
    private static final AttributeType NAME_FORMS_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("2.5.21.7");
    private static final AttributeType NAMING_CONTEXTS_ATTRIBUTE_TYPE = CoreSchemaImpl
            .getInstance().getAttributeType("1.3.6.1.4.1.1466.101.120.5");
    private static final AttributeType OBJECT_CLASSES_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("2.5.21.6");
    private static final AttributeType OBJECT_CLASS_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("2.5.4.0");
    private static final AttributeType OU_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("2.5.4.11");
    private static final AttributeType OWNER_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("2.5.4.32");
    private static final AttributeType O_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("2.5.4.10");
    private static final AttributeType PHYSICAL_DELIVERY_OFFICE_NAME_ATTRIBUTE_TYPE =
            CoreSchemaImpl.getInstance().getAttributeType("2.5.4.19");
    private static final AttributeType POSTAL_ADDRESS_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("2.5.4.16");
    private static final AttributeType POSTAL_CODE_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("2.5.4.17");
    private static final AttributeType POST_OFFICE_BOX_ATTRIBUTE_TYPE = CoreSchemaImpl
            .getInstance().getAttributeType("2.5.4.18");
    private static final AttributeType PREFERRED_DELIVERY_METHOD_ATTRIBUTE_TYPE = CoreSchemaImpl
            .getInstance().getAttributeType("2.5.4.28");
    private static final AttributeType REGISTERED_ADDRESS_ATTRIBUTE_TYPE = CoreSchemaImpl
            .getInstance().getAttributeType("2.5.4.26");
    private static final AttributeType ROLE_OCCUPANT_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("2.5.4.33");
    private static final AttributeType SEARCH_GUIDE_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("2.5.4.14");
    private static final AttributeType SEE_ALSO_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("2.5.4.34");
    private static final AttributeType SERIAL_NUMBER_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("2.5.4.5");
    private static final AttributeType SN_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("2.5.4.4");
    private static final AttributeType STREET_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("2.5.4.9");
    private static final AttributeType STRUCTURAL_OBJECT_CLASS_ATTRIBUTE_TYPE = CoreSchemaImpl
            .getInstance().getAttributeType("2.5.21.9");
    private static final AttributeType ST_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("2.5.4.8");
    private static final AttributeType SUBSCHEMA_SUBENTRY_ATTRIBUTE_TYPE = CoreSchemaImpl
            .getInstance().getAttributeType("2.5.18.10");
    private static final AttributeType SUPPORTED_AUTH_PASSWORD_SCHEMES_ATTRIBUTE_TYPE =
            CoreSchemaImpl.getInstance().getAttributeType("1.3.6.1.4.1.4203.1.3.3");
    private static final AttributeType SUPPORTED_CONTROL_ATTRIBUTE_TYPE = CoreSchemaImpl
            .getInstance().getAttributeType("1.3.6.1.4.1.1466.101.120.13");
    private static final AttributeType SUPPORTED_EXTENSION_ATTRIBUTE_TYPE = CoreSchemaImpl
            .getInstance().getAttributeType("1.3.6.1.4.1.1466.101.120.7");
    private static final AttributeType SUPPORTED_FEATURES_ATTRIBUTE_TYPE = CoreSchemaImpl
            .getInstance().getAttributeType("1.3.6.1.4.1.4203.1.3.5");
    private static final AttributeType SUPPORTED_LDAP_VERSION_ATTRIBUTE_TYPE = CoreSchemaImpl
            .getInstance().getAttributeType("1.3.6.1.4.1.1466.101.120.15");
    private static final AttributeType SUPPORTED_SASL_MECHANISMS_ATTRIBUTE_TYPE = CoreSchemaImpl
            .getInstance().getAttributeType("1.3.6.1.4.1.1466.101.120.14");
    private static final AttributeType TELEPHONE_NUMBER_ATTRIBUTE_TYPE = CoreSchemaImpl
            .getInstance().getAttributeType("2.5.4.20");
    private static final AttributeType TELETEX_TERMINAL_IDENTIFIER_ATTRIBUTE_TYPE = CoreSchemaImpl
            .getInstance().getAttributeType("2.5.4.22");
    private static final AttributeType TELEX_NUMBER_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("2.5.4.21");
    private static final AttributeType TITLE_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("2.5.4.12");
    private static final AttributeType UID_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("0.9.2342.19200300.100.1.1");
    private static final AttributeType UNIQUE_MEMBER_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("2.5.4.50");
    private static final AttributeType USER_PASSWORD_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("2.5.4.35");
    private static final AttributeType VENDOR_NAME_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("1.3.6.1.1.4");
    private static final AttributeType VENDOR_VERSION_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("1.3.6.1.1.5");
    private static final AttributeType X121_ADDRESS_ATTRIBUTE_TYPE = CoreSchemaImpl.getInstance()
            .getAttributeType("2.5.4.24");
    private static final AttributeType X500_UNIQUE_IDENTIFIER_ATTRIBUTE_TYPE = CoreSchemaImpl
            .getInstance().getAttributeType("2.5.4.45");
    private static final AttributeType ALIASED_OBJECT_NAME_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.1");
    private static final AttributeType ALT_SERVER_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("1.3.6.1.4.1.1466.101.120.6");
    private static final AttributeType ATTRIBUTE_TYPES_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.21.5");
    private static final AttributeType AUTHORITY_REVOCATION_LIST_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.38");
    private static final AttributeType AUTH_PASSWORD_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("1.3.6.1.4.1.4203.1.3.4");
    private static final AttributeType BUSINESS_CATEGORY_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.15");
    private static final AttributeType CERTIFICATE_REVOCATION_LIST_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.39");
    private static final AttributeType CN_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.3");
    private static final AttributeType CREATE_TIMESTAMP_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.18.1");
    private static final AttributeType CREATORS_NAME_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.18.3");
    private static final AttributeType CROSS_CERTIFICATE_PAIR_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.40");
    private static final AttributeType C_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.6");
    private static final AttributeType C_A_CERTIFICATE_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.37");
    private static final AttributeType DC_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("0.9.2342.19200300.100.1.25");
    private static final AttributeType DELTA_REVOCATION_LIST_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.53");
    private static final AttributeType DESCRIPTION_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.13");
    private static final AttributeType DESTINATION_INDICATOR_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.27");
    private static final AttributeType DISTINGUISHED_NAME_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.49");
    private static final AttributeType DIT_CONTENT_RULES_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.21.2");
    private static final AttributeType DIT_STRUCTURE_RULES_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.21.1");
    private static final AttributeType DN_QUALIFIER_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.46");
    private static final AttributeType ENHANCED_SEARCH_GUIDE_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.47");
    private static final AttributeType ENTRY_DN_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("1.3.6.1.1.20");
    private static final AttributeType ENTRY_UUID_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("1.3.6.1.1.16.4");
    private static final AttributeType FACSIMILE_TELEPHONE_NUMBER_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.23");
    private static final AttributeType GENERATION_QUALIFIER_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.44");
    private static final AttributeType GIVEN_NAME_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.42");
    private static final AttributeType GOVERNING_STRUCTURE_RULE_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.21.10");
    private static final AttributeType HOUSE_IDENTIFIER_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.51");
    private static final AttributeType INITIALS_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.43");
    private static final AttributeType INTERNATIONAL_ISDN_NUMBER_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.25");
    private static final AttributeType LDAP_SYNTAXES_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("1.3.6.1.4.1.1466.101.120.16");
    private static final AttributeType L_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.7");
    private static final AttributeType MATCHING_RULES_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.21.4");
    private static final AttributeType MATCHING_RULE_USE_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.21.8");
    private static final AttributeType MEMBER_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.31");
    private static final AttributeType MODIFIERS_NAME_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.18.4");
    private static final AttributeType MODIFY_TIMESTAMP_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.18.2");
    private static final AttributeType NAME_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.41");
    private static final AttributeType NAME_FORMS_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.21.7");
    private static final AttributeType NAMING_CONTEXTS_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("1.3.6.1.4.1.1466.101.120.5");
    private static final AttributeType OBJECT_CLASSES_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.21.6");
    private static final AttributeType OBJECT_CLASS_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.0");
    private static final AttributeType OU_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.11");
    private static final AttributeType OWNER_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.32");
    private static final AttributeType O_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.10");
    private static final AttributeType PHYSICAL_DELIVERY_OFFICE_NAME_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.19");
    private static final AttributeType POSTAL_ADDRESS_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.16");
    private static final AttributeType POSTAL_CODE_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.17");
    private static final AttributeType POST_OFFICE_BOX_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.18");
    private static final AttributeType PREFERRED_DELIVERY_METHOD_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.28");
    private static final AttributeType REGISTERED_ADDRESS_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.26");
    private static final AttributeType ROLE_OCCUPANT_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.33");
    private static final AttributeType SEARCH_GUIDE_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.14");
    private static final AttributeType SEE_ALSO_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.34");
    private static final AttributeType SERIAL_NUMBER_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.5");
    private static final AttributeType SN_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.4");
    private static final AttributeType STREET_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.9");
    private static final AttributeType STRUCTURAL_OBJECT_CLASS_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.21.9");
    private static final AttributeType ST_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.8");
    private static final AttributeType SUBSCHEMA_SUBENTRY_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.18.10");
    private static final AttributeType SUPPORTED_ALGORITHMS_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.52");
    private static final AttributeType SUPPORTED_AUTH_PASSWORD_SCHEMES_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("1.3.6.1.4.1.4203.1.3.3");
    private static final AttributeType SUPPORTED_CONTROL_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("1.3.6.1.4.1.1466.101.120.13");
    private static final AttributeType SUPPORTED_EXTENSION_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("1.3.6.1.4.1.1466.101.120.7");
    private static final AttributeType SUPPORTED_FEATURES_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("1.3.6.1.4.1.4203.1.3.5");
    private static final AttributeType SUPPORTED_LDAP_VERSION_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("1.3.6.1.4.1.1466.101.120.15");
    private static final AttributeType SUPPORTED_SASL_MECHANISMS_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("1.3.6.1.4.1.1466.101.120.14");
    private static final AttributeType TELEPHONE_NUMBER_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.20");
    private static final AttributeType TELETEX_TERMINAL_IDENTIFIER_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.22");
    private static final AttributeType TELEX_NUMBER_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.21");
    private static final AttributeType TITLE_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.12");
    private static final AttributeType UID_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("0.9.2342.19200300.100.1.1");
    private static final AttributeType UNIQUE_MEMBER_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.50");
    private static final AttributeType USER_CERTIFICATE_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.36");
    private static final AttributeType USER_PASSWORD_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.35");
    private static final AttributeType VENDOR_NAME_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("1.3.6.1.1.4");
    private static final AttributeType VENDOR_VERSION_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("1.3.6.1.1.5");
    private static final AttributeType X121_ADDRESS_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.24");
    private static final AttributeType X500_UNIQUE_IDENTIFIER_ATTRIBUTE_TYPE
        = CoreSchemaImpl.getInstance().getAttributeType("2.5.4.45");
    // Core Object Classes
    private static final ObjectClass ALIAS_OBJECT_CLASS = CoreSchemaImpl.getInstance()
            .getObjectClass("2.5.6.1");
    private static final ObjectClass APPLICATION_PROCESS_OBJECT_CLASS = CoreSchemaImpl
            .getInstance().getObjectClass("2.5.6.11");
    private static final ObjectClass AUTH_PASSWORD_OBJECT_OBJECT_CLASS = CoreSchemaImpl
            .getInstance().getObjectClass("1.3.6.1.4.1.4203.1.4.7");
    private static final ObjectClass COUNTRY_OBJECT_CLASS = CoreSchemaImpl.getInstance()
            .getObjectClass("2.5.6.2");
    private static final ObjectClass DC_OBJECT_OBJECT_CLASS = CoreSchemaImpl.getInstance()
            .getObjectClass("1.3.6.1.4.1.1466.344");
    private static final ObjectClass DEVICE_OBJECT_CLASS = CoreSchemaImpl.getInstance()
            .getObjectClass("2.5.6.14");
    private static final ObjectClass EXTENSIBLE_OBJECT_OBJECT_CLASS = CoreSchemaImpl.getInstance()
            .getObjectClass("1.3.6.1.4.1.1466.101.120.111");
    private static final ObjectClass GROUP_OF_NAMES_OBJECT_CLASS = CoreSchemaImpl.getInstance()
            .getObjectClass("2.5.6.9");
    private static final ObjectClass GROUP_OF_UNIQUE_NAMES_OBJECT_CLASS = CoreSchemaImpl
            .getInstance().getObjectClass("2.5.6.17");
    private static final ObjectClass LOCALITY_OBJECT_CLASS = CoreSchemaImpl.getInstance()
            .getObjectClass("2.5.6.3");
    private static final ObjectClass ORGANIZATIONAL_PERSON_OBJECT_CLASS = CoreSchemaImpl
            .getInstance().getObjectClass("2.5.6.7");
    private static final ObjectClass ORGANIZATIONAL_ROLE_OBJECT_CLASS = CoreSchemaImpl
            .getInstance().getObjectClass("2.5.6.8");
    private static final ObjectClass ORGANIZATIONAL_UNIT_OBJECT_CLASS = CoreSchemaImpl
            .getInstance().getObjectClass("2.5.6.5");
    private static final ObjectClass ORGANIZATION_OBJECT_CLASS = CoreSchemaImpl.getInstance()
            .getObjectClass("2.5.6.4");
    private static final ObjectClass PERSON_OBJECT_CLASS = CoreSchemaImpl.getInstance()
            .getObjectClass("2.5.6.6");
    private static final ObjectClass RESIDENTIAL_PERSON_OBJECT_CLASS = CoreSchemaImpl.getInstance()
            .getObjectClass("2.5.6.10");
    private static final ObjectClass SUBSCHEMA_OBJECT_CLASS = CoreSchemaImpl.getInstance()
            .getObjectClass("2.5.20.1");
    private static final ObjectClass TOP_OBJECT_CLASS = CoreSchemaImpl.getInstance()
            .getObjectClass("2.5.6.0");
    private static final ObjectClass UID_OBJECT_OBJECT_CLASS = CoreSchemaImpl.getInstance()
            .getObjectClass("1.3.6.1.1.3.1");
    private static final ObjectClass ALIAS_OBJECT_CLASS
        = CoreSchemaImpl.getInstance().getObjectClass("2.5.6.1");
    private static final ObjectClass APPLICATION_PROCESS_OBJECT_CLASS
        = CoreSchemaImpl.getInstance().getObjectClass("2.5.6.11");
    private static final ObjectClass AUTH_PASSWORD_OBJECT_OBJECT_CLASS
        = CoreSchemaImpl.getInstance().getObjectClass("1.3.6.1.4.1.4203.1.4.7");
    private static final ObjectClass CERTIFICATION_AUTHORITY_OBJECT_CLASS
        = CoreSchemaImpl.getInstance().getObjectClass("2.5.6.16");
    private static final ObjectClass CERTIFICATION_AUTHORITY_V2_OBJECT_CLASS
        = CoreSchemaImpl.getInstance().getObjectClass("2.5.6.16.2");
    private static final ObjectClass COUNTRY_OBJECT_CLASS
        = CoreSchemaImpl.getInstance().getObjectClass("2.5.6.2");
    private static final ObjectClass C_RL_DISTRIBUTION_POINT_OBJECT_CLASS
        = CoreSchemaImpl.getInstance().getObjectClass("2.5.6.19");
    private static final ObjectClass DC_OBJECT_OBJECT_CLASS
        = CoreSchemaImpl.getInstance().getObjectClass("1.3.6.1.4.1.1466.344");
    private static final ObjectClass DELTA_CRL_OBJECT_CLASS
        = CoreSchemaImpl.getInstance().getObjectClass("2.5.6.23");
    private static final ObjectClass DEVICE_OBJECT_CLASS
        = CoreSchemaImpl.getInstance().getObjectClass("2.5.6.14");
    private static final ObjectClass EXTENSIBLE_OBJECT_OBJECT_CLASS
        = CoreSchemaImpl.getInstance().getObjectClass("1.3.6.1.4.1.1466.101.120.111");
    private static final ObjectClass GROUP_OF_NAMES_OBJECT_CLASS
        = CoreSchemaImpl.getInstance().getObjectClass("2.5.6.9");
    private static final ObjectClass GROUP_OF_UNIQUE_NAMES_OBJECT_CLASS
        = CoreSchemaImpl.getInstance().getObjectClass("2.5.6.17");
    private static final ObjectClass LOCALITY_OBJECT_CLASS
        = CoreSchemaImpl.getInstance().getObjectClass("2.5.6.3");
    private static final ObjectClass ORGANIZATIONAL_PERSON_OBJECT_CLASS
        = CoreSchemaImpl.getInstance().getObjectClass("2.5.6.7");
    private static final ObjectClass ORGANIZATIONAL_ROLE_OBJECT_CLASS
        = CoreSchemaImpl.getInstance().getObjectClass("2.5.6.8");
    private static final ObjectClass ORGANIZATIONAL_UNIT_OBJECT_CLASS
        = CoreSchemaImpl.getInstance().getObjectClass("2.5.6.5");
    private static final ObjectClass ORGANIZATION_OBJECT_CLASS
        = CoreSchemaImpl.getInstance().getObjectClass("2.5.6.4");
    private static final ObjectClass PERSON_OBJECT_CLASS
        = CoreSchemaImpl.getInstance().getObjectClass("2.5.6.6");
    private static final ObjectClass PKI_CA_OBJECT_CLASS
        = CoreSchemaImpl.getInstance().getObjectClass("2.5.6.22");
    private static final ObjectClass PKI_USER_OBJECT_CLASS
        = CoreSchemaImpl.getInstance().getObjectClass("2.5.6.21");
    private static final ObjectClass RESIDENTIAL_PERSON_OBJECT_CLASS
        = CoreSchemaImpl.getInstance().getObjectClass("2.5.6.10");
    private static final ObjectClass STRONG_AUTHENTICATION_USER_OBJECT_CLASS
        = CoreSchemaImpl.getInstance().getObjectClass("2.5.6.15");
    private static final ObjectClass SUBSCHEMA_OBJECT_CLASS
        = CoreSchemaImpl.getInstance().getObjectClass("2.5.20.1");
    private static final ObjectClass TOP_OBJECT_CLASS
        = CoreSchemaImpl.getInstance().getObjectClass("2.5.6.0");
    private static final ObjectClass UID_OBJECT_OBJECT_CLASS
        = CoreSchemaImpl.getInstance().getObjectClass("1.3.6.1.1.3.1");
    private static final ObjectClass USER_SECURITY_INFORMATION_OBJECT_CLASS
        = CoreSchemaImpl.getInstance().getObjectClass("2.5.6.18");
    // Prevent instantiation
    private CoreSchema() {
@@ -417,8 +448,8 @@
    }
    /**
     * Returns a reference to the {@code Attribute Type Description Syntax}
     * which has the OID {@code 1.3.6.1.4.1.1466.115.121.1.3}.
     * Returns a reference to the {@code Attribute Type Description Syntax} which has the OID
     * {@code 1.3.6.1.4.1.1466.115.121.1.3}.
     *
     * @return A reference to the {@code Attribute Type Description Syntax}.
     */
@@ -427,8 +458,8 @@
    }
    /**
     * Returns a reference to the {@code Authentication Password Syntax} which
     * has the OID {@code 1.3.6.1.4.1.4203.1.1.2}.
     * Returns a reference to the {@code Authentication Password Syntax} which has the OID
     * {@code 1.3.6.1.4.1.4203.1.1.2}.
     *
     * @return A reference to the {@code Authentication Password Syntax}.
     */
@@ -437,8 +468,7 @@
    }
    /**
     * Returns a reference to the {@code Binary Syntax} which has the OID
     * {@code 1.3.6.1.4.1.1466.115.121.1.5}.
     * Returns a reference to the {@code Binary Syntax} which has the OID {@code 1.3.6.1.4.1.1466.115.121.1.5}.
     *
     * @return A reference to the {@code Binary Syntax}.
     */
@@ -447,8 +477,7 @@
    }
    /**
     * Returns a reference to the {@code Bit String Syntax} which has the OID
     * {@code 1.3.6.1.4.1.1466.115.121.1.6}.
     * Returns a reference to the {@code Bit String Syntax} which has the OID {@code 1.3.6.1.4.1.1466.115.121.1.6}.
     *
     * @return A reference to the {@code Bit String Syntax}.
     */
@@ -457,8 +486,7 @@
    }
    /**
     * Returns a reference to the {@code Boolean Syntax} which has the OID
     * {@code 1.3.6.1.4.1.1466.115.121.1.7}.
     * Returns a reference to the {@code Boolean Syntax} which has the OID {@code 1.3.6.1.4.1.1466.115.121.1.7}.
     *
     * @return A reference to the {@code Boolean Syntax}.
     */
@@ -467,8 +495,8 @@
    }
    /**
     * Returns a reference to the {@code Certificate List Syntax} which has the
     * OID {@code 1.3.6.1.4.1.1466.115.121.1.9}.
     * Returns a reference to the {@code Certificate List Syntax} which has the OID
     * {@code 1.3.6.1.4.1.1466.115.121.1.9}.
     *
     * @return A reference to the {@code Certificate List Syntax}.
     */
@@ -477,8 +505,8 @@
    }
    /**
     * Returns a reference to the {@code Certificate Pair Syntax} which has the
     * OID {@code 1.3.6.1.4.1.1466.115.121.1.10}.
     * Returns a reference to the {@code Certificate Pair Syntax} which has the OID
     * {@code 1.3.6.1.4.1.1466.115.121.1.10}.
     *
     * @return A reference to the {@code Certificate Pair Syntax}.
     */
@@ -487,8 +515,7 @@
    }
    /**
     * Returns a reference to the {@code Certificate Syntax} which has the OID
     * {@code 1.3.6.1.4.1.1466.115.121.1.8}.
     * Returns a reference to the {@code Certificate Syntax} which has the OID {@code 1.3.6.1.4.1.1466.115.121.1.8}.
     *
     * @return A reference to the {@code Certificate Syntax}.
     */
@@ -497,8 +524,7 @@
    }
    /**
     * Returns a reference to the {@code Country String Syntax} which has the
     * OID {@code 1.3.6.1.4.1.1466.115.121.1.11}.
     * Returns a reference to the {@code Country String Syntax} which has the OID {@code 1.3.6.1.4.1.1466.115.121.1.11}.
     *
     * @return A reference to the {@code Country String Syntax}.
     */
@@ -507,8 +533,8 @@
    }
    /**
     * Returns a reference to the {@code Delivery Method Syntax} which has the
     * OID {@code 1.3.6.1.4.1.1466.115.121.1.14}.
     * Returns a reference to the {@code Delivery Method Syntax} which has the OID
     * {@code 1.3.6.1.4.1.1466.115.121.1.14}.
     *
     * @return A reference to the {@code Delivery Method Syntax}.
     */
@@ -517,8 +543,8 @@
    }
    /**
     * Returns a reference to the {@code Directory String Syntax} which has the
     * OID {@code 1.3.6.1.4.1.1466.115.121.1.15}.
     * Returns a reference to the {@code Directory String Syntax} which has the OID
     * {@code 1.3.6.1.4.1.1466.115.121.1.15}.
     *
     * @return A reference to the {@code Directory String Syntax}.
     */
@@ -527,8 +553,8 @@
    }
    /**
     * Returns a reference to the {@code DIT Content Rule Description Syntax}
     * which has the OID {@code 1.3.6.1.4.1.1466.115.121.1.16}.
     * Returns a reference to the {@code DIT Content Rule Description Syntax} which has the OID
     * {@code 1.3.6.1.4.1.1466.115.121.1.16}.
     *
     * @return A reference to the {@code DIT Content Rule Description Syntax}.
     */
@@ -537,8 +563,8 @@
    }
    /**
     * Returns a reference to the {@code DIT Structure Rule Description Syntax}
     * which has the OID {@code 1.3.6.1.4.1.1466.115.121.1.17}.
     * Returns a reference to the {@code DIT Structure Rule Description Syntax} which has the OID
     * {@code 1.3.6.1.4.1.1466.115.121.1.17}.
     *
     * @return A reference to the {@code DIT Structure Rule Description Syntax}.
     */
@@ -547,8 +573,7 @@
    }
    /**
     * Returns a reference to the {@code DN Syntax} which has the OID
     * {@code 1.3.6.1.4.1.1466.115.121.1.12}.
     * Returns a reference to the {@code DN Syntax} which has the OID {@code 1.3.6.1.4.1.1466.115.121.1.12}.
     *
     * @return A reference to the {@code DN Syntax}.
     */
@@ -557,8 +582,7 @@
    }
    /**
     * Returns a reference to the {@code Enhanced Guide Syntax} which has the
     * OID {@code 1.3.6.1.4.1.1466.115.121.1.21}.
     * Returns a reference to the {@code Enhanced Guide Syntax} which has the OID {@code 1.3.6.1.4.1.1466.115.121.1.21}.
     *
     * @return A reference to the {@code Enhanced Guide Syntax}.
     */
@@ -567,8 +591,8 @@
    }
    /**
     * Returns a reference to the {@code Facsimile Telephone Number Syntax}
     * which has the OID {@code 1.3.6.1.4.1.1466.115.121.1.22}.
     * Returns a reference to the {@code Facsimile Telephone Number Syntax} which has the OID
     * {@code 1.3.6.1.4.1.1466.115.121.1.22}.
     *
     * @return A reference to the {@code Facsimile Telephone Number Syntax}.
     */
@@ -577,8 +601,7 @@
    }
    /**
     * Returns a reference to the {@code Fax Syntax} which has the OID
     * {@code 1.3.6.1.4.1.1466.115.121.1.23}.
     * Returns a reference to the {@code Fax Syntax} which has the OID {@code 1.3.6.1.4.1.1466.115.121.1.23}.
     *
     * @return A reference to the {@code Fax Syntax}.
     */
@@ -587,8 +610,8 @@
    }
    /**
     * Returns a reference to the {@code Generalized Time Syntax} which has the
     * OID {@code 1.3.6.1.4.1.1466.115.121.1.24}.
     * Returns a reference to the {@code Generalized Time Syntax} which has the OID
     * {@code 1.3.6.1.4.1.1466.115.121.1.24}.
     *
     * @return A reference to the {@code Generalized Time Syntax}.
     */
@@ -597,8 +620,7 @@
    }
    /**
     * Returns a reference to the {@code Guide Syntax} which has the OID
     * {@code 1.3.6.1.4.1.1466.115.121.1.25}.
     * Returns a reference to the {@code Guide Syntax} which has the OID {@code 1.3.6.1.4.1.1466.115.121.1.25}.
     *
     * @return A reference to the {@code Guide Syntax}.
     */
@@ -607,8 +629,7 @@
    }
    /**
     * Returns a reference to the {@code IA5 String Syntax} which has the OID
     * {@code 1.3.6.1.4.1.1466.115.121.1.26}.
     * Returns a reference to the {@code IA5 String Syntax} which has the OID {@code 1.3.6.1.4.1.1466.115.121.1.26}.
     *
     * @return A reference to the {@code IA5 String Syntax}.
     */
@@ -617,8 +638,7 @@
    }
    /**
     * Returns a reference to the {@code Integer Syntax} which has the OID
     * {@code 1.3.6.1.4.1.1466.115.121.1.27}.
     * Returns a reference to the {@code Integer Syntax} which has the OID {@code 1.3.6.1.4.1.1466.115.121.1.27}.
     *
     * @return A reference to the {@code Integer Syntax}.
     */
@@ -627,8 +647,7 @@
    }
    /**
     * Returns a reference to the {@code JPEG Syntax} which has the OID
     * {@code 1.3.6.1.4.1.1466.115.121.1.28}.
     * Returns a reference to the {@code JPEG Syntax} which has the OID {@code 1.3.6.1.4.1.1466.115.121.1.28}.
     *
     * @return A reference to the {@code JPEG Syntax}.
     */
@@ -637,8 +656,8 @@
    }
    /**
     * Returns a reference to the {@code LDAP Syntax Description Syntax} which
     * has the OID {@code 1.3.6.1.4.1.1466.115.121.1.54}.
     * Returns a reference to the {@code LDAP Syntax Description Syntax} which has the OID
     * {@code 1.3.6.1.4.1.1466.115.121.1.54}.
     *
     * @return A reference to the {@code LDAP Syntax Description Syntax}.
     */
@@ -647,8 +666,8 @@
    }
    /**
     * Returns a reference to the {@code Matching Rule Description Syntax} which
     * has the OID {@code 1.3.6.1.4.1.1466.115.121.1.30}.
     * Returns a reference to the {@code Matching Rule Description Syntax} which has the OID
     * {@code 1.3.6.1.4.1.1466.115.121.1.30}.
     *
     * @return A reference to the {@code Matching Rule Description Syntax}.
     */
@@ -657,8 +676,8 @@
    }
    /**
     * Returns a reference to the {@code Matching Rule Use Description Syntax}
     * which has the OID {@code 1.3.6.1.4.1.1466.115.121.1.31}.
     * Returns a reference to the {@code Matching Rule Use Description Syntax} which has the OID
     * {@code 1.3.6.1.4.1.1466.115.121.1.31}.
     *
     * @return A reference to the {@code Matching Rule Use Description Syntax}.
     */
@@ -667,8 +686,8 @@
    }
    /**
     * Returns a reference to the {@code Name and Optional UID Syntax} which has
     * the OID {@code 1.3.6.1.4.1.1466.115.121.1.34}.
     * Returns a reference to the {@code Name and Optional UID Syntax} which has the OID
     * {@code 1.3.6.1.4.1.1466.115.121.1.34}.
     *
     * @return A reference to the {@code Name and Optional UID Syntax}.
     */
@@ -677,8 +696,8 @@
    }
    /**
     * Returns a reference to the {@code Name Form Description Syntax} which has
     * the OID {@code 1.3.6.1.4.1.1466.115.121.1.35}.
     * Returns a reference to the {@code Name Form Description Syntax} which has the OID
     * {@code 1.3.6.1.4.1.1466.115.121.1.35}.
     *
     * @return A reference to the {@code Name Form Description Syntax}.
     */
@@ -687,8 +706,7 @@
    }
    /**
     * Returns a reference to the {@code Numeric String Syntax} which has the
     * OID {@code 1.3.6.1.4.1.1466.115.121.1.36}.
     * Returns a reference to the {@code Numeric String Syntax} which has the OID {@code 1.3.6.1.4.1.1466.115.121.1.36}.
     *
     * @return A reference to the {@code Numeric String Syntax}.
     */
@@ -697,8 +715,8 @@
    }
    /**
     * Returns a reference to the {@code Object Class Description Syntax} which
     * has the OID {@code 1.3.6.1.4.1.1466.115.121.1.37}.
     * Returns a reference to the {@code Object Class Description Syntax} which has the OID
     * {@code 1.3.6.1.4.1.1466.115.121.1.37}.
     *
     * @return A reference to the {@code Object Class Description Syntax}.
     */
@@ -707,8 +725,7 @@
    }
    /**
     * Returns a reference to the {@code Octet String Syntax} which has the OID
     * {@code 1.3.6.1.4.1.1466.115.121.1.40}.
     * Returns a reference to the {@code Octet String Syntax} which has the OID {@code 1.3.6.1.4.1.1466.115.121.1.40}.
     *
     * @return A reference to the {@code Octet String Syntax}.
     */
@@ -717,8 +734,7 @@
    }
    /**
     * Returns a reference to the {@code OID Syntax} which has the OID
     * {@code 1.3.6.1.4.1.1466.115.121.1.38}.
     * Returns a reference to the {@code OID Syntax} which has the OID {@code 1.3.6.1.4.1.1466.115.121.1.38}.
     *
     * @return A reference to the {@code OID Syntax}.
     */
@@ -727,8 +743,7 @@
    }
    /**
     * Returns a reference to the {@code Other Mailbox Syntax} which has the OID
     * {@code 1.3.6.1.4.1.1466.115.121.1.39}.
     * Returns a reference to the {@code Other Mailbox Syntax} which has the OID {@code 1.3.6.1.4.1.1466.115.121.1.39}.
     *
     * @return A reference to the {@code Other Mailbox Syntax}.
     */
@@ -737,8 +752,7 @@
    }
    /**
     * Returns a reference to the {@code Postal Address Syntax} which has the
     * OID {@code 1.3.6.1.4.1.1466.115.121.1.41}.
     * Returns a reference to the {@code Postal Address Syntax} which has the OID {@code 1.3.6.1.4.1.1466.115.121.1.41}.
     *
     * @return A reference to the {@code Postal Address Syntax}.
     */
@@ -747,8 +761,8 @@
    }
    /**
     * Returns a reference to the {@code Presentation Address Syntax} which has
     * the OID {@code 1.3.6.1.4.1.1466.115.121.1.43}.
     * Returns a reference to the {@code Presentation Address Syntax} which has the OID
     * {@code 1.3.6.1.4.1.1466.115.121.1.43}.
     *
     * @return A reference to the {@code Presentation Address Syntax}.
     */
@@ -757,8 +771,8 @@
    }
    /**
     * Returns a reference to the {@code Printable String Syntax} which has the
     * OID {@code 1.3.6.1.4.1.1466.115.121.1.44}.
     * Returns a reference to the {@code Printable String Syntax} which has the OID
     * {@code 1.3.6.1.4.1.1466.115.121.1.44}.
     *
     * @return A reference to the {@code Printable String Syntax}.
     */
@@ -767,8 +781,8 @@
    }
    /**
     * Returns a reference to the {@code Protocol Information Syntax} which has
     * the OID {@code 1.3.6.1.4.1.1466.115.121.1.42}.
     * Returns a reference to the {@code Protocol Information Syntax} which has the OID
     * {@code 1.3.6.1.4.1.1466.115.121.1.42}.
     *
     * @return A reference to the {@code Protocol Information Syntax}.
     */
@@ -777,8 +791,8 @@
    }
    /**
     * Returns a reference to the {@code Substring Assertion Syntax} which has
     * the OID {@code 1.3.6.1.4.1.1466.115.121.1.58}.
     * Returns a reference to the {@code Substring Assertion Syntax} which has the OID
     * {@code 1.3.6.1.4.1.1466.115.121.1.58}.
     *
     * @return A reference to the {@code Substring Assertion Syntax}.
     */
@@ -787,8 +801,8 @@
    }
    /**
     * Returns a reference to the {@code Supported Algorithm Syntax} which has
     * the OID {@code 1.3.6.1.4.1.1466.115.121.1.49}.
     * Returns a reference to the {@code Supported Algorithm Syntax} which has the OID
     * {@code 1.3.6.1.4.1.1466.115.121.1.49}.
     *
     * @return A reference to the {@code Supported Algorithm Syntax}.
     */
@@ -797,8 +811,8 @@
    }
    /**
     * Returns a reference to the {@code Telephone Number Syntax} which has the
     * OID {@code 1.3.6.1.4.1.1466.115.121.1.50}.
     * Returns a reference to the {@code Telephone Number Syntax} which has the OID
     * {@code 1.3.6.1.4.1.1466.115.121.1.50}.
     *
     * @return A reference to the {@code Telephone Number Syntax}.
     */
@@ -807,8 +821,8 @@
    }
    /**
     * Returns a reference to the {@code Teletex Terminal Identifier Syntax}
     * which has the OID {@code 1.3.6.1.4.1.1466.115.121.1.51}.
     * Returns a reference to the {@code Teletex Terminal Identifier Syntax} which has the OID
     * {@code 1.3.6.1.4.1.1466.115.121.1.51}.
     *
     * @return A reference to the {@code Teletex Terminal Identifier Syntax}.
     */
@@ -817,8 +831,7 @@
    }
    /**
     * Returns a reference to the {@code Telex Number Syntax} which has the OID
     * {@code 1.3.6.1.4.1.1466.115.121.1.52}.
     * Returns a reference to the {@code Telex Number Syntax} which has the OID {@code 1.3.6.1.4.1.1466.115.121.1.52}.
     *
     * @return A reference to the {@code Telex Number Syntax}.
     */
@@ -827,8 +840,7 @@
    }
    /**
     * Returns a reference to the {@code UTC Time Syntax} which has the OID
     * {@code 1.3.6.1.4.1.1466.115.121.1.53}.
     * Returns a reference to the {@code UTC Time Syntax} which has the OID {@code 1.3.6.1.4.1.1466.115.121.1.53}.
     *
     * @return A reference to the {@code UTC Time Syntax}.
     */
@@ -837,8 +849,7 @@
    }
    /**
     * Returns a reference to the {@code UUID Syntax} which has the OID
     * {@code 1.3.6.1.1.16.1}.
     * Returns a reference to the {@code UUID Syntax} which has the OID {@code 1.3.6.1.1.16.1}.
     *
     * @return A reference to the {@code UUID Syntax}.
     */
@@ -847,8 +858,18 @@
    }
    /**
     * Returns a reference to the {@code authPasswordExactMatch} Matching Rule
     * which has the OID {@code 1.3.6.1.4.1.4203.1.2.2}.
     * Returns a reference to the {@code X.509 Certificate Exact Assertion Syntax} which has the OID
     * {@code 1.3.6.1.1.15.1}.
     *
     * @return A reference to the {@code X.509 Certificate Exact Assertion Syntax}.
     */
    public static Syntax getX509CertificateExactAssertionSyntax() {
        return X509_CERTIFICATE_EXACT_ASSERTION_SYNTAX;
    }
    /**
     * Returns a reference to the {@code authPasswordExactMatch} Matching Rule which has the OID
     * {@code 1.3.6.1.4.1.4203.1.2.2}.
     *
     * @return A reference to the {@code authPasswordExactMatch} Matching Rule.
     */
@@ -857,8 +878,7 @@
    }
    /**
     * Returns a reference to the {@code bitStringMatch} Matching Rule which has
     * the OID {@code 2.5.13.16}.
     * Returns a reference to the {@code bitStringMatch} Matching Rule which has the OID {@code 2.5.13.16}.
     *
     * @return A reference to the {@code bitStringMatch} Matching Rule.
     */
@@ -867,8 +887,7 @@
    }
    /**
     * Returns a reference to the {@code booleanMatch} Matching Rule which has
     * the OID {@code 2.5.13.13}.
     * Returns a reference to the {@code booleanMatch} Matching Rule which has the OID {@code 2.5.13.13}.
     *
     * @return A reference to the {@code booleanMatch} Matching Rule.
     */
@@ -877,8 +896,8 @@
    }
    /**
     * Returns a reference to the {@code caseExactIA5Match} Matching Rule which
     * has the OID {@code 1.3.6.1.4.1.1466.109.114.1}.
     * Returns a reference to the {@code caseExactIA5Match} Matching Rule which has the OID
     * {@code 1.3.6.1.4.1.1466.109.114.1}.
     *
     * @return A reference to the {@code caseExactIA5Match} Matching Rule.
     */
@@ -887,8 +906,7 @@
    }
    /**
     * Returns a reference to the {@code caseExactMatch} Matching Rule which has
     * the OID {@code 2.5.13.5}.
     * Returns a reference to the {@code caseExactMatch} Matching Rule which has the OID {@code 2.5.13.5}.
     *
     * @return A reference to the {@code caseExactMatch} Matching Rule.
     */
@@ -897,8 +915,7 @@
    }
    /**
     * Returns a reference to the {@code caseExactOrderingMatch} Matching Rule
     * which has the OID {@code 2.5.13.6}.
     * Returns a reference to the {@code caseExactOrderingMatch} Matching Rule which has the OID {@code 2.5.13.6}.
     *
     * @return A reference to the {@code caseExactOrderingMatch} Matching Rule.
     */
@@ -907,19 +924,17 @@
    }
    /**
     * Returns a reference to the {@code caseExactSubstringsMatch} Matching Rule
     * which has the OID {@code 2.5.13.7}.
     * Returns a reference to the {@code caseExactSubstringsMatch} Matching Rule which has the OID {@code 2.5.13.7}.
     *
     * @return A reference to the {@code caseExactSubstringsMatch} Matching
     *         Rule.
     * @return A reference to the {@code caseExactSubstringsMatch} Matching Rule.
     */
    public static MatchingRule getCaseExactSubstringsMatchingRule() {
        return CASE_EXACT_SUBSTRINGS_MATCHING_RULE;
    }
    /**
     * Returns a reference to the {@code caseIgnoreIA5Match} Matching Rule which
     * has the OID {@code 1.3.6.1.4.1.1466.109.114.2}.
     * Returns a reference to the {@code caseIgnoreIA5Match} Matching Rule which has the OID
     * {@code 1.3.6.1.4.1.1466.109.114.2}.
     *
     * @return A reference to the {@code caseIgnoreIA5Match} Matching Rule.
     */
@@ -928,19 +943,17 @@
    }
    /**
     * Returns a reference to the {@code caseIgnoreIA5SubstringsMatch} Matching
     * Rule which has the OID {@code 1.3.6.1.4.1.1466.109.114.3}.
     * Returns a reference to the {@code caseIgnoreIA5SubstringsMatch} Matching Rule which has the OID
     * {@code 1.3.6.1.4.1.1466.109.114.3}.
     *
     * @return A reference to the {@code caseIgnoreIA5SubstringsMatch} Matching
     *         Rule.
     * @return A reference to the {@code caseIgnoreIA5SubstringsMatch} Matching Rule.
     */
    public static MatchingRule getCaseIgnoreIA5SubstringsMatchingRule() {
        return CASE_IGNORE_IA5_SUBSTRINGS_MATCHING_RULE;
    }
    /**
     * Returns a reference to the {@code caseIgnoreListMatch} Matching Rule
     * which has the OID {@code 2.5.13.11}.
     * Returns a reference to the {@code caseIgnoreListMatch} Matching Rule which has the OID {@code 2.5.13.11}.
     *
     * @return A reference to the {@code caseIgnoreListMatch} Matching Rule.
     */
@@ -949,19 +962,17 @@
    }
    /**
     * Returns a reference to the {@code caseIgnoreListSubstringsMatch} Matching
     * Rule which has the OID {@code 2.5.13.12}.
     * Returns a reference to the {@code caseIgnoreListSubstringsMatch} Matching Rule which has the OID
     * {@code 2.5.13.12}.
     *
     * @return A reference to the {@code caseIgnoreListSubstringsMatch} Matching
     *         Rule.
     * @return A reference to the {@code caseIgnoreListSubstringsMatch} Matching Rule.
     */
    public static MatchingRule getCaseIgnoreListSubstringsMatchingRule() {
        return CASE_IGNORE_LIST_SUBSTRINGS_MATCHING_RULE;
    }
    /**
     * Returns a reference to the {@code caseIgnoreMatch} Matching Rule which
     * has the OID {@code 2.5.13.2}.
     * Returns a reference to the {@code caseIgnoreMatch} Matching Rule which has the OID {@code 2.5.13.2}.
     *
     * @return A reference to the {@code caseIgnoreMatch} Matching Rule.
     */
@@ -970,8 +981,7 @@
    }
    /**
     * Returns a reference to the {@code caseIgnoreOrderingMatch} Matching Rule
     * which has the OID {@code 2.5.13.3}.
     * Returns a reference to the {@code caseIgnoreOrderingMatch} Matching Rule which has the OID {@code 2.5.13.3}.
     *
     * @return A reference to the {@code caseIgnoreOrderingMatch} Matching Rule.
     */
@@ -980,30 +990,35 @@
    }
    /**
     * Returns a reference to the {@code caseIgnoreSubstringsMatch} Matching
     * Rule which has the OID {@code 2.5.13.4}.
     * Returns a reference to the {@code caseIgnoreSubstringsMatch} Matching Rule which has the OID {@code 2.5.13.4}.
     *
     * @return A reference to the {@code caseIgnoreSubstringsMatch} Matching
     *         Rule.
     * @return A reference to the {@code caseIgnoreSubstringsMatch} Matching Rule.
     */
    public static MatchingRule getCaseIgnoreSubstringsMatchingRule() {
        return CASE_IGNORE_SUBSTRINGS_MATCHING_RULE;
    }
    /**
     * Returns a reference to the {@code directoryStringFirstComponentMatch}
     * Matching Rule which has the OID {@code 2.5.13.31}.
     * Returns a reference to the {@code certificateExactMatch} Matching Rule which has the OID {@code 2.5.13.34}.
     *
     * @return A reference to the {@code directoryStringFirstComponentMatch}
     *         Matching Rule.
     * @return A reference to the {@code certificateExactMatch} Matching Rule.
     */
    public static MatchingRule getCertificateExactMatchingRule() {
        return CERTIFICATE_EXACT_MATCHING_RULE;
    }
    /**
     * Returns a reference to the {@code directoryStringFirstComponentMatch} Matching Rule which has the OID
     * {@code 2.5.13.31}.
     *
     * @return A reference to the {@code directoryStringFirstComponentMatch} Matching Rule.
     */
    public static MatchingRule getDirectoryStringFirstComponentMatchingRule() {
        return DIRECTORY_STRING_FIRST_COMPONENT_MATCHING_RULE;
    }
    /**
     * Returns a reference to the {@code distinguishedNameMatch} Matching Rule
     * which has the OID {@code 2.5.13.1}.
     * Returns a reference to the {@code distinguishedNameMatch} Matching Rule which has the OID {@code 2.5.13.1}.
     *
     * @return A reference to the {@code distinguishedNameMatch} Matching Rule.
     */
@@ -1012,8 +1027,7 @@
    }
    /**
     * Returns a reference to the {@code generalizedTimeMatch} Matching Rule
     * which has the OID {@code 2.5.13.27}.
     * Returns a reference to the {@code generalizedTimeMatch} Matching Rule which has the OID {@code 2.5.13.27}.
     *
     * @return A reference to the {@code generalizedTimeMatch} Matching Rule.
     */
@@ -1022,30 +1036,26 @@
    }
    /**
     * Returns a reference to the {@code generalizedTimeOrderingMatch} Matching
     * Rule which has the OID {@code 2.5.13.28}.
     * Returns a reference to the {@code generalizedTimeOrderingMatch} Matching Rule which has the OID
     * {@code 2.5.13.28}.
     *
     * @return A reference to the {@code generalizedTimeOrderingMatch} Matching
     *         Rule.
     * @return A reference to the {@code generalizedTimeOrderingMatch} Matching Rule.
     */
    public static MatchingRule getGeneralizedTimeOrderingMatchingRule() {
        return GENERALIZED_TIME_ORDERING_MATCHING_RULE;
    }
    /**
     * Returns a reference to the {@code integerFirstComponentMatch} Matching
     * Rule which has the OID {@code 2.5.13.29}.
     * Returns a reference to the {@code integerFirstComponentMatch} Matching Rule which has the OID {@code 2.5.13.29}.
     *
     * @return A reference to the {@code integerFirstComponentMatch} Matching
     *         Rule.
     * @return A reference to the {@code integerFirstComponentMatch} Matching Rule.
     */
    public static MatchingRule getIntegerFirstComponentMatchingRule() {
        return INTEGER_FIRST_COMPONENT_MATCHING_RULE;
    }
    /**
     * Returns a reference to the {@code integerMatch} Matching Rule which has
     * the OID {@code 2.5.13.14}.
     * Returns a reference to the {@code integerMatch} Matching Rule which has the OID {@code 2.5.13.14}.
     *
     * @return A reference to the {@code integerMatch} Matching Rule.
     */
@@ -1054,8 +1064,7 @@
    }
    /**
     * Returns a reference to the {@code integerOrderingMatch} Matching Rule
     * which has the OID {@code 2.5.13.15}.
     * Returns a reference to the {@code integerOrderingMatch} Matching Rule which has the OID {@code 2.5.13.15}.
     *
     * @return A reference to the {@code integerOrderingMatch} Matching Rule.
     */
@@ -1064,8 +1073,7 @@
    }
    /**
     * Returns a reference to the {@code keywordMatch} Matching Rule which has
     * the OID {@code 2.5.13.33}.
     * Returns a reference to the {@code keywordMatch} Matching Rule which has the OID {@code 2.5.13.33}.
     *
     * @return A reference to the {@code keywordMatch} Matching Rule.
     */
@@ -1074,8 +1082,7 @@
    }
    /**
     * Returns a reference to the {@code numericStringMatch} Matching Rule which
     * has the OID {@code 2.5.13.8}.
     * Returns a reference to the {@code numericStringMatch} Matching Rule which has the OID {@code 2.5.13.8}.
     *
     * @return A reference to the {@code numericStringMatch} Matching Rule.
     */
@@ -1084,41 +1091,36 @@
    }
    /**
     * Returns a reference to the {@code numericStringOrderingMatch} Matching
     * Rule which has the OID {@code 2.5.13.9}.
     * Returns a reference to the {@code numericStringOrderingMatch} Matching Rule which has the OID {@code 2.5.13.9}.
     *
     * @return A reference to the {@code numericStringOrderingMatch} Matching
     *         Rule.
     * @return A reference to the {@code numericStringOrderingMatch} Matching Rule.
     */
    public static MatchingRule getNumericStringOrderingMatchingRule() {
        return NUMERIC_STRING_ORDERING_MATCHING_RULE;
    }
    /**
     * Returns a reference to the {@code numericStringSubstringsMatch} Matching
     * Rule which has the OID {@code 2.5.13.10}.
     * Returns a reference to the {@code numericStringSubstringsMatch} Matching Rule which has the OID
     * {@code 2.5.13.10}.
     *
     * @return A reference to the {@code numericStringSubstringsMatch} Matching
     *         Rule.
     * @return A reference to the {@code numericStringSubstringsMatch} Matching Rule.
     */
    public static MatchingRule getNumericStringSubstringsMatchingRule() {
        return NUMERIC_STRING_SUBSTRINGS_MATCHING_RULE;
    }
    /**
     * Returns a reference to the {@code objectIdentifierFirstComponentMatch}
     * Matching Rule which has the OID {@code 2.5.13.30}.
     * Returns a reference to the {@code objectIdentifierFirstComponentMatch} Matching Rule which has the OID
     * {@code 2.5.13.30}.
     *
     * @return A reference to the {@code objectIdentifierFirstComponentMatch}
     *         Matching Rule.
     * @return A reference to the {@code objectIdentifierFirstComponentMatch} Matching Rule.
     */
    public static MatchingRule getObjectIdentifierFirstComponentMatchingRule() {
        return OBJECT_IDENTIFIER_FIRST_COMPONENT_MATCHING_RULE;
    }
    /**
     * Returns a reference to the {@code objectIdentifierMatch} Matching Rule
     * which has the OID {@code 2.5.13.0}.
     * Returns a reference to the {@code objectIdentifierMatch} Matching Rule which has the OID {@code 2.5.13.0}.
     *
     * @return A reference to the {@code objectIdentifierMatch} Matching Rule.
     */
@@ -1127,8 +1129,7 @@
    }
    /**
     * Returns a reference to the {@code octetStringMatch} Matching Rule which
     * has the OID {@code 2.5.13.17}.
     * Returns a reference to the {@code octetStringMatch} Matching Rule which has the OID {@code 2.5.13.17}.
     *
     * @return A reference to the {@code octetStringMatch} Matching Rule.
     */
@@ -1137,52 +1138,43 @@
    }
    /**
     * Returns a reference to the {@code octetStringOrderingMatch} Matching Rule
     * which has the OID {@code 2.5.13.18}.
     * Returns a reference to the {@code octetStringOrderingMatch} Matching Rule which has the OID {@code 2.5.13.18}.
     *
     * @return A reference to the {@code octetStringOrderingMatch} Matching
     *         Rule.
     * @return A reference to the {@code octetStringOrderingMatch} Matching Rule.
     */
    public static MatchingRule getOctetStringOrderingMatchingRule() {
        return OCTET_STRING_ORDERING_MATCHING_RULE;
    }
    /**
     * Returns a reference to the {@code octetStringSubstringsMatch} Matching
     * Rule which has the OID {@code 2.5.13.19}.
     * Returns a reference to the {@code octetStringSubstringsMatch} Matching Rule which has the OID {@code 2.5.13.19}.
     *
     * @return A reference to the {@code octetStringSubstringsMatch} Matching
     *         Rule.
     * @return A reference to the {@code octetStringSubstringsMatch} Matching Rule.
     */
    public static MatchingRule getOctetStringSubstringsMatchingRule() {
        return OCTET_STRING_SUBSTRINGS_MATCHING_RULE;
    }
    /**
     * Returns a reference to the {@code presentationAddressMatch} Matching Rule
     * which has the OID {@code 2.5.13.22}.
     * Returns a reference to the {@code presentationAddressMatch} Matching Rule which has the OID {@code 2.5.13.22}.
     *
     * @return A reference to the {@code presentationAddressMatch} Matching
     *         Rule.
     * @return A reference to the {@code presentationAddressMatch} Matching Rule.
     */
    public static MatchingRule getPresentationAddressMatchingRule() {
        return PRESENTATION_ADDRESS_MATCHING_RULE;
    }
    /**
     * Returns a reference to the {@code protocolInformationMatch} Matching Rule
     * which has the OID {@code 2.5.13.24}.
     * Returns a reference to the {@code protocolInformationMatch} Matching Rule which has the OID {@code 2.5.13.24}.
     *
     * @return A reference to the {@code protocolInformationMatch} Matching
     *         Rule.
     * @return A reference to the {@code protocolInformationMatch} Matching Rule.
     */
    public static MatchingRule getProtocolInformationMatchingRule() {
        return PROTOCOL_INFORMATION_MATCHING_RULE;
    }
    /**
     * Returns a reference to the {@code telephoneNumberMatch} Matching Rule
     * which has the OID {@code 2.5.13.20}.
     * Returns a reference to the {@code telephoneNumberMatch} Matching Rule which has the OID {@code 2.5.13.20}.
     *
     * @return A reference to the {@code telephoneNumberMatch} Matching Rule.
     */
@@ -1191,19 +1183,17 @@
    }
    /**
     * Returns a reference to the {@code telephoneNumberSubstringsMatch}
     * Matching Rule which has the OID {@code 2.5.13.21}.
     * Returns a reference to the {@code telephoneNumberSubstringsMatch} Matching Rule which has the OID
     * {@code 2.5.13.21}.
     *
     * @return A reference to the {@code telephoneNumberSubstringsMatch}
     *         Matching Rule.
     * @return A reference to the {@code telephoneNumberSubstringsMatch} Matching Rule.
     */
    public static MatchingRule getTelephoneNumberSubstringsMatchingRule() {
        return TELEPHONE_NUMBER_SUBSTRINGS_MATCHING_RULE;
    }
    /**
     * Returns a reference to the {@code uniqueMemberMatch} Matching Rule which
     * has the OID {@code 2.5.13.23}.
     * Returns a reference to the {@code uniqueMemberMatch} Matching Rule which has the OID {@code 2.5.13.23}.
     *
     * @return A reference to the {@code uniqueMemberMatch} Matching Rule.
     */
@@ -1212,8 +1202,7 @@
    }
    /**
     * Returns a reference to the {@code uuidMatch} Matching Rule which has the
     * OID {@code 1.3.6.1.1.16.2}.
     * Returns a reference to the {@code uuidMatch} Matching Rule which has the OID {@code 1.3.6.1.1.16.2}.
     *
     * @return A reference to the {@code uuidMatch} Matching Rule.
     */
@@ -1222,8 +1211,7 @@
    }
    /**
     * Returns a reference to the {@code uuidOrderingMatch} Matching Rule which
     * has the OID {@code 1.3.6.1.1.16.3}.
     * Returns a reference to the {@code uuidOrderingMatch} Matching Rule which has the OID {@code 1.3.6.1.1.16.3}.
     *
     * @return A reference to the {@code uuidOrderingMatch} Matching Rule.
     */
@@ -1232,8 +1220,7 @@
    }
    /**
     * Returns a reference to the {@code wordMatch} Matching Rule which has the
     * OID {@code 2.5.13.32}.
     * Returns a reference to the {@code wordMatch} Matching Rule which has the OID {@code 2.5.13.32}.
     *
     * @return A reference to the {@code wordMatch} Matching Rule.
     */
@@ -1242,8 +1229,7 @@
    }
    /**
     * Returns a reference to the {@code aliasedObjectName} Attribute Type which
     * has the OID {@code 2.5.4.1}.
     * Returns a reference to the {@code aliasedObjectName} Attribute Type which has the OID {@code 2.5.4.1}.
     *
     * @return A reference to the {@code aliasedObjectName} Attribute Type.
     */
@@ -1252,8 +1238,7 @@
    }
    /**
     * Returns a reference to the {@code altServer} Attribute Type which has the
     * OID {@code 1.3.6.1.4.1.1466.101.120.6}.
     * Returns a reference to the {@code altServer} Attribute Type which has the OID {@code 1.3.6.1.4.1.1466.101.120.6}.
     *
     * @return A reference to the {@code altServer} Attribute Type.
     */
@@ -1262,8 +1247,7 @@
    }
    /**
     * Returns a reference to the {@code attributeTypes} Attribute Type which
     * has the OID {@code 2.5.21.5}.
     * Returns a reference to the {@code attributeTypes} Attribute Type which has the OID {@code 2.5.21.5}.
     *
     * @return A reference to the {@code attributeTypes} Attribute Type.
     */
@@ -1272,8 +1256,16 @@
    }
    /**
     * Returns a reference to the {@code authPassword} Attribute Type which has
     * the OID {@code 1.3.6.1.4.1.4203.1.3.4}.
     * Returns a reference to the {@code authorityRevocationList} Attribute Type which has the OID {@code 2.5.4.38}.
     *
     * @return A reference to the {@code authorityRevocationList} Attribute Type.
     */
    public static AttributeType getAuthorityRevocationListAttributeType() {
        return AUTHORITY_REVOCATION_LIST_ATTRIBUTE_TYPE;
    }
    /**
     * Returns a reference to the {@code authPassword} Attribute Type which has the OID {@code 1.3.6.1.4.1.4203.1.3.4}.
     *
     * @return A reference to the {@code authPassword} Attribute Type.
     */
@@ -1282,8 +1274,7 @@
    }
    /**
     * Returns a reference to the {@code businessCategory} Attribute Type which
     * has the OID {@code 2.5.4.15}.
     * Returns a reference to the {@code businessCategory} Attribute Type which has the OID {@code 2.5.4.15}.
     *
     * @return A reference to the {@code businessCategory} Attribute Type.
     */
@@ -1292,8 +1283,16 @@
    }
    /**
     * Returns a reference to the {@code cn} Attribute Type which has the OID
     * {@code 2.5.4.3}.
     * Returns a reference to the {@code certificateRevocationList} Attribute Type which has the OID {@code 2.5.4.39}.
     *
     * @return A reference to the {@code certificateRevocationList} Attribute Type.
     */
    public static AttributeType getCertificateRevocationListAttributeType() {
        return CERTIFICATE_REVOCATION_LIST_ATTRIBUTE_TYPE;
    }
    /**
     * Returns a reference to the {@code cn} Attribute Type which has the OID {@code 2.5.4.3}.
     *
     * @return A reference to the {@code cn} Attribute Type.
     */
@@ -1302,8 +1301,7 @@
    }
    /**
     * Returns a reference to the {@code createTimestamp} Attribute Type which
     * has the OID {@code 2.5.18.1}.
     * Returns a reference to the {@code createTimestamp} Attribute Type which has the OID {@code 2.5.18.1}.
     *
     * @return A reference to the {@code createTimestamp} Attribute Type.
     */
@@ -1312,8 +1310,7 @@
    }
    /**
     * Returns a reference to the {@code creatorsName} Attribute Type which has
     * the OID {@code 2.5.18.3}.
     * Returns a reference to the {@code creatorsName} Attribute Type which has the OID {@code 2.5.18.3}.
     *
     * @return A reference to the {@code creatorsName} Attribute Type.
     */
@@ -1322,8 +1319,16 @@
    }
    /**
     * Returns a reference to the {@code c} Attribute Type which has the OID
     * {@code 2.5.4.6}.
     * Returns a reference to the {@code crossCertificatePair} Attribute Type which has the OID {@code 2.5.4.40}.
     *
     * @return A reference to the {@code crossCertificatePair} Attribute Type.
     */
    public static AttributeType getCrossCertificatePairAttributeType() {
        return CROSS_CERTIFICATE_PAIR_ATTRIBUTE_TYPE;
    }
    /**
     * Returns a reference to the {@code c} Attribute Type which has the OID {@code 2.5.4.6}.
     *
     * @return A reference to the {@code c} Attribute Type.
     */
@@ -1332,8 +1337,16 @@
    }
    /**
     * Returns a reference to the {@code dc} Attribute Type which has the OID
     * {@code 0.9.2342.19200300.100.1.25}.
     * Returns a reference to the {@code cACertificate} Attribute Type which has the OID {@code 2.5.4.37}.
     *
     * @return A reference to the {@code cACertificate} Attribute Type.
     */
    public static AttributeType getCACertificateAttributeType() {
        return C_A_CERTIFICATE_ATTRIBUTE_TYPE;
    }
    /**
     * Returns a reference to the {@code dc} Attribute Type which has the OID {@code 0.9.2342.19200300.100.1.25}.
     *
     * @return A reference to the {@code dc} Attribute Type.
     */
@@ -1342,8 +1355,16 @@
    }
    /**
     * Returns a reference to the {@code description} Attribute Type which has
     * the OID {@code 2.5.4.13}.
     * Returns a reference to the {@code deltaRevocationList} Attribute Type which has the OID {@code 2.5.4.53}.
     *
     * @return A reference to the {@code deltaRevocationList} Attribute Type.
     */
    public static AttributeType getDeltaRevocationListAttributeType() {
        return DELTA_REVOCATION_LIST_ATTRIBUTE_TYPE;
    }
    /**
     * Returns a reference to the {@code description} Attribute Type which has the OID {@code 2.5.4.13}.
     *
     * @return A reference to the {@code description} Attribute Type.
     */
@@ -1352,8 +1373,7 @@
    }
    /**
     * Returns a reference to the {@code destinationIndicator} Attribute Type
     * which has the OID {@code 2.5.4.27}.
     * Returns a reference to the {@code destinationIndicator} Attribute Type which has the OID {@code 2.5.4.27}.
     *
     * @return A reference to the {@code destinationIndicator} Attribute Type.
     */
@@ -1362,8 +1382,7 @@
    }
    /**
     * Returns a reference to the {@code distinguishedName} Attribute Type which
     * has the OID {@code 2.5.4.49}.
     * Returns a reference to the {@code distinguishedName} Attribute Type which has the OID {@code 2.5.4.49}.
     *
     * @return A reference to the {@code distinguishedName} Attribute Type.
     */
@@ -1372,8 +1391,7 @@
    }
    /**
     * Returns a reference to the {@code ditContentRules} Attribute Type which
     * has the OID {@code 2.5.21.2}.
     * Returns a reference to the {@code ditContentRules} Attribute Type which has the OID {@code 2.5.21.2}.
     *
     * @return A reference to the {@code ditContentRules} Attribute Type.
     */
@@ -1382,8 +1400,7 @@
    }
    /**
     * Returns a reference to the {@code ditStructureRules} Attribute Type which
     * has the OID {@code 2.5.21.1}.
     * Returns a reference to the {@code ditStructureRules} Attribute Type which has the OID {@code 2.5.21.1}.
     *
     * @return A reference to the {@code ditStructureRules} Attribute Type.
     */
@@ -1392,8 +1409,7 @@
    }
    /**
     * Returns a reference to the {@code dnQualifier} Attribute Type which has
     * the OID {@code 2.5.4.46}.
     * Returns a reference to the {@code dnQualifier} Attribute Type which has the OID {@code 2.5.4.46}.
     *
     * @return A reference to the {@code dnQualifier} Attribute Type.
     */
@@ -1402,8 +1418,7 @@
    }
    /**
     * Returns a reference to the {@code enhancedSearchGuide} Attribute Type
     * which has the OID {@code 2.5.4.47}.
     * Returns a reference to the {@code enhancedSearchGuide} Attribute Type which has the OID {@code 2.5.4.47}.
     *
     * @return A reference to the {@code enhancedSearchGuide} Attribute Type.
     */
@@ -1412,8 +1427,7 @@
    }
    /**
     * Returns a reference to the {@code entryDN} Attribute Type which has the
     * OID {@code 1.3.6.1.1.20}.
     * Returns a reference to the {@code entryDN} Attribute Type which has the OID {@code 1.3.6.1.1.20}.
     *
     * @return A reference to the {@code entryDN} Attribute Type.
     */
@@ -1422,8 +1436,7 @@
    }
    /**
     * Returns a reference to the {@code entryUUID} Attribute Type which has the
     * OID {@code 1.3.6.1.1.16.4}.
     * Returns a reference to the {@code entryUUID} Attribute Type which has the OID {@code 1.3.6.1.1.16.4}.
     *
     * @return A reference to the {@code entryUUID} Attribute Type.
     */
@@ -1432,19 +1445,16 @@
    }
    /**
     * Returns a reference to the {@code facsimileTelephoneNumber} Attribute
     * Type which has the OID {@code 2.5.4.23}.
     * Returns a reference to the {@code facsimileTelephoneNumber} Attribute Type which has the OID {@code 2.5.4.23}.
     *
     * @return A reference to the {@code facsimileTelephoneNumber} Attribute
     *         Type.
     * @return A reference to the {@code facsimileTelephoneNumber} Attribute Type.
     */
    public static AttributeType getFacsimileTelephoneNumberAttributeType() {
        return FACSIMILE_TELEPHONE_NUMBER_ATTRIBUTE_TYPE;
    }
    /**
     * Returns a reference to the {@code generationQualifier} Attribute Type
     * which has the OID {@code 2.5.4.44}.
     * Returns a reference to the {@code generationQualifier} Attribute Type which has the OID {@code 2.5.4.44}.
     *
     * @return A reference to the {@code generationQualifier} Attribute Type.
     */
@@ -1453,8 +1463,7 @@
    }
    /**
     * Returns a reference to the {@code givenName} Attribute Type which has the
     * OID {@code 2.5.4.42}.
     * Returns a reference to the {@code givenName} Attribute Type which has the OID {@code 2.5.4.42}.
     *
     * @return A reference to the {@code givenName} Attribute Type.
     */
@@ -1463,8 +1472,7 @@
    }
    /**
     * Returns a reference to the {@code governingStructureRule} Attribute Type
     * which has the OID {@code 2.5.21.10}.
     * Returns a reference to the {@code governingStructureRule} Attribute Type which has the OID {@code 2.5.21.10}.
     *
     * @return A reference to the {@code governingStructureRule} Attribute Type.
     */
@@ -1473,8 +1481,7 @@
    }
    /**
     * Returns a reference to the {@code houseIdentifier} Attribute Type which
     * has the OID {@code 2.5.4.51}.
     * Returns a reference to the {@code houseIdentifier} Attribute Type which has the OID {@code 2.5.4.51}.
     *
     * @return A reference to the {@code houseIdentifier} Attribute Type.
     */
@@ -1483,8 +1490,7 @@
    }
    /**
     * Returns a reference to the {@code initials} Attribute Type which has the
     * OID {@code 2.5.4.43}.
     * Returns a reference to the {@code initials} Attribute Type which has the OID {@code 2.5.4.43}.
     *
     * @return A reference to the {@code initials} Attribute Type.
     */
@@ -1493,19 +1499,17 @@
    }
    /**
     * Returns a reference to the {@code internationalISDNNumber} Attribute Type
     * which has the OID {@code 2.5.4.25}.
     * Returns a reference to the {@code internationalISDNNumber} Attribute Type which has the OID {@code 2.5.4.25}.
     *
     * @return A reference to the {@code internationalISDNNumber} Attribute
     *         Type.
     * @return A reference to the {@code internationalISDNNumber} Attribute Type.
     */
    public static AttributeType getInternationalISDNNumberAttributeType() {
        return INTERNATIONAL_ISDN_NUMBER_ATTRIBUTE_TYPE;
    }
    /**
     * Returns a reference to the {@code ldapSyntaxes} Attribute Type which has
     * the OID {@code 1.3.6.1.4.1.1466.101.120.16}.
     * Returns a reference to the {@code ldapSyntaxes} Attribute Type which has the OID
     * {@code 1.3.6.1.4.1.1466.101.120.16}.
     *
     * @return A reference to the {@code ldapSyntaxes} Attribute Type.
     */
@@ -1514,8 +1518,7 @@
    }
    /**
     * Returns a reference to the {@code l} Attribute Type which has the OID
     * {@code 2.5.4.7}.
     * Returns a reference to the {@code l} Attribute Type which has the OID {@code 2.5.4.7}.
     *
     * @return A reference to the {@code l} Attribute Type.
     */
@@ -1524,8 +1527,7 @@
    }
    /**
     * Returns a reference to the {@code matchingRules} Attribute Type which has
     * the OID {@code 2.5.21.4}.
     * Returns a reference to the {@code matchingRules} Attribute Type which has the OID {@code 2.5.21.4}.
     *
     * @return A reference to the {@code matchingRules} Attribute Type.
     */
@@ -1534,8 +1536,7 @@
    }
    /**
     * Returns a reference to the {@code matchingRuleUse} Attribute Type which
     * has the OID {@code 2.5.21.8}.
     * Returns a reference to the {@code matchingRuleUse} Attribute Type which has the OID {@code 2.5.21.8}.
     *
     * @return A reference to the {@code matchingRuleUse} Attribute Type.
     */
@@ -1544,8 +1545,7 @@
    }
    /**
     * Returns a reference to the {@code member} Attribute Type which has the
     * OID {@code 2.5.4.31}.
     * Returns a reference to the {@code member} Attribute Type which has the OID {@code 2.5.4.31}.
     *
     * @return A reference to the {@code member} Attribute Type.
     */
@@ -1554,8 +1554,7 @@
    }
    /**
     * Returns a reference to the {@code modifiersName} Attribute Type which has
     * the OID {@code 2.5.18.4}.
     * Returns a reference to the {@code modifiersName} Attribute Type which has the OID {@code 2.5.18.4}.
     *
     * @return A reference to the {@code modifiersName} Attribute Type.
     */
@@ -1564,8 +1563,7 @@
    }
    /**
     * Returns a reference to the {@code modifyTimestamp} Attribute Type which
     * has the OID {@code 2.5.18.2}.
     * Returns a reference to the {@code modifyTimestamp} Attribute Type which has the OID {@code 2.5.18.2}.
     *
     * @return A reference to the {@code modifyTimestamp} Attribute Type.
     */
@@ -1574,8 +1572,7 @@
    }
    /**
     * Returns a reference to the {@code name} Attribute Type which has the OID
     * {@code 2.5.4.41}.
     * Returns a reference to the {@code name} Attribute Type which has the OID {@code 2.5.4.41}.
     *
     * @return A reference to the {@code name} Attribute Type.
     */
@@ -1584,8 +1581,7 @@
    }
    /**
     * Returns a reference to the {@code nameForms} Attribute Type which has the
     * OID {@code 2.5.21.7}.
     * Returns a reference to the {@code nameForms} Attribute Type which has the OID {@code 2.5.21.7}.
     *
     * @return A reference to the {@code nameForms} Attribute Type.
     */
@@ -1594,8 +1590,8 @@
    }
    /**
     * Returns a reference to the {@code namingContexts} Attribute Type which
     * has the OID {@code 1.3.6.1.4.1.1466.101.120.5}.
     * Returns a reference to the {@code namingContexts} Attribute Type which has the OID
     * {@code 1.3.6.1.4.1.1466.101.120.5}.
     *
     * @return A reference to the {@code namingContexts} Attribute Type.
     */
@@ -1604,8 +1600,7 @@
    }
    /**
     * Returns a reference to the {@code objectClasses} Attribute Type which has
     * the OID {@code 2.5.21.6}.
     * Returns a reference to the {@code objectClasses} Attribute Type which has the OID {@code 2.5.21.6}.
     *
     * @return A reference to the {@code objectClasses} Attribute Type.
     */
@@ -1614,8 +1609,7 @@
    }
    /**
     * Returns a reference to the {@code objectClass} Attribute Type which has
     * the OID {@code 2.5.4.0}.
     * Returns a reference to the {@code objectClass} Attribute Type which has the OID {@code 2.5.4.0}.
     *
     * @return A reference to the {@code objectClass} Attribute Type.
     */
@@ -1624,8 +1618,7 @@
    }
    /**
     * Returns a reference to the {@code ou} Attribute Type which has the OID
     * {@code 2.5.4.11}.
     * Returns a reference to the {@code ou} Attribute Type which has the OID {@code 2.5.4.11}.
     *
     * @return A reference to the {@code ou} Attribute Type.
     */
@@ -1634,8 +1627,7 @@
    }
    /**
     * Returns a reference to the {@code owner} Attribute Type which has the OID
     * {@code 2.5.4.32}.
     * Returns a reference to the {@code owner} Attribute Type which has the OID {@code 2.5.4.32}.
     *
     * @return A reference to the {@code owner} Attribute Type.
     */
@@ -1644,8 +1636,7 @@
    }
    /**
     * Returns a reference to the {@code o} Attribute Type which has the OID
     * {@code 2.5.4.10}.
     * Returns a reference to the {@code o} Attribute Type which has the OID {@code 2.5.4.10}.
     *
     * @return A reference to the {@code o} Attribute Type.
     */
@@ -1654,19 +1645,16 @@
    }
    /**
     * Returns a reference to the {@code physicalDeliveryOfficeName} Attribute
     * Type which has the OID {@code 2.5.4.19}.
     * Returns a reference to the {@code physicalDeliveryOfficeName} Attribute Type which has the OID {@code 2.5.4.19}.
     *
     * @return A reference to the {@code physicalDeliveryOfficeName} Attribute
     *         Type.
     * @return A reference to the {@code physicalDeliveryOfficeName} Attribute Type.
     */
    public static AttributeType getPhysicalDeliveryOfficeNameAttributeType() {
        return PHYSICAL_DELIVERY_OFFICE_NAME_ATTRIBUTE_TYPE;
    }
    /**
     * Returns a reference to the {@code postalAddress} Attribute Type which has
     * the OID {@code 2.5.4.16}.
     * Returns a reference to the {@code postalAddress} Attribute Type which has the OID {@code 2.5.4.16}.
     *
     * @return A reference to the {@code postalAddress} Attribute Type.
     */
@@ -1675,8 +1663,7 @@
    }
    /**
     * Returns a reference to the {@code postalCode} Attribute Type which has
     * the OID {@code 2.5.4.17}.
     * Returns a reference to the {@code postalCode} Attribute Type which has the OID {@code 2.5.4.17}.
     *
     * @return A reference to the {@code postalCode} Attribute Type.
     */
@@ -1685,8 +1672,7 @@
    }
    /**
     * Returns a reference to the {@code postOfficeBox} Attribute Type which has
     * the OID {@code 2.5.4.18}.
     * Returns a reference to the {@code postOfficeBox} Attribute Type which has the OID {@code 2.5.4.18}.
     *
     * @return A reference to the {@code postOfficeBox} Attribute Type.
     */
@@ -1695,19 +1681,16 @@
    }
    /**
     * Returns a reference to the {@code preferredDeliveryMethod} Attribute Type
     * which has the OID {@code 2.5.4.28}.
     * Returns a reference to the {@code preferredDeliveryMethod} Attribute Type which has the OID {@code 2.5.4.28}.
     *
     * @return A reference to the {@code preferredDeliveryMethod} Attribute
     *         Type.
     * @return A reference to the {@code preferredDeliveryMethod} Attribute Type.
     */
    public static AttributeType getPreferredDeliveryMethodAttributeType() {
        return PREFERRED_DELIVERY_METHOD_ATTRIBUTE_TYPE;
    }
    /**
     * Returns a reference to the {@code registeredAddress} Attribute Type which
     * has the OID {@code 2.5.4.26}.
     * Returns a reference to the {@code registeredAddress} Attribute Type which has the OID {@code 2.5.4.26}.
     *
     * @return A reference to the {@code registeredAddress} Attribute Type.
     */
@@ -1716,8 +1699,7 @@
    }
    /**
     * Returns a reference to the {@code roleOccupant} Attribute Type which has
     * the OID {@code 2.5.4.33}.
     * Returns a reference to the {@code roleOccupant} Attribute Type which has the OID {@code 2.5.4.33}.
     *
     * @return A reference to the {@code roleOccupant} Attribute Type.
     */
@@ -1726,8 +1708,7 @@
    }
    /**
     * Returns a reference to the {@code searchGuide} Attribute Type which has
     * the OID {@code 2.5.4.14}.
     * Returns a reference to the {@code searchGuide} Attribute Type which has the OID {@code 2.5.4.14}.
     *
     * @return A reference to the {@code searchGuide} Attribute Type.
     */
@@ -1736,8 +1717,7 @@
    }
    /**
     * Returns a reference to the {@code seeAlso} Attribute Type which has the
     * OID {@code 2.5.4.34}.
     * Returns a reference to the {@code seeAlso} Attribute Type which has the OID {@code 2.5.4.34}.
     *
     * @return A reference to the {@code seeAlso} Attribute Type.
     */
@@ -1746,8 +1726,7 @@
    }
    /**
     * Returns a reference to the {@code serialNumber} Attribute Type which has
     * the OID {@code 2.5.4.5}.
     * Returns a reference to the {@code serialNumber} Attribute Type which has the OID {@code 2.5.4.5}.
     *
     * @return A reference to the {@code serialNumber} Attribute Type.
     */
@@ -1756,8 +1735,7 @@
    }
    /**
     * Returns a reference to the {@code sn} Attribute Type which has the OID
     * {@code 2.5.4.4}.
     * Returns a reference to the {@code sn} Attribute Type which has the OID {@code 2.5.4.4}.
     *
     * @return A reference to the {@code sn} Attribute Type.
     */
@@ -1766,8 +1744,7 @@
    }
    /**
     * Returns a reference to the {@code street} Attribute Type which has the
     * OID {@code 2.5.4.9}.
     * Returns a reference to the {@code street} Attribute Type which has the OID {@code 2.5.4.9}.
     *
     * @return A reference to the {@code street} Attribute Type.
     */
@@ -1776,8 +1753,7 @@
    }
    /**
     * Returns a reference to the {@code structuralObjectClass} Attribute Type
     * which has the OID {@code 2.5.21.9}.
     * Returns a reference to the {@code structuralObjectClass} Attribute Type which has the OID {@code 2.5.21.9}.
     *
     * @return A reference to the {@code structuralObjectClass} Attribute Type.
     */
@@ -1786,8 +1762,7 @@
    }
    /**
     * Returns a reference to the {@code st} Attribute Type which has the OID
     * {@code 2.5.4.8}.
     * Returns a reference to the {@code st} Attribute Type which has the OID {@code 2.5.4.8}.
     *
     * @return A reference to the {@code st} Attribute Type.
     */
@@ -1796,8 +1771,7 @@
    }
    /**
     * Returns a reference to the {@code subschemaSubentry} Attribute Type which
     * has the OID {@code 2.5.18.10}.
     * Returns a reference to the {@code subschemaSubentry} Attribute Type which has the OID {@code 2.5.18.10}.
     *
     * @return A reference to the {@code subschemaSubentry} Attribute Type.
     */
@@ -1806,19 +1780,27 @@
    }
    /**
     * Returns a reference to the {@code supportedAuthPasswordSchemes} Attribute
     * Type which has the OID {@code 1.3.6.1.4.1.4203.1.3.3}.
     * Returns a reference to the {@code supportedAlgorithms} Attribute Type which has the OID {@code 2.5.4.52}.
     *
     * @return A reference to the {@code supportedAuthPasswordSchemes} Attribute
     *         Type.
     * @return A reference to the {@code supportedAlgorithms} Attribute Type.
     */
    public static AttributeType getSupportedAlgorithmsAttributeType() {
        return SUPPORTED_ALGORITHMS_ATTRIBUTE_TYPE;
    }
    /**
     * Returns a reference to the {@code supportedAuthPasswordSchemes} Attribute Type which has the OID
     * {@code 1.3.6.1.4.1.4203.1.3.3}.
     *
     * @return A reference to the {@code supportedAuthPasswordSchemes} Attribute Type.
     */
    public static AttributeType getSupportedAuthPasswordSchemesAttributeType() {
        return SUPPORTED_AUTH_PASSWORD_SCHEMES_ATTRIBUTE_TYPE;
    }
    /**
     * Returns a reference to the {@code supportedControl} Attribute Type which
     * has the OID {@code 1.3.6.1.4.1.1466.101.120.13}.
     * Returns a reference to the {@code supportedControl} Attribute Type which has the OID
     * {@code 1.3.6.1.4.1.1466.101.120.13}.
     *
     * @return A reference to the {@code supportedControl} Attribute Type.
     */
@@ -1827,8 +1809,8 @@
    }
    /**
     * Returns a reference to the {@code supportedExtension} Attribute Type
     * which has the OID {@code 1.3.6.1.4.1.1466.101.120.7}.
     * Returns a reference to the {@code supportedExtension} Attribute Type which has the OID
     * {@code 1.3.6.1.4.1.1466.101.120.7}.
     *
     * @return A reference to the {@code supportedExtension} Attribute Type.
     */
@@ -1837,8 +1819,8 @@
    }
    /**
     * Returns a reference to the {@code supportedFeatures} Attribute Type which
     * has the OID {@code 1.3.6.1.4.1.4203.1.3.5}.
     * Returns a reference to the {@code supportedFeatures} Attribute Type which has the OID
     * {@code 1.3.6.1.4.1.4203.1.3.5}.
     *
     * @return A reference to the {@code supportedFeatures} Attribute Type.
     */
@@ -1847,8 +1829,8 @@
    }
    /**
     * Returns a reference to the {@code supportedLDAPVersion} Attribute Type
     * which has the OID {@code 1.3.6.1.4.1.1466.101.120.15}.
     * Returns a reference to the {@code supportedLDAPVersion} Attribute Type which has the OID
     * {@code 1.3.6.1.4.1.1466.101.120.15}.
     *
     * @return A reference to the {@code supportedLDAPVersion} Attribute Type.
     */
@@ -1857,19 +1839,17 @@
    }
    /**
     * Returns a reference to the {@code supportedSASLMechanisms} Attribute Type
     * which has the OID {@code 1.3.6.1.4.1.1466.101.120.14}.
     * Returns a reference to the {@code supportedSASLMechanisms} Attribute Type which has the OID
     * {@code 1.3.6.1.4.1.1466.101.120.14}.
     *
     * @return A reference to the {@code supportedSASLMechanisms} Attribute
     *         Type.
     * @return A reference to the {@code supportedSASLMechanisms} Attribute Type.
     */
    public static AttributeType getSupportedSASLMechanismsAttributeType() {
        return SUPPORTED_SASL_MECHANISMS_ATTRIBUTE_TYPE;
    }
    /**
     * Returns a reference to the {@code telephoneNumber} Attribute Type which
     * has the OID {@code 2.5.4.20}.
     * Returns a reference to the {@code telephoneNumber} Attribute Type which has the OID {@code 2.5.4.20}.
     *
     * @return A reference to the {@code telephoneNumber} Attribute Type.
     */
@@ -1878,19 +1858,16 @@
    }
    /**
     * Returns a reference to the {@code teletexTerminalIdentifier} Attribute
     * Type which has the OID {@code 2.5.4.22}.
     * Returns a reference to the {@code teletexTerminalIdentifier} Attribute Type which has the OID {@code 2.5.4.22}.
     *
     * @return A reference to the {@code teletexTerminalIdentifier} Attribute
     *         Type.
     * @return A reference to the {@code teletexTerminalIdentifier} Attribute Type.
     */
    public static AttributeType getTeletexTerminalIdentifierAttributeType() {
        return TELETEX_TERMINAL_IDENTIFIER_ATTRIBUTE_TYPE;
    }
    /**
     * Returns a reference to the {@code telexNumber} Attribute Type which has
     * the OID {@code 2.5.4.21}.
     * Returns a reference to the {@code telexNumber} Attribute Type which has the OID {@code 2.5.4.21}.
     *
     * @return A reference to the {@code telexNumber} Attribute Type.
     */
@@ -1899,8 +1876,7 @@
    }
    /**
     * Returns a reference to the {@code title} Attribute Type which has the OID
     * {@code 2.5.4.12}.
     * Returns a reference to the {@code title} Attribute Type which has the OID {@code 2.5.4.12}.
     *
     * @return A reference to the {@code title} Attribute Type.
     */
@@ -1909,8 +1885,7 @@
    }
    /**
     * Returns a reference to the {@code uid} Attribute Type which has the OID
     * {@code 0.9.2342.19200300.100.1.1}.
     * Returns a reference to the {@code uid} Attribute Type which has the OID {@code 0.9.2342.19200300.100.1.1}.
     *
     * @return A reference to the {@code uid} Attribute Type.
     */
@@ -1919,8 +1894,7 @@
    }
    /**
     * Returns a reference to the {@code uniqueMember} Attribute Type which has
     * the OID {@code 2.5.4.50}.
     * Returns a reference to the {@code uniqueMember} Attribute Type which has the OID {@code 2.5.4.50}.
     *
     * @return A reference to the {@code uniqueMember} Attribute Type.
     */
@@ -1929,8 +1903,16 @@
    }
    /**
     * Returns a reference to the {@code userPassword} Attribute Type which has
     * the OID {@code 2.5.4.35}.
     * Returns a reference to the {@code userCertificate} Attribute Type which has the OID {@code 2.5.4.36}.
     *
     * @return A reference to the {@code userCertificate} Attribute Type.
     */
    public static AttributeType getUserCertificateAttributeType() {
        return USER_CERTIFICATE_ATTRIBUTE_TYPE;
    }
    /**
     * Returns a reference to the {@code userPassword} Attribute Type which has the OID {@code 2.5.4.35}.
     *
     * @return A reference to the {@code userPassword} Attribute Type.
     */
@@ -1939,8 +1921,7 @@
    }
    /**
     * Returns a reference to the {@code vendorName} Attribute Type which has
     * the OID {@code 1.3.6.1.1.4}.
     * Returns a reference to the {@code vendorName} Attribute Type which has the OID {@code 1.3.6.1.1.4}.
     *
     * @return A reference to the {@code vendorName} Attribute Type.
     */
@@ -1949,8 +1930,7 @@
    }
    /**
     * Returns a reference to the {@code vendorVersion} Attribute Type which has
     * the OID {@code 1.3.6.1.1.5}.
     * Returns a reference to the {@code vendorVersion} Attribute Type which has the OID {@code 1.3.6.1.1.5}.
     *
     * @return A reference to the {@code vendorVersion} Attribute Type.
     */
@@ -1959,8 +1939,7 @@
    }
    /**
     * Returns a reference to the {@code x121Address} Attribute Type which has
     * the OID {@code 2.5.4.24}.
     * Returns a reference to the {@code x121Address} Attribute Type which has the OID {@code 2.5.4.24}.
     *
     * @return A reference to the {@code x121Address} Attribute Type.
     */
@@ -1969,8 +1948,7 @@
    }
    /**
     * Returns a reference to the {@code x500UniqueIdentifier} Attribute Type
     * which has the OID {@code 2.5.4.45}.
     * Returns a reference to the {@code x500UniqueIdentifier} Attribute Type which has the OID {@code 2.5.4.45}.
     *
     * @return A reference to the {@code x500UniqueIdentifier} Attribute Type.
     */
@@ -1979,8 +1957,7 @@
    }
    /**
     * Returns a reference to the {@code alias} Object Class which has the OID
     * {@code 2.5.6.1}.
     * Returns a reference to the {@code alias} Object Class which has the OID {@code 2.5.6.1}.
     *
     * @return A reference to the {@code alias} Object Class.
     */
@@ -1989,8 +1966,7 @@
    }
    /**
     * Returns a reference to the {@code applicationProcess} Object Class which
     * has the OID {@code 2.5.6.11}.
     * Returns a reference to the {@code applicationProcess} Object Class which has the OID {@code 2.5.6.11}.
     *
     * @return A reference to the {@code applicationProcess} Object Class.
     */
@@ -1999,8 +1975,8 @@
    }
    /**
     * Returns a reference to the {@code authPasswordObject} Object Class which
     * has the OID {@code 1.3.6.1.4.1.4203.1.4.7}.
     * Returns a reference to the {@code authPasswordObject} Object Class which has the OID
     * {@code 1.3.6.1.4.1.4203.1.4.7}.
     *
     * @return A reference to the {@code authPasswordObject} Object Class.
     */
@@ -2009,8 +1985,25 @@
    }
    /**
     * Returns a reference to the {@code country} Object Class which has the OID
     * {@code 2.5.6.2}.
     * Returns a reference to the {@code certificationAuthority} Object Class which has the OID {@code 2.5.6.16}.
     *
     * @return A reference to the {@code certificationAuthority} Object Class.
     */
    public static ObjectClass getCertificationAuthorityObjectClass() {
        return CERTIFICATION_AUTHORITY_OBJECT_CLASS;
    }
    /**
     * Returns a reference to the {@code certificationAuthority-V2} Object Class which has the OID {@code 2.5.6.16.2}.
     *
     * @return A reference to the {@code certificationAuthority-V2} Object Class.
     */
    public static ObjectClass getCertificationAuthorityV2ObjectClass() {
        return CERTIFICATION_AUTHORITY_V2_OBJECT_CLASS;
    }
    /**
     * Returns a reference to the {@code country} Object Class which has the OID {@code 2.5.6.2}.
     *
     * @return A reference to the {@code country} Object Class.
     */
@@ -2019,8 +2012,16 @@
    }
    /**
     * Returns a reference to the {@code dcObject} Object Class which has the
     * OID {@code 1.3.6.1.4.1.1466.344}.
     * Returns a reference to the {@code cRLDistributionPoint} Object Class which has the OID {@code 2.5.6.19}.
     *
     * @return A reference to the {@code cRLDistributionPoint} Object Class.
     */
    public static ObjectClass getCRlDistributionPointObjectClass() {
        return C_RL_DISTRIBUTION_POINT_OBJECT_CLASS;
    }
    /**
     * Returns a reference to the {@code dcObject} Object Class which has the OID {@code 1.3.6.1.4.1.1466.344}.
     *
     * @return A reference to the {@code dcObject} Object Class.
     */
@@ -2029,8 +2030,16 @@
    }
    /**
     * Returns a reference to the {@code device} Object Class which has the OID
     * {@code 2.5.6.14}.
     * Returns a reference to the {@code deltaCRL} Object Class which has the OID {@code 2.5.6.23}.
     *
     * @return A reference to the {@code deltaCRL} Object Class.
     */
    public static ObjectClass getDeltaCrlObjectClass() {
        return DELTA_CRL_OBJECT_CLASS;
    }
    /**
     * Returns a reference to the {@code device} Object Class which has the OID {@code 2.5.6.14}.
     *
     * @return A reference to the {@code device} Object Class.
     */
@@ -2039,8 +2048,8 @@
    }
    /**
     * Returns a reference to the {@code extensibleObject} Object Class which
     * has the OID {@code 1.3.6.1.4.1.1466.101.120.111}.
     * Returns a reference to the {@code extensibleObject} Object Class which has the OID
     * {@code 1.3.6.1.4.1.1466.101.120.111}.
     *
     * @return A reference to the {@code extensibleObject} Object Class.
     */
@@ -2049,8 +2058,7 @@
    }
    /**
     * Returns a reference to the {@code groupOfNames} Object Class which has
     * the OID {@code 2.5.6.9}.
     * Returns a reference to the {@code groupOfNames} Object Class which has the OID {@code 2.5.6.9}.
     *
     * @return A reference to the {@code groupOfNames} Object Class.
     */
@@ -2059,8 +2067,7 @@
    }
    /**
     * Returns a reference to the {@code groupOfUniqueNames} Object Class which
     * has the OID {@code 2.5.6.17}.
     * Returns a reference to the {@code groupOfUniqueNames} Object Class which has the OID {@code 2.5.6.17}.
     *
     * @return A reference to the {@code groupOfUniqueNames} Object Class.
     */
@@ -2069,8 +2076,7 @@
    }
    /**
     * Returns a reference to the {@code locality} Object Class which has the
     * OID {@code 2.5.6.3}.
     * Returns a reference to the {@code locality} Object Class which has the OID {@code 2.5.6.3}.
     *
     * @return A reference to the {@code locality} Object Class.
     */
@@ -2079,8 +2085,7 @@
    }
    /**
     * Returns a reference to the {@code organizationalPerson} Object Class
     * which has the OID {@code 2.5.6.7}.
     * Returns a reference to the {@code organizationalPerson} Object Class which has the OID {@code 2.5.6.7}.
     *
     * @return A reference to the {@code organizationalPerson} Object Class.
     */
@@ -2089,8 +2094,7 @@
    }
    /**
     * Returns a reference to the {@code organizationalRole} Object Class which
     * has the OID {@code 2.5.6.8}.
     * Returns a reference to the {@code organizationalRole} Object Class which has the OID {@code 2.5.6.8}.
     *
     * @return A reference to the {@code organizationalRole} Object Class.
     */
@@ -2099,8 +2103,7 @@
    }
    /**
     * Returns a reference to the {@code organizationalUnit} Object Class which
     * has the OID {@code 2.5.6.5}.
     * Returns a reference to the {@code organizationalUnit} Object Class which has the OID {@code 2.5.6.5}.
     *
     * @return A reference to the {@code organizationalUnit} Object Class.
     */
@@ -2109,8 +2112,7 @@
    }
    /**
     * Returns a reference to the {@code organization} Object Class which has
     * the OID {@code 2.5.6.4}.
     * Returns a reference to the {@code organization} Object Class which has the OID {@code 2.5.6.4}.
     *
     * @return A reference to the {@code organization} Object Class.
     */
@@ -2119,8 +2121,7 @@
    }
    /**
     * Returns a reference to the {@code person} Object Class which has the OID
     * {@code 2.5.6.6}.
     * Returns a reference to the {@code person} Object Class which has the OID {@code 2.5.6.6}.
     *
     * @return A reference to the {@code person} Object Class.
     */
@@ -2129,8 +2130,25 @@
    }
    /**
     * Returns a reference to the {@code residentialPerson} Object Class which
     * has the OID {@code 2.5.6.10}.
     * Returns a reference to the {@code pkiCA} Object Class which has the OID {@code 2.5.6.22}.
     *
     * @return A reference to the {@code pkiCA} Object Class.
     */
    public static ObjectClass getPkiCaObjectClass() {
        return PKI_CA_OBJECT_CLASS;
    }
    /**
     * Returns a reference to the {@code pkiUser} Object Class which has the OID {@code 2.5.6.21}.
     *
     * @return A reference to the {@code pkiUser} Object Class.
     */
    public static ObjectClass getPkiUserObjectClass() {
        return PKI_USER_OBJECT_CLASS;
    }
    /**
     * Returns a reference to the {@code residentialPerson} Object Class which has the OID {@code 2.5.6.10}.
     *
     * @return A reference to the {@code residentialPerson} Object Class.
     */
@@ -2139,8 +2157,16 @@
    }
    /**
     * Returns a reference to the {@code subschema} Object Class which has the
     * OID {@code 2.5.20.1}.
     * Returns a reference to the {@code strongAuthenticationUser} Object Class which has the OID {@code 2.5.6.15}.
     *
     * @return A reference to the {@code strongAuthenticationUser} Object Class.
     */
    public static ObjectClass getStrongAuthenticationUserObjectClass() {
        return STRONG_AUTHENTICATION_USER_OBJECT_CLASS;
    }
    /**
     * Returns a reference to the {@code subschema} Object Class which has the OID {@code 2.5.20.1}.
     *
     * @return A reference to the {@code subschema} Object Class.
     */
@@ -2149,8 +2175,7 @@
    }
    /**
     * Returns a reference to the {@code top} Object Class which has the OID
     * {@code 2.5.6.0}.
     * Returns a reference to the {@code top} Object Class which has the OID {@code 2.5.6.0}.
     *
     * @return A reference to the {@code top} Object Class.
     */
@@ -2159,12 +2184,20 @@
    }
    /**
     * Returns a reference to the {@code uidObject} Object Class which has the
     * OID {@code 1.3.6.1.1.3.1}.
     * Returns a reference to the {@code uidObject} Object Class which has the OID {@code 1.3.6.1.1.3.1}.
     *
     * @return A reference to the {@code uidObject} Object Class.
     */
    public static ObjectClass getUIDObjectObjectClass() {
        return UID_OBJECT_OBJECT_CLASS;
    }
    /**
     * Returns a reference to the {@code userSecurityInformation} Object Class which has the OID {@code 2.5.6.18}.
     *
     * @return A reference to the {@code userSecurityInformation} Object Class.
     */
    public static ObjectClass getUserSecurityInformationObjectClass() {
        return USER_SECURITY_INFORMATION_OBJECT_CLASS;
    }
}
opendj-core/src/main/java/org/forgerock/opendj/ldap/schema/CoreSchemaImpl.java
@@ -23,6 +23,7 @@
 *
 *      Copyright 2009-2010 Sun Microsystems, Inc.
 *      Portions copyright 2013-2014 ForgeRock AS.
 *      Portions copyright 2014 Manuel Gaupp
 */
package org.forgerock.opendj.ldap.schema;
@@ -57,6 +58,9 @@
    private static final Map<String, List<String>> RFC4519_ORIGIN = Collections.singletonMap(
            SCHEMA_PROPERTY_ORIGIN, Collections.singletonList("RFC 4519"));
    private static final Map<String, List<String>> RFC4523_ORIGIN = Collections.singletonMap(
            SCHEMA_PROPERTY_ORIGIN, Collections.singletonList("RFC 4523"));
    private static final Map<String, List<String>> RFC4530_ORIGIN = Collections.singletonMap(
            SCHEMA_PROPERTY_ORIGIN, Collections.singletonList("RFC 4530"));
@@ -80,6 +84,7 @@
        defaultObjectClasses(builder);
        addRFC4519(builder);
        addRFC4523(builder);
        addRFC4530(builder);
        addRFC3045(builder);
        addRFC3112(builder);
@@ -550,6 +555,101 @@
                        .singleton("uid"), attrs, ObjectClassType.AUXILIARY, RFC4519_ORIGIN, false);
    }
    private static void addRFC4523(final SchemaBuilder builder) {
        builder.buildSyntax(SYNTAX_CERTLIST_OID).description(SYNTAX_CERTLIST_DESCRIPTION)
                .extraProperties(RFC4523_ORIGIN).implementation(new CertificateListSyntaxImpl()).addToSchema();
        builder.buildSyntax(SYNTAX_CERTPAIR_OID).description(SYNTAX_CERTPAIR_DESCRIPTION)
                .extraProperties(RFC4523_ORIGIN).implementation(new CertificatePairSyntaxImpl()).addToSchema();
        builder.buildSyntax(SYNTAX_CERTIFICATE_OID).description(SYNTAX_CERTIFICATE_DESCRIPTION)
                .extraProperties(RFC4523_ORIGIN).implementation(new CertificateSyntaxImpl()).addToSchema();
        builder.buildSyntax(SYNTAX_CERTIFICATE_EXACT_ASSERTION_OID)
                .description(SYNTAX_CERTIFICATE_EXACT_ASSERTION_DESCRIPTION).extraProperties(RFC4523_ORIGIN)
                .implementation(new CertificateExactAssertionSyntaxImpl()).addToSchema();
        builder.buildSyntax(SYNTAX_SUPPORTED_ALGORITHM_OID).description(SYNTAX_SUPPORTED_ALGORITHM_DESCRIPTION)
                .extraProperties(RFC4523_ORIGIN).implementation(new SupportedAlgorithmSyntaxImpl()).addToSchema();
        builder.buildMatchingRule(EMR_CERTIFICATE_EXACT_OID).names(EMR_CERTIFICATE_EXACT_NAME)
                .syntaxOID(SYNTAX_CERTIFICATE_EXACT_ASSERTION_OID).extraProperties(RFC4523_ORIGIN)
                .implementation(new CertificateExactMatchingRuleImpl()).addToSchema();
        builder.addAttributeType("2.5.4.36", Collections.singletonList("userCertificate"),
                "X.509 user certificate", false, null, EMR_CERTIFICATE_EXACT_OID, null,
                null, null, SYNTAX_CERTIFICATE_OID, false, false, false,
                AttributeUsage.USER_APPLICATIONS, RFC4523_ORIGIN, false);
        builder.addAttributeType("2.5.4.37", Collections.singletonList("cACertificate"),
                "X.509 CA certificate", false, null, EMR_CERTIFICATE_EXACT_OID, null,
                null, null, SYNTAX_CERTIFICATE_OID, false, false, false,
                AttributeUsage.USER_APPLICATIONS, RFC4523_ORIGIN, false);
        builder.addAttributeType("2.5.4.38", Collections.singletonList("authorityRevocationList"),
                "X.509 authority revocation list", false, null, EMR_OCTET_STRING_OID, null,
                null, null, SYNTAX_CERTLIST_OID, false, false, false,
                AttributeUsage.USER_APPLICATIONS, RFC4523_ORIGIN, false);
        builder.addAttributeType("2.5.4.39", Collections.singletonList("certificateRevocationList"),
                "X.509 certificate revocation list", false, null, EMR_OCTET_STRING_OID, null,
                null, null, SYNTAX_CERTLIST_OID, false, false, false,
                AttributeUsage.USER_APPLICATIONS, RFC4523_ORIGIN, false);
        builder.addAttributeType("2.5.4.40", Collections.singletonList("crossCertificatePair"),
                "X.509 cross certificate pair", false, null, EMR_OCTET_STRING_OID, null,
                null, null, SYNTAX_CERTPAIR_OID, false, false, false,
                AttributeUsage.USER_APPLICATIONS, RFC4523_ORIGIN, false);
        builder.addAttributeType("2.5.4.52", Collections.singletonList("supportedAlgorithms"),
                "X.509 supported algorithms", false, null, EMR_OCTET_STRING_OID, null,
                null, null, SYNTAX_SUPPORTED_ALGORITHM_OID, false, false, false,
                AttributeUsage.USER_APPLICATIONS, RFC4523_ORIGIN, false);
        builder.addAttributeType("2.5.4.53", Collections.singletonList("deltaRevocationList"),
                "X.509 delta revocation list", false, null, EMR_OCTET_STRING_OID, null,
                null, null, SYNTAX_CERTLIST_OID, false, false, false,
                AttributeUsage.USER_APPLICATIONS, RFC4523_ORIGIN, false);
        builder.addObjectClass("2.5.6.21", Collections.singletonList("pkiUser"),
                "X.509 PKI User", false, Collections.singleton(TOP_OBJECTCLASS_NAME), EMPTY_STRING_SET,
                Collections.singleton("userCertificate"), ObjectClassType.AUXILIARY, RFC4523_ORIGIN, false);
        Set<String> attrs = new HashSet<String>();
        attrs.add("cACertificate");
        attrs.add("certificateRevocationList");
        attrs.add("authorityRevocationList");
        attrs.add("crossCertificatePair");
        builder.addObjectClass("2.5.6.22", Collections.singletonList("pkiCA"),
                "X.509 PKI Certificate Authority", false, Collections.singleton(TOP_OBJECTCLASS_NAME),
                EMPTY_STRING_SET, attrs, ObjectClassType.AUXILIARY, RFC4523_ORIGIN, false);
        attrs = new HashSet<String>();
        attrs.add("certificateRevocationList");
        attrs.add("authorityRevocationList");
        attrs.add("deltaRevocationList");
        builder.addObjectClass("2.5.6.19", Collections.singletonList("cRLDistributionPoint"),
                "X.509 CRL distribution point", false, Collections.singleton(TOP_OBJECTCLASS_NAME),
                Collections.singleton("cn"), attrs, ObjectClassType.STRUCTURAL, RFC4523_ORIGIN, false);
        builder.addObjectClass("2.5.6.23", Collections.singletonList("deltaCRL"),
                "X.509 delta CRL", false, Collections.singleton(TOP_OBJECTCLASS_NAME), EMPTY_STRING_SET,
                Collections.singleton("deltaRevocationList"), ObjectClassType.AUXILIARY, RFC4523_ORIGIN, false);
        builder.addObjectClass("2.5.6.15", Collections.singletonList("strongAuthenticationUser"),
                "X.521 strong authentication user", false, Collections.singleton(TOP_OBJECTCLASS_NAME),
                Collections.singleton("userCertificate"), EMPTY_STRING_SET, ObjectClassType.AUXILIARY,
                RFC4523_ORIGIN, false);
        builder.addObjectClass("2.5.6.18", Collections.singletonList("userSecurityInformation"),
                "X.521 user security information", false, Collections.singleton(TOP_OBJECTCLASS_NAME), EMPTY_STRING_SET,
                Collections.singleton("supportedAlgorithms"), ObjectClassType.AUXILIARY, RFC4523_ORIGIN, false);
        attrs = new HashSet<String>();
        attrs.add("authorityRevocationList");
        attrs.add("certificateRevocationList");
        attrs.add("cACertificate");
        builder.addObjectClass("2.5.6.16", Collections.singletonList("certificationAuthority"),
                "X.509 certificate authority", false, Collections.singleton(TOP_OBJECTCLASS_NAME), attrs,
                Collections.singleton("crossCertificatePair"), ObjectClassType.AUXILIARY, RFC4523_ORIGIN, false);
        builder.addObjectClass("2.5.6.16.2", Collections.singletonList("certificationAuthority-V2"),
                "X.509 certificate authority, version 2", false, Collections.singleton("certificationAuthority"),
                EMPTY_STRING_SET, Collections.singleton("deltaRevocationList"), ObjectClassType.AUXILIARY,
                RFC4523_ORIGIN, false);
    }
    private static void addRFC4530(final SchemaBuilder builder) {
        builder.buildSyntax(SYNTAX_UUID_OID).description(SYNTAX_UUID_DESCRIPTION).extraProperties(RFC4530_ORIGIN)
                .implementation(new UUIDSyntaxImpl()).addToSchema();
@@ -854,12 +954,6 @@
                .extraProperties(RFC4512_ORIGIN).implementation(new BitStringSyntaxImpl()).addToSchema();
        builder.buildSyntax(SYNTAX_BOOLEAN_OID).description(SYNTAX_BOOLEAN_DESCRIPTION).extraProperties(RFC4512_ORIGIN)
                .implementation(new BooleanSyntaxImpl()).addToSchema();
        builder.buildSyntax(SYNTAX_CERTLIST_OID).description(SYNTAX_CERTLIST_DESCRIPTION)
                .extraProperties(RFC4512_ORIGIN).implementation(new CertificateListSyntaxImpl()).addToSchema();
        builder.buildSyntax(SYNTAX_CERTPAIR_OID).description(SYNTAX_CERTPAIR_DESCRIPTION)
                .extraProperties(RFC4512_ORIGIN).implementation(new CertificatePairSyntaxImpl()).addToSchema();
        builder.buildSyntax(SYNTAX_CERTIFICATE_OID).description(SYNTAX_CERTIFICATE_DESCRIPTION)
                .extraProperties(RFC4512_ORIGIN).implementation(new CertificateSyntaxImpl()).addToSchema();
        builder.buildSyntax(SYNTAX_COUNTRY_STRING_OID).description(SYNTAX_COUNTRY_STRING_DESCRIPTION)
                .extraProperties(RFC4512_ORIGIN).implementation(new CountryStringSyntaxImpl()).addToSchema();
        builder.buildSyntax(SYNTAX_DELIVERY_METHOD_OID).description(SYNTAX_DELIVERY_METHOD_DESCRIPTION)
@@ -920,8 +1014,6 @@
                .extraProperties(RFC2252_ORIGIN).implementation(new ProtocolInformationSyntaxImpl()).addToSchema();
        builder.buildSyntax(SYNTAX_SUBSTRING_ASSERTION_OID).description(SYNTAX_SUBSTRING_ASSERTION_DESCRIPTION)
                .extraProperties(RFC4512_ORIGIN).implementation(new SubstringAssertionSyntaxImpl()).addToSchema();
        builder.buildSyntax(SYNTAX_SUPPORTED_ALGORITHM_OID).description(SYNTAX_SUPPORTED_ALGORITHM_DESCRIPTION)
                .extraProperties(RFC4512_ORIGIN).implementation(new SupportedAlgorithmSyntaxImpl()).addToSchema();
        builder.buildSyntax(SYNTAX_TELEPHONE_OID).description(SYNTAX_TELEPHONE_DESCRIPTION)
                .extraProperties(RFC4512_ORIGIN).implementation(new TelephoneNumberSyntaxImpl()).addToSchema();
        builder.buildSyntax(SYNTAX_TELETEX_TERM_ID_OID).description(SYNTAX_TELETEX_TERM_ID_DESCRIPTION)
opendj-core/src/main/java/org/forgerock/opendj/ldap/schema/GenerateCoreSchema.java
@@ -22,6 +22,7 @@
 *
 *
 *      Copyright 2009 Sun Microsystems, Inc.
 *      Portions Copyright 2014 Manuel Gaupp
 */
package org.forgerock.opendj.ldap.schema;
@@ -60,8 +61,8 @@
            }
            final String name = syntax.getDescription().replaceAll(" Syntax$", "");
            final String fieldName =
                    name.replace(" ", "_").toUpperCase(Locale.ENGLISH).concat("_SYNTAX");
            final String fieldName = name.replace(" ", "_").replaceAll("[.-]", "")
                    .toUpperCase(Locale.ENGLISH).concat("_SYNTAX");
            syntaxes.put(fieldName, syntax);
        }
@@ -93,7 +94,7 @@
                continue;
            }
            final String name = objectClass.getNameOrOID();
            final String fieldName = splitNameIntoWords(name).concat("_OBJECT_CLASS");
            final String fieldName = splitNameIntoWords(name.replace("-", "")).concat("_OBJECT_CLASS");
            objectClasses.put(fieldName, objectClass);
        }
opendj-core/src/main/java/org/forgerock/opendj/ldap/schema/Schema.java
@@ -23,6 +23,7 @@
 *
 *      Copyright 2009-2010 Sun Microsystems, Inc.
 *      Portions copyright 2011-2012 ForgeRock AS
 *      Portions Copyright 2014 Manuel Gaupp
 */
package org.forgerock.opendj.ldap.schema;
@@ -95,6 +96,11 @@
        }
        @Override
        public boolean allowMalformedCertificates() {
            return true;
        }
        @Override
        public boolean allowZeroLengthDirectoryStrings() {
            return false;
        }
@@ -316,6 +322,8 @@
        boolean allowMalformedJPEGPhotos();
        boolean allowMalformedCertificates();
        boolean allowNonStandardTelephoneNumbers();
        boolean allowZeroLengthDirectoryStrings();
@@ -419,6 +427,11 @@
        }
        @Override
        public boolean allowMalformedCertificates() {
            return strictImpl.allowMalformedCertificates();
        }
        @Override
        public boolean allowNonStandardTelephoneNumbers() {
            return strictImpl.allowNonStandardTelephoneNumbers();
        }
@@ -658,6 +671,7 @@
        private final List<LocalizableMessage> warnings;
        private final String schemaName;
        private final boolean allowMalformedJPEGPhotos;
        private final boolean allowMalformedCertificates;
        private final boolean allowNonStandardTelephoneNumbers;
        private final boolean allowZeroLengthDirectoryStrings;
        private final boolean allowMalformedNamesAndOptions;
@@ -666,6 +680,7 @@
        StrictImpl(final String schemaName, final boolean allowMalformedNamesAndOptions,
                final boolean allowMalformedJPEGPhotos,
                final boolean allowMalformedCertificates,
                final boolean allowNonStandardTelephoneNumbers,
                final boolean allowZeroLengthDirectoryStrings,
                final Syntax defaultSyntax,
@@ -691,6 +706,7 @@
            this.schemaName = schemaName;
            this.allowMalformedNamesAndOptions = allowMalformedNamesAndOptions;
            this.allowMalformedJPEGPhotos = allowMalformedJPEGPhotos;
            this.allowMalformedCertificates = allowMalformedCertificates;
            this.allowNonStandardTelephoneNumbers = allowNonStandardTelephoneNumbers;
            this.allowZeroLengthDirectoryStrings = allowZeroLengthDirectoryStrings;
            this.defaultSyntax = defaultSyntax;
@@ -727,6 +743,11 @@
        }
        @Override
        public boolean allowMalformedCertificates() {
            return allowMalformedCertificates;
        }
        @Override
        public boolean allowNonStandardTelephoneNumbers() {
            return allowNonStandardTelephoneNumbers;
        }
@@ -1349,6 +1370,7 @@
    Schema(final String schemaName, final boolean allowMalformedNamesAndOptions,
            final boolean allowMalformedJPEGPhotos,
            final boolean allowMalformedCertificates,
            final boolean allowNonStandardTelephoneNumbers,
            final boolean allowZeroLengthDirectoryStrings,
            final Syntax defaultSyntax,
@@ -1373,9 +1395,9 @@
            final List<LocalizableMessage> warnings) {
        impl =
                new StrictImpl(schemaName, allowMalformedNamesAndOptions, allowMalformedJPEGPhotos,
                        allowNonStandardTelephoneNumbers, allowZeroLengthDirectoryStrings,
                        defaultSyntax, defaultMatchingRule, numericOID2Syntaxes,
                        numericOID2MatchingRules, numericOID2MatchingRuleUses,
                        allowMalformedCertificates, allowNonStandardTelephoneNumbers,
                        allowZeroLengthDirectoryStrings, defaultSyntax, defaultMatchingRule,
                        numericOID2Syntaxes, numericOID2MatchingRules, numericOID2MatchingRuleUses,
                        numericOID2AttributeTypes, numericOID2ObjectClasses, numericOID2NameForms,
                        numericOID2ContentRules, id2StructureRules, name2MatchingRules,
                        name2MatchingRuleUses, name2AttributeTypes, name2ObjectClasses,
@@ -1426,6 +1448,21 @@
    }
    /**
     * Returns {@code true} if the Certificate syntax defined for this
     * schema allows values which do not conform to the X.509
     * specifications.
     * <p>
     * By default this compatibility option is set to {@code true}.
     *
     * @return {@code true} if the Certificate syntax defined for this
     *         schema allows values which do not conform to the X.509
     *         specifications.
     */
    public boolean allowMalformedCertificates() {
        return impl.allowMalformedCertificates();
    }
    /**
     * Returns {@code true} if the Telephone Number syntax defined for this
     * schema allows values which do not conform to the E.123 international
     * telephone number format.
opendj-core/src/main/java/org/forgerock/opendj/ldap/schema/SchemaBuilder.java
@@ -23,6 +23,7 @@
 *
 *      Copyright 2009-2010 Sun Microsystems, Inc.
 *      Portions copyright 2011-2014 ForgeRock AS
 *      Portions Copyright 2014 Manuel Gaupp
 */
package org.forgerock.opendj.ldap.schema;
@@ -152,6 +153,7 @@
    private boolean allowZeroLengthDirectoryStrings;
    private boolean allowMalformedNamesAndOptions;
    private boolean allowMalformedJPEGPhotos;
    private boolean allowMalformedCertificates;
    private String defaultSyntaxOID;
    private String defaultMatchingRuleOID;
@@ -2257,6 +2259,24 @@
    }
    /**
     * Specifies whether or not the Certificate syntax should allow values which
     * do not conform to the X.509 specifications.
     * <p>
     * By default this compatibility option is set to {@code true}.
     *
     * @param allowMalformedCertificates
     *            {@code true} if the Certificate syntax should allow values
     *            which do not conform to the X.509 specifications.
     * @return A reference to this {@code SchemaBuilder}.
     */
    public SchemaBuilder allowMalformedCertificates(final boolean allowMalformedCertificates) {
        lazyInitBuilder();
        this.allowMalformedCertificates = allowMalformedCertificates;
        return this;
    }
    /**
     * Specifies whether or not the Telephone Number syntax should allow values
     * which do not conform to the E.123 international telephone number format.
     * <p>
@@ -2526,7 +2546,7 @@
        final Schema schema =
                new Schema(localSchemaName, allowMalformedNamesAndOptions,
                        allowMalformedJPEGPhotos, allowNonStandardTelephoneNumbers,
                        allowMalformedJPEGPhotos, allowMalformedCertificates, allowNonStandardTelephoneNumbers,
                        allowZeroLengthDirectoryStrings, defaultSyntax, defaultMatchingRule,
                        numericOID2Syntaxes, numericOID2MatchingRules, numericOID2MatchingRuleUses,
                        numericOID2AttributeTypes, numericOID2ObjectClasses, numericOID2NameForms,
@@ -2805,6 +2825,7 @@
        if (numericOID2Syntaxes == null) {
            allowMalformedNamesAndOptions = true;
            allowMalformedJPEGPhotos = true;
            allowMalformedCertificates = true;
            allowNonStandardTelephoneNumbers = true;
            allowZeroLengthDirectoryStrings = false;
            defaultSyntaxOID = SchemaConstants.SYNTAX_OCTET_STRING_OID;
@@ -2838,6 +2859,7 @@
            allowMalformedNamesAndOptions = copyOnWriteSchema.allowMalformedNamesAndOptions();
            allowMalformedJPEGPhotos = copyOnWriteSchema.allowMalformedJPEGPhotos();
            allowMalformedCertificates = copyOnWriteSchema.allowMalformedCertificates();
            allowNonStandardTelephoneNumbers = copyOnWriteSchema.allowNonStandardTelephoneNumbers();
            allowZeroLengthDirectoryStrings = copyOnWriteSchema.allowZeroLengthDirectoryStrings();
            defaultSyntaxOID = copyOnWriteSchema.getDefaultSyntax().getOID();
@@ -2853,6 +2875,7 @@
        this.allowMalformedNamesAndOptions = true;
        this.allowMalformedJPEGPhotos = true;
        this.allowMalformedCertificates = true;
        this.allowNonStandardTelephoneNumbers = true;
        this.allowZeroLengthDirectoryStrings = false;
        this.defaultSyntaxOID = null;
opendj-core/src/main/java/org/forgerock/opendj/ldap/schema/SchemaConstants.java
@@ -22,6 +22,7 @@
 *
 *
 *      Copyright 2006-2009 Sun Microsystems, Inc.
 *      Portions Copyright 2014 Manuel Gaupp
 */
package org.forgerock.opendj.ldap.schema;
@@ -217,6 +218,16 @@
    public static final String EMR_CASE_IGNORE_LIST_OID = "2.5.13.11";
    /**
     * The name for the certificateExactMatch equality matching rule.
     */
    public static final String EMR_CERTIFICATE_EXACT_NAME = "certificateExactMatch";
    /**
     * The OID for the certificateExactMatch equality matching rule.
     */
    public static final String EMR_CERTIFICATE_EXACT_OID = "2.5.13.34";
    /**
     * The name for the directoryStringFirstComponentMatch equality matching
     * rule.
     */
@@ -699,6 +710,22 @@
    public static final String SYNTAX_CERTIFICATE_OID = "1.3.6.1.4.1.1466.115.121.1.8";
    /**
     * The description for the certificate exact assertion attribute syntax.
     */
    public static final String SYNTAX_CERTIFICATE_EXACT_ASSERTION_DESCRIPTION = "X.509 Certificate Exact Assertion";
    /**
     * The name for the certificate exact assertion attribute syntax.
     */
    public static final String SYNTAX_CERTIFICATE_EXACT_ASSERTION_NAME = "CertificateExactAssertion";
    /**
     * The OID for the Certificate Exact Assertion syntax used for assertion
     * values in extensible match filters.
     */
    public static final String SYNTAX_CERTIFICATE_EXACT_ASSERTION_OID = "1.3.6.1.1.15.1";
    /**
     * The description for the certificate list attribute syntax.
     */
    public static final String SYNTAX_CERTLIST_DESCRIPTION = "Certificate List";
opendj-core/src/main/resources/com/forgerock/opendj/ldap/core.properties
@@ -23,6 +23,7 @@
#
#      Copyright 2010 Sun Microsystems, Inc.
#      Portions copyright 2011-2014 ForgeRock AS
#      Portions Copyright 2014 Manuel Gaupp
#
ERR_ATTR_SYNTAX_UNKNOWN_APPROXIMATE_MATCHING_RULE=Unable to retrieve \
 approximate matching rule %s used as the default for the %s attribute syntax. \
@@ -493,6 +494,43 @@
ERR_INVALID_SUBSCHEMA_SUBENTRY_ATTR=The entry %s includes \
 a subschemaSubentry attribute but it contains an invalid distinguished \
 name "%s": %s
WARN_GSER_PATTERN_NO_MATCH=The GSER value does not contain a String matching \
 the pattern %s at the current position: %s
WARN_GSER_NO_VALID_SEPARATOR=The GSER value does not contain a separator at \
 the current position: %s
WARN_GSER_NO_VALID_STRING=The GSER value does not contain a valid String value \
 at the current position: %s
WARN_GSER_NO_VALID_INTEGER=The GSER value does not contain a valid integer \
 value at the current position: %s
WARN_GSER_NO_VALID_IDENTIFIER=The GSER value does not contain a valid \
 identifier at the current position: %s
WARN_GSER_SPACE_CHAR_EXPECTED=The GSER value does not contain a whitespace \
 character at the current position: %s
WARN_GSER_NO_VALID_IDENTIFIEDCHOICE=The GSER value does not contain a valid \
 IdentifiedChoiceValue at the current position: %s
ERR_MR_CERTIFICATE_MATCH_PARSE_ERROR=The value could not be parsed as an X.509 \
 certificate: "%s"
ERR_MR_CERTIFICATE_MATCH_INVALID_DN=The provided value "%s" could not be \
 parsed as a valid distinguished name because an error occurred while trying \
 to parse the DN portion:  %s
ERR_MR_CERTIFICATE_MATCH_IDENTIFIER_NOT_FOUND=The identifier "%s" could not be \
 found at the correct position
ERR_MR_CERTIFICATE_MATCH_EXPECTED_END=The GSER value contains additional \
 characters at the end of the assertion
ERR_MR_CERTIFICATE_MATCH_GSER_INVALID=An error occured while parsing the GSER \
 String: "%s"
ERR_SYNTAX_CERTIFICATE_NOTVALID=The provided value is not a valid X.509 \
 Certificate: %s
ERR_SYNTAX_CERTIFICATE_ONLY_VALID_V23=The provided value is not a valid X.509 \
 Certificate because "%s" is only valid in X.509 v2/v3
ERR_SYNTAX_CERTIFICATE_ONLY_VALID_V3=The provided value is not a valid X.509 \
 Certificate because "%s" is only valid in X.509 v3
ERR_SYNTAX_CERTIFICATE_INVALID_VERSION=The provided value is not a valid X.509 \
 Certificate because it contains an invalid version number (%d)
ERR_SYNTAX_CERTIFICATE_INVALID_DER=The provided value is not a valid X.509 \
 Certificate because it contains invalid DER encodings
ERR_SYNTAX_CERTIFICATE_NO_ELEMENT_EXPECTED=The provided value is not a valid X.509 \
 Certificate because it contains additional ASN.1 elements
#
# Core messages
#
@@ -819,7 +857,7 @@
ERR_SUBTREE_DELETE_INVALID_CONTROL_VALUE=Cannot decode the provided \
 subtree delete control because it contains a value
ERR_ASN1_UNEXPECTED_TAG=Encountered unexpected tag while reading \
 ASN.1 element (expected=%d, got=%d)
 ASN.1 element (expected=0x%02x, got=0x%02x)
ERR_AUTHZIDREQ_CONTROL_HAS_VALUE=Cannot decode the provided \
 control as an authorization identity request control because the provided \
 control had a value but the authorization identity request control should not \
opendj-core/src/test/java/org/forgerock/opendj/io/ASN1ReaderTestCase.java
@@ -23,6 +23,7 @@
 *
 *      Copyright 2010 Sun Microsystems, Inc.
 *      Portions copyright 2012-2013 ForgeRock AS.
 *      Portions Copyright 2014 Manuel Gaupp
 */
package org.forgerock.opendj.io;
@@ -753,6 +754,36 @@
    }
    /**
     * Tests the <CODE>skipElement</CODE> method providing a specific type.
     */
    @Test()
    public void testSkipElementWithType() throws Exception {
        final byte[] b =
                new byte[] { 0x30, 0x09, 0x02, 0x01, 0x00, 0x02, 0x01, 0x01, 0x02, 0x01, 0x02 };
        final ASN1Reader reader = getReader(b, 0);
        reader.readStartSequence();
        reader.skipElement(ASN1.UNIVERSAL_INTEGER_TYPE);
        reader.skipElement(ASN1.UNIVERSAL_INTEGER_TYPE);
        assertEquals(reader.readInteger(), 2);
        reader.readEndSequence();
    }
    /**
     * Tests the <CODE>skipElement</CODE> method providing a wrong type.
     */
    @Test(expectedExceptions = { DecodeException.class, IOException.class })
    public void testSkipElementWithWrongType() throws Exception {
        final byte[] b =
                new byte[] { 0x30, 0x09, 0x02, 0x01, 0x00, 0x02, 0x01, 0x01, 0x02, 0x01, 0x02 };
        final ASN1Reader reader = getReader(b, 0);
        reader.readStartSequence();
        reader.readInteger();
        reader.skipElement(ASN1.UNIVERSAL_OCTET_STRING_TYPE);
        assertEquals(reader.readInteger(), 2);
        reader.readEndSequence();
    }
    /**
     * Gets the reader to be use for the unit tests.
     *
     * @param b
opendj-core/src/test/java/org/forgerock/opendj/ldap/GSERParserTestCase.java
New file
@@ -0,0 +1,299 @@
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
 * or http://forgerock.org/license/CDDLv1.0.html.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at legal-notices/CDDLv1_0.txt.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information:
 *      Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 *
 *
 *      Copyright 2013-2014 Manuel Gaupp
 */
package org.forgerock.opendj.ldap;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import static org.testng.Assert.*;
/**
 * This class tests the GSERParser.
 */
public class GSERParserTestCase extends SdkTestCase {
    /**
     * Try to create a GSER Parser with <CODE>null</CODE> as parameter.
     */
    @Test(expectedExceptions = { NullPointerException.class })
    public void testGSERParserInitWithNull() throws Exception {
        GSERParser parser = new GSERParser(null);
    }
    /**
     * Test the <CODE>hasNext</CODE> method.
     */
    @Test()
    public void testHasNext() throws Exception {
        GSERParser parser = new GSERParser("0");
        assertTrue(parser.hasNext());
        assertEquals(parser.nextInteger(), 0);
        assertFalse(parser.hasNext());
    }
    /**
     * Test the <CODE>skipSP</CODE> method.
     */
    @Test()
    public void testSkipSP() throws Exception {
        String[] values = {" 42", "  42", "42"};
        for (String value : values) {
            GSERParser parser = new GSERParser(value);
            assertEquals(parser.skipSP().nextInteger(), 42);
            assertFalse(parser.hasNext());
        }
    }
    /**
     * Test the <CODE>skipMSP</CODE> method.
     */
    @Test()
    public void testSkipMSP() throws Exception {
        String[] values = {" 42", "  42", "           42"};
        for (String value : values) {
            GSERParser parser = new GSERParser(value);
            assertEquals(parser.skipMSP().nextInteger(), 42);
            assertFalse(parser.hasNext());
        }
    }
    /**
     * Verify that <CODE>skipMSP</CODE> requires at least one space.
     */
    @Test(expectedExceptions = { DecodeException.class })
    public void testSkipMSPwithZeroSpaces() throws Exception {
        GSERParser parser = new GSERParser("42");
        parser.skipMSP();
    }
    /**
     * Create data for the <CODE>testSequence</CODE> test case.
     */
    @DataProvider(name = "sequenceValues")
    public Object[][] createSequenceValues() {
        return new Object[][]{
            {"{123,122}", true},
            {"{ 123,1}", true},
            {"{ 123   ,   1   }", true},
            {"{0123,}", false},
            {"{0123 42 }", false},
            {"{123  , 11 ", false},
            {" {123  , 11 ", false},
            {" 123  , 11}", false}
        };
    }
    /**
     * Test sequence parsing.
     */
    @Test(dataProvider = "sequenceValues")
    public void testSequence(String value, boolean expectedResult) throws Exception {
        GSERParser parser = new GSERParser(value);
        boolean result = true;
        try {
            parser.readStartSequence();
            parser.nextInteger();
            parser.skipSP().skipSeparator();
            parser.nextInteger();
            parser.readEndSequence();
            if (parser.hasNext()) {
                result = false;
            }
        } catch (DecodeException e) {
            result = false;
        }
        assertEquals(expectedResult, result);
    }
    /**
     * Create data for the <CODE>testString</CODE> test case.
     */
    @DataProvider(name = "stringValues")
    public Object[][] createStringValues() {
        return new Object[][]{
            {"\"\"", true},
            {"\"escaped\"\"dquotes\"", true},
            {"\"valid Unicode \u00D6\u00C4\"", true},
            {"\"only one \" \"", false},
            {"invalid without dquotes", false},
            {"\"missing end", false},
            {"\"valid string\" with extra trailing characters", false}
        };
    }
    /**
     * Test the parsing of String values.
     */
    @Test(dataProvider = "stringValues")
    public void testString(String value, boolean expectedResult) throws Exception {
        GSERParser parser = new GSERParser(value);
        boolean result = true;
        try {
            assertNotNull(parser.nextString());
            if (parser.hasNext()) {
                result = false;
            }
        } catch (DecodeException e) {
            result = false;
        }
        assertEquals(expectedResult, result);
    }
    /**
     * Create data for the <CODE>testInteger</CODE> test case.
     */
    @DataProvider(name = "integerValues")
    public Object[][] createIntegerValues() {
        return new Object[][]{
            {"0123456", true},
            {"42", true},
            {"0", true},
            {"", false},
            {"0xFF", false},
            {"NULL", false},
            {"Not a Number", false}
        };
    }
    /**
     * Create data for the <CODE>testBigInteger</CODE> test case.
     */
    @DataProvider(name = "bigIntegerValues")
    public Object[][] createBigIntegerValues() {
        return new Object[][]{
            {"0123456", true},
            {"42", true},
            {"0", true},
            {"", false},
            {"0xFF", false},
            {"NULL", false},
            {"Not a Number", false},
            {"2147483648", true}
        };
    }
    /**
     * Test the parsing of Integer values.
     */
    @Test(dataProvider = "integerValues")
    public void testInteger(String value, boolean expectedResult) throws Exception {
        GSERParser parser = new GSERParser(value);
        boolean result = true;
        try {
            parser.nextInteger();
            if (parser.hasNext()) {
                result = false;
            }
        } catch (DecodeException e) {
            result = false;
        }
        assertEquals(expectedResult, result);
    }
    /**
     * Test the parsing of BigInteger values.
     */
    @Test(dataProvider = "bigIntegerValues")
    public void testBigInteger(String value, boolean expectedResult) throws Exception {
        GSERParser parser = new GSERParser(value);
        boolean result = true;
        try {
            parser.nextBigInteger();
            if (parser.hasNext()) {
                result = false;
            }
        } catch (DecodeException e) {
            result = false;
        }
        assertEquals(expectedResult, result);
    }
    /**
     * Create data for the <CODE>testNamedValueIdentifier</CODE> test case.
     */
    @DataProvider(name = "namedValueIdentifierValues")
    public Object[][] createNamedValueIdentifierValues() {
        return new Object[][]{
            {"serialNumber ", true},
            {"issuer ", true},
            {"Serialnumber ", false},
            {"0serialnumber ", false},
            {"serial Number ", false},
            {"missingSpace", false}
        };
    }
    /**
     * Test the parsing of NamedValue identifiers.
     */
    @Test(dataProvider = "namedValueIdentifierValues")
    public void testNamedValueIdentifier(String value, boolean expectedResult) throws Exception {
        GSERParser parser = new GSERParser(value);
        boolean result = true;
        try {
            assertNotNull(parser.nextNamedValueIdentifier());
            if (parser.hasNext()) {
                result = false;
            }
        } catch (DecodeException e) {
            result = false;
        }
        assertEquals(expectedResult, result);
    }
    /**
     * Create data for the <CODE>testIdentifiedChoiceIdentifier</CODE> test
     * case.
     */
    @DataProvider(name = "identifiedChoicdeIdentifierValues")
    public Object[][] createIdentifiedChoicdeIdentifierValues() {
        return new Object[][]{
            {"serialNumber:", true},
            {"issuer1:", true},
            {"Serialnumber:", false},
            {"0serialnumber:", false},
            {"serial Number:", false},
            {"missingColon", false}
        };
    }
    /**
     * Test the parsing of IdentifiedChoice identifiers.
     */
    @Test(dataProvider = "identifiedChoicdeIdentifierValues")
    public void testIdentifiedChoicdeIdentifier(String value, boolean expectedResult) throws Exception {
        GSERParser parser = new GSERParser(value);
        boolean result = true;
        try {
            assertNotNull(parser.nextChoiceValueIdentifier());
            if (parser.hasNext()) {
                result = false;
            }
        } catch (DecodeException e) {
            result = false;
        }
        assertEquals(expectedResult, result);
    }
}
opendj-core/src/test/java/org/forgerock/opendj/ldap/schema/CertificateExactMatchingRuleImplTest.java
New file
@@ -0,0 +1,212 @@
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
 * or http://forgerock.org/license/CDDLv1.0.html.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at legal-notices/CDDLv1_0.txt.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information:
 *      Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 *
 *
 *      Copyright 2006-2008 Sun Microsystems, Inc.
 *      Portions Copyright 2013-2014 Manuel Gaupp
 */
package org.forgerock.opendj.ldap.schema;
import org.forgerock.opendj.ldap.Assertion;
import org.forgerock.opendj.ldap.ByteString;
import org.forgerock.opendj.ldap.ConditionResult;
import org.forgerock.opendj.ldap.DecodeException;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import static org.testng.Assert.*;
/**
 * This class tests the certificateExactMatch matching rule.
 */
public class CertificateExactMatchingRuleImplTest extends SchemaTestCase {
    /**
     * Generate data for the certificateExactMatch matching rule test.
     */
    @DataProvider(name = "certificateExactMatchingRules")
    public Object[][] createCertificateExactMatchingRuleTest() {
        String validcert1
            = "MIICpTCCAg6gAwIBAgIJALeoA6I3ZC/cMA0GCSqGSIb3DQEBBQUAMFYxCzAJBgNV"
            + "BAYTAlVTMRMwEQYDVQQHEwpDdXBlcnRpb25lMRwwGgYDVQQLExNQcm9kdWN0IERl"
            + "dmVsb3BtZW50MRQwEgYDVQQDEwtCYWJzIEplbnNlbjAeFw0xMjA1MDIxNjM0MzVa"
            + "Fw0xMjEyMjExNjM0MzVaMFYxCzAJBgNVBAYTAlVTMRMwEQYDVQQHEwpDdXBlcnRp"
            + "b25lMRwwGgYDVQQLExNQcm9kdWN0IERldmVsb3BtZW50MRQwEgYDVQQDEwtCYWJz"
            + "IEplbnNlbjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEApysa0c9qc8FB8gIJ"
            + "8zAb1pbJ4HzC7iRlVGhRJjFORkGhyvU4P5o2wL0iz/uko6rL9/pFhIlIMbwbV8sm"
            + "mKeNUPitwiKOjoFDmtimcZ4bx5UTAYLbbHMpEdwSpMC5iF2UioM7qdiwpAfZBd6Z"
            + "69vqNxuUJ6tP+hxtr/aSgMH2i8ECAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgB"
            + "hvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYE"
            + "FLlZD3aKDa8jdhzoByOFMAJDs2osMB8GA1UdIwQYMBaAFLlZD3aKDa8jdhzoByOF"
            + "MAJDs2osMA0GCSqGSIb3DQEBBQUAA4GBAE5vccY8Ydd7by2bbwiDKgQqVyoKrkUg"
            + "6CD0WRmc2pBeYX2z94/PWO5L3Fx+eIZh2wTxScF+FdRWJzLbUaBuClrxuy0Y5ifj"
            + "axuJ8LFNbZtsp1ldW3i84+F5+SYT+xI67ZcoAtwx/VFVI9s5I/Gkmu9f9nxjPpK7"
            + "1AIUXiE3Qcck";
        String incompleteCert = "MIICpTCCAg6gAwIBAgIJALeoA6I3ZC/cMA0GCSqGSIb3DQEBBQUAMFYxCzAJBgNV";
        String assertion = "{ serialNumber 13233831500277100508, issuer rdnSequence:\""
                + "CN=Babs Jensen,OU=Product Development,L=Cupertione,C=US\" }";
        String assertionWithSpaces = "{    serialNumber     13233831500277100508,  issuer  rdnSequence:\""
                + "CN=Babs Jensen,OU=Product Development, L=Cupertione,C=US\" }";
        String assertionDNencoded = "{ serialNumber 13233831500277100508, issuer rdnSequence:\""
                + "cn=BABS Jensen,ou=Product Development,L=Cupertione,c=#5553\" }";
        String assertionWrong = "{ serialNumber 13233831511277100508, issuer rdnSequence:\""
                + "CN=Babs Jensen,OU=Product Development,L=Cupertione,C=US\" }";
        return new Object[][]{
            {ByteString.valueOfBase64(validcert1), ByteString.valueOf(assertion), ConditionResult.TRUE},
            {ByteString.valueOfBase64(validcert1), ByteString.valueOf(assertionWithSpaces), ConditionResult.TRUE},
            {ByteString.valueOfBase64(validcert1), ByteString.valueOf(assertionDNencoded), ConditionResult.TRUE},
            {ByteString.valueOfBase64(validcert1), ByteString.valueOf(assertionWrong), ConditionResult.FALSE},
            {ByteString.valueOfBase64(incompleteCert), ByteString.valueOfBase64(incompleteCert), ConditionResult.TRUE},
            {ByteString.valueOfBase64(validcert1), ByteString.valueOfBase64(validcert1), ConditionResult.TRUE}
        };
    }
    /**
     * Generate valid assertion values for the certificateExactMatch matching
     * rule test.
     */
    @DataProvider(name = "certificateExactMatchValidAssertionValues")
    public Object[][] createCertificateExactMatchingRuleValidAssertionValues() {
        return new Object[][]{
            {"{serialNumber 123,issuer rdnSequence:\"c=DE\"}"},
            {"{serialNumber 123,issuer rdnSequence:\"\"}"},
            {"{serialNumber 0123,issuer rdnSequence:\"cn=issuer\"}"},
            {"{  serialNumber  123,  issuer  rdnSequence:\"c=DE\"  }"},
            {"{serialNumber 123,issuer rdnSequence:\"cn=escaped\"\"dquotes\"}"},
            {"{serialNumber 123,issuer rdnSequence:\"cn=\u00D6\u00C4\"}"}
        };
    }
    /**
     * Generate invalid assertion values for the certificateExactMatch matching
     * rule test.
     */
    @DataProvider(name = "certificateExactMatchInvalidAssertionValues")
    public Object[][] createCertificateExactMatchingRuleInvalidAssertionValues() {
        return new Object[][]{
            {"{serialnumber 123,issuer rdnSequence:\"c=DE\"}"},
            {"{serialNumber 123,issuer rdnSequence:\"invalid\"}"},
            {"{serialNumber 0123,issuer rdnSequence: \"cn=issuer\"}"},
            {"{  serialNumber  123  ,  issuer  rdnSequence:\"c=DE\"  }  trailing"}
        };
    }
    /**
     * Generate invalid atribute values for the certificateExactMatch matching
     * rule test.
     */
    @DataProvider(name = "certificateExactMatchInvalidAttributeValues")
    public Object[][] createCertificateExactMatchingRuleInvalidAttributeValues()
            throws Exception {
        String invalidcert1
            = "MIICpTCCAg6gAwIBBQIJALeoA6I3ZC/cMA0GCSqGSIb3DQEBBQUAMFYxCzAJBgNV"
            + "BAYTAlVTMRMwEQYDVQQHEwpDdXBlcnRpb25lMRwwGgYDVQQLExNQcm9kdWN0IERl"
            + "dmVsb3BtZW50MRQwEgYDVQQDEwtCYWJzIEplbnNlbjAeFw0xMjA1MDIxNjM0MzVa"
            + "Fw0xMjEyMjExNjM0MzVaMFYxCzAJBgNVBAYTAlVTMRMwEQYDVQQHEwpDdXBlcnRp"
            + "b25lMRwwGgYDVQQLExNQcm9kdWN0IERldmVsb3BtZW50MRQwEgYDVQQDEwtCYWJz"
            + "IEplbnNlbjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEApysa0c9qc8FB8gIJ"
            + "8zAb1pbJ4HzC7iRlVGhRJjFORkGhyvU4P5o2wL0iz/uko6rL9/pFhIlIMbwbV8sm"
            + "mKeNUPitwiKOjoFDmtimcZ4bx5UTAYLbbHMpEdwSpMC5iF2UioM7qdiwpAfZBd6Z"
            + "69vqNxuUJ6tP+hxtr/aSgMH2i8ECAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgB"
            + "hvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYE"
            + "FLlZD3aKDa8jdhzoByOFMAJDs2osMB8GA1UdIwQYMBaAFLlZD3aKDa8jdhzoByOF"
            + "MAJDs2osMA0GCSqGSIb3DQEBBQUAA4GBAE5vccY8Ydd7by2bbwiDKgQqVyoKrkUg"
            + "6CD0WRmc2pBeYX2z94/PWO5L3Fx+eIZh2wTxScF+FdRWJzLbUaBuClrxuy0Y5ifj"
            + "axuJ8LFNbZtsp1ldW3i84+F5+SYT+xI67ZcoAtwx/VFVI9s5I/Gkmu9f9nxjPpK7"
            + "1AIUXiE3Qcck";
        String brokencert1
            = "MIICpTCCAg6gAwIBAgIJALeoA6I3ZC/cMA0GCSqGSIb3DQEBBQUAMFYxCzAJBgNV";
        return new Object[][]{
            {ByteString.valueOfBase64(invalidcert1)},
            {ByteString.valueOfBase64(brokencert1)}
        };
    }
    /**
     * Get an instance of the matching rule.
     *
     * @return An instance of the matching rule to test.
     */
    protected MatchingRule getRule() {
        return CoreSchema.getCertificateExactMatchingRule();
    }
    /**
     * Test the normalization and the comparison of valid values.
     */
    @Test(dataProvider = "certificateExactMatchingRules")
    public void certificateExactMatchingRules(ByteString attributeValue,
            ByteString assertionValue, ConditionResult result) throws DecodeException {
        MatchingRule rule = getRule();
        // normalize the 2 provided values and check that they are equal
        assertEquals(rule.getAssertion(assertionValue).matches(rule.normalizeAttributeValue(attributeValue)), result);
    }
    /**
     * Test that valid assertion values are accepted.
     */
    @Test(dataProvider = "certificateExactMatchValidAssertionValues")
    public void certificateExactMatchingRuleValidAssertionValues(String value)
            throws DecodeException {
        // Get the instance of the rule to be tested.
        MatchingRule rule = getRule();
        // normalize the provided assertion values
        rule.getAssertion(ByteString.valueOf(value));
    }
    /**
     * Test that invalid assertion values are rejected.
     */
    @Test(dataProvider = "certificateExactMatchInvalidAssertionValues",
            expectedExceptions = { DecodeException.class })
    public void certificateExactMatchingRuleInvalidAssertionValues(String value)
            throws DecodeException {
        // Get the instance of the rule to be tested.
        MatchingRule rule = getRule();
        // normalize the provided assertion value
        rule.getAssertion(ByteString.valueOf(value));
    }
    /**
     * Test that invalid attribute values are returned with the original
     * ByteString.
     */
    @Test(dataProvider = "certificateExactMatchInvalidAttributeValues")
    public void certificateExactMatchingRuleInvalidAttributeValues(ByteString value)
            throws DecodeException {
        // Get the instance of the rule to be tested.
        MatchingRule rule = getRule();
        // normalize the provided assertion value
        Assertion normalizedAssertionValue = rule.getAssertion(value);
        assertEquals(normalizedAssertionValue.matches(value), ConditionResult.TRUE);
    }
}
opendj-core/src/test/java/org/forgerock/opendj/ldap/schema/CertificateSyntaxTest.java
New file
@@ -0,0 +1,166 @@
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
 * or http://forgerock.org/license/CDDLv1.0.html.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at legal-notices/CDDLv1_0.txt.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information:
 *      Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 *
 *
 *      Copyright 2009 Sun Microsystems, Inc.
 *      Portions copyright 2014 ForgeRock AS.
 *      Portions Copyright 2014 Manuel Gaupp
 */
package org.forgerock.opendj.ldap.schema;
import org.forgerock.i18n.LocalizableMessageBuilder;
import org.forgerock.opendj.ldap.ByteString;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import static org.forgerock.opendj.ldap.schema.SchemaConstants.SYNTAX_CERTIFICATE_OID;
import static org.testng.Assert.fail;
/**
 * Certificate syntax tests.
 */
public class CertificateSyntaxTest extends SchemaTestCase {
    /**
     * Create data for the testAcceptableValues test. This should be a table of
     * tables with 2 elements. The first one should be the value to test, the
     * second the expected result of the test.
     *
     * @return a table containing data for the testAcceptableValues Test.
     */
    @DataProvider(name = "acceptableValues")
    public Object[][] createAcceptableValues() {
        String validcert1
            = "MIICpTCCAg6gAwIBAgIJALeoA6I3ZC/cMA0GCSqGSIb3DQEBBQUAMFYxCzAJBgNV"
            + "BAYTAlVTMRMwEQYDVQQHEwpDdXBlcnRpb25lMRwwGgYDVQQLExNQcm9kdWN0IERl"
            + "dmVsb3BtZW50MRQwEgYDVQQDEwtCYWJzIEplbnNlbjAeFw0xMjA1MDIxNjM0MzVa"
            + "Fw0xMjEyMjExNjM0MzVaMFYxCzAJBgNVBAYTAlVTMRMwEQYDVQQHEwpDdXBlcnRp"
            + "b25lMRwwGgYDVQQLExNQcm9kdWN0IERldmVsb3BtZW50MRQwEgYDVQQDEwtCYWJz"
            + "IEplbnNlbjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEApysa0c9qc8FB8gIJ"
            + "8zAb1pbJ4HzC7iRlVGhRJjFORkGhyvU4P5o2wL0iz/uko6rL9/pFhIlIMbwbV8sm"
            + "mKeNUPitwiKOjoFDmtimcZ4bx5UTAYLbbHMpEdwSpMC5iF2UioM7qdiwpAfZBd6Z"
            + "69vqNxuUJ6tP+hxtr/aSgMH2i8ECAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgB"
            + "hvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYE"
            + "FLlZD3aKDa8jdhzoByOFMAJDs2osMB8GA1UdIwQYMBaAFLlZD3aKDa8jdhzoByOF"
            + "MAJDs2osMA0GCSqGSIb3DQEBBQUAA4GBAE5vccY8Ydd7by2bbwiDKgQqVyoKrkUg"
            + "6CD0WRmc2pBeYX2z94/PWO5L3Fx+eIZh2wTxScF+FdRWJzLbUaBuClrxuy0Y5ifj"
            + "axuJ8LFNbZtsp1ldW3i84+F5+SYT+xI67ZcoAtwx/VFVI9s5I/Gkmu9f9nxjPpK7"
            + "1AIUXiE3Qcck";
        String invalidcert1
            = "MIICpTCCAg6gAwIBBQIJALeoA6I3ZC/cMA0GCSqGSIb3DQEBBQUAMFYxCzAJBgNV"
            + "BAYTAlVTMRMwEQYDVQQHEwpDdXBlcnRpb25lMRwwGgYDVQQLExNQcm9kdWN0IERl"
            + "dmVsb3BtZW50MRQwEgYDVQQDEwtCYWJzIEplbnNlbjAeFw0xMjA1MDIxNjM0MzVa"
            + "Fw0xMjEyMjExNjM0MzVaMFYxCzAJBgNVBAYTAlVTMRMwEQYDVQQHEwpDdXBlcnRp"
            + "b25lMRwwGgYDVQQLExNQcm9kdWN0IERldmVsb3BtZW50MRQwEgYDVQQDEwtCYWJz"
            + "IEplbnNlbjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEApysa0c9qc8FB8gIJ"
            + "8zAb1pbJ4HzC7iRlVGhRJjFORkGhyvU4P5o2wL0iz/uko6rL9/pFhIlIMbwbV8sm"
            + "mKeNUPitwiKOjoFDmtimcZ4bx5UTAYLbbHMpEdwSpMC5iF2UioM7qdiwpAfZBd6Z"
            + "69vqNxuUJ6tP+hxtr/aSgMH2i8ECAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgB"
            + "hvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYE"
            + "FLlZD3aKDa8jdhzoByOFMAJDs2osMB8GA1UdIwQYMBaAFLlZD3aKDa8jdhzoByOF"
            + "MAJDs2osMA0GCSqGSIb3DQEBBQUAA4GBAE5vccY8Ydd7by2bbwiDKgQqVyoKrkUg"
            + "6CD0WRmc2pBeYX2z94/PWO5L3Fx+eIZh2wTxScF+FdRWJzLbUaBuClrxuy0Y5ifj"
            + "axuJ8LFNbZtsp1ldW3i84+F5+SYT+xI67ZcoAtwx/VFVI9s5I/Gkmu9f9nxjPpK7"
            + "1AIUXiE3Qcck";
        String brokencert1
            = "MIICpTCCAg6gAwIBAgIJALeoA6I3ZC/cMA0GCSqGSIb3DQEBBQUAMFYxCzAJBgNV";
        return new Object[][]{
            {ByteString.valueOfBase64(validcert1), true},
            {ByteString.valueOf(validcert1), false},
            {ByteString.valueOfBase64(invalidcert1), false},
            {ByteString.valueOfBase64(brokencert1), false},
            {ByteString.valueOf("invalid"), false}
        };
    }
    /**
     * Test acceptable values for this syntax.
     *
     * @param value
     *            The ByteString containing the value that will be tested
     * @param result
     *            The expected result of the test
     */
    @Test(dataProvider = "acceptableValues")
    public void testAcceptableValues(ByteString value, Boolean result) {
        // Make sure that the specified class can be instantiated as a task.
        final Syntax syntax = getRule();
        final LocalizableMessageBuilder reason = new LocalizableMessageBuilder();
        // test the valueIsAcceptable method
        final Boolean liveResult = syntax.valueIsAcceptable(value, reason);
        if (liveResult != result) {
            fail(syntax + ".valueIsAcceptable gave bad result for " + value.toString() + "reason : " + reason);
        }
        // call the getters
        syntax.getApproximateMatchingRule();
        syntax.getDescription();
        syntax.getEqualityMatchingRule();
        syntax.getOID();
        syntax.getOrderingMatchingRule();
        syntax.getSubstringMatchingRule();
        syntax.hashCode();
        syntax.isHumanReadable();
        syntax.toString();
    }
    /**
     * Test acceptable values for this syntax allowing malformed certificates.
     *
     * @param value
     *            The ByteString containing the value that will be tested
     * @param result
     *            Expected result is ignored.
     */
    @Test(dataProvider = "acceptableValues")
    public void testAllowMalformedCertificates(ByteString value, Boolean result) {
        // Make sure that the specified class can be instantiated as a task.
        SchemaBuilder builder = new SchemaBuilder(Schema.getCoreSchema()).allowMalformedCertificates(true);
        final Syntax syntax = builder.toSchema().getSyntax(SYNTAX_CERTIFICATE_OID);
        final LocalizableMessageBuilder reason = new LocalizableMessageBuilder();
        // test the valueIsAcceptable method
        final Boolean liveResult = syntax.valueIsAcceptable(value, reason);
        if (!liveResult) {
            fail(syntax + ".valueIsAcceptable gave bad result for " + value.toString() + "reason : " + reason);
        }
    }
    /**
     * Get an instance of the attribute syntax that must be tested.
     *
     * @return An instance of the attribute syntax that must be tested.
     */
    protected Syntax getRule() {
        SchemaBuilder builder = new SchemaBuilder(Schema.getCoreSchema()).allowMalformedCertificates(false);
        return builder.toSchema().getSyntax(SYNTAX_CERTIFICATE_OID);
    }
}
opendj-core/src/test/java/org/forgerock/opendj/ldap/schema/SyntaxTestCase.java
@@ -22,6 +22,7 @@
 *
 *
 *      Copyright 2014 ForgeRock AS.
 *      Portions Copyright 2014 Manuel Gaupp
 */
package org.forgerock.opendj.ldap.schema;
@@ -399,7 +400,7 @@
        assertThat(syntax.getDescription()).isEqualTo("X.509 Certificate");
        assertThat(syntax.getExtraProperties().isEmpty()).isTrue();
        assertThat(syntax.getApproximateMatchingRule()).isNull();
        assertThat(syntax.getEqualityMatchingRule().getNameOrOID()).isEqualTo("octetStringMatch");
        assertThat(syntax.getEqualityMatchingRule().getNameOrOID()).isEqualTo("certificateExactMatch");
        assertThat(syntax.getOrderingMatchingRule().getNameOrOID()).isEqualTo("octetStringOrderingMatch");
        assertThat(syntax.getSubstringMatchingRule()).isNull();
        assertThat(syntax.isBEREncodingRequired()).isTrue();
opendj-core/src/test/java/org/forgerock/opendj/ldif/LDIFChangeRecordReaderTestCase.java
@@ -23,6 +23,7 @@
 *
 *      Copyright 2011 ForgeRock AS
 *      Portions copyright 2012 ForgeRock AS.
 *      Portions Copyright 2014 Manuel Gaupp
 */
package org.forgerock.opendj.ldif;
@@ -60,7 +61,6 @@
import org.forgerock.opendj.ldap.requests.ModifyDNRequest;
import org.forgerock.opendj.ldap.requests.ModifyRequest;
import org.forgerock.opendj.ldap.schema.Schema;
import org.forgerock.opendj.ldap.schema.SchemaBuilder;
import org.forgerock.opendj.ldap.schema.SchemaValidationPolicy;
import org.forgerock.opendj.ldap.schema.SchemaValidationPolicy.Action;
import org.testng.annotations.Test;
@@ -1755,16 +1755,7 @@
        // @formatter:on
        final LDIFChangeRecordReader reader = new LDIFChangeRecordReader(strChangeRecord);
        final SchemaBuilder scBuild = new SchemaBuilder();
        // Adding the new schema containing the userCertificate
        scBuild.addObjectClass("( 2.5.6.15 NAME 'strongAuthenticationUser"
                + "' SUP top AUXILIARY MUST userCertificate )", false);
        scBuild.addAttributeType(
                "( 2.5.4.36 NAME 'userCertificate' SYNTAX 1.3.6.1.4.1.1466.115.121.1.8 )", false);
        // Adding to default core schema
        scBuild.addSchema(Schema.getCoreSchema(), false);
        Schema schema = scBuild.toSchema();
        Schema schema = Schema.getCoreSchema();
        reader.setSchema(schema);
        reader.setSchemaValidationPolicy(SchemaValidationPolicy.defaultPolicy());