---
name: "ctbcs"
section: "3"
platform: "linux"
package: "libtowitoko-dev"
version: "2.0.7-3"
release: "Debian 3.1 (Sarge)"
platforms: ["linux"]
url: "https://new.carta.tech/ctbcs"
---

# ctbcs(3)

Cardterminal basic command set for integrated circuit card applications.

## NAME

CT-BCS — 	Cardterminal basic command set for integrated circuit card   applications.

## DESCRIPTION

This manpage describes the subset of the Cardterminal Basic Command Set  (CT-BCS) used to control cardterminals with one or more integrated   circuit card slots, without key pad and display. This manpage is not a   complete specification of the CT-BCS, but a general overview of the   most common functionalities.

The CT-BCS commands are constructed in compliance with   **ISO/IEC 7816-4** interindustry commands and   are used to control cardterminal utilizing the CT-API function   **CT\_data()**.

## COMMAND STRUCTURE

A CT-BCS command is an array of bytes that is sent to the cardterminal   to perform an administrative action. The CT-BCS response is an array  of bytes returned by the cardterminal that informs of the completion   status of the action requested.

The following diagram shows the general structure of a CT-BCS command:

```
|<------------------------------------------>|
|    Header (4 Bytes)     and body           |
|      (mandatory)       (optional)          |
|<----------------->|<---------------------->|
|___________________|________________________|
|CLA |INS |P1  |P2  |Lc  |Data          |Le  |
|____|____|____|____|____|______________|____|

```

The following diagram shows the general structure of a CT-BCS   response:

```
|<------------------------------>|<--------->|
|           Body                    Trailer  |
|        (optional)                (2 Bytes) |
|                                 (mandatory)|
|________________________________|___________|
|Data                            |SW1-SW2    |
|________________________________|___________|

```

The fields within a CT-BCS command and response are equivalent to those   defined by ISO/IEC 7816-4:

- CLA

  Class. The CLA value used for CT-BCS commands is 0x20.

- INS

  Instruction. Defines the action to be performed by the  cardterminal.

- P1, P2

  Command parameters 1 and 2.

- Lc

  Length of command data field.

- Le

  Length of expected data:

-

  Case 1: No command data, no response data (no Lc and no Le).

-

  Case 2: Command data, no response data (0\<=Lc\<=254 and no Le).

-

  Case 3: No command data, response data (no Lc and 0\<=Le\<=254).

-

  Case 4: Command data, response data (0\<=Lc\<=254 and 0\<=Le\<=254)

- SW1, SW2

  Status bytes. Completion status of the command.

The address value 0x01 (CT) shall be used as destination   address (dad) given to **CT\_data()** when sending   CT-BCS commands (See CT\_data (3)).

The following commands are present in every CT-BCS implementation:

**Basic CT commands**

| | |
| --- | --- |
| Cardterminal Command | INS Code |
| RESET CT | 0x11 |
| REQUEST ICC | 0x12 |
| GET STATUS | 0x13 |
| EJECT ICC | 0x15 |

The following general return codes SW1-SW2 may occur:

**General return codes**

| | |
| --- | --- |
| SW1-SW2 | Description |
| 0x6700 | Wrong length |
| 0x6900 | Command not allowed |
| 0x6A00 | Wrong parameters P1, P2 |
| 0x6D00 | Wrong instruction |
| 0x6E00 | Class not supported |

## FUNCTIONAL UNITS

Functional units are entities that can be addressed as target of   CT-BCS commands. In some CT-BCS commands a target functional unit   needs to be specified.

**Functional units**

| | |
| --- | --- |
| Functional Unit | Coding |
| CT kernel | 0x00 |
| CT/ICC slot 1 | 0x01 |
| CT/ICC slot 2 | 0x02 |
| ... | ... |
| CT/ICC slot 14 | 0x0E |

Support for slots 2-14 depends on the cardterminal. Functional units   for keypad and display are defined for some cardterminals but are  not described here.

## COMMANDS DESCRIPTION

### RESET CT

The RESET CT command asks the cardterminal to perform a reset of the   specified functional unit. If the functional unit is the CT kernel, a   software reset is carried out, meaning that all status information   (f.i. information of inserted cards) is cleared and gathered again.   For ICC functional units, an card reset is performed.

Optionally the answer to reset of the functional unit is returned  in the response data.

A RESET CT command can be issued after initialization of the   cardterminal or after the occurrence of a communication error.

The command structure is as follows:

- CLA

  0x20

- INS

  0x11 (=RESET CT)

- P1

  Functional unit:

-

  0x00 = CT

-

  0x01 - 0x0E = ICC Interface 1-14

- P2

  Command qualifier:

-

  In case P1 = 0x00:

-

  0x00 = No response

-

  In case P1 = 0x01 - 0x0E:

-

  0x00 = No response data

-

  0x01 = Return complete ATR

-

  0x02 = Return Historical Bytes

- Lc field

  Empty

- Le field

  Empty or 0x00: return full length of requested information

The response structure is as follows:

- Data

  Empty, ATR or Historical Bytes

- SW1-SW2

  Status Bytes

When functional unit is CT (0x00) the following status bytes can be  returned:

- 0x9000

  Reset successful

