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/02/03 06:55:49 UTC

svn commit: r151128 - incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder

Author: erodriguez
Date: Wed Feb  2 21:55:46 2005
New Revision: 151128

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

Added:
    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/EncryptionKeyDecoder.java
    incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/EncryptionTypeDecoder.java
    incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/HostAddressDecoder.java
    incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/KerberosTimeDecoder.java
    incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/LastRequestDecoder.java
    incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/PrincipalNameDecoder.java
    incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/TicketDecoder.java
Removed:
    incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/KerberosMessageDecoder.java
Modified:
    incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/ApplicationRequestDecoder.java
    incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/AuthenticatorDecoder.java
    incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/AuthorizationDataDecoder.java
    incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/EncKrbPrivPartDecoder.java
    incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/EncTicketPartDecoder.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/decoder/EncryptedTimestampDecoder.java
    incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/KdcRequestDecoder.java
    incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/PrivateMessageDecoder.java

Modified: incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/ApplicationRequestDecoder.java
URL: http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/ApplicationRequestDecoder.java?view=diff&r1=151127&r2=151128
==============================================================================
--- incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/ApplicationRequestDecoder.java (original)
+++ incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/ApplicationRequestDecoder.java Wed Feb  2 21:55:46 2005
@@ -32,7 +32,7 @@
 import org.apache.kerberos.messages.value.ApOptions;
 
 
-public class ApplicationRequestDecoder extends KerberosMessageDecoder
+public class ApplicationRequestDecoder
 {
 	public ApplicationRequest decode( byte[] encodedAuthHeader ) throws IOException
 	{
@@ -80,17 +80,15 @@
 					break;
 				case 3:
 					DERApplicationSpecific tag3 = (DERApplicationSpecific)derObject;
-					authHeader.setTicket( decodeTicket( tag3 ) );
+					authHeader.setTicket( TicketDecoder.decode( tag3 ) );
 					break;
 				case 4:
 					DERSequence tag4 = (DERSequence)derObject;
-					authHeader.setEncPart( decodeEncryptedData( tag4 ) );
+					authHeader.setEncPart( EncryptedDataDecoder.decode( tag4 ) );
 					break;
-			    default:
-			    	System.out.println( derObject );
-			    	break;
 			}
 		}
+		
 		return authHeader;
 	}
 }

Modified: incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/AuthenticatorDecoder.java
URL: http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/AuthenticatorDecoder.java?view=diff&r1=151127&r2=151128
==============================================================================
--- incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/AuthenticatorDecoder.java (original)
+++ incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/AuthenticatorDecoder.java Wed Feb  2 21:55:46 2005
@@ -32,7 +32,7 @@
 import org.apache.kerberos.messages.components.AuthenticatorModifier;
 
 
-public class AuthenticatorDecoder extends KerberosMessageDecoder
+public class AuthenticatorDecoder
 {
 	public Authenticator decode( byte[] encodedAuthenticator ) throws IOException
 	{
@@ -42,7 +42,7 @@
 		
 		DERSequence sequence = (DERSequence) app.getObject();
 		
-		return decodeAuthenticator( sequence );
+		return decode( sequence );
 	}
 	
 	/**
@@ -61,7 +61,7 @@
 	 *                authorization-data[8]         AuthorizationData OPTIONAL
 	 * }
 	 */
-	private Authenticator decodeAuthenticator( DERSequence sequence )
+	protected static Authenticator decode( DERSequence sequence )
 	{
 		AuthenticatorModifier modifier = new AuthenticatorModifier();
 		
@@ -83,11 +83,11 @@
 					break;
 				case 2:
 					DERSequence tag2 = (DERSequence)derObject;
-					modifier.setClientName( decodePrincipalName( tag2 ) );
+					modifier.setClientName( PrincipalNameDecoder.decode( tag2 ) );
 					break;
 				case 3:
 					DERSequence tag3 = (DERSequence)derObject;
-					modifier.setChecksum( decodeChecksum( tag3 ) );
+					modifier.setChecksum( ChecksumDecoder.decode( tag3 ) );
 					break;
 				case 4:
 					DERInteger tag4 = (DERInteger)derObject;
@@ -95,11 +95,11 @@
 					break;
 				case 5:
 					DERGeneralizedTime tag5 = (DERGeneralizedTime)derObject;
-					modifier.setClientTime( decodeKerberosTime( tag5 ) );
+					modifier.setClientTime( KerberosTimeDecoder.decode( tag5 ) );
 					break;
 				case 6:
 					DERSequence tag6 = (DERSequence) derObject;
-					modifier.setSubSessionKey( decodeEncryptionKey( tag6 ) );
+					modifier.setSubSessionKey( EncryptionKeyDecoder.decode( tag6 ) );
 					break;
 				case 7:
 					DERInteger tag7 = (DERInteger)derObject;
@@ -107,11 +107,8 @@
 					break;
 				case 8:
 					DERSequence tag8 = (DERSequence)derObject;
-					modifier.setAuthorizationData( decodeAuthorizationData( tag8 ) );
+					modifier.setAuthorizationData( AuthorizationDataDecoder.decodeSequence( tag8 ) );
 					break;
-			    default:
-			    	System.out.println( derObject );
-			    	break;
 			}
 		}
 		

