aboutsummaryrefslogtreecommitdiff
path: root/libjava/gnu
diff options
context:
space:
mode:
authorCasey Marshall <csm@gnu.org>2004-08-30 13:06:48 +0000
committerAndreas Tobler <andreast@gcc.gnu.org>2004-08-30 15:06:48 +0200
commitbd8a2e96afaf00312fb3b0c1879e440043cf0e46 (patch)
tree4fc5d308b76cb8c412058d6e39d3b66cacf8ac81 /libjava/gnu
parent39880d37d6a779821cf0d3b7e5cc7b13e4982f4c (diff)
downloadgcc-bd8a2e96afaf00312fb3b0c1879e440043cf0e46.zip
gcc-bd8a2e96afaf00312fb3b0c1879e440043cf0e46.tar.gz
gcc-bd8a2e96afaf00312fb3b0c1879e440043cf0e46.tar.bz2
Author e-mail updated for all files.
2004-08-30 Casey Marshall <csm@gnu.org> Author e-mail updated for all files. * gnu/java/security/OID.java (equals): Test if the aurgment is an instance of OID. (compareTo): Use `equals'. * gnu/java/security/der/BitString.java (equals): Test if the argument is an instance of BitString. * gnu/java/security/der/DERReader.java: Removed NIO imports. Made class final. Made fields private. (<init>): New constructor. (skip): New method. (makeString): Made static; don't use NIO. (fromIso88591, fromUtf16Be, fromUtf8): New methods. * gnu/java/security/der/DERWriter.java: Fixed imports. (writeString): Don't use NIO. (toIso88591, toUtf16Be, toUtf8): New methods. * gnu/java/security/der/DERValue.java: Formatting changes only. * gnu/java/security/der/DER.java: Likewise. From-SVN: r86765
Diffstat (limited to 'libjava/gnu')
-rw-r--r--libjava/gnu/java/security/OID.java12
-rw-r--r--libjava/gnu/java/security/der/BitString.java10
-rw-r--r--libjava/gnu/java/security/der/DER.java4
-rw-r--r--libjava/gnu/java/security/der/DERReader.java107
-rw-r--r--libjava/gnu/java/security/der/DERValue.java7
-rw-r--r--libjava/gnu/java/security/der/DERWriter.java77
6 files changed, 150 insertions, 67 deletions
diff --git a/libjava/gnu/java/security/OID.java b/libjava/gnu/java/security/OID.java
index c27ec92..c17d94b 100644
--- a/libjava/gnu/java/security/OID.java
+++ b/libjava/gnu/java/security/OID.java
@@ -7,7 +7,7 @@ GNU Classpath 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; either version 2, or (at your option)
any later version.
-
+
GNU Classpath 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
@@ -65,7 +65,7 @@ import gnu.java.security.der.DEREncodingException;
* <p>OIDs may be relative, in which case the first two elements of the
* OID are omitted.
*
- * @author Casey Marshall (rsdio@metastatic.org)
+ * @author Casey Marshall (csm@gnu.org)
*/
public class OID implements Cloneable, Comparable, java.io.Serializable
{
@@ -336,7 +336,7 @@ public class OID implements Cloneable, Comparable, java.io.Serializable
/* Nice idea, but possibly too expensive for whatever benefit it
* provides.
-
+
public String getShortName()
{
return OIDTable.getShortName(this);
@@ -391,8 +391,8 @@ public class OID implements Cloneable, Comparable, java.io.Serializable
*/
public boolean equals(Object o)
{
- if (this == o)
- return true;
+ if (!(o instanceof OID))
+ return false;
return java.util.Arrays.equals(components, ((OID) o).components);
}
@@ -411,7 +411,7 @@ public class OID implements Cloneable, Comparable, java.io.Serializable
*/
public int compareTo(Object o)
{
- if (o == this)
+ if (equals(o))
return 0;
int[] components2 = ((OID) o).components;
int len = Math.min(components.length, components2.length);
diff --git a/libjava/gnu/java/security/der/BitString.java b/libjava/gnu/java/security/der/BitString.java
index c4c2d9a..67e34d7 100644
--- a/libjava/gnu/java/security/der/BitString.java
+++ b/libjava/gnu/java/security/der/BitString.java
@@ -7,7 +7,7 @@ GNU Classpath 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; either version 2, or (at your option)
any later version.
-
+
GNU Classpath 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
@@ -51,9 +51,9 @@ import java.util.Arrays;
* <p>Where the "xxx" represents three bits that should be ignored, and
* can have any value.
*
- * @author Casey Marshall (rsdio@metastatic.org)
+ * @author Casey Marshall (csm@gnu.org)
*/
-public class BitString implements Cloneable, Comparable, java.io.Serializable
+public class BitString implements Cloneable, Comparable
{
// Fields.
@@ -288,8 +288,8 @@ public class BitString implements Cloneable, Comparable, java.io.Serializable
public boolean equals(Object o)
{
- if (this == o)
- return true;
+ if (!(o instanceof BitString))
+ return false;
BitString that = (BitString) o;
// True for cloned instances.
if (this.bytes == that.bytes && this.ignoredBits == that.ignoredBits)
diff --git a/libjava/gnu/java/security/der/DER.java b/libjava/gnu/java/security/der/DER.java
index 9c39888..585c680 100644
--- a/libjava/gnu/java/security/der/DER.java
+++ b/libjava/gnu/java/security/der/DER.java
@@ -7,7 +7,7 @@ GNU Classpath 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; either version 2, or (at your option)
any later version.
-
+
GNU Classpath 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
@@ -41,7 +41,7 @@ package gnu.java.security.der;
/**
* The set of tags for DER types.
*
- * @author Casey Marshall (rsdio@metastatic.org)
+ * @author Casey Marshall (csm@gnu.org)
*/
public interface DER
{
diff --git a/libjava/gnu/java/security/der/DERReader.java b/libjava/gnu/java/security/der/DERReader.java
index 3915b07..7d7174d 100644
--- a/libjava/gnu/java/security/der/DERReader.java
+++ b/libjava/gnu/java/security/der/DERReader.java
@@ -7,7 +7,7 @@ GNU Classpath 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; either version 2, or (at your option)
any later version.
-
+
GNU Classpath 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
@@ -47,11 +47,6 @@ import java.io.IOException;
import java.math.BigInteger;
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
@@ -65,17 +60,17 @@ import gnu.java.security.OID;
* to the calling application to determine if the data are structured
* properly by inspecting the {@link DERValue} that is returned.
*
- * @author Casey Marshall (rsdio@metastatic.org)
+ * @author Casey Marshall (csm@gnu.org)
*/
-public class DERReader implements DER
+public final class DERReader implements DER
{
// Fields.
// ------------------------------------------------------------------------
- protected InputStream in;
+ private InputStream in;
- protected final ByteArrayOutputStream encBuf;
+ private final ByteArrayOutputStream encBuf;
// Constructor.
// ------------------------------------------------------------------------
@@ -90,6 +85,11 @@ public class DERReader implements DER
this(new ByteArrayInputStream(in));
}
+ public DERReader (byte[] in, int off, int len)
+ {
+ this (new ByteArrayInputStream (in, off, len));
+ }
+
/**
* Create a new DER readed from an input stream.
*
@@ -123,6 +123,11 @@ public class DERReader implements DER
// Instance methods.
// ------------------------------------------------------------------------
+ public void skip (int bytes) throws IOException
+ {
+ in.skip (bytes);
+ }
+
/**
* Decode a single value from the input stream, returning it in a new
* {@link DERValue}. By "single value" we mean any single type in its
@@ -251,10 +256,9 @@ public class DERReader implements DER
throw new DEREncodingException();
}
- private String makeString(int tag, byte[] value)
+ private static String makeString(int tag, byte[] value)
throws IOException
{
- Charset charset = null;
switch (tag & 0x1F)
{
case NUMERIC_STRING:
@@ -265,28 +269,81 @@ public class DERReader implements DER
case GRAPHIC_STRING:
case ISO646_STRING:
case GENERAL_STRING:
- charset = Charset.forName("ISO-8859-1");
- break;
+ return fromIso88591(value);
+
case UNIVERSAL_STRING:
// XXX The docs say UniversalString is encoded in four bytes
// per character, but Java has no support (yet) for UTF-32.
//return new String(buf, "UTF-32");
case BMP_STRING:
- charset = Charset.forName("UTF-16BE");
- break;
+ return fromUtf16Be(value);
+
case UTF8_STRING:
- charset = Charset.forName("UTF-8");
- break;
+ return fromUtf8(value);
+
default:
throw new DEREncodingException("unknown string tag");
}
- if (charset == null)
- throw new DEREncodingException("no decoder");
- CharsetDecoder decoder = charset.newDecoder();
- CharBuffer result = decoder.decode(ByteBuffer.wrap(value));
- char[] buf = new char[result.remaining()];
- result.get(buf);
- return new String(buf);
+ }
+
+ private static String fromIso88591(byte[] bytes)
+ {
+ StringBuffer str = new StringBuffer(bytes.length);
+ for (int i = 0; i < bytes.length; i++)
+ str.append((char) (bytes[i] & 0xFF));
+ return str.toString();
+ }
+
+ private static String fromUtf16Be(byte[] bytes) throws IOException
+ {
+ if ((bytes.length & 0x01) != 0)
+ throw new IOException("UTF-16 bytes are odd in length");
+ StringBuffer str = new StringBuffer(bytes.length / 2);
+ for (int i = 0; i < bytes.length; i += 2)
+ {
+ char c = (char) ((bytes[i] << 8) & 0xFF);
+ c |= (char) (bytes[i+1] & 0xFF);
+ str.append(c);
+ }
+ return str.toString();
+ }
+
+ private static String fromUtf8(byte[] bytes) throws IOException
+ {
+ StringBuffer str = new StringBuffer((int)(bytes.length / 1.5));
+ for (int i = 0; i < bytes.length; )
+ {
+ char c = 0;
+ if ((bytes[i] & 0xE0) == 0xE0)
+ {
+ if ((i + 2) >= bytes.length)
+ throw new IOException("short UTF-8 input");
+ c = (char) ((bytes[i++] & 0x0F) << 12);
+ if ((bytes[i] & 0x80) != 0x80)
+ throw new IOException("malformed UTF-8 input");
+ c |= (char) ((bytes[i++] & 0x3F) << 6);
+ if ((bytes[i] & 0x80) != 0x80)
+ throw new IOException("malformed UTF-8 input");
+ c |= (char) (bytes[i++] & 0x3F);
+ }
+ else if ((bytes[i] & 0xC0) == 0xC0)
+ {
+ if ((i + 1) >= bytes.length)
+ throw new IOException("short input");
+ c = (char) ((bytes[i++] & 0x1F) << 6);
+ if ((bytes[i] & 0x80) != 0x80)
+ throw new IOException("malformed UTF-8 input");
+ c |= (char) (bytes[i++] & 0x3F);
+ }
+ else if ((bytes[i] & 0xFF) < 0x80)
+ {
+ c = (char) (bytes[i++] & 0xFF);
+ }
+ else
+ throw new IOException("badly formed UTF-8 sequence");
+ str.append(c);
+ }
+ return str.toString();
}
private Date makeTime(int tag, byte[] value) throws IOException
diff --git a/libjava/gnu/java/security/der/DERValue.java b/libjava/gnu/java/security/der/DERValue.java
index dd8afc4..bad7bed 100644
--- a/libjava/gnu/java/security/der/DERValue.java
+++ b/libjava/gnu/java/security/der/DERValue.java
@@ -7,7 +7,7 @@ GNU Classpath 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; either version 2, or (at your option)
any later version.
-
+
GNU Classpath 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
@@ -48,15 +48,10 @@ public class DERValue implements DER
// ------------------------------------------------------------------------
private final int tagClass;
-
private final boolean constructed;
-
private final int tag;
-
private int length;
-
private final Object value;
-
private byte[] encoded;
// Constructor.
diff --git a/libjava/gnu/java/security/der/DERWriter.java b/libjava/gnu/java/security/der/DERWriter.java
index 4e679ec..8bf80b5 100644
--- a/libjava/gnu/java/security/der/DERWriter.java
+++ b/libjava/gnu/java/security/der/DERWriter.java
@@ -7,7 +7,7 @@ GNU Classpath 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; either version 2, or (at your option)
any later version.
-
+
GNU Classpath 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
@@ -43,12 +43,12 @@ import gnu.java.security.OID;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
+
import java.math.BigInteger;
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
+
import java.text.SimpleDateFormat;
+
+import java.util.BitSet;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
@@ -66,7 +66,7 @@ import java.util.TimeZone;
* <p>This class only defines static methods; there are no instance
* variables needed.
*
- * @author Casey Marshall (rsdio@metastatic.org)
+ * @author Casey Marshall (csm@gnu.org)
*/
public class DERWriter implements DER
{
@@ -82,7 +82,7 @@ public class DERWriter implements DER
// Class methods.
// ------------------------------------------------------------------------
- public static int write(OutputStream out, DERValue object)
+ public static int write(OutputStream out, DERValue object)
throws IOException
{
out.write(object.getExternalTag());
@@ -226,7 +226,6 @@ public class DERWriter implements DER
private static int writeString(OutputStream out, int tag, String str)
throws IOException
{
- Charset charset = null;
byte[] b = null;
switch (tag & 0x1F)
{
@@ -238,33 +237,65 @@ public class DERWriter implements DER
case GRAPHIC_STRING:
case ISO646_STRING:
case GENERAL_STRING:
- charset = Charset.forName("ISO-8859-1");
+ b = toIso88591(str);
break;
+
case UNIVERSAL_STRING:
case BMP_STRING:
- charset = Charset.forName("UTF-16BE");
+ b = toUtf16Be(str);
break;
+
case UTF8_STRING:
default:
- charset = Charset.forName("UTF-8");
+ b = toUtf8(str);
break;
}
- if (charset == null)
- throw new DEREncodingException("no charset");
- CharsetEncoder encoder = charset.newEncoder();
- ByteBuffer result = encoder.encode(CharBuffer.wrap(str));
- if (result.hasArray())
+ writeLength(out, b.length);
+ out.write(b);
+ return b.length;
+ }
+
+ private static byte[] toIso88591(String string)
+ {
+ byte[] result = new byte[string.length()];
+ for (int i = 0; i < string.length(); i++)
+ result[i] = (byte) string.charAt(i);
+ return result;
+ }
+
+ private static byte[] toUtf16Be(String string)
+ {
+ byte[] result = new byte[string.length() * 2];
+ for (int i = 0; i < string.length(); i++)
{
- b = result.array();
+ result[i*2 ] = (byte) ((string.charAt(i) >>> 8) & 0xFF);
+ result[i*2+1] = (byte) (string.charAt(i) & 0xFF);
}
- else
+ return result;
+ }
+
+ private static byte[] toUtf8(String string)
+ {
+ ByteArrayOutputStream buf =
+ new ByteArrayOutputStream((int)(string.length() * 1.5));
+ for (int i = 0; i < string.length(); i++)
{
- b = new byte[result.remaining()];
- result.get(b);
+ char c = string.charAt(i);
+ if (c < 0x0080)
+ buf.write(c & 0xFF);
+ else if (c < 0x0800)
+ {
+ buf.write(0xC0 | ((c >>> 6) & 0x3F));
+ buf.write(0x80 | (c & 0x3F));
+ }
+ else
+ {
+ buf.write(0xE0 | ((c >>> 12) & 0x0F));
+ buf.write(0x80 | ((c >>> 6) & 0x3F));
+ buf.write(0x80 | (c & 0x3F));
+ }
}
- writeLength(out, b.length);
- out.write(b);
- return b.length;
+ return buf.toByteArray();
}
private static int writeDate(OutputStream out, int tag, Date date)