--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.base/share/classes/sun/security/x509/X400Address.java Tue Sep 12 19:03:39 2017 +0200
@@ -0,0 +1,423 @@
+/*
+ * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.security.x509;
+
+import java.io.IOException;
+import sun.security.util.DerValue;
+import sun.security.util.DerOutputStream;
+
+/**
+ * This class defines the X400Address of the GeneralName choice.
+ * <p>
+ * The ASN.1 syntax for this is:
+ * <pre>
+ * ORAddress ::= SEQUENCE {
+ * built-in-standard-attributes BuiltInStandardAttributes,
+ * built-in-domain-defined-attributes
+ * BuiltInDomainDefinedAttributes OPTIONAL,
+ * -- see also teletex-domain-defined-attributes
+ * extension-attributes ExtensionAttributes OPTIONAL }
+ * -- The OR-address is semantically absent from the OR-name if the
+ * -- built-in-standard-attribute sequence is empty and the
+ * -- built-in-domain-defined-attributes and extension-attributes are
+ * -- both omitted.
+ *
+ * -- Built-in Standard Attributes
+ *
+ * BuiltInStandardAttributes ::= SEQUENCE {
+ * country-name CountryName OPTIONAL,
+ * administration-domain-name AdministrationDomainName OPTIONAL,
+ * network-address [0] NetworkAddress OPTIONAL,
+ * -- see also extended-network-address
+ * terminal-identifier [1] TerminalIdentifier OPTIONAL,
+ * private-domain-name [2] PrivateDomainName OPTIONAL,
+ * organization-name [3] OrganizationName OPTIONAL,
+ * -- see also teletex-organization-name
+ * numeric-user-identifier [4] NumericUserIdentifier OPTIONAL,
+ * personal-name [5] PersonalName OPTIONAL,
+ * -- see also teletex-personal-name
+ * organizational-unit-names [6] OrganizationalUnitNames OPTIONAL
+ * -- see also teletex-organizational-unit-names -- }
+ *
+ * CountryName ::= [APPLICATION 1] CHOICE {
+ * x121-dcc-code NumericString
+ * (SIZE (ub-country-name-numeric-length)),
+ * iso-3166-alpha2-code PrintableString
+ * (SIZE (ub-country-name-alpha-length)) }
+ *
+ * AdministrationDomainName ::= [APPLICATION 2] CHOICE {
+ * numeric NumericString (SIZE (0..ub-domain-name-length)),
+ * printable PrintableString (SIZE (0..ub-domain-name-length)) }
+ *
+ * NetworkAddress ::= X121Address -- see also extended-network-address
+ *
+ * X121Address ::= NumericString (SIZE (1..ub-x121-address-length))
+ *
+ * TerminalIdentifier ::= PrintableString (SIZE (1..ub-terminal-id-length))
+ *
+ * PrivateDomainName ::= CHOICE {
+ * numeric NumericString (SIZE (1..ub-domain-name-length)),
+ * printable PrintableString (SIZE (1..ub-domain-name-length)) }
+ *
+ * OrganizationName ::= PrintableString
+ * (SIZE (1..ub-organization-name-length))
+ * -- see also teletex-organization-name
+ *
+ * NumericUserIdentifier ::= NumericString
+ * (SIZE (1..ub-numeric-user-id-length))
+ *
+ * PersonalName ::= SET {
+ * surname [0] PrintableString (SIZE (1..ub-surname-length)),
+ * given-name [1] PrintableString
+ * (SIZE (1..ub-given-name-length)) OPTIONAL,
+ * initials [2] PrintableString (SIZE (1..ub-initials-length)) OPTIONAL,
+ * generation-qualifier [3] PrintableString
+ * (SIZE (1..ub-generation-qualifier-length)) OPTIONAL }
+ * -- see also teletex-personal-name
+ *
+ * OrganizationalUnitNames ::= SEQUENCE SIZE (1..ub-organizational-units)
+ * OF OrganizationalUnitName
+ * -- see also teletex-organizational-unit-names
+ *
+ * OrganizationalUnitName ::= PrintableString (SIZE
+ * (1..ub-organizational-unit-name-length))
+ *
+ * -- Built-in Domain-defined Attributes
+ *
+ * BuiltInDomainDefinedAttributes ::= SEQUENCE SIZE
+ * (1..ub-domain-defined-attributes) OF
+ * BuiltInDomainDefinedAttribute
+ *
+ * BuiltInDomainDefinedAttribute ::= SEQUENCE {
+ * type PrintableString (SIZE
+ * (1..ub-domain-defined-attribute-type-length)),
+ * value PrintableString (SIZE
+ * (1..ub-domain-defined-attribute-value-length))}
+ *
+ * -- Extension Attributes
+ *
+ * ExtensionAttributes ::= SET SIZE (1..ub-extension-attributes) OF
+ * ExtensionAttribute
+ *
+ * ExtensionAttribute ::= SEQUENCE {
+ * extension-attribute-type [0] INTEGER (0..ub-extension-attributes),
+ * extension-attribute-value [1]
+ * ANY DEFINED BY extension-attribute-type }
+ *
+ * -- Extension types and attribute values
+ * --
+ *
+ * common-name INTEGER ::= 1
+ *
+ * CommonName ::= PrintableString (SIZE (1..ub-common-name-length))
+ *
+ * teletex-common-name INTEGER ::= 2
+ *
+ * TeletexCommonName ::= TeletexString (SIZE (1..ub-common-name-length))
+ *
+ * teletex-organization-name INTEGER ::= 3
+ *
+ * TeletexOrganizationName ::=
+ * TeletexString (SIZE (1..ub-organization-name-length))
+ *
+ * teletex-personal-name INTEGER ::= 4
+ *
+ * TeletexPersonalName ::= SET {
+ * surname [0] TeletexString (SIZE (1..ub-surname-length)),
+ * given-name [1] TeletexString
+ * (SIZE (1..ub-given-name-length)) OPTIONAL,
+ * initials [2] TeletexString (SIZE (1..ub-initials-length)) OPTIONAL,
+ * generation-qualifier [3] TeletexString (SIZE
+ * (1..ub-generation-qualifier-length)) OPTIONAL }
+ *
+ * teletex-organizational-unit-names INTEGER ::= 5
+ *
+ * TeletexOrganizationalUnitNames ::= SEQUENCE SIZE
+ * (1..ub-organizational-units) OF TeletexOrganizationalUnitName
+ *
+ * TeletexOrganizationalUnitName ::= TeletexString
+ * (SIZE (1..ub-organizational-unit-name-length))
+ *
+ * pds-name INTEGER ::= 7
+ *
+ * PDSName ::= PrintableString (SIZE (1..ub-pds-name-length))
+ *
+ * physical-delivery-country-name INTEGER ::= 8
+ *
+ * PhysicalDeliveryCountryName ::= CHOICE {
+ * x121-dcc-code NumericString (SIZE (ub-country-name-numeric-length)),
+ * iso-3166-alpha2-code PrintableString
+ * (SIZE (ub-country-name-alpha-length)) }
+ *
+ * postal-code INTEGER ::= 9
+ *
+ * PostalCode ::= CHOICE {
+ * numeric-code NumericString (SIZE (1..ub-postal-code-length)),
+ * printable-code PrintableString (SIZE (1..ub-postal-code-length)) }
+ *
+ * physical-delivery-office-name INTEGER ::= 10
+ *
+ * PhysicalDeliveryOfficeName ::= PDSParameter
+ *
+ * physical-delivery-office-number INTEGER ::= 11
+ *
+ * PhysicalDeliveryOfficeNumber ::= PDSParameter
+ *
+ * extension-OR-address-components INTEGER ::= 12
+ *
+ * ExtensionORAddressComponents ::= PDSParameter
+ *
+ * physical-delivery-personal-name INTEGER ::= 13
+ *
+ * PhysicalDeliveryPersonalName ::= PDSParameter
+ *
+ * physical-delivery-organization-name INTEGER ::= 14
+ *
+ * PhysicalDeliveryOrganizationName ::= PDSParameter
+ *
+ * extension-physical-delivery-address-components INTEGER ::= 15
+ *
+ * ExtensionPhysicalDeliveryAddressComponents ::= PDSParameter
+ *
+ * unformatted-postal-address INTEGER ::= 16
+ *
+ * UnformattedPostalAddress ::= SET {
+ * printable-address SEQUENCE SIZE (1..ub-pds-physical-address-lines) OF
+ * PrintableString (SIZE (1..ub-pds-parameter-length)) OPTIONAL,
+ * teletex-string TeletexString
+ * (SIZE (1..ub-unformatted-address-length)) OPTIONAL }
+ *
+ * street-address INTEGER ::= 17
+ *
+ * StreetAddress ::= PDSParameter
+ *
+ * post-office-box-address INTEGER ::= 18
+ *
+ * PostOfficeBoxAddress ::= PDSParameter
+ *
+ * poste-restante-address INTEGER ::= 19
+ *
+ * PosteRestanteAddress ::= PDSParameter
+ *
+ * unique-postal-name INTEGER ::= 20
+ *
+ * UniquePostalName ::= PDSParameter
+ *
+ * local-postal-attributes INTEGER ::= 21
+ *
+ * LocalPostalAttributes ::= PDSParameter
+ *
+ * PDSParameter ::= SET {
+ * printable-string PrintableString
+ * (SIZE(1..ub-pds-parameter-length)) OPTIONAL,
+ * teletex-string TeletexString
+ * (SIZE(1..ub-pds-parameter-length)) OPTIONAL }
+ *
+ * extended-network-address INTEGER ::= 22
+ *
+ * ExtendedNetworkAddress ::= CHOICE {
+ * e163-4-address SEQUENCE {
+ * number [0] NumericString (SIZE (1..ub-e163-4-number-length)),
+ * sub-address [1] NumericString
+ * (SIZE (1..ub-e163-4-sub-address-length)) OPTIONAL },
+ * psap-address [0] PresentationAddress }
+ *
+ * PresentationAddress ::= SEQUENCE {
+ * pSelector [0] EXPLICIT OCTET STRING OPTIONAL,
+ * sSelector [1] EXPLICIT OCTET STRING OPTIONAL,
+ * tSelector [2] EXPLICIT OCTET STRING OPTIONAL,
+ * nAddresses [3] EXPLICIT SET SIZE (1..MAX) OF OCTET STRING }
+ *
+ * terminal-type INTEGER ::= 23
+ *
+ * TerminalType ::= INTEGER {
+ * telex (3),
+ * teletex (4),
+ * g3-facsimile (5),
+ * g4-facsimile (6),
+ * ia5-terminal (7),
+ * videotex (8) } (0..ub-integer-options)
+ *
+ * -- Extension Domain-defined Attributes
+ *
+ * teletex-domain-defined-attributes INTEGER ::= 6
+ *
+ * TeletexDomainDefinedAttributes ::= SEQUENCE SIZE
+ * (1..ub-domain-defined-attributes) OF TeletexDomainDefinedAttribute
+ *
+ * TeletexDomainDefinedAttribute ::= SEQUENCE {
+ * type TeletexString
+ * (SIZE (1..ub-domain-defined-attribute-type-length)),
+ * value TeletexString
+ * (SIZE (1..ub-domain-defined-attribute-value-length)) }
+ *
+ * -- specifications of Upper Bounds shall be regarded as mandatory
+ * -- from Annex B of ITU-T X.411 Reference Definition of MTS Parameter
+ * -- Upper Bounds
+ *
+ * -- Upper Bounds
+ * ub-name INTEGER ::= 32768
+ * ub-common-name INTEGER ::= 64
+ * ub-locality-name INTEGER ::= 128
+ * ub-state-name INTEGER ::= 128
+ * ub-organization-name INTEGER ::= 64
+ * ub-organizational-unit-name INTEGER ::= 64
+ * ub-title INTEGER ::= 64
+ * ub-match INTEGER ::= 128
+ *
+ * ub-emailaddress-length INTEGER ::= 128
+ *
+ * ub-common-name-length INTEGER ::= 64
+ * ub-country-name-alpha-length INTEGER ::= 2
+ * ub-country-name-numeric-length INTEGER ::= 3
+ * ub-domain-defined-attributes INTEGER ::= 4
+ * ub-domain-defined-attribute-type-length INTEGER ::= 8
+ * ub-domain-defined-attribute-value-length INTEGER ::= 128
+ * ub-domain-name-length INTEGER ::= 16
+ * ub-extension-attributes INTEGER ::= 256
+ * ub-e163-4-number-length INTEGER ::= 15
+ * ub-e163-4-sub-address-length INTEGER ::= 40
+ * ub-generation-qualifier-length INTEGER ::= 3
+ * ub-given-name-length INTEGER ::= 16
+ * ub-initials-length INTEGER ::= 5
+ * ub-integer-options INTEGER ::= 256
+ * ub-numeric-user-id-length INTEGER ::= 32
+ * ub-organization-name-length INTEGER ::= 64
+ * ub-organizational-unit-name-length INTEGER ::= 32
+ * ub-organizational-units INTEGER ::= 4
+ * ub-pds-name-length INTEGER ::= 16
+ * ub-pds-parameter-length INTEGER ::= 30
+ * ub-pds-physical-address-lines INTEGER ::= 6
+ * ub-postal-code-length INTEGER ::= 16
+ * ub-surname-length INTEGER ::= 40
+ * ub-terminal-id-length INTEGER ::= 24
+ * ub-unformatted-address-length INTEGER ::= 180
+ * ub-x121-address-length INTEGER ::= 16
+ *
+ * -- Note - upper bounds on string types, such as TeletexString, are
+ * -- measured in characters. Excepting PrintableString or IA5String, a
+ * -- significantly greater number of octets will be required to hold
+ * -- such a value. As a minimum, 16 octets, or twice the specified upper
+ * -- bound, whichever is the larger, should be allowed for TeletexString.
+ * -- For UTF8String or UniversalString at least four times the upper
+ * -- bound should be allowed.
+ * </pre>
+ *
+ * @author Anne Anderson
+ * @since 1.4
+ * @see GeneralName
+ * @see GeneralNames
+ * @see GeneralNameInterface
+ */
+public class X400Address implements GeneralNameInterface {
+
+ // Private data members
+ byte[] nameValue = null;
+
+ /**
+ * Create the X400Address object from the specified byte array
+ *
+ * @param value value of the name as a byte array
+ */
+ public X400Address(byte[] value) {
+ nameValue = value;
+ }
+
+ /**
+ * Create the X400Address object from the passed encoded Der value.
+ *
+ * @param derValue the encoded DER X400Address.
+ * @exception IOException on error.
+ */
+ public X400Address(DerValue derValue) throws IOException {
+ nameValue = derValue.toByteArray();
+ }
+
+ /**
+ * Return the type of the GeneralName.
+ */
+ public int getType() {
+ return (GeneralNameInterface.NAME_X400);
+ }
+
+ /**
+ * Encode the X400 name into the DerOutputStream.
+ *
+ * @param out the DER stream to encode the X400Address to.
+ * @exception IOException on encoding errors.
+ */
+ public void encode(DerOutputStream out) throws IOException {
+ DerValue derValue = new DerValue(nameValue);
+ out.putDerValue(derValue);
+ }
+
+ /**
+ * Return the printable string.
+ */
+ public String toString() {
+ return ("X400Address: <DER-encoded value>");
+ }
+
+ /**
+ * Return type of constraint inputName places on this name:<ul>
+ * <li>NAME_DIFF_TYPE = -1: input name is different type from name (i.e. does not constrain).
+ * <li>NAME_MATCH = 0: input name matches name.
+ * <li>NAME_NARROWS = 1: input name narrows name (is lower in the naming subtree)
+ * <li>NAME_WIDENS = 2: input name widens name (is higher in the naming subtree)
+ * <li>NAME_SAME_TYPE = 3: input name does not match or narrow name, but is same type.
+ * </ul>. These results are used in checking NameConstraints during
+ * certification path verification.
+ *
+ * @param inputName to be checked for being constrained
+ * @return constraint type above
+ * @throws UnsupportedOperationException if name is same type, but comparison operations are
+ * not supported for this name type.
+ */
+ public int constrains(GeneralNameInterface inputName) throws UnsupportedOperationException {
+ int constraintType;
+ if (inputName == null)
+ constraintType = NAME_DIFF_TYPE;
+ else if (inputName.getType() != NAME_X400)
+ constraintType = NAME_DIFF_TYPE;
+ else
+ //Narrowing, widening, and match constraints not defined in rfc2459 for X400Address
+ throw new UnsupportedOperationException("Narrowing, widening, and match are not supported for X400Address.");
+ return constraintType;
+ }
+
+ /**
+ * Return subtree depth of this name for purposes of determining
+ * NameConstraints minimum and maximum bounds and for calculating
+ * path lengths in name subtrees.
+ *
+ * @return distance of name from root
+ * @throws UnsupportedOperationException if not supported for this name type
+ */
+ public int subtreeDepth() throws UnsupportedOperationException {
+ throw new UnsupportedOperationException("subtreeDepth not supported for X400Address");
+ }
+
+}