- 0x6400

  Reset not successful

When functional unit is a ICC slot (0x01 - 0x0E) the following status   bytes can be returned:

- 0x9000

  Synchronous ICC, reset successful

- 0x9001

  Asynchronous ICC, reset successful

- 0x6400

  Reset not successful

### REQUEST ICC

The REQUEST ICC command asks the cardterminal to wait for the presence   of an ICC on the specified cardterminal slot during a specified time   limit. The command synchronously blocks the caller application unless  time limit 0 is specified. When an ICC is presented it is automatically  activated and reset.

The command structure is as follows:

- CLA

  0x20

- INS

  0x12 (=REQUEST ICC)

- P1

  Functional unit:

-

  0x01 - 0x0E = ICC-Interface 1 - 14

- P2

  Command qualifier: Request handling instructions for the CT

- Lc field

  Empty or length of subsequent data field

- Data field

  Empty (= immediate response required) or max. waiting  time in seconds (1 byte, binary coding) for presenting the ICC

- Le field

  Empty or 0x00 =  Return full length of requested information

The parameter P2 carries the request handling instructions for the   CT. The value of P2 is constructed of two 4-bits subfields:

- Bits b8-b5

  - •

    0x0 = No meaning

  - •

    Other values reserved for future use

- Bits b4-b1

  - •

    0x0 = No response data

  - •

    0x1 = Return complete ATR

  - •

    0x2 = Return Historical Bytes

The response structure is as follows:

- Data

  Empty, ATR or Historical Bytes

- SW1-SW2

  Status Bytes

The following status bytes can be returned:

- 0x9000

  Synchronous ICC presented, reset successful

- 0x9001

  Asynchronous ICC, reset successful

- 0x6200

  No card presented within specified time

- 0x6201

  Card already present and activated

- 0x6400

  Reset not successful

- 0x6900

  Command with timer not supported

### GET STATUS

The GET STATUS command is used to gather cardterminal manufacturer   information and ICC status information from the cardterminal.  The information is represented by TLV (tag, length, value) encoded   data objects. The tag of the data object to be retrieved is specified  in the command and the value is returned in the response.

The command structure is as follows:

- CLA

  0x20

- INS

  0x13 (=GET STATUS)

- P1

  Functional unit:

-

  0x00 = CT

- P2

  Command qualifier: Tag of data object to be returned

- Lc field

  Empty

- Data field

  Empty

- Le field

  Hx00 =  Return full length of requested information

The response structure is as follows:

- Data

  Status information (only value field of data object)

- SW1-SW2

  Status Bytes

The following data objects are defined. Note that only value field  is returned in the response:

- Cardterminal manufacturer data object

  - •

    Tag = 0x46

  - •

    Length \>= 15

  - •

    Value:

  -

    CTM: Cardterminal manufacturer (5 bytes  ASCII encoded). It consists of 2 bytes with the  country code and 3 bytes with the manufacturer   acronym

  -

    CTT: Cardterminal type (5 bytes ASCII encoded).  The value is manufacturer dependant

  -

    CTSV: Cardterminal software version (5 bytes  ASCII encoded). The value is manufacturer dependant

  -

    DD: Discretionary data (any number of bytes   including 0)

- ICC status data object

  - •

    Tag = 0x80

  - •

    Length

  - •

    Value: One ICC status byte per ICC slot in the   cardterminal.

  -

    If b8-b1 = 0x00 then no ICC is present in the slot.

  -

    If b1 = 1 and ICC is present in the slot and the bytes   b3-b2 indicate whether the ICC is electrically   connected (value 10) or electrically disconnected   (value 01).

The following status bytes can be returned:

- 0x9000

  Command successful

### EJECT ICC

The EJECT ICC command asks the cardterminal to deactivate the ICC. It  must be used at the end of the communication with the card or when a  irreparable communication error occur.

The command structure is as follows:

- CLA

  0x20

- INS

  0x15 (=EJECT ICC)

- P1

  Functional unit:

-

  0x01 - 0x0E = ICC-Interface 1-14

- P2

  Command qualifier: Eject handling instructions for the CT   (0x00 for cardterminals without keypad and display)

- Lc field

  Empty or length of subsequent data field

- Data field

  Empty or time in seconds for removing the ICC

- Le field

  Empty

The response structure is as follows:

- Data

  Empty

- SW1-SW2

  Status Bytes

The following status bytes can be returned

- 0x9000

  Command successful

- 0x9001

  Command successful, card removed

- 0x6200

  Card not removed within specified time

## SEE ALSO

ctapi (3).

The **MKT** (Multifunktionale KartenTerminals)  specifications, available for download from Teletrust         web site   *http://www.teletrust.de (link to URL http://www.teletrust.de)* .  In special the documents:

- Part 3:

  CT-API. Cardterminal Applications Programming Interface.

- Part 4:

  CT-BCS. Cardterminal Basic Command Set.

- Part 7:

  IC cards with synchronous transmission Part3: Usage of interindustry   Commands.

ISO/IEC 7816: **Identification cards - Integrated circuit(s)**  **cards with contacts**:

- Part 4:

  Interindustry commands for interchange.

## AUTHOR

This manual page was written by Carlos Prados   \<cprados@yahoo.com\>.
