6F

File Control Information (FCI) Template

File Control Information Template is the very outermost wrapper a card returns in response to SELECT - the first constructed template a terminal ever has to parse in a transaction, arriving before any of the acquisition, risk-management, or cryptogram tags exist yet. Related to the DF Name (84) it carries at the top level and to the FCI Proprietary Template (A5) nested inside it, tag 6F's whole job is structural: it says here is the FCI for the application you just selected, with 84 confirming which application that is and A5 holding everything issuer- or scheme-specific about it. Because 6F is the very first thing parsed, a bug here has an outsized blast radius compared to a bug in almost any other template: a terminal that misreads 6F's own length or boundary doesn't just lose one field, it potentially misreads everything nested inside it, which is why SELECT-response parsing is usually one of the most heavily tested code paths in a terminal kernel. See EMV Contactless Book C-8.

Interactive decoder

Paste a hex value for this tag to decode it in your browser. Nothing is sent anywhere.

Nested TLV objects

  • 84primitive · 7 bytes

    F0000000010001

This tag is not a bitmap; the decoder shows a format-based interpretation.

Decoded example

Example value: 8407F0000000010001

Nested TLV objects

  • 84primitive · 7 bytes

    F0000000010001

Related tags

Tag 6F is the outermost wrapper the card returns in response to SELECT — the very first constructed template a terminal parses in a transaction. Inside it lives the File Control Information: the application identifiers, labels and discretionary data that let the terminal know which application it has reached and how to talk to it. Get this parse right and the rest of the transaction has a foundation; get it wrong and nothing downstream can be trusted.

Reading it is exactly what the decoder on this page does: open the value as nested BER-TLV and list the constructed and primitive objects inside. A typical FCI carries the Dedicated File Name (84), the Application Label (50), the Application Priority Indicator (87) when multiple applications coexist, the FCI Issuer Discretionary Data (BF0C) for anything the issuer wants to add, and the FCI Proprietary Template (A5) which itself contains application-specific objects like the Processing Options Data Object List (PDOL, 9F38).

Why this matters is that 6F is the entry point to application selection, and application selection is the entry point to everything else. PPSE (Proximity Payment System Environment) SELECT returns a list of 6F templates, one per candidate application; the terminal chooses based on priority and capability, then issues a final SELECT whose 6F response gives it the PDOL it must satisfy in GET PROCESSING OPTIONS. A parser bug inside 6F — mis-reading a nested template, dropping the BF0C — corrupts the selection itself, and the symptom is usually a terminal that cannot find an application on a card that has several.

The integration trap is treating 6F as a flat list of tags. It is constructed and nests: A5 (FCI Proprietary Template) is itself constructed and carries its own children; BF0C is constructed and carries issuer discretionary data that may itself be nested. A parser that reads only the top-level children of 6F and does not recurse into A5 will miss the PDOL entirely — and without the PDOL, the terminal has no way to know what to send in GET PROCESSING OPTIONS, and the transaction stalls at the next step.

For decoding, treat 6F as the root of a tree and recurse. Every constructed child (A5, BF0C) must itself be opened; every primitive child (84, 50, 9F38) is a leaf with a value. A BER-TLV parser that handles multi-byte tags, long-form lengths and arbitrary nesting depth is not optional here — the FCI is the first place a naive parser that assumes single-byte tags and flat structure will fail, and the failure is silent (missing data) rather than loud (parse error).

Properties

Tag6F
NameFile Control Information (FCI) Template
FormatBinary
Lengthvariable
SourceCard (ICC)
Templates
BooksEMV Contactless Book C-8

Frequently asked questions

What is EMV tag 6F?
Tag 6F is the File Control Information (FCI) Template: the outermost constructed wrapper the card returns in response to SELECT. It carries the application identifiers, labels, priority and discretionary data the terminal needs to identify the application and proceed to GET PROCESSING OPTIONS. It is the first constructed template a terminal parses in a transaction.
What is inside tag 6F?
A typical FCI contains the Dedicated File Name (84), the Application Label (50), the Application Priority Indicator (87), the FCI Issuer Discretionary Data (BF0C), and the FCI Proprietary Template (A5) — which itself nests application-specific objects like the PDOL (9F38). 6F is constructed, so its children are tagged TLV objects, some of which are themselves constructed.
Why do I need to recurse into A5 inside 6F?
Because A5 (FCI Proprietary Template) is constructed and carries its own children, including the PDOL (9F38) that tells the terminal what to send in GET PROCESSING OPTIONS. A parser that reads only the top-level children of 6F and does not recurse into A5 will miss the PDOL entirely, and the transaction will stall at the next step with no way to build the GPO command.
Why does my terminal find no application on a multi-application card?
Often a 6F parse bug. The PPSE SELECT returns a list of 6F templates, one per candidate application; mishandling the nested structure (dropping BF0C, mis-reading A5) corrupts the selection itself. The card has several applications; the terminal's parser is scrambling the FCI and reporting none. Test the parser against a known-good FCI hex dump.

Sources

  • C-8_Kernel_8_v1.1, p. 258

Receive site updates

Subscribe to receive site updates directly to your email

We won't send spam. You can unsubscribe at any time.