Author: erodriguez
Date: Thu Feb  3 13:57:13 2005
New Revision: 151239

URL: http://svn.apache.org/viewcvs?view=rev&rev=151239
Log:
Moved Kerberos encoders to use object composition.

Added:
    
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/AuthorizationDataEncoder.java
    
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/ChecksumEncoder.java
    
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncryptionKeyEncoder.java
    
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncryptionTypeEncoder.java
    
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/HostAddressesEncoder.java
    
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/KerberosTimeEncoder.java
    
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/LastRequestEncoder.java
    
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/PrincipalNameEncoder.java
    
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/TicketEncoder.java
    
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/TransitedEncodingEncoder.java
Removed:
    
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/KerberosMessageEncoder.java
Modified:
    
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/ChecksumDecoder.java
    
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/EncryptedDataDecoder.java
    
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/ApplicationReplyEncoder.java
    
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncApRepPartEncoder.java
    
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncAsRepPartEncoder.java
    
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncKdcRepPartEncoder.java
    
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncKrbPrivPartEncoder.java
    
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncTgsRepPartEncoder.java
    
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncTicketPartEncoder.java
    
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncryptedDataEncoder.java
    
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncryptedTimestampEncoder.java
    
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/ErrorMessageEncoder.java
    
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/KdcReplyEncoder.java
    
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/KdcReqBodyEncoder.java
    
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/PreAuthenticationDataEncoder.java
    
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/PrivateMessageEncoder.java

Modified: 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/ChecksumDecoder.java
URL: 
http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/ChecksumDecoder.java?view=diff&r1=151238&r2=151239
==============================================================================
--- 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/ChecksumDecoder.java
 (original)
+++ 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/ChecksumDecoder.java
 Thu Feb  3 13:57:13 2005
@@ -36,7 +36,7 @@
      *          checksum[1]    OCTET STRING
      * }
         */
-       protected static Checksum decode( DERSequence sequence )
+       public static Checksum decode( DERSequence sequence )
        {
                ChecksumType type = ChecksumType.NULL;
                byte[] data = null;

Modified: 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/EncryptedDataDecoder.java
URL: 
http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/EncryptedDataDecoder.java?view=diff&r1=151238&r2=151239
==============================================================================
--- 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/EncryptedDataDecoder.java
 (original)
+++ 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/EncryptedDataDecoder.java
 Thu Feb  3 13:57:13 2005
@@ -49,7 +49,7 @@
         *             cipher[2]    OCTET STRING -- ciphertext
         * }
         */
