]>
cvs.zerfleddert.de Git - proxmark3-svn/blob - client/emv/emvcore.h
94c5d9b02ca625c345fee6e0332377ba7bfe9097
   1 //----------------------------------------------------------------------------- 
   2 // Copyright (C) 2017 Merlok 
   4 // This code is licensed to you under the terms of the GNU GPL, version 2 or, 
   5 // at your option, any later version. See the LICENSE.txt file for the text of 
   7 //----------------------------------------------------------------------------- 
   8 // EMV core functionality 
   9 //----------------------------------------------------------------------------- 
  23 #include "emv/apduinfo.h" 
  27 #include "emv/emv_tags.h" 
  29 #define APDU_RES_LEN 260 
  30 #define APDU_AID_LEN 50 
  33 # define EMVAC_AC_MASK 0xC0 
  34 # define EMVAC_AAC     0x00 
  35 # define EMVAC_TC      0x40 
  36 # define EMVAC_ARQC    0x80 
  37 # define EMVAC_CDAREQ  0x10 
  39 enum TransactionType 
{ 
  41         TT_VSDC
,        // not standart for contactless!!!! 
  64 extern enum CardPSVendor 
GetCardPSVendor(uint8_t * AID
, size_t AIDlen
); 
  66 extern void TLVPrintFromBuffer(uint8_t *data
, int datalen
); 
  67 extern void TLVPrintFromTLV(struct tlvdb 
*tlv
); 
  68 extern void TLVPrintFromTLVLev(struct tlvdb 
*tlv
, int level
); 
  69 extern void TLVPrintAIDlistFromSelectTLV(struct tlvdb 
*tlv
); 
  71 extern struct tlvdb 
*GetPANFromTrack2(const struct tlv 
*track2
); 
  72 extern struct tlvdb 
*GetdCVVRawFromTrack2(const struct tlv 
*track2
); 
  74 extern void SetAPDULogging(bool logging
); 
  77 extern int EMVSearchPSE(bool ActivateField
, bool LeaveFieldON
, bool decodeTLV
, struct tlvdb 
*tlv
); 
  78 extern int EMVSearch(bool ActivateField
, bool LeaveFieldON
, bool decodeTLV
, struct tlvdb 
*tlv
); 
  79 extern int EMVSelectPSE(bool ActivateField
, bool LeaveFieldON
, uint8_t PSENum
, uint8_t *Result
, size_t MaxResultLen
, size_t *ResultLen
, uint16_t *sw
); 
  80 extern int EMVSelect(bool ActivateField
, bool LeaveFieldON
, uint8_t *AID
, size_t AIDLen
, uint8_t *Result
, size_t MaxResultLen
, size_t *ResultLen
, uint16_t *sw
, struct tlvdb 
*tlv
); 
  82 extern int EMVSelectApplication(struct tlvdb 
*tlv
, uint8_t *AID
, size_t *AIDlen
); 
  83 // Get Processing Options 
  84 extern int EMVGPO(bool LeaveFieldON
, uint8_t *PDOL
, size_t PDOLLen
, uint8_t *Result
, size_t MaxResultLen
, size_t *ResultLen
, uint16_t *sw
, struct tlvdb 
*tlv
); 
  85 extern int EMVReadRecord(bool LeaveFieldON
, uint8_t SFI
, uint8_t SFIrec
, uint8_t *Result
, size_t MaxResultLen
, size_t *ResultLen
, uint16_t *sw
, struct tlvdb 
*tlv
); 
  87 extern int EMVGenerateChallenge(bool LeaveFieldON
, uint8_t *Result
, size_t MaxResultLen
, size_t *ResultLen
, uint16_t *sw
, struct tlvdb 
*tlv
); 
  88 extern int EMVAC(bool LeaveFieldON
, uint8_t RefControl
, uint8_t *CDOL
, size_t CDOLLen
, uint8_t *Result
, size_t MaxResultLen
, size_t *ResultLen
, uint16_t *sw
, struct tlvdb 
*tlv
); 
  90 int MSCComputeCryptoChecksum(bool LeaveFieldON
, uint8_t *UDOL
, uint8_t UDOLlen
, uint8_t *Result
, size_t MaxResultLen
, size_t *ResultLen
, uint16_t *sw
, struct tlvdb 
*tlv
); 
  92 extern int trSDA(uint8_t *AID
, size_t AIDlen
, struct tlvdb 
*tlv
);