summaryrefslogtreecommitdiffstats
path: root/pki/base/util/src/netscape/security/x509/IA5StringConverter.java
blob: 80572a686bace2f9caabdfd27a66fed14249824e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
// --- BEGIN COPYRIGHT BLOCK ---
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; version 2 of the License.
//
// This program 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 for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
//
// (C) 2007 Red Hat, Inc.
// All rights reserved.
// --- END COPYRIGHT BLOCK ---
package netscape.security.x509;

import java.io.*;
import sun.io.CharToByteConverter;

import netscape.security.util.*;

/**
 * A AVAValueConverter that converts a IA5String attribute to a DerValue 
 * and vice versa. An example an attribute that is a IA5String string is "E".
 * @see AVAValueConverter
 *
 * @author Lily Hsiao, Slava Galperin at Netscape Communications, Inc.
 */

public class IA5StringConverter implements AVAValueConverter
{
    // public constructors 

    /* 
     * Contructs a IA5String Converter.
     */
    public IA5StringConverter()
    {
    } 

    /*
     * Converts a string with ASN.1 IA5String characters to a DerValue.
     * 
     * @param valueString 	a string with IA5String characters.
     * 
     * @return			a DerValue. 
     * 
     * @exception IOException	if a IA5String CharToByteConverter is not 
     *				available for the conversion.
     */
    public DerValue getValue(String valueString)
	throws IOException
    {
	return getValue(valueString, null);
    }

    public DerValue getValue(String valueString, byte[] encodingOrder)
	throws IOException
    {
	ASN1CharStrConvMap map;
	CharToByteConverter cbc;
	byte[] bbuf = new byte[valueString.length()];
	map = ASN1CharStrConvMap.getDefault();
	try {
	    cbc = map.getCBC(DerValue.tag_IA5String);
	    if (cbc == null)
		throw new IOException("No CharToByteConverter for IA5String");
	    cbc.convert(valueString.toCharArray(), 0, valueString.length(), 
			bbuf, 0, bbuf.length);
	}
	catch (java.io.CharConversionException e) {
	    throw new IllegalArgumentException(
		"Invalid IA5String AVA Value string");
	} catch (InstantiationException e) {
	    throw new IOException("Cannot instantiate CharToByteConverter");
	} catch (IllegalAccessException e) {
	    throw new IOException("Illegal access loading CharToByteConverter");
	}
	return new DerValue(DerValue.tag_IA5String, bbuf);
    }

    /*
     * Converts a BER encoded value of IA5String to a DER encoded value.
     * Checks if the BER encoded value is a IA5String.
     * NOTE only DER encoding is currently supported on for the BER
     * encoded value.
     * 
     * @param berStream 	a byte array of the BER encoded value.
     * 
     * @return 			a DerValue. 
     * 
     * @exception IOException   if the BER value cannot be converted
     *				to a IA5String DER value.
     */
    public DerValue getValue(byte[] berStream)
	throws IOException
    {
	DerValue value = new DerValue(berStream);
	if (value.tag == DerValue.tag_IA5String)
	    return value;
	if (value.tag == DerValue.tag_PrintableString)
	    return value;
	throw new IOException("Invalid IA5String AVA Value.");
    }

    /*
     * Converts a DerValue of IA5String to a java string with IA5String 
     * characters. 
     * 
     * @param avaValue 	a DerValue.
     *
     * @return 		a string with IA5String characters.
     *
     * @exception IOException 	if the DerValue is not a IA5String i.e.
     *				The DerValue cannot be converted to a string
     *				with IA5String characters.
     */
    public String getAsString(DerValue avaValue) 
	throws IOException
    {
	if (avaValue.tag == DerValue.tag_IA5String)
	return avaValue.getIA5String();
	if (avaValue.tag == DerValue.tag_PrintableString)
	return avaValue.getPrintableString();
	throw new IOException("Invalid IA5String AVA Value.");
    }

}