-       protected static EncryptedData decode( DERSequence sequence )
+       public static EncryptedData decode( DERSequence sequence )
        {
                EncryptedDataModifier modifier = new EncryptedDataModifier();
                

Modified: 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/ApplicationReplyEncoder.java
URL: 
http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/ApplicationReplyEncoder.java?view=diff&r1=151238&r2=151239
==============================================================================
--- 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/ApplicationReplyEncoder.java
 (original)
+++ 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/ApplicationReplyEncoder.java
 Thu Feb  3 13:57:13 2005
@@ -27,28 +27,30 @@
 import org.apache.asn1.der.DERTaggedObject;
 import org.apache.kerberos.messages.application.ApplicationReply;
 
-public class ApplicationReplyEncoder extends KerberosMessageEncoder {
-       
+
+public class ApplicationReplyEncoder
+{
        public static final int APPLICATION_CODE = 15;
        
-       public byte[] encode(ApplicationReply reply) throws IOException {
+       public byte[] encode( ApplicationReply reply ) throws IOException
+       {
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
-               ASN1OutputStream aos = new ASN1OutputStream(baos);
+               ASN1OutputStream aos = new ASN1OutputStream( baos );
                
-               DERSequence replySequence = encodeReplySequence(reply);
-               aos.writeObject( 
DERApplicationSpecific.valueOf(APPLICATION_CODE, replySequence));
+               DERSequence replySequence = encodeReplySequence( reply );
+               aos.writeObject( DERApplicationSpecific.valueOf( 
APPLICATION_CODE, replySequence ) );
                aos.close();
                
                return baos.toByteArray();
        }
        
-       private DERSequence encodeReplySequence(ApplicationReply message) {
-               
+       private DERSequence encodeReplySequence( ApplicationReply message )
+       {
                DERSequence sequence = new DERSequence();
                
-               sequence.add(new DERTaggedObject(0, DERInteger.valueOf( 
message.getProtocolVersionNumber() )));
-               sequence.add(new DERTaggedObject(1, 
DERInteger.valueOf(message.getMessageType().getOrdinal())));
-               sequence.add(new DERTaggedObject(2, 
encodeEncryptedData(message.getEncPart())));
+               sequence.add( new DERTaggedObject( 0, DERInteger.valueOf( 
message.getProtocolVersionNumber() ) ) );
+               sequence.add( new DERTaggedObject( 1, DERInteger.valueOf( 
message.getMessageType().getOrdinal() ) ) );
+               sequence.add( new DERTaggedObject( 2, 
EncryptedDataEncoder.encodeSequence(message.getEncPart() ) ) );
                
                return sequence;
        }

Added: 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/AuthorizationDataEncoder.java
URL: 
http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/AuthorizationDataEncoder.java?view=auto&rev=151239
==============================================================================
--- 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/AuthorizationDataEncoder.java
 (added)
+++ 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/AuthorizationDataEncoder.java
 Thu Feb  3 13:57:13 2005
@@ -0,0 +1,55 @@
+/*
+ *   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.kerberos.io.encoder;
+
+import java.util.Iterator;
+
+import org.apache.asn1.der.DERInteger;
+import org.apache.asn1.der.DEROctetString;
+import org.apache.asn1.der.DERSequence;
+import org.apache.asn1.der.DERTaggedObject;
+import org.apache.kerberos.messages.value.AuthorizationData;
+import org.apache.kerberos.messages.value.AuthorizationDataEntry;
+
+
+public class AuthorizationDataEncoder
+{
+       /**
+        * AuthorizationData ::=   SEQUENCE OF SEQUENCE {
+     *     ad-type[0]               INTEGER,
+     *     ad-data[1]               OCTET STRING
+     * }
+     */
+       protected static DERSequence encode( AuthorizationData data )
+       {
+               Iterator it = data.iterator();
+               DERSequence outerSequence = new DERSequence();
+               
+               while ( it.hasNext() )
+               {
+                       AuthorizationDataEntry entry = 
(AuthorizationDataEntry)it.next();
+                       DERSequence sequence = new DERSequence();
+                       sequence.add( new DERTaggedObject( 0, 
DERInteger.valueOf( entry.getAuthorizationDataType().getOrdinal() ) ) );
+                       sequence.add( new DERTaggedObject( 1, new 
DEROctetString( entry.getAuthorizationData() ) ) );
+                       outerSequence.add( sequence );
+               }
+               
+               return outerSequence;
+       }
+}
+

Added: 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/ChecksumEncoder.java
URL: 
http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/ChecksumEncoder.java?view=auto&rev=151239
==============================================================================
--- 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/ChecksumEncoder.java
 (added)
+++ 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/ChecksumEncoder.java
 Thu Feb  3 13:57:13 2005
@@ -0,0 +1,45 @@
+/*
+ *   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.kerberos.io.encoder;
+
+import org.apache.asn1.der.DERInteger;
+import org.apache.asn1.der.DEROctetString;
+import org.apache.asn1.der.DERSequence;
+import org.apache.asn1.der.DERTaggedObject;
+import org.apache.kerberos.messages.value.Checksum;
+
+
+public class ChecksumEncoder
+{
+       /**
+        * Checksum ::=   SEQUENCE {
+     *          cksumtype[0]   INTEGER,
+     *          checksum[1]    OCTET STRING
+     * }
+        */
+       public static DERSequence encode( Checksum checksum )
+       {
+               DERSequence vector = new DERSequence();
+               
+               vector.add( new DERTaggedObject( 0, DERInteger.valueOf( 
checksum.getChecksumType().getOrdinal() ) ) );
+               vector.add( new DERTaggedObject( 1, new DEROctetString( 
checksum.getChecksumValue() ) ) );
+               
+               return vector;
+       }
+}
+

Modified: 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncApRepPartEncoder.java
URL: 
http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncApRepPartEncoder.java?view=diff&r1=151238&r2=151239
==============================================================================
--- 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncApRepPartEncoder.java
 (original)
+++ 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncApRepPartEncoder.java
 Thu Feb  3 13:57:13 2005
@@ -27,31 +27,39 @@
 import org.apache.asn1.der.DERTaggedObject;
 import org.apache.kerberos.messages.components.EncApRepPart;
 
-public class EncApRepPartEncoder extends KerberosMessageEncoder {
-       
+
+public class EncApRepPartEncoder
+{
        public static final int APPLICATION_CODE = 27;
        
-       public byte[] encode(EncApRepPart apRepPart) throws IOException {
+       public byte[] encode( EncApRepPart apRepPart ) throws IOException
+       {
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
-               ASN1OutputStream aos = new ASN1OutputStream(baos);
+               ASN1OutputStream aos = new ASN1OutputStream( baos );
                
-               DERSequence privPartSequence = 
encodeApRepPartSequence(apRepPart);
-               aos.writeObject( 
DERApplicationSpecific.valueOf(APPLICATION_CODE, privPartSequence));
+               DERSequence privPartSequence = encodeApRepPartSequence( 
apRepPart );
+               aos.writeObject( DERApplicationSpecific.valueOf( 
APPLICATION_CODE, privPartSequence ) );
                aos.close();
                
                return baos.toByteArray();
        }
        
-       private DERSequence encodeApRepPartSequence(EncApRepPart message) {
-               
+       private DERSequence encodeApRepPartSequence( EncApRepPart message )
+       {
                DERSequence sequence = new DERSequence();
                
-               sequence.add(new DERTaggedObject(0, 
encodeKerberosTime(message.getClientTime())));
-               sequence.add(new DERTaggedObject(1, 
DERInteger.valueOf(message.getClientMicroSecond())));
-               if (message.getSubSessionKey() != null)
-                       sequence.add(new DERTaggedObject(2, 
encodeEncryptionKey(message.getSubSessionKey())));
-               if (message.getSequenceNumber() != null)
-                       sequence.add(new DERTaggedObject(3, 
DERInteger.valueOf(message.getSequenceNumber().intValue())));
+               sequence.add( new DERTaggedObject(0, 
KerberosTimeEncoder.encode( message.getClientTime() ) ) );
+               sequence.add( new DERTaggedObject(1, DERInteger.valueOf( 
message.getClientMicroSecond() ) ) );
+               
+               if ( message.getSubSessionKey() != null)
+               {
+                       sequence.add( new DERTaggedObject( 2, 
EncryptionKeyEncoder.encode( message.getSubSessionKey() ) ) );
+               }
+               
+               if ( message.getSequenceNumber() != null )
+               {
+                       sequence.add( new DERTaggedObject( 3, 
DERInteger.valueOf( message.getSequenceNumber().intValue() ) ) );
+               }
                
                return sequence;
        }

Modified: 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncAsRepPartEncoder.java
URL: 
http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncAsRepPartEncoder.java?view=diff&r1=151238&r2=151239
==============================================================================
--- 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncAsRepPartEncoder.java
 (original)
+++ 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncAsRepPartEncoder.java
 Thu Feb  3 13:57:13 2005
@@ -17,6 +17,7 @@
 
 package org.apache.kerberos.io.encoder;
 
+
 public class EncAsRepPartEncoder extends EncKdcRepPartEncoder
 {
        /*

Modified: 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncKdcRepPartEncoder.java
URL: 
http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncKdcRepPartEncoder.java?view=diff&r1=151238&r2=151239
==============================================================================
--- 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncKdcRepPartEncoder.java
 (original)
+++ 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncKdcRepPartEncoder.java
 Thu Feb  3 13:57:13 2005
@@ -22,76 +22,90 @@
 
 import org.apache.asn1.der.ASN1OutputStream;
 import org.apache.asn1.der.DERApplicationSpecific;
+import org.apache.asn1.der.DERBitString;
+import org.apache.asn1.der.DERGeneralString;
 import org.apache.asn1.der.DERInteger;
 import org.apache.asn1.der.DERSequence;
 import org.apache.asn1.der.DERTaggedObject;
 import org.apache.kerberos.messages.KdcReply;
 
-public abstract class EncKdcRepPartEncoder extends KerberosMessageEncoder {
-       
-       private int _applicationCode;
+
+public abstract class EncKdcRepPartEncoder
+{
+       private int applicationCode;
        
-       protected EncKdcRepPartEncoder(int applicationCode) {
-               _applicationCode = applicationCode;
+       protected EncKdcRepPartEncoder( int applicationCode )
+       {
+               this.applicationCode = applicationCode;
        }
        
-       public byte[] encode(KdcReply app) throws IOException {
+       public byte[] encode( KdcReply app ) throws IOException
+       {
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
-               ASN1OutputStream aos = new ASN1OutputStream(baos);
+               ASN1OutputStream aos = new ASN1OutputStream( baos );
                
-               DERSequence initialSequence = encodeInitialSequence(app);
-               aos.writeObject( 
DERApplicationSpecific.valueOf(_applicationCode, initialSequence));
+               DERSequence initialSequence = encodeInitialSequence( app );
+               aos.writeObject( DERApplicationSpecific.valueOf( 
applicationCode, initialSequence ) );
                
                return baos.toByteArray();
        }
        
-       /*
-          EncKDCRepPart ::=   SEQUENCE {
-                      key[0]                       EncryptionKey,
-                      last-req[1]                  LastReq,
-
-                      nonce[2]                     INTEGER,
-                      key-expiration[3]            KerberosTime OPTIONAL,
-                      flags[4]                     TicketFlags,
-                      authtime[5]                  KerberosTime,
-                      starttime[6]                 KerberosTime OPTIONAL,
-                      endtime[7]                   KerberosTime,
-                      renew-till[8]                KerberosTime OPTIONAL,
-                      srealm[9]                    Realm,
-                      sname[10]                    PrincipalName,
-                      caddr[11]                    HostAddresses OPTIONAL
-       }*/
-       protected DERSequence encodeInitialSequence(KdcReply reply) {
-
+       /**
+        *    EncKDCRepPart ::=   SEQUENCE {
+        *                key[0]                       EncryptionKey,
+        *                last-req[1]                  LastReq,
+     * 
+        *                nonce[2]                     INTEGER,
+        *                key-expiration[3]            KerberosTime OPTIONAL,
+        *                flags[4]                     TicketFlags,
+        *                authtime[5]                  KerberosTime,
+        *                starttime[6]                 KerberosTime OPTIONAL,
+        *                endtime[7]                   KerberosTime,
+        *                renew-till[8]                KerberosTime OPTIONAL,
+        *                srealm[9]                    Realm,
+        *                sname[10]                    PrincipalName,
+        *                caddr[11]                    HostAddresses OPTIONAL
+        * }
+        */
+       protected DERSequence encodeInitialSequence( KdcReply reply )
+       {
                DERSequence sequence = new DERSequence();
                
-               sequence.add(new DERTaggedObject(0, 
encodeEncryptionKey(reply.getKey())));
-               sequence.add(new DERTaggedObject(1, 
encodeLastRequest(reply.getLastRequest())));
-               sequence.add(new DERTaggedObject(2, 
DERInteger.valueOf(reply.getNonce())));
+               sequence.add( new DERTaggedObject( 0, 
EncryptionKeyEncoder.encode( reply.getKey() ) ) );
+               sequence.add( new DERTaggedObject( 1, 
LastRequestEncoder.encode( reply.getLastRequest() ) ) );
+               sequence.add( new DERTaggedObject( 2, DERInteger.valueOf( 
reply.getNonce() ) ) );
                
                // OPTIONAL
-               if (reply.getKeyExpiration() != null)
-                       sequence.add(new DERTaggedObject(3, 
encodeKerberosTime(reply.getKeyExpiration())));
+               if ( reply.getKeyExpiration() != null )
+               {
+                       sequence.add(new DERTaggedObject( 3, 
KerberosTimeEncoder.encode(reply.getKeyExpiration() ) ) );
+               }
                
-               sequence.add(new DERTaggedObject(4, 
encodeTicketFlags(reply.getFlags())));
-               sequence.add(new DERTaggedObject(5, 
encodeKerberosTime(reply.getAuthTime())));
+               sequence.add( new DERTaggedObject( 4, new 
DERBitString(reply.getFlags().getBytes() ) ) );
+               sequence.add( new DERTaggedObject( 5, 
KerberosTimeEncoder.encode( reply.getAuthTime() ) ) );
                
                // OPTIONAL
-               if (reply.getStartTime() != null)
-                       sequence.add(new DERTaggedObject(6, 
encodeKerberosTime(reply.getStartTime())));
+               if ( reply.getStartTime() != null )
+               {
+                       sequence.add( new DERTaggedObject( 6, 
KerberosTimeEncoder.encode( reply.getStartTime() ) ) );
+               }
                
-               sequence.add(new DERTaggedObject(7, 
encodeKerberosTime(reply.getEndTime())));
+               sequence.add( new DERTaggedObject( 7, 
KerberosTimeEncoder.encode( reply.getEndTime() ) ) );
                
                // OPTIONAL
-               if (reply.getRenewTill() != null)
-                       sequence.add(new DERTaggedObject(8, 
encodeKerberosTime(reply.getRenewTill())));
+               if ( reply.getRenewTill() != null )
+               {
+                       sequence.add( new DERTaggedObject( 8, 
KerberosTimeEncoder.encode( reply.getRenewTill() ) ) );
+               }
                
-               sequence.add(new DERTaggedObject(9, 
encodeRealm(reply.getServerRealm())));
-               sequence.add(new DERTaggedObject(10, 
encodePrincipalName(reply.getServerPrincipal())));
+               sequence.add( new DERTaggedObject( 9, DERGeneralString.valueOf( 
reply.getServerRealm().toString() ) ) );
+               sequence.add( new DERTaggedObject( 10, 
PrincipalNameEncoder.encode( reply.getServerPrincipal() ) ) );
                
                // OPTIONAL
-               if (reply.getClientAddresses() != null)
-                       sequence.add(new DERTaggedObject(11, 
encodeHostAddresses(reply.getClientAddresses())));
+               if ( reply.getClientAddresses() != null )
+               {
+                       sequence.add( new DERTaggedObject( 11, 
HostAddressesEncoder.encodeSequence( reply.getClientAddresses() ) ) );
+               }
                
                return sequence;
        }

Modified: 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncKrbPrivPartEncoder.java
URL: 
http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncKrbPrivPartEncoder.java?view=diff&r1=151238&r2=151239
==============================================================================
--- 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncKrbPrivPartEncoder.java
 (original)
+++ 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncKrbPrivPartEncoder.java
 Thu Feb  3 13:57:13 2005
@@ -28,35 +28,50 @@
 import org.apache.asn1.der.DERTaggedObject;
 import org.apache.kerberos.messages.components.EncKrbPrivPart;
 
-public class EncKrbPrivPartEncoder extends KerberosMessageEncoder {
+
+public class EncKrbPrivPartEncoder
+{
+       private static final int APPLICATION_CODE = 28;
        
-       public static final int APPLICATION_CODE = 28;
-       
-       public byte[] encode(EncKrbPrivPart privPart) throws IOException {
+       public byte[] encode(EncKrbPrivPart privPart) throws IOException
+       {
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
-               ASN1OutputStream aos = new ASN1OutputStream(baos);
+               ASN1OutputStream aos = new ASN1OutputStream( baos );
                
-               DERSequence privPartSequence = 
encodePrivatePartSequence(privPart);
-               aos.writeObject( 
DERApplicationSpecific.valueOf(APPLICATION_CODE, privPartSequence));
+               DERSequence privPartSequence = encodePrivatePartSequence( 
privPart );
+               aos.writeObject( DERApplicationSpecific.valueOf( 
APPLICATION_CODE, privPartSequence ) );
                aos.close();
                
                return baos.toByteArray();
        }
        
-       private DERSequence encodePrivatePartSequence(EncKrbPrivPart message) {
-               
+       private DERSequence encodePrivatePartSequence( EncKrbPrivPart message )
+       {
                DERSequence sequence = new DERSequence();
                
-               sequence.add(new DERTaggedObject(0, new 
DEROctetString(message.getUserData())));
-               if (message.getTimestamp() != null)
-                       sequence.add(new DERTaggedObject(1, 
encodeKerberosTime(message.getTimestamp())));
-               if (message.getMicroSecond() != null)
-                       sequence.add(new DERTaggedObject(2, 
DERInteger.valueOf(message.getMicroSecond().intValue())));
-               if (message.getSequenceNumber() != null)
-                       sequence.add(new DERTaggedObject(3, 
DERInteger.valueOf(message.getSequenceNumber().intValue())));
-               sequence.add(new DERTaggedObject(4, 
encodeHostAddress(message.getSenderAddress())));
-               if (message.getRecipientAddress() != null)
-                       sequence.add(new DERTaggedObject(5, 
encodeHostAddress(message.getRecipientAddress())));
+               sequence.add( new DERTaggedObject( 0, new DEROctetString( 
message.getUserData() ) ) );
+               
+               if ( message.getTimestamp() != null )
+               {
+                       sequence.add( new DERTaggedObject( 1, 
KerberosTimeEncoder.encode( message.getTimestamp() ) ) );
+               }
+               
+               if ( message.getMicroSecond() != null )
+               {
+                       sequence.add(new DERTaggedObject( 2, 
DERInteger.valueOf( message.getMicroSecond().intValue() ) ) );
+               }
+               
+               if ( message.getSequenceNumber() != null )
+               {
+                       sequence.add(new DERTaggedObject( 3, 
DERInteger.valueOf( message.getSequenceNumber().intValue() ) ) );
+               }
+               
+               sequence.add(new DERTaggedObject( 4, 
HostAddressesEncoder.encode( message.getSenderAddress() ) ) );
+               
+               if ( message.getRecipientAddress() != null )
+               {
+                       sequence.add(new DERTaggedObject( 5, 
HostAddressesEncoder.encode( message.getRecipientAddress() ) ) );
+               }
                
                return sequence;
        }

Modified: 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncTgsRepPartEncoder.java
URL: 
http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncTgsRepPartEncoder.java?view=diff&r1=151238&r2=151239
==============================================================================
--- 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncTgsRepPartEncoder.java
 (original)
+++ 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncTgsRepPartEncoder.java
 Thu Feb  3 13:57:13 2005
@@ -17,15 +17,17 @@
 
 package org.apache.kerberos.io.encoder;
 
-public class EncTgsRepPartEncoder extends EncKdcRepPartEncoder {
-       
-       /*
+
+public class EncTgsRepPartEncoder extends EncKdcRepPartEncoder
+{
+       /**
         * EncTGSRepPart ::=   [APPLICATION 26] EncKDCRepPart
         */
        public static final int APPLICATION_CODE = 26;
        
-       public EncTgsRepPartEncoder() {
-               super(APPLICATION_CODE);
+       public EncTgsRepPartEncoder()
+       {
+               super( APPLICATION_CODE );
        }
 }
 

Modified: 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncTicketPartEncoder.java
URL: 
http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncTicketPartEncoder.java?view=diff&r1=151238&r2=151239
==============================================================================
--- 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncTicketPartEncoder.java
 (original)
+++ 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncTicketPartEncoder.java
 Thu Feb  3 13:57:13 2005
@@ -22,63 +22,81 @@
 
 import org.apache.asn1.der.ASN1OutputStream;
 import org.apache.asn1.der.DERApplicationSpecific;
+import org.apache.asn1.der.DERBitString;
+import org.apache.asn1.der.DERGeneralString;
 import org.apache.asn1.der.DERSequence;
 import org.apache.asn1.der.DERTaggedObject;
 import org.apache.kerberos.messages.components.EncTicketPart;
 
-public class EncTicketPartEncoder extends KerberosMessageEncoder {
-       
-       public static final int APPLICATION_CODE = 3;
+
+public class EncTicketPartEncoder
+{
+       private static final int APPLICATION_CODE = 3;
        
-       public byte[] encode(EncTicketPart ticketPart) throws IOException {
+       public byte[] encode( EncTicketPart ticketPart ) throws IOException
+       {
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
-               ASN1OutputStream aos = new ASN1OutputStream(baos);
+               ASN1OutputStream aos = new ASN1OutputStream( baos );
                
-               DERSequence ticketSequence = encodeInitialSequence(ticketPart);
-               aos.writeObject( 
DERApplicationSpecific.valueOf(APPLICATION_CODE, ticketSequence));
+               DERSequence ticketSequence = encodeInitialSequence( ticketPart 
);
+               aos.writeObject( DERApplicationSpecific.valueOf( 
APPLICATION_CODE, ticketSequence ) );
                aos.close();
                
                return baos.toByteArray();
        }
        
-       /*
-       -- Encrypted part of ticket
-       EncTicketPart ::=     [APPLICATION 3] SEQUENCE {
-                             flags[0]             TicketFlags,
-                             key[1]               EncryptionKey,
-                             crealm[2]            Realm,
-                             cname[3]             PrincipalName,
-                             transited[4]         TransitedEncoding,
-                             authtime[5]          KerberosTime,
-                             starttime[6]         KerberosTime OPTIONAL,
-                             endtime[7]           KerberosTime,
-                             renew-till[8]        KerberosTime OPTIONAL,
-                             caddr[9]             HostAddresses OPTIONAL,
-                             authorization-data[10]   AuthorizationData 
OPTIONAL
-       }*/
-       public DERSequence encodeInitialSequence(EncTicketPart ticketPart) {
+       /**
+        * -- Encrypted part of ticket
+        * EncTicketPart ::=     [APPLICATION 3] SEQUENCE {
+        *                       flags[0]             TicketFlags,
+        *                       key[1]               EncryptionKey,
+        *                       crealm[2]            Realm,
+        *                       cname[3]             PrincipalName,
+        *                       transited[4]         TransitedEncoding,
+        *                       authtime[5]          KerberosTime,
+        *                       starttime[6]         KerberosTime OPTIONAL,
+        *                       endtime[7]           KerberosTime,
+        *                       renew-till[8]        KerberosTime OPTIONAL,
+        *                       caddr[9]             HostAddresses OPTIONAL,
+        *                       authorization-data[10]   AuthorizationData 
OPTIONAL
+        * }
+        */
+       public DERSequence encodeInitialSequence( EncTicketPart ticketPart )
+       {
                DERSequence sequence = new DERSequence();
                
-               sequence.add(new DERTaggedObject(0, 
encodeTicketFlags(ticketPart.getFlags())));
-               sequence.add(new DERTaggedObject(1, 
encodeEncryptionKey(ticketPart.getSessionKey())));
-               sequence.add(new DERTaggedObject(2, 
encodeRealm(ticketPart.getClientRealm())));
-               sequence.add(new DERTaggedObject(3, 
encodePrincipalName(ticketPart.getClientPrincipal())));
-               sequence.add(new DERTaggedObject(4, 
encodeTransitedEncoding(ticketPart.getTransitedEncoding())));
-               sequence.add(new DERTaggedObject(5, 
encodeKerberosTime(ticketPart.getAuthTime())));
+               sequence.add( new DERTaggedObject( 0, new DERBitString( 
ticketPart.getFlags().getBytes() ) ) );
+               sequence.add( new DERTaggedObject( 1, 
EncryptionKeyEncoder.encode( ticketPart.getSessionKey() ) ) );
+               sequence.add( new DERTaggedObject( 2, DERGeneralString.valueOf( 
ticketPart.getClientRealm().toString() ) ) );
+               sequence.add( new DERTaggedObject( 3, 
PrincipalNameEncoder.encode( ticketPart.getClientPrincipal() ) ) );
+               sequence.add( new DERTaggedObject( 4, 
TransitedEncodingEncoder.encode( ticketPart.getTransitedEncoding() ) ) );
+               sequence.add( new DERTaggedObject( 5, 
KerberosTimeEncoder.encode( ticketPart.getAuthTime() ) ) );
+               
+               // OPTIONAL
+               if ( ticketPart.getStartTime() != null )
+               {
+                       sequence.add( new DERTaggedObject( 6, 
KerberosTimeEncoder.encode( ticketPart.getStartTime() ) ) );
+               }
+               
+               sequence.add( new DERTaggedObject( 7, 
KerberosTimeEncoder.encode( ticketPart.getEndTime() ) ) );
                
                // OPTIONAL
-               if (ticketPart.getStartTime() != null)
-                       sequence.add(new DERTaggedObject(6, 
encodeKerberosTime(ticketPart.getStartTime())));
+               if ( ticketPart.getRenewTill() != null )
+               {
+                       sequence.add( new DERTaggedObject( 8, 
KerberosTimeEncoder.encode( ticketPart.getRenewTill() ) ) );
+               }
                
-               sequence.add(new DERTaggedObject(7, 
encodeKerberosTime(ticketPart.getEndTime())));
+               // OPTIONAL
+               if ( ticketPart.getClientAddresses() != null )
+               {
+                       sequence.add( new DERTaggedObject( 9, 
HostAddressesEncoder.encodeSequence( ticketPart.getClientAddresses() ) ) );
+               }
                
                // OPTIONAL
-               if (ticketPart.getRenewTill() != null)
-                       sequence.add(new DERTaggedObject(8, 
encodeKerberosTime(ticketPart.getRenewTill())));
-               if (ticketPart.getClientAddresses() != null)
-                       sequence.add(new DERTaggedObject(9, 
encodeHostAddresses(ticketPart.getClientAddresses())));
-               if (ticketPart.getAuthorizationData() != null)
-                       sequence.add(new DERTaggedObject(10, 
encodeAuthorizationData(ticketPart.getAuthorizationData())));
+               if ( ticketPart.getAuthorizationData() != null )
+               {
+                       sequence.add( new DERTaggedObject( 10, 
AuthorizationDataEncoder.encode( ticketPart.getAuthorizationData() ) ) );
+               }
                
                return sequence;
        }

Modified: 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncryptedDataEncoder.java
URL: 
http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncryptedDataEncoder.java?view=diff&r1=151238&r2=151239
==============================================================================
--- 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncryptedDataEncoder.java
 (original)
+++ 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncryptedDataEncoder.java
 Thu Feb  3 13:57:13 2005
@@ -30,12 +30,12 @@
 
 public class EncryptedDataEncoder
 {
-       public byte[] encode( EncryptedData encryptedData ) throws IOException
+       public static byte[] encode( EncryptedData encryptedData ) throws 
IOException
        {
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                ASN1OutputStream aos = new ASN1OutputStream( baos );
                
-               aos.writeObject( encodeEncryptedData( encryptedData ) );
+               aos.writeObject( encodeSequence( encryptedData ) );
                aos.close();
 
                return baos.toByteArray();
@@ -48,7 +48,7 @@
         *             cipher[2]    OCTET STRING -- ciphertext
         * }
         */
-       protected DERSequence encodeEncryptedData( EncryptedData encryptedData )
+       public static DERSequence encodeSequence( EncryptedData encryptedData )
        {
                DERSequence sequence = new DERSequence();
                

Modified: 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncryptedTimestampEncoder.java
URL: 
http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncryptedTimestampEncoder.java?view=diff&r1=151238&r2=151239
==============================================================================
--- 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncryptedTimestampEncoder.java
 (original)
+++ 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncryptedTimestampEncoder.java
 Thu Feb  3 13:57:13 2005
@@ -27,7 +27,7 @@
 import org.apache.kerberos.messages.value.EncryptedTimeStamp;
 
 
-public class EncryptedTimestampEncoder extends KerberosMessageEncoder
+public class EncryptedTimestampEncoder
 {
        public byte[] encode( EncryptedTimeStamp encryptedTimestamp ) throws 
IOException
        {
@@ -50,7 +50,7 @@
        {
                DERSequence sequence = new DERSequence();
                
-               sequence.add( new DERTaggedObject( 0, encodeKerberosTime( 
encryptedTimestamp.getTimeStamp() ) ) );
+               sequence.add( new DERTaggedObject( 0, 
KerberosTimeEncoder.encode( encryptedTimestamp.getTimeStamp() ) ) );
                
                if ( encryptedTimestamp.getMicroSeconds() > 0)
                {

Added: 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncryptionKeyEncoder.java
URL: 
http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncryptionKeyEncoder.java?view=auto&rev=151239
==============================================================================
--- 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncryptionKeyEncoder.java
 (added)
+++ 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncryptionKeyEncoder.java
 Thu Feb  3 13:57:13 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.kerberos.io.encoder;
+
+import org.apache.asn1.der.DERInteger;
+import org.apache.asn1.der.DEROctetString;
+import org.apache.asn1.der.DERSequence;
+import org.apache.asn1.der.DERTaggedObject;
+import org.apache.kerberos.messages.value.EncryptionKey;
+
+
+public class EncryptionKeyEncoder
+{
+       protected static DERSequence encode( EncryptionKey key )
+       {
+               DERSequence vector = new DERSequence();
+               
+               vector.add( new DERTaggedObject( 0, DERInteger.valueOf( 
key.getKeyType().getOrdinal() ) ) );
+               vector.add( new DERTaggedObject( 1, new DEROctetString( 
key.getKeyValue() ) ) );
+               
+               return vector;
+       }
+}
+

Added: 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncryptionTypeEncoder.java
URL: 
http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncryptionTypeEncoder.java?view=auto&rev=151239
==============================================================================
--- 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncryptionTypeEncoder.java
 (added)
+++ 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/EncryptionTypeEncoder.java
 Thu Feb  3 13:57:13 2005
@@ -0,0 +1,43 @@
+/*
+ *   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.kerberos.io.encoder;
+
+import org.apache.asn1.der.DERInteger;
+import org.apache.asn1.der.DERSequence;
+import org.apache.kerberos.crypto.encryption.EncryptionType;
+
+
+public class EncryptionTypeEncoder
+{
+       /**
+     * etype[8]             SEQUENCE OF INTEGER, -- EncryptionEngine,
+     *             -- in preference order
+     */
+       protected static DERSequence encode( EncryptionType[] eType )
+       {
+               DERSequence sequence = new DERSequence();
+               
+               for ( int ii = 0; ii < eType.length; ii++ )
+               {
+                       sequence.add( DERInteger.valueOf( 
eType[ii].getOrdinal() ) );
+               }
+               
+               return sequence;
+       }
+}
+

Modified: 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/ErrorMessageEncoder.java
URL: 
http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/ErrorMessageEncoder.java?view=diff&r1=151238&r2=151239
==============================================================================
--- 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/ErrorMessageEncoder.java
 (original)
+++ 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/ErrorMessageEncoder.java
 Thu Feb  3 13:57:13 2005
@@ -31,7 +31,7 @@
 import org.apache.kerberos.messages.ErrorMessage;
 
 
-public class ErrorMessageEncoder extends KerberosMessageEncoder
+public class ErrorMessageEncoder
 {
        public void encode( ErrorMessage message, ByteBuffer out ) throws 
IOException
        {
@@ -43,42 +43,66 @@
                aos.close();
        }
        
-       public byte[] encode(ErrorMessage message) throws IOException
+       public byte[] encode( ErrorMessage message ) throws IOException
        {
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
-               ASN1OutputStream aos = new ASN1OutputStream(baos);
+               ASN1OutputStream aos = new ASN1OutputStream( baos );
                
-               DERSequence errorReply = encodeErrorMessageSequence(message);
-               aos.writeObject( 
DERApplicationSpecific.valueOf(message.getMessageType().getOrdinal(), 
errorReply));
+               DERSequence errorReply = encodeErrorMessageSequence( message );
+               aos.writeObject( DERApplicationSpecific.valueOf( 
message.getMessageType().getOrdinal(), errorReply ) );
                
                aos.close();
                
                return baos.toByteArray();
        }
        
-       private DERSequence encodeErrorMessageSequence(ErrorMessage message)
+       private DERSequence encodeErrorMessageSequence( ErrorMessage message )
        {
                DERSequence sequence = new DERSequence();
                
-               sequence.add(new DERTaggedObject(0, 
DERInteger.valueOf(message.getProtocolVersionNumber())));
-               sequence.add(new DERTaggedObject(1, 
DERInteger.valueOf(message.getMessageType().getOrdinal())));
-               if (message.getClientTime() != null)
-                       sequence.add(new DERTaggedObject(2, 
encodeKerberosTime(message.getClientTime())));
-               if (message.getClientMicroSecond() != null)
-                       sequence.add(new DERTaggedObject(3, 
DERInteger.valueOf(message.getClientMicroSecond().intValue())));
-               sequence.add(new DERTaggedObject(4, 
encodeKerberosTime(message.getServerTime())));
-               sequence.add(new DERTaggedObject(5, 
DERInteger.valueOf(message.getServerMicroSecond())));
-               sequence.add(new DERTaggedObject(6, 
DERInteger.valueOf(message.getErrorCode())));
-               if (message.getClientPrincipal() != null)
-                       sequence.add(new DERTaggedObject(7, 
encodeRealm(message.getClientPrincipal().getRealm())));
-               if (message.getClientPrincipal() != null)
-                       sequence.add(new DERTaggedObject(8, 
encodePrincipalName(message.getClientPrincipal())));
-               sequence.add(new DERTaggedObject(9, 
encodeRealm(message.getServerPrincipal().getRealm())));
-               sequence.add(new DERTaggedObject(10, 
encodePrincipalName(message.getServerPrincipal())));
-               if (message.getExplanatoryText() != null)
-                       sequence.add(new DERTaggedObject(11, 
DERGeneralString.valueOf(message.getExplanatoryText())));
-               if (message.getExplanatoryData() != null)
-                       sequence.add(new DERTaggedObject(12, new 
DEROctetString(message.getExplanatoryData())));
+               sequence.add( new DERTaggedObject( 0, DERInteger.valueOf( 
message.getProtocolVersionNumber() ) ) );
+               
+               sequence.add( new DERTaggedObject( 1, DERInteger.valueOf( 
message.getMessageType().getOrdinal() ) ));
+               
+               if ( message.getClientTime() != null )
+               {
+                       sequence.add( new DERTaggedObject( 2, 
KerberosTimeEncoder.encode( message.getClientTime() ) ) );
+               }
+               
+               if ( message.getClientMicroSecond() != null )
+               {
+                       sequence.add(new DERTaggedObject( 3, 
DERInteger.valueOf( message.getClientMicroSecond().intValue() ) ) );
+               }
+               
+               sequence.add( new DERTaggedObject( 4, 
KerberosTimeEncoder.encode( message.getServerTime() ) ) );
+               
+               sequence.add( new DERTaggedObject( 5, DERInteger.valueOf( 
message.getServerMicroSecond() ) ) );
+               
+               sequence.add( new DERTaggedObject( 6, DERInteger.valueOf( 
message.getErrorCode() ) ) );
+               
+               if ( message.getClientPrincipal() != null )
+               {
+                       sequence.add( new DERTaggedObject( 7, 
DERGeneralString.valueOf( message.getClientPrincipal().getRealm().toString() ) 
) );
+               }
+               
+               if ( message.getClientPrincipal() != null )
+               {
+                       sequence.add( new DERTaggedObject( 8, 
PrincipalNameEncoder.encode( message.getClientPrincipal() ) ) );
+               }
+               
+               sequence.add( new DERTaggedObject( 9, DERGeneralString.valueOf( 
message.getServerPrincipal().getRealm() ) ) );
+               
+               sequence.add( new DERTaggedObject( 10, 
PrincipalNameEncoder.encode( message.getServerPrincipal() ) ) );
+               
+               if ( message.getExplanatoryText() != null )
+               {
+                       sequence.add( new DERTaggedObject( 11, 
DERGeneralString.valueOf( message.getExplanatoryText() ) ) );
+               }
+               
+               if ( message.getExplanatoryData() != null )
+               {
+                       sequence.add( new DERTaggedObject( 12, new 
DEROctetString( message.getExplanatoryData() ) ) );
+               }
                
                return sequence;
        }

Added: 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/HostAddressesEncoder.java
URL: 
http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/HostAddressesEncoder.java?view=auto&rev=151239
==============================================================================
--- 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/HostAddressesEncoder.java
 (added)
+++ 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/HostAddressesEncoder.java
 Thu Feb  3 13:57:13 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.kerberos.io.encoder;
+
+import org.apache.asn1.der.DERInteger;
+import org.apache.asn1.der.DEROctetString;
+import org.apache.asn1.der.DERSequence;
+import org.apache.asn1.der.DERTaggedObject;
+import org.apache.kerberos.messages.value.HostAddress;
+import org.apache.kerberos.messages.value.HostAddresses;
+
+
+public class HostAddressesEncoder
+{
+       /**
+        * HostAddresses ::=   SEQUENCE OF SEQUENCE {
+        *                     addr-type[0]             INTEGER,
+        *                     address[1]               OCTET STRING
+        * }
+        */
+       protected static DERSequence encodeSequence( HostAddresses hosts )
+       {
+               HostAddress[] addresses = hosts.getAddresses();
+               DERSequence vector = new DERSequence();
+               
+               for ( int ii = 0; ii < addresses.length; ii++ )
+               {
+                       vector.add( encode( addresses[ii] ) );
+               }
+               
+               return vector;
+       }
+       
+       /**
+        *  HostAddress ::=     SEQUENCE  {
+     *                     addr-type[0]             INTEGER,
+     *                     address[1]               OCTET STRING
+     * }
+     */
+       protected static DERSequence encode( HostAddress host )
+       {
+               DERSequence sequence = new DERSequence();
+               
+               sequence.add( new DERTaggedObject( 0, DERInteger.valueOf( 
host.getAddressType().getOrdinal() ) ) );
+               sequence.add( new DERTaggedObject( 1, new DEROctetString( 
host.getAddress() ) ) );
+               
+               return sequence;
+       }
+}
+

Modified: 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/KdcReplyEncoder.java
URL: 
http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/KdcReplyEncoder.java?view=diff&r1=151238&r2=151239
==============================================================================
--- 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/KdcReplyEncoder.java
 (original)
+++ 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/KdcReplyEncoder.java
 Thu Feb  3 13:57:13 2005
@@ -22,6 +22,7 @@
 
 import org.apache.asn1.der.ASN1OutputStream;
 import org.apache.asn1.der.DERApplicationSpecific;
+import org.apache.asn1.der.DERGeneralString;
 import org.apache.asn1.der.DERInteger;
 import org.apache.asn1.der.DEROctetString;
 import org.apache.asn1.der.DERSequence;
@@ -30,7 +31,7 @@
 import org.apache.kerberos.messages.value.PreAuthenticationData;
 
 
-public class KdcReplyEncoder extends KerberosMessageEncoder
+public class KdcReplyEncoder
 {
        /*
        AS-REP ::=    [APPLICATION 11] KDC-REP
@@ -56,18 +57,26 @@
                      ticket[5]                  Ticket,
                      enc-part[6]                EncryptedData
        }*/
-       private DERSequence encodeKdcReplySequence(KdcReply app)
+       private DERSequence encodeKdcReplySequence( KdcReply app )
        {
                DERSequence sequence = new DERSequence();
                
-               sequence.add(new DERTaggedObject(0, 
DERInteger.valueOf(app.getProtocolVersionNumber())));
-               sequence.add(new DERTaggedObject(1, 
DERInteger.valueOf(app.getMessageType().getOrdinal())));
-               if (app.getPaData() != null)
-                       sequence.add(new DERTaggedObject(2, 
encodePaData(app.getPaData())));
-               sequence.add(new DERTaggedObject(3, 
encodeRealm(app.getClientRealm())));
-               sequence.add(new DERTaggedObject(4, 
encodePrincipalName(app.getClientPrincipal())));
-               sequence.add(new DERTaggedObject(5, 
encodeTicket(app.getTicket())));
-               sequence.add(new DERTaggedObject(6, 
encodeEncryptedData(app.getEncPart())));
+               sequence.add( new DERTaggedObject( 0, DERInteger.valueOf( 
app.getProtocolVersionNumber() ) ) );
+               
+               sequence.add( new DERTaggedObject( 1, DERInteger.valueOf( 
app.getMessageType().getOrdinal() ) ) );
+               
+               if ( app.getPaData() != null )
+               {
+                       sequence.add( new DERTaggedObject( 2, 
encodePreAuthData( app.getPaData() ) ) );
+               }
+               
+               sequence.add( new DERTaggedObject(3, DERGeneralString.valueOf( 
app.getClientRealm().toString() ) ) );
+               
+               sequence.add( new DERTaggedObject(4, 
PrincipalNameEncoder.encode( app.getClientPrincipal() ) ) );
+               
+               sequence.add( new DERTaggedObject(5, TicketEncoder.encode( 
app.getTicket() ) ) );
+               
+               sequence.add( new DERTaggedObject(6, 
EncryptedDataEncoder.encodeSequence( app.getEncPart() ) ) );
                
                return sequence;
        }
@@ -78,20 +87,20 @@
                   padata-value[2]       OCTET STRING,
                                 -- might be encoded AP-REQ
        }*/
-       private DERSequence encodePaData(PreAuthenticationData[] paData)
+       private DERSequence encodePreAuthData( PreAuthenticationData[] 
preAuthData )
        {
-               DERSequence pa = new DERSequence();
+               DERSequence preAuth = new DERSequence();
                
-               for (int i = 0; i < paData.length; i++)
+               for ( int ii = 0; ii < preAuthData.length; ii++ )
                {
                        DERSequence sequence = new DERSequence();
 
-                       sequence.add(new DERTaggedObject(1, 
DERInteger.valueOf(paData[i].getDataType().getOrdinal())));
-                       sequence.add(new DERTaggedObject(2, new 
DEROctetString(paData[i].getDataValue())));
-                       pa.add( sequence );
+                       sequence.add( new DERTaggedObject( 1, 
DERInteger.valueOf( preAuthData[ii].getDataType().getOrdinal() ) ) );
+                       sequence.add( new DERTaggedObject( 2, new 
DEROctetString( preAuthData[ii].getDataValue() ) ) );
+                       preAuth.add( sequence );
                }
                
-               return pa;
+               return preAuth;
        }
 }
 

Modified: 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/KdcReqBodyEncoder.java
URL: 
http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/KdcReqBodyEncoder.java?view=diff&r1=151238&r2=151239
==============================================================================
--- 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/KdcReqBodyEncoder.java
 (original)
+++ 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/KdcReqBodyEncoder.java
 Thu Feb  3 13:57:13 2005
@@ -21,74 +21,104 @@
 import java.io.IOException;
 
 import org.apache.asn1.der.ASN1OutputStream;
+import org.apache.asn1.der.DERBitString;
+import org.apache.asn1.der.DERGeneralString;
 import org.apache.asn1.der.DERInteger;
 import org.apache.asn1.der.DERSequence;
 import org.apache.asn1.der.DERTaggedObject;
 import org.apache.kerberos.messages.KdcRequest;
 
-public class KdcReqBodyEncoder extends KerberosMessageEncoder {
 
-       public byte[] encode(KdcRequest request) throws IOException {
+public class KdcReqBodyEncoder
+{
+       public byte[] encode( KdcRequest request ) throws IOException
+       {
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
-               ASN1OutputStream aos = new ASN1OutputStream(baos);
+               ASN1OutputStream aos = new ASN1OutputStream( baos );
                
-               aos.writeObject(encodeInitialSequence(request));
-               aos.flush();
+               aos.writeObject( encodeInitialSequence( request ) );
                aos.close();
 
                return baos.toByteArray();
        }
        
-       /*
-       KDC-REQ-BODY ::=   SEQUENCE {
-        kdc-options[0]       KDCOptions,
-        cname[1]             PrincipalName OPTIONAL,
-                     -- Used only in AS-REQ
-        realm[2]             Realm, -- Server's realm
-                     -- Also client's in AS-REQ
-        sname[3]             PrincipalName OPTIONAL,
-        from[4]              KerberosTime OPTIONAL,
-        till[5]              KerberosTime,
-        rtime[6]             KerberosTime OPTIONAL,
-        nonce[7]             INTEGER,
-
-        etype[8]             SEQUENCE OF INTEGER, -- EncryptionEngine,
-                     -- in preference order
-        addresses[9]         HostAddresses OPTIONAL,
-        enc-authorization-data[10]   EncryptedData OPTIONAL,
-                     -- Encrypted AuthorizationData encoding
-        additional-tickets[11]       SEQUENCE OF Ticket OPTIONAL
-    }*/
-       private DERSequence encodeInitialSequence(KdcRequest request) {
+       /**
+        * KDC-REQ-BODY ::=   SEQUENCE {
+     *     kdc-options[0]       KDCOptions,
+     *     cname[1]             PrincipalName OPTIONAL,
+     *                  -- Used only in AS-REQ
+     *     realm[2]             Realm, -- Server's realm
+     *                  -- Also client's in AS-REQ
+     *     sname[3]             PrincipalName OPTIONAL,
+     *     from[4]              KerberosTime OPTIONAL,
+     *     till[5]              KerberosTime,
+     *     rtime[6]             KerberosTime OPTIONAL,
+     *     nonce[7]             INTEGER,
+     * 
+     *     etype[8]             SEQUENCE OF INTEGER, -- EncryptionEngine,
+     *                  -- in preference order
+     *     addresses[9]         HostAddresses OPTIONAL,
+     *     enc-authorization-data[10]   EncryptedData OPTIONAL,
+     *                  -- Encrypted AuthorizationData encoding
+     *     additional-tickets[11]       SEQUENCE OF Ticket OPTIONAL
+     * }
+     */
+       private DERSequence encodeInitialSequence( KdcRequest request )
+       {
                DERSequence sequence = new DERSequence();
                
-               sequence.add(new DERTaggedObject(0, 
encodeKdcOptions(request.getKdcOptions())));
+               sequence.add( new DERTaggedObject( 0, new DERBitString( 
request.getKdcOptions().getBytes() ) ) );
+               
                // OPTIONAL
-               if (request.getClientPrincipal() != null)
-                       sequence.add(new DERTaggedObject(1, 
encodePrincipalName(request.getClientPrincipal())));
-               sequence.add(new DERTaggedObject(2, 
encodeRealm(request.getRealm())));
+               if ( request.getClientPrincipal() != null )
+               {
+                       sequence.add( new DERTaggedObject( 1, 
PrincipalNameEncoder.encode( request.getClientPrincipal() ) ) );
+               }
+               
+               sequence.add( new DERTaggedObject( 2, DERGeneralString.valueOf( 
request.getRealm().toString() ) ) );
+               
                // OPTIONAL
-               if (request.getServerPrincipal() != null)
-                       sequence.add(new DERTaggedObject(3, 
encodePrincipalName(request.getServerPrincipal())));
+               if ( request.getServerPrincipal() != null )
+               {
+                       sequence.add( new DERTaggedObject( 3, 
PrincipalNameEncoder.encode( request.getServerPrincipal() ) ) );
+               }
+               
                // OPTIONAL
                if (request.getFrom() != null)
-                       sequence.add(new DERTaggedObject(4, 
encodeKerberosTime(request.getFrom())));
-               sequence.add(new DERTaggedObject(5, 
encodeKerberosTime(request.getTill())));
+               {
+                       sequence.add(new DERTaggedObject(4, 
KerberosTimeEncoder.encode(request.getFrom())));
+               }
+               
+               sequence.add( new DERTaggedObject( 5, 
KerberosTimeEncoder.encode( request.getTill() ) ) );
+               
                // OPTIONAL
-               if (request.getRtime() != null)
-                       sequence.add(new DERTaggedObject(6, 
encodeKerberosTime(request.getRtime())));
-               sequence.add(new DERTaggedObject(7, 
DERInteger.valueOf(request.getNonce())));
-               sequence.add(new DERTaggedObject(8, 
encodeEncryptionType(request.getEType())));
+               if ( request.getRtime() != null )
+               {
+                       sequence.add( new DERTaggedObject( 6, 
KerberosTimeEncoder.encode( request.getRtime() ) ) );
+               }
+               
+               sequence.add( new DERTaggedObject( 7, DERInteger.valueOf( 
request.getNonce() ) ) );
+               
+               sequence.add( new DERTaggedObject( 8, 
EncryptionTypeEncoder.encode( request.getEType() ) ) );
+               
                // OPTIONAL
-               if (request.getAddresses() != null)
-                       sequence.add(new DERTaggedObject(9, 
encodeHostAddresses(request.getAddresses())));
+               if ( request.getAddresses() != null )
+               {
+                       sequence.add( new DERTaggedObject( 9, 
HostAddressesEncoder.encodeSequence( request.getAddresses() ) ) );
+               }
+               
                // OPTIONAL
-               if (request.getEncAuthorizationData() != null)
-                       sequence.add(new DERTaggedObject(10, 
encodeEncryptedData(request.getEncAuthorizationData())));
+               if ( request.getEncAuthorizationData() != null )
+               {
+                       sequence.add( new DERTaggedObject( 10, 
EncryptedDataEncoder.encodeSequence( request.getEncAuthorizationData() ) ) );
+               }
+               
                // OPTIONAL
-               if (request.getAdditionalTickets() != null)
-                       sequence.add(new DERTaggedObject(11, 
encodeAdditionalTickets(request.getAdditionalTickets())));
-
+               if ( request.getAdditionalTickets() != null )
+               {
+                       sequence.add( new DERTaggedObject( 11, 
TicketEncoder.encodeSequence( request.getAdditionalTickets() ) ) );
+               }
+               
                return sequence;
        }
 }

Added: 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/KerberosTimeEncoder.java
URL: 
http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/KerberosTimeEncoder.java?view=auto&rev=151239
==============================================================================
--- 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/KerberosTimeEncoder.java
 (added)
+++ 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/KerberosTimeEncoder.java
 Thu Feb  3 13:57:13 2005
@@ -0,0 +1,35 @@
+/*
+ *   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.kerberos.io.encoder;
+
+import org.apache.asn1.der.DERGeneralizedTime;
+import org.apache.kerberos.messages.value.KerberosTime;
+
+
+public class KerberosTimeEncoder
+{
+       /**
+        * KerberosTime ::=   GeneralizedTime
+        *             -- Specifying UTC time zone (Z)
+        */
+    protected static DERGeneralizedTime encode( KerberosTime time )
+    {
+       return DERGeneralizedTime.valueOf( time.toDate() );
+    }
+}
+

Added: 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/LastRequestEncoder.java
URL: 
http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/LastRequestEncoder.java?view=auto&rev=151239
==============================================================================
--- 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/LastRequestEncoder.java
 (added)
+++ 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/LastRequestEncoder.java
 Thu Feb  3 13:57:13 2005
@@ -0,0 +1,52 @@
+/*
+ *   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.kerberos.io.encoder;
+
+import org.apache.asn1.der.DERGeneralizedTime;
+import org.apache.asn1.der.DERInteger;
+import org.apache.asn1.der.DERSequence;
+import org.apache.asn1.der.DERTaggedObject;
+import org.apache.kerberos.messages.value.LastRequest;
+import org.apache.kerberos.messages.value.LastRequestEntry;
+
+
+public class LastRequestEncoder
+{
+       /**
+        * LastReq ::=   SEQUENCE OF SEQUENCE {
+        * lr-type[0]               INTEGER,
+        * lr-value[1]              KerberosTime
+        * }
+        */
+       protected static DERSequence encode( LastRequest lastReq )
+       {
+               LastRequestEntry[] entries = lastReq.getEntries();
+               DERSequence outerSequence = new DERSequence();
+               
+               for ( int ii = 0; ii < entries.length; ii++ )
+               {
+                       DERSequence sequence = new DERSequence();
+                       sequence.add( new DERTaggedObject( 0, 
DERInteger.valueOf( entries[ii].getLastRequestType().getOrdinal() ) ) );
+                       sequence.add( new DERTaggedObject( 1, 
DERGeneralizedTime.valueOf( entries[ii].getLastRequestValue().toDate() ) ) );
+                       outerSequence.add( sequence );
+               }
+               
+               return outerSequence;
+       }
+}
+

Modified: 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/PreAuthenticationDataEncoder.java
URL: 
http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/PreAuthenticationDataEncoder.java?view=diff&r1=151238&r2=151239
==============================================================================
--- 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/PreAuthenticationDataEncoder.java
 (original)
+++ 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/PreAuthenticationDataEncoder.java
 Thu Feb  3 13:57:13 2005
@@ -28,7 +28,7 @@
 import org.apache.kerberos.messages.value.PreAuthenticationData;
 
 
-public class PreAuthenticationDataEncoder extends KerberosMessageEncoder
+public class PreAuthenticationDataEncoder
 {
        public byte[] encode( PreAuthenticationData preAuth ) throws IOException
        {

Added: 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/PrincipalNameEncoder.java
URL: 
http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/PrincipalNameEncoder.java?view=auto&rev=151239
==============================================================================
--- 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/PrincipalNameEncoder.java
 (added)
+++ 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/PrincipalNameEncoder.java
 Thu Feb  3 13:57:13 2005
@@ -0,0 +1,74 @@
+/*
+ *   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.kerberos.io.encoder;
+
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.security.auth.kerberos.KerberosPrincipal;
+
+import org.apache.asn1.der.DERGeneralString;
+import org.apache.asn1.der.DERInteger;
+import org.apache.asn1.der.DERSequence;
+import org.apache.asn1.der.DERTaggedObject;
+
+
+public class PrincipalNameEncoder
+{
+       private static final String COMPONENT_SEPARATOR = "/";
+       private static final String REALM_SEPARATOR     = "@";
+       
+       /**
+        * PrincipalName ::=   SEQUENCE {
+        *               name-type[0]     INTEGER,
+        *               name-string[1]   SEQUENCE OF GeneralString
+        * }
+        */
+       protected static DERSequence encode( KerberosPrincipal principal )
+       {
+               DERSequence vector = new DERSequence();
+               
+               vector.add( new DERTaggedObject( 0, DERInteger.valueOf( 
principal.getNameType() ) ) );
+               vector.add( new DERTaggedObject( 1, encodeNameSequence( 
principal ) ) );
+               
+               return vector;
+       }
+       
+       private static DERSequence encodeNameSequence( KerberosPrincipal 
principal )
+       {
+               Iterator it = getNameStrings( principal ).iterator();
+               
+               DERSequence vector = new DERSequence();
+               
+               while ( it.hasNext() )
+               {
+                       vector.add( DERGeneralString.valueOf( (String)it.next() 
) );
+               }
+               
+               return vector;
+       }
+       
+       private static List getNameStrings( KerberosPrincipal principal )
+       {
+               String nameComponent = principal.getName().split( 
REALM_SEPARATOR )[0];
+               String[] components = nameComponent.split( COMPONENT_SEPARATOR 
);
+               return Arrays.asList( components );
+       }
+}
+

Modified: 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/PrivateMessageEncoder.java
URL: 
http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/PrivateMessageEncoder.java?view=diff&r1=151238&r2=151239
==============================================================================
--- 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/PrivateMessageEncoder.java
 (original)
+++ 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/PrivateMessageEncoder.java
 Thu Feb  3 13:57:13 2005
@@ -27,26 +27,28 @@
 import org.apache.asn1.der.DERTaggedObject;
 import org.apache.kerberos.messages.application.PrivateMessage;
 
-public class PrivateMessageEncoder extends KerberosMessageEncoder {
-       
-       public byte[] encode(PrivateMessage message) throws IOException {
+
+public class PrivateMessageEncoder
+{
+       public byte[] encode( PrivateMessage message ) throws IOException
+       {
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
-               ASN1OutputStream aos = new ASN1OutputStream(baos);
+               ASN1OutputStream aos = new ASN1OutputStream( baos );
                
-               DERSequence privateMessageSequence = 
encodePrivateMessageSequence(message);
-               aos.writeObject( 
DERApplicationSpecific.valueOf(message.getMessageType().getOrdinal(), 
privateMessageSequence));
+               DERSequence privateMessageSequence = 
encodePrivateMessageSequence( message );
+               aos.writeObject( DERApplicationSpecific.valueOf( 
message.getMessageType().getOrdinal(), privateMessageSequence ) );
                aos.close();
                
                return baos.toByteArray();
        }
        
-       private DERSequence encodePrivateMessageSequence(PrivateMessage 
message) {
-               
+       private DERSequence encodePrivateMessageSequence( PrivateMessage 
message )
+       {
                DERSequence sequence = new DERSequence();
                
-               sequence.add(new DERTaggedObject(0, DERInteger.valueOf( 
message.getProtocolVersionNumber() )));
-               sequence.add(new DERTaggedObject(1, DERInteger.valueOf( 
message.getMessageType().getOrdinal() )));
-               sequence.add(new DERTaggedObject(3, encodeEncryptedData( 
message.getEncryptedPart() )));
+               sequence.add( new DERTaggedObject( 0, DERInteger.valueOf( 
message.getProtocolVersionNumber() ) ) );
+               sequence.add( new DERTaggedObject( 1, DERInteger.valueOf( 
message.getMessageType().getOrdinal() ) ) );
+               sequence.add( new DERTaggedObject( 3, 
EncryptedDataEncoder.encodeSequence( message.getEncryptedPart() ) ) );
                
                return sequence;
        }

Added: 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/TicketEncoder.java
URL: 
http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/TicketEncoder.java?view=auto&rev=151239
==============================================================================
--- 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/TicketEncoder.java
 (added)
+++ 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/TicketEncoder.java
 Thu Feb  3 13:57:13 2005
@@ -0,0 +1,75 @@
+/*
+ *   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.kerberos.io.encoder;
+
+import org.apache.asn1.der.DERApplicationSpecific;
+import org.apache.asn1.der.DERGeneralString;
+import org.apache.asn1.der.DERInteger;
+import org.apache.asn1.der.DERSequence;
+import org.apache.asn1.der.DERTaggedObject;
+import org.apache.kerberos.messages.components.Ticket;
+
+
+public class TicketEncoder
+{
+       /**
+        * Ticket ::=                    [APPLICATION 1] SEQUENCE {
+     *     tkt-vno[0]                   INTEGER,
+     *     realm[1]                     Realm,
+     *     sname[2]                     PrincipalName,
+     *     enc-part[3]                  EncryptedData
+     * }
+     */
+    protected static DERApplicationSpecific encode( Ticket ticket )
+    {
+               DERSequence vector = new DERSequence();
+               
+               vector.add( new DERTaggedObject( 0, DERInteger.valueOf( 
ticket.getTicketVersionNumber() ) ) );
+               vector.add( new DERTaggedObject( 1, DERGeneralString.valueOf( 
ticket.getRealm() ) ) );
+               vector.add( new DERTaggedObject( 2, 
PrincipalNameEncoder.encode( ticket.getServerPrincipal() ) ) );
+               vector.add( new DERTaggedObject( 3, 
EncryptedDataEncoder.encodeSequence( ticket.getEncPart() ) ) );
+               
+               DERApplicationSpecific ticketSequence = null;
+               
+               try
+               {
+                       ticketSequence = DERApplicationSpecific.valueOf( 1, 
vector );
+               }
+               catch (Exception e)
+               {
+                       e.printStackTrace();
+               }
+               
+               return ticketSequence;
+    }
+    
+       protected static DERSequence encodeSequence( Ticket[] tickets )
+       {
+               DERSequence outerVector = new DERSequence();
+
+               for ( int ii = 0; ii < tickets.length; ii++ )
+               {
+                       DERSequence vector = new DERSequence();
+                       vector.add( encode( tickets[ii] ) );
+                       outerVector.add( vector );
+               }
+               
+               return outerVector;
+       }
+}
+

Added: 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/TransitedEncodingEncoder.java
URL: 
http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/TransitedEncodingEncoder.java?view=auto&rev=151239
==============================================================================
--- 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/TransitedEncodingEncoder.java
 (added)
+++ 
incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/encoder/TransitedEncodingEncoder.java
 Thu Feb  3 13:57:13 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.kerberos.io.encoder;
+
+import org.apache.asn1.der.DERInteger;
+import org.apache.asn1.der.DEROctetString;
+import org.apache.asn1.der.DERSequence;
+import org.apache.asn1.der.DERTaggedObject;
+import org.apache.kerberos.messages.value.TransitedEncoding;
+
+
+public class TransitedEncodingEncoder
+{
+       /**
+        * TransitedEncoding ::=         SEQUENCE {
+     *     tr-type[0]  INTEGER, -- must be registered
+     *     contents[1]          OCTET STRING
+     * }
+     */
+       protected static DERSequence encode( TransitedEncoding te )
+       {
+               
+               DERSequence sequence = new DERSequence();
+               
+               sequence.add( new DERTaggedObject( 0, DERInteger.valueOf( 
te.getType().getOrdinal() ) ) );
+               sequence.add( new DERTaggedObject( 1, new DEROctetString( 
te.getContents() ) ) );
+               
+               return sequence;
+       }
+}
+


Reply via email to