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/11/29 01:57:40 UTC
[13/13] directory-kerby git commit: Synced with latest master branch
Synced with latest master branch
Project: http://git-wip-us.apache.org/repos/asf/directory-kerby/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerby/commit/800e02fd
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/800e02fd
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/800e02fd
Branch: refs/heads/pkinit-support
Commit: 800e02fd5b22d3b6187b61c2a034d6191a56f371
Parents: 67c2bb6
Author: Kai Zheng <ka...@intel.com>
Authored: Sun Nov 29 08:56:41 2015 +0800
Committer: Kai Zheng <ka...@intel.com>
Committed: Sun Nov 29 08:56:41 2015 +0800
----------------------------------------------------------------------
.../kerby/benchmark/KrbCodecBenchmark.java | 2 +-
.../org/apache/kerby/asn1/Asn1FieldInfo.java | 97 ++++
.../org/apache/kerby/asn1/Asn1InputBuffer.java | 6 +-
.../org/apache/kerby/asn1/Asn1OutputBuffer.java | 4 +-
.../org/apache/kerby/asn1/ExplicitField.java | 46 ++
.../org/apache/kerby/asn1/ImplicitField.java | 46 ++
.../kerby/asn1/type/AbstractAsn1Type.java | 440 +----------------
.../org/apache/kerby/asn1/type/Asn1Choice.java | 1 +
.../kerby/asn1/type/Asn1CollectionType.java | 1 +
.../apache/kerby/asn1/type/Asn1FieldInfo.java | 97 ----
.../org/apache/kerby/asn1/type/Asn1Object.java | 484 +++++++++++++++++++
.../kerby/asn1/type/Asn1SequenceType.java | 1 +
.../org/apache/kerby/asn1/type/Asn1SetType.java | 1 +
.../apache/kerby/asn1/type/ExplicitField.java | 44 --
.../apache/kerby/asn1/type/ImplicitField.java | 44 --
.../kerby/asn1/type/TaggingCollection.java | 1 +
.../apache/kerby/asn1/type/TaggingSequence.java | 2 +
.../org/apache/kerby/asn1/type/TaggingSet.java | 2 +
.../org/apache/kerby/asn1/PersonnelRecord.java | 3 -
.../identitybackend/JsonIdentityBackend.java | 6 +-
.../typeAdapter/EncryptionKeyAdapter.java | 2 +-
.../typeAdapter/KerberosTimeAdapter.java | 2 +-
.../typeAdapter/PrincipalNameAdapter.java | 2 +-
.../identitybackend/LdapIdentityBackend.java | 6 +-
.../identitybackend/LdapIdentityGetHelper.java | 6 +-
.../org/apache/kerby/KrbIdentitySerializer.java | 6 +-
.../apache/kerby/KrbIdentitySerializerTest.java | 6 +-
.../kdc/identitybackend/IdentityZNode.java | 8 +-
.../apache/kerby/kerberos/kdc/KerbyKdcTest.java | 12 +-
.../kerberos/kdc/WithAccessTokenKdcTest.java | 8 +-
.../kerby/kerberos/kdc/WithCertKdcTest.java | 19 +-
.../kerberos/kdc/WithIdentityTokenKdcTest.java | 16 +-
.../kerberos/kdc/WithTokenKdcTestBase.java | 12 +-
.../test/jaas/TokenAuthLoginModule.java | 15 +-
.../integration/test/TokenLoginTestBase.java | 8 +-
.../kerby/kerberos/kerb/admin/AdminHelper.java | 8 +-
.../kerby/kerberos/kerb/admin/Kadmin.java | 4 +-
.../kerby/kerberos/kerb/client/KrbClient.java | 94 +---
.../kerby/kerberos/kerb/client/KrbConfig.java | 2 +-
.../kerby/kerberos/kerb/client/KrbHandler.java | 22 +-
.../kerberos/kerb/client/KrbPkinitClient.java | 78 +++
.../kerberos/kerb/client/KrbTokenClient.java | 89 ++++
.../client/impl/AbstractInternalKrbClient.java | 24 +-
.../client/impl/DefaultInternalKrbClient.java | 10 +-
.../kerb/client/impl/InternalKrbClient.java | 10 +-
.../client/preauth/AbstractPreauthPlugin.java | 8 +-
.../client/preauth/KrbFastRequestState.java | 8 +-
.../kerb/client/preauth/KrbPreauth.java | 8 +-
.../kerb/client/preauth/PreauthContext.java | 4 +-
.../kerb/client/preauth/PreauthHandle.java | 6 +-
.../kerb/client/preauth/PreauthHandler.java | 6 +-
.../client/preauth/builtin/EncTsPreauth.java | 12 +-
.../kerb/client/preauth/builtin/TgtPreauth.java | 6 +-
.../client/preauth/pkinit/PkinitPreauth.java | 34 +-
.../preauth/pkinit/PkinitRequestContext.java | 2 +-
.../preauth/pkinit/ServerConfiguration.java | 2 +-
.../client/preauth/pkinit/SignedDataEngine.java | 6 +-
.../kerb/client/preauth/token/TokenContext.java | 2 +-
.../kerb/client/preauth/token/TokenPreauth.java | 20 +-
.../preauth/token/TokenRequestContext.java | 2 +-
.../kerb/client/request/ArmoredAsRequest.java | 2 +-
.../kerb/client/request/ArmoredRequest.java | 40 +-
.../kerb/client/request/ArmoredTgsRequest.java | 2 +-
.../kerberos/kerb/client/request/AsRequest.java | 22 +-
.../kerb/client/request/AsRequestWithCert.java | 26 +-
.../client/request/AsRequestWithKeytab.java | 4 +-
.../client/request/AsRequestWithPasswd.java | 4 +-
.../kerb/client/request/AsRequestWithToken.java | 2 +-
.../kerb/client/request/KdcRequest.java | 28 +-
.../kerb/client/request/TgsRequest.java | 22 +-
.../kerb/client/request/TgsRequestWithTgt.java | 24 +-
.../client/request/TgsRequestWithToken.java | 6 +-
.../kerberos/kerb/client/TestKrbConfigLoad.java | 2 +-
.../kerby/kerberos/kerb/auth/AuthContext.java | 8 +-
.../kerberos/kerb/common/CheckSumUtil.java | 14 +-
.../kerberos/kerb/common/EncryptionUtil.java | 16 +-
.../kerby/kerberos/kerb/common/Krb5Conf.java | 2 +-
.../kerberos/kerb/common/KrbErrorUtil.java | 18 +-
.../kerby/kerberos/kerb/common/KrbUtil.java | 4 +-
.../kerb/preauth/PreauthPluginMeta.java | 2 +-
.../kerb/preauth/builtin/EncTsPreauthMeta.java | 2 +-
.../kerb/preauth/builtin/TgtPreauthMeta.java | 2 +-
.../kerb/preauth/pkinit/PkinitCrypto.java | 12 +-
.../kerb/preauth/pkinit/PkinitIdenity.java | 2 +-
.../kerb/preauth/pkinit/PkinitPreauthMeta.java | 2 +-
.../kerb/preauth/pkinit/PluginOpts.java | 4 +-
.../kerb/preauth/token/TokenPreauthMeta.java | 2 +-
.../kerby/kerberos/kerb/codec/CodecTest.java | 20 +-
.../kerberos/kerb/codec/TestAsRepCodec.java | 10 +-
.../kerberos/kerb/codec/TestAsReqCodec.java | 22 +-
.../kerberos/kerb/codec/TestTgsRepCodec.java | 10 +-
.../kerberos/kerb/codec/TestTgsReqCodec.java | 18 +-
.../apache/kerby/kerberos/kerb/KrbCodec.java | 24 +-
.../kerby/kerberos/kerb/KrbErrorException.java | 2 +-
.../kerberos/kerb/provider/TokenDecoder.java | 2 +-
.../kerberos/kerb/provider/TokenEncoder.java | 2 +-
.../kerberos/kerb/provider/TokenFactory.java | 2 +-
.../kerberos/kerb/spec/KerberosString.java | 35 --
.../kerberos/kerb/spec/KerberosStrings.java | 43 --
.../kerby/kerberos/kerb/spec/KerberosTime.java | 160 ------
.../kerberos/kerb/spec/KrbAppSequenceType.java | 57 ---
.../kerby/kerberos/kerb/spec/KrbIntegers.java | 54 ---
.../kerberos/kerb/spec/KrbSequenceOfType.java | 43 --
.../kerberos/kerb/spec/KrbSequenceType.java | 55 ---
.../kerby/kerberos/kerb/spec/ad/AdToken.java | 51 --
.../kerb/spec/ad/AuthorizationData.java | 32 --
.../kerb/spec/ad/AuthorizationDataEntry.java | 63 ---
.../kerb/spec/ad/AuthorizationType.java | 143 ------
.../kerby/kerberos/kerb/spec/ap/ApOption.java | 58 ---
.../kerby/kerberos/kerb/spec/ap/ApOptions.java | 33 --
.../kerby/kerberos/kerb/spec/ap/ApRep.java | 66 ---
.../kerby/kerberos/kerb/spec/ap/ApReq.java | 90 ----
.../kerberos/kerb/spec/ap/Authenticator.java | 145 ------
.../kerberos/kerb/spec/ap/EncAPRepPart.java | 86 ----
.../kerberos/kerb/spec/base/AuthToken.java | 144 ------
.../kerby/kerberos/kerb/spec/base/CheckSum.java | 114 -----
.../kerberos/kerb/spec/base/CheckSumType.java | 123 -----
.../kerberos/kerb/spec/base/EncryptedData.java | 115 -----
.../kerberos/kerb/spec/base/EncryptionKey.java | 128 -----
.../kerberos/kerb/spec/base/EncryptionType.java | 140 ------
.../kerberos/kerb/spec/base/EtypeInfo.java | 29 --
.../kerberos/kerb/spec/base/EtypeInfo2.java | 29 --
.../kerb/spec/base/EtypeInfo2Entry.java | 74 ---
.../kerberos/kerb/spec/base/EtypeInfoEntry.java | 62 ---
.../kerberos/kerb/spec/base/HostAddrType.java | 100 ----
.../kerberos/kerb/spec/base/HostAddress.java | 110 -----
.../kerberos/kerb/spec/base/HostAddresses.java | 43 --
.../kerby/kerberos/kerb/spec/base/KeyUsage.java | 129 -----
.../kerby/kerberos/kerb/spec/base/KrbError.java | 167 -------
.../kerberos/kerb/spec/base/KrbMessage.java | 54 ---
.../kerberos/kerb/spec/base/KrbMessageType.java | 59 ---
.../kerby/kerberos/kerb/spec/base/KrbToken.java | 335 -------------
.../kerby/kerberos/kerb/spec/base/LastReq.java | 32 --
.../kerberos/kerb/spec/base/LastReqEntry.java | 63 ---
.../kerberos/kerb/spec/base/LastReqType.java | 62 ---
.../kerberos/kerb/spec/base/MethodData.java | 30 --
.../kerby/kerberos/kerb/spec/base/NameType.java | 55 ---
.../kerberos/kerb/spec/base/PrincipalName.java | 202 --------
.../kerby/kerberos/kerb/spec/base/Realm.java | 34 --
.../kerby/kerberos/kerb/spec/base/SamType.java | 65 ---
.../kerberos/kerb/spec/base/TokenFormat.java | 50 --
.../kerb/spec/base/TransitedEncoding.java | 63 ---
.../kerb/spec/base/TransitedEncodingType.java | 51 --
.../kerberos/kerb/spec/fast/ArmorType.java | 50 --
.../kerberos/kerb/spec/fast/FastOption.java | 51 --
.../kerberos/kerb/spec/fast/FastOptions.java | 33 --
.../kerberos/kerb/spec/fast/KrbFastArmor.java | 65 ---
.../kerb/spec/fast/KrbFastArmoredRep.java | 53 --
.../kerb/spec/fast/KrbFastArmoredReq.java | 96 ----
.../kerb/spec/fast/KrbFastFinished.java | 83 ----
.../kerberos/kerb/spec/fast/KrbFastReq.java | 79 ---
.../kerb/spec/fast/KrbFastResponse.java | 91 ----
.../kerberos/kerb/spec/fast/PaAuthnEntry.java | 81 ----
.../kerberos/kerb/spec/fast/PaAuthnSet.java | 29 --
.../kerberos/kerb/spec/fast/PaFxFastReply.java | 49 --
.../kerb/spec/fast/PaFxFastRequest.java | 49 --
.../kerby/kerberos/kerb/spec/kdc/AsRep.java | 32 --
.../kerby/kerberos/kerb/spec/kdc/AsReq.java | 31 --
.../kerberos/kerb/spec/kdc/EncAsRepPart.java | 31 --
.../kerberos/kerb/spec/kdc/EncKdcRepPart.java | 178 -------
.../kerberos/kerb/spec/kdc/EncTgsRepPart.java | 31 --
.../kerby/kerberos/kerb/spec/kdc/KdcOption.java | 79 ---
.../kerberos/kerb/spec/kdc/KdcOptions.java | 33 --
.../kerby/kerberos/kerb/spec/kdc/KdcRep.java | 117 -----
.../kerby/kerberos/kerb/spec/kdc/KdcReq.java | 77 ---
.../kerberos/kerb/spec/kdc/KdcReqBody.java | 214 --------
.../kerby/kerberos/kerb/spec/kdc/TgsRep.java | 31 --
.../kerby/kerberos/kerb/spec/kdc/TgsReq.java | 32 --
.../kerb/spec/pa/PaAuthenticationSet.java | 29 --
.../kerb/spec/pa/PaAuthenticationSetElem.java | 75 ---
.../kerby/kerberos/kerb/spec/pa/PaData.java | 41 --
.../kerberos/kerb/spec/pa/PaDataEntry.java | 70 ---
.../kerby/kerberos/kerb/spec/pa/PaDataType.java | 92 ----
.../kerby/kerberos/kerb/spec/pa/PaEncTsEnc.java | 67 ---
.../kerberos/kerb/spec/pa/otp/OtpTokenInfo.java | 70 ---
.../kerb/spec/pa/otp/PaOtpChallenge.java | 56 ---
.../spec/pa/pkinit/AdInitialVerifiedCas.java | 28 --
.../spec/pa/pkinit/AlgorithmIdentifiers.java | 30 --
.../kerberos/kerb/spec/pa/pkinit/AuthPack.java | 83 ----
.../kerberos/kerb/spec/pa/pkinit/DHNonce.java | 28 --
.../kerb/spec/pa/pkinit/DHParameter.java | 51 --
.../kerberos/kerb/spec/pa/pkinit/DHRepInfo.java | 62 ---
.../pa/pkinit/ExternalPrincipalIdentifier.java | 72 ---
.../kerb/spec/pa/pkinit/KdcDHKeyInfo.java | 74 ---
.../kerb/spec/pa/pkinit/Krb5PrincipalName.java | 62 ---
.../kerberos/kerb/spec/pa/pkinit/PaPkAsRep.java | 62 ---
.../kerberos/kerb/spec/pa/pkinit/PaPkAsReq.java | 73 ---
.../kerb/spec/pa/pkinit/PkAuthenticator.java | 92 ----
.../kerb/spec/pa/pkinit/ReplyKeyPack.java | 62 ---
.../kerb/spec/pa/pkinit/TdDhParameters.java | 26 -
.../kerb/spec/pa/pkinit/TrustedCertifiers.java | 29 --
.../kerb/spec/pa/token/PaTokenChallenge.java | 41 --
.../kerb/spec/pa/token/PaTokenRequest.java | 62 ---
.../kerberos/kerb/spec/pa/token/TokenFlag.java | 51 --
.../kerberos/kerb/spec/pa/token/TokenFlags.java | 39 --
.../kerberos/kerb/spec/pa/token/TokenInfo.java | 63 ---
.../kerberos/kerb/spec/pa/token/TokenInfos.java | 29 --
.../kerb/spec/ticket/EncTicketPart.java | 169 -------
.../kerberos/kerb/spec/ticket/KrbTicket.java | 49 --
.../kerb/spec/ticket/ServiceTicket.java | 28 --
.../kerberos/kerb/spec/ticket/TgtTicket.java | 36 --
.../kerby/kerberos/kerb/spec/ticket/Ticket.java | 100 ----
.../kerberos/kerb/spec/ticket/TicketFlag.java | 62 ---
.../kerberos/kerb/spec/ticket/TicketFlags.java | 39 --
.../kerberos/kerb/spec/ticket/Tickets.java | 29 --
.../kerberos/kerb/type/KerberosString.java | 35 ++
.../kerberos/kerb/type/KerberosStrings.java | 43 ++
.../kerby/kerberos/kerb/type/KerberosTime.java | 160 ++++++
.../kerberos/kerb/type/KrbAppSequenceType.java | 57 +++
.../kerby/kerberos/kerb/type/KrbIntegers.java | 54 +++
.../kerberos/kerb/type/KrbSequenceOfType.java | 43 ++
.../kerberos/kerb/type/KrbSequenceType.java | 55 +++
.../kerby/kerberos/kerb/type/ad/AdToken.java | 51 ++
.../kerb/type/ad/AuthorizationData.java | 32 ++
.../kerb/type/ad/AuthorizationDataEntry.java | 63 +++
.../kerb/type/ad/AuthorizationType.java | 143 ++++++
.../kerby/kerberos/kerb/type/ap/ApOption.java | 58 +++
.../kerby/kerberos/kerb/type/ap/ApOptions.java | 33 ++
.../kerby/kerberos/kerb/type/ap/ApRep.java | 66 +++
.../kerby/kerberos/kerb/type/ap/ApReq.java | 90 ++++
.../kerberos/kerb/type/ap/Authenticator.java | 145 ++++++
.../kerberos/kerb/type/ap/EncAPRepPart.java | 86 ++++
.../kerberos/kerb/type/base/AuthToken.java | 144 ++++++
.../kerby/kerberos/kerb/type/base/CheckSum.java | 114 +++++
.../kerberos/kerb/type/base/CheckSumType.java | 123 +++++
.../kerberos/kerb/type/base/EncryptedData.java | 115 +++++
.../kerberos/kerb/type/base/EncryptionKey.java | 128 +++++
.../kerberos/kerb/type/base/EncryptionType.java | 140 ++++++
.../kerberos/kerb/type/base/EtypeInfo.java | 29 ++
.../kerberos/kerb/type/base/EtypeInfo2.java | 29 ++
.../kerb/type/base/EtypeInfo2Entry.java | 74 +++
.../kerberos/kerb/type/base/EtypeInfoEntry.java | 62 +++
.../kerberos/kerb/type/base/HostAddrType.java | 100 ++++
.../kerberos/kerb/type/base/HostAddress.java | 110 +++++
.../kerberos/kerb/type/base/HostAddresses.java | 43 ++
.../kerby/kerberos/kerb/type/base/KeyUsage.java | 129 +++++
.../kerby/kerberos/kerb/type/base/KrbError.java | 167 +++++++
.../kerberos/kerb/type/base/KrbMessage.java | 54 +++
.../kerberos/kerb/type/base/KrbMessageType.java | 59 +++
.../kerby/kerberos/kerb/type/base/KrbToken.java | 335 +++++++++++++
.../kerby/kerberos/kerb/type/base/LastReq.java | 32 ++
.../kerberos/kerb/type/base/LastReqEntry.java | 63 +++
.../kerberos/kerb/type/base/LastReqType.java | 62 +++
.../kerberos/kerb/type/base/MethodData.java | 30 ++
.../kerby/kerberos/kerb/type/base/NameType.java | 55 +++
.../kerberos/kerb/type/base/PrincipalName.java | 202 ++++++++
.../kerby/kerberos/kerb/type/base/Realm.java | 34 ++
.../kerby/kerberos/kerb/type/base/SamType.java | 65 +++
.../kerberos/kerb/type/base/TokenFormat.java | 50 ++
.../kerb/type/base/TransitedEncoding.java | 63 +++
.../kerb/type/base/TransitedEncodingType.java | 51 ++
.../kerberos/kerb/type/fast/ArmorType.java | 50 ++
.../kerberos/kerb/type/fast/FastOption.java | 51 ++
.../kerberos/kerb/type/fast/FastOptions.java | 33 ++
.../kerberos/kerb/type/fast/KrbFastArmor.java | 65 +++
.../kerb/type/fast/KrbFastArmoredRep.java | 53 ++
.../kerb/type/fast/KrbFastArmoredReq.java | 96 ++++
.../kerb/type/fast/KrbFastFinished.java | 83 ++++
.../kerberos/kerb/type/fast/KrbFastReq.java | 79 +++
.../kerb/type/fast/KrbFastResponse.java | 91 ++++
.../kerberos/kerb/type/fast/PaAuthnEntry.java | 81 ++++
.../kerberos/kerb/type/fast/PaAuthnSet.java | 29 ++
.../kerberos/kerb/type/fast/PaFxFastReply.java | 49 ++
.../kerb/type/fast/PaFxFastRequest.java | 49 ++
.../kerby/kerberos/kerb/type/kdc/AsRep.java | 32 ++
.../kerby/kerberos/kerb/type/kdc/AsReq.java | 31 ++
.../kerberos/kerb/type/kdc/EncAsRepPart.java | 31 ++
.../kerberos/kerb/type/kdc/EncKdcRepPart.java | 178 +++++++
.../kerberos/kerb/type/kdc/EncTgsRepPart.java | 31 ++
.../kerby/kerberos/kerb/type/kdc/KdcOption.java | 79 +++
.../kerberos/kerb/type/kdc/KdcOptions.java | 33 ++
.../kerby/kerberos/kerb/type/kdc/KdcRep.java | 117 +++++
.../kerby/kerberos/kerb/type/kdc/KdcReq.java | 77 +++
.../kerberos/kerb/type/kdc/KdcReqBody.java | 214 ++++++++
.../kerby/kerberos/kerb/type/kdc/TgsRep.java | 31 ++
.../kerby/kerberos/kerb/type/kdc/TgsReq.java | 32 ++
.../kerb/type/pa/PaAuthenticationSet.java | 29 ++
.../kerb/type/pa/PaAuthenticationSetElem.java | 75 +++
.../kerby/kerberos/kerb/type/pa/PaData.java | 41 ++
.../kerberos/kerb/type/pa/PaDataEntry.java | 70 +++
.../kerby/kerberos/kerb/type/pa/PaDataType.java | 92 ++++
.../kerby/kerberos/kerb/type/pa/PaEncTsEnc.java | 67 +++
.../kerberos/kerb/type/pa/otp/OtpTokenInfo.java | 70 +++
.../kerb/type/pa/otp/PaOtpChallenge.java | 56 +++
.../type/pa/pkinit/AdInitialVerifiedCas.java | 28 ++
.../type/pa/pkinit/AlgorithmIdentifiers.java | 30 ++
.../kerberos/kerb/type/pa/pkinit/AuthPack.java | 83 ++++
.../kerberos/kerb/type/pa/pkinit/DHNonce.java | 28 ++
.../kerb/type/pa/pkinit/DHParameter.java | 51 ++
.../kerberos/kerb/type/pa/pkinit/DHRepInfo.java | 62 +++
.../pa/pkinit/ExternalPrincipalIdentifier.java | 72 +++
.../kerb/type/pa/pkinit/KdcDHKeyInfo.java | 74 +++
.../kerb/type/pa/pkinit/Krb5PrincipalName.java | 62 +++
.../kerberos/kerb/type/pa/pkinit/PaPkAsRep.java | 62 +++
.../kerberos/kerb/type/pa/pkinit/PaPkAsReq.java | 73 +++
.../kerb/type/pa/pkinit/PkAuthenticator.java | 92 ++++
.../kerb/type/pa/pkinit/ReplyKeyPack.java | 62 +++
.../kerb/type/pa/pkinit/TdDhParameters.java | 26 +
.../kerb/type/pa/pkinit/TrustedCertifiers.java | 29 ++
.../kerb/type/pa/token/PaTokenChallenge.java | 41 ++
.../kerb/type/pa/token/PaTokenRequest.java | 62 +++
.../kerberos/kerb/type/pa/token/TokenFlag.java | 51 ++
.../kerberos/kerb/type/pa/token/TokenFlags.java | 39 ++
.../kerberos/kerb/type/pa/token/TokenInfo.java | 63 +++
.../kerberos/kerb/type/pa/token/TokenInfos.java | 29 ++
.../kerb/type/ticket/EncTicketPart.java | 169 +++++++
.../kerberos/kerb/type/ticket/KrbTicket.java | 49 ++
.../kerberos/kerb/type/ticket/SgtTicket.java | 31 ++
.../kerberos/kerb/type/ticket/TgtTicket.java | 39 ++
.../kerby/kerberos/kerb/type/ticket/Ticket.java | 100 ++++
.../kerberos/kerb/type/ticket/TicketFlag.java | 62 +++
.../kerberos/kerb/type/ticket/TicketFlags.java | 39 ++
.../kerberos/kerb/type/ticket/Tickets.java | 29 ++
.../kerberos/kerb/crypto/CheckSumHandler.java | 6 +-
.../kerb/crypto/CheckSumTypeHandler.java | 2 +-
.../kerberos/kerb/crypto/EncTypeHandler.java | 4 +-
.../kerberos/kerb/crypto/EncryptionHandler.java | 10 +-
.../crypto/cksum/CmacCamellia128CheckSum.java | 2 +-
.../crypto/cksum/CmacCamellia256CheckSum.java | 2 +-
.../kerb/crypto/cksum/Crc32CheckSum.java | 2 +-
.../kerb/crypto/cksum/DesCbcCheckSum.java | 2 +-
.../kerb/crypto/cksum/HmacMd5Rc4CheckSum.java | 2 +-
.../crypto/cksum/HmacSha1Aes128CheckSum.java | 2 +-
.../crypto/cksum/HmacSha1Aes256CheckSum.java | 2 +-
.../kerb/crypto/cksum/HmacSha1Des3CheckSum.java | 2 +-
.../kerb/crypto/cksum/Md5HmacRc4CheckSum.java | 2 +-
.../kerb/crypto/cksum/RsaMd4CheckSum.java | 2 +-
.../kerb/crypto/cksum/RsaMd4DesCheckSum.java | 2 +-
.../kerb/crypto/cksum/RsaMd5CheckSum.java | 2 +-
.../kerb/crypto/cksum/RsaMd5DesCheckSum.java | 2 +-
.../kerb/crypto/cksum/Sha1CheckSum.java | 2 +-
.../kerby/kerberos/kerb/crypto/dh/DhClient.java | 8 +-
.../kerby/kerberos/kerb/crypto/dh/DhServer.java | 8 +-
.../kerb/crypto/enc/Aes128CtsHmacSha1Enc.java | 4 +-
.../kerb/crypto/enc/Aes256CtsHmacSha1Enc.java | 4 +-
.../kerb/crypto/enc/Camellia128CtsCmacEnc.java | 4 +-
.../kerb/crypto/enc/Camellia256CtsCmacEnc.java | 4 +-
.../kerb/crypto/enc/Des3CbcSha1Enc.java | 4 +-
.../kerberos/kerb/crypto/enc/DesCbcCrcEnc.java | 4 +-
.../kerberos/kerb/crypto/enc/DesCbcMd4Enc.java | 4 +-
.../kerberos/kerb/crypto/enc/DesCbcMd5Enc.java | 4 +-
.../kerberos/kerb/crypto/enc/KeKiCmacEnc.java | 2 +-
.../kerberos/kerb/crypto/enc/Rc4HmacEnc.java | 4 +-
.../kerberos/kerb/crypto/enc/Rc4HmacExpEnc.java | 2 +-
.../kerberos/kerb/crypto/fast/FastUtil.java | 2 +-
.../kerberos/kerb/crypto/CheckSumTest.java | 10 +-
.../kerberos/kerb/crypto/CheckSumsTest.java | 8 +-
.../kerberos/kerb/crypto/DecryptionTest.java | 6 +-
.../kerberos/kerb/crypto/FastUtilTest.java | 4 +-
.../kerberos/kerb/crypto/KeyDeriveTest.java | 2 +-
.../kerby/kerberos/kerb/crypto/PrfTest.java | 2 +-
.../kerberos/kerb/crypto/String2keyTest.java | 4 +-
.../kerberos/kerb/crypto/dh/DhGroupTest.java | 1 -
.../kerb/crypto/dh/DhKeyAgreementTest.java | 7 +-
.../kerb/identity/backend/BackendTest.java | 4 +-
.../kerb/identity/backend/BackendTestUtil.java | 6 +-
.../kerberos/kerb/identity/KrbIdentity.java | 8 +-
.../kerby/kerberos/kerb/server/KdcTest.java | 12 +-
.../kerberos/kerb/server/LoginTestBase.java | 4 +-
.../kerb/server/MultiRequestsKdcTest.java | 16 +-
.../kerby/kerberos/kerb/server/KdcConfig.java | 2 +-
.../kerby/kerberos/kerb/server/KdcHandler.java | 16 +-
.../kerb/server/KdcRecoverableException.java | 2 +-
.../server/preauth/AbstractPreauthPlugin.java | 6 +-
.../kerb/server/preauth/KdcFastContext.java | 6 +-
.../kerb/server/preauth/KdcPreauth.java | 6 +-
.../kerb/server/preauth/PreauthContext.java | 2 +-
.../kerb/server/preauth/PreauthHandle.java | 4 +-
.../kerb/server/preauth/PreauthHandler.java | 6 +-
.../server/preauth/builtin/EncTsPreauth.java | 10 +-
.../kerb/server/preauth/builtin/TgtPreauth.java | 2 +-
.../server/preauth/pkinit/PkinitPreauth.java | 36 +-
.../preauth/pkinit/PkinitRequestContext.java | 4 +-
.../kerb/server/preauth/token/TokenPreauth.java | 20 +-
.../preauth/token/TokenRequestContext.java | 2 +-
.../kerberos/kerb/server/request/AsRequest.java | 34 +-
.../kerb/server/request/KdcRequest.java | 58 +--
.../server/request/ServiceTicketIssuer.java | 8 +-
.../kerb/server/request/TgsRequest.java | 46 +-
.../kerb/server/request/TgtTicketIssuer.java | 4 +-
.../kerb/server/request/TicketIssuer.java | 34 +-
.../kerby/kerberos/kerb/KrbInputStream.java | 8 +-
.../kerby/kerberos/kerb/KrbOutputStream.java | 6 +-
.../kerb/ccache/CredCacheInputStream.java | 24 +-
.../kerb/ccache/CredCacheOutputStream.java | 18 +-
.../kerby/kerberos/kerb/ccache/Credential.java | 20 +-
.../kerberos/kerb/ccache/CredentialCache.java | 6 +-
.../kerb/ccache/KrbCredentialCache.java | 2 +-
.../kerby/kerberos/kerb/keytab/Keytab.java | 6 +-
.../kerby/kerberos/kerb/keytab/KeytabEntry.java | 6 +-
.../kerberos/kerb/keytab/KeytabInputStream.java | 10 +-
.../kerb/keytab/KeytabOutputStream.java | 4 +-
.../kerby/kerberos/kerb/keytab/KrbKeytab.java | 6 +-
.../kerby/kerberos/kerb/util/CcacheTest.java | 2 +-
.../kerberos/kerb/util/EncryptionTest.java | 14 +-
.../kerby/kerberos/kerb/util/KeysTest.java | 6 +-
.../kerby/kerberos/kerb/util/KeytabTest.java | 2 +-
.../kerberos/kerb/util/NewEncryptionTest.java | 8 +-
.../org/apache/kerby/cms/type/Attribute.java | 2 +-
.../cms/type/AttributeCertificateInfoV1.java | 2 +-
.../kerby/cms/type/AttributeCertificateV1.java | 2 +-
.../org/apache/kerby/cms/type/Certificate.java | 2 +-
.../kerby/cms/type/CertificateChoices.java | 4 +-
.../apache/kerby/cms/type/CertificateList.java | 2 +-
.../apache/kerby/cms/type/CompressedData.java | 2 +-
.../org/apache/kerby/cms/type/ContentInfo.java | 4 +-
.../kerby/cms/type/EncapsulatedContentInfo.java | 4 +-
.../kerby/cms/type/ExtendedCertificate.java | 2 +-
.../kerby/cms/type/ExtendedCertificateInfo.java | 2 +-
.../kerby/cms/type/IssuerAndSerialNumber.java | 2 +-
.../kerby/cms/type/OtherCertificateFormat.java | 2 +-
.../cms/type/OtherRevocationInfoFormat.java | 2 +-
.../kerby/cms/type/RevocationInfoChoice.java | 4 +-
.../org/apache/kerby/cms/type/SignedData.java | 4 +-
.../apache/kerby/cms/type/SignerIdentifier.java | 4 +-
.../org/apache/kerby/cms/type/SignerInfo.java | 4 +-
.../java/org/apache/kerby/cms/type/Subject.java | 4 +-
.../kerby/x500/type/AttributeTypeAndValue.java | 2 +-
.../java/org/apache/kerby/x500/type/Name.java | 2 +-
.../kerby/x509/type/AccessDescription.java | 2 +-
.../kerby/x509/type/AlgorithmIdentifier.java | 2 +-
.../apache/kerby/x509/type/AttCertIssuer.java | 4 +-
.../kerby/x509/type/AttCertValidityPeriod.java | 2 +-
.../org/apache/kerby/x509/type/Attribute.java | 2 +-
.../kerby/x509/type/AttributeCertificate.java | 2 +-
.../x509/type/AttributeCertificateInfo.java | 2 +-
.../kerby/x509/type/AuthorityKeyIdentifier.java | 4 +-
.../kerby/x509/type/BasicConstraints.java | 2 +-
.../org/apache/kerby/x509/type/Certificate.java | 2 +-
.../apache/kerby/x509/type/CertificateList.java | 2 +-
.../apache/kerby/x509/type/CertificatePair.java | 4 +-
.../apache/kerby/x509/type/DSAParameter.java | 2 +-
.../org/apache/kerby/x509/type/DigestInfo.java | 2 +-
.../apache/kerby/x509/type/DirectoryString.java | 2 +-
.../org/apache/kerby/x509/type/DisplayText.java | 2 +-
.../kerby/x509/type/DistributionPoint.java | 4 +-
.../kerby/x509/type/DistributionPointName.java | 4 +-
.../apache/kerby/x509/type/EDIPartyName.java | 4 +-
.../org/apache/kerby/x509/type/Extension.java | 2 +-
.../org/apache/kerby/x509/type/GeneralName.java | 4 +-
.../apache/kerby/x509/type/GeneralSubtree.java | 4 +-
.../java/org/apache/kerby/x509/type/Holder.java | 4 +-
.../apache/kerby/x509/type/IetfAttrSyntax.java | 4 +-
.../kerby/x509/type/IetfAttrSyntaxChoice.java | 2 +-
.../apache/kerby/x509/type/IssuerSerial.java | 2 +-
.../x509/type/IssuingDistributionPoint.java | 4 +-
.../apache/kerby/x509/type/NameConstraints.java | 4 +-
.../apache/kerby/x509/type/NoticeReference.java | 2 +-
.../kerby/x509/type/ObjectDigestInfo.java | 2 +-
.../org/apache/kerby/x509/type/OtherName.java | 4 +-
.../kerby/x509/type/PolicyConstraints.java | 4 +-
.../kerby/x509/type/PolicyInformation.java | 2 +-
.../apache/kerby/x509/type/PolicyMapping.java | 2 +-
.../kerby/x509/type/PolicyQualifierInfo.java | 2 +-
.../kerby/x509/type/PrivateKeyUsagePeriod.java | 4 +-
.../kerby/x509/type/RevokedCertificate.java | 2 +-
.../org/apache/kerby/x509/type/RoleSyntax.java | 4 +-
.../kerby/x509/type/SubjectPublicKeyInfo.java | 2 +-
.../org/apache/kerby/x509/type/TBSCertList.java | 4 +-
.../apache/kerby/x509/type/TBSCertificate.java | 6 +-
.../java/org/apache/kerby/x509/type/Target.java | 4 +-
.../org/apache/kerby/x509/type/TargetCert.java | 2 +-
.../java/org/apache/kerby/x509/type/Time.java | 2 +-
.../org/apache/kerby/x509/type/UserNotice.java | 2 +-
.../java/org/apache/kerby/x509/type/V2Form.java | 4 +-
.../kerberos/provider/token/JwtAuthToken.java | 2 +-
.../provider/token/JwtTokenDecoder.java | 2 +-
.../provider/token/JwtTokenEncoder.java | 2 +-
.../provider/token/JwtTokenProvider.java | 2 +-
.../kerberos/provider/token/TokenTest.java | 2 +-
.../kerby/kerberos/tool/kinit/KinitTool.java | 14 +-
.../kerby/kerberos/tool/klist/KlistTool.java | 2 +-
.../kerby/kerberos/tool/token/TokenInit.java | 2 +-
.../kadmin/command/GetPrincipalCommand.java | 4 +-
474 files changed, 9382 insertions(+), 9219 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/800e02fd/benchmark/src/main/java/org/apache/kerby/benchmark/KrbCodecBenchmark.java
----------------------------------------------------------------------
diff --git a/benchmark/src/main/java/org/apache/kerby/benchmark/KrbCodecBenchmark.java b/benchmark/src/main/java/org/apache/kerby/benchmark/KrbCodecBenchmark.java
index 48c2703..1be8bbf 100644
--- a/benchmark/src/main/java/org/apache/kerby/benchmark/KrbCodecBenchmark.java
+++ b/benchmark/src/main/java/org/apache/kerby/benchmark/KrbCodecBenchmark.java
@@ -21,7 +21,7 @@ package org.apache.kerby.benchmark;
import org.apache.directory.api.asn1.ber.Asn1Decoder;
import org.apache.directory.shared.kerberos.codec.apReq.ApReqContainer;
-import org.apache.kerby.kerberos.kerb.spec.ap.ApReq;
+import org.apache.kerby.kerberos.kerb.type.ap.ApReq;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.BenchmarkMode;
import org.openjdk.jmh.annotations.Fork;
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/800e02fd/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1FieldInfo.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1FieldInfo.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1FieldInfo.java
new file mode 100644
index 0000000..9efa6a5
--- /dev/null
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1FieldInfo.java
@@ -0,0 +1,97 @@
+/**
+ * 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.asn1;
+
+import org.apache.kerby.asn1.type.Asn1Type;
+
+/**
+ * Representing a field in a ASN1 collection or choice.
+ */
+public class Asn1FieldInfo {
+ private int index;
+ private int tagNo = -1; // Indicate a non-tagged field
+ private boolean isImplicit;
+ private Class<? extends Asn1Type> type;
+
+ /**
+ * Constructor for a tagged field, the tagNo being the same of index.
+ * @param index
+ * @param type
+ * @param isImplicit
+ */
+ public Asn1FieldInfo(int index, Class<? extends Asn1Type> type,
+ boolean isImplicit) {
+ this(index, index, type, isImplicit);
+ }
+
+ /**
+ * Constructor for a tagged field.
+ * @param index
+ * @param tagNo
+ * @param type
+ * @param isImplicit
+ */
+ public Asn1FieldInfo(int index, int tagNo, Class<? extends Asn1Type> type,
+ boolean isImplicit) {
+ this.index = index;
+ this.tagNo = tagNo;
+ this.type = type;
+ this.isImplicit = isImplicit;
+ }
+
+ /**
+ * Constructor for a non-tagged field.
+ * @param index
+ * @param type
+ */
+ public Asn1FieldInfo(int index, Class<? extends Asn1Type> type) {
+ this.index = index;
+ this.type = type;
+ this.tagNo = -1; // Indicate a non-tagged field
+ }
+
+ public boolean isTagged() {
+ return tagNo != -1;
+ }
+
+ public TaggingOption getTaggingOption() {
+ if (isImplicit) {
+ return TaggingOption.newImplicitContextSpecific(tagNo);
+ } else {
+ return TaggingOption.newExplicitContextSpecific(tagNo);
+ }
+ }
+
+ public int getTagNo() {
+ return tagNo;
+ }
+
+ public int getIndex() {
+ return index;
+ }
+
+ public boolean isImplicit() {
+ return isImplicit;
+ }
+
+ public Class<? extends Asn1Type> getType() {
+ return type;
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/800e02fd/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1InputBuffer.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1InputBuffer.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1InputBuffer.java
index aeb5864..9d90319 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1InputBuffer.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1InputBuffer.java
@@ -19,8 +19,8 @@
*/
package org.apache.kerby.asn1;
-import org.apache.kerby.asn1.type.AbstractAsn1Type;
import org.apache.kerby.asn1.type.Asn1Item;
+import org.apache.kerby.asn1.type.Asn1Object;
import org.apache.kerby.asn1.type.Asn1Type;
import java.io.IOException;
@@ -68,7 +68,7 @@ public class Asn1InputBuffer {
if (!limitedBuffer.available()) {
return null;
}
- Asn1Item one = AbstractAsn1Type.decodeOne(limitedBuffer);
+ Asn1Item one = Asn1Object.decodeOne(limitedBuffer);
if (one.isSimple()) {
one.decodeValueAsSimple();
} else if (one.isCollection()) {
@@ -96,7 +96,7 @@ public class Asn1InputBuffer {
public void skipNext() throws IOException {
if (limitedBuffer.available()) {
- AbstractAsn1Type.skipOne(limitedBuffer);
+ Asn1Object.skipOne(limitedBuffer);
}
}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/800e02fd/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1OutputBuffer.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1OutputBuffer.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1OutputBuffer.java
index f50d092..729e042 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1OutputBuffer.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1OutputBuffer.java
@@ -19,7 +19,7 @@
*/
package org.apache.kerby.asn1;
-import org.apache.kerby.asn1.type.AbstractAsn1Type;
+import org.apache.kerby.asn1.type.Asn1Object;
import org.apache.kerby.asn1.type.Asn1Type;
import java.nio.ByteBuffer;
@@ -51,7 +51,7 @@ public class Asn1OutputBuffer {
int allLen = 0;
for (Asn1Type item : objects) {
if (item != null) {
- allLen += ((AbstractAsn1Type<?>) item).encodingLength();
+ allLen += ((Asn1Object) item).encodingLength();
}
}
return allLen;
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/800e02fd/kerby-asn1/src/main/java/org/apache/kerby/asn1/ExplicitField.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/ExplicitField.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/ExplicitField.java
new file mode 100644
index 0000000..85fded1
--- /dev/null
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/ExplicitField.java
@@ -0,0 +1,46 @@
+/**
+ * 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.asn1;
+
+import org.apache.kerby.asn1.type.Asn1Type;
+
+/**
+ * Representing an explicitly tagged field in a ASN1 collection or choice.
+ */
+public class ExplicitField extends Asn1FieldInfo {
+
+ /**
+ * Constructor for an explicitly tagged field.
+ * @param index
+ * @param type
+ */
+ public ExplicitField(int index, int tagNo, Class<? extends Asn1Type> type) {
+ super(index, tagNo, type, false);
+ }
+
+ /**
+ * Constructor for an explicitly tagged field, the tagNo being the same of index.
+ * @param index
+ * @param type
+ */
+ public ExplicitField(int index, Class<? extends Asn1Type> type) {
+ super(index, index, type, false);
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/800e02fd/kerby-asn1/src/main/java/org/apache/kerby/asn1/ImplicitField.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/ImplicitField.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/ImplicitField.java
new file mode 100644
index 0000000..a0e7acb
--- /dev/null
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/ImplicitField.java
@@ -0,0 +1,46 @@
+/**
+ * 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.asn1;
+
+import org.apache.kerby.asn1.type.Asn1Type;
+
+/**
+ * Representing an implicitly tagged field in a ASN1 collection or choice.
+ */
+public class ImplicitField extends Asn1FieldInfo {
+
+ /**
+ * Constructor for an implicitly tagged field.
+ * @param index
+ * @param type
+ */
+ public ImplicitField(int index, int tagNo, Class<? extends Asn1Type> type) {
+ super(index, tagNo, type, true);
+ }
+
+ /**
+ * Constructor for an implicitly tagged field, the tagNo being the same of index.
+ * @param index
+ * @param type
+ */
+ public ImplicitField(int index, Class<? extends Asn1Type> type) {
+ super(index, index, type, true);
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/800e02fd/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/AbstractAsn1Type.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/AbstractAsn1Type.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/AbstractAsn1Type.java
index 7446c7c..4dc2c28 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/AbstractAsn1Type.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/AbstractAsn1Type.java
@@ -19,12 +19,7 @@
*/
package org.apache.kerby.asn1.type;
-import org.apache.kerby.asn1.LimitedByteBuffer;
import org.apache.kerby.asn1.TagClass;
-import org.apache.kerby.asn1.TaggingOption;
-
-import java.io.IOException;
-import java.nio.ByteBuffer;
/**
* The abstract ASN1 type for all the ASN1 types. It provides basic
@@ -32,20 +27,10 @@ import java.nio.ByteBuffer;
*
* @param <T> the type of the value encoded/decoded or wrapped by this
*/
-public abstract class AbstractAsn1Type<T> implements Asn1Type {
-
- private TagClass tagClass = TagClass.UNKNOWN;
- private int tagNo = -1;
- private int tagFlags = 0;
- private int encodingLen = -1;
+public abstract class AbstractAsn1Type<T> extends Asn1Object {
// The wrapped real value.
private T value;
- // encoding options
- private EncodingType encodingType = EncodingType.BER;
- private boolean isImplicit = true;
- private boolean isDefinitiveLength = false;
-
/**
* Default constructor, generally for decoding as a value container
* @param tagClass The tag class
@@ -82,11 +67,8 @@ public abstract class AbstractAsn1Type<T> implements Asn1Type {
* @param value The value
*/
public AbstractAsn1Type(TagClass tagClass, int tagNo, T value) {
- this.tagClass = tagClass;
- this.tagNo = tagNo;
+ super(tagClass, tagNo);
this.value = value;
-
- this.tagFlags |= tagClass.getValue();
}
public T getValue() {
@@ -96,422 +78,4 @@ public abstract class AbstractAsn1Type<T> implements Asn1Type {
public void setValue(T value) {
this.value = value;
}
-
- @Override
- public TagClass tagClass() {
- return tagClass;
- }
-
- protected void setTagClass(TagClass tagClass) {
- this.tagClass = tagClass;
- }
-
- @Override
- public int tagFlags() {
- return tagFlags;
- }
-
- @Override
- public int tagNo() {
- return tagNo;
- }
-
- protected void setTagFlags(int tagFlags) {
- this.tagFlags = tagFlags & 0xe0;
- }
-
- protected void setTagNo(int tagNo) {
- this.tagNo = tagNo;
- }
-
- @Override
- public void usePrimitive(boolean isPrimitive) {
- if (isPrimitive) {
- tagFlags &= ~CONSTRUCTED_FLAG;
- } else {
- tagFlags |= CONSTRUCTED_FLAG;
- }
- }
-
- @Override
- public boolean isPrimitive() {
- return (tagFlags & CONSTRUCTED_FLAG) == 0;
- }
-
- @Override
- public void useDefinitiveLength(boolean isDefinitiveLength) {
- this.isDefinitiveLength = isDefinitiveLength;
- }
-
- @Override
- public boolean isDefinitiveLength() {
- return isDefinitiveLength;
- }
-
- @Override
- public void useImplicit(boolean isImplicit) {
- this.isImplicit = isImplicit;
- }
-
- @Override
- public boolean isImplicit() {
- return isImplicit;
- }
-
- @Override
- public void useDER() {
- this.encodingType = EncodingType.DER;
- }
-
- @Override
- public boolean isDER() {
- return encodingType == EncodingType.DER;
- }
-
- @Override
- public void useBER() {
- this.encodingType = EncodingType.BER;
- }
-
- @Override
- public boolean isBER() {
- return encodingType == EncodingType.BER;
- }
-
- @Override
- public void useCER() {
- this.encodingType = EncodingType.CER;
- }
-
- @Override
- public boolean isCER() {
- return encodingType == EncodingType.CER;
- }
-
- @Override
- public byte[] encode() {
- ByteBuffer byteBuffer = ByteBuffer.allocate(encodingLength());
- encode(byteBuffer);
- byteBuffer.flip();
- return byteBuffer.array();
- }
-
- @Override
- public void encode(ByteBuffer buffer) {
- encodeTag(buffer, tagFlags(), tagNo());
- encodeLength(buffer, encodingBodyLength());
- encodeBody(buffer);
- }
-
- protected void encodeBody(ByteBuffer buffer) { }
-
- @Override
- public void decode(byte[] content) throws IOException {
- decode(new LimitedByteBuffer(content));
- }
-
- @Override
- public void decode(ByteBuffer content) throws IOException {
- decode(new LimitedByteBuffer(content));
- }
-
- @Override
- public int encodingLength() {
- if (encodingLen == -1) {
- int bodyLen = encodingBodyLength();
- encodingLen = lengthOfTagLength(tagNo()) + lengthOfBodyLength(bodyLen) + bodyLen;
- }
- return encodingLen;
- }
-
- public boolean isUniversal() {
- return tagClass.isUniversal();
- }
-
- public boolean isAppSpecific() {
- return tagClass.isAppSpecific();
- }
-
- public boolean isContextSpecific() {
- return tagClass.isContextSpecific();
- }
-
- public boolean isTagged() {
- return tagClass.isTagged();
- }
-
- public boolean isSimple() {
- return isUniversal() && Asn1Simple.isSimple(tagNo);
- }
-
- public boolean isCollection() {
- return isUniversal() && Asn1Collection.isCollection(tagNo);
- }
-
- protected abstract int encodingBodyLength();
-
- protected void decode(LimitedByteBuffer content) throws IOException {
- int tag = readTag(content);
- int tagNo = readTagNo(content, tag);
- int tmpTagFlags = tag & 0xe0;
- int length = readLength(content);
-
- decode(tmpTagFlags, tagNo, new LimitedByteBuffer(content, length));
- }
-
- public void decode(int tagFlags, int tagNo,
- LimitedByteBuffer content) throws IOException {
- if (tagClass() != TagClass.UNKNOWN && tagClass()
- != TagClass.fromTagFlags(tagFlags)) {
- throw new IOException("Unexpected tagFlags " + tagFlags
- + ", expecting " + tagClass());
- }
- if (tagNo() != -1 && tagNo() != tagNo) {
- throw new IOException("Unexpected tagNo " + tagNo + ", "
- + "expecting " + tagNo());
- }
-
- setTagClass(TagClass.fromTagFlags(tagFlags));
- setTagFlags(tagFlags);
- setTagNo(tagNo);
-
- decodeBody(content);
- }
-
- protected abstract void decodeBody(LimitedByteBuffer content) throws IOException;
-
- protected int taggedEncodingLength(TaggingOption taggingOption) {
- int taggingTagNo = taggingOption.getTagNo();
- int taggingBodyLen = taggingOption.isImplicit() ? encodingBodyLength()
- : encodingLength();
- int taggingEncodingLen = lengthOfTagLength(taggingTagNo)
- + lengthOfBodyLength(taggingBodyLen) + taggingBodyLen;
- return taggingEncodingLen;
- }
-
- public byte[] taggedEncode(TaggingOption taggingOption) {
- ByteBuffer byteBuffer = ByteBuffer.allocate(taggedEncodingLength(taggingOption));
- taggedEncode(byteBuffer, taggingOption);
- byteBuffer.flip();
- return byteBuffer.array();
- }
-
- @Override
- public void taggedEncode(ByteBuffer buffer, TaggingOption taggingOption) {
- int taggingTagFlags = taggingOption.tagFlags(!isPrimitive());
- encodeTag(buffer, taggingTagFlags, taggingOption.getTagNo());
- int taggingBodyLen = taggingOption.isImplicit() ? encodingBodyLength()
- : encodingLength();
- encodeLength(buffer, taggingBodyLen);
- if (taggingOption.isImplicit()) {
- encodeBody(buffer);
- } else {
- encode(buffer);
- }
- }
-
- public void taggedDecode(byte[] content,
- TaggingOption taggingOption) throws IOException {
- taggedDecode(ByteBuffer.wrap(content), taggingOption);
- }
-
- @Override
- public void taggedDecode(ByteBuffer content,
- TaggingOption taggingOption) throws IOException {
- LimitedByteBuffer limitedBuffer = new LimitedByteBuffer(content);
- taggedDecode(limitedBuffer, taggingOption);
- }
-
- protected void taggedDecode(LimitedByteBuffer content,
- TaggingOption taggingOption) throws IOException {
- int taggingTag = readTag(content);
- int taggingTagNo = readTagNo(content, taggingTag);
- int taggingLength = readLength(content);
- LimitedByteBuffer newContent = new LimitedByteBuffer(content, taggingLength);
-
- int tmpTagFlags = taggingTag & 0xe0;
- taggedDecode(tmpTagFlags, taggingTagNo, newContent, taggingOption);
- }
-
- protected void taggedDecode(int taggingTagFlags, int taggingTagNo,
- LimitedByteBuffer content,
- TaggingOption taggingOption) throws IOException {
- int expectedTaggingTagFlags = taggingOption.tagFlags(!isPrimitive());
- if (expectedTaggingTagFlags != taggingTagFlags) {
- throw new IOException("Unexpected tag flags " + taggingTagFlags
- + ", expecting " + expectedTaggingTagFlags);
- }
- if (taggingOption.getTagNo() != taggingTagNo) {
- throw new IOException("Unexpected tagNo " + taggingTagNo + ", "
- + "expecting " + taggingOption.getTagNo());
- }
-
- if (taggingOption.isImplicit()) {
- decodeBody(content);
- } else {
- decode(content);
- }
- }
-
- public static Asn1Item decodeOne(LimitedByteBuffer content) throws IOException {
- int tag = readTag(content);
- int tagNo = readTagNo(content, tag);
- int length = readLength(content);
- if (length < 0) {
- throw new IOException("Unexpected length");
- }
- LimitedByteBuffer valueContent = new LimitedByteBuffer(content, length);
- content.skip(length);
-
- Asn1Item result = new Asn1Item(tag, tagNo, valueContent);
- if (result.isSimple()) {
- result.decodeValueAsSimple();
- }
- return result;
- }
-
- public static void skipOne(LimitedByteBuffer content) throws IOException {
- int tag = readTag(content);
- readTagNo(content, tag);
- int length = readLength(content);
- if (length < 0) {
- throw new IOException("Unexpected length");
- }
- content.skip(length);
- }
-
- public static int lengthOfBodyLength(int bodyLength) {
- int length = 1;
-
- if (bodyLength > 127) {
- int payload = bodyLength;
- while (payload != 0) {
- payload >>= 8;
- length++;
- }
- }
-
- return length;
- }
-
- public static int lengthOfTagLength(int tagNo) {
- int length = 1;
-
- if (tagNo >= 31) {
- if (tagNo < 128) {
- length++;
- } else {
- length++;
-
- do {
- tagNo >>= 7;
- length++;
- } while (tagNo > 127);
- }
- }
-
- return length;
- }
-
- public static void encodeTag(ByteBuffer buffer, int flags, int tagNo) {
- if (tagNo < 31) {
- buffer.put((byte) (flags | tagNo));
- } else {
- buffer.put((byte) (flags | 0x1f));
- if (tagNo < 128) {
- buffer.put((byte) tagNo);
- } else {
- byte[] tmpBytes = new byte[5]; // 5 * 7 > 32
- int iPut = tmpBytes.length;
-
- tmpBytes[--iPut] = (byte) (tagNo & 0x7f);
- do {
- tagNo >>= 7;
- tmpBytes[--iPut] = (byte) (tagNo & 0x7f | 0x80);
- } while (tagNo > 127);
-
- buffer.put(tmpBytes, iPut, tmpBytes.length - iPut);
- }
- }
- }
-
- public static void encodeLength(ByteBuffer buffer, int bodyLength) {
- if (bodyLength < 128) {
- buffer.put((byte) bodyLength);
- } else {
- int length = 0;
- int payload = bodyLength;
-
- while (payload != 0) {
- payload >>= 8;
- length++;
- }
-
- buffer.put((byte) (length | 0x80));
-
- payload = bodyLength;
- for (int i = length - 1; i >= 0; i--) {
- buffer.put((byte) (payload >> (i * 8)));
- }
- }
- }
-
- public static int readTag(LimitedByteBuffer buffer) throws IOException {
- int tag = buffer.readByte() & 0xff;
- if (tag == 0) {
- throw new IOException("Bad tag 0 found");
- }
- return tag;
- }
-
- public static int readTagNo(LimitedByteBuffer buffer, int tag) throws IOException {
- int tagNo = tag & 0x1f;
-
- if (tagNo == 0x1f) {
- tagNo = 0;
-
- int b = buffer.readByte() & 0xff;
- if ((b & 0x7f) == 0) {
- throw new IOException("Invalid high tag number found");
- }
-
- while (b >= 0 && (b & 0x80) != 0) {
- tagNo |= b & 0x7f;
- tagNo <<= 7;
- b = buffer.readByte();
- }
-
- tagNo |= b & 0x7f;
- }
-
- return tagNo;
- }
-
- public static int readLength(LimitedByteBuffer buffer) throws IOException {
- int bodyLength = buffer.readByte() & 0xff;
-
- if (bodyLength > 127) {
- int length = bodyLength & 0x7f;
- if (length > 4) {
- throw new IOException("Bad bodyLength of more than 4 bytes: " + length);
- }
-
- bodyLength = 0;
- int tmp;
- for (int i = 0; i < length; i++) {
- tmp = buffer.readByte() & 0xff;
- bodyLength = (bodyLength << 8) + tmp;
- }
-
- if (bodyLength < 0) {
- throw new IOException("Invalid bodyLength " + bodyLength);
- }
- if (bodyLength > buffer.hasLeft()) {
- throw new IOException("Corrupt stream - less data "
- + buffer.hasLeft() + " than expected " + bodyLength);
- }
- }
-
- return bodyLength;
- }
}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/800e02fd/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Choice.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Choice.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Choice.java
index e251e11..3641070 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Choice.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Choice.java
@@ -19,6 +19,7 @@
*/
package org.apache.kerby.asn1.type;
+import org.apache.kerby.asn1.Asn1FieldInfo;
import org.apache.kerby.asn1.LimitedByteBuffer;
import org.apache.kerby.asn1.TagClass;
import org.apache.kerby.asn1.TaggingOption;
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/800e02fd/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1CollectionType.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1CollectionType.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1CollectionType.java
index 395e838..bb4f622 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1CollectionType.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1CollectionType.java
@@ -19,6 +19,7 @@
*/
package org.apache.kerby.asn1.type;
+import org.apache.kerby.asn1.Asn1FieldInfo;
import org.apache.kerby.asn1.LimitedByteBuffer;
import org.apache.kerby.asn1.TagClass;
import org.apache.kerby.asn1.TaggingOption;
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/800e02fd/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1FieldInfo.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1FieldInfo.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1FieldInfo.java
deleted file mode 100644
index fb3c885..0000000
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1FieldInfo.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/**
- * 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.asn1.type;
-
-import org.apache.kerby.asn1.TaggingOption;
-
-/**
- * Representing a field in a ASN1 collection or choice.
- */
-public class Asn1FieldInfo {
- private int index;
- private int tagNo = -1; // Indicate a non-tagged field
- private boolean isImplicit;
- private Class<? extends Asn1Type> type;
-
- /**
- * Constructor for a tagged field, the tagNo being the same of index.
- * @param index
- * @param type
- * @param isImplicit
- */
- public Asn1FieldInfo(int index, Class<? extends Asn1Type> type,
- boolean isImplicit) {
- this(index, index, type, isImplicit);
- }
-
- /**
- * Constructor for a tagged field.
- * @param index
- * @param tagNo
- * @param type
- * @param isImplicit
- */
- public Asn1FieldInfo(int index, int tagNo, Class<? extends Asn1Type> type,
- boolean isImplicit) {
- this.index = index;
- this.tagNo = tagNo;
- this.type = type;
- this.isImplicit = isImplicit;
- }
-
- /**
- * Constructor for a non-tagged field.
- * @param index
- * @param type
- */
- public Asn1FieldInfo(int index, Class<? extends Asn1Type> type) {
- this.index = index;
- this.type = type;
- this.tagNo = -1; // Indicate a non-tagged field
- }
-
- public boolean isTagged() {
- return tagNo != -1;
- }
-
- public TaggingOption getTaggingOption() {
- if (isImplicit) {
- return TaggingOption.newImplicitContextSpecific(tagNo);
- } else {
- return TaggingOption.newExplicitContextSpecific(tagNo);
- }
- }
-
- public int getTagNo() {
- return tagNo;
- }
-
- public int getIndex() {
- return index;
- }
-
- public boolean isImplicit() {
- return isImplicit;
- }
-
- public Class<? extends Asn1Type> getType() {
- return type;
- }
-}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/800e02fd/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Object.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Object.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Object.java
new file mode 100644
index 0000000..95da847
--- /dev/null
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Object.java
@@ -0,0 +1,484 @@
+/**
+ * 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.asn1.type;
+
+import org.apache.kerby.asn1.LimitedByteBuffer;
+import org.apache.kerby.asn1.TagClass;
+import org.apache.kerby.asn1.TaggingOption;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+
+/**
+ * The abstract ASN1 object for all the ASN1 types. It provides basic
+ * encoding and decoding utilities.
+ */
+public abstract class Asn1Object implements Asn1Type {
+
+ private TagClass tagClass = TagClass.UNKNOWN;
+ private int tagNo = -1;
+ private int tagFlags = 0;
+ private int encodingLen = -1;
+
+ // encoding options
+ private EncodingType encodingType = EncodingType.BER;
+ private boolean isImplicit = true;
+ private boolean isDefinitiveLength = false;
+
+ /**
+ * Constructor with a value, generally for encoding of the value
+ * @param tagFlags The tag flags
+ * @param tagNo The tag number
+ */
+ public Asn1Object(int tagFlags, int tagNo) {
+ this(TagClass.fromTagFlags(tagFlags), tagNo);
+ setTagFlags(tagFlags);
+ }
+
+ /**
+ * Constructor with a value, generally for encoding of the value
+ * @param tagClass The tag class
+ * @param tagNo The tag number
+ */
+ public Asn1Object(TagClass tagClass, int tagNo) {
+ this.tagClass = tagClass;
+ this.tagNo = tagNo;
+
+ this.tagFlags |= tagClass.getValue();
+ }
+
+ @Override
+ public TagClass tagClass() {
+ return tagClass;
+ }
+
+ protected void setTagClass(TagClass tagClass) {
+ this.tagClass = tagClass;
+ }
+
+ @Override
+ public int tagFlags() {
+ return tagFlags;
+ }
+
+ @Override
+ public int tagNo() {
+ return tagNo;
+ }
+
+ protected void setTagFlags(int tagFlags) {
+ this.tagFlags = tagFlags & 0xe0;
+ }
+
+ protected void setTagNo(int tagNo) {
+ this.tagNo = tagNo;
+ }
+
+ @Override
+ public void usePrimitive(boolean isPrimitive) {
+ if (isPrimitive) {
+ tagFlags &= ~CONSTRUCTED_FLAG;
+ } else {
+ tagFlags |= CONSTRUCTED_FLAG;
+ }
+ }
+
+ @Override
+ public boolean isPrimitive() {
+ return (tagFlags & CONSTRUCTED_FLAG) == 0;
+ }
+
+ @Override
+ public void useDefinitiveLength(boolean isDefinitiveLength) {
+ this.isDefinitiveLength = isDefinitiveLength;
+ }
+
+ @Override
+ public boolean isDefinitiveLength() {
+ return isDefinitiveLength;
+ }
+
+ @Override
+ public void useImplicit(boolean isImplicit) {
+ this.isImplicit = isImplicit;
+ }
+
+ @Override
+ public boolean isImplicit() {
+ return isImplicit;
+ }
+
+ @Override
+ public void useDER() {
+ this.encodingType = EncodingType.DER;
+ }
+
+ @Override
+ public boolean isDER() {
+ return encodingType == EncodingType.DER;
+ }
+
+ @Override
+ public void useBER() {
+ this.encodingType = EncodingType.BER;
+ }
+
+ @Override
+ public boolean isBER() {
+ return encodingType == EncodingType.BER;
+ }
+
+ @Override
+ public void useCER() {
+ this.encodingType = EncodingType.CER;
+ }
+
+ @Override
+ public boolean isCER() {
+ return encodingType == EncodingType.CER;
+ }
+
+ @Override
+ public byte[] encode() {
+ ByteBuffer byteBuffer = ByteBuffer.allocate(encodingLength());
+ encode(byteBuffer);
+ byteBuffer.flip();
+ return byteBuffer.array();
+ }
+
+ @Override
+ public void encode(ByteBuffer buffer) {
+ encodeTag(buffer, tagFlags(), tagNo());
+ encodeLength(buffer, encodingBodyLength());
+ encodeBody(buffer);
+ }
+
+ protected void encodeBody(ByteBuffer buffer) { }
+
+ @Override
+ public void decode(byte[] content) throws IOException {
+ decode(new LimitedByteBuffer(content));
+ }
+
+ @Override
+ public void decode(ByteBuffer content) throws IOException {
+ decode(new LimitedByteBuffer(content));
+ }
+
+ @Override
+ public int encodingLength() {
+ if (encodingLen == -1) {
+ int bodyLen = encodingBodyLength();
+ encodingLen = lengthOfTagLength(tagNo()) + lengthOfBodyLength(bodyLen) + bodyLen;
+ }
+ return encodingLen;
+ }
+
+ public boolean isUniversal() {
+ return tagClass.isUniversal();
+ }
+
+ public boolean isAppSpecific() {
+ return tagClass.isAppSpecific();
+ }
+
+ public boolean isContextSpecific() {
+ return tagClass.isContextSpecific();
+ }
+
+ public boolean isTagged() {
+ return tagClass.isTagged();
+ }
+
+ public boolean isSimple() {
+ return isUniversal() && Asn1Simple.isSimple(tagNo);
+ }
+
+ public boolean isCollection() {
+ return isUniversal() && Asn1Collection.isCollection(tagNo);
+ }
+
+ protected abstract int encodingBodyLength();
+
+ protected void decode(LimitedByteBuffer content) throws IOException {
+ int tag = readTag(content);
+ int tagNo = readTagNo(content, tag);
+ int tmpTagFlags = tag & 0xe0;
+ int length = readLength(content);
+
+ decode(tmpTagFlags, tagNo, new LimitedByteBuffer(content, length));
+ }
+
+ public void decode(int tagFlags, int tagNo,
+ LimitedByteBuffer content) throws IOException {
+ if (tagClass() != TagClass.UNKNOWN && tagClass()
+ != TagClass.fromTagFlags(tagFlags)) {
+ throw new IOException("Unexpected tagFlags " + tagFlags
+ + ", expecting " + tagClass());
+ }
+ if (tagNo() != -1 && tagNo() != tagNo) {
+ throw new IOException("Unexpected tagNo " + tagNo + ", "
+ + "expecting " + tagNo());
+ }
+
+ setTagClass(TagClass.fromTagFlags(tagFlags));
+ setTagFlags(tagFlags);
+ setTagNo(tagNo);
+
+ decodeBody(content);
+ }
+
+ protected abstract void decodeBody(LimitedByteBuffer content) throws IOException;
+
+ protected int taggedEncodingLength(TaggingOption taggingOption) {
+ int taggingTagNo = taggingOption.getTagNo();
+ int taggingBodyLen = taggingOption.isImplicit() ? encodingBodyLength()
+ : encodingLength();
+ int taggingEncodingLen = lengthOfTagLength(taggingTagNo)
+ + lengthOfBodyLength(taggingBodyLen) + taggingBodyLen;
+ return taggingEncodingLen;
+ }
+
+ public byte[] taggedEncode(TaggingOption taggingOption) {
+ ByteBuffer byteBuffer = ByteBuffer.allocate(taggedEncodingLength(taggingOption));
+ taggedEncode(byteBuffer, taggingOption);
+ byteBuffer.flip();
+ return byteBuffer.array();
+ }
+
+ @Override
+ public void taggedEncode(ByteBuffer buffer, TaggingOption taggingOption) {
+ int taggingTagFlags = taggingOption.tagFlags(!isPrimitive());
+ encodeTag(buffer, taggingTagFlags, taggingOption.getTagNo());
+ int taggingBodyLen = taggingOption.isImplicit() ? encodingBodyLength()
+ : encodingLength();
+ encodeLength(buffer, taggingBodyLen);
+ if (taggingOption.isImplicit()) {
+ encodeBody(buffer);
+ } else {
+ encode(buffer);
+ }
+ }
+
+ public void taggedDecode(byte[] content,
+ TaggingOption taggingOption) throws IOException {
+ taggedDecode(ByteBuffer.wrap(content), taggingOption);
+ }
+
+ @Override
+ public void taggedDecode(ByteBuffer content,
+ TaggingOption taggingOption) throws IOException {
+ LimitedByteBuffer limitedBuffer = new LimitedByteBuffer(content);
+ taggedDecode(limitedBuffer, taggingOption);
+ }
+
+ protected void taggedDecode(LimitedByteBuffer content,
+ TaggingOption taggingOption) throws IOException {
+ int taggingTag = readTag(content);
+ int taggingTagNo = readTagNo(content, taggingTag);
+ int taggingLength = readLength(content);
+ LimitedByteBuffer newContent = new LimitedByteBuffer(content, taggingLength);
+
+ int tmpTagFlags = taggingTag & 0xe0;
+ taggedDecode(tmpTagFlags, taggingTagNo, newContent, taggingOption);
+ }
+
+ protected void taggedDecode(int taggingTagFlags, int taggingTagNo,
+ LimitedByteBuffer content,
+ TaggingOption taggingOption) throws IOException {
+ int expectedTaggingTagFlags = taggingOption.tagFlags(!isPrimitive());
+ if (expectedTaggingTagFlags != taggingTagFlags) {
+ throw new IOException("Unexpected tag flags " + taggingTagFlags
+ + ", expecting " + expectedTaggingTagFlags);
+ }
+ if (taggingOption.getTagNo() != taggingTagNo) {
+ throw new IOException("Unexpected tagNo " + taggingTagNo + ", "
+ + "expecting " + taggingOption.getTagNo());
+ }
+
+ if (taggingOption.isImplicit()) {
+ decodeBody(content);
+ } else {
+ decode(content);
+ }
+ }
+
+ public static Asn1Item decodeOne(LimitedByteBuffer content) throws IOException {
+ int tag = readTag(content);
+ int tagNo = readTagNo(content, tag);
+ int length = readLength(content);
+ if (length < 0) {
+ throw new IOException("Unexpected length");
+ }
+ LimitedByteBuffer valueContent = new LimitedByteBuffer(content, length);
+ content.skip(length);
+
+ Asn1Item result = new Asn1Item(tag, tagNo, valueContent);
+ if (result.isSimple()) {
+ result.decodeValueAsSimple();
+ }
+ return result;
+ }
+
+ public static void skipOne(LimitedByteBuffer content) throws IOException {
+ int tag = readTag(content);
+ readTagNo(content, tag);
+ int length = readLength(content);
+ if (length < 0) {
+ throw new IOException("Unexpected length");
+ }
+ content.skip(length);
+ }
+
+ public static int lengthOfBodyLength(int bodyLength) {
+ int length = 1;
+
+ if (bodyLength > 127) {
+ int payload = bodyLength;
+ while (payload != 0) {
+ payload >>= 8;
+ length++;
+ }
+ }
+
+ return length;
+ }
+
+ public static int lengthOfTagLength(int tagNo) {
+ int length = 1;
+
+ if (tagNo >= 31) {
+ if (tagNo < 128) {
+ length++;
+ } else {
+ length++;
+
+ do {
+ tagNo >>= 7;
+ length++;
+ } while (tagNo > 127);
+ }
+ }
+
+ return length;
+ }
+
+ public static void encodeTag(ByteBuffer buffer, int flags, int tagNo) {
+ if (tagNo < 31) {
+ buffer.put((byte) (flags | tagNo));
+ } else {
+ buffer.put((byte) (flags | 0x1f));
+ if (tagNo < 128) {
+ buffer.put((byte) tagNo);
+ } else {
+ byte[] tmpBytes = new byte[5]; // 5 * 7 > 32
+ int iPut = tmpBytes.length;
+
+ tmpBytes[--iPut] = (byte) (tagNo & 0x7f);
+ do {
+ tagNo >>= 7;
+ tmpBytes[--iPut] = (byte) (tagNo & 0x7f | 0x80);
+ } while (tagNo > 127);
+
+ buffer.put(tmpBytes, iPut, tmpBytes.length - iPut);
+ }
+ }
+ }
+
+ public static void encodeLength(ByteBuffer buffer, int bodyLength) {
+ if (bodyLength < 128) {
+ buffer.put((byte) bodyLength);
+ } else {
+ int length = 0;
+ int payload = bodyLength;
+
+ while (payload != 0) {
+ payload >>= 8;
+ length++;
+ }
+
+ buffer.put((byte) (length | 0x80));
+
+ payload = bodyLength;
+ for (int i = length - 1; i >= 0; i--) {
+ buffer.put((byte) (payload >> (i * 8)));
+ }
+ }
+ }
+
+ public static int readTag(LimitedByteBuffer buffer) throws IOException {
+ int tag = buffer.readByte() & 0xff;
+ if (tag == 0) {
+ throw new IOException("Bad tag 0 found");
+ }
+ return tag;
+ }
+
+ public static int readTagNo(LimitedByteBuffer buffer, int tag) throws IOException {
+ int tagNo = tag & 0x1f;
+
+ if (tagNo == 0x1f) {
+ tagNo = 0;
+
+ int b = buffer.readByte() & 0xff;
+ if ((b & 0x7f) == 0) {
+ throw new IOException("Invalid high tag number found");
+ }
+
+ while (b >= 0 && (b & 0x80) != 0) {
+ tagNo |= b & 0x7f;
+ tagNo <<= 7;
+ b = buffer.readByte();
+ }
+
+ tagNo |= b & 0x7f;
+ }
+
+ return tagNo;
+ }
+
+ public static int readLength(LimitedByteBuffer buffer) throws IOException {
+ int bodyLength = buffer.readByte() & 0xff;
+
+ if (bodyLength > 127) {
+ int length = bodyLength & 0x7f;
+ if (length > 4) {
+ throw new IOException("Bad bodyLength of more than 4 bytes: " + length);
+ }
+
+ bodyLength = 0;
+ int tmp;
+ for (int i = 0; i < length; i++) {
+ tmp = buffer.readByte() & 0xff;
+ bodyLength = (bodyLength << 8) + tmp;
+ }
+
+ if (bodyLength < 0) {
+ throw new IOException("Invalid bodyLength " + bodyLength);
+ }
+ if (bodyLength > buffer.hasLeft()) {
+ throw new IOException("Corrupt stream - less data "
+ + buffer.hasLeft() + " than expected " + bodyLength);
+ }
+ }
+
+ return bodyLength;
+ }
+}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/800e02fd/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1SequenceType.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1SequenceType.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1SequenceType.java
index bcbf715..4733838 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1SequenceType.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1SequenceType.java
@@ -19,6 +19,7 @@
*/
package org.apache.kerby.asn1.type;
+import org.apache.kerby.asn1.Asn1FieldInfo;
import org.apache.kerby.asn1.UniversalTag;
/**
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/800e02fd/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1SetType.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1SetType.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1SetType.java
index 4f13369..b320224 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1SetType.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1SetType.java
@@ -19,6 +19,7 @@
*/
package org.apache.kerby.asn1.type;
+import org.apache.kerby.asn1.Asn1FieldInfo;
import org.apache.kerby.asn1.UniversalTag;
/**
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/800e02fd/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/ExplicitField.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/ExplicitField.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/ExplicitField.java
deleted file mode 100644
index abb42ce..0000000
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/ExplicitField.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * 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.asn1.type;
-
-/**
- * Representing an explicitly tagged field in a ASN1 collection or choice.
- */
-public class ExplicitField extends Asn1FieldInfo {
-
- /**
- * Constructor for an explicitly tagged field.
- * @param index
- * @param type
- */
- public ExplicitField(int index, int tagNo, Class<? extends Asn1Type> type) {
- super(index, tagNo, type, false);
- }
-
- /**
- * Constructor for an explicitly tagged field, the tagNo being the same of index.
- * @param index
- * @param type
- */
- public ExplicitField(int index, Class<? extends Asn1Type> type) {
- super(index, index, type, false);
- }
-}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/800e02fd/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/ImplicitField.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/ImplicitField.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/ImplicitField.java
deleted file mode 100644
index b64bc4f..0000000
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/ImplicitField.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * 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.asn1.type;
-
-/**
- * Representing an implicitly tagged field in a ASN1 collection or choice.
- */
-public class ImplicitField extends Asn1FieldInfo {
-
- /**
- * Constructor for an implicitly tagged field.
- * @param index
- * @param type
- */
- public ImplicitField(int index, int tagNo, Class<? extends Asn1Type> type) {
- super(index, tagNo, type, true);
- }
-
- /**
- * Constructor for an implicitly tagged field, the tagNo being the same of index.
- * @param index
- * @param type
- */
- public ImplicitField(int index, Class<? extends Asn1Type> type) {
- super(index, index, type, true);
- }
-}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/800e02fd/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingCollection.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingCollection.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingCollection.java
index 1d810a3..bac51b0 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingCollection.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingCollection.java
@@ -19,6 +19,7 @@
*/
package org.apache.kerby.asn1.type;
+import org.apache.kerby.asn1.Asn1FieldInfo;
import org.apache.kerby.asn1.LimitedByteBuffer;
import org.apache.kerby.asn1.TagClass;
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/800e02fd/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingSequence.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingSequence.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingSequence.java
index eab2aaf..0bd9fbb 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingSequence.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingSequence.java
@@ -19,6 +19,8 @@
*/
package org.apache.kerby.asn1.type;
+import org.apache.kerby.asn1.Asn1FieldInfo;
+
/**
* For tagging a sequence type with tagNo, either application specific or context specific class
*/
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/800e02fd/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingSet.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingSet.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingSet.java
index 444102b..52158cb 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingSet.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingSet.java
@@ -19,6 +19,8 @@
*/
package org.apache.kerby.asn1.type;
+import org.apache.kerby.asn1.Asn1FieldInfo;
+
/**
* For tagging a sequence type with tagNo, either application specific or context specific class
*/
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/800e02fd/kerby-asn1/src/test/java/org/apache/kerby/asn1/PersonnelRecord.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/test/java/org/apache/kerby/asn1/PersonnelRecord.java b/kerby-asn1/src/test/java/org/apache/kerby/asn1/PersonnelRecord.java
index 72da457..ee4c96e 100644
--- a/kerby-asn1/src/test/java/org/apache/kerby/asn1/PersonnelRecord.java
+++ b/kerby-asn1/src/test/java/org/apache/kerby/asn1/PersonnelRecord.java
@@ -19,14 +19,11 @@
*/
package org.apache.kerby.asn1;
-import org.apache.kerby.asn1.type.Asn1FieldInfo;
import org.apache.kerby.asn1.type.Asn1Integer;
import org.apache.kerby.asn1.type.Asn1SequenceOf;
import org.apache.kerby.asn1.type.Asn1SetType;
import org.apache.kerby.asn1.type.Asn1Tagging;
import org.apache.kerby.asn1.type.Asn1VisibleString;
-import org.apache.kerby.asn1.type.ExplicitField;
-import org.apache.kerby.asn1.type.ImplicitField;
import org.apache.kerby.asn1.type.TaggingSequence;
import org.apache.kerby.asn1.type.TaggingSet;
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/800e02fd/kerby-backend/json-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/JsonIdentityBackend.java
----------------------------------------------------------------------
diff --git a/kerby-backend/json-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/JsonIdentityBackend.java b/kerby-backend/json-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/JsonIdentityBackend.java
index cc1da07..b65ec0b 100644
--- a/kerby-backend/json-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/JsonIdentityBackend.java
+++ b/kerby-backend/json-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/JsonIdentityBackend.java
@@ -30,9 +30,9 @@ import org.apache.kerby.kerberos.kerb.KrbException;
import org.apache.kerby.kerberos.kerb.identity.BatchTrans;
import org.apache.kerby.kerberos.kerb.identity.KrbIdentity;
import org.apache.kerby.kerberos.kerb.identity.backend.AbstractIdentityBackend;
-import org.apache.kerby.kerberos.kerb.spec.KerberosTime;
-import org.apache.kerby.kerberos.kerb.spec.base.EncryptionKey;
-import org.apache.kerby.kerberos.kerb.spec.base.PrincipalName;
+import org.apache.kerby.kerberos.kerb.type.KerberosTime;
+import org.apache.kerby.kerberos.kerb.type.base.EncryptionKey;
+import org.apache.kerby.kerberos.kerb.type.base.PrincipalName;
import org.apache.kerby.util.IOUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/800e02fd/kerby-backend/json-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/typeAdapter/EncryptionKeyAdapter.java
----------------------------------------------------------------------
diff --git a/kerby-backend/json-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/typeAdapter/EncryptionKeyAdapter.java b/kerby-backend/json-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/typeAdapter/EncryptionKeyAdapter.java
index ff0dfdd..fd3fd20 100644
--- a/kerby-backend/json-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/typeAdapter/EncryptionKeyAdapter.java
+++ b/kerby-backend/json-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/typeAdapter/EncryptionKeyAdapter.java
@@ -26,7 +26,7 @@ import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
-import org.apache.kerby.kerberos.kerb.spec.base.EncryptionKey;
+import org.apache.kerby.kerberos.kerb.type.base.EncryptionKey;
import org.apache.kerby.util.HexUtil;
import java.io.IOException;
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/800e02fd/kerby-backend/json-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/typeAdapter/KerberosTimeAdapter.java
----------------------------------------------------------------------
diff --git a/kerby-backend/json-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/typeAdapter/KerberosTimeAdapter.java b/kerby-backend/json-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/typeAdapter/KerberosTimeAdapter.java
index 7c4b6eb..7a499d5 100644
--- a/kerby-backend/json-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/typeAdapter/KerberosTimeAdapter.java
+++ b/kerby-backend/json-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/typeAdapter/KerberosTimeAdapter.java
@@ -26,7 +26,7 @@ import com.google.gson.JsonParseException;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
-import org.apache.kerby.kerberos.kerb.spec.KerberosTime;
+import org.apache.kerby.kerberos.kerb.type.KerberosTime;
import java.lang.reflect.Type;
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/800e02fd/kerby-backend/json-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/typeAdapter/PrincipalNameAdapter.java
----------------------------------------------------------------------
diff --git a/kerby-backend/json-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/typeAdapter/PrincipalNameAdapter.java b/kerby-backend/json-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/typeAdapter/PrincipalNameAdapter.java
index d9d61a4..6946193 100644
--- a/kerby-backend/json-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/typeAdapter/PrincipalNameAdapter.java
+++ b/kerby-backend/json-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/typeAdapter/PrincipalNameAdapter.java
@@ -26,7 +26,7 @@ import com.google.gson.JsonParseException;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
-import org.apache.kerby.kerberos.kerb.spec.base.PrincipalName;
+import org.apache.kerby.kerberos.kerb.type.base.PrincipalName;
import java.lang.reflect.Type;