iaik.asn1
Class PrintableString

java.lang.Object
  |
  +--iaik.asn1.ASN1Object
        |
        +--iaik.asn1.ASN1String
              |
              +--iaik.asn1.PrintableString
All Implemented Interfaces:
Cloneable

public class PrintableString
extends ASN1String

This class implements the native ASN.1 type "PrintableString". PrintableString is a simple ASN.1 string type identified by the UNIVERSAL TAG number 19.

An ASN.1 PrintableString object may represent any arbitrary string of printable characters (A,B,...,Z; a,b,...,z; 0,1,...,9; space ' () + , - . / : = ?)

When creating a new PrintableString object the value to be represented has to be supplied as Java String type:

 String s = ...;
 PrintableString printableString = new PrintableString(s);
 
Attention: When supplying the string value to be represented, no check is performed if it actually is composed only of characters belonging to PrintableString character set! An application itself has to take care for supplying a proper PrintableString value.

When calling the getValue method for getting the inherent string value from an ASN.1 PrintableString instance, a Java object of type String is returned:

 String s = (String)printableString.getValue();
 
DER en/decoding generally is done by means of the several methods of the DerCoder class; decoding alternatively may be performed by using the DerInputStream utility.

Version:
File Revision 23

Fields inherited from class iaik.asn1.ASN1String
value
 
Fields inherited from class iaik.asn1.ASN1Object
asnType, constructed, encode_listener, indefinite_length, isStringType, stream_mode
 
Constructor Summary
protected PrintableString()
          Creates an empty PrintableString object.
  PrintableString(String value)
          Creates a new ASN.1 PrintableString object for the given String value.
 
Method Summary
static void checkCaseInsensitive(boolean insensitive)
          Decide whether to compare PrintableStrings case in sensitive or not (default: no).
 boolean equals(Object obj)
          Compares two PrintableStrings.
 Object getValue()
          Returns the value of this PrintableString as a String object.
static boolean isPrintableString(String s)
          Checks is the supplied String is a PrintableString.
 void setValue(Object object)
          Sets the value of this PrintableString.
 
Methods inherited from class iaik.asn1.ASN1String
clone, decode, encode, hashCode, toString
 
Methods inherited from class iaik.asn1.ASN1Object
addComponent, addEncodeListener, countComponents, encodeObject, getAsnType, getComponentAt, indefiniteLength, isA, isConstructed, isStringType, setIndefiniteLength
 
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
 

Constructor Detail

PrintableString

protected PrintableString()
Creates an empty PrintableString object.

PrintableString

public PrintableString(String value)
Creates a new ASN.1 PrintableString object for the given String value.

Attention: No check is performed if the supplied String value actually is composed only of characters belonging to the PrintableString character set! An application itself has to take care for supplying a proper PrintableString value.

Parameters:
value - the String value this PrintableString object should be initialized with
Method Detail

getValue

public Object getValue()
Returns the value of this PrintableString as a String object.
Overrides:
getValue in class ASN1Object
Returns:
the value of this PrintableString as a String object

setValue

public void setValue(Object object)
Sets the value of this PrintableString.

The supplied value has to be a Java object of type String. Attention: No check is performed if the supplied String value actually is composed only of characters belonging to PrintableString character set! An application itself has to take care for supplying a proper PrintableString value.

Overrides:
setValue in class ASN1Object
Parameters:
object - the Java String value to be set for this PrintableString

equals

public boolean equals(Object obj)
Compares two PrintableStrings.

X.509 applies the following rules for comparing PrintableStrings; item (c) and (d):

 (a) attribute values encoded in different types (e.g.,
     PrintableString and BMPString) MAY be assumed to represent
     different strings;

 (b) attribute values in types other than PrintableString are case
     sensitive (this permits matching of attribute values as binary
     objects);

 (c) attribute values in PrintableString are not case sensitive
     (e.g., "Marianne Swanson" is the same as "MARIANNE SWANSON"); and

 (d) attribute values in PrintableString are compared after
     removing leading and trailing white space and converting internal
     substrings of one or more consecutive white space characters to a
     single space.
 
For providing backwards compatibility to former IAIK PrintableString versions, for performance reasons and because PrintableStrings may not differ only case/space based in typical applications the case insensitive and space ignoring checking is turned off by default. Case insensitive and space ignoring checking may be turned on by calling static method checkCaseInsensitive. When case insensitive and space ignoring checking is turned on the PrintableString byte value representation immediately to avoid String object creation and comparison and returns true if the two PrintableStrings are exactly identical or differ only in spaces or lower-upper case representation of printable characters 'A'...'Z', 'a'...'z'. So this method anytime will give the correct result of the two PrintableStrings to be compared are actually PrintableStrings (having characters belonging to the PrintableString character set only). This method may fail (give an uncorrect comparison result) if any of the two PrintableStrings to be compared have some non-printable character represented by more than one byte and any of these bytes "case-in-sensitive" matches to the byte at the same-position byte of the other PrintableString. However, it might be unlikely that having two PrintableStrings with wrong characters that only compare successfully because of the one assumption above.
Overrides:
equals in class ASN1String
Parameters:
obj - the other PrintableString
Returns:
true if the two PrintableStrings are exactly identical or differ only in spaces or lower-upper case representation of printable characters 'A'...'Z', 'a'...'z', otherwise false

isPrintableString

public static boolean isPrintableString(String s)
Checks is the supplied String is a PrintableString.

This method checks if the supplied String only contains printable characters (A,B,...,Z; a,b,...,z; 0,1,...,9; space ' () + , - . / : = ?).

Parameters:
s - the string to be checked
Returns:
true if the string is a printable string, false if not

checkCaseInsensitive

public static void checkCaseInsensitive(boolean insensitive)
Decide whether to compare PrintableStrings case in sensitive or not (default: no).

X.509 applies the following rules for comparing PrintableStrings; item (c) and (d):

 (a) attribute values encoded in different types (e.g.,
     PrintableString and BMPString) MAY be assumed to represent
     different strings;

 (b) attribute values in types other than PrintableString are case
     sensitive (this permits matching of attribute values as binary
     objects);

 (c) attribute values in PrintableString are not case sensitive
     (e.g., "Marianne Swanson" is the same as "MARIANNE SWANSON"); and

 (d) attribute values in PrintableString are compared after
     removing leading and trailing white space and converting internal
     substrings of one or more consecutive white space characters to a
     single space.
 
For providing backwards compatibility to former IAIK PrintableString versions, for performance reasons and because PrintableStrings may not differ only case/space based in typical applications the case insensitive and space ignoring checking is turned off by default.
Parameters:
insensitive - true for checking case insensitive and space ignoring; false if not (default)

This Javadoc may contain text parts from Internet Standard specifications (RFC 2459, 3280, 3039, 2560, 1521, 821, 822, 2253, 1319, 1321, ,2630, 2631, 2268, 3058, 2984, 2104, 2144, 2040, 2311, 2279, see copyright note) and RSA Data Security Public-Key Cryptography Standards (PKCS#1,3,5,7,8,9,10,12, see copyright note).

IAIK-JCE 3.1 with IAIK-JCE CC Core 3.1, (c) 1997-2004 IAIK