Search code examples
smartcardapduemv

EMV - Unable to Generate AC command from CDOL1


I have successfully retrieved CDOL1 which is

9F02 06 - Authorised amount of the transaction (excluding adjustments)
9F03 06 - Secondary amount associated with the transaction representing a cashback amount
9F1A 02 - the country of the terminal
95   05 - Status of the different functions as seen from the terminal
5F2A 02 - the currency code of the transaction
9A   03 - Local date that the transaction was authorised
9C   01 - the type of financial transaction 
9F37 04 - Value to provide variability and uniqueness to the generation of a cryptogram

How do I create the Generate AC command based on this CDOL1?


Solution

  • Based on CDOL1 you would next assemble the CDOL1 related data (i.e. a list of the data object values referenced by the tags in CDOL1):

    [9F02 06   (Amount, authorized, numeric)]:   000000001000 (that's 1.00)
    [9F03 06   (Amount, other, numeric)]:        000000000000 (that's 0.00)
    [9F1A 02   (Terminal country code)]:         0040 (Austria)
    [95 05     (Terminal verification results)]: 0000000000 (or whatever TVR you need)
    [5F2A 02   (Transaction currency code)]:     0978 (Euro)
    [9A 03     (Transaction date)]:              150528 (2015-05-28)
    [9C 01     (Transaction type)]:              00 (whatever transaction type need)
    [9F37 04   (Unpredictable number)]:          12345678
    

    You would then wrap that data into the DATA field of the GENERATE AC command APDU:

    80 AE 5000 1D 000000001000 000000000000 0040 0000000000 0978 150528 00 12345678 00
    

    In response to this, you would either get a response message data field wrapped in tag 77 (format 2) that consists of several data objects. E.g. if no CDA is performed, this could look like:

    77 xx
      [Cryptogram Information Data]     9F27 01 80
      [Application Transaction Counter] 9F36 02 001B
      [Application Cryptogram]          9F26 08 B31B2D16 69860BD5
      [Issuer Application Data]         9F10 yy ...
    9000 [SW: success]
    

    Alternatively you could also get response message data field wrapped in tag 80 (format 1). In that case, the value is a concatenated list of implicit data objects (tag + length fields are not present):

    80 xx
      [9F27 01 (Cryptogram Information Data)]:     80
      [9F36 02 (Application Transaction Counter)]: 001B
      [9F26 08 (Application Cryptogram)]:          9F26 08 B31B2D16 69860BD5
      [9F10 yy (Issuer Application Data)]:         ...
    9000 [SW: success]