Modified: incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/AuthorizationDataDecoder.java
URL: http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/AuthorizationDataDecoder.java?view=diff&r1=151127&r2=151128
==============================================================================
--- incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/AuthorizationDataDecoder.java (original)
+++ incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/AuthorizationDataDecoder.java Wed Feb  2 21:55:46 2005
@@ -18,13 +18,20 @@
 package org.apache.kerberos.io.decoder;
 
 import java.io.IOException;
+import java.util.Enumeration;
 
 import org.apache.asn1.der.ASN1InputStream;
+import org.apache.asn1.der.DEREncodable;
+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;
+import org.apache.kerberos.messages.value.AuthorizationType;
 
 
-public class AuthorizationDataDecoder extends KerberosMessageDecoder
+public class AuthorizationDataDecoder
 {
 	public AuthorizationData decode( byte[] encodedAuthData ) throws IOException
 	{
@@ -32,7 +39,54 @@
 
 		DERSequence sequence = (DERSequence) ais.readObject();
 		
-		return decodeAuthorizationData( sequence );
+		return decodeSequence( sequence );
+	}
+	
+	/**
+	 * AuthorizationData ::=   SEQUENCE OF SEQUENCE {
+     *     ad-type[0]               INTEGER,
+     *     ad-data[1]               OCTET STRING
+     * }
+     */
+	protected static AuthorizationData decodeSequence( DERSequence sequence )
+	{
+		AuthorizationData authData = new AuthorizationData();
+		
+		for ( Enumeration e = sequence.getObjects(); e.hasMoreElements(); )
+		{
+			DERSequence object = (DERSequence) e.nextElement();
+			AuthorizationDataEntry entry = decodeAuthorizationEntry( object );
+			authData.add( entry );
+		}
+		
+		return authData;
+	}
+	
+	protected static AuthorizationDataEntry decodeAuthorizationEntry( DERSequence sequence )
+	{
+		AuthorizationType type = AuthorizationType.NULL;
+		byte[] data = null;
+		
+		for ( Enumeration e = sequence.getObjects(); e.hasMoreElements(); )
+		{
+			DERTaggedObject object = (DERTaggedObject) e.nextElement();
+			int tag = object.getTagNo();
+			DEREncodable derObject = object.getObject();
+			
+			switch ( tag )
+			{
+				case 0:
+					DERInteger tag0 = (DERInteger)derObject;
+					type = AuthorizationType.getTypeByOrdinal( tag0.intValue() );
+					break;
+				case 1:
+					DEROctetString tag1 = (DEROctetString)derObject;
+					data = tag1.getOctets();
+					break;
+			}
+		}
+		
+		return new AuthorizationDataEntry( type, data );
 	}
 }
 

Added: 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=auto&rev=151128
==============================================================================
--- incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/ChecksumDecoder.java (added)
+++ incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/ChecksumDecoder.java Wed Feb  2 21:55:46 2005
@@ -0,0 +1,66 @@
+/*
+ *   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.decoder;
+
+import java.util.Enumeration;
+
+import org.apache.asn1.der.DEREncodable;
+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.crypto.checksum.ChecksumType;
+import org.apache.kerberos.messages.value.Checksum;
+
+
+public class ChecksumDecoder
+{
+	/**
+	 * Checksum ::=   SEQUENCE {
+     *          cksumtype[0]   INTEGER,
+     *          checksum[1]    OCTET STRING
+     * }
+	 */
+	protected static Checksum decode( DERSequence sequence )
+	{
+		ChecksumType type = ChecksumType.NULL;
+		byte[] data = null;
+		
+		for ( Enumeration e = sequence.getObjects(); e.hasMoreElements(); )
+		{
+			DERTaggedObject object = (DERTaggedObject) e.nextElement();
+			int tag = object.getTagNo();
+			DEREncodable derObject = object.getObject();
+			
+			switch ( tag )
+			{
+				case 0:
+					DERInteger tag0 = (DERInteger)derObject;
+					type = ChecksumType.getTypeByOrdinal( tag0.intValue() );
+					break;
+				case 1:
+					DEROctetString tag1 = (DEROctetString)derObject;
+					data = tag1.getOctets();
+					break;
+			}
+		}
+		
+		return new Checksum( type, data );
+	}
+}
+

Modified: incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/EncKrbPrivPartDecoder.java
URL: http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/EncKrbPrivPartDecoder.java?view=diff&r1=151127&r2=151128
==============================================================================
--- incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/EncKrbPrivPartDecoder.java (original)
+++ incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/EncKrbPrivPartDecoder.java Wed Feb  2 21:55:46 2005
@@ -32,7 +32,7 @@
 import org.apache.kerberos.messages.components.EncKrbPrivPartModifier;
 
 
-public class EncKrbPrivPartDecoder extends KerberosMessageDecoder
+public class EncKrbPrivPartDecoder
 {
 	public EncKrbPrivPart decode( byte[] encodedPrivatePart ) throws IOException
 	{
@@ -62,7 +62,7 @@
 					break;
 				case 1:
 					DERGeneralizedTime tag1 = (DERGeneralizedTime) derObject;
-					modifier.setTimestamp( decodeKerberosTime( tag1 ) );
+					modifier.setTimestamp( KerberosTimeDecoder.decode( tag1 ) );
 					break;
 				case 2:
 					DERInteger tag2 = (DERInteger)derObject;
@@ -74,15 +74,12 @@
 					break;
 				case 4:
 					DERSequence tag4 = (DERSequence)derObject;
-					modifier.setSenderAddress( decodeHostAddress( tag4 ) );
+					modifier.setSenderAddress( HostAddressDecoder.decode( tag4 ) );
 					break;
 				case 5:
 					DERSequence tag5 = (DERSequence)derObject;
-					modifier.setRecipientAddress( decodeHostAddress( tag5 ) );
+					modifier.setRecipientAddress( HostAddressDecoder.decode( tag5 ) );
 					break;
-			    default:
-			    	System.out.println( derObject );
-			    	break;
 			}
 		}
 		return modifier.getEncKrbPrivPart();

