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/05/24 12:30:38 UTC

svn commit: r178151 - in /directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam: io/ messages/

Author: erodriguez
Date: Tue May 24 03:30:35 2005
New Revision: 178151

URL: http://svn.apache.org/viewcvs?rev=178151&view=rev
Log:
Kerberos SAM codec and message classes.

Added:
    directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/io/
    directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/io/EncryptedSamResponseDecoder.java
    directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/io/EncryptedSamResponseEncoder.java
    directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/io/SamChallengeDecoder.java
    directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/io/SamChallengeEncoder.java
    directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/io/SamResponseDecoder.java
    directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/io/SamResponseEncoder.java
    directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/messages/
    directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/messages/EncryptedSamResponse.java
    directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/messages/EncryptedSamResponseModifier.java
    directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/messages/SamChallenge.java
    directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/messages/SamChallengeModifier.java
    directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/messages/SamFlags.java
    directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/messages/SamResponse.java
    directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/messages/SamResponseModifier.java

Added: directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/io/EncryptedSamResponseDecoder.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/io/EncryptedSamResponseDecoder.java?rev=178151&view=auto
==============================================================================
--- directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/io/EncryptedSamResponseDecoder.java (added)
+++ directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/io/EncryptedSamResponseDecoder.java Tue May 24 03:30:35 2005
@@ -0,0 +1,81 @@
+/*
+ *   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.sam.io;
+
+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.DERSequence;
+import org.apache.asn1.der.DERString;
+import org.apache.asn1.der.DERTaggedObject;
+
+import org.apache.kerberos.sam.messages.EncryptedSamResponse;
+import org.apache.kerberos.sam.messages.EncryptedSamResponseModifier;
+
+
+public class EncryptedSamResponseDecoder
+{
+	public EncryptedSamResponse decode( byte[] encodedSamChallenge ) throws IOException
+	{
+		ASN1InputStream ais = new ASN1InputStream( encodedSamChallenge );
+		
+		DERSequence sequence = (DERSequence) ais.readObject();
+		
+		return decodeEncryptedSamResponse( sequence );
+	}
+	
+	/**
+	 *  PA-ENC-SAM-RESPONSE-ENC ::= SEQUENCE {
+	 *       sam-nonce[0]               INTEGER (0..4294967295),
+	 *       sam-sad[1]                 GeneralString OPTIONAL,
+	 *       ...
+	 *  }
+	 */
+	private EncryptedSamResponse decodeEncryptedSamResponse( DERSequence sequence )
+	{
+		EncryptedSamResponseModifier modifier = new EncryptedSamResponseModifier();
+		
+		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.setSamNonce( tag0.intValue() );
+					break;
+				case 1:
+				    DERString tag1 = (DERString)derObject;
+					modifier.setSamSad( tag1.getString() );
+					break;
+			    default:
+			    	System.out.println( derObject );
+			    	break;
+			}
+		}
+		
+		return modifier.getEncryptedSamResponse();
+	}
+}
+

Added: directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/io/EncryptedSamResponseEncoder.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/io/EncryptedSamResponseEncoder.java?rev=178151&view=auto
==============================================================================
--- directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/io/EncryptedSamResponseEncoder.java (added)
+++ directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/io/EncryptedSamResponseEncoder.java Tue May 24 03:30:35 2005
@@ -0,0 +1,62 @@
+/*
+ *   Copyright 2005 The Apache Software Foundation
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+
+package org.apache.kerberos.sam.io;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
+import org.apache.asn1.der.ASN1OutputStream;
+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.sam.messages.EncryptedSamResponse;
+
+
+public class EncryptedSamResponseEncoder
+{
+	public byte[] encode( EncryptedSamResponse encryptedResponse ) throws IOException
+	{
+		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		ASN1OutputStream aos = new ASN1OutputStream( baos );
+		
+		aos.writeObject( encodeEncryptedSamResponse( encryptedResponse ) );
+		aos.close();
+		
+		return baos.toByteArray();
+	}
+	
+	/**
+	 *  PA-ENC-SAM-RESPONSE-ENC ::= SEQUENCE {
+	 *       sam-nonce[0]               INTEGER (0..4294967295),
+	 *       sam-sad[1]                 GeneralString OPTIONAL,
+	 *       ...
+	 *  }
+	 */
+	private DERSequence encodeEncryptedSamResponse( EncryptedSamResponse encryptedResponse )
+	{
+		DERSequence sequence = new DERSequence();
+		
+		sequence.add( new DERTaggedObject( 0, DERInteger.valueOf( encryptedResponse.getSamNonce() ) ) );
+		
+		sequence.add( new DERTaggedObject( 1, DERGeneralString.valueOf( encryptedResponse.getSamSad() ) ) );
+		
+		return sequence;
+	}
+}
+

