APIdia Launch Partner
Top Description Fields Constructors Methods
sun.security.x509

public Class IPAddressName

extends Object
implements GeneralNameInterface
Class Inheritance
All Implemented Interfaces
sun.security.x509.GeneralNameInterface, sun.security.util.DerEncoder
Imports
java.io.IOException, java.lang.Integer, java.net.InetAddress, java.util.Arrays, sun.security.util.HexDumpEncoder, .BitArray, .DerOutputStream, .DerValue

This class implements the IPAddressName as required by the GeneralNames ASN.1 object. Both IPv4 and IPv6 addresses are supported using the formats specified in IETF PKIX RFC 5280.

[RFC 5280 4.2.1.6 Subject Alternative Name] When the subjectAltName extension contains an iPAddress, the address MUST be stored in the octet string in "network byte order", as specified in [RFC791]. The least significant bit (LSB) of each octet is the LSB of the corresponding byte in the network address. For IP version 4, as specified in [RFC791], the octet string MUST contain exactly four octets. For IP version 6, as specified in [RFC 2460], the octet string MUST contain exactly sixteen octets.

[RFC 5280 4.2.1.10 Name Constraints] The syntax of iPAddress MUST be as described in Section 4.2.1.6 with the following additions specifically for name constraints. For IPv4 addresses, the iPAddress field of GeneralName MUST contain eight (8) octets, encoded in the style of RFC 4632 (CIDR) to represent an address range [RFC 4632]. For IPv6 addresses, the iPAddress field MUST contain 32 octets similarly encoded. For example, a name constraint for "class C" subnet 192.0.2.0 is represented as the octets C0 00 02 00 FF FF FF 00, representing the CIDR notation 192.0.2.0/24 (mask 255.255.255.0).

Authors
Amit Kapoor, Hemma Prafullchandra
See Also
GeneralName, GeneralNameInterface, GeneralNames

Field Summary

Modifier and TypeField and Description
private byte[]
private final boolean
private static final int
MASKSIZE

Parse an IPv6 address.

private String

Constructor Summary

AccessConstructor and Description
public
IPAddressName(DerValue
the encoded DER IPAddressName.
derValue
)

Create the IPAddressName object from the passed encoded Der value.

public
IPAddressName(byte[]
the IP address
address
)

Create the IPAddressName object with the specified octets.

public
IPAddressName(String
String form of IPAddressName
name
)

Create an IPAddressName from a String.

Method Summary

Modifier and TypeMethod and Description
public int

Returns:

constraint type above
constrains
(GeneralNameInterface
to be checked for being constrained
inputName
)

Implements sun.security.x509.GeneralNameInterface.constrains.

Return type of constraint inputName places on this name:

  • NAME_DIFF_TYPE = -1: input name is different type from name (i.e. does not constrain).
  • NAME_MATCH = 0: input name matches name.
  • NAME_NARROWS = 1: input name narrows name (is lower in the naming subtree)
  • NAME_WIDENS = 2: input name widens name (is higher in the naming subtree)
  • NAME_SAME_TYPE = 3: input name does not match or narrow name, but is same type.
public void
encode(DerOutputStream
the DER stream to encode the IPAddressName to.
out
)

Implements sun.security.util.DerEncoder.encode.

Encode the IPAddress name into the DerOutputStream.

public boolean

Returns:

true iff the names are identical.
equals
(Object obj)

Overrides java.lang.Object.equals.

Compares this name with another, for equality.

public byte[]
getBytes()

Returns this IPAddress name as a byte array.

public String
getName()

Return a standard String representation of IPAddress.

public int
getType()

Implements sun.security.x509.GeneralNameInterface.getType.

Return the type of the GeneralName.

public int

Returns:

the hash code value for this object
hashCode
()

Overrides java.lang.Object.hashCode.

Returns the hash code value for this object.

private void
parseIPv4(String
IPv4 address with optional mask values
name
)

Parse an IPv4 address.

private void
public int

Returns:

distance of name from root
subtreeDepth
()

Implements sun.security.x509.GeneralNameInterface.subtreeDepth.

Return subtree depth of this name for purposes of determining NameConstraints minimum and maximum bounds and for calculating path lengths in name subtrees.

public String
toString()

Overrides java.lang.Object.toString.

Return a printable string of IPaddress

Inherited from java.lang.Object:
clonefinalizegetClassnotifynotifyAllwaitwaitwait

Field Detail

addressback to summary
private byte[] address
isIPv4back to summary
private final boolean isIPv4
MASKSIZEback to summary
private static final int MASKSIZE

Parse an IPv6 address.

nameback to summary
private String name

Constructor Detail

IPAddressNameback to summary
public IPAddressName(DerValue derValue) throws IOException

Create the IPAddressName object from the passed encoded Der value.

