jdk/src/share/classes/sun/security/krb5/internal/Authenticator.java
changeset 73 cf334423502b
parent 2 90ce3da70b43
child 5506 202f599c92aa
--- a/jdk/src/share/classes/sun/security/krb5/internal/Authenticator.java	Tue Mar 04 17:09:09 2008 +0000
+++ b/jdk/src/share/classes/sun/security/krb5/internal/Authenticator.java	Wed Mar 05 09:52:50 2008 +0800
@@ -34,6 +34,7 @@
 import java.util.Vector;
 import java.io.IOException;
 import java.math.BigInteger;
+
 /**
  * Implements the ASN.1 Authenticator type.
  *
@@ -58,6 +59,7 @@
  * http://www.ietf.org/rfc/rfc4120.txt</a>.
  */
 public class Authenticator {
+
     public int authenticator_vno;
     public Realm crealm;
     public PrincipalName cname;
@@ -68,137 +70,145 @@
     Integer seqNumber; //optional
     public AuthorizationData authorizationData; //optional
 
-        public Authenticator (
-                Realm new_crealm,
-                PrincipalName new_cname,
-                Checksum new_cksum,
-                int new_cusec,
-                KerberosTime new_ctime,
-                EncryptionKey new_subKey,
-                Integer new_seqNumber,
-                AuthorizationData new_authorizationData
-        ) {
-                authenticator_vno = Krb5.AUTHNETICATOR_VNO;
-                crealm = new_crealm;
-                cname = new_cname;
-                cksum = new_cksum;
-                cusec = new_cusec;
-                ctime = new_ctime;
-                subKey = new_subKey;
-                seqNumber = new_seqNumber;
-                authorizationData = new_authorizationData;
-        }
+    public Authenticator(
+            Realm new_crealm,
+            PrincipalName new_cname,
+            Checksum new_cksum,
+            int new_cusec,
+            KerberosTime new_ctime,
+            EncryptionKey new_subKey,
+            Integer new_seqNumber,
+            AuthorizationData new_authorizationData) {
+        authenticator_vno = Krb5.AUTHNETICATOR_VNO;
+        crealm = new_crealm;
+        cname = new_cname;
+        cksum = new_cksum;
+        cusec = new_cusec;
+        ctime = new_ctime;
+        subKey = new_subKey;
+        seqNumber = new_seqNumber;
+        authorizationData = new_authorizationData;
+    }
 
-        public Authenticator(byte[] data)
-                throws Asn1Exception, IOException, KrbApErrException, RealmException {
-                init(new DerValue(data));
-        }
+    public Authenticator(byte[] data)
+            throws Asn1Exception, IOException, KrbApErrException, RealmException {
+        init(new DerValue(data));
+    }
 
-        public Authenticator(DerValue encoding)
-                throws Asn1Exception,IOException, KrbApErrException, RealmException {
-                init(encoding);
-        }
+    public Authenticator(DerValue encoding)
+            throws Asn1Exception, IOException, KrbApErrException, RealmException {
+        init(encoding);
+    }
 
-        /**
-         * Initializes an Authenticator object.
-         * @param encoding a single DER-encoded value.
-         * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data.
-         * @exception IOException if an I/O error occurs while reading encoded data.
-         * @exception KrbApErrException if the value read from the DER-encoded data
-         *  stream does not match the pre-defined value.
-         * @exception RealmException if an error occurs while parsing a Realm object.
-         */
-        private void init(DerValue encoding)
-                throws Asn1Exception, IOException, KrbApErrException, RealmException {
-                DerValue der, subDer;
-                        //may not be the correct error code for a tag
-                        //mismatch on an encrypted structure
-        if (((encoding.getTag() & (byte)0x1F) != (byte)0x02)
-             || (encoding.isApplication() != true)
-                        || (encoding.isConstructed() != true))
-                        throw new Asn1Exception(Krb5.ASN1_BAD_ID);
-                der = encoding.getData().getDerValue();
-        if (der.getTag() != DerValue.tag_Sequence)
+    /**
+     * Initializes an Authenticator object.
+     * @param encoding a single DER-encoded value.
+     * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data.
+     * @exception IOException if an I/O error occurs while reading encoded data.
+     * @exception KrbApErrException if the value read from the DER-encoded data
+     *  stream does not match the pre-defined value.
+     * @exception RealmException if an error occurs while parsing a Realm object.
+     */
+    private void init(DerValue encoding)
+            throws Asn1Exception, IOException, KrbApErrException, RealmException {
+        DerValue der, subDer;
+        //may not be the correct error code for a tag
+        //mismatch on an encrypted structure
+        if (((encoding.getTag() & (byte) 0x1F) != (byte) 0x02)
+                || (encoding.isApplication() != true)
+                || (encoding.isConstructed() != true)) {
+            throw new Asn1Exception(Krb5.ASN1_BAD_ID);
+        }
+        der = encoding.getData().getDerValue();
+        if (der.getTag() != DerValue.tag_Sequence) {
+            throw new Asn1Exception(Krb5.ASN1_BAD_ID);
+        }
+        subDer = der.getData().getDerValue();
+        if ((subDer.getTag() & (byte) 0x1F) != (byte) 0x00) {
             throw new Asn1Exception(Krb5.ASN1_BAD_ID);
-                subDer = der.getData().getDerValue();
-                if ((subDer.getTag() & (byte)0x1F) != (byte)0x00)
-                        throw new Asn1Exception(Krb5.ASN1_BAD_ID);
+        }
         authenticator_vno = subDer.getData().getBigInteger().intValue();
-                if (authenticator_vno != 5)
+        if (authenticator_vno != 5) {
             throw new KrbApErrException(Krb5.KRB_AP_ERR_BADVERSION);
-                crealm = Realm.parse(der.getData(), (byte)0x01, false);
-                cname = PrincipalName.parse(der.getData(), (byte)0x02, false);
-                cksum = Checksum.parse(der.getData(), (byte)0x03, true);
+        }
+        crealm = Realm.parse(der.getData(), (byte) 0x01, false);
+        cname = PrincipalName.parse(der.getData(), (byte) 0x02, false);
+        cksum = Checksum.parse(der.getData(), (byte) 0x03, true);
+        subDer = der.getData().getDerValue();
+        if ((subDer.getTag() & (byte) 0x1F) == 0x04) {
+            cusec = subDer.getData().getBigInteger().intValue();
+        } else {
+            throw new Asn1Exception(Krb5.ASN1_BAD_ID);
+        }
+        ctime = KerberosTime.parse(der.getData(), (byte) 0x05, false);
+        if (der.getData().available() > 0) {
+            subKey = EncryptionKey.parse(der.getData(), (byte) 0x06, true);
+        } else {
+            subKey = null;
+            seqNumber = null;
+            authorizationData = null;
+        }
+        if (der.getData().available() > 0) {
+            if ((der.getData().peekByte() & 0x1F) == 0x07) {
                 subDer = der.getData().getDerValue();
-                if ((subDer.getTag() & (byte)0x1F) == 0x04) {
-                        cusec = subDer.getData().getBigInteger().intValue();
+                if ((subDer.getTag() & (byte) 0x1F) == (byte) 0x07) {
+                    seqNumber = new Integer(subDer.getData().getBigInteger().intValue());
                 }
-                else throw new Asn1Exception(Krb5.ASN1_BAD_ID);
-                ctime = KerberosTime.parse(der.getData(), (byte)0x05, false);
-                if (der.getData().available() > 0) {
-                        subKey = EncryptionKey.parse(der.getData(), (byte)0x06, true);
-                }
-                else {
-                        subKey = null;
-                        seqNumber = null;
-                        authorizationData = null;
-                }
-                if (der.getData().available() > 0) {
-                        if ((der.getData().peekByte() & 0x1F) == 0x07) {
-                                subDer = der.getData().getDerValue();
-                                if ((subDer.getTag() & (byte)0x1F) == (byte)0x07)
-                                        seqNumber = new Integer(subDer.getData().getBigInteger().intValue());
-                        }
-                }
-                else {
-                        seqNumber = null;
-                        authorizationData = null;
-                }
-                if (der.getData().available() > 0) {
-                        authorizationData = AuthorizationData.parse(der.getData(), (byte)0x08, true);
-                }
-                else authorizationData = null;
-                if (der.getData().available() > 0)
-                        throw new Asn1Exception(Krb5.ASN1_BAD_ID);
+            }
+        } else {
+            seqNumber = null;
+            authorizationData = null;
         }
+        if (der.getData().available() > 0) {
+            authorizationData = AuthorizationData.parse(der.getData(), (byte) 0x08, true);
+        } else {
+            authorizationData = null;
+        }
+        if (der.getData().available() > 0) {
+            throw new Asn1Exception(Krb5.ASN1_BAD_ID);
+        }
+    }
 
-        /**
-         * Encodes an Authenticator object.
-         * @return byte array of encoded Authenticator object.
-         * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data.
-         * @exception IOException if an I/O error occurs while reading encoded data.
-         */
-        public byte[] asn1Encode() throws Asn1Exception, IOException {
-                Vector<DerValue> v = new Vector<DerValue> ();
-                DerOutputStream temp = new DerOutputStream();
-                temp.putInteger(BigInteger.valueOf(authenticator_vno));
-                v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x00), temp.toByteArray()));
-                v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x01), crealm.asn1Encode()));
-                v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x02), cname.asn1Encode()));
-                if (cksum != null)
-                        v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x03), cksum.asn1Encode()));
-                temp = new DerOutputStream();
-                temp.putInteger(BigInteger.valueOf(cusec));
-                v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x04), temp.toByteArray()));
-                v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x05), ctime.asn1Encode()));
-                if (subKey != null)
-                        v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x06), subKey.asn1Encode()));
-                if (seqNumber != null)   {
-                        temp = new DerOutputStream();
-                        // encode as an unsigned integer (UInt32)
-                        temp.putInteger(BigInteger.valueOf(seqNumber.longValue()));
-                        v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x07), temp.toByteArray()));
-                }
-                if (authorizationData != null)
-                        v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x08), authorizationData.asn1Encode()));
-                DerValue der[] = new DerValue[v.size()];
-                v.copyInto(der);
-                temp = new DerOutputStream();
-                temp.putSequence(der);
-                DerOutputStream out = new DerOutputStream();
-                out.write(DerValue.createTag(DerValue.TAG_APPLICATION, true, (byte)0x02), temp);
-                return out.toByteArray();
+    /**
+     * Encodes an Authenticator object.
+     * @return byte array of encoded Authenticator object.
+     * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data.
+     * @exception IOException if an I/O error occurs while reading encoded data.
+     */
+    public byte[] asn1Encode() throws Asn1Exception, IOException {
+        Vector<DerValue> v = new Vector<DerValue>();
+        DerOutputStream temp = new DerOutputStream();
+        temp.putInteger(BigInteger.valueOf(authenticator_vno));
+        v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x00), temp.toByteArray()));
+        v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x01), crealm.asn1Encode()));
+        v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x02), cname.asn1Encode()));
+        if (cksum != null) {
+            v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x03), cksum.asn1Encode()));
         }
+        temp = new DerOutputStream();
+        temp.putInteger(BigInteger.valueOf(cusec));
+        v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x04), temp.toByteArray()));
+        v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x05), ctime.asn1Encode()));
+        if (subKey != null) {
+            v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x06), subKey.asn1Encode()));
+        }
+        if (seqNumber != null) {
+            temp = new DerOutputStream();
+            // encode as an unsigned integer (UInt32)
+            temp.putInteger(BigInteger.valueOf(seqNumber.longValue()));
+            v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x07), temp.toByteArray()));
+        }
+        if (authorizationData != null) {
+            v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x08), authorizationData.asn1Encode()));
+        }
+        DerValue der[] = new DerValue[v.size()];
+        v.copyInto(der);
+        temp = new DerOutputStream();
+        temp.putSequence(der);
+        DerOutputStream out = new DerOutputStream();
+        out.write(DerValue.createTag(DerValue.TAG_APPLICATION, true, (byte) 0x02), temp);
+        return out.toByteArray();
+    }
 
     public final Checksum getChecksum() {
         return cksum;
@@ -211,5 +221,4 @@
     public final EncryptionKey getSubKey() {
         return subKey;
     }
-
 }