Added: directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/io/SamChallengeDecoder.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/io/SamChallengeDecoder.java?rev=178151&view=auto
==============================================================================
--- directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/io/SamChallengeDecoder.java (added)
+++ directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/io/SamChallengeDecoder.java Tue May 24 03:30:35 2005
@@ -0,0 +1,168 @@
+/*
+ *   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.sam.io;
+
+import java.io.IOException;
+import java.util.Enumeration;
+
+import org.apache.asn1.der.ASN1InputStream;
+import org.apache.asn1.der.DERBitString;
+import org.apache.asn1.der.DEREncodable;
+import org.apache.asn1.der.DERGeneralString;
+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.io.decoder.ChecksumDecoder;
+import org.apache.kerberos.messages.value.Checksum;
+import org.apache.kerberos.sam.messages.SamChallenge;
+import org.apache.kerberos.sam.messages.SamChallengeModifier;
+import org.apache.kerberos.sam.messages.SamFlags;
+
+
+public class SamChallengeDecoder
+{
+	public SamChallenge decode( byte[] encodedSamChallenge ) throws IOException
+	{
+		ASN1InputStream ais = new ASN1InputStream( encodedSamChallenge );
+		
+		DERSequence sequence = (DERSequence) ais.readObject();
+		
+		return decodeSamChallenge( sequence );
+	}
+	
+	/**
+	 *  PA-SAM-CHALLENGE-2 ::= SEQUENCE {
+	 *      sam-body[0]                 PA-SAM-CHALLENGE-2-BODY,
+	 *      sam-cksum[1]                SEQUENCE (1..MAX) OF Checksum,
+	 *      ...
+	 *  }
+	 */
+	private SamChallenge decodeSamChallenge( DERSequence sequence )
+	{
+		SamChallengeModifier modifier = new SamChallengeModifier();
+		
+		for ( Enumeration e = sequence.getObjects(); e.hasMoreElements(); )
+		{
+			DERTaggedObject object = (DERTaggedObject) e.nextElement();
+			int tag = object.getTagNo();
+			DEREncodable derObject = object.getObject();
+			
+			switch ( tag )
+			{
+				case 0:
+					DERSequence tag0 = (DERSequence)derObject;
+					decodeSamChallengeBody( tag0, modifier );
+					break;
+				case 1:
+				    DERSequence tag1 = (DERSequence)derObject;
+					decodeSamChecksum( tag1, modifier );
+					break;
+			    default:
+			    	System.out.println( derObject );
+			    	break;
+			}
+		}
+		
+		return modifier.getSamChallenge();
+	}
+	
+	private void decodeSamChecksum( DERSequence sequence, SamChallengeModifier modifier )
+	{
+		for ( Enumeration e = sequence.getObjects(); e.hasMoreElements(); )
+		{
+			DERSequence object = (DERSequence) e.nextElement();
+			Checksum checksum = ChecksumDecoder.decode( object );
+			modifier.addChecksum( checksum );
+		}
+	}
+	
+	/**
+	 *  PA-SAM-CHALLENGE-2-BODY ::= SEQUENCE {
+	 *      sam-type[0]                 INTEGER (0..4294967295),
+	 *      sam-flags[1]                SAMFlags,
+	 *      sam-type-name[2]            GeneralString OPTIONAL,
+	 *      sam-track-id[3]             GeneralString OPTIONAL,
+	 *                                    -- Key usage of 26
+	 *      sam-challenge-label[4]      GeneralString OPTIONAL,
+	 *      sam-challenge[5]            GeneralString OPTIONAL,
+	 *      sam-response-prompt[6]      GeneralString OPTIONAL,
+	 *      sam-pk-for-sad[7]           OCTET STRING OPTIONAL,
+	 *      sam-nonce[8]                INTEGER (0..4294967295),
+	 *      sam-etype[9]                INTEGER (0..4294967295),
+	 *      ...
+	 *  }
+	 */
+	private void decodeSamChallengeBody( DERSequence sequence, SamChallengeModifier modifier )
+	{
+		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.setSamType( tag0.intValue() );
+					break;
+				case 1:
+					DERBitString tag1 = (DERBitString)derObject;
+					modifier.setSamFlags( new SamFlags( tag1.getOctets() ) );
+					break;
+				case 2:
+				    DERGeneralString tag2 = (DERGeneralString)derObject;
+					modifier.setSamTypeName( tag2.getString() );
+					break;
+				case 3:
+				    DERGeneralString tag3 = (DERGeneralString)derObject;
+					modifier.setSamTrackId( tag3.getString() );
+					break;
+				case 4:
+				    DERGeneralString tag4 = (DERGeneralString)derObject;
+					modifier.setSamChallengeLabel( tag4.getString() );
+					break;
+				case 5:
+				    DERGeneralString tag5 = (DERGeneralString)derObject;
+					modifier.setSamChallenge( tag5.getString() );
+					break;
+				case 6:
+				    DERGeneralString tag6 = (DERGeneralString)derObject;
+					modifier.setSamResponsePrompt( tag6.getString() );
+					break;
+				case 7:
+					DEROctetString tag7 = (DEROctetString)derObject;
+					modifier.setSamPkForSad( tag7.getOctets() );
+					break;
+				case 8:
+				    DERInteger tag8 = (DERInteger)derObject;
+					modifier.setSamNonce( tag8.intValue() );
+					break;
+				case 9:
+				    DERInteger tag9 = (DERInteger)derObject;
+					modifier.setSamEncryptionType( tag9.intValue() );
+					break;
+			    default:
+			    	System.out.println( derObject );
+			    	break;
+			}
+		}
+	}
+}
+

