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.encKrbCredPart;
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.encKrbCredPart.actions.EncKrbCredPartInit;
30  import org.apache.directory.shared.kerberos.codec.encKrbCredPart.actions.StoreNonce;
31  import org.apache.directory.shared.kerberos.codec.encKrbCredPart.actions.StoreRecipientAddress;
32  import org.apache.directory.shared.kerberos.codec.encKrbCredPart.actions.StoreSenderAddress;
33  import org.apache.directory.shared.kerberos.codec.encKrbCredPart.actions.StoreTicketInfo;
34  import org.apache.directory.shared.kerberos.codec.encKrbCredPart.actions.StoreTimestamp;
35  import org.apache.directory.shared.kerberos.codec.encKrbCredPart.actions.StoreUsec;
36  import org.slf4j.Logger;
37  import org.slf4j.LoggerFactory;
38  
39  
40  /**
41   * This class implements the EncKrbCredPart structure. All the actions are declared
42   * in this class. As it is a singleton, these declaration are only done once. If
43   * an action is to be added or modified, this is where the work is to be done !
44   *
45   * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
46   */
47  public final class EncKrbCredPartGrammar extends AbstractGrammar<EncKrbCredPartContainer>
48  {
49      /** The logger */
50      static final Logger LOG = LoggerFactory.getLogger( EncKrbCredPartGrammar.class );
51  
52      /** A speedup for logger */
53      static final boolean IS_DEBUG = LOG.isDebugEnabled();
54  
55      /** The instance of grammar. EncKrbCredPartGrammar is a singleton */
56      private static Grammar<EncKrbCredPartContainer> instance = new EncKrbCredPartGrammar();
57  
58  
59      /**
60       * Creates a new EncKrbCredPartGrammar object.
61       */
62      @SuppressWarnings("unchecked")
63      private EncKrbCredPartGrammar()
64      {
65          setName( EncKrbCredPartGrammar.class.getName() );
66  
67          // Create the transitions table
68          super.transitions = new GrammarTransition[EncKrbCredPartStatesEnum.LAST_ENC_KRB_CRED_PART_STATE.ordinal()][256];
69  
70          // ============================================================================================
71          // EncKrbCredPart
72          // ============================================================================================
73          super.transitions[EncKrbCredPartStatesEnum.START_STATE.ordinal()][KerberosConstants.ENC_KRB_CRED_PART_TAG] =
74              new GrammarTransition<EncKrbCredPartContainer>(
75                  EncKrbCredPartStatesEnum.START_STATE, EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_TAG_STATE,
76                  KerberosConstants.ENC_KRB_CRED_PART_TAG,
77                  new EncKrbCredPartInit() );
78  
79          super.transitions[EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_TAG_STATE.ordinal()][UniversalTag.SEQUENCE
80              .getValue()] =
81              new GrammarTransition<EncKrbCredPartContainer>(
82                  EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_TAG_STATE,
83                  EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_SEQ_TAG_STATE,
84                  UniversalTag.SEQUENCE,
85                  new CheckNotNullLength<EncKrbCredPartContainer>() );
86  
87          super.transitions[EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_SEQ_TAG_STATE.ordinal()][KerberosConstants.ENC_KRB_CRED_TICKET_INFO_TAG] =
88              new GrammarTransition<EncKrbCredPartContainer>(
89                  EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_SEQ_TAG_STATE,
90                  EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_TICKET_INFO_TAG_STATE,
91                  KerberosConstants.ENC_KRB_CRED_TICKET_INFO_TAG,
92                  new CheckNotNullLength<EncKrbCredPartContainer>() );
93  
94          super.transitions[EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_TICKET_INFO_TAG_STATE.ordinal()][UniversalTag.SEQUENCE
95              .getValue()] =
96              new GrammarTransition<EncKrbCredPartContainer>(
97                  EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_TICKET_INFO_TAG_STATE,
98                  EncKrbCredPartStatesEnum.ENC_KRB_CRED_PART_TICKET_INFO_STATE,
99                  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 }