Parameters
derValue:DerValue

the encoded DER IPAddressName.

Exceptions
IOException:
on error.
IPAddressNameback to summary
public IPAddressName(byte[] address) throws IOException

Create the IPAddressName object with the specified octets.

Parameters
address:byte[]

the IP address

Exceptions
IOException:
if address is not a valid IPv4 or IPv6 address
IPAddressNameback to summary
public IPAddressName(String name) throws IOException

Create an IPAddressName from a String. [IETF RFC1338 Supernetting & IETF RFC1519 Classless Inter-Domain Routing (CIDR)] For IPv4 addresses, the forms are "b1.b2.b3.b4" or "b1.b2.b3.b4/m1.m2.m3.m4", where b1 - b4 are decimal byte values 0-255 and m1 - m4 are decimal mask values 0 - 255.

[IETF RFC2373 IP Version 6 Addressing Architecture] For IPv6 addresses, the forms are "a1:a2:...:a8" or "a1:a2:...:a8/n", where a1-a8 are hexadecimal values representing the eight 16-bit pieces of the address. If /n is used, n is a decimal number indicating how many of the leftmost contiguous bits of the address comprise the prefix for this subnet. Internally, a mask value is created using the prefix length.

Parameters
name:String

String form of IPAddressName

Exceptions
IOException:
if name can not be converted to a valid IPv4 or IPv6 address

Method Detail

constrainsback to summary
public int constrains(GeneralNameInterface inputName) throws UnsupportedOperationException

Implements sun.security.x509.GeneralNameInterface.constrains.

Return type of constraint inputName places on this name:

  • NAME_DIFF_TYPE = -1: input name is different type from name (i.e. does not constrain).
  • NAME_MATCH = 0: input name matches name.
  • NAME_NARROWS = 1: input name narrows name (is lower in the naming subtree)
  • NAME_WIDENS = 2: input name widens name (is higher in the naming subtree)
  • NAME_SAME_TYPE = 3: input name does not match or narrow name, but is same type.
. These results are used in checking NameConstraints during certification path verification.

[RFC 5280 4.2.1.10 Name Constraints] The syntax of iPAddress MUST be as described in Section 4.2.1.6 with the following additions specifically for name constraints. For IPv4 addresses, the iPAddress field of GeneralName MUST contain eight (8) octets, encoded in the style of RFC 4632 (CIDR) to represent an address range [RFC 4632]. For IPv6 addresses, the iPAddress field MUST contain 32 octets similarly encoded. For example, a name constraint for "class C" subnet 192.0.2.0 is represented as the octets C0 00 02 00 FF FF FF 00, representing the CIDR notation 192.0.2.0/24 (mask 255.255.255.0).

Parameters
inputName:GeneralNameInterface

to be checked for being constrained

Returns:int

constraint type above

Exceptions
UnsupportedOperationException:
if name is not exact match, but narrowing and widening are not supported for this name type.
encodeback to summary
public void encode(DerOutputStream out)

Implements sun.security.util.DerEncoder.encode.

Encode the IPAddress name into the DerOutputStream.

Parameters
out:DerOutputStream

the DER stream to encode the IPAddressName to.

Annotations
@Override
equalsback to summary
public boolean equals(Object obj)

Overrides java.lang.Object.equals.

Compares this name with another, for equality.

Returns:boolean

true iff the names are identical.

Annotations
@Override
getBytesback to summary
public byte[] getBytes()

Returns this IPAddress name as a byte array.

getNameback to summary
public String getName() throws IOException

Return a standard String representation of IPAddress. See IPAddressName(String) for the formats used for IPv4 and IPv6 addresses.

Exceptions
IOException:
if the IPAddress cannot be converted to a String
getTypeback to summary
public int getType()

Implements sun.security.x509.GeneralNameInterface.getType.

Return the type of the GeneralName.

hashCodeback to summary
public int hashCode()

Overrides java.lang.Object.hashCode.

Returns the hash code value for this object.

Returns:int

the hash code value for this object

Annotations
@Override
parseIPv4back to summary
private void parseIPv4(String name) throws IOException

Parse an IPv4 address.

Parameters
name:String

IPv4 address with optional mask values

Exceptions
IOException:
on error
parseIPv6back to summary
private void parseIPv6(String name) throws IOException
subtreeDepthback to summary
public int subtreeDepth() throws UnsupportedOperationException

Implements sun.security.x509.GeneralNameInterface.subtreeDepth.

Return subtree depth of this name for purposes of determining NameConstraints minimum and maximum bounds and for calculating path lengths in name subtrees.

Returns:int

distance of name from root

Exceptions
UnsupportedOperationException:
if not supported for this name type
toStringback to summary
public String toString()

Overrides java.lang.Object.toString.

Return a printable string of IPaddress