Added: directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/io/SamChallengeEncoder.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/io/SamChallengeEncoder.java?rev=178151&view=auto
==============================================================================
--- directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/io/SamChallengeEncoder.java (added)
+++ directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/io/SamChallengeEncoder.java Tue May 24 03:30:35 2005
@@ -0,0 +1,144 @@
+/*
+ *   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.sam.io;
+
+import java.io.ByteArrayOutputStream;
+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.DEROctetString;
+import org.apache.asn1.der.DERSequence;
+import org.apache.asn1.der.DERTaggedObject;
+import org.apache.kerberos.io.encoder.ChecksumEncoder;
+import org.apache.kerberos.messages.value.Checksum;
+import org.apache.kerberos.sam.messages.SamChallenge;
+
+
+public class SamChallengeEncoder
+{
+	public byte[] encode( SamChallenge samChallenge ) throws IOException
+	{
+		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		ASN1OutputStream aos = new ASN1OutputStream( baos );
+		
+		aos.writeObject( encodeSamChallenge( samChallenge ) );
+		aos.close();
+		
+		return baos.toByteArray();
+	}
+    
+    /**
+     *  PA-SAM-CHALLENGE-2 ::= SEQUENCE {
+     *      sam-body[0]                 PA-SAM-CHALLENGE-2-BODY,
+     *      sam-cksum[1]                SEQUENCE (1..MAX) OF Checksum,
+     *      ...
+     *  }
+     */
+	private DERSequence encodeSamChallenge( SamChallenge samChallenge )
+	{
+		DERSequence sequence = new DERSequence();
+		
+		sequence.add( new DERTaggedObject( 0, encodeSamChallengeBody( samChallenge ) ) );
+		sequence.add( new DERTaggedObject( 1, encodeChecksums( samChallenge.getSamChecksums() ) ) );
+		
+		return sequence;
+	}
+    
+    /**
+     *  PA-SAM-CHALLENGE-2-BODY ::= SEQUENCE {
+     *      sam-type[0]                 INTEGER (0..4294967295),
+     *      sam-flags[1]                SAMFlags,
+     *      sam-type-name[2]            GeneralString OPTIONAL,
+     *      sam-track-id[3]             GeneralString OPTIONAL,
+     *                                    -- Key usage of 26
+     *      sam-challenge-label[4]      GeneralString OPTIONAL,
+     *      sam-challenge[5]            GeneralString OPTIONAL,
+     *      sam-response-prompt[6]      GeneralString OPTIONAL,
+     *      sam-pk-for-sad[7]           OCTET STRING OPTIONAL,
+     *      sam-nonce[8]                INTEGER (0..4294967295),
+     *      sam-etype[9]                INTEGER (0..4294967295),
+     *      ...
+     *  }
+     */
+	private DERSequence encodeSamChallengeBody( SamChallenge samChallenge )
+	{
+		DERSequence sequence = new DERSequence();
+		
+		sequence.add( new DERTaggedObject( 0, DERInteger.valueOf( samChallenge.getSamType() ) ) );
+		
+		/**
+		 * SAMFlags ::= BIT STRING (SIZE (32..MAX))
+	     *     -- use-sad-as-key(0)
+	     *     -- send-encrypted-sad(1)
+	     *     -- must-pk-encrypt-sad(2)
+		 */
+		sequence.add( new DERTaggedObject( 1, new DERBitString( samChallenge.getSamFlags().getBytes() ) ) );
+		
+		if ( samChallenge.getSamTypeName() !=  null)
+		{
+		    sequence.add( new DERTaggedObject( 2, DERGeneralString.valueOf( samChallenge.getSamTypeName() ) ) );
+		}
+		
+		if ( samChallenge.getSamTrackId() !=  null)
+		{
+		    sequence.add( new DERTaggedObject( 3, DERGeneralString.valueOf( samChallenge.getSamTrackId() ) ) );
+		}
+		
+		if ( samChallenge.getSamChallengeLabel() !=  null)
+		{
+		    sequence.add( new DERTaggedObject( 4, DERGeneralString.valueOf( samChallenge.getSamChallengeLabel() ) ) );
+		}
+		
+		if ( samChallenge.getSamChallenge() !=  null)
+		{
+		    sequence.add( new DERTaggedObject( 5, DERGeneralString.valueOf( samChallenge.getSamChallenge() ) ) );
+		}
+		
+		if ( samChallenge.getSamResponsePrompt() !=  null)
+		{
+		    sequence.add( new DERTaggedObject( 6, DERGeneralString.valueOf( samChallenge.getSamResponsePrompt() ) ) );
+		}
+		
+		if ( samChallenge.getSamPkForSad() != null )
+		{
+		    sequence.add(new DERTaggedObject( 7, new DEROctetString( samChallenge.getSamPkForSad() ) ) );
+		}
+		
+		sequence.add( new DERTaggedObject( 8, DERInteger.valueOf( samChallenge.getSamNonce() ) ) );
+		
+		sequence.add( new DERTaggedObject( 9, DERInteger.valueOf( samChallenge.getSamEncryptionType() ) ) );
+		
+		return sequence;
+	}
+	
+	private DERSequence encodeChecksums( Checksum[] checksums )
+	{
+		DERSequence checksumSequence = new DERSequence();
+		
+		for ( int ii = 0; ii < checksums.length; ii++ )
+		{
+			checksumSequence.add( ChecksumEncoder.encode( checksums[ii] ) );
+		}
+		
+		return checksumSequence;
+	}
+}
+

