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 01:56:48 UTC
[24/50] [abbrv] directory-kerberos git commit: Many changes with
newname
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/7d9261af/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/ap/Authenticator.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/ap/Authenticator.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/ap/Authenticator.java
new file mode 100644
index 0000000..4c4dc86
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/ap/Authenticator.java
@@ -0,0 +1,144 @@
+/**
+ * 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.ap;
+
+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.AuthorizationData;
+import org.apache.kerby.kerberos.kerb.spec.common.CheckSum;
+import org.apache.kerby.kerberos.kerb.spec.common.EncryptionKey;
+import org.apache.kerby.kerberos.kerb.spec.common.PrincipalName;
+
+/**
+ Authenticator ::= [APPLICATION 2] SEQUENCE {
+ authenticator-vno [0] INTEGER (5),
+ crealm [1] Realm,
+ cname [2] PrincipalName,
+ cksum [3] Checksum OPTIONAL,
+ cusec [4] Microseconds,
+ ctime [5] KerberosTime,
+ subkey [6] EncryptionKey OPTIONAL,
+ seq-number [7] UInt32 OPTIONAL,
+ authorization-data [8] AuthorizationData OPTIONAL
+ }
+ */
+public class Authenticator extends KrbAppSequenceType {
+ public static int TAG = 2;
+ private static int AUTHENTICATOR_VNO = 0;
+ private static int CREALM = 1;
+ private static int CNAME = 2;
+ private static int CKSUM = 3;
+ private static int CUSEC = 4;
+ private static int CTIME = 5;
+ private static int SUBKEY = 6;
+ private static int SEQ_NUMBER = 7;
+ private static int AUTHORIZATION_DATA = 8;
+
+ static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
+ new Asn1FieldInfo(AUTHENTICATOR_VNO, 0, Asn1Integer.class),
+ new Asn1FieldInfo(CREALM, 1, KerberosString.class),
+ new Asn1FieldInfo(CNAME, 2, PrincipalName.class),
+ new Asn1FieldInfo(CKSUM, 3, CheckSum.class),
+ new Asn1FieldInfo(CUSEC, 4, Asn1Integer.class),
+ new Asn1FieldInfo(CTIME, 5, KerberosTime.class),
+ new Asn1FieldInfo(SUBKEY, 6, EncryptionKey.class),
+ new Asn1FieldInfo(SEQ_NUMBER, 7, Asn1Integer.class),
+ new Asn1FieldInfo(AUTHORIZATION_DATA, 8, AuthorizationData.class)
+ };
+
+ public Authenticator() {
+ super(TAG, fieldInfos);
+ }
+
+ public int getAuthenticatorVno() {
+ return getFieldAsInt(AUTHENTICATOR_VNO);
+ }
+
+ public void setAuthenticatorVno(int authenticatorVno) {
+ setFieldAsInt(AUTHENTICATOR_VNO, authenticatorVno);
+ }
+
+ public String getCrealm() {
+ return getFieldAsString(CREALM);
+ }
+
+ public void setCrealm(String crealm) {
+ setFieldAsString(CREALM, crealm);
+ }
+
+ public PrincipalName getCname() {
+ return getFieldAs(CNAME, PrincipalName.class);
+ }
+
+ public void setCname(PrincipalName cname) {
+ setFieldAs(CNAME, cname);
+ }
+
+ public CheckSum getCksum() {
+ return getFieldAs(CKSUM, CheckSum.class);
+ }
+
+ public void setCksum(CheckSum cksum) {
+ setFieldAs(CKSUM, cksum);
+ }
+
+ public int getCusec() {
+ return getFieldAsInt(CUSEC);
+ }
+
+ public void setCusec(int cusec) {
+ setFieldAsInt(CUSEC, cusec);
+ }
+
+ public KerberosTime getCtime() {
+ return getFieldAsTime(CTIME);
+ }
+
+ public void setCtime(KerberosTime ctime) {
+ setFieldAs(CTIME, ctime);
+ }
+
+ public EncryptionKey getSubKey() {
+ return getFieldAs(SUBKEY, EncryptionKey.class);
+ }
+
+ public void setSubKey(EncryptionKey subKey) {
+ setFieldAs(SUBKEY, subKey);
+ }
+
+ public int getSeqNumber() {
+ return getFieldAsInt(SEQ_NUMBER);
+ }
+
+ public void setSeqNumber(Integer seqNumber) {
+ setFieldAsInt(SEQ_NUMBER, seqNumber);
+ }
+
+ public AuthorizationData getAuthorizationData() {
+ return getFieldAs(AUTHORIZATION_DATA, AuthorizationData.class);
+ }
+
+ public void setAuthorizationData(AuthorizationData authorizationData) {
+ setFieldAs(AUTHORIZATION_DATA, authorizationData);
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/7d9261af/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/ap/EncAPRepPart.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/ap/EncAPRepPart.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/ap/EncAPRepPart.java
new file mode 100644
index 0000000..5c35170
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/ap/EncAPRepPart.java
@@ -0,0 +1,85 @@
+/**
+ * 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.ap;
+
+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.KrbAppSequenceType;
+import org.apache.kerby.kerberos.kerb.spec.common.EncryptionKey;
+
+/**
+ EncAPRepPart ::= [APPLICATION 27] SEQUENCE {
+ ctime [0] KerberosTime,
+ cusec [1] Microseconds,
+ subkey [2] EncryptionKey OPTIONAL,
+ seq-number [3] UInt32 OPTIONAL
+ }
+ */
+public class EncAPRepPart extends KrbAppSequenceType {
+ public static int TAG = 27;
+ private static int CTIME = 0;
+ private static int CUSEC = 1;
+ private static int SUBKEY = 2;
+ private static int SEQ_NUMBER = 3;
+
+ static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
+ new Asn1FieldInfo(CTIME, 0, KerberosTime.class),
+ new Asn1FieldInfo(CUSEC, 1, Asn1Integer.class),
+ new Asn1FieldInfo(SUBKEY, 2, EncryptionKey.class),
+ new Asn1FieldInfo(SEQ_NUMBER, 3, Asn1Integer.class)
+ };
+
+ public EncAPRepPart() {
+ super(TAG, fieldInfos);
+ }
+
+ public KerberosTime getCtime() {
+ return getFieldAsTime(CTIME);
+ }
+
+ public void setCtime(KerberosTime ctime) {
+ setFieldAs(CTIME, ctime);
+ }
+
+ public int getCusec() {
+ return getFieldAsInt(CUSEC);
+ }
+
+ public void setCusec(int cusec) {
+ setFieldAsInt(CUSEC, cusec);
+ }
+
+ public EncryptionKey getSubkey() {
+ return getFieldAs(SUBKEY, EncryptionKey.class);
+ }
+
+ public void setSubkey(EncryptionKey subkey) {
+ setFieldAs(SUBKEY, subkey);
+ }
+
+ public int getSeqNumber() {
+ return getFieldAsInt(SEQ_NUMBER);
+ }
+
+ public void setSeqNumber(Integer seqNumber) {
+ setFieldAsInt(SEQ_NUMBER, seqNumber);
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/7d9261af/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/AdToken.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/AdToken.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/AdToken.java
new file mode 100644
index 0000000..51f9b5b
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/AdToken.java
@@ -0,0 +1,49 @@
+/**
+ * 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.common;
+
+import org.apache.kerby.asn1.type.Asn1FieldInfo;
+import org.apache.kerby.kerberos.kerb.spec.KrbSequenceType;
+
+/**
+ AD-TOKEN ::= SEQUENCE {
+ token [0] OCTET STRING,
+ }
+*/
+public class AdToken extends KrbSequenceType {
+ private static int TOKEN = 0;
+
+ static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
+ new Asn1FieldInfo(TOKEN, KrbToken.class)
+ };
+
+ public AdToken() {
+ super(fieldInfos);
+ }
+
+ public KrbToken getToken() {
+ return getFieldAs(TOKEN, KrbToken.class);
+ }
+
+ public void setToken(KrbToken token) {
+ setFieldAs(TOKEN, token);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/7d9261af/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/AuthorizationData.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/AuthorizationData.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/AuthorizationData.java
new file mode 100644
index 0000000..70c1450
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/AuthorizationData.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.common;
+
+import org.apache.kerby.kerberos.kerb.spec.KrbSequenceOfType;
+
+/**
+ AuthorizationData ::= SEQUENCE OF SEQUENCE {
+ ad-type [0] Int32,
+ ad-data [1] OCTET STRING
+ }
+ */
+public class AuthorizationData extends KrbSequenceOfType<AuthorizationDataEntry> {
+
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/7d9261af/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/AuthorizationDataEntry.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/AuthorizationDataEntry.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/AuthorizationDataEntry.java
new file mode 100644
index 0000000..62cb19f
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/AuthorizationDataEntry.java
@@ -0,0 +1,62 @@
+/**
+ * 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.common;
+
+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;
+
+/**
+ AuthorizationData ::= SEQUENCE OF SEQUENCE {
+ ad-type [0] Int32,
+ ad-data [1] OCTET STRING
+ }
+ */
+public class AuthorizationDataEntry extends KrbSequenceType {
+ private static int AD_TYPE = 0;
+ private static int AD_DATA = 1;
+
+ static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
+ new Asn1FieldInfo(AD_TYPE, 0, Asn1Integer.class),
+ new Asn1FieldInfo(AD_DATA, 1, Asn1OctetString.class)
+ };
+
+ public AuthorizationDataEntry() {
+ super(fieldInfos);
+ }
+
+ public AuthorizationType getAuthzType() {
+ Integer value = getFieldAsInteger(AD_TYPE);
+ return AuthorizationType.fromValue(value);
+ }
+
+ public void setAuthzType(AuthorizationType authzType) {
+ setFieldAsInt(AD_TYPE, authzType.getValue());
+ }
+
+ public byte[] getAuthzData() {
+ return getFieldAsOctets(AD_DATA);
+ }
+
+ public void setAuthzData(byte[] authzData) {
+ setFieldAsOctets(AD_DATA, authzData);
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/7d9261af/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/AuthorizationType.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/AuthorizationType.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/AuthorizationType.java
new file mode 100644
index 0000000..a8ce0cd
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/AuthorizationType.java
@@ -0,0 +1,143 @@
+/**
+ * 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.common;
+
+import org.apache.kerby.kerberos.kerb.spec.KrbEnum;
+
+public enum AuthorizationType implements KrbEnum {
+ /**
+ * Constant for the "null" authorization type.
+ */
+ NULL(0),
+
+ /**
+ * Constant for the "if relevant" authorization type.
+ *
+ * RFC 4120
+ */
+ AD_IF_RELEVANT(1),
+
+ /**
+ * Constant for the "intended for server" authorization type.
+ *
+ * RFC 4120
+ */
+ AD_INTENDED_FOR_SERVER(2),
+
+ /**
+ * Constant for the "intended for application class" authorization type.
+ *
+ * RFC 4120
+ */
+ AD_INTENDED_FOR_APPLICATION_CLASS(3),
+
+ /**
+ * Constant for the "kdc issued" authorization type.
+ *
+ * RFC 4120
+ */
+ AD_KDC_ISSUED(4),
+
+ /**
+ * Constant for the "or" authorization type.
+ *
+ * RFC 4120
+ */
+ AD_OR(5),
+
+ /**
+ * Constant for the "mandatory ticket extensions" authorization type.
+ *
+ * RFC 4120
+ */
+ AD_MANDATORY_TICKET_EXTENSIONS(6),
+
+ /**
+ * Constant for the "in ticket extensions" authorization type.
+ *
+ * RFC 4120
+ */
+ AD_IN_TICKET_EXTENSIONS(7),
+
+ /**
+ * Constant for the "mandatory-for-kdc" authorization type.
+ *
+ * RFC 4120
+ */
+ AD_MANDATORY_FOR_KDC(8),
+
+ /**
+ * Constant for the "OSF DCE" authorization type.
+ *
+ * RFC 1510
+ */
+ OSF_DCE(64),
+
+ /**
+ * Constant for the "sesame" authorization type.
+ *
+ * RFC 1510
+ */
+ SESAME(65),
+
+ /**
+ * Constant for the "OSF-DCE pki certid" authorization type.
+ *
+ * RFC 1510
+ */
+ AD_OSF_DCE_PKI_CERTID(66),
+
+ /**
+ * Constant for the "sesame" authorization type.
+ *
+ * RFC 1510
+ */
+ AD_WIN2K_PAC(128),
+
+ /**
+ * Constant for the "sesame" authorization type.
+ *
+ * RFC 1510
+ */
+ AD_ETYPE_NEGOTIATION(129);
+
+ private final int value;
+
+ private AuthorizationType(int value) {
+ this.value = value;
+ }
+
+ @Override
+ public int getValue() {
+ return value;
+ }
+
+ public static AuthorizationType fromValue(Integer value) {
+ if (value != null) {
+ for (KrbEnum e : values()) {
+ if (e.getValue() == value.intValue()) {
+ return (AuthorizationType) e;
+ }
+ }
+ }
+
+ return NULL;
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/7d9261af/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/CheckSum.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/CheckSum.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/CheckSum.java
new file mode 100644
index 0000000..9822c02
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/CheckSum.java
@@ -0,0 +1,95 @@
+/**
+ * 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.common;
+
+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 java.util.Arrays;
+
+/**
+ Checksum ::= SEQUENCE {
+ cksumtype [0] Int32,
+ checksum [1] OCTET STRING
+ }
+ */
+public class CheckSum extends KrbSequenceType {
+ private static int CKSUM_TYPE = 0;
+ private static int CHECK_SUM = 1;
+
+ static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
+ new Asn1FieldInfo(CKSUM_TYPE, 0, Asn1Integer.class),
+ new Asn1FieldInfo(CHECK_SUM, 1, Asn1OctetString.class)
+ };
+
+ public CheckSum() {
+ super(fieldInfos);
+ }
+
+ public CheckSum(CheckSumType cksumType, byte[] checksum) {
+ this();
+
+ setCksumtype(cksumType);
+ setChecksum(checksum);
+ }
+
+ public CheckSum(int cksumType, byte[] checksum) {
+ this(CheckSumType.fromValue(cksumType), checksum);
+ }
+
+ public CheckSumType getCksumtype() {
+ Integer value = getFieldAsInteger(CKSUM_TYPE);
+ return CheckSumType.fromValue(value);
+ }
+
+ public void setCksumtype(CheckSumType cksumtype) {
+ setFieldAsInt(CKSUM_TYPE, cksumtype.getValue());
+ }
+
+ public byte[] getChecksum() {
+ return getFieldAsOctets(CHECK_SUM);
+ }
+
+ public void setChecksum(byte[] checksum) {
+ setFieldAsOctets(CHECK_SUM, checksum);
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ if (this == other) return true;
+ if (other == null || getClass() != other.getClass()) return false;
+
+ CheckSum that = (CheckSum) other;
+
+ if (getCksumtype() != that.getCksumtype()) return false;
+
+ return Arrays.equals(getChecksum(), that.getChecksum());
+ }
+
+ public boolean isEqual(CheckSum other) {
+ return this.equals(other);
+ }
+
+ public boolean isEqual(byte[] cksumBytes) {
+ return Arrays.equals(getChecksum(), cksumBytes);
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/7d9261af/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/CheckSumType.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/CheckSumType.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/CheckSumType.java
new file mode 100644
index 0000000..b7be286
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/CheckSumType.java
@@ -0,0 +1,115 @@
+/**
+ * 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.common;
+
+import org.apache.kerby.kerberos.kerb.spec.KrbEnum;
+
+public enum CheckSumType implements KrbEnum {
+ NONE(0, "none", "None checksum type"),
+
+ CRC32(0x0001, "crc32", "CRC-32"),
+
+ RSA_MD4(0x0002, "md4", "RSA-MD4"),
+
+ RSA_MD4_DES(0x0003, "md4-des", "RSA-MD4 with DES cbc mode"),
+
+ DES_CBC(0x0004, "des-cbc", "DES cbc mode"),
+ DES_MAC(0x0004, "des-mac", "DES cbc mode"),
+
+ //des-mac-k
+
+ //rsa-md4-des-k
+
+ RSA_MD5(0x0007, "md5", "RSA-MD5"),
+
+ RSA_MD5_DES(0x0008, "md5-des", "RSA-MD5 with DES cbc mode"),
+
+ NIST_SHA(0x0009, "sha", "NIST-SHA"),
+
+ HMAC_SHA1_DES3(0x000c, "hmac-sha1-des3", "HMAC-SHA1 DES3 key"),
+ HMAC_SHA1_DES3_KD(0x000c, "hmac-sha1-des3-kd", "HMAC-SHA1 DES3 key"),
+
+ ////RFC 3962. Used with ENCTYPE_AES128_CTS_HMAC_SHA1_96
+ HMAC_SHA1_96_AES128(0x000f, "hmac-sha1-96-aes128", "HMAC-SHA1 AES128 key"),
+
+ //RFC 3962. Used with ENCTYPE_AES256_CTS_HMAC_SHA1_96
+ HMAC_SHA1_96_AES256(0x0010, "hmac-sha1-96-aes256", "HMAC-SHA1 AES256 key"),
+
+ //RFC 6803
+ CMAC_CAMELLIA128(0x0011, "cmac-camellia128", "CMAC Camellia128 key"),
+
+ //RFC 6803
+ CMAC_CAMELLIA256(0x0012, "cmac-camellia256", "CMAC Camellia256 key"),
+
+ //Microsoft netlogon cksumtype
+ MD5_HMAC_ARCFOUR(-137, "md5-hmac-rc4", "Microsoft MD5 HMAC"),
+
+ //Microsoft md5 hmac cksumtype
+ HMAC_MD5_ARCFOUR(-138, "hmac-md5-arcfour", "Microsoft HMAC MD5"),
+ HMAC_MD5_ENC(-138, "hmac-md5-enc", "Microsoft HMAC MD5"),
+ HMAC_MD5_RC4(-138, "hmac-md5-rc4", "Microsoft HMAC MD5");
+
+ private final int value;
+
+ private final String name;
+
+ private final String displayName;
+
+ private CheckSumType(int value, String name, String displayName) {
+ this.value = value;
+ this.name = name;
+ this.displayName = displayName;
+ }
+
+ @Override
+ public int getValue() {
+ return value;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getDisplayName() {
+ return displayName;
+ }
+
+ public static CheckSumType fromValue(Integer value) {
+ if (value != null) {
+ for (KrbEnum e : values()) {
+ if (e.getValue() == value) {
+ return (CheckSumType) e;
+ }
+ }
+ }
+ return NONE;
+ }
+
+ public static CheckSumType fromName(String name) {
+ if (name != null) {
+ for (CheckSumType cs : values()) {
+ if (cs.getName() == name) {
+ return (CheckSumType) cs;
+ }
+ }
+ }
+ return NONE;
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/7d9261af/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/EncryptedData.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/EncryptedData.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/EncryptedData.java
new file mode 100644
index 0000000..3875000
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/EncryptedData.java
@@ -0,0 +1,96 @@
+/**
+ * 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.common;
+
+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 java.util.Arrays;
+
+/**
+ EncryptedData ::= SEQUENCE {
+ etype [0] Int32 -- EncryptionType --,
+ kvno [1] UInt32 OPTIONAL,
+ cipher [2] OCTET STRING -- ciphertext
+ }
+ */
+public class EncryptedData extends KrbSequenceType {
+ private static int ETYPE = 0;
+ private static int KVNO = 1;
+ private static int CIPHER = 2;
+
+ static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
+ new Asn1FieldInfo(ETYPE, 0, Asn1Integer.class),
+ new Asn1FieldInfo(KVNO, 1, Asn1Integer.class),
+ new Asn1FieldInfo(CIPHER, 2, Asn1OctetString.class)
+ };
+
+ public EncryptedData() {
+ super(fieldInfos);
+ }
+
+ public EncryptionType getEType() {
+ Integer value = getFieldAsInteger(ETYPE);
+ return EncryptionType.fromValue(value);
+ }
+
+ public void setEType(EncryptionType eType) {
+ setFieldAsInt(ETYPE, eType.getValue());
+ }
+
+ public int getKvno() {
+ Integer value = getFieldAsInteger(KVNO);
+ if (value != null) {
+ return value.intValue();
+ }
+ return -1;
+ }
+
+ public void setKvno(int kvno) {
+ setFieldAsInt(KVNO, kvno);
+ }
+
+ public byte[] getCipher() {
+ return getFieldAsOctets(CIPHER);
+ }
+
+ public void setCipher(byte[] cipher) {
+ setFieldAsOctets(CIPHER, cipher);
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ EncryptedData that = (EncryptedData) o;
+
+ /*
+ if (getKvno() != -1 && that.getKvno() != -1 &&
+ getKvno() != that.getKvno()) return false;
+ */
+
+ if (getEType() != that.getEType()) return false;
+
+ return Arrays.equals(getCipher(), that.getCipher());
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/7d9261af/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/EncryptionKey.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/EncryptionKey.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/EncryptionKey.java
new file mode 100644
index 0000000..6f7f540
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/EncryptionKey.java
@@ -0,0 +1,107 @@
+/**
+ * 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.common;
+
+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 java.util.Arrays;
+
+/**
+ EncryptionKey ::= SEQUENCE {
+ keytype [0] Int32 -- actually encryption type --,
+ keyvalue [1] OCTET STRING
+ }
+ */
+public class EncryptionKey extends KrbSequenceType {
+ private static int KEY_TYPE = 0;
+ private static int KEY_VALUE = 1;
+
+ private int kvno = -1;
+
+ static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
+ new Asn1FieldInfo(KEY_TYPE, 0, Asn1Integer.class),
+ new Asn1FieldInfo(KEY_VALUE, 1, Asn1OctetString.class)
+ };
+
+ public EncryptionKey() {
+ super(fieldInfos);
+ }
+
+ public EncryptionKey(int keyType, byte[] keyData) {
+ this(keyType, keyData, -1);
+ }
+
+ public EncryptionKey(int keyType, byte[] keyData, int kvno) {
+ this(EncryptionType.fromValue(keyType), keyData, kvno);
+ }
+
+ public EncryptionKey(EncryptionType keyType, byte[] keyData) {
+ this(keyType, keyData, -1);
+ }
+
+ public EncryptionKey(EncryptionType keyType, byte[] keyData, int kvno) {
+ this();
+ setKeyType(keyType);
+ setKeyData(keyData);
+ setKvno(kvno);
+ }
+
+ public EncryptionType getKeyType() {
+ Integer value = getFieldAsInteger(KEY_TYPE);
+ return EncryptionType.fromValue(value);
+ }
+
+ public void setKeyType(EncryptionType keyType) {
+ setFieldAsInt(KEY_TYPE, keyType.getValue());
+ }
+
+ public byte[] getKeyData() {
+ return getFieldAsOctets(KEY_VALUE);
+ }
+
+ public void setKeyData(byte[] keyData) {
+ setFieldAsOctets(KEY_VALUE, keyData);
+ }
+
+ public void setKvno(int kvno) {
+ this.kvno = kvno;
+ }
+
+ public int getKvno() {
+ return kvno;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ EncryptionKey that = (EncryptionKey) o;
+
+ if (kvno != -1 && that.kvno != -1 && kvno != that.kvno) return false;
+
+ if (getKeyType() != that.getKeyType()) return false;
+
+ return Arrays.equals(getKeyData(), that.getKeyData());
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/7d9261af/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/EncryptionType.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/EncryptionType.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/EncryptionType.java
new file mode 100644
index 0000000..45c2427
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/EncryptionType.java
@@ -0,0 +1,132 @@
+/**
+ * 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.common;
+
+import org.apache.kerby.kerberos.kerb.spec.KrbEnum;
+
+/**
+ * According to krb5.hin
+ */
+public enum EncryptionType implements KrbEnum {
+
+ NONE(0, "none", "None encryption type"),
+
+ DES_CBC_CRC(0x0001, "des-cbc-crc", "DES cbc mode with CRC-32"),
+
+ DES_CBC_MD4(0x0002, "des-cbc-md4", "DES cbc mode with RSA-MD4"),
+
+ DES_CBC_MD5(0x0003, "des-cbc-md5", "DES cbc mode with RSA-MD5"),
+ DES(0x0003, "des", "DES cbc mode with RSA-MD5"),
+
+ DES_CBC_RAW(0x0004, "des-cbc-raw", "DES cbc mode raw"),
+
+ DES3_CBC_SHA(0x0005, "des3-cbc-sha", "DES-3 cbc with SHA1"),
+
+ DES3_CBC_RAW(0x0006, "des3-cbc-raw", "Triple DES cbc mode raw"),
+
+ DES_HMAC_SHA1(0x0008, "des-hmac-sha1", "DES with HMAC/sha1"),
+
+ DSA_SHA1_CMS(0x0009, "dsa-sha1-cms", "DSA with SHA1, CMS signature"),
+
+ MD5_RSA_CMS(0x000a, "md5-rsa-cms", "MD5 with RSA, CMS signature"),
+
+ SHA1_RSA_CMS(0x000b, "sha1-rsa-cms", "SHA1 with RSA, CMS signature"),
+
+ RC2_CBC_ENV(0x000c, "rc2-cbc-env", "RC2 cbc mode, CMS enveloped data"),
+
+ RSA_ENV(0x000d, "rsa-env", "RSA encryption, CMS enveloped data"),
+
+ RSA_ES_OAEP_ENV(0x000e, "rsa-es-oaep-env", "RSA w/OEAP encryption, CMS enveloped data"),
+
+ DES3_CBC_ENV(0x000f, "des3-cbc-env", "DES-3 cbc mode, CMS enveloped data"),
+
+ DES3_CBC_SHA1(0x0010, "des3-cbc-sha1", "Triple DES cbc mode with HMAC/sha1"),
+ DES3_HMAC_SHA1(0x0010, "des3-hmac-sha1", "Triple DES cbc mode with HMAC/sha1"),
+ DES3_CBC_SHA1_KD(0x0010, "des3-cbc-sha1-kd", "Triple DES cbc mode with HMAC/sha1"),
+
+ AES128_CTS_HMAC_SHA1_96 (0x0011, "aes128-cts-hmac-sha1-96", "AES-128 CTS mode with 96-bit SHA-1 HMAC"),
+ AES128_CTS (0x0011, "aes128-cts", "AES-128 CTS mode with 96-bit SHA-1 HMAC"),
+
+ AES256_CTS_HMAC_SHA1_96(0x0012, "aes256-cts-hmac-sha1-96", "AES-256 CTS mode with 96-bit SHA-1 HMAC"),
+ AES256_CTS(0x0012, "aes256-cts", "AES-256 CTS mode with 96-bit SHA-1 HMAC"),
+
+ ARCFOUR_HMAC(0x0017, "arcfour-hmac", "ArcFour with HMAC/md5"),
+ RC4_HMAC(0x0017, "rc4-hmac", "ArcFour with HMAC/md5"),
+ ARCFOUR_HMAC_MD5(0x0017, "arcfour-hmac-md5", "ArcFour with HMAC/md5"),
+
+ ARCFOUR_HMAC_EXP(0x0018, "arcfour-hmac-exp", "Exportable ArcFour with HMAC/md5"),
+ RC4_HMAC_EXP(0x0018, "rc4-hmac-exp", "Exportable ArcFour with HMAC/md5"),
+ ARCFOUR_HMAC_MD5_EXP(0x0018, "arcfour-hmac-md5-exp", "Exportable ArcFour with HMAC/md5"),
+
+ CAMELLIA128_CTS_CMAC(0x0019, "camellia128-cts-cmac", "Camellia-128 CTS mode with CMAC"),
+ CAMELLIA128_CTS(0x0019, "camellia128-cts", "Camellia-128 CTS mode with CMAC"),
+
+ CAMELLIA256_CTS_CMAC(0x001a, "camellia256-cts-cmac", "Camellia-256 CTS mode with CMAC"),
+ CAMELLIA256_CTS(0x001a, "camellia256-cts", "Camellia-256 CTS mode with CMAC");
+
+ //UNKNOWN(0x01ff, "UNKNOWN", "Unknown encryption type");
+
+ private final int value;
+
+ private final String name;
+
+ private final String displayName;
+
+ private EncryptionType(int value, String name, String displayName) {
+ this.value = value;
+ this.name = name;
+ this.displayName = displayName;
+ }
+
+ @Override
+ public int getValue() {
+ return value;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getDisplayName() {
+ return displayName;
+ }
+
+ public static EncryptionType fromValue(Integer value) {
+ if (value != null) {
+ for (KrbEnum e : values()) {
+ if (e.getValue() == value) {
+ return (EncryptionType) e;
+ }
+ }
+ }
+ return NONE;
+ }
+
+ public static EncryptionType fromName(String name) {
+ if (name != null) {
+ for (EncryptionType e : values()) {
+ if (e.getName().equals(name)) {
+ return (EncryptionType) e;
+ }
+ }
+ }
+ return NONE;
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/7d9261af/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/EtypeInfo.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/EtypeInfo.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/EtypeInfo.java
new file mode 100644
index 0000000..7a82e4d
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/EtypeInfo.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.common;
+
+import org.apache.kerby.kerberos.kerb.spec.KrbSequenceOfType;
+
+/**
+ ETYPE-INFO ::= SEQUENCE OF ETYPE-INFO-ENTRY
+ */
+public class EtypeInfo extends KrbSequenceOfType<EtypeInfoEntry> {
+
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/7d9261af/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/EtypeInfo2.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/EtypeInfo2.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/EtypeInfo2.java
new file mode 100644
index 0000000..0635db9
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/EtypeInfo2.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.common;
+
+import org.apache.kerby.kerberos.kerb.spec.KrbSequenceOfType;
+
+/**
+ ETYPE-INFO2 ::= SEQUENCE SIZE (1..MAX) OF ETYPE-INFO2-ENTRY
+ */
+public class EtypeInfo2 extends KrbSequenceOfType<EtypeInfo2Entry> {
+
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/7d9261af/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/EtypeInfo2Entry.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/EtypeInfo2Entry.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/EtypeInfo2Entry.java
new file mode 100644
index 0000000..f435b93
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/EtypeInfo2Entry.java
@@ -0,0 +1,73 @@
+/**
+ * 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.common;
+
+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.KerberosString;
+import org.apache.kerby.kerberos.kerb.spec.KrbSequenceType;
+
+/**
+ ETYPE-INFO2-ENTRY ::= SEQUENCE {
+ etype [0] Int32,
+ salt [1] KerberosString OPTIONAL,
+ s2kparams [2] OCTET STRING OPTIONAL
+ }
+ */
+public class EtypeInfo2Entry extends KrbSequenceType {
+ private static int ETYPE = 0;
+ private static int SALT = 1;
+ private static int S2KPARAMS = 2;
+
+ static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
+ new Asn1FieldInfo(ETYPE, 0, Asn1Integer.class),
+ new Asn1FieldInfo(SALT, 1, KerberosString.class),
+ new Asn1FieldInfo(S2KPARAMS, 2, Asn1OctetString.class)
+ };
+
+ public EtypeInfo2Entry() {
+ super(fieldInfos);
+ }
+
+ public EncryptionType getEtype() {
+ return EncryptionType.fromValue(getFieldAsInt(ETYPE));
+ }
+
+ public void setEtype(EncryptionType etype) {
+ setField(ETYPE, etype);
+ }
+
+ public String getSalt() {
+ return getFieldAsString(SALT);
+ }
+
+ public void setSalt(String salt) {
+ setFieldAsString(SALT, salt);
+ }
+
+ public byte[] getS2kParams() {
+ return getFieldAsOctets(S2KPARAMS);
+ }
+
+ public void setS2kParams(byte[] s2kParams) {
+ setFieldAsOctets(S2KPARAMS, s2kParams);
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/7d9261af/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/EtypeInfoEntry.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/EtypeInfoEntry.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/EtypeInfoEntry.java
new file mode 100644
index 0000000..a93951d
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/EtypeInfoEntry.java
@@ -0,0 +1,61 @@
+/**
+ * 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.common;
+
+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;
+
+/**
+ ETYPE-INFO-ENTRY ::= SEQUENCE {
+ etype [0] Int32,
+ salt [1] OCTET STRING OPTIONAL
+ }
+ */
+public class EtypeInfoEntry extends KrbSequenceType {
+ private static int ETYPE = 0;
+ private static int SALT = 1;
+
+ static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
+ new Asn1FieldInfo(ETYPE, 0, Asn1Integer.class),
+ new Asn1FieldInfo(SALT, 1, Asn1OctetString.class)
+ };
+
+ public EtypeInfoEntry() {
+ super(fieldInfos);
+ }
+
+ public EncryptionType getEtype() {
+ return EncryptionType.fromValue(getFieldAsInt(ETYPE));
+ }
+
+ public void setEtype(EncryptionType etype) {
+ setField(ETYPE, etype);
+ }
+
+ public byte[] getSalt() {
+ return getFieldAsOctets(SALT);
+ }
+
+ public void setSalt(byte[] salt) {
+ setFieldAsOctets(SALT, salt);
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/7d9261af/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/HostAddrType.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/HostAddrType.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/HostAddrType.java
new file mode 100644
index 0000000..0fdb752
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/HostAddrType.java
@@ -0,0 +1,100 @@
+/**
+ * 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.common;
+
+import org.apache.kerby.kerberos.kerb.spec.KrbEnum;
+
+public enum HostAddrType implements KrbEnum {
+ /**
+ * Constant for the "null" host address type.
+ */
+ NULL(0),
+
+ /**
+ * Constant for the "Internet" host address type.
+ */
+ ADDRTYPE_INET(2),
+
+ /**
+ * Constant for the "Arpanet" host address type.
+ */
+ ADDRTYPE_IMPLINK(3),
+
+ /**
+ * Constant for the "CHAOS" host address type.
+ */
+ ADDRTYPE_CHAOS(5),
+
+ /**
+ * Constant for the "XEROX Network Services" host address type.
+ */
+ ADDRTYPE_XNS(6),
+
+ /**
+ * Constant for the "OSI" host address type.
+ */
+ ADDRTYPE_OSI(7),
+
+ /**
+ * Constant for the "DECnet" host address type.
+ */
+ ADDRTYPE_DECNET(12),
+
+ /**
+ * Constant for the "AppleTalk" host address type.
+ */
+ ADDRTYPE_APPLETALK(16),
+
+ /**
+ * Constant for the "NetBios" host address type.
+ *
+ * Not in RFC
+ */
+ ADDRTYPE_NETBIOS(20),
+
+ /**
+ * Constant for the "Internet Protocol V6" host address type.
+ */
+ ADDRTYPE_INET6(24);
+
+
+ private final int value;
+
+ private HostAddrType(int value) {
+ this.value = value;
+ }
+
+ @Override
+ public int getValue() {
+ return value;
+ }
+
+ public static HostAddrType fromValue(Integer value) {
+ if (value != null) {
+ for (KrbEnum e : values()) {
+ if (e.getValue() == value.intValue()) {
+ return (HostAddrType) e;
+ }
+ }
+ }
+
+ return NULL;
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/7d9261af/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/HostAddress.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/HostAddress.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/HostAddress.java
new file mode 100644
index 0000000..51928c6
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/HostAddress.java
@@ -0,0 +1,109 @@
+/**
+ * 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.common;
+
+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 java.net.InetAddress;
+import java.util.Arrays;
+
+/*
+HostAddress ::= SEQUENCE {
+ addr-type [0] Int32,
+ address [1] OCTET STRING
+}
+ */
+public class HostAddress extends KrbSequenceType {
+ private static int ADDR_TYPE = 0;
+ private static int ADDRESS = 1;
+
+ static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
+ new Asn1FieldInfo(ADDR_TYPE, 0, Asn1Integer.class),
+ new Asn1FieldInfo(ADDRESS, 1, Asn1OctetString.class)
+ };
+
+ public HostAddress() {
+ super(fieldInfos);
+ }
+
+ public HostAddress(InetAddress inetAddress) {
+ this();
+
+ setAddrType(HostAddrType.ADDRTYPE_INET);
+ setAddress(inetAddress.getAddress());
+ }
+
+ public HostAddrType getAddrType() {
+ Integer value = getFieldAsInteger(ADDR_TYPE);
+ return HostAddrType.fromValue(value);
+ }
+
+ public void setAddrType(HostAddrType addrType) {
+ setField(ADDR_TYPE, addrType);
+ }
+
+ public byte[] getAddress() {
+ return getFieldAsOctets(ADDRESS);
+ }
+
+ public void setAddress(byte[] address) {
+ setFieldAsOctets(ADDRESS, address);
+ }
+
+ public boolean equalsWith(InetAddress address) {
+ if (address == null) {
+ return false;
+ }
+ HostAddress that = new HostAddress(address);
+ return that.equals(this);
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ if (other == null) {
+ return false;
+ }
+ if (other == this) {
+ return true;
+ } else if (! (other instanceof HostAddress)) {
+ return false;
+ }
+
+ HostAddress that = (HostAddress) other;
+ if (getAddrType() == that.getAddrType() &&
+ Arrays.equals(getAddress(), that.getAddress())) {
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = getAddrType().getValue();
+ if (getAddress() != null) {
+ result = 31 * result + getAddress().hashCode();
+ }
+
+ return result;
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/7d9261af/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/HostAddresses.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/HostAddresses.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/HostAddresses.java
new file mode 100644
index 0000000..9121ce5
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/HostAddresses.java
@@ -0,0 +1,43 @@
+/**
+ * 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.common;
+
+import org.apache.kerby.kerberos.kerb.spec.KrbSequenceOfType;
+
+import java.net.InetAddress;
+
+/**
+ -- NOTE: HostAddresses is always used as an OPTIONAL field and
+ -- should not be empty.
+ HostAddresses -- NOTE: subtly different from rfc1510,
+ -- but has a value mapping and encodes the same
+ ::= SEQUENCE OF HostAddress
+ */
+public class HostAddresses extends KrbSequenceOfType<HostAddress> {
+
+ public boolean contains(InetAddress address) {
+ for (HostAddress hostAddress : getElements()) {
+ if (hostAddress.equalsWith(address)) {
+ return true;
+ }
+ }
+ return false;
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/7d9261af/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/KeyUsage.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/KeyUsage.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/KeyUsage.java
new file mode 100644
index 0000000..a1055da
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/KeyUsage.java
@@ -0,0 +1,128 @@
+/**
+ * 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.common;
+
+import org.apache.kerby.kerberos.kerb.spec.KrbEnum;
+
+/**
+ * From krb5.hin
+ */
+public enum KeyUsage implements KrbEnum
+{
+ UNKNOWN(-1),
+ NONE(0),
+ //AS-REQ PA-ENC-TIMESTAMP padata timestamp, encrypted with the client key
+ AS_REQ_PA_ENC_TS(1),
+ //AS-REP Ticket and TGS-REP Ticket (includes TGS session key or application session key),
+ //encrypted with the service key (Section 5.3)
+ KDC_REP_TICKET(2),
+ //AS-REP encrypted part (includes TGS session key or application session key),
+ //encrypted with the client key (Section 5.4.2)
+ AS_REP_ENCPART(3),
+ //TGS-REQ KDC-REQ-BODY AuthorizationData,
+ //encrypted with the TGS session key (Section 5.4.1)
+ TGS_REQ_AD_SESSKEY(4),
+ //TGS-REQ KDC-REQ-BODY AuthorizationData,
+ //encrypted with the TGS authenticator subkey (Section 5.4.1)
+ TGS_REQ_AD_SUBKEY(5),
+ //TGS-REQ PA-TGS-REQ padata AP-REQ Authenticator cksum,
+ //keyed with the TGS session key (Section 5.5.1)
+ TGS_REQ_AUTH_CKSUM(6),
+ //TGS-REQ PA-TGS-REQ padata AP-REQ Authenticator (includes TGS authenticator subkey),
+ //encrypted with the TGS session key (Section 5.5.1)
+ TGS_REQ_AUTH(7),
+ //TGS-REP encrypted part (includes application session key),
+ //encrypted with the TGS session key (Section 5.4.2)
+ TGS_REP_ENCPART_SESSKEY(8),
+ //TGS-REP encrypted part (includes application session key),
+ //encrypted with the TGS authenticator subkey (Section 5.4.2)
+ TGS_REP_ENCPART_SUBKEY(9),
+ //AP-REQ Authenticator cksum, keyed with the application session key (Section 5.5.1)
+ AP_REQ_AUTH_CKSUM(10),
+ //AP-REQ Authenticator (includes application authenticator subkey),
+ //encrypted with the application session key (Section 5.5.1)
+ AP_REQ_AUTH(11),
+ //AP-REP encrypted part (includes application session subkey),
+ //encrypted with the application session key (Section 5.5.2)
+ AP_REP_ENCPART(12),
+ //KRB-PRIV encrypted part, encrypted with a key chosen by the application (Section 5.7.1)
+ KRB_PRIV_ENCPART(13),
+ KRB_CRED_ENCPART(14),
+ KRB_SAFE_CKSUM(15),
+ APP_DATA_ENCRYPT(16),
+ APP_DATA_CKSUM(17),
+ KRB_ERROR_CKSUM(18),
+ AD_KDCISSUED_CKSUM(19),
+ AD_MTE(20),
+ AD_ITE(21),
+ GSS_TOK_MIC(22),
+ GSS_TOK_WRAP_INTEG(23),
+ GSS_TOK_WRAP_PRIV(24),
+ //Defined in Integrating SAM Mechanisms with Kerberos draft
+ PA_SAM_CHALLENGE_CKSUM(25),
+ //Note conflict with @ref PA_S4U_X509_USER_REQUEST
+ PA_SAM_CHALLENGE_TRACKID(26),
+ //Note conflict with @ref PA_S4U_X509_USER_REPLY
+ PA_SAM_RESPONSE(27),
+ //Defined in [MS-SFU]
+ //Note conflict with @ref PA_SAM_CHALLENGE_TRACKID
+ PA_S4U_X509_USER_REQUEST(26),
+ //Note conflict with @ref PA_SAM_RESPONSE
+ PA_S4U_X509_USER_REPLY(27),
+ //unused
+ PA_REFERRAL(26),
+ AD_SIGNEDPATH(-21),
+ IAKERB_FINISHED(42),
+ PA_PKINIT_KX(44),
+ PA_OTP_REQUEST(45), //See RFC 6560 section 4.2
+ //define in preauth-framework
+ FAST_REQ_CHKSUM(50),
+ FAST_ENC(51),
+ FAST_REP(52),
+ FAST_FINISHED(53),
+ ENC_CHALLENGE_CLIENT(54),
+ ENC_CHALLENGE_KDC(55),
+ AS_REQ(56);
+
+ private int value;
+
+ private KeyUsage(int value) {
+ this.value = value;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static KeyUsage fromValue(Integer value) {
+ if (value != null) {
+ for (KrbEnum e : values()) {
+ if (e.getValue() == value) {
+ return (KeyUsage) e;
+ }
+ }
+ }
+ return UNKNOWN;
+ }
+
+ public static final boolean isValid(int usage) {
+ return usage > -1;
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/7d9261af/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/KrbError.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/KrbError.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/KrbError.java
new file mode 100644
index 0000000..1d19c88
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/KrbError.java
@@ -0,0 +1,166 @@
+/**
+ * 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.common;
+
+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.KrbErrorCode;
+import org.apache.kerby.kerberos.kerb.spec.KerberosString;
+import org.apache.kerby.kerberos.kerb.spec.KerberosTime;
+
+/**
+ KRB-ERROR ::= [APPLICATION 30] SEQUENCE {
+ pvno [0] INTEGER (5),
+ msg-type [1] INTEGER (30),
+ ctime [2] KerberosTime OPTIONAL,
+ cusec [3] Microseconds OPTIONAL,
+ stime [4] KerberosTime,
+ susec [5] Microseconds,
+ error-code [6] Int32,
+ crealm [7] Realm OPTIONAL,
+ cname [8] PrincipalName OPTIONAL,
+ realm [9] Realm -- service realm --,
+ sname [10] PrincipalName -- service name --,
+ e-text [11] KerberosString OPTIONAL,
+ e-data [12] OCTET STRING OPTIONAL
+ }
+ */
+public class KrbError extends KrbMessage {
+ private static int CTIME = 2;
+ private static int CUSEC = 3;
+ private static int STIME = 4;
+ private static int SUSEC = 5;
+ private static int ERROR_CODE = 6;
+ private static int CREALM = 7;
+ private static int CNAME = 8;
+ private static int REALM = 9;
+ private static int SNAME = 10;
+ private static int ETEXT = 11;
+ private static int EDATA = 12;
+
+ static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
+ new Asn1FieldInfo(PVNO, Asn1Integer.class),
+ new Asn1FieldInfo(MSG_TYPE, Asn1Integer.class),
+ new Asn1FieldInfo(CTIME, KerberosTime.class),
+ new Asn1FieldInfo(CUSEC, Asn1Integer.class),
+ new Asn1FieldInfo(STIME, KerberosTime.class),
+ new Asn1FieldInfo(SUSEC, Asn1Integer.class),
+ new Asn1FieldInfo(ERROR_CODE, Asn1Integer.class),
+ new Asn1FieldInfo(CREALM, KerberosString.class),
+ new Asn1FieldInfo(CNAME, PrincipalName.class),
+ new Asn1FieldInfo(REALM, KerberosString.class),
+ new Asn1FieldInfo(SNAME, PrincipalName.class),
+ new Asn1FieldInfo(ETEXT, KerberosString.class),
+ new Asn1FieldInfo(EDATA, Asn1OctetString.class)
+ };
+
+ public KrbError() {
+ super(KrbMessageType.KRB_ERROR, fieldInfos);
+ }
+
+ public KerberosTime getCtime() {
+ return getFieldAs(CTIME, KerberosTime.class);
+ }
+
+ public void setCtime(KerberosTime ctime) {
+ setFieldAs(CTIME, ctime);
+ }
+
+ public int getCusec() {
+ return getFieldAsInt(CUSEC);
+ }
+
+ public void setCusec(int cusec) {
+ setFieldAsInt(0, cusec);
+ }
+
+ public KerberosTime getStime() {
+ return getFieldAs(STIME, KerberosTime.class);
+ }
+
+ public void setStime(KerberosTime stime) {
+ setFieldAs(STIME, stime);
+ }
+
+ public int getSusec() {
+ return getFieldAsInt(SUSEC);
+ }
+
+ public void setSusec(int susec) {
+ setFieldAsInt(0, susec);
+ }
+
+ public KrbErrorCode getErrorCode() {
+ return KrbErrorCode.fromValue(getFieldAsInt(ERROR_CODE));
+ }
+
+ public void setErrorCode(KrbErrorCode errorCode) {
+ setField(0, errorCode);
+ }
+
+ public String getCrealm() {
+ return getFieldAsString(CREALM);
+ }
+
+ public void setCrealm(String realm) {
+ setFieldAs(CREALM, new KerberosString(realm));
+ }
+
+ public PrincipalName getCname() {
+ return getFieldAs(CNAME, PrincipalName.class);
+ }
+
+ public void setCname(PrincipalName sname) {
+ setFieldAs(CNAME, sname);
+ }
+
+ public PrincipalName getSname() {
+ return getFieldAs(SNAME, PrincipalName.class);
+ }
+
+ public void setSname(PrincipalName sname) {
+ setFieldAs(SNAME, sname);
+ }
+
+ public String getRealm() {
+ return getFieldAsString(REALM);
+ }
+
+ public void setRealm(String realm) {
+ setFieldAs(REALM, new KerberosString(realm));
+ }
+
+ public String getEtext() {
+ return getFieldAsString(ETEXT);
+ }
+
+ public void setEtext(String realm) {
+ setFieldAs(ETEXT, new KerberosString(realm));
+ }
+
+ public byte[] getEdata() {
+ return getFieldAsOctetBytes(EDATA);
+ }
+
+ public void setEdata(byte[] edata) {
+ setFieldAsOctetBytes(EDATA, edata);
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/7d9261af/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/KrbFlags.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/KrbFlags.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/KrbFlags.java
new file mode 100644
index 0000000..426516c
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/KrbFlags.java
@@ -0,0 +1,118 @@
+/**
+ * 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.common;
+
+import org.apache.kerby.asn1.type.Asn1BitString;
+import org.apache.kerby.kerberos.kerb.spec.KrbEnum;
+
+import java.io.IOException;
+
+/**
+ KrbFlags ::= BIT STRING (SIZE (32..MAX))
+ -- minimum number of bits shall be sent,
+ -- but no fewer than 32
+ */
+public class KrbFlags extends Asn1BitString {
+ private static final int MAX_SIZE = 32;
+ private int flags;
+
+ public KrbFlags() {
+ this(0);
+ }
+
+ public KrbFlags(int value) {
+ super();
+ setFlags(value);
+ }
+
+ public void setFlags(int flags) {
+ this.flags = flags;
+ flags2Value();
+ }
+
+ public int getFlags() {
+ return flags;
+ }
+
+ public boolean isFlagSet(int flag) {
+ return (flags & (1 << flagPos(flag))) != 0;
+ }
+
+ public void setFlag(int flag) {
+ int newFlags = flags | 1 << flagPos(flag);
+ setFlags(newFlags);
+ }
+
+ public void clearFlag(int flag) {
+ int newFlags = flags & ~(1 << flagPos(flag));
+ setFlags(newFlags);
+ }
+
+ public void clear() {
+ setFlags(0);
+ }
+
+ public boolean isFlagSet(KrbEnum flag) {
+ return isFlagSet(flag.getValue());
+ }
+
+ public void setFlag(KrbEnum flag) {
+ setFlag(flag.getValue());
+ }
+
+ public void setFlag(KrbEnum flag, boolean isSet) {
+ if (isSet) {
+ setFlag(flag.getValue());
+ } else {
+ clearFlag(flag);
+ }
+ }
+
+ public void clearFlag(KrbEnum flag) {
+ clearFlag(flag.getValue());
+ }
+
+ private int flagPos(int flag) {
+ return MAX_SIZE - 1 - flag;
+ }
+
+ private void flags2Value() {
+ byte[] bytes = new byte[4];
+ bytes[0] = (byte) (flags >> 24);
+ bytes[1] = (byte) ((flags >> 16) & 0xFF);
+ bytes[2] = (byte) ((flags >> 8) & 0xFF);
+ bytes[3] = (byte) (flags & 0xFF);
+
+ setValue(bytes);
+ }
+
+ @Override
+ protected void toValue() throws IOException {
+ super.toValue();
+
+ if (getPadding() != 0 || getValue().length != 4) {
+ throw new IOException("Bad bitstring decoded as invalid krb flags");
+ }
+
+ byte[] valueBytes = getValue();
+ flags = ((valueBytes[0] & 0xFF) << 24) | ((valueBytes[1] & 0xFF) << 16) |
+ ((valueBytes[2] & 0xFF) << 8) | (0xFF & valueBytes[3]);
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/7d9261af/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/KrbMessage.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/KrbMessage.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/KrbMessage.java
new file mode 100644
index 0000000..965147f
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/KrbMessage.java
@@ -0,0 +1,54 @@
+/**
+ * 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.common;
+
+import org.apache.kerby.asn1.type.Asn1FieldInfo;
+import org.apache.kerby.kerberos.kerb.KrbConstant;
+import org.apache.kerby.kerberos.kerb.spec.KrbAppSequenceType;
+
+public abstract class KrbMessage extends KrbAppSequenceType {
+ protected static int PVNO = 0;
+ protected static int MSG_TYPE = 1;
+
+ private final int pvno = KrbConstant.KRB_V5;
+
+ public KrbMessage(KrbMessageType msgType, Asn1FieldInfo[] fieldInfos) {
+ super(msgType.getValue(), fieldInfos);
+ setPvno(pvno);
+ setMsgType(msgType);
+ }
+
+ public int getPvno() {
+ return pvno;
+ }
+
+ protected void setPvno(int pvno) {
+ setFieldAsInt(0, pvno);
+ }
+
+ public KrbMessageType getMsgType() {
+ Integer value = getFieldAsInteger(MSG_TYPE);
+ return KrbMessageType.fromValue(value);
+ }
+
+ public void setMsgType(KrbMessageType msgType) {
+ setFieldAsInt(MSG_TYPE, msgType.getValue());
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/7d9261af/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/KrbMessageType.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/KrbMessageType.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/KrbMessageType.java
new file mode 100644
index 0000000..0f6cb59
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/KrbMessageType.java
@@ -0,0 +1,59 @@
+/**
+ * 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.common;
+
+import org.apache.kerby.kerberos.kerb.spec.KrbEnum;
+
+public enum KrbMessageType implements KrbEnum {
+ NONE(-1),
+ AS_REQ(10),
+ AS_REP(11),
+ TGS_REQ(12),
+ TGS_REP(13),
+ AP_REQ(14),
+ AP_REP(15),
+ KRB_SAFE(20),
+ KRB_PRIV(21),
+ KRB_CRED(22),
+ KRB_ERROR(30);
+
+ private int value;
+
+ private KrbMessageType(int value) {
+ this.value = value;
+ }
+
+ @Override
+ public int getValue() {
+ return value;
+ }
+
+ public static KrbMessageType fromValue(Integer value) {
+ if (value != null) {
+ for (KrbEnum e : values()) {
+ if (e.getValue() == value.intValue()) {
+ return (KrbMessageType) e;
+ }
+ }
+ }
+
+ return NONE;
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/7d9261af/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/KrbToken.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/KrbToken.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/KrbToken.java
new file mode 100644
index 0000000..19da8a7
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/KrbToken.java
@@ -0,0 +1,99 @@
+/**
+ * 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.common;
+
+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 java.nio.ByteBuffer;
+import java.util.Map;
+
+/**
+ KRB-TOKEN_VALUE ::= SEQUENCE {
+ token-format [0] INTEGER,
+ token-value [1] OCTET STRING,
+ }
+ */
+public class KrbToken extends KrbSequenceType {
+ private static KrbTokenEncoder tokenEncoder;
+
+ private static int TOKEN_FORMAT = 0;
+ private static int TOKEN_VALUE = 1;
+
+ private Map<String, Object> attributes;
+
+ static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
+ new Asn1FieldInfo(TOKEN_FORMAT, 0, Asn1Integer.class),
+ new Asn1FieldInfo(TOKEN_VALUE, 1, Asn1OctetString.class)
+ };
+
+ public KrbToken() {
+ super(fieldInfos);
+ }
+
+ @Override
+ public void encode(ByteBuffer buffer) {
+ setTokenValue(tokenEncoder.encode(this));
+ super.encode(buffer);
+ }
+
+ /*
+ @Override
+ public void decode(ByteBuffer content) throws IOException {
+ super.decode(content);
+ this.attributes = tokenEncoder.decode(this);
+ }
+ */
+
+ public static void setTokenEncoder(KrbTokenEncoder encoder) {
+ tokenEncoder = encoder;
+ }
+
+ public TokenFormat getTokenFormat() {
+ Integer value = getFieldAsInteger(TOKEN_FORMAT);
+ return TokenFormat.fromValue(value);
+ }
+
+ public void setTokenFormat(TokenFormat tokenFormat) {
+ setFieldAsInt(TOKEN_FORMAT, tokenFormat.getValue());
+ }
+
+ public byte[] getTokenValue() {
+ return getFieldAsOctets(TOKEN_VALUE);
+ }
+
+ public void setTokenValue(byte[] tokenValue) {
+ setFieldAsOctets(TOKEN_VALUE, tokenValue);
+ }
+
+ public Map<String, Object> getAttributes() {
+ if (attributes == null) {
+ this.attributes = tokenEncoder.decode(this);
+ }
+ return attributes;
+ }
+
+ public String getPrincipal() {
+ return (String) attributes.get("sub");
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/7d9261af/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/KrbTokenEncoder.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/KrbTokenEncoder.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/KrbTokenEncoder.java
new file mode 100644
index 0000000..761b353
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/KrbTokenEncoder.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.common;
+
+import java.util.Map;
+
+public interface KrbTokenEncoder {
+
+ public byte[] encode(KrbToken token);
+ public Map<String, Object> decode(KrbToken token);
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/7d9261af/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/LastReq.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/LastReq.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/LastReq.java
new file mode 100644
index 0000000..b22906e
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/LastReq.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.common;
+
+import org.apache.kerby.kerberos.kerb.spec.KrbSequenceOfType;
+
+/**
+ LastReq ::= SEQUENCE OF SEQUENCE {
+ lr-type [0] Int32,
+ lr-value [1] KerberosTime
+ }
+ */
+public class LastReq extends KrbSequenceOfType<LastReqEntry> {
+
+}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/7d9261af/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/LastReqEntry.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/LastReqEntry.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/LastReqEntry.java
new file mode 100644
index 0000000..d3c11a8
--- /dev/null
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/spec/common/LastReqEntry.java
@@ -0,0 +1,62 @@
+/**
+ * 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.common;
+
+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;
+
+/**
+ LastReq ::= SEQUENCE OF SEQUENCE {
+ lr-type [0] Int32,
+ lr-value [1] KerberosTime
+ }
+ */
+public class LastReqEntry extends KrbSequenceType {
+ private static int LR_TYPE = 0;
+ private static int LR_VALUE = 1;
+
+ static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
+ new Asn1FieldInfo(LR_TYPE, 0, Asn1Integer.class),
+ new Asn1FieldInfo(LR_VALUE, 1, KerberosTime.class)
+ };
+
+ public LastReqEntry() {
+ super(fieldInfos);
+ }
+
+ public LastReqType getLrType() {
+ Integer value = getFieldAsInteger(LR_TYPE);
+ return LastReqType.fromValue(value);
+ }
+
+ public void setLrType(LastReqType lrType) {
+ setFieldAsInt(LR_TYPE, lrType.getValue());
+ }
+
+ public KerberosTime getLrValue() {
+ return getFieldAs(LR_VALUE, KerberosTime.class);
+ }
+
+ public void setLrValue(KerberosTime lrValue) {
+ setFieldAs(LR_VALUE, lrValue);
+ }
+}