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/12 14:06:36 UTC

[28/50] [abbrv] directory-kerberos git commit: Renaming packages in haox-kerb projects, using "apache"

Renaming packages in haox-kerb projects, using "apache"


Project: http://git-wip-us.apache.org/repos/asf/directory-kerberos/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerberos/commit/967d7e1c
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerberos/tree/967d7e1c
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerberos/diff/967d7e1c

Branch: refs/heads/master
Commit: 967d7e1cd04b9c0db5438cc226ce3f1936cb2399
Parents: 5a980a4
Author: Drankye <dr...@gmail.com>
Authored: Thu Dec 25 16:54:51 2014 +0800
Committer: Drankye <dr...@gmail.com>
Committed: Thu Dec 25 16:54:51 2014 +0800

----------------------------------------------------------------------
 .../kerberos/benchmark/KrbCodecPerfTest.java    |   4 +-
 .../java/org/haox/kdc/server/HaoxKdcServer.java |   4 +-
 .../identitybackend/LdapIdentityBackend.java    |   4 +-
 .../src/main/java/org/haox/kdc/tool/Kinit.java  |   2 +-
 .../apache/kerberos/kerb/client/KrbClient.java  | 302 +++++++++
 .../apache/kerberos/kerb/client/KrbConfig.java  |  97 +++
 .../kerberos/kerb/client/KrbConfigKey.java      |  45 ++
 .../apache/kerberos/kerb/client/KrbContext.java |  78 +++
 .../apache/kerberos/kerb/client/KrbHandler.java |  80 +++
 .../apache/kerberos/kerb/client/KrbOption.java  |  72 ++
 .../apache/kerberos/kerb/client/KrbOptions.java |  77 +++
 .../kerb/client/event/KrbClientEvent.java       |  24 +
 .../kerb/client/event/KrbClientEventType.java   |  10 +
 .../client/preauth/AbstractPreauthPlugin.java   | 103 +++
 .../kerb/client/preauth/FastContext.java        |  17 +
 .../kerb/client/preauth/KrbPreauth.java         |  88 +++
 .../kerb/client/preauth/PreauthContext.java     |  89 +++
 .../kerb/client/preauth/PreauthHandle.java      |  53 ++
 .../kerb/client/preauth/PreauthHandler.java     | 230 +++++++
 .../kerb/client/preauth/UserResponseItem.java   |  12 +
 .../kerb/client/preauth/UserResponser.java      |  58 ++
 .../client/preauth/builtin/EncTsPreauth.java    |  75 +++
 .../kerb/client/preauth/builtin/TgtPreauth.java |  47 ++
 .../client/preauth/pkinit/PkinitContext.java    |  11 +
 .../client/preauth/pkinit/PkinitPreauth.java    | 214 ++++++
 .../preauth/pkinit/PkinitRequestContext.java    |  25 +
 .../preauth/pkinit/PkinitRequestOpts.java       |  21 +
 .../kerb/client/preauth/token/TokenContext.java |   9 +
 .../kerb/client/preauth/token/TokenPreauth.java | 105 +++
 .../preauth/token/TokenRequestContext.java      |  13 +
 .../kerberos/kerb/client/request/AsRequest.java | 108 +++
 .../kerb/client/request/AsRequestWithCert.java  |  38 ++
 .../client/request/AsRequestWithPasswd.java     |  31 +
 .../kerb/client/request/AsRequestWithToken.java |  33 +
 .../kerb/client/request/KdcRequest.java         | 339 ++++++++++
 .../kerb/client/request/TgsRequest.java         | 117 ++++
 .../java/org/haox/kerb/client/KrbClient.java    | 302 ---------
 .../java/org/haox/kerb/client/KrbConfig.java    |  97 ---
 .../java/org/haox/kerb/client/KrbConfigKey.java |  45 --
 .../java/org/haox/kerb/client/KrbContext.java   |  79 ---
 .../java/org/haox/kerb/client/KrbHandler.java   |  80 ---
 .../java/org/haox/kerb/client/KrbOption.java    |  72 --
 .../java/org/haox/kerb/client/KrbOptions.java   |  77 ---
 .../haox/kerb/client/event/KrbClientEvent.java  |  24 -
 .../kerb/client/event/KrbClientEventType.java   |  10 -
 .../client/preauth/AbstractPreauthPlugin.java   | 103 ---
 .../haox/kerb/client/preauth/FastContext.java   |  17 -
 .../haox/kerb/client/preauth/KrbPreauth.java    |  88 ---
 .../kerb/client/preauth/PreauthContext.java     |  89 ---
 .../haox/kerb/client/preauth/PreauthHandle.java |  53 --
 .../kerb/client/preauth/PreauthHandler.java     | 230 -------
 .../kerb/client/preauth/UserResponseItem.java   |  12 -
 .../haox/kerb/client/preauth/UserResponser.java |  58 --
 .../client/preauth/builtin/EncTsPreauth.java    |  75 ---
 .../kerb/client/preauth/builtin/TgtPreauth.java |  47 --
 .../client/preauth/pkinit/PkinitContext.java    |  11 -
 .../client/preauth/pkinit/PkinitPreauth.java    | 214 ------
 .../preauth/pkinit/PkinitRequestContext.java    |  25 -
 .../preauth/pkinit/PkinitRequestOpts.java       |  21 -
 .../kerb/client/preauth/token/TokenContext.java |   9 -
 .../kerb/client/preauth/token/TokenPreauth.java | 105 ---
 .../preauth/token/TokenRequestContext.java      |  13 -
 .../org/haox/kerb/client/request/AsRequest.java | 108 ---
 .../kerb/client/request/AsRequestWithCert.java  |  38 --
 .../client/request/AsRequestWithPasswd.java     |  31 -
 .../kerb/client/request/AsRequestWithToken.java |  33 -
 .../haox/kerb/client/request/KdcRequest.java    | 339 ----------
 .../haox/kerb/client/request/TgsRequest.java    | 117 ----
 .../src/main/java/org/haox/kerb/KrbThrow.java   |  16 -
 .../src/main/java/org/haox/kerb/Message.java    |  24 -
 .../main/java/org/haox/kerb/MessageCode.java    |   5 -
 .../org/haox/kerb/common/EncryptionUtil.java    |  79 ---
 .../org/haox/kerb/common/KrbConfHelper.java     |  23 -
 .../java/org/haox/kerb/common/KrbErrorUtil.java |  48 --
 .../haox/kerb/common/KrbStreamingDecoder.java   |  23 -
 .../main/java/org/haox/kerb/common/KrbUtil.java |  30 -
 .../main/java/org/haox/kerb/preauth/PaFlag.java |  30 -
 .../java/org/haox/kerb/preauth/PaFlags.java     |  18 -
 .../haox/kerb/preauth/PluginRequestContext.java |   8 -
 .../haox/kerb/preauth/PreauthPluginMeta.java    |  13 -
 .../kerb/preauth/builtin/EncTsPreauthMeta.java  |  26 -
 .../kerb/preauth/builtin/TgtPreauthMeta.java    |  29 -
 .../haox/kerb/preauth/pkinit/IdentityOpts.java  |  25 -
 .../haox/kerb/preauth/pkinit/IdentityType.java  |  10 -
 .../haox/kerb/preauth/pkinit/PkinitIdenity.java | 109 ----
 .../kerb/preauth/pkinit/PkinitPreauthMeta.java  |  27 -
 .../haox/kerb/preauth/pkinit/PluginOpts.java    |  48 --
 .../kerb/preauth/token/TokenPreauthMeta.java    |  27 -
 .../src/main/resources/kdc-krb5.conf            |  25 -
 .../kerb-common/src/main/resources/kdc.ldiff    |  30 -
 .../org/apache/kerberos/kerb/KrbConstant.java   |   7 +
 .../org/apache/kerberos/kerb/KrbErrorCode.java  | 109 ++++
 .../apache/kerberos/kerb/KrbErrorException.java |  16 +
 .../org/apache/kerberos/kerb/KrbException.java  |  24 +
 .../apache/kerberos/kerb/codec/KrbCodec.java    |  74 +++
 .../kerberos/kerb/spec/KerberosString.java      |  15 +
 .../kerberos/kerb/spec/KerberosStrings.java     |  24 +
 .../apache/kerberos/kerb/spec/KerberosTime.java |  99 +++
 .../kerberos/kerb/spec/KrbAppSequenceType.java  |  38 ++
 .../org/apache/kerberos/kerb/spec/KrbEnum.java  |   5 +
 .../apache/kerberos/kerb/spec/KrbIntegers.java  |  35 +
 .../kerberos/kerb/spec/KrbSequenceOfType.java   |  24 +
 .../kerberos/kerb/spec/KrbSequenceType.java     |  36 +
 .../apache/kerberos/kerb/spec/ap/ApOption.java  |  39 ++
 .../apache/kerberos/kerb/spec/ap/ApOptions.java |  14 +
 .../org/apache/kerberos/kerb/spec/ap/ApRep.java |  46 ++
 .../org/apache/kerberos/kerb/spec/ap/ApReq.java |  70 ++
 .../kerberos/kerb/spec/ap/Authenticator.java    | 125 ++++
 .../kerberos/kerb/spec/ap/EncAPRepPart.java     |  66 ++
 .../kerberos/kerb/spec/common/AdToken.java      |  30 +
 .../kerb/spec/common/AuthorizationData.java     |  13 +
 .../spec/common/AuthorizationDataEntry.java     |  43 ++
 .../kerb/spec/common/AuthorizationType.java     | 124 ++++
 .../kerberos/kerb/spec/common/CheckSum.java     |  76 +++
 .../kerberos/kerb/spec/common/CheckSumType.java |  96 +++
 .../kerb/spec/common/EncryptedData.java         |  77 +++
 .../kerb/spec/common/EncryptionKey.java         |  88 +++
 .../kerb/spec/common/EncryptionType.java        | 113 ++++
 .../kerberos/kerb/spec/common/EtypeInfo.java    |  10 +
 .../kerberos/kerb/spec/common/EtypeInfo2.java   |  10 +
 .../kerb/spec/common/EtypeInfo2Entry.java       |  54 ++
 .../kerb/spec/common/EtypeInfoEntry.java        |  42 ++
 .../kerberos/kerb/spec/common/HostAddrType.java |  81 +++
 .../kerberos/kerb/spec/common/HostAddress.java  |  90 +++
 .../kerb/spec/common/HostAddresses.java         |  24 +
 .../kerberos/kerb/spec/common/KeyUsage.java     | 109 ++++
 .../kerberos/kerb/spec/common/KrbError.java     | 147 +++++
 .../kerberos/kerb/spec/common/KrbFlags.java     |  99 +++
 .../kerberos/kerb/spec/common/KrbMessage.java   |  35 +
 .../kerb/spec/common/KrbMessageType.java        |  40 ++
 .../kerberos/kerb/spec/common/KrbToken.java     |  80 +++
 .../kerb/spec/common/KrbTokenEncoder.java       |   9 +
 .../kerberos/kerb/spec/common/LastReq.java      |  13 +
 .../kerberos/kerb/spec/common/LastReqEntry.java |  43 ++
 .../kerberos/kerb/spec/common/LastReqType.java  |  43 ++
 .../kerberos/kerb/spec/common/MethodData.java   |  11 +
 .../kerberos/kerb/spec/common/NameType.java     |  35 +
 .../kerb/spec/common/PrincipalName.java         | 180 +++++
 .../apache/kerberos/kerb/spec/common/Realm.java |  15 +
 .../kerberos/kerb/spec/common/SamType.java      |  47 ++
 .../kerberos/kerb/spec/common/TokenFormat.java  |  31 +
 .../kerb/spec/common/TransitedEncoding.java     |  43 ++
 .../kerb/spec/common/TransitedEncodingType.java |  32 +
 .../kerberos/kerb/spec/fast/ArmorType.java      |  31 +
 .../kerberos/kerb/spec/fast/FastOption.java     |  32 +
 .../kerberos/kerb/spec/fast/FastOptions.java    |  14 +
 .../kerberos/kerb/spec/fast/KrbFastArmor.java   |  45 ++
 .../kerb/spec/fast/KrbFastArmoredRep.java       |  33 +
 .../kerb/spec/fast/KrbFastArmoredReq.java       |  76 +++
 .../kerb/spec/fast/KrbFastFinished.java         |  63 ++
 .../kerberos/kerb/spec/fast/KrbFastReq.java     |  59 ++
 .../kerb/spec/fast/KrbFastResponse.java         |  71 ++
 .../kerberos/kerb/spec/fast/PaAuthnEntry.java   |  61 ++
 .../kerberos/kerb/spec/fast/PaAuthnSet.java     |  10 +
 .../kerberos/kerb/spec/fast/PaFxFastReply.java  |  29 +
 .../kerb/spec/fast/PaFxFastRequest.java         |  29 +
 .../apache/kerberos/kerb/spec/kdc/AsRep.java    |  13 +
 .../apache/kerberos/kerb/spec/kdc/AsReq.java    |  12 +
 .../kerberos/kerb/spec/kdc/EncAsRepPart.java    |  12 +
 .../kerberos/kerb/spec/kdc/EncKdcRepPart.java   | 158 +++++
 .../kerberos/kerb/spec/kdc/EncTgsRepPart.java   |  12 +
 .../kerberos/kerb/spec/kdc/KdcOption.java       |  60 ++
 .../kerberos/kerb/spec/kdc/KdcOptions.java      |  14 +
 .../apache/kerberos/kerb/spec/kdc/KdcRep.java   |  97 +++
 .../apache/kerberos/kerb/spec/kdc/KdcReq.java   |  57 ++
 .../kerberos/kerb/spec/kdc/KdcReqBody.java      | 190 ++++++
 .../apache/kerberos/kerb/spec/kdc/TgsRep.java   |  12 +
 .../apache/kerberos/kerb/spec/kdc/TgsReq.java   |  13 +
 .../kerb/spec/pa/PaAuthenticationSet.java       |  10 +
 .../kerb/spec/pa/PaAuthenticationSetElem.java   |  55 ++
 .../apache/kerberos/kerb/spec/pa/PaData.java    |  22 +
 .../kerberos/kerb/spec/pa/PaDataEntry.java      |  50 ++
 .../kerberos/kerb/spec/pa/PaDataType.java       |  73 +++
 .../kerberos/kerb/spec/pa/PaEncTsEnc.java       |  47 ++
 .../kerberos/kerb/spec/pa/otp/OtpTokenInfo.java |  50 ++
 .../kerb/spec/pa/otp/PaOtpChallenge.java        |  36 +
 .../spec/pa/pkinit/AdInitialVerifiedCas.java    |   9 +
 .../spec/pa/pkinit/AlgorithmIdentifiers.java    |  11 +
 .../kerberos/kerb/spec/pa/pkinit/AuthPack.java  |  63 ++
 .../kerberos/kerb/spec/pa/pkinit/DHNonce.java   |   9 +
 .../kerberos/kerb/spec/pa/pkinit/DHRepInfo.java |  41 ++
 .../pa/pkinit/ExternalPrincipalIdentifier.java  |  52 ++
 .../kerb/spec/pa/pkinit/KdcDHKeyInfo.java       |  46 ++
 .../kerb/spec/pa/pkinit/Krb5PrincipalName.java  |  42 ++
 .../kerberos/kerb/spec/pa/pkinit/PaPkAsRep.java |  41 ++
 .../kerberos/kerb/spec/pa/pkinit/PaPkAsReq.java |  52 ++
 .../kerb/spec/pa/pkinit/PkAuthenticator.java    |  72 ++
 .../kerb/spec/pa/pkinit/ReplyKeyPack.java       |  42 ++
 .../kerb/spec/pa/pkinit/TdDhParameters.java     |   7 +
 .../kerb/spec/pa/pkinit/TrustedCertifiers.java  |  10 +
 .../kerb/spec/pa/token/PaTokenChallenge.java    |  21 +
 .../kerb/spec/pa/token/PaTokenRequest.java      |  42 ++
 .../kerberos/kerb/spec/pa/token/TokenFlag.java  |  32 +
 .../kerberos/kerb/spec/pa/token/TokenFlags.java |  20 +
 .../kerberos/kerb/spec/pa/token/TokenInfo.java  |  43 ++
 .../kerberos/kerb/spec/pa/token/TokenInfos.java |  10 +
 .../kerb/spec/ticket/AbstractServiceTicket.java |  30 +
 .../kerb/spec/ticket/EncTicketPart.java         | 145 ++++
 .../kerb/spec/ticket/ServiceTicket.java         |   9 +
 .../kerberos/kerb/spec/ticket/TgtTicket.java    |  17 +
 .../kerberos/kerb/spec/ticket/Ticket.java       |  80 +++
 .../kerberos/kerb/spec/ticket/TicketFlag.java   |  43 ++
 .../kerberos/kerb/spec/ticket/TicketFlags.java  |  20 +
 .../kerberos/kerb/spec/ticket/Tickets.java      |  10 +
 .../kerb/spec/x509/AlgorithmIdentifier.java     |  39 ++
 .../kerb/spec/x509/SubjectPublicKeyInfo.java    |  41 ++
 .../main/java/org/haox/kerb/KrbConstant.java    |   7 -
 .../main/java/org/haox/kerb/KrbErrorCode.java   | 109 ----
 .../java/org/haox/kerb/KrbErrorException.java   |  16 -
 .../main/java/org/haox/kerb/KrbException.java   |  24 -
 .../main/java/org/haox/kerb/codec/KrbCodec.java |  74 ---
 .../java/org/haox/kerb/spec/KerberosString.java |  15 -
 .../org/haox/kerb/spec/KerberosStrings.java     |  24 -
 .../java/org/haox/kerb/spec/KerberosTime.java   |  99 ---
 .../org/haox/kerb/spec/KrbAppSequenceType.java  |  38 --
 .../main/java/org/haox/kerb/spec/KrbEnum.java   |   5 -
 .../java/org/haox/kerb/spec/KrbIntegers.java    |  35 -
 .../org/haox/kerb/spec/KrbSequenceOfType.java   |  24 -
 .../org/haox/kerb/spec/KrbSequenceType.java     |  36 -
 .../java/org/haox/kerb/spec/ap/ApOption.java    |  39 --
 .../java/org/haox/kerb/spec/ap/ApOptions.java   |  14 -
 .../main/java/org/haox/kerb/spec/ap/ApRep.java  |  46 --
 .../main/java/org/haox/kerb/spec/ap/ApReq.java  |  70 --
 .../org/haox/kerb/spec/ap/Authenticator.java    | 125 ----
 .../org/haox/kerb/spec/ap/EncAPRepPart.java     |  66 --
 .../java/org/haox/kerb/spec/common/AdToken.java |  30 -
 .../kerb/spec/common/AuthorizationData.java     |  13 -
 .../spec/common/AuthorizationDataEntry.java     |  43 --
 .../kerb/spec/common/AuthorizationType.java     | 124 ----
 .../org/haox/kerb/spec/common/CheckSum.java     |  76 ---
 .../org/haox/kerb/spec/common/CheckSumType.java |  96 ---
 .../haox/kerb/spec/common/EncryptedData.java    |  77 ---
 .../haox/kerb/spec/common/EncryptionKey.java    |  88 ---
 .../haox/kerb/spec/common/EncryptionType.java   | 113 ----
 .../org/haox/kerb/spec/common/EtypeInfo.java    |  10 -
 .../org/haox/kerb/spec/common/EtypeInfo2.java   |  10 -
 .../haox/kerb/spec/common/EtypeInfo2Entry.java  |  54 --
 .../haox/kerb/spec/common/EtypeInfoEntry.java   |  42 --
 .../org/haox/kerb/spec/common/HostAddrType.java |  81 ---
 .../org/haox/kerb/spec/common/HostAddress.java  |  90 ---
 .../haox/kerb/spec/common/HostAddresses.java    |  24 -
 .../org/haox/kerb/spec/common/KeyUsage.java     | 109 ----
 .../org/haox/kerb/spec/common/KrbError.java     | 147 -----
 .../org/haox/kerb/spec/common/KrbFlags.java     |  99 ---
 .../org/haox/kerb/spec/common/KrbMessage.java   |  35 -
 .../haox/kerb/spec/common/KrbMessageType.java   |  40 --
 .../org/haox/kerb/spec/common/KrbToken.java     |  80 ---
 .../haox/kerb/spec/common/KrbTokenEncoder.java  |   9 -
 .../java/org/haox/kerb/spec/common/LastReq.java |  13 -
 .../org/haox/kerb/spec/common/LastReqEntry.java |  43 --
 .../org/haox/kerb/spec/common/LastReqType.java  |  43 --
 .../org/haox/kerb/spec/common/MethodData.java   |  11 -
 .../org/haox/kerb/spec/common/NameType.java     |  35 -
 .../haox/kerb/spec/common/PrincipalName.java    | 180 -----
 .../java/org/haox/kerb/spec/common/Realm.java   |  15 -
 .../java/org/haox/kerb/spec/common/SamType.java |  47 --
 .../org/haox/kerb/spec/common/TokenFormat.java  |  31 -
 .../kerb/spec/common/TransitedEncoding.java     |  43 --
 .../kerb/spec/common/TransitedEncodingType.java |  32 -
 .../java/org/haox/kerb/spec/fast/ArmorType.java |  31 -
 .../org/haox/kerb/spec/fast/FastOption.java     |  32 -
 .../org/haox/kerb/spec/fast/FastOptions.java    |  14 -
 .../org/haox/kerb/spec/fast/KrbFastArmor.java   |  45 --
 .../haox/kerb/spec/fast/KrbFastArmoredRep.java  |  33 -
 .../haox/kerb/spec/fast/KrbFastArmoredReq.java  |  76 ---
 .../haox/kerb/spec/fast/KrbFastFinished.java    |  63 --
 .../org/haox/kerb/spec/fast/KrbFastReq.java     |  59 --
 .../haox/kerb/spec/fast/KrbFastResponse.java    |  71 --
 .../org/haox/kerb/spec/fast/PaAuthnEntry.java   |  61 --
 .../org/haox/kerb/spec/fast/PaAuthnSet.java     |  11 -
 .../org/haox/kerb/spec/fast/PaFxFastReply.java  |  29 -
 .../haox/kerb/spec/fast/PaFxFastRequest.java    |  29 -
 .../main/java/org/haox/kerb/spec/kdc/AsRep.java |  13 -
 .../main/java/org/haox/kerb/spec/kdc/AsReq.java |  12 -
 .../org/haox/kerb/spec/kdc/EncAsRepPart.java    |  12 -
 .../org/haox/kerb/spec/kdc/EncKdcRepPart.java   | 158 -----
 .../org/haox/kerb/spec/kdc/EncTgsRepPart.java   |  12 -
 .../java/org/haox/kerb/spec/kdc/KdcOption.java  |  60 --
 .../java/org/haox/kerb/spec/kdc/KdcOptions.java |  14 -
 .../java/org/haox/kerb/spec/kdc/KdcRep.java     |  97 ---
 .../java/org/haox/kerb/spec/kdc/KdcReq.java     |  57 --
 .../java/org/haox/kerb/spec/kdc/KdcReqBody.java | 190 ------
 .../java/org/haox/kerb/spec/kdc/TgsRep.java     |  12 -
 .../java/org/haox/kerb/spec/kdc/TgsReq.java     |  13 -
 .../haox/kerb/spec/pa/PaAuthenticationSet.java  |  10 -
 .../kerb/spec/pa/PaAuthenticationSetElem.java   |  55 --
 .../main/java/org/haox/kerb/spec/pa/PaData.java |  22 -
 .../java/org/haox/kerb/spec/pa/PaDataEntry.java |  50 --
 .../java/org/haox/kerb/spec/pa/PaDataType.java  |  73 ---
 .../java/org/haox/kerb/spec/pa/PaEncTsEnc.java  |  47 --
 .../org/haox/kerb/spec/pa/otp/OtpTokenInfo.java |  50 --
 .../haox/kerb/spec/pa/otp/PaOtpChallenge.java   |  36 -
 .../spec/pa/pkinit/AdInitialVerifiedCas.java    |   9 -
 .../spec/pa/pkinit/AlgorithmIdentifiers.java    |  11 -
 .../org/haox/kerb/spec/pa/pkinit/AuthPack.java  |  63 --
 .../org/haox/kerb/spec/pa/pkinit/DHNonce.java   |   9 -
 .../org/haox/kerb/spec/pa/pkinit/DHRepInfo.java |  41 --
 .../pa/pkinit/ExternalPrincipalIdentifier.java  |  52 --
 .../haox/kerb/spec/pa/pkinit/KdcDHKeyInfo.java  |  46 --
 .../kerb/spec/pa/pkinit/Krb5PrincipalName.java  |  42 --
 .../org/haox/kerb/spec/pa/pkinit/PaPkAsRep.java |  41 --
 .../org/haox/kerb/spec/pa/pkinit/PaPkAsReq.java |  52 --
 .../kerb/spec/pa/pkinit/PkAuthenticator.java    |  72 --
 .../haox/kerb/spec/pa/pkinit/ReplyKeyPack.java  |  42 --
 .../kerb/spec/pa/pkinit/TdDhParameters.java     |   7 -
 .../kerb/spec/pa/pkinit/TrustedCertifiers.java  |  10 -
 .../kerb/spec/pa/token/PaTokenChallenge.java    |  21 -
 .../haox/kerb/spec/pa/token/PaTokenRequest.java |  42 --
 .../org/haox/kerb/spec/pa/token/TokenFlag.java  |  32 -
 .../org/haox/kerb/spec/pa/token/TokenFlags.java |  20 -
 .../org/haox/kerb/spec/pa/token/TokenInfo.java  |  43 --
 .../org/haox/kerb/spec/pa/token/TokenInfos.java |  11 -
 .../kerb/spec/ticket/AbstractServiceTicket.java |  30 -
 .../haox/kerb/spec/ticket/EncTicketPart.java    | 145 ----
 .../haox/kerb/spec/ticket/ServiceTicket.java    |   9 -
 .../org/haox/kerb/spec/ticket/TgtTicket.java    |  17 -
 .../java/org/haox/kerb/spec/ticket/Ticket.java  |  80 ---
 .../org/haox/kerb/spec/ticket/TicketFlag.java   |  43 --
 .../org/haox/kerb/spec/ticket/TicketFlags.java  |  20 -
 .../java/org/haox/kerb/spec/ticket/Tickets.java |  10 -
 .../kerb/spec/x509/AlgorithmIdentifier.java     |  39 --
 .../kerb/spec/x509/SubjectPublicKeyInfo.java    |  41 --
 .../kerb/crypto/AbstractCryptoTypeHandler.java  |  49 ++
 .../apache/kerberos/kerb/crypto/BytesUtil.java  | 144 ++++
 .../apache/kerberos/kerb/crypto/Camellia.java   | 229 +++++++
 .../kerberos/kerb/crypto/CamelliaKey.java       | 412 ++++++++++++
 .../kerberos/kerb/crypto/CheckSumHandler.java   | 134 ++++
 .../kerb/crypto/CheckSumTypeHandler.java        |  38 ++
 .../org/apache/kerberos/kerb/crypto/Cmac.java   | 156 +++++
 .../apache/kerberos/kerb/crypto/Confounder.java |  14 +
 .../org/apache/kerberos/kerb/crypto/Crc32.java  |  99 +++
 .../kerberos/kerb/crypto/CryptoTypeHandler.java |  15 +
 .../org/apache/kerberos/kerb/crypto/Des.java    |  22 +
 .../kerberos/kerb/crypto/EncTypeHandler.java    |  39 ++
 .../kerberos/kerb/crypto/EncryptionHandler.java | 154 +++++
 .../org/apache/kerberos/kerb/crypto/Hmac.java   |  53 ++
 .../org/apache/kerberos/kerb/crypto/Md4.java    | 269 ++++++++
 .../org/apache/kerberos/kerb/crypto/Nfold.java  |  57 ++
 .../org/apache/kerberos/kerb/crypto/Nonce.java  |  13 +
 .../org/apache/kerberos/kerb/crypto/Pbkdf.java  |  21 +
 .../org/apache/kerberos/kerb/crypto/Random.java |  14 +
 .../org/apache/kerberos/kerb/crypto/Rc4.java    |  31 +
 .../org/apache/kerberos/kerb/crypto/Util.java   |  24 +
 .../cksum/AbstractCheckSumTypeHandler.java      |  93 +++
 .../cksum/AbstractKeyedCheckSumTypeHandler.java |  56 ++
 .../crypto/cksum/CmacCamellia128CheckSum.java   |  34 +
 .../crypto/cksum/CmacCamellia256CheckSum.java   |  34 +
 .../kerb/crypto/cksum/CmacKcCheckSum.java       |  17 +
 .../crypto/cksum/ConfounderedDesCheckSum.java   | 101 +++
 .../kerb/crypto/cksum/Crc32CheckSum.java        |  16 +
 .../kerb/crypto/cksum/DesCbcCheckSum.java       |  14 +
 .../kerb/crypto/cksum/HashProvider.java         |  16 +
 .../kerb/crypto/cksum/HmacKcCheckSum.java       |  18 +
 .../kerb/crypto/cksum/HmacMd5Rc4CheckSum.java   |  54 ++
 .../crypto/cksum/HmacSha1Aes128CheckSum.java    |  34 +
 .../crypto/cksum/HmacSha1Aes256CheckSum.java    |  34 +
 .../kerb/crypto/cksum/HmacSha1Des3CheckSum.java |  34 +
 .../kerberos/kerb/crypto/cksum/KcCheckSum.java  |  29 +
 .../kerb/crypto/cksum/Md5HmacRc4CheckSum.java   |  51 ++
 .../kerb/crypto/cksum/RsaMd4CheckSum.java       |  16 +
 .../kerb/crypto/cksum/RsaMd4DesCheckSum.java    |  15 +
 .../kerb/crypto/cksum/RsaMd5CheckSum.java       |  16 +
 .../kerb/crypto/cksum/RsaMd5DesCheckSum.java    |  15 +
 .../kerb/crypto/cksum/Sha1CheckSum.java         |  16 +
 .../cksum/provider/AbstractHashProvider.java    |  33 +
 .../AbstractUnkeyedCheckSumTypeHandler.java     |  35 +
 .../crypto/cksum/provider/Crc32Provider.java    |  21 +
 .../kerb/crypto/cksum/provider/Md4Provider.java |  15 +
 .../kerb/crypto/cksum/provider/Md5Provider.java |   8 +
 .../provider/MessageDigestHashProvider.java     |  37 ++
 .../crypto/cksum/provider/Sha1Provider.java     |   8 +
 .../kerb/crypto/enc/AbstractEncTypeHandler.java | 141 ++++
 .../kerb/crypto/enc/Aes128CtsHmacSha1Enc.java   |  29 +
 .../kerb/crypto/enc/Aes256CtsHmacSha1Enc.java   |  29 +
 .../kerb/crypto/enc/Camellia128CtsCmacEnc.java  |  22 +
 .../kerb/crypto/enc/Camellia256CtsCmacEnc.java  |  22 +
 .../kerb/crypto/enc/Des3CbcSha1Enc.java         |  23 +
 .../kerberos/kerb/crypto/enc/DesCbcCrcEnc.java  |  36 +
 .../kerberos/kerb/crypto/enc/DesCbcEnc.java     |  69 ++
 .../kerberos/kerb/crypto/enc/DesCbcMd4Enc.java  |  20 +
 .../kerberos/kerb/crypto/enc/DesCbcMd5Enc.java  |  20 +
 .../kerb/crypto/enc/EncryptProvider.java        |  24 +
 .../kerberos/kerb/crypto/enc/KeKiCmacEnc.java   |  34 +
 .../kerberos/kerb/crypto/enc/KeKiEnc.java       | 110 ++++
 .../kerb/crypto/enc/KeKiHmacSha1Enc.java        |  31 +
 .../kerberos/kerb/crypto/enc/Rc4HmacEnc.java    | 130 ++++
 .../kerberos/kerb/crypto/enc/Rc4HmacExpEnc.java |  14 +
 .../enc/provider/AbstractEncryptProvider.java   |  80 +++
 .../crypto/enc/provider/Aes128Provider.java     |   8 +
 .../crypto/enc/provider/Aes256Provider.java     |   8 +
 .../kerb/crypto/enc/provider/AesProvider.java   |  43 ++
 .../enc/provider/Camellia128Provider.java       |   8 +
 .../enc/provider/Camellia256Provider.java       |   8 +
 .../crypto/enc/provider/CamelliaProvider.java   |  39 ++
 .../kerb/crypto/enc/provider/Des3Provider.java  |  46 ++
 .../kerb/crypto/enc/provider/DesProvider.java   |  79 +++
 .../kerb/crypto/enc/provider/Rc4Provider.java   |  30 +
 .../kerb/crypto/key/AbstractKeyMaker.java       |  67 ++
 .../kerberos/kerb/crypto/key/AesKeyMaker.java   |  46 ++
 .../kerb/crypto/key/CamelliaKeyMaker.java       | 102 +++
 .../kerberos/kerb/crypto/key/Des3KeyMaker.java  | 101 +++
 .../kerberos/kerb/crypto/key/DesKeyMaker.java   | 157 +++++
 .../kerberos/kerb/crypto/key/DkKeyMaker.java    |  54 ++
 .../kerberos/kerb/crypto/key/KeyMaker.java      |  10 +
 .../kerberos/kerb/crypto/key/Rc4KeyMaker.java   |  33 +
 .../kerb/crypto/AbstractCryptoTypeHandler.java  |  49 --
 .../java/org/haox/kerb/crypto/BytesUtil.java    | 144 ----
 .../java/org/haox/kerb/crypto/Camellia.java     | 229 -------
 .../java/org/haox/kerb/crypto/CamelliaKey.java  | 412 ------------
 .../org/haox/kerb/crypto/CheckSumHandler.java   | 134 ----
 .../haox/kerb/crypto/CheckSumTypeHandler.java   |  38 --
 .../main/java/org/haox/kerb/crypto/Cmac.java    | 156 -----
 .../java/org/haox/kerb/crypto/Confounder.java   |  14 -
 .../main/java/org/haox/kerb/crypto/Crc32.java   |  99 ---
 .../org/haox/kerb/crypto/CryptoTypeHandler.java |  15 -
 .../src/main/java/org/haox/kerb/crypto/Des.java |  22 -
 .../org/haox/kerb/crypto/EncTypeHandler.java    |  39 --
 .../org/haox/kerb/crypto/EncryptionHandler.java | 154 -----
 .../main/java/org/haox/kerb/crypto/Hmac.java    |  53 --
 .../src/main/java/org/haox/kerb/crypto/Md4.java | 269 --------
 .../main/java/org/haox/kerb/crypto/Nfold.java   |  57 --
 .../main/java/org/haox/kerb/crypto/Nonce.java   |  13 -
 .../main/java/org/haox/kerb/crypto/Pbkdf.java   |  21 -
 .../main/java/org/haox/kerb/crypto/Random.java  |  14 -
 .../src/main/java/org/haox/kerb/crypto/Rc4.java |  31 -
 .../main/java/org/haox/kerb/crypto/Util.java    |  24 -
 .../cksum/AbstractCheckSumTypeHandler.java      |  93 ---
 .../cksum/AbstractKeyedCheckSumTypeHandler.java |  56 --
 .../crypto/cksum/CmacCamellia128CheckSum.java   |  34 -
 .../crypto/cksum/CmacCamellia256CheckSum.java   |  34 -
 .../haox/kerb/crypto/cksum/CmacKcCheckSum.java  |  17 -
 .../crypto/cksum/ConfounderedDesCheckSum.java   | 101 ---
 .../haox/kerb/crypto/cksum/Crc32CheckSum.java   |  17 -
 .../haox/kerb/crypto/cksum/DesCbcCheckSum.java  |  14 -
 .../haox/kerb/crypto/cksum/HashProvider.java    |  16 -
 .../haox/kerb/crypto/cksum/HmacKcCheckSum.java  |  18 -
 .../kerb/crypto/cksum/HmacMd5Rc4CheckSum.java   |  54 --
 .../crypto/cksum/HmacSha1Aes128CheckSum.java    |  34 -
 .../crypto/cksum/HmacSha1Aes256CheckSum.java    |  34 -
 .../kerb/crypto/cksum/HmacSha1Des3CheckSum.java |  34 -
 .../org/haox/kerb/crypto/cksum/KcCheckSum.java  |  29 -
 .../kerb/crypto/cksum/Md5HmacRc4CheckSum.java   |  51 --
 .../haox/kerb/crypto/cksum/RsaMd4CheckSum.java  |  16 -
 .../kerb/crypto/cksum/RsaMd4DesCheckSum.java    |  15 -
 .../haox/kerb/crypto/cksum/RsaMd5CheckSum.java  |  17 -
 .../kerb/crypto/cksum/RsaMd5DesCheckSum.java    |  15 -
 .../haox/kerb/crypto/cksum/Sha1CheckSum.java    |  16 -
 .../cksum/provider/AbstractHashProvider.java    |  33 -
 .../AbstractUnkeyedCheckSumTypeHandler.java     |  35 -
 .../crypto/cksum/provider/Crc32Provider.java    |  21 -
 .../kerb/crypto/cksum/provider/Md4Provider.java |  15 -
 .../kerb/crypto/cksum/provider/Md5Provider.java |  10 -
 .../provider/MessageDigestHashProvider.java     |  37 --
 .../crypto/cksum/provider/Sha1Provider.java     |  10 -
 .../kerb/crypto/enc/AbstractEncTypeHandler.java | 141 ----
 .../kerb/crypto/enc/Aes128CtsHmacSha1Enc.java   |  29 -
 .../kerb/crypto/enc/Aes256CtsHmacSha1Enc.java   |  29 -
 .../kerb/crypto/enc/Camellia128CtsCmacEnc.java  |  22 -
 .../kerb/crypto/enc/Camellia256CtsCmacEnc.java  |  22 -
 .../haox/kerb/crypto/enc/Des3CbcSha1Enc.java    |  23 -
 .../org/haox/kerb/crypto/enc/DesCbcCrcEnc.java  |  36 -
 .../org/haox/kerb/crypto/enc/DesCbcEnc.java     |  69 --
 .../org/haox/kerb/crypto/enc/DesCbcMd4Enc.java  |  20 -
 .../org/haox/kerb/crypto/enc/DesCbcMd5Enc.java  |  20 -
 .../haox/kerb/crypto/enc/EncryptProvider.java   |  24 -
 .../org/haox/kerb/crypto/enc/KeKiCmacEnc.java   |  34 -
 .../java/org/haox/kerb/crypto/enc/KeKiEnc.java  | 110 ----
 .../haox/kerb/crypto/enc/KeKiHmacSha1Enc.java   |  31 -
 .../org/haox/kerb/crypto/enc/Rc4HmacEnc.java    | 130 ----
 .../org/haox/kerb/crypto/enc/Rc4HmacExpEnc.java |  14 -
 .../enc/provider/AbstractEncryptProvider.java   |  80 ---
 .../crypto/enc/provider/Aes128Provider.java     |   8 -
 .../crypto/enc/provider/Aes256Provider.java     |   8 -
 .../kerb/crypto/enc/provider/AesProvider.java   |  43 --
 .../enc/provider/Camellia128Provider.java       |   8 -
 .../enc/provider/Camellia256Provider.java       |   8 -
 .../crypto/enc/provider/CamelliaProvider.java   |  39 --
 .../kerb/crypto/enc/provider/Des3Provider.java  |  46 --
 .../kerb/crypto/enc/provider/DesProvider.java   |  79 ---
 .../kerb/crypto/enc/provider/Rc4Provider.java   |  30 -
 .../haox/kerb/crypto/key/AbstractKeyMaker.java  |  67 --
 .../org/haox/kerb/crypto/key/AesKeyMaker.java   |  46 --
 .../haox/kerb/crypto/key/CamelliaKeyMaker.java  | 102 ---
 .../org/haox/kerb/crypto/key/Des3KeyMaker.java  | 101 ---
 .../org/haox/kerb/crypto/key/DesKeyMaker.java   | 157 -----
 .../org/haox/kerb/crypto/key/DkKeyMaker.java    |  54 --
 .../java/org/haox/kerb/crypto/key/KeyMaker.java |  10 -
 .../org/haox/kerb/crypto/key/Rc4KeyMaker.java   |  33 -
 .../kerberos/kerb/crypto/CamelliaEncTest.java   |  93 +++
 .../kerberos/kerb/crypto/CheckSumTest.java      |  89 +++
 .../kerberos/kerb/crypto/CheckSumsTest.java     | 163 +++++
 .../apache/kerberos/kerb/crypto/CmacTest.java   |  65 ++
 .../apache/kerberos/kerb/crypto/Crc32Test.java  |  99 +++
 .../kerberos/kerb/crypto/DecryptionTest.java    | 502 ++++++++++++++
 .../kerberos/kerb/crypto/KeyDeriveTest.java     | 208 ++++++
 .../org/apache/kerberos/kerb/crypto/Util.java   |  39 ++
 .../java/org/haox/kerb/CamelliaEncTest.java     |  93 ---
 .../test/java/org/haox/kerb/CheckSumTest.java   |  90 ---
 .../test/java/org/haox/kerb/CheckSumsTest.java  | 165 -----
 .../src/test/java/org/haox/kerb/CmacTest.java   |  66 --
 .../src/test/java/org/haox/kerb/Crc32Test.java  | 100 ---
 .../test/java/org/haox/kerb/DecryptionTest.java | 503 --------------
 .../test/java/org/haox/kerb/KeyDeriveTest.java  | 208 ------
 .../src/test/java/org/haox/kerb/Util.java       |  39 --
 .../kerberos/kerb/identity/Attribute.java       |  17 +
 .../kerb/identity/ComplexAttribute.java         |  23 +
 .../apache/kerberos/kerb/identity/Identity.java |  48 ++
 .../kerberos/kerb/identity/IdentityService.java |  12 +
 .../kerberos/kerb/identity/KrbAttributes.java   |   6 +
 .../kerberos/kerb/identity/KrbIdentity.java     | 107 +++
 .../kerberos/kerb/identity/SimpleAttribute.java |  18 +
 .../backend/AbstractIdentityBackend.java        |   7 +
 .../backend/InMemoryIdentityBackend.java        |  57 ++
 .../identity/backend/SimpleIdentityBackend.java |  27 +
 .../java/org/haox/kerb/identity/Attribute.java  |  17 -
 .../haox/kerb/identity/ComplexAttribute.java    |  23 -
 .../java/org/haox/kerb/identity/Identity.java   |  48 --
 .../org/haox/kerb/identity/IdentityService.java |  12 -
 .../org/haox/kerb/identity/KrbAttributes.java   |   6 -
 .../org/haox/kerb/identity/KrbIdentity.java     | 107 ---
 .../org/haox/kerb/identity/SimpleAttribute.java |  18 -
 .../backend/AbstractIdentityBackend.java        |   7 -
 .../backend/InMemoryIdentityBackend.java        |  57 --
 .../identity/backend/SimpleIdentityBackend.java |  27 -
 .../src/test/resources/kdc-krb5.conf            |  25 -
 .../kerb-identity/src/test/resources/kdc.ldiff  |  30 -
 .../kerberos/kerb/server/TestKdcServer.java     | 103 +++
 .../org/haox/kerb/server/TestKdcServer.java     | 103 ---
 .../apache/kerberos/kerb/server/KdcTest.java    |  30 +
 .../kerberos/kerb/server/KdcTestBase.java       |  49 ++
 .../kerberos/kerb/server/WithCertKdcTest.java   |  71 ++
 .../kerberos/kerb/server/WithTokenKdcTest.java  |  38 ++
 .../test/java/org/haox/kerb/server/KdcTest.java |  30 -
 .../java/org/haox/kerb/server/KdcTestBase.java  |  48 --
 .../org/haox/kerb/server/WithCertKdcTest.java   |  71 --
 .../org/haox/kerb/server/WithTokenKdcTest.java  |  38 --
 .../src/test/resources/kdc-krb5.conf            |  25 -
 .../kerb-kdc-test/src/test/resources/kdc.ldiff  |  30 -
 .../apache/kerberos/kerb/server/KdcConfig.java  | 105 +++
 .../kerberos/kerb/server/KdcConfigKey.java      |  47 ++
 .../apache/kerberos/kerb/server/KdcContext.java |  72 ++
 .../apache/kerberos/kerb/server/KdcHandler.java | 129 ++++
 .../apache/kerberos/kerb/server/KdcServer.java  | 164 +++++
 .../kerberos/kerb/server/SimpleKdcServer.java   |  24 +
 .../server/preauth/AbstractPreauthPlugin.java   |  72 ++
 .../kerb/server/preauth/FastContext.java        |  17 +
 .../kerb/server/preauth/KdcPreauth.java         |  62 ++
 .../kerb/server/preauth/PreauthContext.java     |  25 +
 .../kerb/server/preauth/PreauthHandle.java      |  37 ++
 .../kerb/server/preauth/PreauthHandler.java     | 105 +++
 .../server/preauth/builtin/EncTsPreauth.java    |  41 ++
 .../kerb/server/preauth/builtin/TgtPreauth.java |  26 +
 .../server/preauth/pkinit/PkinitKdcContext.java |  11 +
 .../server/preauth/pkinit/PkinitPreauth.java    |  74 +++
 .../preauth/pkinit/PkinitRequestContext.java    |  11 +
 .../preauth/token/TokenRequestContext.java      |  13 +
 .../kerb/server/replay/CacheService.java        |   7 +
 .../kerb/server/replay/ReplayCheckService.java  |   6 +
 .../server/replay/ReplayCheckServiceImpl.java   |  21 +
 .../kerb/server/replay/RequestRecord.java       |  39 ++
 .../kerb/server/replay/SimpleCacheService.java  |  27 +
 .../kerberos/kerb/server/request/AsRequest.java |  72 ++
 .../kerb/server/request/KdcRequest.java         | 502 ++++++++++++++
 .../kerb/server/request/TgsRequest.java         | 177 +++++
 .../java/org/haox/kerb/server/KdcConfig.java    | 105 ---
 .../java/org/haox/kerb/server/KdcConfigKey.java |  47 --
 .../java/org/haox/kerb/server/KdcContext.java   |  72 --
 .../java/org/haox/kerb/server/KdcHandler.java   | 129 ----
 .../java/org/haox/kerb/server/KdcServer.java    | 164 -----
 .../org/haox/kerb/server/SimpleKdcServer.java   |  24 -
 .../server/preauth/AbstractPreauthPlugin.java   |  72 --
 .../haox/kerb/server/preauth/FastContext.java   |  17 -
 .../haox/kerb/server/preauth/KdcPreauth.java    |  62 --
 .../kerb/server/preauth/PreauthContext.java     |  25 -
 .../haox/kerb/server/preauth/PreauthHandle.java |  37 --
 .../kerb/server/preauth/PreauthHandler.java     | 105 ---
 .../server/preauth/builtin/EncTsPreauth.java    |  41 --
 .../kerb/server/preauth/builtin/TgtPreauth.java |  26 -
 .../server/preauth/pkinit/PkinitKdcContext.java |  11 -
 .../server/preauth/pkinit/PkinitPreauth.java    |  74 ---
 .../preauth/pkinit/PkinitRequestContext.java    |  11 -
 .../preauth/token/TokenRequestContext.java      |  13 -
 .../haox/kerb/server/replay/CacheService.java   |   7 -
 .../kerb/server/replay/ReplayCheckService.java  |   6 -
 .../server/replay/ReplayCheckServiceImpl.java   |  21 -
 .../haox/kerb/server/replay/RequestRecord.java  |  39 --
 .../kerb/server/replay/SimpleCacheService.java  |  27 -
 .../org/haox/kerb/server/request/AsRequest.java |  72 --
 .../haox/kerb/server/request/KdcRequest.java    | 502 --------------
 .../haox/kerb/server/request/TgsRequest.java    | 177 -----
 .../apache/kerberos/kerb/server/KdcTest.java    |  51 ++
 .../test/java/org/haox/kerb/server/KdcTest.java |  51 --
 .../src/test/resources/kdc-krb5.conf            |  25 -
 .../kerb-server/src/test/resources/kdc.ldiff    |  30 -
 .../apache/kerberos/kerb/KrbInputStream.java    |  55 ++
 .../apache/kerberos/kerb/KrbOutputStream.java   |  47 ++
 .../kerb/ccache/CredCacheInputStream.java       | 148 +++++
 .../kerb/ccache/CredCacheOutputStream.java      | 104 +++
 .../apache/kerberos/kerb/ccache/Credential.java | 206 ++++++
 .../kerberos/kerb/ccache/CredentialCache.java   | 259 ++++++++
 .../kerb/ccache/KrbCredentialCache.java         |  38 ++
 .../org/apache/kerberos/kerb/ccache/Tag.java    |  15 +
 .../org/apache/kerberos/kerb/ccache/ccache.txt  |  98 +++
 .../org/apache/kerberos/kerb/keytab/Keytab.java | 178 +++++
 .../kerberos/kerb/keytab/KeytabEntry.java       | 102 +++
 .../kerberos/kerb/keytab/KeytabInputStream.java |  70 ++
 .../kerb/keytab/KeytabOutputStream.java         |  44 ++
 .../apache/kerberos/kerb/keytab/KrbKeytab.java  |  36 +
 .../org/apache/kerberos/kerb/keytab/keytab.txt  | 106 +++
 .../main/java/org/haox/kerb/KrbInputStream.java |  55 --
 .../java/org/haox/kerb/KrbOutputStream.java     |  47 --
 .../haox/kerb/ccache/CredCacheInputStream.java  | 148 -----
 .../haox/kerb/ccache/CredCacheOutputStream.java | 104 ---
 .../java/org/haox/kerb/ccache/Credential.java   | 206 ------
 .../org/haox/kerb/ccache/CredentialCache.java   | 259 --------
 .../haox/kerb/ccache/KrbCredentialCache.java    |  38 --
 .../src/main/java/org/haox/kerb/ccache/Tag.java |  15 -
 .../main/java/org/haox/kerb/ccache/ccache.txt   |  98 ---
 .../main/java/org/haox/kerb/keytab/Keytab.java  | 178 -----
 .../java/org/haox/kerb/keytab/KeytabEntry.java  | 102 ---
 .../org/haox/kerb/keytab/KeytabInputStream.java |  70 --
 .../haox/kerb/keytab/KeytabOutputStream.java    |  44 --
 .../java/org/haox/kerb/keytab/KrbKeytab.java    |  36 -
 .../main/java/org/haox/kerb/keytab/keytab.txt   | 106 ---
 .../kerb-util/src/main/resources/kdc-krb5.conf  |  25 -
 .../kerb-util/src/main/resources/kdc.ldiff      |  30 -
 .../apache/kerberos/kerb/util/CcacheTest.java   |  38 ++
 .../kerberos/kerb/util/EncryptionTest.java      | 129 ++++
 .../org/apache/kerberos/kerb/util/KeysTest.java |  62 ++
 .../apache/kerberos/kerb/util/KeytabTest.java   |  57 ++
 .../src/test/java/org/haox/kerb/CcacheTest.java |  38 --
 .../test/java/org/haox/kerb/EncryptionTest.java | 128 ----
 .../src/test/java/org/haox/kerb/KeysTest.java   |  62 --
 .../src/test/java/org/haox/kerb/KeytabTest.java |  57 --
 haox-kerb/specs/README.asn1                     | 560 ----------------
 haox-kerb/specs/TODO.asn1                       |  75 ---
 haox-kerb/specs/krb5.asn1                       | 392 -----------
 haox-kerb/specs/otp.asn1                        | 109 ----
 haox-kerb/specs/pkinit-agility.asn1             |  99 ---
 haox-kerb/specs/pkinit.asn1                     | 253 -------
 haox-kerb/specs/pkix.asn1                       | 654 -------------------
 641 files changed, 18252 insertions(+), 21300 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/benchmark/src/test/java/org/apache/kerberos/benchmark/KrbCodecPerfTest.java