Added: directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/io/SamResponseDecoder.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/io/SamResponseDecoder.java?rev=178151&view=auto
==============================================================================
--- directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/io/SamResponseDecoder.java (added)
+++ directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/io/SamResponseDecoder.java Tue May 24 03:30:35 2005
@@ -0,0 +1,100 @@
+/*
+ *   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.sam.io;
+
+import java.io.IOException;
+import java.util.Enumeration;
+
+import org.apache.asn1.der.ASN1InputStream;
+import org.apache.asn1.der.DERBitString;
+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.io.decoder.EncryptedDataDecoder;
+import org.apache.kerberos.sam.messages.SamFlags;
+import org.apache.kerberos.sam.messages.SamResponse;
+import org.apache.kerberos.sam.messages.SamResponseModifier;
+
+
+public class SamResponseDecoder
+{
+    public SamResponse decode( byte[] encodedSamResponse ) throws IOException
+    {
+    	ASN1InputStream ais = new ASN1InputStream( encodedSamResponse );
+    	
+    	DERSequence sequence = (DERSequence) ais.readObject();
+    	
+    	return decodeSamResponse( sequence );
+    }
+    
+    /**
+     *  PA-SAM-RESPONSE-2 ::= SEQUENCE {
+     *      sam-type[0]                 INTEGER (0..4294967295),
+     *      sam-flags[1]                SAMFlags,
+     *      sam-track-id[2]             GeneralString OPTIONAL,
+     *      sam-enc-nonce-or-sad[3]     EncryptedData,
+     *                                     -- PA-ENC-SAM-RESPONSE-ENC
+     *                                     -- Key usage of 27
+     *      sam-nonce[4]                INTEGER (0..4294967295),
+     *      ...
+     *  }
+     */
+    private SamResponse decodeSamResponse( DERSequence sequence )
+    {
+    	SamResponseModifier modifier = new SamResponseModifier();
+    	
+    	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.setSamType( tag0.intValue() );
+    				break;
+    			case 1:
+    			    DERBitString tag1 = (DERBitString)derObject;
+    				modifier.setSamFlags( new SamFlags( tag1.getOctets() ) );
+    				break;
+    			case 2:
+    				DERGeneralString tag2 = (DERGeneralString)derObject;
+    				modifier.setSamTrackId( tag2.getString() );
+    				break;
+    			case 3:
+    			    DERSequence tag3 = (DERSequence)derObject;
+    				modifier.setSamEncryptedData( EncryptedDataDecoder.decode( tag3 ) );
+    				break;
+    			case 4:
+    			    DERInteger tag4 = (DERInteger)derObject;
+    				modifier.setSamNonce( tag4.intValue() );
+    				break;
+    		    default:
+    		    	System.out.println( derObject );
+    		    	break;
+    		}
+    	}
+    	
+    	return modifier.getSamResponse();
+    }
+}
+