Modified: incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/EncTicketPartDecoder.java
URL: http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/EncTicketPartDecoder.java?view=diff&r1=151127&r2=151128
==============================================================================
--- incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/EncTicketPartDecoder.java (original)
+++ incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/EncTicketPartDecoder.java Wed Feb  2 21:55:46 2005
@@ -26,14 +26,18 @@
 import org.apache.asn1.der.DEREncodable;
 import org.apache.asn1.der.DERGeneralString;
 import org.apache.asn1.der.DERGeneralizedTime;
+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.components.EncTicketPart;
 import org.apache.kerberos.messages.components.EncTicketPartModifier;
 import org.apache.kerberos.messages.value.TicketFlags;
+import org.apache.kerberos.messages.value.TransitedEncoding;
+import org.apache.kerberos.messages.value.TransitedEncodingType;
 
 
-public class EncTicketPartDecoder extends KerberosMessageDecoder
+public class EncTicketPartDecoder
 {
 	public EncTicketPart decode( byte[] encodedTicket ) throws IOException
 	{
@@ -61,23 +65,25 @@
 	                      caddr[9]             HostAddresses OPTIONAL,
 	                      authorization-data[10]   AuthorizationData OPTIONAL
 	}*/
-	private EncTicketPart decodeEncTicketPartSequence( DERSequence sequence ) {
-		
+	private EncTicketPart decodeEncTicketPartSequence( DERSequence sequence )
+	{
 		EncTicketPartModifier modifier = new EncTicketPartModifier();
 		
-		for ( Enumeration e = sequence.getObjects(); e.hasMoreElements(); ) {
+		for ( Enumeration e = sequence.getObjects(); e.hasMoreElements(); )
+		{
 			DERTaggedObject object = (DERTaggedObject) e.nextElement();
 			int tag = object.getTagNo();
 			DEREncodable derObject = object.getObject();
 			
-			switch ( tag ) {
+			switch ( tag )
+			{
 				case 0:
 					DERBitString tag0 = (DERBitString)derObject;
 					modifier.setFlags( new TicketFlags( tag0.getOctets() ) );
 					break;
 				case 1:
 					DERSequence tag1 = (DERSequence) derObject;
-					modifier.setSessionKey( decodeEncryptionKey( tag1 ) );
+					modifier.setSessionKey( EncryptionKeyDecoder.decode( tag1 ) );
 					break;
 				case 2:
 					DERGeneralString tag2 = (DERGeneralString)derObject;
@@ -85,7 +91,7 @@
 					break;
 				case 3:
 					DERSequence tag3 = (DERSequence)derObject;
-					modifier.setClientName( decodePrincipalName( tag3 ) );
+					modifier.setClientName( PrincipalNameDecoder.decode( tag3 ) );
 					break;
 				case 4:
 					DERSequence tag4 = (DERSequence)derObject;
@@ -93,34 +99,62 @@
 					break;
 				case 5:
 					DERGeneralizedTime tag5 = (DERGeneralizedTime)derObject;
-					modifier.setAuthTime( decodeKerberosTime( tag5 ) );
+					modifier.setAuthTime( KerberosTimeDecoder.decode( tag5 ) );
 					break;
 				case 6:
 					DERGeneralizedTime tag6 = (DERGeneralizedTime)derObject;
-					modifier.setStartTime( decodeKerberosTime( tag6 ) );
+					modifier.setStartTime( KerberosTimeDecoder.decode( tag6 ) );
 					break;
 				case 7:
 					DERGeneralizedTime tag7 = (DERGeneralizedTime)derObject;
-					modifier.setEndTime( decodeKerberosTime( tag7 ) );
+					modifier.setEndTime( KerberosTimeDecoder.decode( tag7 ) );
 					break;
 				case 8:
 					DERGeneralizedTime tag8 = (DERGeneralizedTime)derObject;
-					modifier.setRenewTill( decodeKerberosTime( tag8 ) );
+					modifier.setRenewTill( KerberosTimeDecoder.decode( tag8 ) );
 					break;
 				case 9:
 					DERSequence tag9 = (DERSequence)derObject;
-					modifier.setClientAddresses( decodeHostAddresses( tag9 ) );
+					modifier.setClientAddresses( HostAddressDecoder.decodeSequence( tag9 ) );
 					break;
 				case 10:
 					DERSequence tag10 = (DERSequence)derObject;
-					modifier.setAuthorizationData( decodeAuthorizationData( tag10 ) );
+					modifier.setAuthorizationData( AuthorizationDataDecoder.decodeSequence( tag10 ) );
 					break;
-			    default:
-			    	System.out.println( derObject );
-			    	break;
 			}
 		}
 		return modifier.getEncTicketPart();
+	}
+	
+	/*
+	 * TransitedEncoding ::= SEQUENCE { tr-type[0] INTEGER, -- must be
+	 * registered contents[1] OCTET STRING }
+	 */
+	protected TransitedEncoding decodeTransitedEncoding( DERSequence sequence )
+	{
+		TransitedEncodingType type = TransitedEncodingType.NULL;
+		byte[] contents = null;
+
+		for ( Enumeration e = sequence.getObjects(); e.hasMoreElements(); )
+		{
+			DERTaggedObject object = (DERTaggedObject) e.nextElement();
+			int tag = object.getTagNo();
+			DEREncodable derObject = object.getObject();
+			
+			switch ( tag )
+			{
+				case 0:
+					DERInteger tag0 = (DERInteger) derObject;
+					type = TransitedEncodingType.getTypeByOrdinal( tag0.intValue() );
+					break;
+				case 1:
+					DEROctetString tag1 = (DEROctetString) derObject;
+					contents = tag1.getOctets();
+					break;
+			}
+		}
+		
+		return new TransitedEncoding( type, contents );
 	}
 }
 

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=151127&r2=151128
==============================================================================
--- 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 Wed Feb  2 21:55:46 2005
@@ -18,21 +18,65 @@
 package org.apache.kerberos.io.decoder;
 
 import java.io.IOException;
+import java.util.Enumeration;
 
 import org.apache.asn1.der.ASN1InputStream;
+import org.apache.asn1.der.DEREncodable;
+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.crypto.encryption.EncryptionType;
 import org.apache.kerberos.messages.value.EncryptedData;
+import org.apache.kerberos.messages.value.EncryptedDataModifier;
 
 
-public class EncryptedDataDecoder extends KerberosMessageDecoder
+public class EncryptedDataDecoder
 {
-	public EncryptedData decode( byte[] encodedEncryptedData ) throws IOException
+	public static EncryptedData decode( byte[] encodedEncryptedData ) throws IOException
 	{
 		ASN1InputStream ais = new ASN1InputStream( encodedEncryptedData );
 		
 		DERSequence sequence = (DERSequence) ais.readObject();
 		
-		return decodeEncryptedData( sequence );
+		return decode( sequence );
+	}
+	
+	/**
+	 * EncryptedData ::=   SEQUENCE {
+	 *             etype[0]     INTEGER, -- EncryptionEngine
+	 *             kvno[1]      INTEGER OPTIONAL,
+	 *             cipher[2]    OCTET STRING -- ciphertext
+	 * }
+	 */
+	protected static EncryptedData decode( DERSequence sequence )
+	{
+		EncryptedDataModifier modifier = new EncryptedDataModifier();
+		
+		for ( Enumeration e = sequence.getObjects(); e.hasMoreElements(); )
+		{
+			DERTaggedObject object = (DERTaggedObject) e.nextElement();
+			int tag = object.getTagNo();
+			DEREncodable derObject = object.getObject();
+			
+			switch ( tag )
+			{
+				case 0:
+					DERInteger etype = (DERInteger)derObject;
+					modifier.setEncryptionType( EncryptionType.getTypeByOrdinal( etype.intValue() ) );
+					break;
+				case 1:
+					DERInteger kvno = (DERInteger)derObject;
+					modifier.setKeyVersion( kvno.intValue() );
+					break;
+				case 2:
+					DEROctetString cipher = (DEROctetString)derObject;
+					modifier.setCipherText( cipher.getOctets() );
+					break;
+			}
+		}
+		
+		return modifier.getEncryptedData();
 	}
 }
 

Modified: incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/EncryptedTimestampDecoder.java
URL: http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/EncryptedTimestampDecoder.java?view=diff&r1=151127&r2=151128
==============================================================================
--- incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/EncryptedTimestampDecoder.java (original)
+++ incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/EncryptedTimestampDecoder.java Wed Feb  2 21:55:46 2005
@@ -38,7 +38,7 @@
  *         pausec[1]                    INTEGER OPTIONAL
  * }
  */
-public class EncryptedTimestampDecoder extends KerberosMessageDecoder
+public class EncryptedTimestampDecoder
 {
 	public EncryptedTimeStamp decode( byte[] encodedEncryptedTimestamp ) throws IOException
 	{
@@ -63,15 +63,12 @@
 			{
 				case 0:
 					DERGeneralizedTime tag0 = (DERGeneralizedTime)derObject;
-					modifier.setKerberosTime( decodeKerberosTime( tag0 ) );
+					modifier.setKerberosTime( KerberosTimeDecoder.decode( tag0 ) );
 					break;
 				case 1:
 					DERInteger tag1 = (DERInteger)derObject;
 					modifier.setMicroSecond( tag1.intValue() );
 					break;
-			    default:
-			    	System.out.println( object.getObject() );
-			    	break;
 			}
 		}
 		

Added: incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/EncryptionKeyDecoder.java
URL: http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/EncryptionKeyDecoder.java?view=auto&rev=151128
==============================================================================
--- incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/EncryptionKeyDecoder.java (added)
+++ incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/EncryptionKeyDecoder.java Wed Feb  2 21:55:46 2005
@@ -0,0 +1,66 @@
+/*
+ *   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.decoder;
+
+import java.util.Enumeration;
+
+import org.apache.asn1.der.DEREncodable;
+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.crypto.encryption.EncryptionType;
+import org.apache.kerberos.messages.value.EncryptionKey;
+
+
+public class EncryptionKeyDecoder
+{
+	/**
+     * EncryptionKey ::=   SEQUENCE {
+     *     keytype[0]    INTEGER,
+     *     keyvalue[1]   OCTET STRING
+     * }
+     */
+	protected static EncryptionKey decode( DERSequence sequence )
+	{
+		EncryptionType type = EncryptionType.NULL;
+		byte[] data = null;
+		
+		for ( Enumeration e = sequence.getObjects(); e.hasMoreElements(); )
+		{
+			DERTaggedObject object = (DERTaggedObject) e.nextElement();
+			int tag = object.getTagNo();
+			DEREncodable derObject = object.getObject();
+			
+			switch ( tag )
+			{
+				case 0:
+					DERInteger tag0 = (DERInteger)derObject;
+					type = EncryptionType.getTypeByOrdinal( tag0.intValue() );
+					break;
+				case 1:
+					DEROctetString tag1 = (DEROctetString)derObject;
+					data = tag1.getOctets();
+					break;
+			}
+		}
+		
+		return new EncryptionKey( type, data );
+	}
+}
+

Added: incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/EncryptionTypeDecoder.java
URL: http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/EncryptionTypeDecoder.java?view=auto&rev=151128
==============================================================================
--- incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/EncryptionTypeDecoder.java (added)
+++ incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/EncryptionTypeDecoder.java Wed Feb  2 21:55:46 2005
@@ -0,0 +1,48 @@
+/*
+ *   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.decoder;
+
+import java.util.Enumeration;
+
+import org.apache.asn1.der.DERInteger;
+import org.apache.asn1.der.DERSequence;
+import org.apache.kerberos.crypto.encryption.EncryptionType;
+
+
+public class EncryptionTypeDecoder
+{
+	/**
+     * etype[8]             SEQUENCE OF INTEGER, -- EncryptionEngine,
+     *             -- in preference order
+     */
+	protected static EncryptionType[] decode( DERSequence sequence )
+	{
+		EncryptionType[] eTypes = new EncryptionType[ sequence.size() ];
+		
+		int ii = 0;
+		for ( Enumeration e = sequence.getObjects(); e.hasMoreElements(); )
+		{
+			DERInteger object = (DERInteger) e.nextElement();
+			eTypes[ii] = EncryptionType.getTypeByOrdinal( object.intValue() );
+			ii++;
+		}
+		
+		return eTypes;
+	}
+}
+

Added: incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/HostAddressDecoder.java
URL: http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/HostAddressDecoder.java?view=auto&rev=151128
==============================================================================
--- incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/HostAddressDecoder.java (added)
+++ incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/HostAddressDecoder.java Wed Feb  2 21:55:46 2005
@@ -0,0 +1,89 @@
+/*
+ *   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.decoder;
+
+import java.util.Enumeration;
+
+import org.apache.asn1.der.DEREncodable;
+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.HostAddressType;
+import org.apache.kerberos.messages.value.HostAddresses;
+
+
+public class HostAddressDecoder
+{
+	/**
+	 * HostAddress ::=     SEQUENCE  {
+     *                     addr-type[0]             INTEGER,
+     *                     address[1]               OCTET STRING
+     * }
+     */
+	protected static HostAddress decode( DERSequence sequence )
+	{
+		HostAddressType type = HostAddressType.NULL;
+		byte[] value = null;
+		
+		for ( Enumeration e = sequence.getObjects(); e.hasMoreElements(); )
+		{
+			DERTaggedObject object = (DERTaggedObject) e.nextElement();
+			int tag = object.getTagNo();
+			DEREncodable derObject = object.getObject();
+			
+			switch ( tag )
+			{
+				case 0:
+					DERInteger addressType = (DERInteger)derObject;
+					type = HostAddressType.getTypeByOrdinal( addressType.intValue() );
+					break;
+				case 1:
+					DEROctetString address = (DEROctetString)derObject;
+					value = address.getOctets();
+					break;
+			}
+		}
+		
+		return new HostAddress( type, value );
+	}
+	
+	/**
+	 * HostAddresses ::=   SEQUENCE OF SEQUENCE {
+	 *                     addr-type[0]             INTEGER,
+	 *                     address[1]               OCTET STRING
+	 * }
+	 */
+	protected static HostAddresses decodeSequence( DERSequence sequence )
+	{
+		HostAddress[] addresses = new HostAddress[ sequence.size() ];
+		
+		int ii = 0;
+		for ( Enumeration e = sequence.getObjects(); e.hasMoreElements(); )
+		{
+			DERSequence object = (DERSequence) e.nextElement();
+			HostAddress address = decode( object );
+			addresses[ii] = address;
+			ii++;
+		}
+		
+		return new HostAddresses( addresses );
+	}
+}
+

