You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by er...@apache.org on 2005/01/20 21:01:39 UTC
svn commit: r125809 - incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der
Author: erodriguez
Date: Thu Jan 20 12:01:38 2005
New Revision: 125809
URL: http://svn.apache.org/viewcvs?view=rev&rev=125809
Log:
Apache DER codecs for Kerberos.
Added:
incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/ASN1InputStream.java
incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/ASN1OutputStream.java
incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/BERConstructedOctetString.java
incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/BERNull.java
incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/BERSequence.java
incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/BERSet.java
incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/BERTaggedObject.java
incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERApplicationSpecific.java
incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERBMPString.java
incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERBitString.java
incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERBoolean.java
incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DEREncodable.java
incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DEREnumerated.java
incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERGeneralString.java
incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERGeneralizedTime.java
incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERIA5String.java
incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERInteger.java
incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERNull.java
incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERNumericString.java
incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERObject.java
incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERObjectIdentifier.java
incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DEROctetString.java
incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERPrintableString.java
incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERSequence.java
incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERSet.java
incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERString.java
incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERTaggedObject.java
incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERTeletexString.java
incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERUTCTime.java
incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERUTF8String.java
incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERUniversalString.java
incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERUnknownTag.java
incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERVisibleString.java
incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/OIDTokenizer.java
Added: incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/ASN1InputStream.java
Url: http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/ASN1InputStream.java?view=auto&rev=125809
==============================================================================
--- (empty file)
+++ incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/ASN1InputStream.java Thu Jan 20 12:01:38 2005
@@ -0,0 +1,461 @@
+/*
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.asn1.der;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.EOFException;
+import java.io.FilterInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Vector;
+
+/**
+ * General purpose ASN.1 decoder.
+ */
+public class ASN1InputStream extends FilterInputStream
+{
+ private boolean EOF_FOUND = false;
+
+ private DERObject END_OF_STREAM = new DERObject( 0, null ) {
+ public void encode( ASN1OutputStream out )
+ throws IOException
+ {
+ throw new IOException("End of stream.");
+ }
+ public int hashCode()
+ {
+ return 0;
+ }
+ public boolean equals( Object o )
+ {
+ return o == this;
+ }
+ };
+
+ public ASN1InputStream( InputStream is )
+ {
+ super( is );
+ }
+
+ public ASN1InputStream( byte[] input )
+ {
+ super( new ByteArrayInputStream( input ) );
+ }
+
+ protected int readLength()
+ throws IOException
+ {
+ int length = read();
+ if ( length < 0 )
+ {
+ throw new IOException( "EOF found when length expected." );
+ }
+
+ // Indefinite-length encoding.
+ if ( length == 0x80 )
+ {
+ return -1;
+ }
+
+ if ( length > 127 )
+ {
+ int size = length & 0x7f;
+
+ if ( size > 4 )
+ {
+ throw new IOException( "DER length more than 4 bytes." );
+ }
+
+ length = 0;
+ for ( int i = 0; i < size; i++ )
+ {
+ int next = read();
+
+ if ( next < 0 )
+ {
+ throw new IOException( "EOF found reading length." );
+ }
+
+ length = ( length << 8 ) + next;
+ }
+
+ if ( length < 0 )
+ {
+ throw new IOException( "Corrupted steam - negative length found." );
+ }
+ }
+
+ return length;
+ }
+
+ protected void readFully( byte[] bytes )
+ throws IOException
+ {
+ int left = bytes.length;
+ int len;
+
+ if ( left == 0 )
+ {
+ return;
+ }
+
+ while ( ( len = read( bytes, bytes.length - left, left ) ) > 0 )
+ {
+ if ( ( left -= len ) == 0 )
+ {
+ return;
+ }
+ }
+
+ if ( left != 0 )
+ {
+ throw new EOFException( "EOF encountered in middle of object." );
+ }
+ }
+
+ /**
+ * Build an object given its tag and a byte stream.
+ */
+ protected DEREncodable buildObject( int tag, byte[] bytes )
+ throws IOException
+ {
+ if ( ( tag & DERObject.APPLICATION ) != 0 )
+ {
+ return new DERApplicationSpecific( tag, bytes );
+ }
+
+ switch ( tag )
+ {
+ case DERObject.NULL:
+ return new DERNull();
+ case DERObject.SEQUENCE | DERObject.CONSTRUCTED:
+ ByteArrayInputStream bais = new ByteArrayInputStream( bytes );
+ ASN1InputStream ais = new ASN1InputStream( bytes );
+
+ DERSequence sequence = new DERSequence();
+
+ DEREncodable obj = ais.readObject();
+
+ while ( obj != null )
+ {
+ sequence.add( obj );
+ obj = ais.readObject();
+ }
+
+ return sequence;
+ case DERObject.SET | DERObject.CONSTRUCTED:
+ bais = new ByteArrayInputStream( bytes );
+ ais = new ASN1InputStream( bais );
+ DERSet set = new DERSet();
+
+ obj = ais.readObject();
+
+ while ( obj != null )
+ {
+ set.add( obj );
+ obj = ais.readObject();
+ }
+
+ return set;
+ case DERObject.BOOLEAN:
+ return new DERBoolean( bytes );
+ case DERObject.INTEGER:
+ return new DERInteger( bytes );
+ case DERObject.ENUMERATED:
+ return new DEREnumerated( bytes );
+ case DERObject.OBJECT_IDENTIFIER:
+ return new DERObjectIdentifier( bytes );
+ case DERObject.BIT_STRING:
+ return new DERBitString( bytes );
+ case DERObject.NUMERIC_STRING:
+ return new DERNumericString( bytes );
+ case DERObject.UTF8_STRING:
+ return new DERUTF8String( bytes );
+ case DERObject.PRINTABLE_STRING:
+ return new DERPrintableString( bytes );
+ case DERObject.IA5_STRING:
+ return new DERIA5String( bytes );
+ case DERObject.T61_STRING:
+ return new DERTeletexString( bytes );
+ case DERObject.VISIBLE_STRING:
+ return new DERVisibleString( bytes );
+ case DERObject.GENERAL_STRING:
+ return new DERGeneralString( bytes );
+ case DERObject.UNIVERSAL_STRING:
+ return new DERUniversalString( bytes );
+ case DERObject.BMP_STRING:
+ return new DERBMPString( bytes );
+ case DERObject.OCTET_STRING:
+ return new DEROctetString( bytes );
+ case DERObject.UTC_TIME:
+ return new DERUTCTime( bytes );
+ case DERObject.GENERALIZED_TIME:
+ return new DERGeneralizedTime( bytes );
+ default:
+ // Tag number is bottom 5 bits.
+ if ( ( tag & DERObject.TAGGED ) != 0 )
+ {
+ int tagNo = tag & 0x1f;
+
+ if ( tagNo == 0x1f )
+ {
+ int idx = 0;
+
+ tagNo = 0;
+
+ while ( ( bytes[ idx ] & 0x80 ) != 0 )
+ {
+ tagNo |= ( bytes[ idx++ ] & 0x7f );
+ tagNo <<= 7;
+ }
+
+ tagNo |= ( bytes[ idx ] & 0x7f );
+
+ byte[] tmp = bytes;
+
+ bytes = new byte[ tmp.length - ( idx + 1 ) ];
+ System.arraycopy( tmp, idx + 1, bytes, 0, bytes.length );
+ }
+
+ // Empty tag.
+ if ( bytes.length == 0 )
+ {
+ if ( ( tag & DERObject.CONSTRUCTED ) == 0)
+ {
+ return new DERTaggedObject( tagNo, new DERNull() );
+ }
+
+ return new DERTaggedObject( false, tagNo, new DERSequence() );
+ }
+
+ // Simple type - implicit, return an octet string.
+ if ( ( tag & DERObject.CONSTRUCTED ) == 0 )
+ {
+ return new DERTaggedObject( false, tagNo, new DEROctetString( bytes ) );
+ }
+
+ bais = new ByteArrayInputStream( bytes );
+ ais = new ASN1InputStream( bais );
+
+ DEREncodable encodable = ais.readObject();
+
+ // Explicitly tagged - if it isn't we'd have to tell from the context.
+ if ( ais.available() == 0 )
+ {
+ return new DERTaggedObject( tagNo, encodable );
+ }
+
+ // Another implicit object, create a sequence.
+ DERSequence derSequence = new DERSequence();
+
+ while ( encodable != null )
+ {
+ derSequence.add( encodable );
+ encodable = ais.readObject();
+ }
+
+ return new DERTaggedObject( false, tagNo, derSequence );
+ }
+
+ return new DERUnknownTag( tag, bytes );
+ }
+ }
+
+ /**
+ * Read a string of bytes representing an indefinite length object.
+ */
+ private byte[] readIndefiniteLengthFully()
+ throws IOException
+ {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ int b, b1;
+
+ b1 = read();
+
+ while ( ( b = read() ) >= 0 )
+ {
+ if ( b1 == 0 && b == 0 )
+ {
+ break;
+ }
+
+ baos.write( b1 );
+ b1 = b;
+ }
+
+ return baos.toByteArray();
+ }
+
+ private BERConstructedOctetString buildConstructedOctetString()
+ throws IOException
+ {
+ Vector octets = new Vector();
+
+ for (;;)
+ {
+ DEREncodable encodable = readObject();
+
+ if ( encodable == END_OF_STREAM )
+ {
+ break;
+ }
+
+ octets.addElement( encodable );
+ }
+
+ return new BERConstructedOctetString( octets );
+ }
+
+ public DEREncodable readObject()
+ throws IOException
+ {
+ int tag = read();
+ if ( tag == -1 )
+ {
+ if ( EOF_FOUND )
+ {
+ throw new EOFException( "Attempt to read past end of file." );
+ }
+
+ EOF_FOUND = true;
+
+ return null;
+ }
+
+ int length = readLength();
+
+ // Indefinite length method.
+ if ( length < 0 )
+ {
+ switch ( tag )
+ {
+ case DERObject.NULL:
+ return new BERNull();
+ case DERObject.SEQUENCE | DERObject.CONSTRUCTED:
+ BERSequence sequence = new BERSequence();
+
+ for (;;)
+ {
+ DEREncodable obj = readObject();
+
+ if ( obj == END_OF_STREAM )
+ {
+ break;
+ }
+
+ sequence.add( obj );
+ }
+ return sequence;
+ case DERObject.SET | DERObject.CONSTRUCTED:
+ BERSet set = new BERSet();
+
+ for (;;)
+ {
+ DEREncodable obj = readObject();
+
+ if ( obj == END_OF_STREAM )
+ {
+ break;
+ }
+
+ set.add( obj );
+ }
+ return set;
+ case DERObject.OCTET_STRING | DERObject.CONSTRUCTED:
+ return buildConstructedOctetString();
+ default:
+ // Tag number is bottom 5 bits.
+ if ( ( tag & DERObject.TAGGED ) != 0 )
+ {
+ int tagNo = tag & 0x1f;
+
+ if ( tagNo == 0x1f )
+ {
+ int b = read();
+
+ tagNo = 0;
+
+ while ( ( b >= 0 ) && ( ( b & 0x80 ) != 0 ) )
+ {
+ tagNo |= ( b & 0x7f );
+ tagNo <<= 7;
+ b = read();
+ }
+
+ tagNo |= ( b & 0x7f );
+ }
+
+ // Simple type - implicit, return an octet string.
+ if ( ( tag & DERObject.CONSTRUCTED ) == 0 )
+ {
+ byte[] bytes = readIndefiniteLengthFully();
+
+ return new BERTaggedObject( false, tagNo, new DEROctetString( bytes ) );
+ }
+
+ // Either constructed or explicitly tagged
+ DEREncodable dObj = readObject();
+
+ // Empty tag!
+ if ( dObj == END_OF_STREAM )
+ {
+ return new DERTaggedObject( tagNo );
+ }
+
+ DEREncodable next = readObject();
+
+ // Explicitly tagged.
+ if ( next == END_OF_STREAM )
+ {
+ return new BERTaggedObject( tagNo, dObj );
+ }
+
+ // Another implicit object, create a sequence.
+ BERSequence berSequence = new BERSequence();
+
+ berSequence.add( dObj );
+
+ do
+ {
+ berSequence.add( next );
+ next = readObject();
+ }
+ while ( next != END_OF_STREAM );
+
+ return new BERTaggedObject( false, tagNo, berSequence );
+ }
+
+ throw new IOException( "Unknown BER object encountered." );
+ }
+ }
+
+ // End of contents marker.
+ if ( tag == 0 && length == 0 )
+ {
+ return END_OF_STREAM;
+ }
+
+ byte[] bytes = new byte[ length ];
+
+ readFully( bytes );
+
+ return buildObject( tag, bytes );
+ }
+}
+
Added: incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/ASN1OutputStream.java
Url: http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/ASN1OutputStream.java?view=auto&rev=125809
==============================================================================
--- (empty file)
+++ incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/ASN1OutputStream.java Thu Jan 20 12:01:38 2005
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.asn1.der;
+
+import java.io.FilterOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+
+public class ASN1OutputStream extends FilterOutputStream
+{
+ public ASN1OutputStream( OutputStream os )
+ {
+ super( os );
+ }
+
+ private void writeLength( int length )
+ throws IOException
+ {
+ if ( length > 127 )
+ {
+ int size = 1;
+ int val = length;
+
+ while ( ( val >>>= 8 ) != 0 )
+ {
+ size++;
+ }
+
+ write( (byte)( size | 0x80 ) );
+
+ for ( int i = (size - 1) * 8; i >= 0; i -= 8 )
+ {
+ write( (byte)( length >> i ) );
+ }
+ }
+ else
+ {
+ write( (byte)length );
+ }
+ }
+
+ void writeEncoded( int tag, byte[] bytes )
+ throws IOException
+ {
+ write( tag );
+ writeLength( bytes.length );
+ write( bytes );
+ }
+
+ public void writeObject( Object obj )
+ throws IOException
+ {
+ if ( obj == null )
+ {
+ writeNull();
+ }
+ else if ( obj instanceof DEREncodable )
+ {
+ ( (DEREncodable)obj ).encode( this );
+ }
+ else
+ {
+ throw new IOException( "Object not DEREncodable." );
+ }
+ }
+
+ protected void writeNull()
+ throws IOException
+ {
+ write( DERObject.NULL );
+ write( DERObject.TERMINATOR );
+ }
+}
+
Added: incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/BERConstructedOctetString.java
Url: http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/BERConstructedOctetString.java?view=auto&rev=125809
==============================================================================
--- (empty file)
+++ incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/BERConstructedOctetString.java Thu Jan 20 12:01:38 2005
@@ -0,0 +1,159 @@
+/*
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.asn1.der;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.Enumeration;
+import java.util.Vector;
+
+
+public class BERConstructedOctetString extends DEROctetString
+{
+ private Vector octets;
+
+ /**
+ * @param string the octets making up the octet string.
+ */
+ public BERConstructedOctetString( byte[] string )
+ {
+ super( string );
+ }
+
+ public BERConstructedOctetString( Vector octets )
+ {
+ super( toBytes( octets ) );
+
+ this.octets = octets;
+ }
+
+ /**
+ * Convert a vector of octet strings into a single byte string.
+ */
+ static private byte[] toBytes( Vector octs )
+ {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+ for ( int i = 0; i != octs.size(); i++ )
+ {
+ try
+ {
+ DEROctetString o = (DEROctetString)octs.elementAt( i );
+
+ baos.write( o.getOctets() );
+ }
+ catch (ClassCastException e)
+ {
+ throw new IllegalArgumentException( octs.elementAt( i ).getClass().getName() + " found in input should only contain DEROctetString." );
+ }
+ catch (IOException e)
+ {
+ throw new IllegalArgumentException( "Exception converting octets " + e.toString() );
+ }
+ }
+
+ return baos.toByteArray();
+ }
+
+ /**
+ * @return Enumeration the DER octets that make up this string.
+ */
+ public Enumeration getObjects()
+ {
+ if ( octets == null )
+ {
+ return generateOcts().elements();
+ }
+
+ return octets.elements();
+ }
+
+ private Vector generateOcts()
+ {
+ int start = 0;
+ int end = 0;
+ Vector vector = new Vector();
+
+ while ( ( end + 1 ) < value.length )
+ {
+ if ( value[ end ] == 0 && value[ end + 1 ] == 0 )
+ {
+ byte[] nStr = new byte[ end - start + 1 ];
+
+ System.arraycopy( value, start, nStr, 0, nStr.length );
+
+ vector.addElement( new DEROctetString( nStr ) );
+ start = end + 1;
+ }
+ end++;
+ }
+
+ byte[] nStr = new byte[ value.length - start ];
+
+ System.arraycopy( value, start, nStr, 0, nStr.length );
+
+ vector.addElement( new DEROctetString( nStr ) );
+
+ return vector;
+ }
+
+ public void encode( ASN1OutputStream out )
+ throws IOException
+ {
+ out.write( CONSTRUCTED | OCTET_STRING );
+
+ out.write( DERObject.TAGGED );
+
+ if ( octets != null )
+ {
+ for ( int i = 0; i != octets.size(); i++ )
+ {
+ out.writeObject( octets.elementAt( i ) );
+ }
+ }
+ else
+ {
+ int start = 0;
+ int end = 0;
+
+ while ( ( end + 1 ) < value.length )
+ {
+ if ( value[ end ] == 0 && value[ end + 1 ] == 0 )
+ {
+ byte[] newString = new byte[ end - start + 1 ];
+
+ System.arraycopy( value, start, newString, 0, newString.length );
+
+ out.writeObject( new DEROctetString( newString ) );
+ start = end + 1;
+ }
+ end++;
+ }
+
+ byte[] newString = new byte[ value.length - start ];
+
+ System.arraycopy( value, start, newString, 0, newString.length );
+
+ out.writeObject( new DEROctetString( newString ) );
+ }
+
+ out.write( TERMINATOR );
+ out.write( TERMINATOR );
+ }
+}
+
Added: incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/BERNull.java
Url: http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/BERNull.java?view=auto&rev=125809
==============================================================================
--- (empty file)
+++ incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/BERNull.java Thu Jan 20 12:01:38 2005
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.asn1.der;
+
+import java.io.IOException;
+
+/**
+ * A BER NULL object.
+ */
+public class BERNull extends DERNull
+{
+ public void encode( ASN1OutputStream out )
+ throws IOException
+ {
+ out.write( NULL );
+ }
+}
+
Added: incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/BERSequence.java
Url: http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/BERSequence.java?view=auto&rev=125809
==============================================================================
--- (empty file)
+++ incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/BERSequence.java Thu Jan 20 12:01:38 2005
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.asn1.der;
+
+import java.io.IOException;
+import java.util.Enumeration;
+
+public class BERSequence extends DERSequence
+{
+ public void encode( ASN1OutputStream out )
+ throws IOException
+ {
+ out.write( DERObject.SEQUENCE | DERObject.CONSTRUCTED);
+ out.write( DERObject.TAGGED );
+
+ Enumeration e = getObjects();
+ while ( e.hasMoreElements() )
+ {
+ out.writeObject( e.nextElement() );
+ }
+
+ out.write( DERObject.TERMINATOR );
+ out.write( DERObject.TERMINATOR );
+ }
+}
+
Added: incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/BERSet.java
Url: http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/BERSet.java?view=auto&rev=125809
==============================================================================
--- (empty file)
+++ incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/BERSet.java Thu Jan 20 12:01:38 2005
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.asn1.der;
+
+import java.io.IOException;
+import java.util.Enumeration;
+
+
+public class BERSet extends DERSet
+{
+ public void encode( ASN1OutputStream out )
+ throws IOException
+ {
+ out.write( DERObject.SET | DERObject.CONSTRUCTED );
+ out.write( DERObject.TAGGED );
+
+ Enumeration e = getObjects();
+ while ( e.hasMoreElements() )
+ {
+ out.writeObject( e.nextElement() );
+ }
+
+ out.write( DERObject.TERMINATOR );
+ out.write( DERObject.TERMINATOR );
+ }
+}
+
Added: incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/BERTaggedObject.java
Url: http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/BERTaggedObject.java?view=auto&rev=125809
==============================================================================
--- (empty file)
+++ incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/BERTaggedObject.java Thu Jan 20 12:01:38 2005
@@ -0,0 +1,102 @@
+/*
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.asn1.der;
+
+import java.io.IOException;
+import java.util.Enumeration;
+
+/**
+ * BER TaggedObject
+ */
+public class BERTaggedObject extends DERTaggedObject
+{
+ /**
+ * @param tag the tag number for this object.
+ * @param obj the tagged object.
+ */
+ public BERTaggedObject( int tag, DEREncodable obj )
+ {
+ super( tag, obj );
+ }
+
+ /**
+ * @param true if an explicitly tagged object.
+ * @param tag the tag number for this object.
+ * @param obj the tagged object.
+ */
+ public BERTaggedObject( boolean explicit, int tag, DEREncodable obj )
+ {
+ super( explicit, tag, obj );
+ }
+
+ public void encode( ASN1OutputStream out )
+ throws IOException
+ {
+ out.write( DERObject.CONSTRUCTED | DERObject.TAGGED | tag );
+ out.write( DERObject.TAGGED );
+
+ if ( !empty )
+ {
+ if ( !explicit )
+ {
+ if ( obj instanceof DEROctetString )
+ {
+ Enumeration e;
+
+ if ( obj instanceof BERConstructedOctetString )
+ {
+ e = ( (BERConstructedOctetString)obj ).getObjects();
+ }
+ else
+ {
+ DEROctetString octs = (DEROctetString)obj;
+ BERConstructedOctetString berO = new BERConstructedOctetString( octs.getOctets() );
+
+ e = berO.getObjects();
+ }
+
+ while ( e.hasMoreElements() )
+ {
+ out.writeObject( e.nextElement() );
+ }
+ }
+ else if ( obj instanceof DERSequence )
+ {
+ Enumeration e = ( (DERSequence)obj ).getObjects();
+
+ while ( e.hasMoreElements() )
+ {
+ out.writeObject( e.nextElement() );
+ }
+ }
+ else
+ {
+ throw new RuntimeException( "Not implemented: " + obj.getClass().getName() );
+ }
+ }
+ else
+ {
+ out.writeObject( obj );
+ }
+ }
+
+ out.write( DERObject.TERMINATOR );
+ out.write( DERObject.TERMINATOR );
+ }
+}
+
Added: incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERApplicationSpecific.java
Url: http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERApplicationSpecific.java?view=auto&rev=125809
==============================================================================
--- (empty file)
+++ incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERApplicationSpecific.java Thu Jan 20 12:01:38 2005
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.asn1.der;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
+/**
+ * DER Application Specific object.
+ */
+public class DERApplicationSpecific extends DERObject
+{
+ private int tag;
+
+ /**
+ * Basic DERObject constructor.
+ */
+ public DERApplicationSpecific( int tag, byte[] value )
+ {
+ super( tag, value );
+ this.tag = tag;
+ }
+
+ /**
+ * Static factory method, type-conversion operator.
+ */
+ public static DERApplicationSpecific valueOf( int tag, DEREncodable object )
+ throws IOException
+ {
+ tag = tag | CONSTRUCTED;
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ASN1OutputStream aos = new ASN1OutputStream( baos );
+
+ aos.writeObject( object );
+
+ return new DERApplicationSpecific( tag, baos.toByteArray() );
+ }
+
+ public int getApplicationTag()
+ {
+ return tag & 0x1F;
+ }
+
+ public DEREncodable getObject()
+ throws IOException
+ {
+ return new ASN1InputStream( new ByteArrayInputStream( getOctets() ) ).readObject();
+ }
+
+ public void encode( ASN1OutputStream out ) throws IOException
+ {
+ out.writeEncoded( APPLICATION | tag, value );
+ }
+}
+
Added: incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERBMPString.java
Url: http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERBMPString.java?view=auto&rev=125809
==============================================================================
--- (empty file)
+++ incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERBMPString.java Thu Jan 20 12:01:38 2005
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.asn1.der;
+
+/**
+ * DER BMPString object.
+ */
+public class DERBMPString extends DERString
+{
+ /**
+ * Basic DERObject constructor.
+ */
+ public DERBMPString( byte[] value )
+ {
+ super( BMP_STRING, value );
+ }
+
+ /**
+ * Static factory method, type-conversion operator.
+ */
+ public static DERBMPString valueOf( String string )
+ {
+ return new DERBMPString( stringToByteArray( string ) );
+ }
+
+ public String getString()
+ {
+ return byteArrayToString( value );
+ }
+}
+
Added: incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERBitString.java
Url: http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERBitString.java?view=auto&rev=125809
==============================================================================
--- (empty file)
+++ incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERBitString.java Thu Jan 20 12:01:38 2005
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.asn1.der;
+
+import java.io.IOException;
+
+/**
+ * DER Bit String object.
+ */
+public class DERBitString extends DERObject
+{
+ /**
+ * Basic DERObject constructor.
+ */
+ public DERBitString( byte[] value )
+ {
+ super( BIT_STRING, value );
+ }
+
+ public byte[] getOctets()
+ {
+ return value;
+ }
+
+ public void encode( ASN1OutputStream out )
+ throws IOException
+ {
+ byte[] bytes = new byte[ value.length + 1 ];
+
+ bytes[0] = (byte)0x00;
+ System.arraycopy( value, 0, bytes, 1, bytes.length - 1 );
+
+ out.writeEncoded( BIT_STRING, bytes );
+ }
+}
+
Added: incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERBoolean.java
Url: http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERBoolean.java?view=auto&rev=125809
==============================================================================
--- (empty file)
+++ incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERBoolean.java Thu Jan 20 12:01:38 2005
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.asn1.der;
+
+/**
+ * DER Boolean object.
+ */
+public class DERBoolean extends DERObject
+{
+ private static final byte[] trueArray = { (byte)0x01 };
+ private static final byte[] falseArray = { (byte)0x00 };
+
+ public static final DERBoolean TRUE = new DERBoolean( trueArray );
+ public static final DERBoolean FALSE = new DERBoolean( falseArray );
+
+ /**
+ * Basic DERObject constructor.
+ */
+ public DERBoolean( byte[] value )
+ {
+ super( BOOLEAN, value );
+ }
+
+ /**
+ * Static factory method, type-conversion operator.
+ */
+ public static DERBoolean valueOf( boolean value )
+ {
+ return ( value ? TRUE : FALSE );
+ }
+
+ /**
+ * Lazy accessor
+ * @return boolean value
+ */
+ public boolean isTrue()
+ {
+ return value[ 0 ] == (byte)0x01;
+ }
+}
+
Added: incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DEREncodable.java
Url: http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DEREncodable.java?view=auto&rev=125809
==============================================================================
--- (empty file)
+++ incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DEREncodable.java Thu Jan 20 12:01:38 2005
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.asn1.der;
+
+import java.io.IOException;
+
+/**
+ * Interface for encodable DER objects.
+ */
+public interface DEREncodable
+{
+ void encode( ASN1OutputStream out ) throws IOException;
+}
+
Added: incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DEREnumerated.java
Url: http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DEREnumerated.java?view=auto&rev=125809
==============================================================================
--- (empty file)
+++ incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DEREnumerated.java Thu Jan 20 12:01:38 2005
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.asn1.der;
+
+
+/**
+ * DER Enumerated object.
+ */
+public class DEREnumerated extends DERObject
+{
+ /**
+ * Basic DERObject constructor.
+ */
+ public DEREnumerated( byte[] value )
+ {
+ super( ENUMERATED, value );
+ }
+
+ /**
+ * Static factory method, type-conversion operator.
+ */
+ public static DEREnumerated valueOf( int integer )
+ {
+ return new DEREnumerated( intToOctet( integer ) );
+ }
+
+ /**
+ * Lazy accessor
+ * @return integer value
+ */
+ public int intValue()
+ {
+ return octetToInt( value );
+ }
+
+ private static int octetToInt( byte[] bytes )
+ {
+ int result = 0;
+
+ for ( int ii = 0; ii < Math.min( 4, bytes.length ); ii++ )
+ {
+ result += bytes[ ii ] * ( 16 ^ ii );
+ }
+ return result;
+ }
+
+ private static byte[] intToOctet( int integer )
+ {
+ byte[] result = new byte[ 4 ];
+
+ for ( int ii = 0, shift = 24; ii < 4; ii++, shift -= 8 )
+ {
+ result[ ii ] = (byte) ( 0xFF & ( integer >> shift ) );
+ }
+ return result;
+ }
+}
+
Added: incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERGeneralString.java
Url: http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERGeneralString.java?view=auto&rev=125809
==============================================================================
--- (empty file)
+++ incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERGeneralString.java Thu Jan 20 12:01:38 2005
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.asn1.der;
+
+
+public class DERGeneralString extends DERString
+{
+ /**
+ * Basic DERObject constructor.
+ */
+ DERGeneralString( byte[] value )
+ {
+ super( GENERAL_STRING, value );
+ }
+
+ /**
+ * Static factory method, type-conversion operator.
+ */
+ public static DERGeneralString valueOf( String string )
+ {
+ return new DERGeneralString( stringToByteArray( string ) );
+ }
+}
+
Added: incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERGeneralizedTime.java
Url: http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERGeneralizedTime.java?view=auto&rev=125809
==============================================================================
--- (empty file)
+++ incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERGeneralizedTime.java Thu Jan 20 12:01:38 2005
@@ -0,0 +1,71 @@
+ /*
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.asn1.der;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.TimeZone;
+
+/**
+ * DER Generalized time object.
+ */
+public class DERGeneralizedTime extends DERString
+{
+ private static final TimeZone UTC_TIME_ZONE = TimeZone.getTimeZone( "UTC" );
+ private static final SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyyMMddHHmmss'Z'" );
+
+ static
+ {
+ dateFormat.setTimeZone( UTC_TIME_ZONE );
+ }
+
+ /**
+ * Basic DERObject constructor.
+ */
+ DERGeneralizedTime( byte[] value )
+ {
+ super( GENERALIZED_TIME, value );
+ }
+
+ /**
+ * Static factory method, type-conversion operator.
+ */
+ public static DERGeneralizedTime valueOf( Date date )
+ {
+ String dateString = dateFormat.format( date );
+
+ byte[] bytes = stringToByteArray( dateString );
+
+ return new DERGeneralizedTime( bytes );
+ }
+
+ /**
+ * Lazy accessor
+ * @return Date representation of this DER Generalized Time
+ * @throws ParseException
+ */
+ public Date getDate()
+ throws ParseException
+ {
+ String string = byteArrayToString( value );
+
+ return dateFormat.parse( string );
+ }
+}
+
Added: incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERIA5String.java
Url: http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERIA5String.java?view=auto&rev=125809
==============================================================================
--- (empty file)
+++ incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERIA5String.java Thu Jan 20 12:01:38 2005
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.asn1.der;
+
+/**
+ * DER IA5String object.
+ */
+public class DERIA5String extends DERString
+{
+ /**
+ * Basic DERObject constructor.
+ */
+ DERIA5String( byte[] value )
+ {
+ super( IA5_STRING, value );
+ }
+
+ /**
+ * Static factory method, type-conversion operator.
+ */
+ public static DERIA5String valueOf( String string )
+ {
+ return new DERIA5String( stringToByteArray( string ) );
+ }
+}
+
Added: incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERInteger.java
Url: http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERInteger.java?view=auto&rev=125809
==============================================================================
--- (empty file)
+++ incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERInteger.java Thu Jan 20 12:01:38 2005
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.asn1.der;
+
+import java.math.BigInteger;
+
+/**
+ * DER Integer object.
+ */
+public class DERInteger extends DERObject
+{
+ /**
+ * Basic DERObject constructor.
+ */
+ DERInteger( byte[] value )
+ {
+ super( INTEGER, value );
+ }
+
+ /**
+ * Static factory method, type-conversion operator.
+ */
+ public static DERInteger valueOf( int integer )
+ {
+ return new DERInteger( intToOctet( integer ) );
+ }
+
+ /**
+ * Lazy accessor
+ * @return integer value
+ */
+ public int intValue()
+ {
+ return octetToInt( value );
+ }
+
+ private static int octetToInt( byte[] bytes )
+ {
+ return new BigInteger( bytes ).intValue();
+ }
+
+ private static byte[] intToOctet( int integer )
+ {
+ return BigInteger.valueOf( integer ).toByteArray();
+ }
+}
+
Added: incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERNull.java
Url: http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERNull.java?view=auto&rev=125809
==============================================================================
--- (empty file)
+++ incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERNull.java Thu Jan 20 12:01:38 2005
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.asn1.der;
+
+/**
+ * A NULL object.
+ */
+public class DERNull extends DERObject
+{
+ private static final byte[] zeroBytes = new byte[ 0 ];
+
+ public DERNull()
+ {
+ super( NULL, zeroBytes );
+ }
+}
+
Added: incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERNumericString.java
Url: http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERNumericString.java?view=auto&rev=125809
==============================================================================
--- (empty file)
+++ incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERNumericString.java Thu Jan 20 12:01:38 2005
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.asn1.der;
+
+/**
+ * DER NumericString - a string of ASCII numeric characters { 0,1,2,3,4,5,6,7,8,9 }.
+ */
+public class DERNumericString extends DERString
+{
+ /**
+ * Basic DERObject constructor.
+ */
+ DERNumericString( byte[] value )
+ {
+ super( NUMERIC_STRING, value );
+ }
+
+ /**
+ * Static factory method, type-conversion operator.
+ */
+ public static DERNumericString valueOf( String string )
+ {
+ return new DERNumericString( stringToByteArray( string ));
+ }
+}
+
Added: incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERObject.java
Url: http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERObject.java?view=auto&rev=125809
==============================================================================
--- (empty file)
+++ incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERObject.java Thu Jan 20 12:01:38 2005
@@ -0,0 +1,123 @@
+/*
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.asn1.der;
+
+import java.io.IOException;
+import java.util.Arrays;
+
+/**
+ * DER object.
+ */
+public abstract class DERObject implements DEREncodable
+{
+ static final int TERMINATOR = 0x00;
+ static final int BOOLEAN = 0x01;
+ static final int INTEGER = 0x02;
+ static final int BIT_STRING = 0x03;
+ static final int OCTET_STRING = 0x04;
+ static final int NULL = 0x05;
+ static final int OBJECT_IDENTIFIER = 0x06;
+ static final int EXTERNAL = 0x08;
+ static final int ENUMERATED = 0x0a;
+ static final int SEQUENCE = 0x10;
+ static final int SET = 0x11;
+ static final int NUMERIC_STRING = 0x12;
+ static final int PRINTABLE_STRING = 0x13;
+ static final int T61_STRING = 0x14;
+ static final int VIDEOTEX_STRING = 0x15;
+ static final int IA5_STRING = 0x16;
+ static final int UTC_TIME = 0x17;
+ static final int GENERALIZED_TIME = 0x18;
+ static final int GRAPHIC_STRING = 0x19;
+ static final int VISIBLE_STRING = 0x1a;
+ static final int GENERAL_STRING = 0x1b;
+ static final int UNIVERSAL_STRING = 0x1c;
+ static final int BMP_STRING = 0x1e;
+ static final int UTF8_STRING = 0x0c;
+ static final int CONSTRUCTED = 0x20;
+ static final int APPLICATION = 0x40;
+ static final int TAGGED = 0x80;
+
+ protected int tag;
+ protected byte[] value;
+
+ /**
+ * Basic DERObject constructor.
+ */
+ protected DERObject( int tag, byte[] value )
+ {
+ this.tag = tag;
+ this.value = value;
+ }
+
+ public void encode( ASN1OutputStream out )
+ throws IOException
+ {
+ out.writeEncoded( tag, value );
+ }
+
+ byte[] getOctets()
+ {
+ return value;
+ }
+
+ /**
+ * Fast rotate left and XOR hashcode generator.
+ * @return a hash code for the byte array backing this object.
+ */
+ public int hashCode()
+ {
+ int hash = 0;
+ int len = value.length;
+
+ for ( int i = 0; i < len; i++ )
+ {
+ // rotate left and xor
+ hash <<= 1;
+ if ( hash < 0 )
+ {
+ hash |= 1;
+ }
+ hash ^= value[ i ];
+ }
+
+ return hash;
+ }
+
+ /**
+ * Two DERObjects are equal if their underlying byte arrays are equal.
+ * @return true if the two DERObject underlying byte arrays are equal.
+ */
+ public boolean equals( Object o )
+ {
+ if ( this == o )
+ {
+ return true;
+ }
+
+ if ( !( o instanceof DERObject ) )
+ {
+ return false;
+ }
+
+ DERObject that = (DERObject)o;
+
+ return Arrays.equals( this.value, that.value );
+ }
+}
+
Added: incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERObjectIdentifier.java
Url: http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERObjectIdentifier.java?view=auto&rev=125809
==============================================================================
--- (empty file)
+++ incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERObjectIdentifier.java Thu Jan 20 12:01:38 2005
@@ -0,0 +1,131 @@
+/*
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.asn1.der;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+
+public class DERObjectIdentifier extends DERObject
+{
+ String identifier;
+
+ DERObjectIdentifier( byte[] bytes )
+ {
+ super( OBJECT_IDENTIFIER, bytes );
+
+ StringBuffer objId = new StringBuffer();
+ long value = 0;
+ boolean first = true;
+
+ for ( int i = 0; i != bytes.length; i++ )
+ {
+ int b = bytes[ i ] & 0xff;
+
+ value = value * 128 + ( b & 0x7f );
+ if ( ( b & 0x80 ) == 0 ) // end of number reached
+ {
+ if ( first )
+ {
+ switch ( (int)value / 40 )
+ {
+ case 0:
+ objId.append( '0' );
+ break;
+ case 1:
+ objId.append( '1' );
+ value -= 40;
+ break;
+ default:
+ objId.append( '2' );
+ value -= 80;
+ }
+ first = false;
+ }
+
+ objId.append( '.' );
+ objId.append( Long.toString( value ) );
+ value = 0;
+ }
+ }
+
+ this.identifier = objId.toString();
+ }
+
+ private void writeField( OutputStream out, long fieldValue )
+ throws IOException
+ {
+ if ( fieldValue >= ( 1 << 7 ) )
+ {
+ if ( fieldValue >= ( 1 << 14 ) )
+ {
+ if ( fieldValue >= ( 1 << 21 ) )
+ {
+ if ( fieldValue >= ( 1 << 28 ) )
+ {
+ if ( fieldValue >= ( 1 << 35 ) )
+ {
+ if ( fieldValue >= ( 1 << 42 ) )
+ {
+ if ( fieldValue >= ( 1 << 49 ) )
+ {
+ if ( fieldValue >= ( 1 << 56 ) )
+ {
+ out.write( (int)( fieldValue >> 56 ) | 0x80 );
+ }
+ out.write( (int)( fieldValue >> 49 ) | 0x80 );
+ }
+ out.write( (int)( fieldValue >> 42 ) | 0x80 );
+ }
+ out.write( (int)( fieldValue >> 35 ) | 0x80 );
+ }
+ out.write( (int)( fieldValue >> 28 ) | 0x80 );
+ }
+ out.write( (int)( fieldValue >> 21 ) | 0x80 );
+ }
+ out.write( (int)( fieldValue >> 14 ) | 0x80 );
+ }
+ out.write( (int)( fieldValue >> 7 ) | 0x80 );
+ }
+ out.write( (int)fieldValue & 0x7f );
+ }
+
+ public void encode( ASN1OutputStream out )
+ throws IOException
+ {
+ OIDTokenizer tok = new OIDTokenizer( identifier );
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ASN1OutputStream aos = new ASN1OutputStream( baos );
+
+ writeField( baos, Integer.parseInt( tok.nextToken() ) * 40
+ + Integer.parseInt( tok.nextToken() ) );
+
+ while ( tok.hasMoreTokens() )
+ {
+ writeField( baos, Long.parseLong( tok.nextToken() ) );
+ }
+
+ aos.close();
+
+ byte[] bytes = baos.toByteArray();
+
+ out.writeEncoded( OBJECT_IDENTIFIER, bytes );
+ }
+}
+
Added: incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DEROctetString.java
Url: http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DEROctetString.java?view=auto&rev=125809
==============================================================================
--- (empty file)
+++ incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DEROctetString.java Thu Jan 20 12:01:38 2005
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.asn1.der;
+
+/**
+ * DER Octet String object.
+ */
+public class DEROctetString extends DERObject
+{
+ /**
+ * Basic DERObject constructor.
+ */
+ public DEROctetString( byte[] value )
+ {
+ super( OCTET_STRING, value );
+ }
+
+ public byte[] getOctets()
+ {
+ return value;
+ }
+}
+
Added: incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERPrintableString.java
Url: http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERPrintableString.java?view=auto&rev=125809
==============================================================================
--- (empty file)
+++ incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERPrintableString.java Thu Jan 20 12:01:38 2005
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.asn1.der;
+
+/**
+ * DER PrintableString object.
+ */
+public class DERPrintableString extends DERString
+{
+ /**
+ * Basic DERObject constructor.
+ */
+ public DERPrintableString( byte[] value )
+ {
+ super( PRINTABLE_STRING, value );
+ }
+
+ /**
+ * Static factory method, type-conversion operator.
+ */
+ public static DERPrintableString valueOf( String string )
+ {
+ return new DERPrintableString( stringToByteArray( string ) );
+ }
+}
+
Added: incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERSequence.java
Url: http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERSequence.java?view=auto&rev=125809
==============================================================================
--- (empty file)
+++ incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERSequence.java Thu Jan 20 12:01:38 2005
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.asn1.der;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.Enumeration;
+import java.util.Vector;
+
+
+public class DERSequence implements DEREncodable
+{
+ private Vector v = new Vector();
+
+ public void add( DEREncodable obj )
+ {
+ v.addElement( obj );
+ }
+
+ public Enumeration getObjects()
+ {
+ return v.elements();
+ }
+
+ public DEREncodable get( int i )
+ {
+ return (DEREncodable)v.elementAt( i );
+ }
+
+ public int size()
+ {
+ return v.size();
+ }
+
+ /**
+ * As DER requires the constructed, definite-length model to
+ * be used for structured types, this varies slightly from the
+ * ASN.1 descriptions given. Rather than just outputing SEQUENCE,
+ * we also have to specify CONSTRUCTED, and the objects length.
+ */
+ public void encode( ASN1OutputStream out )
+ throws IOException
+ {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ASN1OutputStream aos = new ASN1OutputStream( baos );
+
+ Enumeration e = getObjects();
+
+ while ( e.hasMoreElements() )
+ {
+ aos.writeObject( e.nextElement() );
+ }
+
+ aos.close();
+
+ byte[] bytes = baos.toByteArray();
+
+ out.writeEncoded( DERObject.SEQUENCE | DERObject.CONSTRUCTED, bytes );
+ }
+}
+
Added: incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERSet.java
Url: http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERSet.java?view=auto&rev=125809
==============================================================================
--- (empty file)
+++ incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERSet.java Thu Jan 20 12:01:38 2005
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.asn1.der;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.Enumeration;
+import java.util.Vector;
+
+/**
+ * A DER encoded set object
+ */
+public class DERSet implements DEREncodable
+{
+ protected Vector set = new Vector();
+
+ public Enumeration getObjects()
+ {
+ return set.elements();
+ }
+
+ public DEREncodable getObjectAt( int index )
+ {
+ return (DEREncodable)set.elementAt( index );
+ }
+
+ public int size()
+ {
+ return set.size();
+ }
+
+ public void add( DEREncodable obj )
+ {
+ set.addElement( obj );
+ }
+
+ public void encode( ASN1OutputStream out )
+ throws IOException
+ {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ASN1OutputStream aos = new ASN1OutputStream( baos );
+
+ Enumeration e = getObjects();
+
+ while ( e.hasMoreElements() )
+ {
+ aos.writeObject( e.nextElement() );
+ }
+
+ aos.close();
+
+ byte[] bytes = baos.toByteArray();
+
+ out.writeEncoded( DERObject.SET | DERObject.CONSTRUCTED, bytes );
+ }
+}
+
Added: incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERString.java
Url: http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERString.java?view=auto&rev=125809
==============================================================================
--- (empty file)
+++ incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERString.java Thu Jan 20 12:01:38 2005
@@ -0,0 +1,77 @@
+/*
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.asn1.der;
+
+/**
+ * Interface for DER string objects.
+ */
+public abstract class DERString extends DERObject
+{
+ /**
+ * Basic DERObject constructor.
+ */
+ DERString( int tag, byte[] value )
+ {
+ super( tag, value );
+ }
+
+ /**
+ * Lazy accessor.
+ * @return underlying byte array converted to a String
+ */
+ public String getString()
+ {
+ return byteArrayToString( value );
+ }
+
+ /**
+ * Utility method for converting byte arrays to Strings.
+ * @param bytes
+ * @return String
+ */
+ protected static String byteArrayToString( byte[] bytes )
+ {
+ char[] characters = new char[ bytes.length ];
+
+ for ( int ii = 0; ii < characters.length; ii++ )
+ {
+ characters[ ii ] = (char)( bytes[ ii ] & 0xff );
+ }
+
+ return new String( characters );
+ }
+
+ /**
+ * Utility method for converting Strings to bytes.
+ * @param string
+ * @return bytes
+ */
+ protected static byte[] stringToByteArray( String string )
+ {
+ char[] characters = string.toCharArray();
+ byte[] bytes = new byte[ characters.length ];
+
+ for ( int ii = 0; ii < characters.length; ii++ )
+ {
+ bytes[ ii ] = (byte)characters[ ii ];
+ }
+
+ return bytes;
+ }
+}
+
Added: incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERTaggedObject.java
Url: http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERTaggedObject.java?view=auto&rev=125809
==============================================================================
--- (empty file)
+++ incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERTaggedObject.java Thu Jan 20 12:01:38 2005
@@ -0,0 +1,125 @@
+/*
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.asn1.der;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
+/**
+ * DER TaggedObject
+ */
+public class DERTaggedObject implements DEREncodable
+{
+ protected int tag;
+ protected boolean empty = false;
+ protected boolean explicit = true;
+ protected DEREncodable obj = null;
+
+ /**
+ * @param tag the tag number for this object.
+ * @param obj the tagged object.
+ */
+ public DERTaggedObject( int tag, DEREncodable obj )
+ {
+ this.explicit = true;
+ this.tag = tag;
+ this.obj = obj;
+ }
+
+ /**
+ * @param explicit true if an explicitly tagged object.
+ * @param tagNo the tag number for this object.
+ * @param obj the tagged object.
+ */
+ public DERTaggedObject( boolean explicit, int tag, DEREncodable obj )
+ {
+ this.explicit = explicit;
+ this.tag = tag;
+ this.obj = obj;
+ }
+
+ /**
+ * create an implicitly tagged object that contains a zero
+ * length sequence.
+ */
+ public DERTaggedObject( int tag )
+ {
+ this( false, tag, new DERSequence() );
+ }
+
+ public int getTagNo()
+ {
+ return tag;
+ }
+
+ /**
+ * return whatever was following the tag.
+ * <p>
+ * Note: tagged objects are generally context dependent if you're
+ * trying to extract a tagged object you should be going via the
+ * appropriate getInstance method.
+ */
+ public DEREncodable getObject()
+ {
+ if ( obj != null )
+ {
+ return obj;
+ }
+
+ return null;
+ }
+
+ public void encode( ASN1OutputStream out )
+ throws IOException
+ {
+ if ( !empty )
+ {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ASN1OutputStream aos = new ASN1OutputStream( baos );
+
+ aos.writeObject( obj );
+ aos.close();
+
+ byte[] bytes = baos.toByteArray();
+
+ if ( explicit )
+ {
+ out.writeEncoded( DERObject.CONSTRUCTED | DERObject.TAGGED | tag, bytes );
+ }
+ else
+ {
+ // need to mark constructed types
+ if ( ( bytes[ 0 ] & DERObject.CONSTRUCTED ) != 0 )
+ {
+ bytes[ 0 ] = (byte)( DERObject.CONSTRUCTED | DERObject.TAGGED | tag );
+ }
+ else
+ {
+ bytes[ 0 ] = (byte)( DERObject.TAGGED | tag );
+ }
+
+ out.write( bytes );
+ }
+ }
+ else
+ {
+ out.writeEncoded( DERObject.CONSTRUCTED | DERObject.TAGGED | tag, new byte[ 0 ] );
+ }
+ }
+}
+
Added: incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERTeletexString.java
Url: http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERTeletexString.java?view=auto&rev=125809
==============================================================================
--- (empty file)
+++ incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERTeletexString.java Thu Jan 20 12:01:38 2005
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.asn1.der;
+
+/**
+ * DER Teletex String
+ */
+public class DERTeletexString extends DERString
+{
+ /**
+ * Basic DERObject constructor.
+ */
+ public DERTeletexString( byte[] value )
+ {
+ super( T61_STRING, value );
+ }
+
+ /**
+ * Static factory method, type-conversion operator.
+ */
+ public static DERTeletexString valueOf( String string )
+ {
+ return new DERTeletexString( stringToByteArray( string ) );
+ }
+}
+
Added: incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERUTCTime.java
Url: http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERUTCTime.java?view=auto&rev=125809
==============================================================================
--- (empty file)
+++ incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERUTCTime.java Thu Jan 20 12:01:38 2005
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.asn1.der;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.TimeZone;
+
+/**
+ * DER UTC time object.
+ */
+public class DERUTCTime extends DERString
+{
+ private static final TimeZone UTC_TIME_ZONE = TimeZone.getTimeZone( "UTC" );
+ private static final SimpleDateFormat dateFormat = new SimpleDateFormat( "yyMMddHHmmss'Z'" );
+
+ static
+ {
+ dateFormat.setTimeZone( UTC_TIME_ZONE );
+ }
+
+ /**
+ * Basic DERObject constructor.
+ */
+ public DERUTCTime( byte[] value )
+ {
+ super( UTC_TIME, value );
+ }
+
+ /**
+ * Static factory method, type-conversion operator.
+ */
+ public static DERUTCTime valueOf( Date date )
+ {
+ String dateString = dateFormat.format( date );
+
+ byte[] bytes = stringToByteArray( dateString );
+
+ return new DERUTCTime( bytes );
+ }
+
+ /**
+ * Lazy accessor
+ * @return Date representation of this DER UTC Time
+ * @throws ParseException
+ */
+ public Date getDate()
+ throws ParseException
+ {
+ String string = byteArrayToString( value );
+
+ return dateFormat.parse( string );
+ }
+}
+
Added: incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERUTF8String.java
Url: http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERUTF8String.java?view=auto&rev=125809
==============================================================================
--- (empty file)
+++ incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERUTF8String.java Thu Jan 20 12:01:38 2005
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.asn1.der;
+
+/**
+ * DER UTF8String object.
+ */
+public class DERUTF8String extends DERString
+{
+ /**
+ * Basic DERObject constructor.
+ */
+ public DERUTF8String( byte[] value )
+ {
+ super( UTF8_STRING, value );
+ }
+
+ /**
+ * Static factory method, type-conversion operator.
+ */
+ public static DERUTF8String valueOf( String string )
+ {
+ return new DERUTF8String( stringToByteArray( string ) );
+ }
+}
+
Added: incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERUniversalString.java
Url: http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERUniversalString.java?view=auto&rev=125809
==============================================================================
--- (empty file)
+++ incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERUniversalString.java Thu Jan 20 12:01:38 2005
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.asn1.der;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
+/**
+ * DER UniversalString object.
+ */
+public class DERUniversalString extends DERString
+{
+ private static final char[] table = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
+
+ /**
+ * Basic DERObject constructor.
+ */
+ public DERUniversalString( byte[] value )
+ {
+ super( UNIVERSAL_STRING, value );
+ }
+
+ public String getString()
+ {
+ StringBuffer buf = new StringBuffer( "#" );
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ASN1OutputStream aos = new ASN1OutputStream( baos );
+
+ try
+ {
+ aos.writeObject( this );
+ }
+ catch (IOException e)
+ {
+ throw new RuntimeException( "Internal error encoding BitString." );
+ }
+
+ byte[] string = baos.toByteArray();
+
+ for ( int i = 0; i < string.length; i++ )
+ {
+ buf.append( table[ ( string[ i ] >>> 4 ) % 0xf ] );
+ buf.append( table[ string[ i ] & 0xf ] );
+ }
+
+ return buf.toString();
+ }
+}
+
Added: incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERUnknownTag.java
Url: http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERUnknownTag.java?view=auto&rev=125809
==============================================================================
--- (empty file)
+++ incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERUnknownTag.java Thu Jan 20 12:01:38 2005
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.asn1.der;
+
+/**
+ * Placeholder for unrecognized tags.
+ */
+public class DERUnknownTag extends DERObject
+{
+ /**
+ * Basic DERObject constructor.
+ */
+ public DERUnknownTag( int tag, byte[] value )
+ {
+ super( tag, value );
+ }
+}
+
Added: incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERVisibleString.java
Url: http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERVisibleString.java?view=auto&rev=125809
==============================================================================
--- (empty file)
+++ incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/DERVisibleString.java Thu Jan 20 12:01:38 2005
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.asn1.der;
+
+/**
+ * DER VisibleString object.
+ */
+public class DERVisibleString extends DERString
+{
+ /**
+ * Basic DERObject constructor.
+ */
+ public DERVisibleString( byte[] value )
+ {
+ super( VISIBLE_STRING, value );
+ }
+
+ /**
+ * Static factory method, type-conversion operator.
+ */
+ public static DERVisibleString valueOf( String string )
+ {
+ return new DERVisibleString( stringToByteArray( string ) );
+ }
+}
+
Added: incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/OIDTokenizer.java
Url: http://svn.apache.org/viewcvs/incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/OIDTokenizer.java?view=auto&rev=125809
==============================================================================
--- (empty file)
+++ incubator/directory/asn1/trunk/der/src/java/org/apache/asn1/der/OIDTokenizer.java Thu Jan 20 12:01:38 2005
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.asn1.der;
+
+/**
+ * class for breaking up an OID into it's component tokens, ala
+ * java.util.StringTokenizer. We need this class as some of the
+ * lightweight Java environment don't support classes like
+ * StringTokenizer.
+ */
+public class OIDTokenizer
+{
+ private String oid;
+ private int index;
+
+ public OIDTokenizer( String oid )
+ {
+ this.oid = oid;
+ this.index = 0;
+ }
+
+ public boolean hasMoreTokens()
+ {
+ return ( index != -1 );
+ }
+
+ public String nextToken()
+ {
+ if ( index == -1 )
+ {
+ return null;
+ }
+
+ String token;
+ int end = oid.indexOf( '.', index );
+
+ if ( end == -1 )
+ {
+ token = oid.substring( index );
+ index = -1;
+ return token;
+ }
+
+ token = oid.substring( index, end );
+
+ index = end + 1;
+ return token;
+ }
+}
+