Added: directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/io/SamResponseEncoder.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/io/SamResponseEncoder.java?rev=178151&view=auto
==============================================================================
--- directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/io/SamResponseEncoder.java (added)
+++ directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/io/SamResponseEncoder.java Tue May 24 03:30:35 2005
@@ -0,0 +1,81 @@
+/*
+ *   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.sam.io;
+
+import java.io.ByteArrayOutputStream;
+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.io.encoder.EncryptedDataEncoder;
+import org.apache.kerberos.sam.messages.SamResponse;
+
+
+public class SamResponseEncoder
+{
+	public byte[] encode( SamResponse samResponse ) throws IOException
+	{
+		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		ASN1OutputStream aos = new ASN1OutputStream( baos );
+		
+		aos.writeObject( encodeSamResponse( samResponse ) );
+		aos.close();
+		
+		return baos.toByteArray();
+	}
+	
+	/**
+	 *  PA-SAM-RESPONSE-2 ::= SEQUENCE {
+	 *      sam-type[0]                 INTEGER (0..4294967295),
+	 *      sam-flags[1]                SAMFlags,
+	 *      sam-track-id[2]             GeneralString OPTIONAL,
+	 *      sam-enc-nonce-or-sad[3]     EncryptedData,
+	 *                                     -- PA-ENC-SAM-RESPONSE-ENC
+	 *                                     -- Key usage of 27
+	 *      sam-nonce[4]                INTEGER (0..4294967295),
+	 *      ...
+	 *  }
+	 */
+	private DERSequence encodeSamResponse( SamResponse samResponse )
+	{
+		DERSequence sequence = new DERSequence();
+		
+		sequence.add( new DERTaggedObject( 0, DERInteger.valueOf( samResponse.getSamType() ) ) );
+		
+		/**
+		 * SAMFlags ::= BIT STRING (SIZE (32..MAX))
+	     *     -- use-sad-as-key(0)
+	     *     -- send-encrypted-sad(1)
+	     *     -- must-pk-encrypt-sad(2)
+		 */
+		sequence.add( new DERTaggedObject( 1, new DERBitString( samResponse.getSamFlags().getBytes() ) ) );
+
+		sequence.add( new DERTaggedObject( 2, DERGeneralString.valueOf( samResponse.getSamTrackId() ) ) );
+		
+		sequence.add( new DERTaggedObject( 3, EncryptedDataEncoder.encodeSequence( samResponse.getSamEncryptedData() ) ) );
+		
+		sequence.add( new DERTaggedObject( 4, DERInteger.valueOf( samResponse.getSamNonce() ) ) );
+		
+		return sequence;
+	}
+}
+

Added: directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/messages/EncryptedSamResponse.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/messages/EncryptedSamResponse.java?rev=178151&view=auto
==============================================================================
--- directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/messages/EncryptedSamResponse.java (added)
+++ directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/messages/EncryptedSamResponse.java Tue May 24 03:30:35 2005
@@ -0,0 +1,56 @@
+/*
+ *   Copyright 2005 The Apache Software Foundation
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+
+package org.apache.kerberos.sam.messages;
+
+/**
+ *  PA-ENC-SAM-RESPONSE-ENC ::= SEQUENCE {
+ *       sam-nonce[0]               INTEGER (0..4294967295),
+ *       sam-sad[1]                 GeneralString OPTIONAL,
+ *       ...
+ *  }
+ */
+public class EncryptedSamResponse
+{
+    private int    samNonce;
+    private String samSad;
+    
+    
+    public EncryptedSamResponse( int samNonce, String samSad )
+    {
+        this.samNonce = samNonce;
+        this.samSad   = samSad;
+    }
+    
+    
+    /**
+     * @return Returns the samNonce.
+     */
+    public int getSamNonce()
+    {
+        return samNonce;
+    }
+    
+    /**
+     * @return Returns the samSad.
+     */
+    public String getSamSad()
+    {
+        return samSad;
+    }
+}
+

Added: directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/messages/EncryptedSamResponseModifier.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/messages/EncryptedSamResponseModifier.java?rev=178151&view=auto
==============================================================================
--- directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/messages/EncryptedSamResponseModifier.java (added)
+++ directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/messages/EncryptedSamResponseModifier.java Tue May 24 03:30:35 2005
@@ -0,0 +1,53 @@
+/*
+ *   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.sam.messages;
+
+/**
+ *  PA-ENC-SAM-RESPONSE-ENC ::= SEQUENCE {
+ *       sam-nonce[0]               INTEGER (0..4294967295),
+ *       sam-sad[1]                 GeneralString OPTIONAL,
+ *       ...
+ *  }
+ */
+public class EncryptedSamResponseModifier
+{
+    private int    samNonce;
+    private String samSad;
+    
+    public EncryptedSamResponse getEncryptedSamResponse()
+    {
+        return new EncryptedSamResponse( samNonce, samSad );
+    }
+    
+    /**
+     * @param samNonce The samNonce to set.
+     */
+    public void setSamNonce( int samNonce )
+    {
+        this.samNonce = samNonce;
+    }
+    
+    /**
+     * @param samSad The samSad to set.
+     */
+    public void setSamSad( String samSad )
+    {
+        this.samSad = samSad;
+    }
+}
+

