OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libjava/] [classpath/] [gnu/] [javax/] [crypto/] [assembly/] [Assembly.java] - Blame information for rev 769

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 769 jeremybenn
/* Assembly.java --
2
   Copyright (C) 2003, 2006 Free Software Foundation, Inc.
3
 
4
This file is a part of GNU Classpath.
5
 
6
GNU Classpath is free software; you can redistribute it and/or modify
7
it under the terms of the GNU General Public License as published by
8
the Free Software Foundation; either version 2 of the License, or (at
9
your option) any later version.
10
 
11
GNU Classpath is distributed in the hope that it will be useful, but
12
WITHOUT ANY WARRANTY; without even the implied warranty of
13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14
General Public License for more details.
15
 
16
You should have received a copy of the GNU General Public License
17
along with GNU Classpath; if not, write to the Free Software
18
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
19
USA
20
 
21
Linking this library statically or dynamically with other modules is
22
making a combined work based on this library.  Thus, the terms and
23
conditions of the GNU General Public License cover the whole
24
combination.
25
 
26
As a special exception, the copyright holders of this library give you
27
permission to link this library with independent modules to produce an
28
executable, regardless of the license terms of these independent
29
modules, and to copy and distribute the resulting executable under
30
terms of your choice, provided that you also meet, for each linked
31
independent module, the terms and conditions of the license of that
32
module.  An independent module is a module which is not derived from
33
or based on this library.  If you modify this library, you may extend
34
this exception to your version of the library, but you are not
35
obligated to do so.  If you do not wish to do so, delete this
36
exception statement from your version.  */
37
 
38
 
39
package gnu.javax.crypto.assembly;
40
 
41
import java.util.Map;
42
 
43
/**
44
 * An <code>Assembly</code> is a construction consisting of a chain of
45
 * {@link Transformer} elements; each wired in pre- or post- transformation
46
 * mode. This chain is terminated by one <code>LoopbackTransformer</code>
47
 * element.
48
 * <p>
49
 * Once constructed, and correctly initialised, the bulk of the methods
50
 * available on the <code>Assembly</code> are delegated to the <i>head</i> of
51
 * the {@link Transformer} chain of the <code>Assembly</code>.
52
 *
53
 * @see Transformer
54
 */
