001/* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, 013 * software distributed under the License is distributed on an 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 * KIND, either express or implied. See the License for the 016 * specific language governing permissions and limitations 017 * under the License. 018 * 019 */ 020package org.apache.directory.shared.kerberos.codec.encKrbCredPart; 021 022 023import org.apache.directory.api.asn1.actions.CheckNotNullLength; 024import org.apache.directory.api.asn1.ber.grammar.AbstractGrammar; 025import org.apache.directory.api.asn1.ber.grammar.Grammar; 026import org.apache.directory.api.asn1.ber.grammar.GrammarTransition; 027import org.apache.directory.api.asn1.ber.tlv.UniversalTag; 028import org.apache.directory.shared.kerberos.KerberosConstants; 029import org.apache.directory.shared.kerberos.codec.encKrbCredPart.actions.EncKrbCredPartInit; 030import org.apache.directory.shared.kerberos.codec.encKrbCredPart.actions.StoreNonce; 031import org.apache.directory.shared.kerberos.codec.encKrbCredPart.actions.StoreRecipientAddress; 032import org.apache.directory.shared.kerberos.codec.encKrbCredPart.actions.StoreSenderAddress; 033import org.apache.directory.shared.kerberos.codec.encKrbCredPart.actions.StoreTicketInfo; 034import org.apache.directory.shared.kerberos.codec.encKrbCredPart.actions.StoreTimestamp; 035import org.apache.directory.shared.kerberos.codec.encKrbCredPart.actions.StoreUsec; 036import org.slf4j.Logger; 037import org.slf4j.LoggerFactory; 038 039 040/** 041 * This class implements the EncKrbCredPart structure. All the actions are declared 042 * in this class. As it is a singleton, these declaration are only done once. If 043 * an action is to be added or modified, this is where the work is to be done ! 044 * 045 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> 046 */ 047public final class EncKrbCredPartGrammar extends AbstractGrammar<EncKrbCredPartContainer> 048{ 049 /** The logger */ 050 static final Logger LOG = LoggerFactory.getLogger( EncKrbCredPartGrammar.class ); 051 052 /** A speedup for logger */ 053 static final boolean IS_DEBUG = LOG.isDebugEnabled(); 054 055 /** The instance of grammar. EncKrbCredPartGrammar is a singleton */ 056 private static Grammar<EncKrbCredPartContainer> instance = new EncKrbCredPartGrammar(); 057 058 059 /** 060 * Creates a new EncKrbCredPartGrammar object. 061 */ 062 @SuppressWarnings("unchecked") 063 private EncKrbCredPartGrammar() 064 { 065 setName( EncKrbCredPartGrammar.class.getName() ); 066 067 // Create the transitions table 068 super.transitions = new GrammarTransition[EncKrbCredPartStatesEnum.LAST_ENC_KRB_CRED_PART_STATE.ordinal()][256]; 069 070 // ============================================================================================ 071 // EncKrbCredPart 072 // ============================================================================================ 073 super.transitions[EncKrbCredPartStatesEnum.START_STATE.ordinal()][KerberosConstants.ENC_KRB_CRED_PART_TAG] = 074 new GrammarTransition<EncKrbCredPartContainer>( 075 EncKrbCredPartStatesEnum.START_STATE, EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_TAG_STATE, 076 KerberosConstants.ENC_KRB_CRED_PART_TAG, 077 new EncKrbCredPartInit() ); 078 079 super.transitions[EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_TAG_STATE.ordinal()][UniversalTag.SEQUENCE 080 .getValue()] = 081 new GrammarTransition<EncKrbCredPartContainer>( 082 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_TAG_STATE, 083 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_SEQ_TAG_STATE, 084 UniversalTag.SEQUENCE, 085 new CheckNotNullLength<EncKrbCredPartContainer>() ); 086 087 super.transitions[EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_SEQ_TAG_STATE.ordinal()][KerberosConstants.ENC_KRB_CRED_TICKET_INFO_TAG] = 088 new GrammarTransition<EncKrbCredPartContainer>( 089 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_SEQ_TAG_STATE, 090 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_TICKET_INFO_TAG_STATE, 091 KerberosConstants.ENC_KRB_CRED_TICKET_INFO_TAG, 092 new CheckNotNullLength<EncKrbCredPartContainer>() ); 093 094 super.transitions[EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_TICKET_INFO_TAG_STATE.ordinal()][UniversalTag.SEQUENCE 095 .getValue()] = 096 new GrammarTransition<EncKrbCredPartContainer>( 097 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_TICKET_INFO_TAG_STATE, 098 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_TICKET_INFO_STATE, 099 UniversalTag.SEQUENCE, 100 new CheckNotNullLength<EncKrbCredPartContainer>() ); 101 102 super.transitions[EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_TICKET_INFO_STATE.ordinal()][UniversalTag.SEQUENCE 103 .getValue()] = 104 new GrammarTransition<EncKrbCredPartContainer>( 105 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_TICKET_INFO_STATE, 106 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_TICKET_INFO_STATE, 107 UniversalTag.SEQUENCE, 108 new StoreTicketInfo() ); 109 110 super.transitions[EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_TICKET_INFO_STATE.ordinal()][KerberosConstants.ENC_KRB_CRED_PART_NONCE_TAG] = 111 new GrammarTransition<EncKrbCredPartContainer>( 112 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_TICKET_INFO_STATE, 113 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_NONCE_TAG_STATE, 114 KerberosConstants.ENC_KRB_CRED_PART_NONCE_TAG, 115 new CheckNotNullLength<EncKrbCredPartContainer>() ); 116 117 super.transitions[EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_NONCE_TAG_STATE.ordinal()][UniversalTag.INTEGER 118 .getValue()] = 119 new GrammarTransition<EncKrbCredPartContainer>( 120 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_NONCE_TAG_STATE, 121 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_NONCE_STATE, 122 UniversalTag.INTEGER, 123 new StoreNonce() ); 124 125 super.transitions[EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_NONCE_STATE.ordinal()][KerberosConstants.ENC_KRB_CRED_PART_TIMESTAMP_TAG] = 126 new GrammarTransition<EncKrbCredPartContainer>( 127 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_NONCE_STATE, 128 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_TIMESTAMP_TAG_STATE, 129 KerberosConstants.ENC_KRB_CRED_PART_TIMESTAMP_TAG, 130 new CheckNotNullLength<EncKrbCredPartContainer>() ); 131 132 super.transitions[EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_TIMESTAMP_TAG_STATE.ordinal()][UniversalTag.GENERALIZED_TIME 133 .getValue()] = 134 new GrammarTransition<EncKrbCredPartContainer>( 135 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_TIMESTAMP_TAG_STATE, 136 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_TIMESTAMP_STATE, 137 UniversalTag.GENERALIZED_TIME, 138 new StoreTimestamp() ); 139 140 super.transitions[EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_TIMESTAMP_STATE.ordinal()][KerberosConstants.ENC_KRB_CRED_PART_USEC_TAG] = 141 new GrammarTransition<EncKrbCredPartContainer>( 142 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_TIMESTAMP_STATE, 143 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_USEC_TAG_STATE, 144 KerberosConstants.ENC_KRB_CRED_PART_USEC_TAG, 145 new CheckNotNullLength<EncKrbCredPartContainer>() ); 146 147 super.transitions[EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_USEC_TAG_STATE.ordinal()][UniversalTag.INTEGER 148 .getValue()] = 149 new GrammarTransition<EncKrbCredPartContainer>( 150 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_USEC_TAG_STATE, 151 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_USEC_STATE, 152 UniversalTag.INTEGER, 153 new StoreUsec() ); 154 155 super.transitions[EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_USEC_STATE.ordinal()][KerberosConstants.ENC_KRB_CRED_PART_SENDER_ADDRESS_TAG] = 156 new GrammarTransition<EncKrbCredPartContainer>( 157 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_USEC_STATE, 158 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_SENDER_ADDRESS_TAG_STATE, 159 KerberosConstants.ENC_KRB_CRED_PART_SENDER_ADDRESS_TAG, 160 new StoreSenderAddress() ); 161 162 super.transitions[EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_SENDER_ADDRESS_TAG_STATE.ordinal()][KerberosConstants.ENC_KRB_CRED_PART_RECIPIENT_ADDRESS_TAG] = 163 new GrammarTransition<EncKrbCredPartContainer>( 164 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_SENDER_ADDRESS_TAG_STATE, 165 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_RECIPIENT_ADDRESS_TAG_STATE, 166 KerberosConstants.ENC_KRB_CRED_PART_SENDER_ADDRESS_TAG, 167 new StoreRecipientAddress() ); 168 169 // ---------------------------------- OPTIONAL transitions ----------------------------------------------- 170 super.transitions[EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_TICKET_INFO_STATE.ordinal()][KerberosConstants.ENC_KRB_CRED_PART_TIMESTAMP_TAG] = 171 new GrammarTransition<EncKrbCredPartContainer>( 172 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_TICKET_INFO_STATE, 173 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_TIMESTAMP_TAG_STATE, 174 KerberosConstants.ENC_KRB_CRED_PART_TIMESTAMP_TAG, 175 new CheckNotNullLength<EncKrbCredPartContainer>() ); 176 177 super.transitions[EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_TICKET_INFO_STATE.ordinal()][KerberosConstants.ENC_KRB_CRED_PART_USEC_TAG] = 178 new GrammarTransition<EncKrbCredPartContainer>( 179 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_TICKET_INFO_STATE, 180 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_USEC_TAG_STATE, 181 KerberosConstants.ENC_KRB_CRED_PART_USEC_TAG, 182 new CheckNotNullLength<EncKrbCredPartContainer>() ); 183 184 super.transitions[EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_TICKET_INFO_STATE.ordinal()][KerberosConstants.ENC_KRB_CRED_PART_SENDER_ADDRESS_TAG] = 185 new GrammarTransition<EncKrbCredPartContainer>( 186 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_TICKET_INFO_STATE, 187 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_SENDER_ADDRESS_TAG_STATE, 188 KerberosConstants.ENC_KRB_CRED_PART_SENDER_ADDRESS_TAG, 189 new StoreSenderAddress() ); 190 191 super.transitions[EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_TICKET_INFO_STATE.ordinal()][KerberosConstants.ENC_KRB_CRED_PART_RECIPIENT_ADDRESS_TAG] = 192 new GrammarTransition<EncKrbCredPartContainer>( 193 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_TICKET_INFO_STATE, 194 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_RECIPIENT_ADDRESS_TAG_STATE, 195 KerberosConstants.ENC_KRB_CRED_PART_RECIPIENT_ADDRESS_TAG, 196 new StoreRecipientAddress() ); 197 198 super.transitions[EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_NONCE_STATE.ordinal()][KerberosConstants.ENC_KRB_CRED_PART_USEC_TAG] = 199 new GrammarTransition<EncKrbCredPartContainer>( 200 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_NONCE_STATE, 201 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_USEC_TAG_STATE, 202 KerberosConstants.ENC_KRB_CRED_PART_USEC_TAG, 203 new CheckNotNullLength<EncKrbCredPartContainer>() ); 204 205 super.transitions[EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_NONCE_STATE.ordinal()][KerberosConstants.ENC_KRB_CRED_PART_SENDER_ADDRESS_TAG] = 206 new GrammarTransition<EncKrbCredPartContainer>( 207 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_NONCE_STATE, 208 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_SENDER_ADDRESS_TAG_STATE, 209 KerberosConstants.ENC_KRB_CRED_PART_SENDER_ADDRESS_TAG, 210 new StoreSenderAddress() ); 211 212 super.transitions[EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_NONCE_STATE.ordinal()][KerberosConstants.ENC_KRB_CRED_PART_RECIPIENT_ADDRESS_TAG] = 213 new GrammarTransition<EncKrbCredPartContainer>( 214 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_NONCE_STATE, 215 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_RECIPIENT_ADDRESS_TAG_STATE, 216 KerberosConstants.ENC_KRB_CRED_PART_RECIPIENT_ADDRESS_TAG, 217 new StoreRecipientAddress() ); 218 219 super.transitions[EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_TIMESTAMP_STATE.ordinal()][KerberosConstants.ENC_KRB_CRED_PART_SENDER_ADDRESS_TAG] = 220 new GrammarTransition<EncKrbCredPartContainer>( 221 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_TIMESTAMP_STATE, 222 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_SENDER_ADDRESS_TAG_STATE, 223 KerberosConstants.ENC_KRB_CRED_PART_SENDER_ADDRESS_TAG, 224 new StoreSenderAddress() ); 225 226 super.transitions[EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_TIMESTAMP_STATE.ordinal()][KerberosConstants.ENC_KRB_CRED_PART_RECIPIENT_ADDRESS_TAG] = 227 new GrammarTransition<EncKrbCredPartContainer>( 228 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_TIMESTAMP_STATE, 229 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_RECIPIENT_ADDRESS_TAG_STATE, 230 KerberosConstants.ENC_KRB_CRED_PART_RECIPIENT_ADDRESS_TAG, 231 new StoreRecipientAddress() ); 232 233 super.transitions[EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_USEC_STATE.ordinal()][KerberosConstants.ENC_KRB_CRED_PART_RECIPIENT_ADDRESS_TAG] = 234 new GrammarTransition<EncKrbCredPartContainer>( 235 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_USEC_STATE, 236 EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_RECIPIENT_ADDRESS_TAG_STATE, 237 KerberosConstants.ENC_KRB_CRED_PART_RECIPIENT_ADDRESS_TAG, 238 new StoreRecipientAddress() ); 239 } 240 241 242 /** 243 * Get the instance of this grammar 244 * 245 * @return An instance on the EncKrbCredPart Grammar 246 */ 247 public static Grammar<EncKrbCredPartContainer> getInstance() 248 { 249 return instance; 250 } 251}