opencard.core.terminal
Class APDU
java.lang.Object
|
+--opencard.core.terminal.APDU
- Direct Known Subclasses:
- CommandAPDU, ResponseAPDU
- public abstract class APDU
- extends java.lang.Object
An APDU represents a Application Protocol Data Unit which is the
basic unit of communication with a smart card.
- Version:
- $Id: APDU.java,v 1.1.1.1 1999/10/05 15:34:31 damke Exp $
- See Also:
CommandAPDU,
ResponseAPDU
|
Field Summary |
protected byte[] |
apdu_buffer
A buffer to hold the re-usable command APDU. |
protected int |
apdu_length
The length of the command APDU currently in the buffer. |
|
Constructor Summary |
APDU(byte[] buffer)
Creates a new re-usable APDU and initializes it with
the given buffer. |
APDU(byte[] buffer,
int length)
Creates a new re-usable APDU and initializes it with
the given buffer.
|
APDU(int size)
Creates a new re-usable APDU with a given buffer size.
|
|
Method Summary |
void |
append(byte b)
Appends the given byte to the internally buffered APDU. |
void |
append(byte[] bytes)
Appends the given byte array to the internally buffered APDU. |
byte[] |
getBuffer()
Returns the internal APDU buffer.
|
int |
getByte(int index)
Gets the byte at the specified position in the buffer.
|
byte[] |
getBytes()
Returns a byte array holding the buffered APDU.
|
int |
getLength()
Returns the length of the buffered APDU. |
void |
setByte(int index,
int value)
Sets the byte at the specified position in the buffer.
|
void |
setLength(int length)
Sets the length of valid range within the APDU buffer.
|
java.lang.String |
toString()
Returns a human-readable string representation of this APDU.
|
| Methods inherited from class java.lang.Object |
clone,
equals,
finalize,
getClass,
hashCode,
notify,
notifyAll,
wait,
wait,
wait |
apdu_buffer
protected byte[] apdu_buffer
- A buffer to hold the re-usable command APDU.
apdu_length
protected int apdu_length
- The length of the command APDU currently in the buffer.
APDU
public APDU(byte[] buffer)
- Creates a new re-usable APDU and initializes it with
the given buffer. The internal buffer's length is set to the
length of the buffer passed.
- Parameters:
buffer - the byte array to be used for holding the APDU- See Also:
getLength()
APDU
public APDU(byte[] buffer,
int length)
- Creates a new re-usable APDU and initializes it with
the given buffer.
The buffer is assumed to hold an APDU. The length of the
internally buffered APDU is set to length.
- Parameters:
buffer - the byte array to be used for holding the APDUlength - the length of the APDU currently in the buffer- Throws:
- java.lang.IndexOutOfBoundsException - length exceeds the size of the array bytes.
- See Also:
getLength()
APDU
public APDU(int size)
- Creates a new re-usable APDU with a given buffer size.
A new buffer with the given size is allocated. The length of the
internally buffered APDU is set to 0.
- Parameters:
size - the size of the buffer to create- See Also:
getLength()
append
public void append(byte[] bytes)
throws java.lang.IndexOutOfBoundsException
- Appends the given byte array to the internally buffered APDU.
- Parameters:
bytes - the byte array to be appended- Throws:
- java.lang.IndexOutOfBoundsException - The buffer size is exceeded.
append
public void append(byte b)
throws java.lang.IndexOutOfBoundsException
- Appends the given byte to the internally buffered APDU.
- Parameters:
b - the byte to be appended- Throws:
- java.lang.IndexOutOfBoundsException - The buffer size is exceeded.
getBuffer
public final byte[] getBuffer()
- Returns the internal APDU buffer.
This method allows complex manipulations of the buffered APDU,
for example MAC calculation. If the length of the APDU is changed
by such an operation, setLength has to be used to store
the new length.
- Returns:
- the buffer that holds the current APDU
- See Also:
setLength(int)
getByte
public final int getByte(int index)
- Gets the byte at the specified position in the buffer.
The byte is converted to a positive integer in the range 0..255.
This method can only be used to access the APDU currently stored.
It is not possible to read beyond the end of the APDU.
- Parameters:
index - the position in the buffer- Returns:
- the value at the given position,
or -1 if the position is invalid
- See Also:
setByte(int, int),
getLength()
getBytes
public final byte[] getBytes()
- Returns a byte array holding the buffered APDU.
The byte array returned gets allocated with the exact size of the
buffered APDU. To get direct access to the internal buffer, use
getBuffer.
- Returns:
- the buffered APDU, copied into a new array
- See Also:
getBuffer()
getLength
public final int getLength()
- Returns the length of the buffered APDU.
- Returns:
- the length of the APDU currently stored
setByte
public final void setByte(int index,
int value)
- Sets the byte at the specified position in the buffer.
The byte is passed as an integer, for consistence with getByte.
This method can only be used to modify an APDU already stored.
It is not possible to set bytes beyond the end of the current APDU.
The method will behave as a no-op if this happens.
Use append(byte) to extend the APDU.
- Parameters:
index - the position in the buffervalue - the byte to store there- See Also:
getByte(int),
append(byte)
setLength
public final void setLength(int length)
throws java.lang.IndexOutOfBoundsException
- Sets the length of valid range within the APDU buffer.
This method can be used to cut off the end of the APDU.
It can also be used to increase the size of the APDU. In this case,
it is the caller's responsibility to fill the additional bytes with
useful information.
- Parameters:
length - new length of the valid range- Throws:
- java.lang.IndexOutOfBoundsException - thrown when the buffer size is exceeded
toString
public java.lang.String toString()
- Returns a human-readable string representation of this APDU.
This method does not use caching but creates the string from
scratch on each invocation.
- Returns:
- a hex dump of the APDU currently stored
- Overrides:
- toString in class java.lang.Object
|