55
public class Assembly
56
{
57
  public static final String DIRECTION = "gnu.crypto.assembly.assembly.direction";
58
 
59
  /** Flag that tells if the instance is initialised or not; and if yes how. */
60
  private Direction wired;
61
 
62
  /** The first Transformer in the chain. */
63
  private Transformer head;
64
 
65
  /**
66
   * Trivial constructor that sets the <i>chain</i> to a
67
   * <code>LoopbackTransformer</code>.
68
   */
69
  public Assembly()
70
  {
71
    super();
72
 
73
    wired = null;
74
    head = new LoopbackTransformer();
75
  }
76
 
77
  /**
78
   * Adds the designated {@link Transformer} and signals that it should operate
79
   * in pre-processing mode; i.e. it should apply its internal transformation
80
   * algorithm on the input data stream, <b>before</b> it passes that stream to
81
   * the next element in the <i>chain</i>.
82
   *
83
   * @param t the {@link Transformer} to add at the head of the current chain.
84
   * @throws IllegalArgumentException if the designated {@link Transformer} has
85
   *           a non-null tail; i.e. it is already an element of a chain.
86
   */
87
  public void addPreTransformer(Transformer t)
88
  {
89
    wireTransformer(t, Operation.PRE_PROCESSING);
90
  }
91
 
92
  /**
93
   * Adds the designated {@link Transformer} and signals that it should operate
94
   * in post-processing mode; i.e. it should apply its internal transformation
95
   * algorithm on the input data stream, <b>after</b> it passes that stream to
96
   * the next element in the <i>chain</i>.
97
   *
98
   * @param t the {@link Transformer} to add at the head of the current chain.
99
   * @throws IllegalArgumentException if the designated {@link Transformer} has
100
   *           a non-null tail; i.e. it is already an element of a chain.
101
   */
102
  public void addPostTransformer(Transformer t)
103
  {
104
    wireTransformer(t, Operation.POST_PROCESSING);
105
  }
106
 
107
  /**
108
   * Initialises the <code>Assembly</code> for operation with specific
109
   * characteristics.
110
   *
111
   * @param attributes a set of name-value pairs that describes the desired
112
   *          future behaviour of this instance.
113
   * @throws IllegalStateException if the instance is already initialised.
114
   */
115
  public void init(Map attributes) throws TransformerException
116
  {
117
    if (wired != null)
118
      throw new IllegalStateException();
119
    Direction flow = (Direction) attributes.get(DIRECTION);
120
    if (flow == null)
121
      flow = Direction.FORWARD;
122
    attributes.put(Transformer.DIRECTION, flow);
123
    head.init(attributes);
124
    wired = flow;
125
  }
126
 
127
  /**
128
   * Resets the <code>Assembly</code> for re-initialisation and use with other
129
   * characteristics. This method always succeeds.
130
   */
131
  public void reset()
132
  {
133
    head.reset();
134
    wired = null;
135
  }
136
 
137
  /**
138
   * Convenience method that calls the method with same name and three
139
   * arguments, using a byte array of length <code>1</code> whose contents are
140
   * the designated byte.
141
   *
142
   * @param b the byte to process.
143
   * @return the result of transformation.
144
   * @throws IllegalStateException if the instance is not initialised.
145
   * @throws TransformerException if a transformation-related exception occurs
146
   *           during the operation.
147
   * @see #update(byte[], int, int)
148
   */
149
  public byte[] update(byte b) throws TransformerException
150
  {
151
    return update(new byte[] { b }, 0, 1);
152
  }
153
 
154
  /**
155
   * Convenience method that calls the method with same name and three
156
   * arguments. All bytes in <code>in</code>, starting from index position
157
   * <code>0</code> are considered.
158
   *
159
   * @param in the input data bytes.
160
   * @return the result of transformation.
161
   * @throws IllegalStateException if the instance is not initialised.
162
   * @throws TransformerException if a transformation-related exception occurs
163
   *           during the operation.
164
   * @see #update(byte[], int, int)
165
   */
166
  public byte[] update(byte[] in) throws TransformerException
167
  {
168
    return update(in, 0, in.length);
169
  }
170
 
171
  /**
172
   * Processes a designated number of bytes from a given byte array.
173
   *
174
   * @param in the input data bytes.
175
   * @param offset index of <code>in</code> from which to start considering
176
   *          data.
177
   * @param length the count of bytes to process.
178
   * @return the result of transformation.
179
   * @throws IllegalStateException if the instance is not initialised.
180
   * @throws TransformerException if a transformation-related exception occurs
181
   *           during the operation.
182
   */
183
  public byte[] update(byte[] in, int offset, int length)
184
      throws TransformerException
185
  {
186
    if (wired == null)
187
      throw new IllegalStateException();
188
    return head.update(in, offset, length);
189
  }
190
 
191
  /**
192
   * Convenience method that calls the method with same name and three arguments
193
   * using a 0-long byte array.
194
   *
195
   * @return the result of transformation.
196
   * @throws IllegalStateException if the instance is not initialised.
197
   * @throws TransformerException if a transformation-related exception occurs
198
   *           during the operation.
199
   * @see #lastUpdate(byte[], int, int)
200
   */
201
  public byte[] lastUpdate() throws TransformerException
202
  {
203
    return lastUpdate(new byte[0], 0, 0);
204
  }
205
 
206
  /**
207
   * Convenience method that calls the method with same name and three
208
   * arguments, using a byte array of length <code>1</code> whose contents are
209
   * the designated byte.
210
   *
211
   * @param b the byte to process.
212
   * @return the result of transformation.
213
   * @throws IllegalStateException if the instance is not initialised.
214
   * @throws TransformerException if a transformation-related exception occurs
215
   *           during the operation.
216
   * @see #lastUpdate(byte[], int, int)
217
   */
218
  public byte[] lastUpdate(byte b) throws TransformerException
219
  {
220
    return lastUpdate(new byte[] { b }, 0, 1);
221
  }
222
 
223
  /**
224
   * Convenience method that calls the method with same name and three
225
   * arguments. All bytes in <code>in</code>, starting from index position
226
   * <code>0</code> are considered.
227
   *
228
   * @param in the input data bytes.
229
   * @return the result of transformation.
230
   * @throws IllegalStateException if the instance is not initialised.
231
   * @throws TransformerException if a transformation-related exception occurs
232
   *           during the operation.
233
   * @see #lastUpdate(byte[], int, int)
234
   */
235
  public byte[] lastUpdate(byte[] in) throws TransformerException
236
  {
237
    return lastUpdate(in, 0, in.length);
238
  }
239
 
240
  /**
241
   * Processes a designated number of bytes from a given byte array and signals,
242
   * at the same time, that this is the last <i>push</i> operation for this
243
   * <code>Assembly</code>.
244
   *
245
   * @param in the input data bytes.
246
   * @param offset index of <code>in</code> from which to start considering
247
   *          data.
248
   * @param length the count of bytes to process.
249
   * @return the result of transformation.
250
   * @throws IllegalStateException if the instance is not initialised.
251
   * @throws TransformerException if a transformation-related exception occurs
252
   *           during the operation.
253
   */
254
  public byte[] lastUpdate(byte[] in, int offset, int length)
255
      throws TransformerException
256
  {
257
    if (wired == null)
258
      throw new IllegalStateException();
259
    byte[] result = head.lastUpdate(in, offset, length);
260
    reset();
261
    return result;
262
  }
263
 
264
  private void wireTransformer(Transformer t, Operation mode)
265
  {
266
    if (t.tail != null)
267
      throw new IllegalArgumentException();
268
    t.setMode(mode);
269
    t.tail = head;
270
    head = t;
271
  }
272
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.