----------------------------------------------------------------------
diff --git a/benchmark/src/test/java/org/apache/kerberos/benchmark/KrbCodecPerfTest.java b/benchmark/src/test/java/org/apache/kerberos/benchmark/KrbCodecPerfTest.java
index 10c4623..254c226 100644
--- a/benchmark/src/test/java/org/apache/kerberos/benchmark/KrbCodecPerfTest.java
+++ b/benchmark/src/test/java/org/apache/kerberos/benchmark/KrbCodecPerfTest.java
@@ -4,8 +4,8 @@ import org.apache.directory.api.asn1.DecoderException;
 import org.apache.directory.api.asn1.EncoderException;
 import org.apache.directory.api.asn1.ber.Asn1Decoder;
 import org.apache.directory.shared.kerberos.codec.apReq.ApReqContainer;
-import org.haox.kerb.KrbException;
-import org.haox.kerb.spec.ap.ApReq;
+import org.apache.kerberos.kerb.KrbException;
+import org.apache.kerberos.kerb.spec.ap.ApReq;
 
 import java.io.IOException;
 import java.io.InputStream;

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kdc/kdc-server/src/main/java/org/haox/kdc/server/HaoxKdcServer.java
----------------------------------------------------------------------
diff --git a/haox-kdc/kdc-server/src/main/java/org/haox/kdc/server/HaoxKdcServer.java b/haox-kdc/kdc-server/src/main/java/org/haox/kdc/server/HaoxKdcServer.java
index 9f4abcd..68b7d83 100644
--- a/haox-kdc/kdc-server/src/main/java/org/haox/kdc/server/HaoxKdcServer.java
+++ b/haox-kdc/kdc-server/src/main/java/org/haox/kdc/server/HaoxKdcServer.java
@@ -1,8 +1,8 @@
 package org.haox.kdc.server;
 
 import org.haox.kdc.identitybackend.LdapIdentityBackend;
