1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  this work for additional information regarding copyright ownership.
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  (the "License"); you may not use this file except in compliance with
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  the License.  You may obtain a copy of the License at
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  See the License for the specific language governing permissions and
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  limitations under the License.
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/**
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project* @author Vladimir N. Molotkov, Stepan M. Mishura
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project* @version $Revision$
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project*/
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage org.apache.harmony.security.asn1;
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/**
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Encodes ASN.1 types with BER (X.690)
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see <a href="http://asn1.elibel.tm.fr/en/standards/index.htm">ASN.1</a>
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class BerOutputStream {
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *  Encoded byte array
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public byte[] encoded;
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *  current offset
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected int offset;
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Current encoded length
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public int length;
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Current encoded content
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public Object content;
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public BerOutputStream() {
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final void encodeTag(int tag) {
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        encoded[offset++] = (byte) tag; //FIXME long form?
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (length > 127) { //long form
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int eLen = length >> 8;
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            byte numOctets = 1;
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            for (; eLen > 0; eLen = eLen >> 8) {
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                numOctets++;
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            encoded[offset] = (byte) (numOctets | 0x80);
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            offset++;
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            eLen = length;
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int numOffset = offset + numOctets - 1;
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            for (int i = 0; i < numOctets; i++, eLen = eLen >> 8) {
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                encoded[numOffset - i] = (byte) eLen; //FIXME long value?
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            offset += numOctets;
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else { //short form
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            encoded[offset++] = (byte) length;
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void encodeANY() {
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.arraycopy(content, 0, encoded, offset, length);
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        offset += length;
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void encodeBitString() {
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        //FIXME check encoding
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        BitString bStr = (BitString) content;
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        encoded[offset] = (byte) bStr.unusedBits;
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.arraycopy(bStr.bytes, 0, encoded, offset + 1, length - 1);
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        offset += length;
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void encodeBoolean() {
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (((Boolean) content).booleanValue()) {
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            encoded[offset] = (byte) 0xFF;
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else {
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            encoded[offset] = 0x00;
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        offset++;
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void encodeChoice(ASN1Choice choice) {
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        throw new RuntimeException("Is not implemented yet"); //FIXME
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void encodeExplicit(ASN1Explicit explicit) {
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        throw new RuntimeException("Is not implemented yet"); //FIXME
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void encodeGeneralizedTime() {
113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.arraycopy(content, 0, encoded, offset, length);
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        offset += length;
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void encodeUTCTime() {
118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.arraycopy(content, 0, encoded, offset, length);
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        offset += length;
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void encodeInteger() {
123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.arraycopy(content, 0, encoded, offset, length);
124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        offset += length;
125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void encodeOctetString() {
128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.arraycopy(content, 0, encoded, offset, length);
129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        offset += length;
130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void encodeOID() {
133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int[] oid = (int[]) content;
135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int oidLen = length;
137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // all subidentifiers except first
139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int elem;
140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = oid.length - 1; i > 1; i--, oidLen--) {
141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            elem = oid[i];
142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (elem > 127) {
143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                encoded[offset + oidLen - 1] = (byte) (elem & 0x7F);
144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                elem = elem >> 7;
145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                for (; elem > 0;) {
146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    oidLen--;
147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    encoded[offset + oidLen - 1] = (byte) (elem | 0x80);
148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    elem = elem >> 7;
149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } else {
151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                encoded[offset + oidLen - 1] = (byte) elem;
152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // first subidentifier
156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        elem = oid[0] * 40 + oid[1];
157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (elem > 127) {
158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            encoded[offset + oidLen - 1] = (byte) (elem & 0x7F);
159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            elem = elem >> 7;
160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            for (; elem > 0;) {
161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                oidLen--;
162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                encoded[offset + oidLen - 1] = (byte) (elem | 0x80);
163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                elem = elem >> 7;
164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else {
166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            encoded[offset + oidLen - 1] = (byte) elem;
167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        offset += length;
170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void encodeSequence(ASN1Sequence sequence) {
173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        throw new RuntimeException("Is not implemented yet"); //FIXME
174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void encodeSequenceOf(ASN1SequenceOf sequenceOf) {
177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        throw new RuntimeException("Is not implemented yet"); //FIXME
178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void encodeSet(ASN1Set set) {
181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        throw new RuntimeException("Is not implemented yet"); //FIXME
182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void encodeSetOf(ASN1SetOf setOf) {
185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        throw new RuntimeException("Is not implemented yet"); //FIXME
186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void encodeString() {
189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.arraycopy(content, 0, encoded, offset, length);
190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        offset += length;
191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * LENGTH
195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void getChoiceLength(ASN1Choice choice) {
198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        throw new RuntimeException("Is not implemented yet"); //FIXME
199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void getExplicitLength(ASN1Explicit sequence) {
202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        throw new RuntimeException("Is not implemented yet"); //FIXME
203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void getSequenceLength(ASN1Sequence sequence) {
206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        throw new RuntimeException("Is not implemented yet"); //FIXME
207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void getSequenceOfLength(ASN1SequenceOf sequence) {
210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        throw new RuntimeException("Is not implemented yet"); //FIXME
211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void getSetLength(ASN1Set set) {
214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        throw new RuntimeException("Is not implemented yet"); //FIXME
215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void getSetOfLength(ASN1SetOf setOf) {
218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        throw new RuntimeException("Is not implemented yet"); //FIXME
219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public int getStringLength(Object object) {
222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        throw new RuntimeException("Is not implemented yet"); //FIXME
223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
225