Added: directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/messages/SamChallenge.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/messages/SamChallenge.java?rev=178151&view=auto
==============================================================================
--- directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/messages/SamChallenge.java (added)
+++ directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/messages/SamChallenge.java Tue May 24 03:30:35 2005
@@ -0,0 +1,167 @@
+/*
+ *   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.sam.messages;
+
+import org.apache.kerberos.messages.value.Checksum;
+
+/**
+ *        PA-SAM-CHALLENGE-2 ::= SEQUENCE {
+ *            sam-body[0]                 PA-SAM-CHALLENGE-2-BODY,
+ *            sam-cksum[1]                SEQUENCE (1..MAX) OF Checksum,
+ *            ...
+ *        }
+ * 
+ *        PA-SAM-CHALLENGE-2-BODY ::= SEQUENCE {
+ *            sam-type[0]                 INTEGER (0..4294967295),
+ *            sam-flags[1]                SAMFlags,
+ *            sam-type-name[2]            GeneralString OPTIONAL,
+ *            sam-track-id[3]             GeneralString OPTIONAL,
+ *                                          -- Key usage of 26
+ *            sam-challenge-label[4]      GeneralString OPTIONAL,
+ *            sam-challenge[5]            GeneralString OPTIONAL,
+ *            sam-response-prompt[6]      GeneralString OPTIONAL,
+ *            sam-pk-for-sad[7]           OCTET STRING OPTIONAL,
+ *            sam-nonce[8]                INTEGER (0..4294967295),
+ *            sam-etype[9]                INTEGER (0..4294967295),
+ *            ...
+ *        }
+ */
+public class SamChallenge
+{
+    private int      samType;
+    private SamFlags samFlags;
+    private String   samTypeName;
+    private String   samTrackId;
+    private String   samChallengeLabel;
+    private String   samChallenge;
+    private String   samResponsePrompt;
+    private byte[]   samPkForSad;
+    private int      samNonce;
+    private int      samEncryptionType;
+    
+    private Checksum[] samChecksums;
+    
+    
+    public SamChallenge( int samType, SamFlags samFlags, String samTypeName,
+            String samTrackId, String samChallengeLabel, String samChallenge,
+            String samResponsePrompt, byte[] samPkForSad, int samNonce,
+            int samEncryptionType, Checksum[] samChecksums )
+    {
+        this.samType           = samType;
+        this.samFlags          = samFlags;
+        this.samTypeName       = samTypeName;
+        this.samTrackId        = samTrackId;
+        this.samChallengeLabel = samChallengeLabel;
+        this.samChallenge      = samChallenge;
+        this.samResponsePrompt = samResponsePrompt;
+        this.samPkForSad       = samPkForSad;
+        this.samNonce          = samNonce;
+        this.samEncryptionType = samEncryptionType;
+        this.samChecksums      = samChecksums;
+    }
+    
+    
+    /**
+     * @return Returns the samChallenge.
+     */
+    public String getSamChallenge()
+    {
+        return samChallenge;
+    }
+    
+    /**
+     * @return Returns the samChallengeLabel.
+     */
+    public String getSamChallengeLabel()
+    {
+        return samChallengeLabel;
+    }
+    
+    /**
+     * @return Returns the samEncryptionType.
+     */
+    public int getSamEncryptionType()
+    {
+        return samEncryptionType;
+    }
+    
+    /**
+     * @return Returns the samFlags.
+     */
+    public SamFlags getSamFlags()
+    {
+        return samFlags;
+    }
+    
+    /**
+     * @return Returns the samNonce.
+     */
+    public int getSamNonce()
+    {
+        return samNonce;
+    }
+    
+    /**
+     * @return Returns the samPkForSad.
+     */
+    public byte[] getSamPkForSad()
+    {
+        return samPkForSad;
+    }
+    
+    /**
+     * @return Returns the samResponsePrompt.
+     */
+    public String getSamResponsePrompt()
+    {
+        return samResponsePrompt;
+    }
+    
+    /**
+     * @return Returns the samTrackId.
+     */
+    public String getSamTrackId()
+    {
+        return samTrackId;
+    }
+    
+    /**
+     * @return Returns the samType.
+     */
+    public int getSamType()
+    {
+        return samType;
+    }
+    
+    /**
+     * @return Returns the samTypeName.
+     */
+    public String getSamTypeName()
+    {
+        return samTypeName;
+    }
+    
+    /**
+     * @return Returns the samChecksums.
+     */
+    public Checksum[] getSamChecksums()
+    {
+        return samChecksums;
+    }
+}
+