-import org.haox.kerb.identity.IdentityService;
-import org.haox.kerb.server.KdcServer;
+import org.apache.kerberos.kerb.identity.IdentityService;
+import org.apache.kerberos.kerb.server.KdcServer;
 
 public class HaoxKdcServer extends KdcServer {
 

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kdc/ldap-identity-backend/src/main/java/org/haox/kdc/identitybackend/LdapIdentityBackend.java
----------------------------------------------------------------------
diff --git a/haox-kdc/ldap-identity-backend/src/main/java/org/haox/kdc/identitybackend/LdapIdentityBackend.java b/haox-kdc/ldap-identity-backend/src/main/java/org/haox/kdc/identitybackend/LdapIdentityBackend.java
index c2640e2..e99e001 100644
--- a/haox-kdc/ldap-identity-backend/src/main/java/org/haox/kdc/identitybackend/LdapIdentityBackend.java
+++ b/haox-kdc/ldap-identity-backend/src/main/java/org/haox/kdc/identitybackend/LdapIdentityBackend.java
@@ -1,7 +1,7 @@
 package org.haox.kdc.identitybackend;
 
-import org.haox.kerb.identity.KrbIdentity;
-import org.haox.kerb.identity.backend.AbstractIdentityBackend;
+import org.apache.kerberos.kerb.identity.KrbIdentity;
+import org.apache.kerberos.kerb.identity.backend.AbstractIdentityBackend;
 
 import java.util.List;
 

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kdc/tools/src/main/java/org/haox/kdc/tool/Kinit.java
----------------------------------------------------------------------
diff --git a/haox-kdc/tools/src/main/java/org/haox/kdc/tool/Kinit.java b/haox-kdc/tools/src/main/java/org/haox/kdc/tool/Kinit.java
index bc4858c..3aae9c8 100644
--- a/haox-kdc/tools/src/main/java/org/haox/kdc/tool/Kinit.java
+++ b/haox-kdc/tools/src/main/java/org/haox/kdc/tool/Kinit.java
@@ -1,6 +1,6 @@
 package org.haox.kdc.tool;
 
-import org.haox.kerb.client.KrbClient;
+import org.apache.kerberos.kerb.client.KrbClient;
 
 /**
  * kinit like tool

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/KrbClient.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/KrbClient.java b/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/KrbClient.java
new file mode 100644
index 0000000..f8403e2
--- /dev/null
+++ b/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/KrbClient.java
@@ -0,0 +1,302 @@
+package org.apache.kerberos.kerb.client;
+
+import org.apache.haox.event.Event;
+import org.apache.haox.event.EventHub;
+import org.apache.haox.event.EventWaiter;
+import org.apache.kerberos.kerb.KrbErrorCode;
+import org.apache.kerberos.kerb.client.event.KrbClientEvent;
+import org.apache.kerberos.kerb.client.event.KrbClientEventType;
+import org.apache.kerberos.kerb.client.request.*;
+import org.apache.kerberos.kerb.common.KrbErrorUtil;
+import org.apache.kerberos.kerb.common.KrbStreamingDecoder;
+import org.apache.kerberos.kerb.KrbErrorException;
+import org.apache.kerberos.kerb.KrbException;
+import org.apache.kerberos.kerb.spec.common.KrbError;
+import org.apache.kerberos.kerb.spec.common.PrincipalName;
+import org.apache.kerberos.kerb.spec.ticket.ServiceTicket;
+import org.apache.kerberos.kerb.spec.ticket.TgtTicket;
+import org.haox.token.KerbToken;
+import org.apache.haox.transport.Connector;
+import org.apache.haox.transport.Transport;
+import org.apache.haox.transport.event.TransportEvent;
+import org.apache.haox.transport.event.TransportEventType;
+import org.apache.haox.transport.tcp.TcpConnector;
+
+import java.io.IOException;
+import java.security.PrivateKey;
+import java.security.cert.Certificate;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+/**
+ * A krb client API for applications to interact with KDC
+ */
+public class KrbClient {
+
+    private EventHub eventHub;
+    private EventWaiter eventWaiter;
+    private Transport transport;
+
+    private KrbHandler krbHandler;
+    private KrbContext context;
+    private KrbConfig config;
+
+    /**
+     *
+     * @param kdcHost
+     * @param kdcPort
+     */
+    public KrbClient(String kdcHost, short kdcPort) {
+        this(new KrbConfig());
+
+        setKdcHost(kdcHost);
+        setKdcPort(kdcPort);
+    }
+
+    public KrbClient(KrbConfig config) {
+        this.config = config;
+        this.context = new KrbContext();
+        context.init(config);
+    }
+
+    /**
+     * Set KDC realm for ticket request
+     * @param realm
+     */
+    public void setKdcRealm(String realm) {
+        context.setKdcRealm(realm);
+    }
+
+    /**
+     *
+     * @param kdcHost
+     */
+    public void setKdcHost(String kdcHost) {
+        context.setKdcHost(kdcHost);
+    }
+
+    /**
+     *
+     * @param kdcPort
+     */
+    public void setKdcPort(short kdcPort) {
+        context.setKdcPort(kdcPort);
+    }
+
+    /**
+     * Set time out for connection
+     * @param timeout in seconds
+     */
+    public void setTimeout(long timeout) {
+        context.setTimeout(timeout);
+    }
+
+    public void init() {
+        this.krbHandler = new KrbHandler();
+        krbHandler.init(context);
+
+        this.eventHub = new EventHub();
+        eventHub.register(krbHandler);
+
+        Connector connector = new TcpConnector(new KrbStreamingDecoder());
+        eventHub.register(connector);
+
+        eventWaiter = eventHub.waitEvent(
+                TransportEventType.NEW_TRANSPORT,
+                KrbClientEventType.TGT_RESULT,
+                KrbClientEventType.TKT_RESULT
+        );
+
+        eventHub.start();
+
+        connector.connect(context.getKdcHost(), context.getKdcPort());
+        Event event = eventWaiter.waitEvent(TransportEventType.NEW_TRANSPORT);
+        transport = ((TransportEvent) event).getTransport();
+    }
+
+    /**
+     * Attempt to request a TGT and you'll be prompted to input a credential.
+     * Whatever credential requested to provide depends on KDC admin configuration.
+     * @param options
+     * @return
+     * @throws KrbException
+     */
+    public TgtTicket requestTgtTicket(String principal, KrbOptions options) throws KrbException {
+        if (options == null) options = new KrbOptions();
+
+        AsRequest asRequest = new AsRequest(context);
+        asRequest.setKrbOptions(options);
+        return requestTgtTicket(principal, asRequest);
+    }
+
+    /**
+     * Request a TGT with user plain credential
+     * @param principal
+     * @param password
+     * @param options
+     * @return
+     * @throws KrbException
+     */
+    public TgtTicket requestTgtTicket(String principal, String password,
+                                      KrbOptions options) throws KrbException {
+        if (options == null) options = new KrbOptions();
+
+        AsRequest asRequest = new AsRequestWithPasswd(context);
+        options.add(KrbOption.USER_PASSWD, password);
+        asRequest.setKrbOptions(options);
+        return requestTgtTicket(principal, asRequest);
+    }
+
+    /**
+     * Request a TGT with user x509 certificate credential
+     * @param principal
+     * @param certificate
+     * @param privateKey
+     * @param options
+     * @return
+     * @throws KrbException
+     */
+    public TgtTicket requestTgtTicket(String principal, Certificate certificate,
+                                      PrivateKey privateKey, KrbOptions options) throws KrbException {
+        if (options == null) options = new KrbOptions();
+
+        AsRequestWithCert asRequest = new AsRequestWithCert(context);
+        options.add(KrbOption.PKINIT_X509_CERTIFICATE, certificate);
+        options.add(KrbOption.PKINIT_X509_PRIVATE_KEY, privateKey);
+        asRequest.setKrbOptions(options);
+        return requestTgtTicket(principal, asRequest);
+    }
+
+    /**
+     * Request a TGT with using Anonymous PKINIT
+     * @param options
+     * @return
+     * @throws KrbException
+     */
+    public TgtTicket requestTgtTicket(KrbOptions options) throws KrbException {
+        if (options == null) options = new KrbOptions();
+
+        AsRequestWithCert asRequest = new AsRequestWithCert(context);
+        options.add(KrbOption.PKINIT_X509_ANONYMOUS);
+        asRequest.setKrbOptions(options);
+
+        String principal = AsRequestWithCert.ANONYMOUS_PRINCIPAL;
+        return requestTgtTicket(principal, asRequest);
+    }
+
+    /**
+     * Request a TGT with user token credential
+     * @param principal
+     * @param token
+     * @param options
+     * @return
+     * @throws KrbException
+     */
+    public TgtTicket requestTgtTicket(String principal, KerbToken token,
+                                      KrbOptions options) throws KrbException {
+        if (options == null) options = new KrbOptions();
+
+        AsRequestWithToken asRequest = new AsRequestWithToken(context);
+        options.add(KrbOption.TOKEN_USER_ID_TOKEN, token);
+        asRequest.setKrbOptions(options);
+        return requestTgtTicket(principal, asRequest);
+    }
+
+    /**
+     * Request a service ticket targeting for a server with user plain credentials
+     * @param clientPrincipal
+     * @param password
+     * @param serverPrincipal
+     * @param options
+     * @return
+     * @throws KrbException
+     */
+    public ServiceTicket requestServiceTicket(String clientPrincipal, String password,
+                                              String serverPrincipal, KrbOptions options) throws KrbException {
+        if (options == null) options = new KrbOptions();
+
+        TgtTicket tgt = requestTgtTicket(clientPrincipal, password, options);
+        return requestServiceTicket(tgt, serverPrincipal, options);
+    }
+
+    /**
+     * Request a service ticket targeting for a server with an user Access Token
+     * @param clientPrincipal
+     * @param token
+     * @param serverPrincipal
+     * @param options
+     * @return
+     * @throws KrbException
+     */
+    public ServiceTicket requestServiceTicket(String clientPrincipal, KerbToken token,
+                                              String serverPrincipal, KrbOptions options) throws KrbException {
+        if (options == null) options = new KrbOptions();
+
+        TgtTicket tgt = requestTgtTicket(clientPrincipal, token, options);
+        return requestServiceTicket(tgt, serverPrincipal, options);
+    }
+
+    private TgtTicket requestTgtTicket(String clientPrincipal, AsRequest tgtTktReq) throws KrbException {
+        tgtTktReq.setClientPrincipal(new PrincipalName(clientPrincipal));
+        tgtTktReq.setTransport(transport);
+
+        try {
+            return doRequestTgtTicket(tgtTktReq);
+        } catch(KrbErrorException e) {
+            KrbError krbError = e.getKrbError();
+            if (krbError.getErrorCode() == KrbErrorCode.KDC_ERR_PREAUTH_REQUIRED) {
+                try {
+                    tgtTktReq.setEncryptionTypes(KrbErrorUtil.getEtypes(krbError));
+                } catch (IOException ioe) {
+                    throw new KrbException("Failed to decode and get etypes from krbError", ioe);
+                }
+                tgtTktReq.getPreauthContext().setPreauthRequired(true);
+                return requestTgtTicket(clientPrincipal, tgtTktReq);
+            }
+            throw e;
+        }
+    }
+
+    private TgtTicket doRequestTgtTicket(AsRequest tgtTktReq) throws KrbException {
+        eventHub.dispatch(KrbClientEvent.createTgtIntentEvent(tgtTktReq));
+        Event resultEvent = null;
+        try {
+            resultEvent = eventWaiter.waitEvent(KrbClientEventType.TGT_RESULT,
+                    context.getTimeout(), TimeUnit.SECONDS);
+        } catch (TimeoutException e) {
+            throw new KrbException("Network timeout", e);
+        }
+        AsRequest asResponse = (AsRequest) resultEvent.getEventData();
+
+        return asResponse.getTicket();
+    }
+
+    /**
+     * Request a service ticket with a TGT targeting for a server
+     * @param tgt
+     * @param serverPrincipal
+     * @return
+     * @throws KrbException
+     */
+    public ServiceTicket requestServiceTicket(TgtTicket tgt, String serverPrincipal,
+                                              KrbOptions options) throws KrbException {
+        if (options == null) options = new KrbOptions();
+
+        TgsRequest ticketReq = new TgsRequest(context, tgt);
+        ticketReq.setServerPrincipal(new PrincipalName(serverPrincipal));
+        ticketReq.setTransport(transport);
+
+        eventHub.dispatch(KrbClientEvent.createTktIntentEvent(ticketReq));
+        Event resultEvent = null;
+        try {
+            resultEvent = eventWaiter.waitEvent(KrbClientEventType.TKT_RESULT,
+                    context.getTimeout(), TimeUnit.SECONDS);
+        } catch (TimeoutException e) {
+            throw new KrbException("Network timeout", e);
+        }
+        TgsRequest tgsResponse = (TgsRequest) resultEvent.getEventData();
+
+        return tgsResponse.getServiceTicket();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/KrbConfig.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/KrbConfig.java b/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/KrbConfig.java
new file mode 100644
index 0000000..e661f48
--- /dev/null
+++ b/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/KrbConfig.java
@@ -0,0 +1,97 @@
+package org.apache.kerberos.kerb.client;
+
+import org.apache.haox.config.Conf;
+import org.apache.kerberos.kerb.common.KrbConfHelper;
+import org.apache.kerberos.kerb.spec.common.EncryptionType;
+
+import java.util.List;
+
+public class KrbConfig {
+    protected Conf conf;
+
+    public KrbConfig() {
+        this.conf = new Conf();
+    }
+
+    public Conf getConf() {
+        return this.conf;
+    }
+
+    public boolean enableDebug() {
+        return conf.getBoolean(KrbConfigKey.KRB_DEBUG);
+    }
+
+    public String getKdcHost() {
+        return conf.getString(KrbConfigKey.KDC_HOST);
+    }
+
+    public short getKdcPort() {
+        Integer kdcPort = conf.getInt(KrbConfigKey.KDC_PORT);
+        return kdcPort.shortValue();
+    }
+
+    public String getKdcRealm() {
+        return conf.getString(KrbConfigKey.KDC_REALM);
+    }
+
+    public String getKdcDomain() {
+        return conf.getString(KrbConfigKey.KDC_DOMAIN);
+    }
+
+    public boolean isPreauthRequired() {
+        return conf.getBoolean(KrbConfigKey.PREAUTH_REQUIRED);
+    }
+
+    public String getTgsPrincipal() {
+        return conf.getString(KrbConfigKey.TGS_PRINCIPAL);
+    }
+
+    public long getAllowableClockSkew() {
+        return conf.getLong(KrbConfigKey.ALLOWABLE_CLOCKSKEW);
+    }
+
+    public boolean isEmptyAddressesAllowed() {
+        return conf.getBoolean(KrbConfigKey.EMPTY_ADDRESSES_ALLOWED);
+    }
+
+    public boolean isForwardableAllowed() {
+        return conf.getBoolean(KrbConfigKey.FORWARDABLE_ALLOWED);
+    }
+
+    public boolean isPostdatedAllowed() {
+        return conf.getBoolean(KrbConfigKey.POSTDATED_ALLOWED);
+    }
+
+    public boolean isProxiableAllowed() {
+        return conf.getBoolean(KrbConfigKey.PROXIABLE_ALLOWED);
+    }
+
+    public boolean isRenewableAllowed() {
+        return conf.getBoolean(KrbConfigKey.RENEWABLE_ALLOWED);
+    }
+
+    public long getMaximumRenewableLifetime() {
+        return conf.getLong(KrbConfigKey.MAXIMUM_RENEWABLE_LIFETIME);
+    }
+
+    public long getMaximumTicketLifetime() {
+        return conf.getLong(KrbConfigKey.MAXIMUM_TICKET_LIFETIME);
+    }
+
+    public long getMinimumTicketLifetime() {
+        return conf.getLong(KrbConfigKey.MINIMUM_TICKET_LIFETIME);
+    }
+
+    public List<EncryptionType> getEncryptionTypes() {
+        return KrbConfHelper.getEncryptionTypes(
+                conf.getList(KrbConfigKey.ENCRYPTION_TYPES));
+    }
+
+    public boolean isPaEncTimestampRequired() {
+        return conf.getBoolean(KrbConfigKey.PA_ENC_TIMESTAMP_REQUIRED);
+    }
+
+    public boolean isBodyChecksumVerified() {
+        return conf.getBoolean(KrbConfigKey.VERIFY_BODY_CHECKSUM);
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/KrbConfigKey.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/KrbConfigKey.java b/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/KrbConfigKey.java
new file mode 100644
index 0000000..2514d17
--- /dev/null
+++ b/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/KrbConfigKey.java
@@ -0,0 +1,45 @@
+package org.apache.kerberos.kerb.client;
+
+import org.apache.haox.config.ConfigKey;
+
+public enum KrbConfigKey implements ConfigKey {
+    KRB_DEBUG(true),
+    KDC_HOST("localhost"),
+    KDC_PORT(8015),
+    KDC_DOMAIN("example.com"),
+    KDC_REALM("EXAMPLE.COM"),
+    TGS_PRINCIPAL("krbtgt@EXAMPLE.COM"),
+    PREAUTH_REQUIRED(true),
+    ALLOWABLE_CLOCKSKEW(5 * 60),
+    EMPTY_ADDRESSES_ALLOWED(true),
+    PA_ENC_TIMESTAMP_REQUIRED(true),
+    MAXIMUM_TICKET_LIFETIME(24 * 3600),
+    MINIMUM_TICKET_LIFETIME(1 * 3600),
+    MAXIMUM_RENEWABLE_LIFETIME(48 * 3600),
+    FORWARDABLE_ALLOWED(true),
+    POSTDATED_ALLOWED(true),
+    PROXIABLE_ALLOWED(true),
+    RENEWABLE_ALLOWED(true),
+    VERIFY_BODY_CHECKSUM(true),
+    ENCRYPTION_TYPES(new String[] { "aes128-cts-hmac-sha1-96", "des-cbc-md5" });
+
+    private Object defaultValue;
+
+    private KrbConfigKey() {
+        this.defaultValue = null;
+    }
+
+    private KrbConfigKey(Object defaultValue) {
+        this.defaultValue = defaultValue;
+    }
+
+    @Override
+    public String getPropertyKey() {
+        return name().toLowerCase();
+    }
+
+    @Override
+    public Object getDefaultValue() {
+        return this.defaultValue;
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/KrbContext.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/KrbContext.java b/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/KrbContext.java
new file mode 100644
index 0000000..136a4be
--- /dev/null
+++ b/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/KrbContext.java
@@ -0,0 +1,78 @@
+package org.apache.kerberos.kerb.client;
+
+import org.apache.kerberos.kerb.client.preauth.PreauthHandler;
+import org.apache.kerberos.kerb.crypto.Nonce;
+
+public class KrbContext {
+
+    private String kdcRealm;
+    private KrbConfig config;
+    private String kdcHost;
+    private short kdcPort;
+    private long timeout = 10L;
+    private PreauthHandler preauthHandler;
+
+    public void init(KrbConfig config) {
+        this.config = config;
+        preauthHandler = new PreauthHandler();
+        preauthHandler.init(this);
+    }
+
+    public String getKdcHost() {
+        if (kdcHost != null) {
+            return kdcHost;
+        }
+        return config.getKdcHost();
+    }
+
+    public void setKdcHost(String kdcHost) {
+        this.kdcHost = kdcHost;
+    }
+
+    public short getKdcPort() {
+        if (kdcPort > 0) {
+            return kdcPort;
+        }
+        return config.getKdcPort();
+    }
+
+    public void setKdcPort(short kdcPort) {
+        this.kdcPort = kdcPort;
+    }
+
+    public void setTimeout(long timeout) {
+        this.timeout = timeout;
+    }
+
+    public long getTimeout() {
+        return this.timeout;
+    }
+
+    public KrbConfig getConfig() {
+        return config;
+    }
+
+    public void setKdcRealm(String realm) {
+        this.kdcRealm = realm;
+    }
+
+    public String getKdcRealm() {
+        if (kdcRealm != null) {
+            return kdcRealm;
+        }
+
+        return config.getKdcRealm();
+    }
+
+    public int generateNonce() {
+        return Nonce.value();
+    }
+
+    public long getTicketValidTime() {
+        return 8 * 60 * 60 * 1000;
+    }
+
+    public PreauthHandler getPreauthHandler() {
+        return preauthHandler;
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/KrbHandler.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/KrbHandler.java b/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/KrbHandler.java
new file mode 100644
index 0000000..c1ceb23
--- /dev/null
+++ b/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/KrbHandler.java
@@ -0,0 +1,80 @@
+package org.apache.kerberos.kerb.client;
+
+import org.apache.haox.event.AbstractEventHandler;
+import org.apache.haox.event.Event;
+import org.apache.haox.event.EventType;
+import org.apache.kerberos.kerb.client.event.KrbClientEvent;
+import org.apache.kerberos.kerb.client.event.KrbClientEventType;
+import org.apache.kerberos.kerb.client.preauth.PreauthHandler;
+import org.apache.kerberos.kerb.client.request.AsRequest;
+import org.apache.kerberos.kerb.client.request.KdcRequest;
+import org.apache.kerberos.kerb.client.request.TgsRequest;
+import org.apache.kerberos.kerb.common.KrbUtil;
+import org.apache.kerberos.kerb.KrbException;
+import org.apache.kerberos.kerb.spec.common.KrbMessage;
+import org.apache.kerberos.kerb.spec.common.KrbMessageType;
+import org.apache.kerberos.kerb.spec.kdc.KdcRep;
+import org.apache.kerberos.kerb.spec.kdc.KdcReq;
+import org.apache.haox.transport.Transport;
+import org.apache.haox.transport.event.MessageEvent;
+import org.apache.haox.transport.event.TransportEventType;
+
+import java.nio.ByteBuffer;
+
+public class KrbHandler extends AbstractEventHandler {
+
+    private KrbContext context;
+    private PreauthHandler preauthHandler;
+
+    public void init(KrbContext context) {
+        this.context = context;
+        preauthHandler = new PreauthHandler();
+        preauthHandler.init(context);
+    }
+
+    @Override
+    public EventType[] getInterestedEvents() {
+        return new EventType[] {
+                TransportEventType.INBOUND_MESSAGE,
+                KrbClientEventType.TGT_INTENT,
+                KrbClientEventType.TKT_INTENT
+        };
+    }
+
+    @Override
+    protected void doHandle(Event event) throws Exception {
+        EventType eventType = event.getEventType();
+
+        if (eventType == KrbClientEventType.TGT_INTENT ||
+                eventType == KrbClientEventType.TKT_INTENT) {
+            KdcRequest kdcRequest = (KdcRequest) event.getEventData();
+            handleKdcRequest(kdcRequest);
+        } else if (event.getEventType() == TransportEventType.INBOUND_MESSAGE) {
+            handleMessage((MessageEvent) event);
+        }
+    }
+
+    protected void handleKdcRequest(KdcRequest kdcRequest) throws KrbException {
+        kdcRequest.process();
+        KdcReq kdcReq = kdcRequest.getKdcReq();
+        Transport transport = kdcRequest.getTransport();
+        transport.setAttachment(kdcRequest);
+        KrbUtil.sendMessage(kdcReq, transport);
+    }
+
+    protected void handleMessage(MessageEvent event) throws Exception {
+        ByteBuffer message = event.getMessage();
+        KrbMessage kdcRep = KrbUtil.decodeMessage(message);
+
+        KrbMessageType messageType = kdcRep.getMsgType();
+        if (messageType == KrbMessageType.AS_REP) {
+            KdcRequest kdcRequest = (KdcRequest) event.getTransport().getAttachment();
+            kdcRequest.processResponse((KdcRep) kdcRep);
+            dispatch(KrbClientEvent.createTgtResultEvent((AsRequest) kdcRequest));
+        } else if (messageType == KrbMessageType.TGS_REP) {
+            KdcRequest kdcRequest = (KdcRequest) event.getTransport().getAttachment();
+            kdcRequest.processResponse((KdcRep) kdcRep);
+            dispatch(KrbClientEvent.createTktResultEvent((TgsRequest) kdcRequest));
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/KrbOption.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/KrbOption.java b/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/KrbOption.java
new file mode 100644
index 0000000..c046e22
--- /dev/null
+++ b/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/KrbOption.java
@@ -0,0 +1,72 @@
+package org.apache.kerberos.kerb.client;
+
+public enum KrbOption {
+    LIFE_TIME("-l lifetime"),
+    START_TIME("-s start time"),
+    RENEWABLE_TIME("-r renewable lifetime"),
+    FORWARDABLE("-f forwardable"),
+    NOT_FORWARDABLE("-F not forwardable"),
+    PROXIABLE("-p proxiable"),
+    NOT_PROXIABLE("-P not proxiable"),
+    ANONYMOUS("-n anonymous"),
+    INCLUDE_ADDRESSES("-a include addresses"),
+    NOT_INCLUDE_ADDRESSES("-A do not include addresses"),
+    VALIDATE("-v validate"),
+    RENEW("-R renew"),
+    CANONICALIZE("-C canonicalize"),
+    AS_ENTERPRISE_PN("-E client is enterprise principal name"),
+    USE_KEYTAB("-k use keytab"),
+    USE_DFT_KEYTAB("-i use default client keytab (with -k)"),
+    USER_KEYTAB_FILE("-t filename of keytab to use"),
+    KRB5_CACHE("-c Kerberos 5 cache name"),
+    SERVICE("-S service"),
+    ARMOR_CACHE("-T armor credential cache"),
+    XATTR("-X <attribute>[=<value>]"),
+
+    USER_PASSWD("user_passwd", "User plain password"),
+
+    PKINIT_X509_IDENTITY("x509_identities", "X509 user private key and cert"),
+    PKINIT_X509_PRIVATE_KEY("x509_privatekey", "X509 user private key"),
+    PKINIT_X509_CERTIFICATE("x509_cert", "X509 user certificate"),
+    PKINIT_X509_ANCHORS("x509_anchors", "X509 anchors"),
+    PKINIT_X509_ANONYMOUS("x509_anonymous", "X509 anonymous"),
+    PKINIT_USING_RSA("using_rsa_or_dh", "Using RSA or DH"),
+
+    TOKEN_USING_IDTOKEN("using_id_token", "Using identity token"),
+    TOKEN_USER_ID_TOKEN("user_id_token", "User identity token"),
+    TOKEN_USER_AC_TOKEN("user_ac_token", "User access token"),
+
+    ;
+
+    private String name;
+    private String description;
+    private Object value;
+
+    KrbOption(String description) {
+        this.description = description;
+    }
+
+    KrbOption(String name, String description) {
+        this.name = name;
+        this.description = description;
+    }
+
+    public String getName() {
+        if (name != null) {
+            return name;
+        }
+        return name();
+    }
+
+    public String getDescription() {
+        return this.description;
+    }
+
+    public void setValue(Object value) {
+        this.value = value;
+    }
+
+    public Object getValue() {
+        return value;
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/KrbOptions.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/KrbOptions.java b/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/KrbOptions.java
new file mode 100644
index 0000000..2bd5268
--- /dev/null
+++ b/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/KrbOptions.java
@@ -0,0 +1,77 @@
+package org.apache.kerberos.kerb.client;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class KrbOptions {
+
+    private Map<KrbOption, KrbOption> options = new HashMap<KrbOption, KrbOption>(4);
+
+    public void add(KrbOption option) {
+        if (option != null) {
+            options.put(option, option);
+        }
+    }
+
+    public void add(KrbOption option, Object optionValue) {
+        option.setValue(optionValue);
+        add(option);
+    }
+
+    public boolean contains(KrbOption option) {
+        return options.containsKey(option);
+    }
+
+    public KrbOption getOption(KrbOption option) {
+        if (! options.containsKey(option)) {
+            return null;
+        }
+
+        return options.get(option);
+    }
+
+    public Object getOptionValue(KrbOption option) {
+        if (! contains(option)) {
+            return null;
+        }
+        return options.get(option).getValue();
+    }
+
+    public String getStringOption(KrbOption option) {
+        Object value = getOptionValue(option);
+        if (value != null && value instanceof String) {
+            return (String) value;
+        }
+        return null;
+    }
+
+    public boolean getBooleanOption(KrbOption option) {
+        Object value = getOptionValue(option);
+        if (value != null) {
+            if (value instanceof String) {
+                String strVal = (String) value;
+                if (strVal.equalsIgnoreCase("true") ||
+                        strVal.equalsIgnoreCase("yes") ||
+                        strVal.equals("1")) {
+                    return true;
+                }
+            } else if (value instanceof Boolean) {
+                return (Boolean) value;
+            }
+        }
+        return false;
+    }
+
+    public int getIntegerOption(KrbOption option) {
+        Object value = getOptionValue(option);
+        if (value != null) {
+            if (value instanceof String) {
+                String strVal = (String) value;
+                return Integer.valueOf(strVal);
+            } else if (value instanceof Integer) {
+                return (Integer) value;
+            }
+        }
+        return -1;
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/event/KrbClientEvent.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/event/KrbClientEvent.java b/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/event/KrbClientEvent.java
new file mode 100644
index 0000000..d070bc9
--- /dev/null
+++ b/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/event/KrbClientEvent.java
@@ -0,0 +1,24 @@
+package org.apache.kerberos.kerb.client.event;
+
+import org.apache.haox.event.Event;
+import org.apache.kerberos.kerb.client.request.AsRequest;
+import org.apache.kerberos.kerb.client.request.TgsRequest;
+
+public class KrbClientEvent {
+
+    public static Event createTgtIntentEvent(AsRequest asRequest) {
+        return new Event(KrbClientEventType.TGT_INTENT, asRequest);
+    }
+
+    public static Event createTktIntentEvent(TgsRequest tgsRequest) {
+        return new Event(KrbClientEventType.TKT_INTENT, tgsRequest);
+    }
+
+    public static Event createTgtResultEvent(AsRequest asRequest) {
+        return new Event(KrbClientEventType.TGT_RESULT, asRequest);
+    }
+
+    public static Event createTktResultEvent(TgsRequest tgsRequest) {
+        return new Event(KrbClientEventType.TKT_RESULT, tgsRequest);
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/event/KrbClientEventType.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/event/KrbClientEventType.java b/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/event/KrbClientEventType.java
new file mode 100644
index 0000000..163ed4a
--- /dev/null
+++ b/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/event/KrbClientEventType.java
@@ -0,0 +1,10 @@
+package org.apache.kerberos.kerb.client.event;
+
+import org.apache.haox.event.EventType;
+
+public enum KrbClientEventType implements EventType {
+    TGT_INTENT,
+    TGT_RESULT,
+    TKT_INTENT,
+    TKT_RESULT
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/preauth/AbstractPreauthPlugin.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/preauth/AbstractPreauthPlugin.java b/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/preauth/AbstractPreauthPlugin.java
new file mode 100644
index 0000000..dc03532
--- /dev/null
+++ b/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/preauth/AbstractPreauthPlugin.java
@@ -0,0 +1,103 @@
+package org.apache.kerberos.kerb.client.preauth;
+
+import org.apache.kerberos.kerb.client.KrbContext;
+import org.apache.kerberos.kerb.client.KrbOptions;
+import org.apache.kerberos.kerb.client.request.KdcRequest;
+import org.apache.kerberos.kerb.preauth.PaFlag;
+import org.apache.kerberos.kerb.preauth.PaFlags;
+import org.apache.kerberos.kerb.preauth.PluginRequestContext;
+import org.apache.kerberos.kerb.preauth.PreauthPluginMeta;
+import org.apache.kerberos.kerb.KrbException;
+import org.apache.kerberos.kerb.spec.common.EncryptionType;
+import org.apache.kerberos.kerb.spec.pa.PaData;
+import org.apache.kerberos.kerb.spec.pa.PaDataEntry;
+import org.apache.kerberos.kerb.spec.pa.PaDataType;
+
+import java.util.Collections;
+import java.util.List;
+
+public class AbstractPreauthPlugin implements KrbPreauth {
+
+    private PreauthPluginMeta pluginMeta;
+    protected KrbContext context;
+
+    public AbstractPreauthPlugin(PreauthPluginMeta meta) {
+        this.pluginMeta = meta;
+    }
+
+    @Override
+    public String getName() {
+        return pluginMeta.getName();
+    }
+
+    public int getVersion() {
+        return pluginMeta.getVersion();
+    }
+
+    public PaDataType[] getPaTypes() {
+        return pluginMeta.getPaTypes();
+    }
+
+    public void init(KrbContext context) {
+        this.context = context;
+    }
+
+    @Override
+    public PluginRequestContext initRequestContext(KdcRequest kdcRequest) {
+        return null;
+    }
+
+    @Override
+    public void prepareQuestions(KdcRequest kdcRequest,
+                                 PluginRequestContext requestContext) throws KrbException {
+
+        kdcRequest.needAsKey();
+    }
+
+    @Override
+    public List<EncryptionType> getEncTypes(KdcRequest kdcRequest,
+                                            PluginRequestContext requestContext) {
+        return Collections.emptyList();
+    }
+
+    @Override
+    public void setPreauthOptions(KdcRequest kdcRequest,
+                                  PluginRequestContext requestContext, KrbOptions options) {
+
+    }
+
+    public void tryFirst(KdcRequest kdcRequest,
+                         PluginRequestContext requestContext,
+                         PaData outPadata) throws KrbException {
+
+    }
+
+    @Override
+    public boolean process(KdcRequest kdcRequest,
+                           PluginRequestContext requestContext, PaDataEntry inPadata,
+                           PaData outPadata) throws KrbException {
+
+        return false;
+    }
+
+    @Override
+    public boolean tryAgain(KdcRequest kdcRequest,
+                            PluginRequestContext requestContext, PaDataType preauthType,
+                            PaData errPadata, PaData outPadata) {
+        return false;
+    }
+
+    @Override
+    public PaFlags getFlags(PaDataType paType) {
+        PaFlags paFlags = new PaFlags(0);
+        paFlags.setFlag(PaFlag.PA_REAL);
+
+        return paFlags;
+    }
+
+    @Override
+    public void destroy() {
+
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/preauth/FastContext.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/preauth/FastContext.java b/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/preauth/FastContext.java
new file mode 100644
index 0000000..5f046a1
--- /dev/null
+++ b/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/preauth/FastContext.java
@@ -0,0 +1,17 @@
+package org.apache.kerberos.kerb.client.preauth;
+
+import org.apache.kerberos.kerb.spec.common.EncryptionKey;
+import org.apache.kerberos.kerb.spec.fast.FastOptions;
+import org.apache.kerberos.kerb.spec.fast.KrbFastArmor;
+import org.apache.kerberos.kerb.spec.kdc.KdcReq;
+
+public class FastContext {
+
+    public KdcReq fastOuterRequest;
+    public EncryptionKey armorKey;
+    public KrbFastArmor fastArmor;
+    public FastOptions fastOptions;
+    public int nonce;
+    public int fastFlags;
+
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/preauth/KrbPreauth.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/preauth/KrbPreauth.java b/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/preauth/KrbPreauth.java
new file mode 100644
index 0000000..11dc2f5
--- /dev/null
+++ b/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/preauth/KrbPreauth.java
@@ -0,0 +1,88 @@
+package org.apache.kerberos.kerb.client.preauth;
+
+import org.apache.kerberos.kerb.client.KrbContext;
+import org.apache.kerberos.kerb.client.KrbOptions;
+import org.apache.kerberos.kerb.client.request.KdcRequest;
+import org.apache.kerberos.kerb.preauth.PaFlags;
+import org.apache.kerberos.kerb.preauth.PluginRequestContext;
+import org.apache.kerberos.kerb.preauth.PreauthPluginMeta;
+import org.apache.kerberos.kerb.KrbException;
+import org.apache.kerberos.kerb.spec.common.EncryptionType;
+import org.apache.kerberos.kerb.spec.pa.PaData;
+import org.apache.kerberos.kerb.spec.pa.PaDataEntry;
+import org.apache.kerberos.kerb.spec.pa.PaDataType;
+
+import java.util.List;
+
+/**
+ * Client side preauth plugin module
+ */
+public interface KrbPreauth extends PreauthPluginMeta {
+
+    /**
+     * Initializing preauth plugin context
+     */
+    public void init(KrbContext krbContext);
+
+    /**
+     * Initializing request context
+     */
+    public PluginRequestContext initRequestContext(KdcRequest kdcRequest);
+
+    /**
+     * Prepare questions to prompt to you asking for credential
+     */
+    public void prepareQuestions(KdcRequest kdcRequest,
+                                 PluginRequestContext requestContext) throws KrbException;
+
+    /**
+     * Get supported encryption types
+     */
+    public List<EncryptionType> getEncTypes(KdcRequest kdcRequest,
+                                            PluginRequestContext requestContext);
+
+    /**
+     * Set krb options passed from user
+     */
+    public void setPreauthOptions(KdcRequest kdcRequest,
+                                  PluginRequestContext requestContext,
+                                  KrbOptions preauthOptions);
+
+    /**
+     * Attempt to try any initial padata derived from user options
+     */
+    public void tryFirst(KdcRequest kdcRequest,
+                         PluginRequestContext requestContext,
+                         PaData outPadata) throws KrbException;
+
+    /**
+     * Process server returned paData and return back any result paData
+     * Return true indicating padata is added
+     */
+    public boolean process(KdcRequest kdcRequest,
+                           PluginRequestContext requestContext,
+                           PaDataEntry inPadata,
+                           PaData outPadata) throws KrbException;
+
+    /**
+     * When another request to server in the 4 pass, any paData to provide?
+     * Return true indicating padata is added
+     */
+    public boolean tryAgain(KdcRequest kdcRequest,
+                            PluginRequestContext requestContext,
+                            PaDataType preauthType,
+                            PaData errPadata,
+                            PaData outPadata);
+
+    /**
+     * Return PA_REAL if pa_type is a real preauthentication type or PA_INFO if it is
+     * an informational type.
+     */
+    public PaFlags getFlags(PaDataType paType);
+
+    /**
+     * When exiting...
+     */
+    public void destroy();
+
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/preauth/PreauthContext.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/preauth/PreauthContext.java b/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/preauth/PreauthContext.java
new file mode 100644
index 0000000..175129c
--- /dev/null
+++ b/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/preauth/PreauthContext.java
@@ -0,0 +1,89 @@
+package org.apache.kerberos.kerb.client.preauth;
+
+import org.apache.kerberos.kerb.KrbException;
+import org.apache.kerberos.kerb.spec.pa.PaData;
+import org.apache.kerberos.kerb.spec.pa.PaDataType;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class PreauthContext {
+    private boolean preauthRequired = true;
+    private PaData inputPaData;
+    private PaData outputPaData;
+    private PaData errorPaData;
+    private UserResponser userResponser = new UserResponser();
+    private PaDataType selectedPaType;
+    private PaDataType allowedPaType;
+    private List<PaDataType> triedPaTypes = new ArrayList<PaDataType>(1);
+    private List<PreauthHandle> handles = new ArrayList<PreauthHandle>(5);
+
+    public PreauthContext() {
+        this.selectedPaType = PaDataType.NONE;
+        this.allowedPaType = PaDataType.NONE;
+        this.outputPaData = new PaData();
+    }
+
+    public boolean isPreauthRequired() {
+        return preauthRequired;
+    }
+
+    public void setPreauthRequired(boolean preauthRequired) {
+        this.preauthRequired = preauthRequired;
+    }
+
+    public UserResponser getUserResponser() {
+        return userResponser;
+    }
+
+    public boolean isPaTypeAllowed(PaDataType paType) {
+        return (allowedPaType == PaDataType.NONE ||
+                allowedPaType == paType);
+    }
+
+    public PaData getOutputPaData() throws KrbException {
+        return outputPaData;
+    }
+
+    public boolean hasInputPaData() {
+        return  (inputPaData != null && ! inputPaData.isEmpty());
+    }
+
+    public PaData getInputPaData() {
+        return inputPaData;
+    }
+
+    public void setInputPaData(PaData inputPaData) {
+        this.inputPaData = inputPaData;
+    }
+
+    public PaData getErrorPaData() {
+        return errorPaData;
+    }
+
+    public void setErrorPaData(PaData errorPaData) {
+        this.errorPaData = errorPaData;
+    }
+
+    public void setAllowedPaType(PaDataType paType) {
+        this.allowedPaType = paType;
+    }
+
+    public List<PreauthHandle> getHandles() {
+        return handles;
+    }
+
+    public PaDataType getAllowedPaType() {
+        return allowedPaType;
+    }
+
+    public boolean checkAndPutTried(PaDataType paType) {
+        for (PaDataType pt : triedPaTypes) {
+            if (pt == paType) {
+                return true;
+            }
+        }
+        triedPaTypes.add(paType);
+        return false;
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/967d7e1c/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/preauth/PreauthHandle.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/preauth/PreauthHandle.java b/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/preauth/PreauthHandle.java
new file mode 100644
index 0000000..82e62f3
--- /dev/null
+++ b/haox-kerb/kerb-client/src/main/java/org/apache/kerberos/kerb/client/preauth/PreauthHandle.java
@@ -0,0 +1,53 @@
+package org.apache.kerberos.kerb.client.preauth;
+
+import org.apache.kerberos.kerb.client.KrbOptions;
+import org.apache.kerberos.kerb.client.request.KdcRequest;
+import org.apache.kerberos.kerb.preauth.PaFlags;
+import org.apache.kerberos.kerb.preauth.PluginRequestContext;
+import org.apache.kerberos.kerb.KrbException;
+import org.apache.kerberos.kerb.spec.pa.PaData;
+import org.apache.kerberos.kerb.spec.pa.PaDataEntry;
+import org.apache.kerberos.kerb.spec.pa.PaDataType;
+
+public class PreauthHandle {
+
+    public KrbPreauth preauth;
+    public PluginRequestContext requestContext;
+
+    public PreauthHandle(KrbPreauth preauth) {
+        this.preauth = preauth;
+    }
+
+    public void initRequestContext(KdcRequest kdcRequest) {
+        requestContext = preauth.initRequestContext(kdcRequest);
+    }
+
+    public void prepareQuestions(KdcRequest kdcRequest) throws KrbException {
+        preauth.prepareQuestions(kdcRequest, requestContext);
+    }
+
+    public void setPreauthOptions(KdcRequest kdcRequest,
+                                  KrbOptions preauthOptions) throws KrbException {
+        preauth.setPreauthOptions(kdcRequest, requestContext, preauthOptions);
+    }
+
+    public void tryFirst(KdcRequest kdcRequest, PaData outPadata) throws KrbException {
+        preauth.tryFirst(kdcRequest, requestContext, outPadata);
+    }
+
+    public boolean process(KdcRequest kdcRequest,
+                        PaDataEntry inPadata, PaData outPadata) throws KrbException {
+        return preauth.process(kdcRequest, requestContext, inPadata, outPadata);
+    }
+
+    public boolean tryAgain(KdcRequest kdcRequest,
+                         PaDataType paType, PaData errPadata, PaData paData) {
+        return preauth.tryAgain(kdcRequest, requestContext, paType, errPadata, paData);
+    }
+
+    public boolean isReal(PaDataType paType) {
+        PaFlags paFlags = preauth.getFlags(paType);
+        return paFlags.isReal();
+    }
+
+}