Class T1Block


  • public class T1Block
    extends java.lang.Object
    The T1Block class implemenys a Java representation of the T=1 transport protocol for APDU, as defined in the ISO 7816-3 specifications. T=1 messages have the following block format: +-----+-----+-----+-------------+-----+ | NAD | PCB | LEN | ... INF ... | LRC | +-----+-----+-----+-------------+-----+ The NAD, PCB, LEN and LRC fields are one byte in length each. The INF field, if existent, is LEN bytes in length. There are three types of blocks: - Information blocks (I-blocks) which carry data. - Receive blocks (R-blocks) which convey acknowledgements. - Supervisory block (S-blocks) used for control purposes. The NAD byte is encoded as follows: 7 6 5 4 3 2 1 0 +---+-----------+---+-----------+ | R | S A D | R | D A D | +---+-----------+---+-----------+ where: SAD is "Source Address" DAD is "Destination Address" "R" is "Reserved for Future Use" In our reference case, the terminal is identified by 1, whereas the card is identified by 2. The PCB field for an I-block is encoded as follows: 7 6 5 4 3 2 1 0 +---+-----------+---+-----------+ | 0 | S | M | R F U | +---+-----------+---+-----------+ where: S is the sequence bit N(S) M is the chanining bit, where "1" means chained block, "0" means last block in chain. The PCB field for an R-block is encoded as follows: 7 6 5 4 3 2 1 0 +---+-----------+---+-----------+ | 1 0 | E r r o r C o d e | +---+-----------+---+-----------+ where: Error code of 0-N(R)-0000 means error free acknowledgement. Error code of 0-N(R)-0001 means character parity error. Error code of 0-N(R)-0010 means other errors. The PCB field for an S-block is encoded as follows: 7 6 5 4 3 2 1 0 +---+-----------+---+-----------+ | 1 1 | O p C o d e | +---+-----------+---+-----------+ where: 000000 means RESYNC. 000001 means IFS request and 100001 means IFS response. 000010 means ABORT request and 100010 means ABORT response. 000011 means WTX request and 100011 means WTX response. The LEN field conveys the information length. '00' means INF field not present; '01' to 'FE' is the length of the INF field; 'FF' is RFU. INF carries information. When present, INF in an I-block carries application information. INF is absent from R-blocks; and INF conveys control information on S-blocks performing a IFS or WTX commands, absent otherwise. LRC is the longitudinal redundancy check for the entire block. When computed across all fields from NAD to LRC inclusive by xor-ing all bytes, it shall yield '00' as a result.
    • Constructor Summary

      Constructors 
      Constructor Description
      T1Block()
      Main constructor.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      boolean checkBlock()
      Verifies the consistency of this T=1 Block by calculating the LRC.
      static boolean checkBlock​(T1Block theBlock)
      Verifies the consistency of the T=1 Block by calculating the LRC.
      byte getBlockType()
      Returns the T=1 Block type.
      byte[] getINFBytes()
      Returns the T=1 Block INF bytes.
      int getIntINF()
      Returns the T=1 Block INF first byte.
      int getLEN()
      Returns the T=1 Block LEN field
      byte getSBlockType()
      Returns the control parameter type for this S-Block.
      boolean getSequence()
      Returns the sequence flag for this I-Block or R-Block.
      boolean isLastBlock()
      Returns the last block flag for this I-Block.
      void readBlockInstance​(byte[] buffer, int offset, int len)
      Reads T=1 block information from the specified buffer and reconstructs it in this block.
      void setIBlock​(byte src, byte dst, boolean seqFlag, boolean chainingFlag, byte[] infoData, int infoSize)
      Sets this T1Block object as an I-Block with the parameters specified.
      void setIBlock​(byte src, byte dst, boolean seqFlag, boolean chainingFlag, byte[] infoData, int infoOffset, int infoSize)
      Sets this T1Block object as an I-Block with the parameters specified.
      void setRBlock​(byte src, byte dst, boolean seqFlag)
      Sets this T1Block object as an R-Block with the parameters specified.
      void setSBlock​(byte src, byte dst, int ctrlType, int infData)
      Sets this T1Block object as an S-Block with the parameters specified.
      byte[] toByteArray()
      Transfers the current T=1 Block into a byte array representation.
      java.lang.String toString()
      Returns a string representation of this I-Block object for debugging and tracing purposes.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Constructor Detail

      • T1Block

        public T1Block()
        Main constructor.
    • Method Detail

      • setIBlock

        public void setIBlock​(byte src,
                              byte dst,
                              boolean seqFlag,
                              boolean chainingFlag,
                              byte[] infoData,
                              int infoSize)
                       throws T1Exception
        Sets this T1Block object as an I-Block with the parameters specified. This version assumes data at offset 0.
        Parameters:
        src - Source address.
        dst - Destination address.
        seqFlag - Sequence flag.
        chainingFlag - chaining flag.
        infoData - Byte array containing I-Block data.
        infoSize - Size in bytes of data to copy.
        Throws:
        T1Exception - if a T=1 protocol inconsistency occurs.
      • setIBlock

        public void setIBlock​(byte src,
                              byte dst,
                              boolean seqFlag,
                              boolean chainingFlag,
                              byte[] infoData,
                              int infoOffset,
                              int infoSize)
                       throws T1Exception
        Sets this T1Block object as an I-Block with the parameters specified.
        Parameters:
        src - Source address.
        dst - Destination address.
        seqFlag - Sequence flag.
        chainingFlag - chaining flag.
        infoData - Byte array containing I-Block data.
        infoSize - Size in bytes of data to copy.
        infoOffset - Offset of data to copy from byte array.
        Throws:
        T1Exception - if a T=1 protocol inconsistency occurs.
      • setRBlock

        public void setRBlock​(byte src,
                              byte dst,
                              boolean seqFlag)
                       throws T1Exception
        Sets this T1Block object as an R-Block with the parameters specified.
        Parameters:
        src - Source address.
        dst - Destination address.
        seqFlag - Sequence flag.
        Throws:
        T1Exception - if a T=1 protocol inconsistency occurs.
      • setSBlock

        public void setSBlock​(byte src,
                              byte dst,
                              int ctrlType,
                              int infData)
                       throws T1Exception
        Sets this T1Block object as an S-Block with the parameters specified.
        Parameters:
        src - Source address.
        dst - Destination address.
        ctrlType - S-Block control parameter.
        infData - Optional INF field data for S-Block, conly LSB is considered.
        Throws:
        T1Exception - if a T=1 protocol inconsistency occurs.
      • toByteArray

        public byte[] toByteArray()
        Transfers the current T=1 Block into a byte array representation.
        Returns:
        byte array representing the binary contents of the Block as it is transmitted.
      • readBlockInstance

        public void readBlockInstance​(byte[] buffer,
                                      int offset,
                                      int len)
                               throws T1Exception
        Reads T=1 block information from the specified buffer and reconstructs it in this block.
        Parameters:
        buffer - Buffer containing block information.
        offset - Offset inside the buffer containing block information.
        len - Length inside the buffer with the block information.
        Throws:
        T1Exception - if an error in the data is found.
      • checkBlock

        public boolean checkBlock()
        Verifies the consistency of this T=1 Block by calculating the LRC. Static version.
        Returns:
        true if block is consistent, false otherwise.
      • checkBlock

        public static boolean checkBlock​(T1Block theBlock)
        Verifies the consistency of the T=1 Block by calculating the LRC. Static version.
        Parameters:
        theBlock - Block to check.
        Returns:
        true if block is consistent, false otherwise.
      • getBlockType

        public byte getBlockType()
        Returns the T=1 Block type.
        Returns:
        byte array containing the T=1 block type in PCB field.
      • getINFBytes

        public byte[] getINFBytes()
        Returns the T=1 Block INF bytes.
        Returns:
        byte array containing the INF field bytes.
      • getIntINF

        public int getIntINF()
        Returns the T=1 Block INF first byte.
        Returns:
        byte containing the INF[0] byte.
      • getLEN

        public int getLEN()
        Returns the T=1 Block LEN field
        Returns:
        byte containing the LEN field.
      • isLastBlock

        public boolean isLastBlock()
        Returns the last block flag for this I-Block.
        Returns:
        byte containing the last block flag.
      • getSequence

        public boolean getSequence()
        Returns the sequence flag for this I-Block or R-Block.
        Returns:
        byte containing the block sequence flag.
      • getSBlockType

        public byte getSBlockType()
        Returns the control parameter type for this S-Block.
        Returns:
        byte containing the S-Block control parameter.
      • toString

        public java.lang.String toString()
        Returns a string representation of this I-Block object for debugging and tracing purposes. Uses ISO 7816-3 notation.
        Overrides:
        toString in class java.lang.Object
        Returns:
        String holding protocol data about this block.