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.krbCredInfo;
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.krbCredInfo.actions.KrbCredInfoInit;
030import org.apache.directory.shared.kerberos.codec.krbCredInfo.actions.StoreAuthTime;
031import org.apache.directory.shared.kerberos.codec.krbCredInfo.actions.StoreCaddr;
032import org.apache.directory.shared.kerberos.codec.krbCredInfo.actions.StoreEndTime;
033import org.apache.directory.shared.kerberos.codec.krbCredInfo.actions.StoreFlags;
034import org.apache.directory.shared.kerberos.codec.krbCredInfo.actions.StoreKey;
035import org.apache.directory.shared.kerberos.codec.krbCredInfo.actions.StorePName;
036import org.apache.directory.shared.kerberos.codec.krbCredInfo.actions.StorePRealm;
037import org.apache.directory.shared.kerberos.codec.krbCredInfo.actions.StoreRenewtill;
038import org.apache.directory.shared.kerberos.codec.krbCredInfo.actions.StoreSName;
039import org.apache.directory.shared.kerberos.codec.krbCredInfo.actions.StoreSRealm;
040import org.apache.directory.shared.kerberos.codec.krbCredInfo.actions.StoreStartTime;
041import org.slf4j.Logger;
042import org.slf4j.LoggerFactory;
043
044
045/**
046 * This class implements the KrbCredInfo structure. All the actions are declared
047 * in this class. As it is a singleton, these declaration are only done once. If
048 * an action is to be added or modified, this is where the work is to be done !
049 *
050 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
051 */
052public final class KrbCredInfoGrammar extends AbstractGrammar<KrbCredInfoContainer>
053{
054    /** The logger */
055    static final Logger LOG = LoggerFactory.getLogger( KrbCredInfoGrammar.class );
056
057    /** A speedup for logger */
058    static final boolean IS_DEBUG = LOG.isDebugEnabled();
059
060    /** The instance of grammar. KrbCredInfoGrammar is a singleton */
061    private static Grammar<KrbCredInfoContainer> instance = new KrbCredInfoGrammar();
062
063
064    /**
065     * Creates a new KrbCredInfoGrammar object.
066     */
067    @SuppressWarnings("unchecked")
068    private KrbCredInfoGrammar()
069    {
070        setName( KrbCredInfoGrammar.class.getName() );
071
072        // Create the transitions table
073        super.transitions = new GrammarTransition[KrbCredInfoStatesEnum.LAST_KRB_CRED_INFO_STATE.ordinal()][256];
074
075        // ============================================================================================
076        // KrbCredInfo
077        // ============================================================================================
078
079        super.transitions[KrbCredInfoStatesEnum.START_STATE.ordinal()][UniversalTag.SEQUENCE.getValue()] =
080            new GrammarTransition<KrbCredInfoContainer>(
081                KrbCredInfoStatesEnum.START_STATE,
082                KrbCredInfoStatesEnum.KRB_CRED_INFO_SEQ_TAG_STATE,
083                UniversalTag.SEQUENCE,
084                new KrbCredInfoInit() );
085
086        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_SEQ_TAG_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_KEY_TAG] =
087            new GrammarTransition<KrbCredInfoContainer>(
088                KrbCredInfoStatesEnum.KRB_CRED_INFO_SEQ_TAG_STATE,
089                KrbCredInfoStatesEnum.KRB_CRED_INFO_KEY_TAG_STATE,
090                KerberosConstants.KRB_CRED_INFO_KEY_TAG,
091                new StoreKey() );
092
093        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_KEY_TAG_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_PREALM_TAG] =
094            new GrammarTransition<KrbCredInfoContainer>(
095                KrbCredInfoStatesEnum.KRB_CRED_INFO_KEY_TAG_STATE,
096                KrbCredInfoStatesEnum.KRB_CRED_INFO_PREALM_TAG_STATE,
097                KerberosConstants.KRB_CRED_INFO_PREALM_TAG,
098                new CheckNotNullLength<KrbCredInfoContainer>() );
099
100        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_PREALM_TAG_STATE.ordinal()][UniversalTag.GENERAL_STRING
101            .getValue()] =
102            new GrammarTransition<KrbCredInfoContainer>(
103                KrbCredInfoStatesEnum.KRB_CRED_INFO_PREALM_TAG_STATE,
104                KrbCredInfoStatesEnum.KRB_CRED_INFO_PREALM_STATE,
105                UniversalTag.GENERAL_STRING,
106                new StorePRealm() );
107
108        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_PREALM_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_PNAME_TAG] =
109            new GrammarTransition<KrbCredInfoContainer>(
110                KrbCredInfoStatesEnum.KRB_CRED_INFO_PREALM_STATE,
111                KrbCredInfoStatesEnum.KRB_CRED_INFO_PNAME_TAG_STATE,
112                KerberosConstants.KRB_CRED_INFO_PNAME_TAG,
113                new StorePName() );
114
115        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_PNAME_TAG_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_FLAGS_TAG] =
116            new GrammarTransition<KrbCredInfoContainer>(
117                KrbCredInfoStatesEnum.KRB_CRED_INFO_PNAME_TAG_STATE,
118                KrbCredInfoStatesEnum.KRB_CRED_INFO_FLAGS_TAG_STATE,
119                KerberosConstants.KRB_CRED_INFO_FLAGS_TAG,
120                new CheckNotNullLength<KrbCredInfoContainer>() );
121
122        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_FLAGS_TAG_STATE.ordinal()][UniversalTag.BIT_STRING
123            .getValue()] =
124            new GrammarTransition<KrbCredInfoContainer>(
125                KrbCredInfoStatesEnum.KRB_CRED_INFO_FLAGS_TAG_STATE,
126                KrbCredInfoStatesEnum.KRB_CRED_INFO_FLAGS_STATE,
127                UniversalTag.BIT_STRING,
128                new StoreFlags() );
129
130        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_FLAGS_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_AUTHTIME_TAG] =
131            new GrammarTransition<KrbCredInfoContainer>(
132                KrbCredInfoStatesEnum.KRB_CRED_INFO_FLAGS_STATE,
133                KrbCredInfoStatesEnum.KRB_CRED_INFO_AUTHTIME_TAG_STATE,
134                KerberosConstants.KRB_CRED_INFO_AUTHTIME_TAG,
135                new CheckNotNullLength<KrbCredInfoContainer>() );
136
137        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_AUTHTIME_TAG_STATE.ordinal()][UniversalTag.GENERALIZED_TIME
138            .getValue()] =
139            new GrammarTransition<KrbCredInfoContainer>(
140                KrbCredInfoStatesEnum.KRB_CRED_INFO_AUTHTIME_TAG_STATE,
141                KrbCredInfoStatesEnum.KRB_CRED_INFO_AUTHTIME_STATE,
142                UniversalTag.GENERALIZED_TIME,
143                new StoreAuthTime() );
144
145        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_AUTHTIME_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_STARTTIME_TAG] =
146            new GrammarTransition<KrbCredInfoContainer>(
147                KrbCredInfoStatesEnum.KRB_CRED_INFO_AUTHTIME_STATE,
148                KrbCredInfoStatesEnum.KRB_CRED_INFO_STARTTIME_TAG_STATE,
149                KerberosConstants.KRB_CRED_INFO_STARTTIME_TAG,
150                new CheckNotNullLength<KrbCredInfoContainer>() );
151
152        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_STARTTIME_TAG_STATE.ordinal()][UniversalTag.GENERALIZED_TIME
153            .getValue()] =
154            new GrammarTransition<KrbCredInfoContainer>(
155                KrbCredInfoStatesEnum.KRB_CRED_INFO_STARTTIME_TAG_STATE,
156                KrbCredInfoStatesEnum.KRB_CRED_INFO_STARTTIME_STATE,
157                UniversalTag.GENERALIZED_TIME,
158                new StoreStartTime() );
159
160        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_STARTTIME_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_ENDTIME_TAG] =
161            new GrammarTransition<KrbCredInfoContainer>(
162                KrbCredInfoStatesEnum.KRB_CRED_INFO_STARTTIME_STATE,
163                KrbCredInfoStatesEnum.KRB_CRED_INFO_ENDTIME_TAG_STATE,
164                KerberosConstants.KRB_CRED_INFO_ENDTIME_TAG,
165                new CheckNotNullLength<KrbCredInfoContainer>() );
166
167        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_ENDTIME_TAG_STATE.ordinal()][UniversalTag.GENERALIZED_TIME
168            .getValue()] =
169            new GrammarTransition<KrbCredInfoContainer>(
170                KrbCredInfoStatesEnum.KRB_CRED_INFO_ENDTIME_TAG_STATE,
171                KrbCredInfoStatesEnum.KRB_CRED_INFO_ENDTIME_STATE,
172                UniversalTag.GENERALIZED_TIME,
173                new StoreEndTime() );
174
175        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_ENDTIME_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_RENEWTILL_TAG] =
176            new GrammarTransition<KrbCredInfoContainer>(
177                KrbCredInfoStatesEnum.KRB_CRED_INFO_ENDTIME_STATE,
178                KrbCredInfoStatesEnum.KRB_CRED_INFO_RENEWTILL_TAG_STATE,
179                KerberosConstants.KRB_CRED_INFO_RENEWTILL_TAG,
180                new CheckNotNullLength<KrbCredInfoContainer>() );
181
182        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_RENEWTILL_TAG_STATE.ordinal()][UniversalTag.GENERALIZED_TIME
183            .getValue()] =
184            new GrammarTransition<KrbCredInfoContainer>(
185                KrbCredInfoStatesEnum.KRB_CRED_INFO_RENEWTILL_TAG_STATE,
186                KrbCredInfoStatesEnum.KRB_CRED_INFO_RENEWTILL_STATE,
187                UniversalTag.GENERALIZED_TIME,
188                new StoreRenewtill() );
189
190        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_RENEWTILL_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_SREALM_TAG] =
191            new GrammarTransition<KrbCredInfoContainer>(
192                KrbCredInfoStatesEnum.KRB_CRED_INFO_RENEWTILL_STATE,
193                KrbCredInfoStatesEnum.KRB_CRED_INFO_SREALM_TAG_STATE,
194                KerberosConstants.KRB_CRED_INFO_SREALM_TAG,
195                new CheckNotNullLength<KrbCredInfoContainer>() );
196
197        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_SREALM_TAG_STATE.ordinal()][UniversalTag.GENERAL_STRING
198            .getValue()] =
199            new GrammarTransition<KrbCredInfoContainer>(
200                KrbCredInfoStatesEnum.KRB_CRED_INFO_SREALM_TAG_STATE,
201                KrbCredInfoStatesEnum.KRB_CRED_INFO_SREALM_STATE,
202                UniversalTag.GENERAL_STRING,
203                new StoreSRealm() );
204
205        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_SREALM_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_SNAME_TAG] =
206            new GrammarTransition<KrbCredInfoContainer>(
207                KrbCredInfoStatesEnum.KRB_CRED_INFO_SREALM_STATE,
208                KrbCredInfoStatesEnum.KRB_CRED_INFO_SNAME_TAG_STATE,
209                KerberosConstants.KRB_CRED_INFO_SNAME_TAG,
210                new StoreSName() );
211
212        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_SNAME_TAG_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_CADDR_TAG] =
213            new GrammarTransition<KrbCredInfoContainer>(
214                KrbCredInfoStatesEnum.KRB_CRED_INFO_SNAME_TAG_STATE,
215                KrbCredInfoStatesEnum.KRB_CRED_INFO_CADDR_TAG_STATE,
216                KerberosConstants.KRB_CRED_INFO_CADDR_TAG,
217                new StoreCaddr() );
218
219        // ---------------------------- OPTIONAL transitions ------------------------
220
221        // transition from key to pname
222        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_KEY_TAG_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_PNAME_TAG] =
223            new GrammarTransition<KrbCredInfoContainer>(
224                KrbCredInfoStatesEnum.KRB_CRED_INFO_KEY_TAG_STATE,
225                KrbCredInfoStatesEnum.KRB_CRED_INFO_PNAME_TAG_STATE,
226                KerberosConstants.KRB_CRED_INFO_PNAME_TAG,
227                new StorePName() );
228
229        // transition from key to flags
230        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_KEY_TAG_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_FLAGS_TAG] =
231            new GrammarTransition<KrbCredInfoContainer>(
232                KrbCredInfoStatesEnum.KRB_CRED_INFO_KEY_TAG_STATE,
233                KrbCredInfoStatesEnum.KRB_CRED_INFO_FLAGS_TAG_STATE,
234                KerberosConstants.KRB_CRED_INFO_FLAGS_TAG,
235                new CheckNotNullLength<KrbCredInfoContainer>() );
236
237        // transition from key to authtime
238        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_KEY_TAG_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_AUTHTIME_TAG] =
239            new GrammarTransition<KrbCredInfoContainer>(
240                KrbCredInfoStatesEnum.KRB_CRED_INFO_KEY_TAG_STATE,
241                KrbCredInfoStatesEnum.KRB_CRED_INFO_AUTHTIME_TAG_STATE,
242                KerberosConstants.KRB_CRED_INFO_AUTHTIME_TAG,
243                new CheckNotNullLength<KrbCredInfoContainer>() );
244
245        // transition from key to starttime
246        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_KEY_TAG_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_STARTTIME_TAG] =
247            new GrammarTransition<KrbCredInfoContainer>(
248                KrbCredInfoStatesEnum.KRB_CRED_INFO_KEY_TAG_STATE,
249                KrbCredInfoStatesEnum.KRB_CRED_INFO_STARTTIME_TAG_STATE,
250                KerberosConstants.KRB_CRED_INFO_STARTTIME_TAG,
251                new CheckNotNullLength<KrbCredInfoContainer>() );
252
253        // transition from key to endtime
254        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_KEY_TAG_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_ENDTIME_TAG] =
255            new GrammarTransition<KrbCredInfoContainer>(
256                KrbCredInfoStatesEnum.KRB_CRED_INFO_KEY_TAG_STATE,
257                KrbCredInfoStatesEnum.KRB_CRED_INFO_ENDTIME_TAG_STATE,
258                KerberosConstants.KRB_CRED_INFO_ENDTIME_TAG,
259                new CheckNotNullLength<KrbCredInfoContainer>() );
260
261        // transition from key to renewtill
262        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_KEY_TAG_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_RENEWTILL_TAG] =
263            new GrammarTransition<KrbCredInfoContainer>(
264                KrbCredInfoStatesEnum.KRB_CRED_INFO_KEY_TAG_STATE,
265                KrbCredInfoStatesEnum.KRB_CRED_INFO_RENEWTILL_TAG_STATE,
266                KerberosConstants.KRB_CRED_INFO_RENEWTILL_TAG,
267                new CheckNotNullLength<KrbCredInfoContainer>() );
268
269        // transition from key to srealm
270        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_KEY_TAG_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_SREALM_TAG] =
271            new GrammarTransition<KrbCredInfoContainer>(
272                KrbCredInfoStatesEnum.KRB_CRED_INFO_KEY_TAG_STATE,
273                KrbCredInfoStatesEnum.KRB_CRED_INFO_SREALM_TAG_STATE,
274                KerberosConstants.KRB_CRED_INFO_SREALM_TAG,
275                new CheckNotNullLength<KrbCredInfoContainer>() );
276
277        // transition from key to sname
278        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_KEY_TAG_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_SNAME_TAG] =
279            new GrammarTransition<KrbCredInfoContainer>(
280                KrbCredInfoStatesEnum.KRB_CRED_INFO_KEY_TAG_STATE,
281                KrbCredInfoStatesEnum.KRB_CRED_INFO_SNAME_TAG_STATE,
282                KerberosConstants.KRB_CRED_INFO_SNAME_TAG,
283                new StoreSName() );
284
285        // transition from key to caddr
286        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_KEY_TAG_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_CADDR_TAG] =
287            new GrammarTransition<KrbCredInfoContainer>(
288                KrbCredInfoStatesEnum.KRB_CRED_INFO_KEY_TAG_STATE,
289                KrbCredInfoStatesEnum.KRB_CRED_INFO_CADDR_TAG_STATE,
290                KerberosConstants.KRB_CRED_INFO_CADDR_TAG,
291                new StoreCaddr() );
292
293        // transition from prealm to flags
294        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_PREALM_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_FLAGS_TAG] =
295            new GrammarTransition<KrbCredInfoContainer>(
296                KrbCredInfoStatesEnum.KRB_CRED_INFO_PREALM_STATE,
297                KrbCredInfoStatesEnum.KRB_CRED_INFO_FLAGS_TAG_STATE,
298                KerberosConstants.KRB_CRED_INFO_FLAGS_TAG,
299                new CheckNotNullLength<KrbCredInfoContainer>() );
300
301        // transition from prealm to authtime
302        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_PREALM_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_AUTHTIME_TAG] =
303            new GrammarTransition<KrbCredInfoContainer>(
304                KrbCredInfoStatesEnum.KRB_CRED_INFO_PREALM_STATE,
305                KrbCredInfoStatesEnum.KRB_CRED_INFO_AUTHTIME_TAG_STATE,
306                KerberosConstants.KRB_CRED_INFO_AUTHTIME_TAG,
307                new CheckNotNullLength<KrbCredInfoContainer>() );
308
309        // transition from prealm to starttime
310        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_PREALM_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_STARTTIME_TAG] =
311            new GrammarTransition<KrbCredInfoContainer>(
312                KrbCredInfoStatesEnum.KRB_CRED_INFO_PREALM_STATE,
313                KrbCredInfoStatesEnum.KRB_CRED_INFO_STARTTIME_TAG_STATE,
314                KerberosConstants.KRB_CRED_INFO_STARTTIME_TAG,
315                new CheckNotNullLength<KrbCredInfoContainer>() );
316
317        // transition from prealm to endtime
318        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_PREALM_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_ENDTIME_TAG] =
319            new GrammarTransition<KrbCredInfoContainer>(
320                KrbCredInfoStatesEnum.KRB_CRED_INFO_PREALM_STATE,
321                KrbCredInfoStatesEnum.KRB_CRED_INFO_ENDTIME_TAG_STATE,
322                KerberosConstants.KRB_CRED_INFO_ENDTIME_TAG,
323                new CheckNotNullLength<KrbCredInfoContainer>() );
324
325        // transition from prealm to renewtill
326        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_PREALM_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_RENEWTILL_TAG] =
327            new GrammarTransition<KrbCredInfoContainer>(
328                KrbCredInfoStatesEnum.KRB_CRED_INFO_PREALM_STATE,
329                KrbCredInfoStatesEnum.KRB_CRED_INFO_RENEWTILL_TAG_STATE,
330                KerberosConstants.KRB_CRED_INFO_RENEWTILL_TAG,
331                new CheckNotNullLength<KrbCredInfoContainer>() );
332
333        // transition from prealm to srealm
334        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_PREALM_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_SREALM_TAG] =
335            new GrammarTransition<KrbCredInfoContainer>(
336                KrbCredInfoStatesEnum.KRB_CRED_INFO_PREALM_STATE,
337                KrbCredInfoStatesEnum.KRB_CRED_INFO_SREALM_TAG_STATE,
338                KerberosConstants.KRB_CRED_INFO_SREALM_TAG,
339                new CheckNotNullLength<KrbCredInfoContainer>() );
340
341        // transition from prealm to sname
342        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_PREALM_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_SNAME_TAG] =
343            new GrammarTransition<KrbCredInfoContainer>(
344                KrbCredInfoStatesEnum.KRB_CRED_INFO_PREALM_STATE,
345                KrbCredInfoStatesEnum.KRB_CRED_INFO_SNAME_TAG_STATE,
346                KerberosConstants.KRB_CRED_INFO_SNAME_TAG,
347                new StoreSName() );
348
349        // transition from prealm to caddr
350        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_PREALM_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_CADDR_TAG] =
351            new GrammarTransition<KrbCredInfoContainer>(
352                KrbCredInfoStatesEnum.KRB_CRED_INFO_PREALM_STATE,
353                KrbCredInfoStatesEnum.KRB_CRED_INFO_CADDR_TAG_STATE,
354                KerberosConstants.KRB_CRED_INFO_CADDR_TAG,
355                new StoreCaddr() );
356
357        // transition from pname to authtime
358        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_PNAME_TAG_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_AUTHTIME_TAG] =
359            new GrammarTransition<KrbCredInfoContainer>(
360                KrbCredInfoStatesEnum.KRB_CRED_INFO_PNAME_TAG_STATE,
361                KrbCredInfoStatesEnum.KRB_CRED_INFO_AUTHTIME_TAG_STATE,
362                KerberosConstants.KRB_CRED_INFO_AUTHTIME_TAG,
363                new CheckNotNullLength<KrbCredInfoContainer>() );
364
365        // transition from pname to starttime
366        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_PNAME_TAG_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_STARTTIME_TAG] =
367            new GrammarTransition<KrbCredInfoContainer>(
368                KrbCredInfoStatesEnum.KRB_CRED_INFO_PNAME_TAG_STATE,
369                KrbCredInfoStatesEnum.KRB_CRED_INFO_STARTTIME_TAG_STATE,
370                KerberosConstants.KRB_CRED_INFO_STARTTIME_TAG,
371                new CheckNotNullLength<KrbCredInfoContainer>() );
372
373        // transition from pname to endtime
374        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_PNAME_TAG_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_ENDTIME_TAG] =
375            new GrammarTransition<KrbCredInfoContainer>(
376                KrbCredInfoStatesEnum.KRB_CRED_INFO_PNAME_TAG_STATE,
377                KrbCredInfoStatesEnum.KRB_CRED_INFO_ENDTIME_TAG_STATE,
378                KerberosConstants.KRB_CRED_INFO_ENDTIME_TAG,
379                new CheckNotNullLength<KrbCredInfoContainer>() );
380
381        // transition from pname to renewtill
382        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_PNAME_TAG_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_RENEWTILL_TAG] =
383            new GrammarTransition<KrbCredInfoContainer>(
384                KrbCredInfoStatesEnum.KRB_CRED_INFO_PNAME_TAG_STATE,
385                KrbCredInfoStatesEnum.KRB_CRED_INFO_RENEWTILL_TAG_STATE,
386                KerberosConstants.KRB_CRED_INFO_RENEWTILL_TAG,
387                new CheckNotNullLength<KrbCredInfoContainer>() );
388
389        // transition from pname to srealm
390        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_PNAME_TAG_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_SREALM_TAG] =
391            new GrammarTransition<KrbCredInfoContainer>(
392                KrbCredInfoStatesEnum.KRB_CRED_INFO_PNAME_TAG_STATE,
393                KrbCredInfoStatesEnum.KRB_CRED_INFO_SREALM_TAG_STATE,
394                KerberosConstants.KRB_CRED_INFO_SREALM_TAG,
395                new CheckNotNullLength<KrbCredInfoContainer>() );
396
397        // transition from pname to sname
398        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_PNAME_TAG_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_SNAME_TAG] =
399            new GrammarTransition<KrbCredInfoContainer>(
400                KrbCredInfoStatesEnum.KRB_CRED_INFO_PNAME_TAG_STATE,
401                KrbCredInfoStatesEnum.KRB_CRED_INFO_SNAME_TAG_STATE,
402                KerberosConstants.KRB_CRED_INFO_SNAME_TAG,
403                new StoreSName() );
404
405        // transition from pname to caddr
406        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_PNAME_TAG_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_CADDR_TAG] =
407            new GrammarTransition<KrbCredInfoContainer>(
408                KrbCredInfoStatesEnum.KRB_CRED_INFO_PNAME_TAG_STATE,
409                KrbCredInfoStatesEnum.KRB_CRED_INFO_CADDR_TAG_STATE,
410                KerberosConstants.KRB_CRED_INFO_CADDR_TAG,
411                new StoreCaddr() );
412
413        // transition from flags to starttime
414        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_FLAGS_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_STARTTIME_TAG] =
415            new GrammarTransition<KrbCredInfoContainer>(
416                KrbCredInfoStatesEnum.KRB_CRED_INFO_FLAGS_STATE,
417                KrbCredInfoStatesEnum.KRB_CRED_INFO_STARTTIME_TAG_STATE,
418                KerberosConstants.KRB_CRED_INFO_STARTTIME_TAG,
419                new CheckNotNullLength<KrbCredInfoContainer>() );
420
421        // transition from flags to endtime
422        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_FLAGS_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_ENDTIME_TAG] =
423            new GrammarTransition<KrbCredInfoContainer>(
424                KrbCredInfoStatesEnum.KRB_CRED_INFO_FLAGS_STATE,
425                KrbCredInfoStatesEnum.KRB_CRED_INFO_ENDTIME_TAG_STATE,
426                KerberosConstants.KRB_CRED_INFO_ENDTIME_TAG,
427                new CheckNotNullLength<KrbCredInfoContainer>() );
428
429        // transition from flags to renewtill
430        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_FLAGS_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_RENEWTILL_TAG] =
431            new GrammarTransition<KrbCredInfoContainer>(
432                KrbCredInfoStatesEnum.KRB_CRED_INFO_FLAGS_STATE,
433                KrbCredInfoStatesEnum.KRB_CRED_INFO_RENEWTILL_TAG_STATE,
434                KerberosConstants.KRB_CRED_INFO_RENEWTILL_TAG,
435                new CheckNotNullLength<KrbCredInfoContainer>() );
436
437        // transition from flags to srealm
438        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_FLAGS_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_SREALM_TAG] =
439            new GrammarTransition<KrbCredInfoContainer>(
440                KrbCredInfoStatesEnum.KRB_CRED_INFO_FLAGS_STATE,
441                KrbCredInfoStatesEnum.KRB_CRED_INFO_SREALM_TAG_STATE,
442                KerberosConstants.KRB_CRED_INFO_SREALM_TAG,
443                new CheckNotNullLength<KrbCredInfoContainer>() );
444
445        // transition from flags to sname
446        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_FLAGS_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_SNAME_TAG] =
447            new GrammarTransition<KrbCredInfoContainer>(
448                KrbCredInfoStatesEnum.KRB_CRED_INFO_FLAGS_STATE,
449                KrbCredInfoStatesEnum.KRB_CRED_INFO_SNAME_TAG_STATE,
450                KerberosConstants.KRB_CRED_INFO_SNAME_TAG,
451                new StoreSName() );
452
453        // transition from flags to caddr
454        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_FLAGS_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_CADDR_TAG] =
455            new GrammarTransition<KrbCredInfoContainer>(
456                KrbCredInfoStatesEnum.KRB_CRED_INFO_FLAGS_STATE,
457                KrbCredInfoStatesEnum.KRB_CRED_INFO_CADDR_TAG_STATE,
458                KerberosConstants.KRB_CRED_INFO_CADDR_TAG,
459                new StoreCaddr() );
460
461        // transition from authtime to endtime
462        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_AUTHTIME_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_ENDTIME_TAG] =
463            new GrammarTransition<KrbCredInfoContainer>(
464                KrbCredInfoStatesEnum.KRB_CRED_INFO_AUTHTIME_STATE,
465                KrbCredInfoStatesEnum.KRB_CRED_INFO_ENDTIME_TAG_STATE,
466                KerberosConstants.KRB_CRED_INFO_ENDTIME_TAG,
467                new CheckNotNullLength<KrbCredInfoContainer>() );
468
469        // transition from authtime to renewtill
470        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_AUTHTIME_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_RENEWTILL_TAG] =
471            new GrammarTransition<KrbCredInfoContainer>(
472                KrbCredInfoStatesEnum.KRB_CRED_INFO_AUTHTIME_STATE,
473                KrbCredInfoStatesEnum.KRB_CRED_INFO_RENEWTILL_TAG_STATE,
474                KerberosConstants.KRB_CRED_INFO_RENEWTILL_TAG,
475                new CheckNotNullLength<KrbCredInfoContainer>() );
476
477        // transition from authtime to srealm
478        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_AUTHTIME_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_SREALM_TAG] =
479            new GrammarTransition<KrbCredInfoContainer>(
480                KrbCredInfoStatesEnum.KRB_CRED_INFO_AUTHTIME_STATE,
481                KrbCredInfoStatesEnum.KRB_CRED_INFO_SREALM_TAG_STATE,
482                KerberosConstants.KRB_CRED_INFO_SREALM_TAG,
483                new CheckNotNullLength<KrbCredInfoContainer>() );
484
485        // transition from authtime to sname
486        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_AUTHTIME_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_SNAME_TAG] =
487            new GrammarTransition<KrbCredInfoContainer>(
488                KrbCredInfoStatesEnum.KRB_CRED_INFO_AUTHTIME_STATE,
489                KrbCredInfoStatesEnum.KRB_CRED_INFO_SNAME_TAG_STATE,
490                KerberosConstants.KRB_CRED_INFO_SNAME_TAG,
491                new StoreSName() );
492
493        // transition from authtime to caddr
494        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_AUTHTIME_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_CADDR_TAG] =
495            new GrammarTransition<KrbCredInfoContainer>(
496                KrbCredInfoStatesEnum.KRB_CRED_INFO_AUTHTIME_STATE,
497                KrbCredInfoStatesEnum.KRB_CRED_INFO_CADDR_TAG_STATE,
498                KerberosConstants.KRB_CRED_INFO_CADDR_TAG,
499                new StoreCaddr() );
500
501        // transition from starttime to renewtill
502        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_STARTTIME_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_RENEWTILL_TAG] =
503            new GrammarTransition<KrbCredInfoContainer>(
504                KrbCredInfoStatesEnum.KRB_CRED_INFO_STARTTIME_STATE,
505                KrbCredInfoStatesEnum.KRB_CRED_INFO_RENEWTILL_TAG_STATE,
506                KerberosConstants.KRB_CRED_INFO_RENEWTILL_TAG,
507                new CheckNotNullLength<KrbCredInfoContainer>() );
508
509        // transition from starttime to srealm
510        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_STARTTIME_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_SREALM_TAG] =
511            new GrammarTransition<KrbCredInfoContainer>(
512                KrbCredInfoStatesEnum.KRB_CRED_INFO_STARTTIME_STATE,
513                KrbCredInfoStatesEnum.KRB_CRED_INFO_SREALM_TAG_STATE,
514                KerberosConstants.KRB_CRED_INFO_SREALM_TAG,
515                new CheckNotNullLength<KrbCredInfoContainer>() );
516
517        // transition from starttime to sname
518        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_STARTTIME_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_SNAME_TAG] =
519            new GrammarTransition<KrbCredInfoContainer>(
520                KrbCredInfoStatesEnum.KRB_CRED_INFO_STARTTIME_STATE,
521                KrbCredInfoStatesEnum.KRB_CRED_INFO_SNAME_TAG_STATE,
522                KerberosConstants.KRB_CRED_INFO_SNAME_TAG,
523                new StoreSName() );
524
525        // transition from starttime to caddr
526        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_STARTTIME_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_CADDR_TAG] =
527            new GrammarTransition<KrbCredInfoContainer>(
528                KrbCredInfoStatesEnum.KRB_CRED_INFO_STARTTIME_STATE,
529                KrbCredInfoStatesEnum.KRB_CRED_INFO_CADDR_TAG_STATE,
530                KerberosConstants.KRB_CRED_INFO_CADDR_TAG,
531                new StoreCaddr() );
532
533        // transition from endtime to srealm
534        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_ENDTIME_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_SREALM_TAG] =
535            new GrammarTransition<KrbCredInfoContainer>(
536                KrbCredInfoStatesEnum.KRB_CRED_INFO_ENDTIME_STATE,
537                KrbCredInfoStatesEnum.KRB_CRED_INFO_SREALM_TAG_STATE,
538                KerberosConstants.KRB_CRED_INFO_SREALM_TAG,
539                new CheckNotNullLength<KrbCredInfoContainer>() );
540
541        // transition from endtime to sname
542        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_ENDTIME_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_SNAME_TAG] =
543            new GrammarTransition<KrbCredInfoContainer>(
544                KrbCredInfoStatesEnum.KRB_CRED_INFO_ENDTIME_STATE,
545                KrbCredInfoStatesEnum.KRB_CRED_INFO_SNAME_TAG_STATE,
546                KerberosConstants.KRB_CRED_INFO_SNAME_TAG,
547                new StoreSName() );
548
549        // transition from endtime to caddr
550        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_ENDTIME_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_CADDR_TAG] =
551            new GrammarTransition<KrbCredInfoContainer>(
552                KrbCredInfoStatesEnum.KRB_CRED_INFO_ENDTIME_STATE,
553                KrbCredInfoStatesEnum.KRB_CRED_INFO_CADDR_TAG_STATE,
554                KerberosConstants.KRB_CRED_INFO_CADDR_TAG,
555                new StoreCaddr() );
556
557        // transition from renewtill to sname
558        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_RENEWTILL_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_SNAME_TAG] =
559            new GrammarTransition<KrbCredInfoContainer>(
560                KrbCredInfoStatesEnum.KRB_CRED_INFO_RENEWTILL_STATE,
561                KrbCredInfoStatesEnum.KRB_CRED_INFO_SNAME_TAG_STATE,
562                KerberosConstants.KRB_CRED_INFO_SNAME_TAG,
563                new StoreSName() );
564
565        // transition from renewtill to caddr
566        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_RENEWTILL_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_CADDR_TAG] =
567            new GrammarTransition<KrbCredInfoContainer>(
568                KrbCredInfoStatesEnum.KRB_CRED_INFO_RENEWTILL_STATE,
569                KrbCredInfoStatesEnum.KRB_CRED_INFO_CADDR_TAG_STATE,
570                KerberosConstants.KRB_CRED_INFO_CADDR_TAG,
571                new StoreCaddr() );
572
573        // transition from srealm to caddr
574        super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_SREALM_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_CADDR_TAG] =
575            new GrammarTransition<KrbCredInfoContainer>(
576                KrbCredInfoStatesEnum.KRB_CRED_INFO_SREALM_STATE,
577                KrbCredInfoStatesEnum.KRB_CRED_INFO_CADDR_TAG_STATE,
578                KerberosConstants.KRB_CRED_INFO_CADDR_TAG,
579                new StoreCaddr() );
580    }
581
582
583    /**
584     * Get the instance of this grammar
585     *
586     * @return An instance on the KrbCredInfo Grammar
587     */
588    public static Grammar<KrbCredInfoContainer> getInstance()
589    {
590        return instance;
591    }
592}