You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by dr...@apache.org on 2015/01/22 22:47:53 UTC

[14/45] directory-kerberos git commit: DIRKRB-149 New layout structure with the new name "Apache Kerby"

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/ceacb982/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/fast/KrbFastReq.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/fast/KrbFastReq.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/fast/KrbFastReq.java
new file mode 100644
index 0000000..f4d6b3b
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/fast/KrbFastReq.java
@@ -0,0 +1,78 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.kerby.kerberos.kerb.spec.fast;
+
+import org.apache.kerby.asn1.type.Asn1FieldInfo;
+import org.apache.kerby.kerberos.kerb.spec.KrbSequenceType;
+import org.apache.kerby.kerberos.kerb.spec.common.EncryptedData;
+import org.apache.kerby.kerberos.kerb.spec.pa.PaData;
+
+/**
+ KrbFastReq ::= SEQUENCE {
+     fast-options [0] FastOptions,
+     -- Additional options.
+     padata       [1] SEQUENCE OF PA-DATA,
+     -- padata typed holes.
+     req-body     [2] KDC-REQ-BODY,
+     -- Contains the KDC request body as defined in Section
+     -- 5.4.1 of [RFC4120].
+     -- This req-body field is preferred over the outer field
+     -- in the KDC request.
+ }
+ */
+public class KrbFastReq extends KrbSequenceType {
+    private static int FAST_OPTIONS = 0;
+    private static int PADATA = 1;
+    private static int REQ_BODY = 2;
+
+    static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
+            new Asn1FieldInfo(FAST_OPTIONS, KrbFastArmor.class),
+            new Asn1FieldInfo(PADATA, PaData.class),
+            new Asn1FieldInfo(REQ_BODY, EncryptedData.class),
+    };
+
+    public KrbFastReq() {
+        super(fieldInfos);
+    }
+
+    public KrbFastArmor getArmor() {
+        return getFieldAs(FAST_OPTIONS, KrbFastArmor.class);
+    }
+
+    public void setArmor(KrbFastArmor armor) {
+        setFieldAs(FAST_OPTIONS, armor);
+    }
+
+    public PaData getPaData() {
+        return getFieldAs(PADATA, PaData.class);
+    }
+
+    public void setPaData(PaData paData) {
+        setFieldAs(PADATA, paData);
+    }
+
+    public EncryptedData getEncFastReq() {
+        return getFieldAs(REQ_BODY, EncryptedData.class);
+    }
+
+    public void setEncFastReq(EncryptedData encFastReq) {
+        setFieldAs(REQ_BODY, encFastReq);
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/ceacb982/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/fast/KrbFastResponse.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/fast/KrbFastResponse.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/fast/KrbFastResponse.java
new file mode 100644
index 0000000..4ce3150
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/fast/KrbFastResponse.java
@@ -0,0 +1,90 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.kerby.kerberos.kerb.spec.fast;
+
+import org.apache.kerby.asn1.type.Asn1FieldInfo;
+import org.apache.kerby.asn1.type.Asn1Integer;
+import org.apache.kerby.kerberos.kerb.spec.KrbSequenceType;
+import org.apache.kerby.kerberos.kerb.spec.common.EncryptionKey;
+import org.apache.kerby.kerberos.kerb.spec.pa.PaData;
+
+/**
+ KrbFastResponse ::= SEQUENCE {
+     padata         [0] SEQUENCE OF PA-DATA,
+     -- padata typed holes.
+     strengthen-key [1] EncryptionKey OPTIONAL,
+     -- This, if present, strengthens the reply key for AS and
+     -- TGS. MUST be present for TGS.
+     -- MUST be absent in KRB-ERROR.
+     finished       [2] KrbFastFinished OPTIONAL,
+     -- Present in AS or TGS reply; absent otherwise.
+     nonce          [3] UInt32,
+     -- Nonce from the client request.
+ }
+ */
+public class KrbFastResponse extends KrbSequenceType {
+    private static int PADATA = 0;
+    private static int STRENGTHEN_KEY = 1;
+    private static int FINISHED = 2;
+    private static int NONCE = 3;
+
+    static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
+            new Asn1FieldInfo(PADATA, PaData.class),
+            new Asn1FieldInfo(STRENGTHEN_KEY, EncryptionKey.class),
+            new Asn1FieldInfo(FINISHED, KrbFastFinished.class),
+            new Asn1FieldInfo(NONCE, Asn1Integer.class)
+    };
+
+    public KrbFastResponse() {
+        super(fieldInfos);
+    }
+
+    public PaData getPaData() {
+        return getFieldAs(PADATA, PaData.class);
+    }
+
+    public void setPaData(PaData paData) {
+        setFieldAs(PADATA, paData);
+    }
+
+    public EncryptionKey getStrengthenKey() {
+        return getFieldAs(STRENGTHEN_KEY, EncryptionKey.class);
+    }
+
+    public void setStrengthenKey(EncryptionKey strengthenKey) {
+        setFieldAs(STRENGTHEN_KEY, strengthenKey);
+    }
+
+    public KrbFastFinished getFastFinished() {
+        return getFieldAs(FINISHED, KrbFastFinished.class);
+    }
+
+    public void setFastFinished(KrbFastFinished fastFinished) {
+        setFieldAs(FINISHED, fastFinished);
+    }
+
+    public int getNonce() {
+        return getFieldAsInt(NONCE);
+    }
+
+    public void setNonce(int nonce) {
+        setFieldAsInt(NONCE, nonce);
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/ceacb982/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/fast/PaAuthnEntry.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/fast/PaAuthnEntry.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/fast/PaAuthnEntry.java
new file mode 100644
index 0000000..b327402
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/fast/PaAuthnEntry.java
@@ -0,0 +1,80 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.kerby.kerberos.kerb.spec.fast;
+
+import org.apache.kerby.asn1.type.Asn1FieldInfo;
+import org.apache.kerby.asn1.type.Asn1Integer;
+import org.apache.kerby.asn1.type.Asn1OctetString;
+import org.apache.kerby.kerberos.kerb.spec.KrbSequenceType;
+import org.apache.kerby.kerberos.kerb.spec.pa.PaDataType;
+
+/**
+ PA-AUTHENTICATION-SET-ELEM ::= SEQUENCE {
+     pa-type      [0] Int32,
+     pa-hint      [1] OCTET STRING OPTIONAL,
+     pa-value     [2] OCTET STRING OPTIONAL,
+ }
+ */
+public class PaAuthnEntry extends KrbSequenceType {
+    private static int PA_TYPE = 0;
+    private static int PA_HINT = 1;
+    private static int PA_VALUE = 2;
+
+    static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
+            new Asn1FieldInfo(PA_TYPE, Asn1Integer.class),
+            new Asn1FieldInfo(PA_HINT, Asn1OctetString.class),
+            new Asn1FieldInfo(PA_VALUE, Asn1OctetString.class)
+    };
+
+    public PaAuthnEntry() {
+        super(fieldInfos);
+    }
+
+    public PaAuthnEntry(PaDataType type, byte[] paData) {
+        this();
+        setPaType(type);
+        setPaValue(paData);
+    }
+
+    public PaDataType getPaType() {
+        Integer value = getFieldAsInteger(PA_TYPE);
+        return PaDataType.fromValue(value);
+    }
+
+    public void setPaType(PaDataType paDataType) {
+        setFieldAsInt(PA_TYPE, paDataType.getValue());
+    }
+
+    public byte[] getPaHint() {
+        return getFieldAsOctets(PA_HINT);
+    }
+
+    public void setPaHint(byte[] paHint) {
+        setFieldAsOctets(PA_HINT, paHint);
+    }
+
+    public byte[] getPaValue() {
+        return getFieldAsOctets(PA_VALUE);
+    }
+
+    public void setPaValue(byte[] paValue) {
+        setFieldAsOctets(PA_VALUE, paValue);
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/ceacb982/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/fast/PaAuthnSet.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/fast/PaAuthnSet.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/fast/PaAuthnSet.java
new file mode 100644
index 0000000..ad3330d
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/fast/PaAuthnSet.java
@@ -0,0 +1,29 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.kerby.kerberos.kerb.spec.fast;
+
+import org.apache.kerby.kerberos.kerb.spec.KrbSequenceOfType;
+
+/**
+ PA-AUTHENTICATION-SET ::= SEQUENCE OF PA-AUTHENTICATION-SET-ELEM
+ */
+public class PaAuthnSet extends KrbSequenceOfType<PaAuthnEntry> {
+
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/ceacb982/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/fast/PaFxFastReply.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/fast/PaFxFastReply.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/fast/PaFxFastReply.java
new file mode 100644
index 0000000..6023886
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/fast/PaFxFastReply.java
@@ -0,0 +1,48 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.kerby.kerberos.kerb.spec.fast;
+
+import org.apache.kerby.asn1.type.Asn1Choice;
+import org.apache.kerby.asn1.type.Asn1FieldInfo;
+
+/**
+ PA-FX-FAST-REPLY ::= CHOICE {
+    armored-data [0] KrbFastArmoredRep,
+ }
+ */
+public class PaFxFastReply extends Asn1Choice {
+    private static int ARMORED_DATA = 0;
+
+    static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
+            new Asn1FieldInfo(ARMORED_DATA, KrbFastArmoredRep.class)
+    };
+
+    public PaFxFastReply() {
+        super(fieldInfos);
+    }
+
+    public KrbFastArmoredRep getFastArmoredRep() {
+        return getFieldAs(ARMORED_DATA, KrbFastArmoredRep.class);
+    }
+
+    public void setFastArmoredRep(KrbFastArmoredRep fastArmoredRep) {
+        setFieldAs(ARMORED_DATA, fastArmoredRep);
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/ceacb982/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/fast/PaFxFastRequest.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/fast/PaFxFastRequest.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/fast/PaFxFastRequest.java
new file mode 100644
index 0000000..148d222
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/fast/PaFxFastRequest.java
@@ -0,0 +1,48 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.kerby.kerberos.kerb.spec.fast;
+
+import org.apache.kerby.asn1.type.Asn1Choice;
+import org.apache.kerby.asn1.type.Asn1FieldInfo;
+
+/**
+ PA-FX-FAST-REQUEST ::= CHOICE {
+    armored-data [0] KrbFastArmoredReq,
+ }
+ */
+public class PaFxFastRequest extends Asn1Choice {
+    private static int ARMORED_DATA = 0;
+
+    static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
+            new Asn1FieldInfo(ARMORED_DATA, KrbFastArmoredReq.class)
+    };
+
+    public PaFxFastRequest() {
+        super(fieldInfos);
+    }
+
+    public KrbFastArmoredReq getFastArmoredReq() {
+        return getFieldAs(ARMORED_DATA, KrbFastArmoredReq.class);
+    }
+
+    public void setFastArmoredReq(KrbFastArmoredReq fastArmoredReq) {
+        setFieldAs(ARMORED_DATA, fastArmoredReq);
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/ceacb982/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/AsRep.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/AsRep.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/AsRep.java
new file mode 100644
index 0000000..befe8d0
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/AsRep.java
@@ -0,0 +1,32 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.kerby.kerberos.kerb.spec.kdc;
+
+import org.apache.kerby.kerberos.kerb.spec.common.KrbMessageType;
+
+/**
+ AS-REP          ::= [APPLICATION 11] KDC-REP
+ */
+public class AsRep extends KdcRep {
+
+    public AsRep() {
+        super(KrbMessageType.AS_REP);
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/ceacb982/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/AsReq.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/AsReq.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/AsReq.java
new file mode 100644
index 0000000..973076c
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/AsReq.java
@@ -0,0 +1,31 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.kerby.kerberos.kerb.spec.kdc;
+
+import org.apache.kerby.kerberos.kerb.spec.common.KrbMessageType;
+
+/**
+ AS-REQ          ::= [APPLICATION 10] KDC-REQ
+ */
+public class AsReq extends KdcReq {
+    public AsReq() {
+        super(KrbMessageType.AS_REQ);
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/ceacb982/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/EncAsRepPart.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/EncAsRepPart.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/EncAsRepPart.java
new file mode 100644
index 0000000..7f0a459
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/EncAsRepPart.java
@@ -0,0 +1,31 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.kerby.kerberos.kerb.spec.kdc;
+
+/**
+EncASRepPart    ::= [APPLICATION 25] EncKDCRepPart
+*/
+public class EncAsRepPart extends EncKdcRepPart {
+    public static final int TAG = 25;
+
+    public EncAsRepPart() {
+        super(TAG);
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/ceacb982/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/EncKdcRepPart.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/EncKdcRepPart.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/EncKdcRepPart.java
new file mode 100644
index 0000000..21ce081
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/EncKdcRepPart.java
@@ -0,0 +1,177 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.kerby.kerberos.kerb.spec.kdc;
+
+import org.apache.kerby.asn1.type.Asn1FieldInfo;
+import org.apache.kerby.asn1.type.Asn1Integer;
+import org.apache.kerby.kerberos.kerb.spec.KerberosString;
+import org.apache.kerby.kerberos.kerb.spec.KerberosTime;
+import org.apache.kerby.kerberos.kerb.spec.KrbAppSequenceType;
+import org.apache.kerby.kerberos.kerb.spec.common.EncryptionKey;
+import org.apache.kerby.kerberos.kerb.spec.common.HostAddresses;
+import org.apache.kerby.kerberos.kerb.spec.common.LastReq;
+import org.apache.kerby.kerberos.kerb.spec.common.PrincipalName;
+import org.apache.kerby.kerberos.kerb.spec.ticket.TicketFlags;
+
+/**
+ EncKDCRepPart   ::= SEQUENCE {
+ key             [0] EncryptionKey,
+ last-req        [1] LastReq,
+ nonce           [2] UInt32,
+ key-expiration  [3] KerberosTime OPTIONAL,
+ flags           [4] TicketFlags,
+ authtime        [5] KerberosTime,
+ starttime       [6] KerberosTime OPTIONAL,
+ endtime         [7] KerberosTime,
+ renew-till      [8] KerberosTime OPTIONAL,
+ srealm          [9] Realm,
+ sname           [10] PrincipalName,
+ caddr           [11] HostAddresses OPTIONAL
+ }
+ */
+public abstract class EncKdcRepPart extends KrbAppSequenceType {
+    private static int KEY = 0;
+    private static int LAST_REQ = 1;
+    private static int NONCE = 2;
+    private static int KEY_EXPIRATION = 3;
+    private static int FLAGS = 4;
+    private static int AUTHTIME = 5;
+    private static int STARTTIME = 6;
+    private static int ENDTIME = 7;
+    private static int RENEW_TILL = 8;
+    private static int SREALM = 9;
+    private static int SNAME = 10;
+    private static int CADDR = 11;
+
+    static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
+            new Asn1FieldInfo(KEY, EncryptionKey.class),
+            new Asn1FieldInfo(LAST_REQ, LastReq.class),
+            new Asn1FieldInfo(NONCE, Asn1Integer.class),
+            new Asn1FieldInfo(KEY_EXPIRATION, KerberosTime.class),
+            new Asn1FieldInfo(FLAGS, TicketFlags.class),
+            new Asn1FieldInfo(AUTHTIME, KerberosTime.class),
+            new Asn1FieldInfo(STARTTIME, KerberosTime.class),
+            new Asn1FieldInfo(ENDTIME, KerberosTime.class),
+            new Asn1FieldInfo(RENEW_TILL, KerberosTime.class),
+            new Asn1FieldInfo(SREALM, KerberosString.class),
+            new Asn1FieldInfo(SNAME, PrincipalName.class),
+            new Asn1FieldInfo(CADDR, HostAddresses.class)
+    };
+
+    public EncKdcRepPart(int tagNo) {
+        super(tagNo, fieldInfos);
+    }
+
+    public EncryptionKey getKey() {
+        return getFieldAs(KEY, EncryptionKey.class);
+    }
+
+    public void setKey(EncryptionKey key) {
+        setFieldAs(KEY, key);
+    }
+
+    public LastReq getLastReq() {
+        return getFieldAs(LAST_REQ, LastReq.class);
+    }
+
+    public void setLastReq(LastReq lastReq) {
+        setFieldAs(LAST_REQ, lastReq);
+    }
+
+    public int getNonce() {
+        return getFieldAsInt(NONCE);
+    }
+
+    public void setNonce(int nonce) {
+        setFieldAsInt(NONCE, nonce);
+    }
+
+    public KerberosTime getKeyExpiration() {
+        return getFieldAsTime(KEY_EXPIRATION);
+    }
+
+    public void setKeyExpiration(KerberosTime keyExpiration) {
+        setFieldAs(KEY_EXPIRATION, keyExpiration);
+    }
+
+    public TicketFlags getFlags() {
+        return getFieldAs(FLAGS, TicketFlags.class);
+    }
+
+    public void setFlags(TicketFlags flags) {
+        setFieldAs(FLAGS, flags);
+    }
+
+    public KerberosTime getAuthTime() {
+        return getFieldAsTime(AUTHTIME);
+    }
+
+    public void setAuthTime(KerberosTime authTime) {
+        setFieldAs(AUTHTIME, authTime);
+    }
+
+    public KerberosTime getStartTime() {
+        return getFieldAsTime(STARTTIME);
+    }
+
+    public void setStartTime(KerberosTime startTime) {
+        setFieldAs(STARTTIME, startTime);
+    }
+
+    public KerberosTime getEndTime() {
+        return getFieldAsTime(ENDTIME);
+    }
+
+    public void setEndTime(KerberosTime endTime) {
+        setFieldAs(ENDTIME, endTime);
+    }
+
+    public KerberosTime getRenewTill() {
+        return getFieldAsTime(RENEW_TILL);
+    }
+
+    public void setRenewTill(KerberosTime renewTill) {
+        setFieldAs(RENEW_TILL, renewTill);
+    }
+
+    public String getSrealm() {
+        return getFieldAsString(SREALM);
+    }
+
+    public void setSrealm(String srealm) {
+        setFieldAsString(SREALM, srealm);
+    }
+
+    public PrincipalName getSname() {
+        return getFieldAs(SNAME, PrincipalName.class);
+    }
+
+    public void setSname(PrincipalName sname) {
+        setFieldAs(SNAME, sname);
+    }
+
+    public HostAddresses getCaddr() {
+        return getFieldAs(CADDR, HostAddresses.class);
+    }
+
+    public void setCaddr(HostAddresses caddr) {
+        setFieldAs(CADDR, caddr);
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/ceacb982/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/EncTgsRepPart.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/EncTgsRepPart.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/EncTgsRepPart.java
new file mode 100644
index 0000000..4b3800b
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/EncTgsRepPart.java
@@ -0,0 +1,31 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.kerby.kerberos.kerb.spec.kdc;
+
+/**
+ EncTGSRepPart   ::= [APPLICATION 26] EncKDCRepPart
+ */
+public class EncTgsRepPart extends EncKdcRepPart {
+    public static final int TAG = 26;
+
+    public EncTgsRepPart() {
+        super(TAG);
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/ceacb982/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/KdcOption.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/KdcOption.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/KdcOption.java
new file mode 100644
index 0000000..36e289e
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/KdcOption.java
@@ -0,0 +1,79 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.kerby.kerberos.kerb.spec.kdc;
+
+import org.apache.kerby.kerberos.kerb.spec.KrbEnum;
+
+public enum KdcOption implements KrbEnum {
+    NONE(-1),
+    //RESERVED(0x80000000),
+    FORWARDABLE(0x40000000),
+    FORWARDED(0x20000000),
+    PROXIABLE(0x10000000),
+    PROXY(0x08000000),
+    ALLOW_POSTDATE(0x04000000),
+    POSTDATED(0x02000000),
+    //UNUSED(0x01000000),
+    RENEWABLE(0x00800000),
+    //UNUSED(0x00400000),
+    //RESERVED(0x00200000),
+    //RESERVED(0x00100000),
+    //RESERVED(0x00080000),
+    //RESERVED(0x00040000),
+    CNAME_IN_ADDL_TKT(0x00020000),
+    CANONICALIZE(0x00010000),
+    REQUEST_ANONYMOUS(0x00008000),
+    //RESERVED(0x00004000),
+    //RESERVED(0x00002000),
+    //RESERVED(0x00001000),
+    //RESERVED(0x00000800),
+    //RESERVED(0x00000400),
+    //RESERVED(0x00000200),
+    //RESERVED(0x00000100),
+    //RESERVED(0x00000080),
+    //RESERVED(0x00000040),
+    DISABLE_TRANSITED_CHECK(0x00000020),
+    RENEWABLE_OK(0x00000010),
+    ENC_TKT_IN_SKEY(0x00000008),
+    //UNUSED(0x00000004),
+    RENEW(0x00000002),
+    VALIDATE(0x00000001);
+
+    private final int value;
+
+    private KdcOption(int value) {
+        this.value = value;
+    }
+
+    @Override
+    public int getValue() {
+        return value;
+    }
+
+    public static KdcOption fromValue(int value) {
+        for (KrbEnum e : values()) {
+            if (e.getValue() == value) {
+                return (KdcOption) e;
+            }
+        }
+
+        return NONE;
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/ceacb982/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/KdcOptions.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/KdcOptions.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/KdcOptions.java
new file mode 100644
index 0000000..d22abf2
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/KdcOptions.java
@@ -0,0 +1,33 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.kerby.kerberos.kerb.spec.kdc;
+
+import org.apache.kerby.kerberos.kerb.spec.common.KrbFlags;
+
+public class KdcOptions extends KrbFlags {
+
+    public KdcOptions() {
+        this(0);
+    }
+
+    public KdcOptions(int value) {
+        setFlags(value);
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/ceacb982/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/KdcRep.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/KdcRep.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/KdcRep.java
new file mode 100644
index 0000000..175f463
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/KdcRep.java
@@ -0,0 +1,116 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.kerby.kerberos.kerb.spec.kdc;
+
+import org.apache.kerby.asn1.type.Asn1FieldInfo;
+import org.apache.kerby.asn1.type.Asn1Integer;
+import org.apache.kerby.kerberos.kerb.spec.KerberosString;
+import org.apache.kerby.kerberos.kerb.spec.common.EncryptedData;
+import org.apache.kerby.kerberos.kerb.spec.common.KrbMessage;
+import org.apache.kerby.kerberos.kerb.spec.common.KrbMessageType;
+import org.apache.kerby.kerberos.kerb.spec.common.PrincipalName;
+import org.apache.kerby.kerberos.kerb.spec.pa.PaData;
+import org.apache.kerby.kerberos.kerb.spec.ticket.Ticket;
+
+/**
+ KDC-REP         ::= SEQUENCE {
+ pvno            [0] INTEGER (5),
+ msg-type        [1] INTEGER (11 -- AS -- | 13 -- TGS --),
+ padata          [2] SEQUENCE OF PA-DATA OPTIONAL
+ -- NOTE: not empty --,
+ crealm          [3] Realm,
+ cname           [4] PrincipalName,
+ ticket          [5] Ticket,
+ enc-part        [6] EncryptedData
+ -- EncASRepPart or EncTGSRepPart,
+ -- as appropriate
+ }
+ */
+public class KdcRep extends KrbMessage {
+    private static int PADATA = 2;
+    private static int CREALM = 3;
+    private static int CNAME = 4;
+    private static int TICKET = 5;
+    private static int ENC_PART = 6;
+
+    static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
+            new Asn1FieldInfo(PVNO, Asn1Integer.class),
+            new Asn1FieldInfo(MSG_TYPE, Asn1Integer.class),
+            new Asn1FieldInfo(PADATA, PaData.class),
+            new Asn1FieldInfo(CREALM, KerberosString.class),
+            new Asn1FieldInfo(CNAME, PrincipalName.class),
+            new Asn1FieldInfo(TICKET, Ticket.class),
+            new Asn1FieldInfo(ENC_PART, EncryptedData.class)
+    };
+
+    private EncKdcRepPart encPart;
+
+    public KdcRep(KrbMessageType msgType) {
+        super(msgType, fieldInfos);
+    }
+
+    public PaData getPaData() {
+        return getFieldAs(PADATA, PaData.class);
+    }
+
+    public void setPaData(PaData paData) {
+        setFieldAs(PADATA, paData);
+    }
+
+    public PrincipalName getCname() {
+        return getFieldAs(CNAME, PrincipalName.class);
+    }
+
+    public void setCname(PrincipalName sname) {
+        setFieldAs(CNAME, sname);
+    }
+
+    public String getCrealm() {
+        return getFieldAsString(CREALM);
+    }
+
+    public void setCrealm(String realm) {
+        setFieldAs(CREALM, new KerberosString(realm));
+    }
+
+    public Ticket getTicket() {
+        return getFieldAs(TICKET, Ticket.class);
+    }
+
+    public void setTicket(Ticket ticket) {
+        setFieldAs(TICKET, ticket);
+    }
+
+    public EncryptedData getEncryptedEncPart() {
+        return getFieldAs(ENC_PART, EncryptedData.class);
+    }
+
+    public void setEncryptedEncPart(EncryptedData encryptedEncPart) {
+        setFieldAs(ENC_PART, encryptedEncPart);
+    }
+
+    public EncKdcRepPart getEncPart() {
+        return encPart;
+    }
+
+    public void setEncPart(EncKdcRepPart encPart) {
+        this.encPart = encPart;
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/ceacb982/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/KdcReq.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/KdcReq.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/KdcReq.java
new file mode 100644
index 0000000..8d3f9c9
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/KdcReq.java
@@ -0,0 +1,76 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.kerby.kerberos.kerb.spec.kdc;
+
+import org.apache.kerby.asn1.type.Asn1FieldInfo;
+import org.apache.kerby.asn1.type.Asn1Integer;
+import org.apache.kerby.kerberos.kerb.spec.common.KrbMessage;
+import org.apache.kerby.kerberos.kerb.spec.common.KrbMessageType;
+import org.apache.kerby.kerberos.kerb.spec.pa.PaData;
+import org.apache.kerby.kerberos.kerb.spec.pa.PaDataEntry;
+
+/**
+ KDC-REQ         ::= SEQUENCE {
+ -- NOTE: first tag is [1], not [0]
+ pvno            [1] INTEGER (5) ,
+ msg-type        [2] INTEGER (10 -- AS -- | 12 -- TGS --),
+ padata          [3] SEQUENCE OF PA-DATA OPTIONAL
+ -- NOTE: not empty --,
+ req-encodeBody        [4] KDC-REQ-BODY
+ }
+ */
+public class KdcReq extends KrbMessage {
+    private static int PADATA = 2;
+    private static int REQ_BODY = 3;
+
+    static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
+            new Asn1FieldInfo(PVNO, 1, Asn1Integer.class),
+            new Asn1FieldInfo(MSG_TYPE, 2, Asn1Integer.class),
+            new Asn1FieldInfo(PADATA, 3, PaData.class),
+            new Asn1FieldInfo(REQ_BODY, 4, KdcReqBody.class)
+    };
+
+    public KdcReq(KrbMessageType msgType) {
+        super(msgType, fieldInfos);
+    }
+
+    public PaData getPaData() {
+        return getFieldAs(PADATA, PaData.class);
+    }
+
+    public void setPaData(PaData paData) {
+        setFieldAs(PADATA, paData);
+    }
+
+    public void addPaData(PaDataEntry paDataEntry) {
+        if (getPaData() == null) {
+            setPaData(new PaData());
+        }
+        getPaData().addElement(paDataEntry);
+    }
+
+    public KdcReqBody getReqBody() {
+        return getFieldAs(REQ_BODY, KdcReqBody.class);
+    }
+
+    public void setReqBody(KdcReqBody reqBody) {
+        setFieldAs(REQ_BODY, reqBody);
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/ceacb982/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/KdcReqBody.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/KdcReqBody.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/KdcReqBody.java
new file mode 100644
index 0000000..6a3506b
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/KdcReqBody.java
@@ -0,0 +1,209 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.kerby.kerberos.kerb.spec.kdc;
+
+import org.apache.kerby.asn1.type.Asn1FieldInfo;
+import org.apache.kerby.asn1.type.Asn1Integer;
+import org.apache.kerby.kerberos.kerb.spec.KerberosString;
+import org.apache.kerby.kerberos.kerb.spec.KerberosTime;
+import org.apache.kerby.kerberos.kerb.spec.KrbIntegers;
+import org.apache.kerby.kerberos.kerb.spec.KrbSequenceType;
+import org.apache.kerby.kerberos.kerb.spec.common.*;
+import org.apache.kerby.kerberos.kerb.spec.ticket.Tickets;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ KDC-REQ-BODY    ::= SEQUENCE {
+ kdc-options             [0] KDCOptions,
+ cname                   [1] PrincipalName OPTIONAL
+ -- Used only in AS-REQ --,
+ realm                   [2] Realm
+ -- Server's realm
+ -- Also client's in AS-REQ --,
+ sname                   [3] PrincipalName OPTIONAL,
+ from                    [4] KerberosTime OPTIONAL,
+ till                    [5] KerberosTime,
+ rtime                   [6] KerberosTime OPTIONAL,
+ nonce                   [7] UInt32,
+ etype                   [8] SEQUENCE OF Int32 -- EncryptionType
+ -- in preference order --,
+ addresses               [9] HostAddresses OPTIONAL,
+ enc-authorization-data  [10] EncryptedData OPTIONAL
+ -- AuthorizationData --,
+ additional-tickets      [11] SEQUENCE OF Ticket OPTIONAL
+ -- NOTE: not empty
+ }
+ */
+public class KdcReqBody extends KrbSequenceType {
+    private static int KDC_OPTIONS = 0;
+    private static int CNAME = 1;
+    private static int REALM = 2;
+    private static int SNAME = 3;
+    private static int FROM = 4;
+    private static int TILL = 5;
+    private static int RTIME = 6;
+    private static int NONCE = 7;
+    private static int ETYPE = 8;
+    private static int ADDRESSES = 9;
+    private static int ENC_AUTHORIZATION_DATA = 10;
+    private static int ADDITIONAL_TICKETS = 11;
+
+    static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
+            new Asn1FieldInfo(KDC_OPTIONS, KdcOptions.class),
+            new Asn1FieldInfo(CNAME, PrincipalName.class),
+            new Asn1FieldInfo(REALM, KerberosString.class),
+            new Asn1FieldInfo(SNAME, PrincipalName.class),
+            new Asn1FieldInfo(FROM, KerberosTime.class),
+            new Asn1FieldInfo(TILL, KerberosTime.class),
+            new Asn1FieldInfo(RTIME, KerberosTime.class),
+            new Asn1FieldInfo(NONCE, Asn1Integer.class),
+            new Asn1FieldInfo(ETYPE, KrbIntegers.class),
+            new Asn1FieldInfo(ADDRESSES, HostAddresses.class),
+            new Asn1FieldInfo(ENC_AUTHORIZATION_DATA, AuthorizationData.class),
+            new Asn1FieldInfo(ADDITIONAL_TICKETS, Tickets.class)
+    };
+
+    public KdcReqBody() {
+        super(fieldInfos);
+    }
+
+    private AuthorizationData authorizationData;
+
+    public KerberosTime getFrom() {
+        return getFieldAs(FROM, KerberosTime.class);
+    }
+
+    public void setFrom(KerberosTime from) {
+        setFieldAs(FROM, from);
+    }
+
+    public KerberosTime getTill() {
+        return getFieldAs(TILL, KerberosTime.class);
+    }
+
+    public void setTill(KerberosTime till) {
+        setFieldAs(TILL, till);
+    }
+
+    public KerberosTime getRtime() {
+        return getFieldAs(RTIME, KerberosTime.class);
+    }
+
+    public void setRtime(KerberosTime rtime) {
+        setFieldAs(RTIME, rtime);
+    }
+
+    public int getNonce() {
+        return getFieldAsInt(NONCE);
+    }
+
+    public void setNonce(int nonce) {
+        setFieldAsInt(NONCE, nonce);
+    }
+
+    public List<EncryptionType> getEtypes() {
+        KrbIntegers values = getFieldAs(ETYPE, KrbIntegers.class);
+        if (values == null) {
+            return Collections.emptyList();
+        }
+
+        List<EncryptionType> results = new ArrayList<EncryptionType>();
+        for (Integer value : values.getValues()) {
+            results.add(EncryptionType.fromValue(value));
+        }
+        return results;
+    }
+
+    public void setEtypes(List<EncryptionType> etypes) {
+        List<Integer> values = new ArrayList<Integer>();
+        for (EncryptionType etype: etypes) {
+            values.add(etype.getValue());
+        }
+        KrbIntegers value = new KrbIntegers(values);
+        setFieldAs(ETYPE, value);
+    }
+
+    public HostAddresses getAddresses() {
+        return getFieldAs(ADDRESSES, HostAddresses.class);
+    }
+
+    public void setAddresses(HostAddresses addresses) {
+        setFieldAs(ADDRESSES, addresses);
+    }
+
+    public EncryptedData getEncryptedAuthorizationData() {
+        return getFieldAs(ENC_AUTHORIZATION_DATA, EncryptedData.class);
+    }
+
+    public void setEncryptedAuthorizationData(EncryptedData encAuthorizationData) {
+        setFieldAs(ENC_AUTHORIZATION_DATA, encAuthorizationData);
+    }
+
+    public AuthorizationData getAuthorizationData() {
+        return authorizationData;
+    }
+
+    public void setAuthorizationData(AuthorizationData authorizationData) {
+        this.authorizationData = authorizationData;
+    }
+
+    public Tickets getAdditionalTickets() {
+        return getFieldAs(ADDITIONAL_TICKETS, Tickets.class);
+    }
+
+    public void setAdditionalTickets(Tickets additionalTickets) {
+        setFieldAs(ADDITIONAL_TICKETS, additionalTickets);
+    }
+
+    public KdcOptions getKdcOptions() {
+        return getFieldAs(KDC_OPTIONS, KdcOptions.class);
+    }
+
+    public void setKdcOptions(KdcOptions kdcOptions) {
+        setFieldAs(KDC_OPTIONS, kdcOptions);
+    }
+
+    public PrincipalName getSname() {
+        return getFieldAs(SNAME, PrincipalName.class);
+    }
+
+    public void setSname(PrincipalName sname) {
+        setFieldAs(SNAME, sname);
+    }
+
+    public PrincipalName getCname() {
+        return getFieldAs(CNAME, PrincipalName.class);
+    }
+
+    public void setCname(PrincipalName cname) {
+        setFieldAs(CNAME, cname);
+    }
+
+    public String getRealm() {
+        return getFieldAsString(REALM);
+    }
+
+    public void setRealm(String realm) {
+        setFieldAs(REALM, new KerberosString(realm));
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/ceacb982/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/TgsRep.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/TgsRep.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/TgsRep.java
new file mode 100644
index 0000000..0e56636
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/TgsRep.java
@@ -0,0 +1,31 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.kerby.kerberos.kerb.spec.kdc;
+
+import org.apache.kerby.kerberos.kerb.spec.common.KrbMessageType;
+
+/**
+ TGS-REP         ::= [APPLICATION 13] KDC-REP
+ */
+public class TgsRep extends KdcRep {
+    public TgsRep() {
+        super(KrbMessageType.TGS_REP);
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/ceacb982/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/TgsReq.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/TgsReq.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/TgsReq.java
new file mode 100644
index 0000000..4e8153c
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/kdc/TgsReq.java
@@ -0,0 +1,32 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.kerby.kerberos.kerb.spec.kdc;
+
+import org.apache.kerby.kerberos.kerb.spec.common.KrbMessageType;
+
+/**
+ TGS-REQ         ::= [APPLICATION 12] KDC-REQ
+ */
+public class TgsReq extends KdcReq {
+
+    public TgsReq() {
+        super(KrbMessageType.TGS_REQ);
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/ceacb982/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/PaAuthenticationSet.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/PaAuthenticationSet.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/PaAuthenticationSet.java
new file mode 100644
index 0000000..922b3c7
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/PaAuthenticationSet.java
@@ -0,0 +1,29 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.kerby.kerberos.kerb.spec.pa;
+
+import org.apache.kerby.kerberos.kerb.spec.KrbSequenceOfType;
+
+/**
+ PA-AUTHENTICATION-SET ::= SEQUENCE OF PA-AUTHENTICATION-SET-ELEM
+ */
+public class PaAuthenticationSet extends KrbSequenceOfType<PaAuthenticationSetElem> {
+
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/ceacb982/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/PaAuthenticationSetElem.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/PaAuthenticationSetElem.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/PaAuthenticationSetElem.java
new file mode 100644
index 0000000..5a484cf
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/PaAuthenticationSetElem.java
@@ -0,0 +1,74 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.kerby.kerberos.kerb.spec.pa;
+
+import org.apache.kerby.asn1.type.Asn1FieldInfo;
+import org.apache.kerby.asn1.type.Asn1Integer;
+import org.apache.kerby.asn1.type.Asn1OctetString;
+import org.apache.kerby.kerberos.kerb.spec.KrbSequenceType;
+
+/**
+ PA-AUTHENTICATION-SET-ELEM ::= SEQUENCE {
+     pa-type      [0] Int32,
+     -- same as padata-type.
+     pa-hint      [1] OCTET STRING OPTIONAL,
+     pa-value     [2] OCTET STRING OPTIONAL
+ }
+ */
+public class PaAuthenticationSetElem extends KrbSequenceType {
+    private static int PA_TYPE = 0;
+    private static int PA_HINT = 1;
+    private static int PA_VALUE = 2;
+
+    static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
+            new Asn1FieldInfo(PA_TYPE, Asn1Integer.class),
+            new Asn1FieldInfo(PA_HINT, Asn1OctetString.class),
+            new Asn1FieldInfo(PA_VALUE, Asn1OctetString.class)
+    };
+
+    public PaAuthenticationSetElem() {
+        super(fieldInfos);
+    }
+
+    public PaDataType getPaType() {
+        Integer value = getFieldAsInteger(PA_TYPE);
+        return PaDataType.fromValue(value);
+    }
+
+    public void setPaType(PaDataType paDataType) {
+        setFieldAsInt(PA_TYPE, paDataType.getValue());
+    }
+
+    public byte[] getPaHint() {
+        return getFieldAsOctets(PA_HINT);
+    }
+
+    public void setPaHint(byte[] paHint) {
+        setFieldAsOctets(PA_HINT, paHint);
+    }
+
+    public byte[] getPaValue() {
+        return getFieldAsOctets(PA_VALUE);
+    }
+
+    public void setPaValue(byte[] paDataValue) {
+        setFieldAsOctets(PA_VALUE, paDataValue);
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/ceacb982/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/PaData.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/PaData.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/PaData.java
new file mode 100644
index 0000000..3594a61
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/PaData.java
@@ -0,0 +1,41 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.kerby.kerberos.kerb.spec.pa;
+
+import org.apache.kerby.kerberos.kerb.spec.KrbSequenceOfType;
+
+/**
+ PA-DATA         ::= SEQUENCE {
+     -- NOTE: first tag is [1], not [0]
+     padata-type     [1] Int32,
+     padata-value    [2] OCTET STRING -- might be encoded AP-REQ
+ }
+ */
+public class PaData extends KrbSequenceOfType<PaDataEntry> {
+
+    public PaDataEntry findEntry(PaDataType paType) {
+        for (PaDataEntry pae : getElements()) {
+            if (pae.getPaDataType() == paType) {
+                return pae;
+            }
+        }
+        return null;
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/ceacb982/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/PaDataEntry.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/PaDataEntry.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/PaDataEntry.java
new file mode 100644
index 0000000..8f0714b
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/PaDataEntry.java
@@ -0,0 +1,69 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.kerby.kerberos.kerb.spec.pa;
+
+import org.apache.kerby.asn1.type.Asn1FieldInfo;
+import org.apache.kerby.asn1.type.Asn1Integer;
+import org.apache.kerby.asn1.type.Asn1OctetString;
+import org.apache.kerby.kerberos.kerb.spec.KrbSequenceType;
+
+/**
+ PA-DATA         ::= SEQUENCE {
+     -- NOTE: first tag is [1], not [0]
+     padata-type     [1] Int32,
+     padata-value    [2] OCTET STRING -- might be encoded AP-REQ
+ }
+ */
+public class PaDataEntry extends KrbSequenceType {
+    private static int PADATA_TYPE = 0;
+    private static int PADATA_VALUE = 1;
+
+    static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
+            new Asn1FieldInfo(PADATA_TYPE, 1, Asn1Integer.class),
+            new Asn1FieldInfo(PADATA_VALUE, 2, Asn1OctetString.class)
+    };
+
+    public PaDataEntry() {
+        super(fieldInfos);
+    }
+
+    public PaDataEntry(PaDataType type, byte[] paData) {
+        this();
+        setPaDataType(type);
+        setPaDataValue(paData);
+    }
+
+    public PaDataType getPaDataType() {
+        Integer value = getFieldAsInteger(PADATA_TYPE);
+        return PaDataType.fromValue(value);
+    }
+
+    public void setPaDataType(PaDataType paDataType) {
+        setFieldAsInt(PADATA_TYPE, paDataType.getValue());
+    }
+
+    public byte[] getPaDataValue() {
+        return getFieldAsOctets(PADATA_VALUE);
+    }
+
+    public void setPaDataValue(byte[] paDataValue) {
+        setFieldAsOctets(PADATA_VALUE, paDataValue);
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/ceacb982/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/PaDataType.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/PaDataType.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/PaDataType.java
new file mode 100644
index 0000000..7938277
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/PaDataType.java
@@ -0,0 +1,92 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.kerby.kerberos.kerb.spec.pa;
+
+import org.apache.kerby.kerberos.kerb.spec.KrbEnum;
+
+/**
+ * From krb5.h
+ */
+public enum PaDataType implements KrbEnum {
+    NONE                (0),
+    TGS_REQ              (1),
+    AP_REQ              (1),
+    ENC_TIMESTAMP       (2), // RFC 4120
+    PW_SALT             (3), // RFC 4120
+    ENC_ENCKEY        (4),  // Key encrypted within itself
+    ENC_UNIX_TIME       (5),  // timestamp encrypted in key. RFC 4120
+    ENC_SANDIA_SECURID (6),  // SecurId passcode. RFC 4120
+    SESAME              (7),  // Sesame project. RFC 4120
+    OSF_DCE             (8),  // OSF DCE. RFC 4120
+    CYBERSAFE_SECUREID (9),  // Cybersafe. RFC 4120
+    AFS3_SALT           (10), // Cygnus. RFC 4120, 3961
+    ETYPE_INFO          (11), // Etype info for preauth. RFC 4120
+    SAM_CHALLENGE       (12), // SAM/OTP
+    SAM_RESPONSE        (13), // SAM/OTP
+    PK_AS_REQ           (16), // PKINIT. RFC 4556
+    PK_AS_REP           (17), // PKINIT. RFC 4556
+    ETYPE_INFO2         (19), // RFC 4120
+    USE_SPECIFIED_KVNO  (20), // RFC 4120
+    SVR_REFERRAL_INFO   (20), // Windows 2000 referrals. RFC 6820
+    SAM_REDIRECT        (21), // SAM/OTP. RFC 4120
+    GET_FROM_TYPED_DATA (22), // Embedded in typed data. RFC 4120
+    REFERRAL            (25), // draft referral system
+    SAM_CHALLENGE_2     (30), // draft challenge system, updated
+    SAM_RESPONSE_2      (31), // draft challenge system, updated
+    /* MS-KILE */
+    PAC_REQUEST         (128), // include Windows PAC
+    FOR_USER            (129), // username protocol transition request
+    S4U_X509_USER       (130), // certificate protocol transition request
+    AS_CHECKSUM         (132), // AS checksum
+    FX_COOKIE           (133), // RFC 6113
+    FX_FAST             (136), // RFC 6113
+    FX_ERROR            (137), // RFC 6113
+    ENCRYPTED_CHALLENGE (138), // RFC 6113
+    OTP_CHALLENGE       (141), // RFC 6560 section 4.1
+    OTP_REQUEST         (142), // RFC 6560 section 4.2
+    OTP_PIN_CHANGE      (144), // RFC 6560 section 4.3
+    PKINIT_KX           (147), // RFC 6112
+    ENCPADATA_REQ_ENC_PA_REP   (149), // RFC 6806
+    TOKEN_REQUEST       (148), // TokenPreauth
+    TOKEN_CHALLENGE     (149);
+
+    private final int value;
+
+    private PaDataType(int value) {
+        this.value = value;
+    }
+
+    @Override
+    public int getValue() {
+        return value;
+    }
+
+    public static PaDataType fromValue(Integer value) {
+        if (value != null) {
+            for (KrbEnum e : values()) {
+                if (e.getValue() == value.intValue()) {
+                    return (PaDataType) e;
+                }
+            }
+        }
+
+        return NONE;
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/ceacb982/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/PaEncTsEnc.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/PaEncTsEnc.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/PaEncTsEnc.java
new file mode 100644
index 0000000..b6407a8
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/PaEncTsEnc.java
@@ -0,0 +1,66 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.kerby.kerberos.kerb.spec.pa;
+
+import org.apache.kerby.asn1.type.Asn1FieldInfo;
+import org.apache.kerby.asn1.type.Asn1Integer;
+import org.apache.kerby.kerberos.kerb.spec.KerberosTime;
+import org.apache.kerby.kerberos.kerb.spec.KrbSequenceType;
+
+/**
+ PA-ENC-TS-ENC           ::= SEQUENCE {
+    patimestamp     [0] KerberosTime -- client's time --,
+    pausec          [1] Microseconds OPTIONAL
+ }
+ */
+public class PaEncTsEnc extends KrbSequenceType {
+    private static int PATIMESTAMP = 0;
+    private static int PAUSEC = 1;
+
+    static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
+            new Asn1FieldInfo(PATIMESTAMP, 1, KerberosTime.class),
+            new Asn1FieldInfo(PAUSEC, 2, Asn1Integer.class)
+    };
+
+    public PaEncTsEnc() {
+        super(fieldInfos);
+    }
+
+    public KerberosTime getPaTimestamp() {
+        return getFieldAsTime(PATIMESTAMP);
+    }
+
+    public void setPaTimestamp(KerberosTime paTimestamp) {
+        setFieldAs(PATIMESTAMP, paTimestamp);
+    }
+
+    public int getPaUsec() {
+        return getFieldAsInt(PAUSEC);
+    }
+
+    public void setPaUsec(int paUsec) {
+        setFieldAsInt(PAUSEC, paUsec);
+    }
+
+    public KerberosTime getAllTime() {
+        KerberosTime paTimestamp = getPaTimestamp();
+        return paTimestamp.extend(getPaUsec() / 1000);
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/ceacb982/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/otp/OtpTokenInfo.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/otp/OtpTokenInfo.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/otp/OtpTokenInfo.java
new file mode 100644
index 0000000..b2f3340
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/otp/OtpTokenInfo.java
@@ -0,0 +1,69 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.kerby.kerberos.kerb.spec.pa.otp;
+
+import org.apache.kerby.asn1.type.Asn1FieldInfo;
+import org.apache.kerby.asn1.type.Asn1Integer;
+import org.apache.kerby.asn1.type.Asn1OctetString;
+import org.apache.kerby.asn1.type.Asn1Utf8String;
+import org.apache.kerby.kerberos.kerb.spec.KerberosString;
+import org.apache.kerby.kerberos.kerb.spec.KrbSequenceType;
+import org.apache.kerby.kerberos.kerb.spec.pa.pkinit.AlgorithmIdentifiers;
+
+/**
+ OTP-TOKENINFO ::= SEQUENCE {
+     flags            [0] OTPFlags,
+     otp-vendor       [1] UTF8String               OPTIONAL,
+     otp-challenge    [2] OCTET STRING (SIZE(1..MAX)) OPTIONAL,
+     otp-length       [3] Int32                    OPTIONAL,
+     otp-format       [4] OTPFormat                OPTIONAL,
+     otp-tokenID      [5] OCTET STRING             OPTIONAL,
+     otp-algID        [6] AnyURI                   OPTIONAL,
+     supportedHashAlg [7] SEQUENCE OF AlgorithmIdentifier OPTIONAL,
+     iterationCount   [8] Int32                    OPTIONAL
+ }
+ */
+public class OtpTokenInfo extends KrbSequenceType {
+    private static int FLAGS = 0;
+    private static int OTP_VENDOR = 1;
+    private static int OTP_CHALLENGE = 2;
+    private static int OTP_LENGTH = 3;
+    private static int OTP_FORMAT = 4;
+    private static int OTP_TOKEN_ID = 5;
+    private static int OTP_ALG_ID = 6;
+    private static int SUPPORTED_HASH_ALG = 7;
+    private static int ITERATION_COUNT = 8;
+
+    static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
+            new Asn1FieldInfo(FLAGS, Asn1OctetString.class, true),
+            new Asn1FieldInfo(OTP_VENDOR, Asn1Utf8String.class),
+            new Asn1FieldInfo(OTP_CHALLENGE, Asn1OctetString.class, true),
+            new Asn1FieldInfo(OTP_LENGTH, KerberosString.class),
+            new Asn1FieldInfo(OTP_FORMAT, Asn1OctetString.class, true),
+            new Asn1FieldInfo(OTP_TOKEN_ID, Asn1Utf8String.class),
+            new Asn1FieldInfo(OTP_ALG_ID, Asn1OctetString.class, true),
+            new Asn1FieldInfo(SUPPORTED_HASH_ALG, AlgorithmIdentifiers.class),
+            new Asn1FieldInfo(ITERATION_COUNT, Asn1Integer.class, true)
+    };
+
+    public OtpTokenInfo() {
+        super(fieldInfos);
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/ceacb982/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/otp/PaOtpChallenge.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/otp/PaOtpChallenge.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/otp/PaOtpChallenge.java
new file mode 100644
index 0000000..0266a99
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/otp/PaOtpChallenge.java
@@ -0,0 +1,55 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.kerby.kerberos.kerb.spec.pa.otp;
+
+import org.apache.kerby.asn1.type.Asn1FieldInfo;
+import org.apache.kerby.asn1.type.Asn1OctetString;
+import org.apache.kerby.asn1.type.Asn1Utf8String;
+import org.apache.kerby.kerberos.kerb.spec.KerberosString;
+import org.apache.kerby.kerberos.kerb.spec.KrbSequenceType;
+
+/**
+ PA-OTP-CHALLENGE ::= SEQUENCE {
+     nonce            [0] OCTET STRING,
+     otp-service      [1] UTF8String               OPTIONAL,
+     otp-tokenInfo    [2] SEQUENCE (SIZE(1..MAX)) OF OTP-TOKENINFO,
+     salt             [3] KerberosString           OPTIONAL,
+     s2kparams        [4] OCTET STRING             OPTIONAL,
+ }
+ */
+public class PaOtpChallenge extends KrbSequenceType {
+    private static int NONCE = 0;
+    private static int OTP_SERVICE = 1;
+    private static int OTP_TOKEN_INFO = 2;
+    private static int SALT = 3;
+    private static int S2KPARAMS = 4;
+
+    static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
+            new Asn1FieldInfo(NONCE, Asn1OctetString.class, true),
+            new Asn1FieldInfo(OTP_SERVICE, Asn1Utf8String.class),
+            new Asn1FieldInfo(OTP_TOKEN_INFO, Asn1OctetString.class, true),
+            new Asn1FieldInfo(SALT, KerberosString.class),
+            new Asn1FieldInfo(S2KPARAMS, Asn1OctetString.class, true)
+    };
+
+    public PaOtpChallenge() {
+        super(fieldInfos);
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/ceacb982/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/pkinit/AdInitialVerifiedCas.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/pkinit/AdInitialVerifiedCas.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/pkinit/AdInitialVerifiedCas.java
new file mode 100644
index 0000000..484f37b
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/pkinit/AdInitialVerifiedCas.java
@@ -0,0 +1,28 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.kerby.kerberos.kerb.spec.pa.pkinit;
+
+import org.apache.kerby.kerberos.kerb.spec.KrbSequenceOfType;
+
+/**
+ * AD-INITIAL-VERIFIED-CAS ::= SEQUENCE OF ExternalPrincipalIdentifier
+ */
+public class AdInitialVerifiedCas extends KrbSequenceOfType<ExternalPrincipalIdentifier> {
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/ceacb982/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/pkinit/AlgorithmIdentifiers.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/pkinit/AlgorithmIdentifiers.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/pkinit/AlgorithmIdentifiers.java
new file mode 100644
index 0000000..2d1fa74
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/pkinit/AlgorithmIdentifiers.java
@@ -0,0 +1,30 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.kerby.kerberos.kerb.spec.pa.pkinit;
+
+import org.apache.kerby.kerberos.kerb.spec.KrbSequenceOfType;
+import org.apache.kerby.kerberos.kerb.spec.x509.AlgorithmIdentifier;
+
+/**
+ trustedCertifiers       SEQUENCE OF AlgorithmIdentifier OPTIONAL,
+ */
+public class AlgorithmIdentifiers extends KrbSequenceOfType<AlgorithmIdentifier> {
+
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/ceacb982/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/pkinit/AuthPack.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/pkinit/AuthPack.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/pkinit/AuthPack.java
new file mode 100644
index 0000000..98757e8
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/pkinit/AuthPack.java
@@ -0,0 +1,82 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.kerby.kerberos.kerb.spec.pa.pkinit;
+
+import org.apache.kerby.asn1.type.Asn1FieldInfo;
+import org.apache.kerby.kerberos.kerb.spec.KrbSequenceType;
+import org.apache.kerby.kerberos.kerb.spec.x509.SubjectPublicKeyInfo;
+
+/**
+ AuthPack ::= SEQUENCE {
+     pkAuthenticator         [0] PKAuthenticator,
+     clientPublicValue       [1] SubjectPublicKeyInfo OPTIONAL,
+     supportedCMSTypes       [2] SEQUENCE OF AlgorithmIdentifier OPTIONAL,
+     clientDHNonce           [3] DHNonce OPTIONAL
+ }
+ */
+public class AuthPack extends KrbSequenceType {
+    private static int PK_AUTHENTICATOR = 0;
+    private static int CLIENT_PUBLIC_VALUE = 1;
+    private static int SUPPORTED_CMS_TYPES = 2;
+    private static int CLIENT_DH_NONCE = 3;
+
+    static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
+            new Asn1FieldInfo(PK_AUTHENTICATOR, PkAuthenticator.class),
+            new Asn1FieldInfo(CLIENT_PUBLIC_VALUE, SubjectPublicKeyInfo.class),
+            new Asn1FieldInfo(SUPPORTED_CMS_TYPES, AlgorithmIdentifiers.class),
+            new Asn1FieldInfo(CLIENT_DH_NONCE, DHNonce.class)
+    };
+
+    public AuthPack() {
+        super(fieldInfos);
+    }
+
+    public PkAuthenticator getPkAuthenticator() {
+        return getFieldAs(PK_AUTHENTICATOR, PkAuthenticator.class);
+    }
+
+    public void setPkAuthenticator(PkAuthenticator pkAuthenticator) {
+        setFieldAs(PK_AUTHENTICATOR, pkAuthenticator);
+    }
+
+    public SubjectPublicKeyInfo getClientPublicValue() {
+        return getFieldAs(CLIENT_PUBLIC_VALUE, SubjectPublicKeyInfo.class);
+    }
+
+    public void setClientPublicValue(SubjectPublicKeyInfo clientPublicValue) {
+        setFieldAs(CLIENT_PUBLIC_VALUE, clientPublicValue);
+    }
+
+    public AlgorithmIdentifiers getsupportedCmsTypes() {
+        return getFieldAs(CLIENT_DH_NONCE, AlgorithmIdentifiers.class);
+    }
+
+    public void setsupportedCmsTypes(AlgorithmIdentifiers supportedCMSTypes) {
+        setFieldAs(CLIENT_DH_NONCE, supportedCMSTypes);
+    }
+
+    public DHNonce getClientDhNonce() {
+        return getFieldAs(CLIENT_DH_NONCE, DHNonce.class);
+    }
+
+    public void setClientDhNonce(DHNonce dhNonce) {
+        setFieldAs(CLIENT_DH_NONCE, dhNonce);
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/ceacb982/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/pkinit/DHNonce.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/pkinit/DHNonce.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/pkinit/DHNonce.java
new file mode 100644
index 0000000..4e51adb
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/pkinit/DHNonce.java
@@ -0,0 +1,28 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.kerby.kerberos.kerb.spec.pa.pkinit;
+
+import org.apache.kerby.asn1.type.Asn1OctetString;
+
+/**
+ * DHNonce ::= OCTET STRING
+ */
+public class DHNonce extends Asn1OctetString {
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/ceacb982/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/pkinit/DHRepInfo.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/pkinit/DHRepInfo.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/pkinit/DHRepInfo.java
new file mode 100644
index 0000000..9844615
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/pa/pkinit/DHRepInfo.java
@@ -0,0 +1,60 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.kerby.kerberos.kerb.spec.pa.pkinit;
+
+import org.apache.kerby.asn1.type.Asn1FieldInfo;
+import org.apache.kerby.asn1.type.Asn1OctetString;
+import org.apache.kerby.kerberos.kerb.spec.KrbSequenceType;
+
+/**
+ DHRepInfo ::= SEQUENCE {
+    dhSignedData            [0] IMPLICIT OCTET STRING,
+    serverDHNonce           [1] DHNonce OPTIONAL
+ }
+ */
+public class DHRepInfo extends KrbSequenceType {
+    private static int DH_SIGNED_DATA = 0;
+    private static int SERVER_DH_NONCE = 1;
+
+    static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
+            new Asn1FieldInfo(DH_SIGNED_DATA, Asn1OctetString.class, true),
+            new Asn1FieldInfo(SERVER_DH_NONCE, DHNonce.class)
+    };
+
+    public DHRepInfo() {
+        super(fieldInfos);
+    }
+
+    public byte[] getDHSignedData() {
+        return getFieldAsOctets(DH_SIGNED_DATA);
+    }
+
+    public void setDHSignedData(byte[] dhSignedData) {
+        setFieldAsOctets(DH_SIGNED_DATA, dhSignedData);
+    }
+
+    public DHNonce getServerDhNonce() {
+        return getFieldAs(SERVER_DH_NONCE, DHNonce.class);
+    }
+
+    public void setServerDhNonce(DHNonce dhNonce) {
+        setFieldAs(SERVER_DH_NONCE, dhNonce);
+    }
+}