Added: directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/messages/SamChallengeModifier.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/messages/SamChallengeModifier.java?rev=178151&view=auto
==============================================================================
--- directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/messages/SamChallengeModifier.java (added)
+++ directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/messages/SamChallengeModifier.java Tue May 24 03:30:35 2005
@@ -0,0 +1,159 @@
+/*
+ *   Copyright 2005 The Apache Software Foundation
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+
+package org.apache.kerberos.sam.messages;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.kerberos.messages.value.Checksum;
+
+/**
+ *        PA-SAM-CHALLENGE-2 ::= SEQUENCE {
+ *            sam-body[0]                 PA-SAM-CHALLENGE-2-BODY,
+ *            sam-cksum[1]                SEQUENCE (1..MAX) OF Checksum,
+ *            ...
+ *        }
+ * 
+ *        PA-SAM-CHALLENGE-2-BODY ::= SEQUENCE {
+ *            sam-type[0]                 INTEGER (0..4294967295),
+ *            sam-flags[1]                SAMFlags,
+ *            sam-type-name[2]            GeneralString OPTIONAL,
+ *            sam-track-id[3]             GeneralString OPTIONAL,
+ *                                          -- Key usage of 26
+ *            sam-challenge-label[4]      GeneralString OPTIONAL,
+ *            sam-challenge[5]            GeneralString OPTIONAL,
+ *            sam-response-prompt[6]      GeneralString OPTIONAL,
+ *            sam-pk-for-sad[7]           OCTET STRING OPTIONAL,
+ *            sam-nonce[8]                INTEGER (0..4294967295),
+ *            sam-etype[9]                INTEGER (0..4294967295),
+ *            ...
+ *        }
+ */
+public class SamChallengeModifier
+{
+    private int      samType;
+    private SamFlags samFlags;
+    private String   samTypeName;
+    private String   samTrackId;
+    private String   samChallengeLabel;
+    private String   samChallenge;
+    private String   samResponsePrompt;
+    private byte[]   samPkForSad;
+    private int      samNonce;
+    private int      samEncryptionType;
+    
+    private List checksums = new ArrayList();
+    
+    public SamChallenge getSamChallenge()
+    {
+		Checksum[] samChecksums = (Checksum[])checksums.toArray( new Checksum[ checksums.size() ] );
+        
+        return new SamChallenge( samType, samFlags, samTypeName, samTrackId,
+                samChallengeLabel, samChallenge, samResponsePrompt,
+                samPkForSad, samNonce, samEncryptionType, samChecksums );
+    }
+    
+    /**
+     * @param samChallenge The samChallenge to set.
+     */
+    public void setSamChallenge( String samChallenge )
+    {
+        this.samChallenge = samChallenge;
+    }
+    
+    /**
+     * @param samChallengeLabel The samChallengeLabel to set.
+     */
+    public void setSamChallengeLabel( String samChallengeLabel )
+    {
+        this.samChallengeLabel = samChallengeLabel;
+    }
+    
+    /**
+     * @param samEncryptionType The samEncryptionType to set.
+     */
+    public void setSamEncryptionType( int samEncryptionType )
+    {
+        this.samEncryptionType = samEncryptionType;
+    }
+    
+    /**
+     * @param samFlags The samFlags to set.
+     */
+    public void setSamFlags( SamFlags samFlags )
+    {
+        this.samFlags = samFlags;
+    }
+    
+    /**
+     * @param samNonce The samNonce to set.
+     */
+    public void setSamNonce( int samNonce )
+    {
+        this.samNonce = samNonce;
+    }
+    
+    /**
+     * @param samPkForSad The samPkForSad to set.
+     */
+    public void setSamPkForSad( byte[] samPkForSad )
+    {
+        this.samPkForSad = samPkForSad;
+    }
+    
+    /**
+     * @param samResponsePrompt The samResponsePrompt to set.
+     */
+    public void setSamResponsePrompt( String samResponsePrompt )
+    {
+        this.samResponsePrompt = samResponsePrompt;
+    }
+    
+    /**
+     * @param samTrackId The samTrackId to set.
+     */
+    public void setSamTrackId( String samTrackId )
+    {
+        this.samTrackId = samTrackId;
+    }
+    
+    /**
+     * @param samType The samType to set.
+     */
+    public void setSamType( int samType )
+    {
+        this.samType = samType;
+    }
+    
+    /**
+     * @param samTypeName The samTypeName to set.
+     */
+    public void setSamTypeName( String samTypeName )
+    {
+        this.samTypeName = samTypeName;
+    }
+    
+    /**
+     * @param Checksum The Checksum to add.
+     */
+    public void addChecksum( Checksum checksum )
+    {
+        this.checksums.add( checksum );
+    }
+}
+

Added: directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/messages/SamFlags.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/messages/SamFlags.java?rev=178151&view=auto
==============================================================================
--- directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/messages/SamFlags.java (added)
+++ directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/messages/SamFlags.java Tue May 24 03:30:35 2005
@@ -0,0 +1,71 @@
+/*
+ *   Copyright 2005 The Apache Software Foundation
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+
+package org.apache.kerberos.sam.messages;
+
+import org.apache.kerberos.messages.value.Options;
+
+/**
+ *  SAMFlags ::= BIT STRING (SIZE (32..MAX))
+ *      -- use-sad-as-key(0)
+ *      -- send-encrypted-sad(1)
+ *      -- must-pk-encrypt-sad(2)
+ */
+public class SamFlags extends Options
+{
+    // SAM flag - use the data as the key
+	public static final int USE_SAD_AS_KEY      = 0;
+    // SAM flag - request that encrypted authentication data be returned
+	public static final int SEND_ENCRYPTED_SAD  = 1;
+    // SAM flag - reserved for future use
+	public static final int MUST_PK_ENCRYPT_SAD = 2;
+	
+    // SAM flag - maximum value
+	public static final int MAX_VALUE           = 32;
+	
+    /**
+     * Class constructors
+     */
+	public SamFlags()
+	{
+		super( MAX_VALUE );
+	}
+	
+	public SamFlags( byte[] options )
+	{
+		super( MAX_VALUE );
+		setBytes( options );
+	}
+	
+	/**
+	 * Converts the object to a printable string
+	 */
+	public String toString()
+	{
+		StringBuffer result = new StringBuffer();
+		
+		if ( get( USE_SAD_AS_KEY ) )
+			result.append( "USE_SAD_AS_KEY " );
+		if ( get( SEND_ENCRYPTED_SAD ) )
+			result.append( "SEND_ENCRYPTED_SAD " );
+		if ( get( MUST_PK_ENCRYPT_SAD ) )
+			result.append( "MUST_PK_ENCRYPT_SAD " );
+		
+		return result.toString().trim();
+	}
+}
+

