View Javadoc
1   /*
2    *  Licensed to the Apache Software Foundation (ASF) under one
3    *  or more contributor license agreements.  See the NOTICE file
4    *  distributed with this work for additional information
5    *  regarding copyright ownership.  The ASF licenses this file
6    *  to you under the Apache License, Version 2.0 (the
7    *  "License"); you may not use this file except in compliance
8    *  with the License.  You may obtain a copy of the License at
9    *
10   *    http://www.apache.org/licenses/LICENSE-2.0
11   *
12   *  Unless required by applicable law or agreed to in writing,
13   *  software distributed under the License is distributed on an
14   *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   *  KIND, either express or implied.  See the License for the
16   *  specific language governing permissions and limitations
17   *  under the License.
18   *
19   */
20  package org.apache.directory.shared.kerberos.codec.krbCredInfo;
21  
22  
23  import org.apache.directory.api.asn1.actions.CheckNotNullLength;
24  import org.apache.directory.api.asn1.ber.grammar.AbstractGrammar;
25  import org.apache.directory.api.asn1.ber.grammar.Grammar;
26  import org.apache.directory.api.asn1.ber.grammar.GrammarTransition;
27  import org.apache.directory.api.asn1.ber.tlv.UniversalTag;
28  import org.apache.directory.shared.kerberos.KerberosConstants;
29  import org.apache.directory.shared.kerberos.codec.krbCredInfo.actions.KrbCredInfoInit;
30  import org.apache.directory.shared.kerberos.codec.krbCredInfo.actions.StoreAuthTime;
31  import org.apache.directory.shared.kerberos.codec.krbCredInfo.actions.StoreCaddr;
32  import org.apache.directory.shared.kerberos.codec.krbCredInfo.actions.StoreEndTime;
33  import org.apache.directory.shared.kerberos.codec.krbCredInfo.actions.StoreFlags;
34  import org.apache.directory.shared.kerberos.codec.krbCredInfo.actions.StoreKey;
35  import org.apache.directory.shared.kerberos.codec.krbCredInfo.actions.StorePName;
36  import org.apache.directory.shared.kerberos.codec.krbCredInfo.actions.StorePRealm;
37  import org.apache.directory.shared.kerberos.codec.krbCredInfo.actions.StoreRenewtill;
38  import org.apache.directory.shared.kerberos.codec.krbCredInfo.actions.StoreSName;
39  import org.apache.directory.shared.kerberos.codec.krbCredInfo.actions.StoreSRealm;
40  import org.apache.directory.shared.kerberos.codec.krbCredInfo.actions.StoreStartTime;
41  import org.slf4j.Logger;
42  import org.slf4j.LoggerFactory;
43  
44  
45  /**
46   * This class implements the KrbCredInfo structure. All the actions are declared
47   * in this class. As it is a singleton, these declaration are only done once. If
48   * an action is to be added or modified, this is where the work is to be done !
49   *
50   * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
51   */
52  public final class KrbCredInfoGrammar extends AbstractGrammar<KrbCredInfoContainer>
53  {
54      /** The logger */
55      static final Logger LOG = LoggerFactory.getLogger( KrbCredInfoGrammar.class );
56  
57      /** A speedup for logger */
58      static final boolean IS_DEBUG = LOG.isDebugEnabled();
59  
60      /** The instance of grammar. KrbCredInfoGrammar is a singleton */
61      private static Grammar<KrbCredInfoContainer> instance = new KrbCredInfoGrammar();
62  
63  
64      /**
65       * Creates a new KrbCredInfoGrammar object.
66       */
67      @SuppressWarnings("unchecked")
68      private KrbCredInfoGrammar()
69      {
70          setName( KrbCredInfoGrammar.class.getName() );
71  
72          // Create the transitions table
73          super.transitions = new GrammarTransition[KrbCredInfoStatesEnum.LAST_KRB_CRED_INFO_STATE.ordinal()][256];
74  
75          // ============================================================================================
76          // KrbCredInfo
77          // ============================================================================================
78  
79          super.transitions[KrbCredInfoStatesEnum.START_STATE.ordinal()][UniversalTag.SEQUENCE.getValue()] =
80              new GrammarTransition<KrbCredInfoContainer>(
81                  KrbCredInfoStatesEnum.START_STATE,
82                  KrbCredInfoStatesEnum.KRB_CRED_INFO_SEQ_TAG_STATE,
83                  UniversalTag.SEQUENCE,
84                  new KrbCredInfoInit() );
85  
86          super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_SEQ_TAG_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_KEY_TAG] =
87              new GrammarTransition<KrbCredInfoContainer>(
88                  KrbCredInfoStatesEnum.KRB_CRED_INFO_SEQ_TAG_STATE,
89                  KrbCredInfoStatesEnum.KRB_CRED_INFO_KEY_TAG_STATE,
90                  KerberosConstants.KRB_CRED_INFO_KEY_TAG,
91                  new StoreKey() );
92  
93          super.transitions[KrbCredInfoStatesEnum.KRB_CRED_INFO_KEY_TAG_STATE.ordinal()][KerberosConstants.KRB_CRED_INFO_PREALM_TAG] =
94              new GrammarTransition<KrbCredInfoContainer>(
95                  KrbCredInfoStatesEnum.KRB_CRED_INFO_KEY_TAG_STATE,
96                  KrbCredInfoStatesEnum.KRB_CRED_INFO_PREALM_TAG_STATE,
97                  KerberosConstants.KRB_CRED_INFO_PREALM_TAG,
98                  new CheckNotNullLength<KrbCredInfoContainer>() );
99  
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 }