Modified: incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/KdcRequestDecoder.java
URL: http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/KdcRequestDecoder.java?view=diff&r1=151127&r2=151128
==============================================================================
--- incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/KdcRequestDecoder.java (original)
+++ incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/KdcRequestDecoder.java Wed Feb  2 21:55:46 2005
@@ -32,14 +32,13 @@
 import org.apache.asn1.der.DERTaggedObject;
 import org.apache.kerberos.messages.KdcRequest;
 import org.apache.kerberos.messages.MessageType;
-import org.apache.kerberos.messages.components.Ticket;
 import org.apache.kerberos.messages.value.KdcOptions;
 import org.apache.kerberos.messages.value.PreAuthenticationData;
 import org.apache.kerberos.messages.value.RequestBody;
 import org.apache.kerberos.messages.value.RequestBodyModifier;
 
 
-public class KdcRequestDecoder extends KerberosMessageDecoder
+public class KdcRequestDecoder
 {
 	public KdcRequest decode( ByteBuffer in ) throws IOException
 	{
@@ -62,27 +61,29 @@
 	           padata[3]             SEQUENCE OF PA-DATA OPTIONAL,
 	           req-body[4]           KDC-REQ-BODY
 	}*/
-	private KdcRequest decodeKdcRequestSequence(DERSequence sequence) throws IOException {
-		
+	private KdcRequest decodeKdcRequestSequence( DERSequence sequence ) throws IOException
+	{
 		int pvno = 5;
 		MessageType msgType = MessageType.NULL;
 		
 		PreAuthenticationData[] paData = null;
 		RequestBody requestBody = null;
 		
-		for (Enumeration e = sequence.getObjects(); e.hasMoreElements();) {
-			DERTaggedObject object = ((DERTaggedObject) e.nextElement());
+		for ( Enumeration e = sequence.getObjects(); e.hasMoreElements(); )
+		{
+			DERTaggedObject object = (DERTaggedObject) e.nextElement();
 			int tag = object.getTagNo();
 			DEREncodable derObject = object.getObject();
 			
-			switch (tag) {
+			switch ( tag )
+			{
 				case 1:
 					DERInteger tag1 = (DERInteger)derObject;
 					pvno = tag1.intValue();
 					break;
 				case 2:
 					DERInteger tag2 = (DERInteger)derObject;
-					msgType = MessageType.getTypeByOrdinal(tag2.intValue());
+					msgType = MessageType.getTypeByOrdinal( tag2.intValue() );
 					break;
 				case 3:
 					DERSequence tag3 = (DERSequence)derObject;
@@ -90,15 +91,12 @@
 					break;
 				case 4:
 					DERSequence tag4 = (DERSequence)derObject;
-					requestBody = decodeRequestBody(tag4);
+					requestBody = decodeRequestBody( tag4 );
 					break;
-			    default:
-			    	System.out.println(derObject);
-			    	break;
 			}
 		}
 		
-		return new KdcRequest(pvno, msgType, paData, requestBody);
+		return new KdcRequest( pvno, msgType, paData, requestBody );
 	}
 	
 	/*
@@ -120,83 +118,70 @@
 	                         -- Encrypted AuthorizationData encoding
 	            additional-tickets[11]       SEQUENCE OF Ticket OPTIONAL
 	}*/
-	private RequestBody decodeRequestBody(DERSequence sequence) throws IOException {
-		
+	private RequestBody decodeRequestBody( DERSequence sequence ) throws IOException
+	{
 		RequestBodyModifier modifier = new RequestBodyModifier();
 		
-		for (Enumeration e = sequence.getObjects(); e.hasMoreElements();) {
-			DERTaggedObject object = ((DERTaggedObject) e.nextElement());
+		for ( Enumeration e = sequence.getObjects(); e.hasMoreElements(); )
+		{
+			DERTaggedObject object = (DERTaggedObject) e.nextElement();
 			int tag = object.getTagNo();
 			DEREncodable derObject = object.getObject();
 			
-			switch (tag) {
+			switch ( tag )
+			{
 				case 0:
 					DERBitString kdcOptions = (DERBitString)derObject;
-					modifier.setKdcOptions(new KdcOptions(kdcOptions.getOctets()));
+					modifier.setKdcOptions( new KdcOptions( kdcOptions.getOctets() ) );
 					break;
 				case 1:
 					DERSequence cName = (DERSequence)derObject;
-					modifier.setClientName(decodePrincipalName(cName));
+					modifier.setClientName( PrincipalNameDecoder.decode( cName ) );
 					break;
 				case 2:
 					DERGeneralString realm = (DERGeneralString)derObject;
-					modifier.setRealm(realm.getString());
+					modifier.setRealm( realm.getString() );
 					break;
 				case 3:
 					DERSequence sname = (DERSequence)derObject;
-					modifier.setServerName(decodePrincipalName(sname));
+					modifier.setServerName( PrincipalNameDecoder.decode( sname ) );
 					break;
 				case 4:
 					DERGeneralizedTime from = (DERGeneralizedTime)derObject;
-					modifier.setFrom(decodeKerberosTime(from));
+					modifier.setFrom( KerberosTimeDecoder.decode( from ) );
 					break;
 				case 5:
 					DERGeneralizedTime till = (DERGeneralizedTime)derObject;
-					modifier.setTill(decodeKerberosTime(till));
+					modifier.setTill( KerberosTimeDecoder.decode( till ) );
 					break;
 				case 6:
 					DERGeneralizedTime rtime = (DERGeneralizedTime)derObject;
-					modifier.setRtime(decodeKerberosTime(rtime));
+					modifier.setRtime( KerberosTimeDecoder.decode( rtime ) );
 					break;
 				case 7:
 					DERInteger nonce = (DERInteger)derObject;
-					modifier.setNonce(nonce.intValue());
+					modifier.setNonce( nonce.intValue() );
 					break;
 				case 8:
 					DERSequence etype = (DERSequence)derObject;
-					modifier.setEType(decodeEncryptionType(etype));
+					modifier.setEType( EncryptionTypeDecoder.decode( etype ) );
 					break;
 				case 9:
 					DERSequence hostAddresses = (DERSequence)derObject;
-					modifier.setAddresses(decodeHostAddresses(hostAddresses));
+					modifier.setAddresses( HostAddressDecoder.decodeSequence( hostAddresses ) );
 					break;
 				case 10:
 					DERSequence encryptedData = (DERSequence)derObject;
-					modifier.setEncAuthorizationData(decodeEncryptedData(encryptedData));
+					modifier.setEncAuthorizationData( EncryptedDataDecoder.decode( encryptedData ) );
 					break;
 				case 11:
 					DERSequence tag11 = (DERSequence)derObject;
-					modifier.setAdditionalTickets(decodeTickets(tag11));
+					modifier.setAdditionalTickets( TicketDecoder.decodeSequence( tag11 ) );
 					break;
-			    default:
-			    	System.out.println(derObject);
-			    	break;
 			}
 		}
 		
 		return modifier.getRequestBody();
-	}
-	
-	protected Ticket[] decodeTickets(DERSequence sequence) throws IOException {
-		
-		Ticket[] tickets = new Ticket[sequence.size()];
-		
-		int i = 0;
-		for (Enumeration e = sequence.getObjects(); e.hasMoreElements();) {
-			DERApplicationSpecific object = ((DERApplicationSpecific) e.nextElement());
-			tickets[i] = decodeTicket(object);
-		}
-		return tickets;
 	}
 }
 

Added: incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/KerberosTimeDecoder.java
URL: http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/KerberosTimeDecoder.java?view=auto&rev=151128
==============================================================================
--- incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/KerberosTimeDecoder.java (added)
+++ incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/KerberosTimeDecoder.java Wed Feb  2 21:55:46 2005
@@ -0,0 +1,49 @@
+/*
+ *   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.decoder;
+
+import java.text.ParseException;
+import java.util.Date;
+
+import org.apache.asn1.der.DERGeneralizedTime;
+import org.apache.kerberos.messages.value.KerberosTime;
+
+
+public class KerberosTimeDecoder
+{
+	/**
+	 * KerberosTime ::=   GeneralizedTime
+	 *             -- Specifying UTC time zone (Z)
+	 */
+	protected static KerberosTime decode( DERGeneralizedTime time )
+	{
+		Date date = null;
+		
+		try
+		{
+			date = time.getDate();
+		}
+		catch (ParseException pe)
+		{
+			pe.printStackTrace();
+		}
+		
+		return new KerberosTime( date );
+	}
+}
+

Added: incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/LastRequestDecoder.java
URL: http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/LastRequestDecoder.java?view=auto&rev=151128
==============================================================================
--- incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/LastRequestDecoder.java (added)
+++ incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/LastRequestDecoder.java Wed Feb  2 21:55:46 2005
@@ -0,0 +1,84 @@
+/*
+ *   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.decoder;
+
+import java.util.Enumeration;
+
+import org.apache.asn1.der.DEREncodable;
+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.KerberosTime;
+import org.apache.kerberos.messages.value.LastRequest;
+import org.apache.kerberos.messages.value.LastRequestEntry;
+import org.apache.kerberos.messages.value.LastRequestType;
+
+
+public class LastRequestDecoder
+{
+	/**
+	 * LastReq ::=   SEQUENCE OF SEQUENCE {
+	 * lr-type[0]               INTEGER,
+	 * lr-value[1]              KerberosTime
+	 * }
+	 */
+	protected LastRequest decodeSequence( DERSequence sequence )
+	{
+		LastRequestEntry[] entries = new LastRequestEntry[ sequence.size() ];
+		
+		int ii = 0;
+		for ( Enumeration e = sequence.getObjects(); e.hasMoreElements(); )
+		{
+			DERSequence object = (DERSequence) e.nextElement();
+			LastRequestEntry entry = decode( object );
+			entries[ii] = entry;
+			ii++;
+		}
+		
+		return new LastRequest( entries );
+	}
+	
+	protected LastRequestEntry decode( DERSequence sequence )
+	{
+		LastRequestType type = LastRequestType.NONE;
+		KerberosTime value = null;
+		
+		for ( Enumeration e = sequence.getObjects(); e.hasMoreElements(); )
+		{
+			DERTaggedObject object = (DERTaggedObject) e.nextElement();
+			int tag = object.getTagNo();
+			DEREncodable derObject = object.getObject();
+			
+			switch ( tag )
+			{
+				case 0:
+					DERInteger tag0 = (DERInteger)derObject;
+					type = LastRequestType.getTypeByOrdinal( tag0.intValue() );
+					break;
+				case 1:
+					DERGeneralizedTime tag1 = (DERGeneralizedTime)derObject;
+					value = KerberosTimeDecoder.decode( tag1 );
+					break;
+			}
+		}
+		
+		return new LastRequestEntry( type, value );
+	}
+}
+

Added: incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/PrincipalNameDecoder.java
URL: http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/PrincipalNameDecoder.java?view=auto&rev=151128
==============================================================================
--- incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/PrincipalNameDecoder.java (added)
+++ incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/PrincipalNameDecoder.java Wed Feb  2 21:55:46 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.decoder;
+
+import java.util.Enumeration;
+
+import org.apache.asn1.der.DEREncodable;
+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.value.PrincipalName;
+import org.apache.kerberos.messages.value.PrincipalNameModifier;
+
+
+public class PrincipalNameDecoder
+{
+	/**
+	 * PrincipalName ::=   SEQUENCE {
+	 *               name-type[0]     INTEGER,
+	 *               name-string[1]   SEQUENCE OF GeneralString
+	 * }
+	 */
+	public static PrincipalName decode( DERSequence sequence )
+	{
+		PrincipalNameModifier modifier = new PrincipalNameModifier();
+		
+		for ( Enumeration e = sequence.getObjects(); e.hasMoreElements(); )
+		{
+			DERTaggedObject object = (DERTaggedObject) e.nextElement();
+			int tag = object.getTagNo();
+			DEREncodable derObject = object.getObject();
+			
+			switch ( tag )
+			{
+				case 0:
+					DERInteger nameType = (DERInteger)derObject;
+					modifier.setType( nameType.intValue() );
+					break;
+				case 1:
+					DERSequence nameString = (DERSequence)derObject;
+					decodeNameString( nameString, modifier );
+					break;
+			}
+		}
+		
+		return modifier.getPrincipalName();
+	}
+	
+	private static void decodeNameString( DERSequence sequence, PrincipalNameModifier modifier )
+	{
+		for ( Enumeration e = sequence.getObjects(); e.hasMoreElements(); )
+		{
+			DERGeneralString object = (DERGeneralString) e.nextElement();
+			modifier.addName( object.getString() );
+		}
+	}
+}
+

Modified: incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/PrivateMessageDecoder.java
URL: http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/PrivateMessageDecoder.java?view=diff&r1=151127&r2=151128
==============================================================================
--- incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/PrivateMessageDecoder.java (original)
+++ incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/PrivateMessageDecoder.java Wed Feb  2 21:55:46 2005
@@ -30,7 +30,7 @@
 import org.apache.kerberos.messages.application.PrivateMessage;
 
 
-public class PrivateMessageDecoder extends KerberosMessageDecoder
+public class PrivateMessageDecoder
 {
 	public PrivateMessage decode( byte[] encodedPrivateMessage ) throws IOException
 	{
@@ -43,7 +43,7 @@
 		return decodePrivateMessageSequence( privateMessage );
 	}
 	
-	private PrivateMessage decodePrivateMessageSequence(DERSequence sequence)
+	private PrivateMessage decodePrivateMessageSequence( DERSequence sequence )
 	{
 		PrivateMessage message = new PrivateMessage();
 		
@@ -53,7 +53,8 @@
 			int tag = object.getTagNo();
 			DEREncodable derObject = object.getObject();
 			
-			switch ( tag ) {
+			switch ( tag )
+			{
 				case 0:
 					DERInteger tag0 = (DERInteger) derObject;
 					message.setProtocolVersionNumber( tag0.intValue() );
@@ -64,11 +65,8 @@
 					break;
 				case 3:
 					DERSequence tag3 = (DERSequence)derObject;
-					message.setEncryptedPart( decodeEncryptedData( tag3 ) );
+					message.setEncryptedPart( EncryptedDataDecoder.decode( tag3 ) );
 					break;
-			    default:
-			    	System.out.println( derObject );
-			    	break;
 			}
 		}
 		

Added: incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/TicketDecoder.java
URL: http://svn.apache.org/viewcvs/incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/TicketDecoder.java?view=auto&rev=151128
==============================================================================
--- incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/TicketDecoder.java (added)
+++ incubator/directory/kerberos/trunk/core/src/java/org/apache/kerberos/io/decoder/TicketDecoder.java Wed Feb  2 21:55:46 2005
@@ -0,0 +1,93 @@
+/*
+ *   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.decoder;
+
+import java.io.IOException;
+import java.util.Enumeration;
+
+import org.apache.asn1.der.DERApplicationSpecific;
+import org.apache.asn1.der.DEREncodable;
+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;
+import org.apache.kerberos.messages.components.TicketModifier;
+
+
+public class TicketDecoder
+{
+	public static Ticket[] decodeSequence( DERSequence sequence ) throws IOException
+	{
+		Ticket[] tickets = new Ticket[ sequence.size() ];
+		
+		int ii = 0;
+		for ( Enumeration e = sequence.getObjects(); e.hasMoreElements(); )
+		{
+			DERApplicationSpecific object = (DERApplicationSpecific) e.nextElement();
+			tickets[ii] = decode( object );
+		}
+		
+		return tickets;
+	}
+	
+	/**
+	 * Ticket ::=                    [APPLICATION 1] SEQUENCE {
+     *     tkt-vno[0]                   INTEGER,
+     *     realm[1]                     Realm,
+     *     sname[2]                     PrincipalName,
+     *     enc-part[3]                  EncryptedData
+     * }
+     */
+	protected static Ticket decode( DERApplicationSpecific app ) throws IOException
+	{
+		DERSequence sequence = (DERSequence) app.getObject();
+		
+		TicketModifier modifier = new TicketModifier();
+		
+		for ( Enumeration e = sequence.getObjects(); e.hasMoreElements(); )
+		{
+			DERTaggedObject object = (DERTaggedObject) e.nextElement();
+			int tag = object.getTagNo();
+			DEREncodable derObject = object.getObject();
+			
+			switch ( tag )
+			{
+				case 0:
+					DERInteger tag0 = (DERInteger)derObject;
+					modifier.setTicketVersionNumber( tag0.intValue() );
+					break;
+				case 1:
+					DERGeneralString tag1 = (DERGeneralString)derObject;
+					modifier.setServerRealm( tag1.getString() );
+					break;
+				case 2:
+					DERSequence tag2 = (DERSequence)derObject;
+					modifier.setServerName( PrincipalNameDecoder.decode( tag2 ) );
+					break;
+				case 3:
+					DERSequence tag3 = (DERSequence)derObject;
+					modifier.setEncPart( EncryptedDataDecoder.decode( tag3 ) );
+					break;
+			}
+		}
+		
+		return modifier.getTicket();
+	}
+}
+