Added: directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/messages/SamResponse.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/messages/SamResponse.java?rev=178151&view=auto
==============================================================================
--- directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/messages/SamResponse.java (added)
+++ directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/messages/SamResponse.java Tue May 24 03:30:35 2005
@@ -0,0 +1,94 @@
+/*
+ *   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.sam.messages;
+
+import org.apache.kerberos.messages.value.EncryptedData;
+
+/**
+ *  PA-SAM-RESPONSE-2 ::= SEQUENCE {
+ *      sam-type[0]                 INTEGER (0..4294967295),
+ *      sam-flags[1]                SAMFlags,
+ *      sam-track-id[2]             GeneralString OPTIONAL,
+ *      sam-enc-nonce-or-sad[3]     EncryptedData,
+ *                                     -- PA-ENC-SAM-RESPONSE-ENC
+ *                                     -- Key usage of 27
+ *      sam-nonce[4]                INTEGER (0..4294967295),
+ *      ...
+ *  }
+ */
+public class SamResponse
+{
+    private int           samType;
+    private SamFlags      samFlags;
+    private String        samTrackId;
+    private EncryptedData samEncryptedData;
+    private int           samNonce;
+    
+    
+    public SamResponse( int samType, SamFlags samFlags, String samTrackId,
+            EncryptedData samEncryptedData, int samNonce )
+    {
+        this.samType          = samType;
+        this.samFlags         = samFlags;
+        this.samTrackId       = samTrackId;
+        this.samEncryptedData = samEncryptedData;
+        this.samNonce         = samNonce;
+    }
+    
+    
+    /**
+     * @return Returns the samEncryptedData.
+     */
+    public EncryptedData getSamEncryptedData()
+    {
+        return samEncryptedData;
+    }
+    
+    /**
+     * @return Returns the samFlags.
+     */
+    public SamFlags getSamFlags()
+    {
+        return samFlags;
+    }
+    
+    /**
+     * @return Returns the samNonce.
+     */
+    public int getSamNonce()
+    {
+        return samNonce;
+    }
+    
+    /**
+     * @return Returns the samTrackId.
+     */
+    public String getSamTrackId()
+    {
+        return samTrackId;
+    }
+    
+    /**
+     * @return Returns the samType.
+     */
+    public int getSamType()
+    {
+        return samType;
+    }
+}
+

Added: directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/messages/SamResponseModifier.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/messages/SamResponseModifier.java?rev=178151&view=auto
==============================================================================
--- directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/messages/SamResponseModifier.java (added)
+++ directory/sandbox/trunk/kerberos-sam/trunk/sam/src/main/java/org/apache/kerberos/sam/messages/SamResponseModifier.java Tue May 24 03:30:35 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.sam.messages;
+
+import org.apache.kerberos.messages.value.EncryptedData;
+
+/**
+ *  PA-SAM-RESPONSE-2 ::= SEQUENCE {
+ *      sam-type[0]                 INTEGER (0..4294967295),
+ *      sam-flags[1]                SAMFlags,
+ *      sam-track-id[2]             GeneralString OPTIONAL,
+ *      sam-enc-nonce-or-sad[3]     EncryptedData,
+ *                                     -- PA-ENC-SAM-RESPONSE-ENC
+ *                                     -- Key usage of 27
+ *      sam-nonce[4]                INTEGER (0..4294967295),
+ *      ...
+ *  }
+ */
+public class SamResponseModifier
+{
+    private int           samType;
+    private SamFlags      samFlags;
+    private String        samTrackId;
+    private EncryptedData samEncryptedData;
+    private int           samNonce;
+    
+    
+    public SamResponse getSamResponse()
+    {
+        return new SamResponse( samType, samFlags, samTrackId,
+                samEncryptedData, samNonce );
+    }
+    
+    /**
+     * @param samEncryptedData The samEncryptedData to set.
+     */
+    public void setSamEncryptedData( EncryptedData samEncryptedData )
+    {
+        this.samEncryptedData = samEncryptedData;
+    }
+    
+    /**
+     * @param samFlags The samFlags to set.
+     */
+    public void setSamFlags( SamFlags samFlags )
+    {
+        this.samFlags = samFlags;
+    }
+    
+    /**
+     * @param samNonce The samNonce to set.
+     */
+    public void setSamNonce( int samNonce )
+    {
+        this.samNonce = samNonce;
+    }
+    
+    /**
+     * @param samTrackId The samTrackId to set.
+     */
+    public void setSamTrackId( String samTrackId )
+    {
+        this.samTrackId = samTrackId;
+    }
+    
+    /**
+     * @param samType The samType to set.
+     */
+    public void setSamType( int samType )
+    {
+        this.samType = samType;
+    }
+}
+