def main():
    """ main """
    card_connection = readers()[0].createConnection()
    card_connection.connect(mode=SCARD_SHARE_DIRECT,
                            disposition=SCARD_LEAVE_CARD)

    feature_list = getFeatureRequest(card_connection)

    get_tlv_properties = hasFeature(feature_list, FEATURE_GET_TLV_PROPERTIES)
    if get_tlv_properties:
        tlv = getTlvProperties(card_connection)
        print "Reader:   ", readers()[0]
        print "IdVendor:  0x%04X" % tlv['PCSCv2_PART10_PROPERTY_wIdVendor']
        print "IdProduct: 0x%04X" % tlv['PCSCv2_PART10_PROPERTY_wIdProduct']

    ccid_esc_command = hasFeature(feature_list, FEATURE_CCID_ESC_COMMAND)
    if ccid_esc_command is None:
        raise Exception("FEATURE_CCID_ESC_COMMAND is not supported or allowed")

    # Proprietary command for Gemalto readers
    # This is implemented by the Gemalto Pinpad v2 and C200 readers
    firmware_features = [0x6A]
    try:
        res = card_connection.control(ccid_esc_command, firmware_features)
    except SmartcardException, ex:
        print "Failed:", ex
        return
def main():
    """ main """
    card_connection = readers()[0].createConnection()
    card_connection.connect(mode=SCARD_SHARE_DIRECT,
        disposition=SCARD_LEAVE_CARD)

    feature_list = getFeatureRequest(card_connection)

    get_tlv_properties = hasFeature(feature_list, FEATURE_GET_TLV_PROPERTIES)
    if get_tlv_properties:
        tlv = getTlvProperties(card_connection)
        print "Reader:   ", readers()[0]
        print "IdVendor:  0x%04X" % tlv['PCSCv2_PART10_PROPERTY_wIdVendor']
        print "IdProduct: 0x%04X" % tlv['PCSCv2_PART10_PROPERTY_wIdProduct']

    ccid_esc_command = hasFeature(feature_list, FEATURE_CCID_ESC_COMMAND)
    if ccid_esc_command is None:
        raise Exception("FEATURE_CCID_ESC_COMMAND is not supported or allowed")

    # Proprietary command for Gemalto readers
    # This is implemented by the Gemalto Pinpad v2 and C200 readers
    firmware_features = [0x6A]
    try:
        res = card_connection.control(ccid_esc_command, firmware_features)
    except SmartcardException, ex:
        print "Failed:", ex
        return
Ejemplo n.º 3
0
def main():
    """ main """
    card_connection = readers()[0].createConnection()
    card_connection.connect(mode=SCARD_SHARE_DIRECT,
                            disposition=SCARD_LEAVE_CARD)

    feature_list = getFeatureRequest(card_connection)
    #print getPinProperties(card_connection)

    mct_reader_direct = hasFeature(feature_list, FEATURE_MCT_READER_DIRECT)
    if mct_reader_direct is None:
        raise Exception("The reader does not support MCT_READER_DIRECT")

    secoder_info = [0x20, 0x70, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00]
    res = card_connection.control(mct_reader_direct, secoder_info)
    parse_info(res)

    secoder_select = [
        0x20, 0x71, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x80, 0x05, 0x31, 0x2E,
        0x31, 0x2E, 0x30, 0x84, 0x02, 0x64, 0x65, 0x90, 0x01, 0x01, 0x85, 0x03,
        ord('g'),
        ord('k'),
        ord('p'), 0x00, 0x00
    ]
    res = card_connection.control(mct_reader_direct, secoder_select)
    parse_select(res)
def main():
    """ main """
    card_connection = readers()[0].createConnection()
    card_connection.connect(mode=SCARD_SHARE_DIRECT,
        disposition=SCARD_LEAVE_CARD)

    feature_list = getFeatureRequest(card_connection)

    ccid_esc_command = hasFeature(feature_list, FEATURE_CCID_ESC_COMMAND)
    if ccid_esc_command is None:
        raise Exception("The reader does not support FEATURE_CCID_ESC_COMMAND")

    # Proprietary command for Gemalto readers
    # This is implemented by the Gemalto Pinpad v2 and C200 readers
    firmware_features = [0x6A]
    try:
        res = card_connection.control(ccid_esc_command, firmware_features)
    except SmartcardException, ex:
        print "Failed:", ex
        return
def main():
    """ main """
    card_connection = readers()[0].createConnection()
    card_connection.connect(mode=SCARD_SHARE_DIRECT,
        disposition=SCARD_LEAVE_CARD)

    feature_list = getFeatureRequest(card_connection)
    #print getPinProperties(card_connection)

    mct_reader_direct = hasFeature(feature_list, FEATURE_MCT_READER_DIRECT)
    if mct_reader_direct is None:
        raise Exception("The reader does not support MCT_READER_DIRECT")

    secoder_info = [0x20, 0x70, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00]
    res = card_connection.control(mct_reader_direct, secoder_info)
    parse_info(res)

    secoder_select = [0x20, 0x71, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x80,
        0x05, 0x31, 0x2E, 0x31, 0x2E, 0x30, 0x84, 0x02, 0x64, 0x65,
        0x90, 0x01, 0x01, 0x85, 0x03, ord('g'), ord('k'), ord('p'), 0x00, 0x00]
    res = card_connection.control(mct_reader_direct, secoder_select)
    parse_select(res)
Ejemplo n.º 6
0
#   with this program; if not, see <http://www.gnu.org/licenses/>.

# You have to enable the use of Escape commands with the
# DRIVER_OPTION_CCID_EXCHANGE_AUTHORIZED bit in the ifdDriverOptions
# option of the CCID driver Info.plist file

from smartcard.System import readers
from smartcard.pcsc.PCSCPart10 import (getFeatureRequest, hasFeature,
    getTlvProperties, FEATURE_CCID_ESC_COMMAND, SCARD_SHARE_DIRECT)

# use the first reader
card_connection = readers()[0].createConnection()
card_connection.connect(mode=SCARD_SHARE_DIRECT)

# get CCID Escape control code
feature_list = getFeatureRequest(card_connection)

ccid_esc_command = hasFeature(feature_list, FEATURE_CCID_ESC_COMMAND)
if ccid_esc_command is None:
    raise Exception("The reader does not support FEATURE_CCID_ESC_COMMAND")

# get the TLV PROPERTIES
tlv = getTlvProperties(card_connection)

# check we are using a Xiring Leo v1 or v2 reader
if tlv['PCSCv2_PART10_PROPERTY_wIdVendor'] == 0x0F14 \
    and (tlv['PCSCv2_PART10_PROPERTY_wIdProduct'] in [0x0037, 0x0038]):

    # proprietary escape command for Xiring Leo readers
    version = [ord(c) for c in "VERSION"]
    res = card_connection.control(ccid_esc_command, version)
Ejemplo n.º 7
0
def main():
    """ main """
    card_connection = readers()[0].createConnection()
    card_connection.connect(mode=SCARD_SHARE_DIRECT,
                            disposition=SCARD_LEAVE_CARD)

    feature_list = getFeatureRequest(card_connection)

    get_tlv_properties = hasFeature(feature_list, FEATURE_GET_TLV_PROPERTIES)
    if get_tlv_properties:
        tlv = getTlvProperties(card_connection)
        print("Reader:   ", readers()[0])
        print("IdVendor:  0x%04X" % tlv['PCSCv2_PART10_PROPERTY_wIdVendor'])
        print("IdProduct: 0x%04X" % tlv['PCSCv2_PART10_PROPERTY_wIdProduct'])

    ccid_esc_command = hasFeature(feature_list, FEATURE_CCID_ESC_COMMAND)
    if ccid_esc_command is None:
        raise Exception("FEATURE_CCID_ESC_COMMAND is not supported or allowed")

    # Proprietary command for Gemalto readers
    # This is implemented by the Gemalto Pinpad v2 and C200 readers
    firmware_features = [0x6A]
    try:
        res = card_connection.control(ccid_esc_command, firmware_features)
    except SmartcardException as ex:
        print("Failed:", ex)
        return

    print(res)
    print("LogicalLCDLineNumber (Logical number of LCD lines):", res[0])
    print("LogicalLCDRowNumber (Logical number of characters per LCD line):",
          res[1])
    print("LcdInfo:", res[2])
    print("  b0 indicates if scrolling available:", test_bit(res[2], 0))
    print("EntryValidationCondition:", res[3])

    print("PC/SCv2 features:")
    print(" VerifyPinStart:", test_bit(res[4], 0))
    print(" VerifyPinFinish:", test_bit(res[4], 1))
    print(" ModifyPinStart:", test_bit(res[4], 2))
    print(" ModifyPinFinish:", test_bit(res[4], 3))
    print(" GetKeyPressed:", test_bit(res[4], 4))
    print(" VerifyPinDirect:", test_bit(res[4], 5))
    print(" ModifyPinDirect:", test_bit(res[4], 6))
    print(" Abort:", test_bit(res[4], 7))

    print(" GetKey:", test_bit(res[5], 0))
    print(" WriteDisplay:", test_bit(res[5], 1))
    print(" SetSpeMessage:", test_bit(res[5], 2))
    # bits 3-7 are RFU
    # bytes 6 and 7 are RFU

    print(" bTimeOut2:", test_bit(res[8], 0))
    bListSupportedLanguages = test_bit(res[8], 1)
    print(" bListSupportedLanguages:", bListSupportedLanguages)
    if bListSupportedLanguages:
        try:
            # Reader is able to indicate the list of supported languages
            # through CCID-ESC 0x6B
            languages = card_connection.control(ccid_esc_command, [0x6B])
        except SmartcardException as ex:
            print("Failed:", ex)
        print(" ", languages)
        languages = iter(languages)
        for low, high in izip(languages, languages):
            lang_x = high * 256 + low
            try:
                lang_t = USBLangID[lang_x]
            except KeyError:
                lang_t = "unkonwn"
            print("  0x%04X: %s" % (lang_x, lang_t))

    print(" bNumberMessageFix:", test_bit(res[8], 2))
    print(" bPPDUSupportOverXferBlock:", test_bit(res[8], 3))
    print(" bPPDUSupportOverEscape:", test_bit(res[8], 4))
    # bits 5-7 are RFU
    # bytes 9, 10 and 11 and RFU

    print("VersionNumber:", res[12])
    print("MinimumPINSize:", res[13])
    print("MaximumPINSize:", res[14])
    Firewall = test_bit(res[15], 0)
    print("Firewall:", Firewall)
    # bits 1-7 are RFU

    if Firewall:
        print("FirewalledCommand_SW1: 0x%02X" % res[16])
        print("FirewalledCommand_SW2: 0x%02X" % res[17])
from smartcard.System import readers
from smartcard.pcsc.PCSCPart10 import (
    getFeatureRequest,
    hasFeature,
    getTlvProperties,
    FEATURE_CCID_ESC_COMMAND,
    SCARD_SHARE_DIRECT,
)

# use the first reader
card_connection = readers()[0].createConnection()
card_connection.connect(mode=SCARD_SHARE_DIRECT)

# get CCID Escape control code
feature_list = getFeatureRequest(card_connection)

ccid_esc_command = hasFeature(feature_list, FEATURE_CCID_ESC_COMMAND)
if ccid_esc_command is None:
    raise Exception("The reader does not support FEATURE_CCID_ESC_COMMAND")

# get the TLV PROPERTIES
tlv = getTlvProperties(card_connection)

# check we are using a Xiring Leo v1 or v2 reader
if tlv["PCSCv2_PART10_PROPERTY_wIdVendor"] == 0x0F14 and (tlv["PCSCv2_PART10_PROPERTY_wIdProduct"] in [0x0037, 0x0038]):

    # proprietary escape command for Xiring Leo readers
    version = [ord(c) for c in "VERSION"]
    res = card_connection.control(ccid_esc_command, version)
    print res
Ejemplo n.º 9
0
def main():
    """ main """
    card_connection = readers()[0].createConnection()
    card_connection.connect(mode=SCARD_SHARE_DIRECT,
        disposition=SCARD_LEAVE_CARD)

    feature_list = getFeatureRequest(card_connection)

    ccid_esc_command = hasFeature(feature_list, FEATURE_CCID_ESC_COMMAND)
    if ccid_esc_command is None:
        raise Exception("The reader does not support FEATURE_CCID_ESC_COMMAND")

    status = [0x40, 0xc2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]

    res = card_connection.control(ccid_esc_command, status)
    print np.array(res)
    print "STATUS OK"

    if len(sys.argv) > 1:
        f = open(sys.argv[1], 'r')
	#skip first 16 bytes
	f.read(16)

        for i in range(0,12):
            print i
            addr = i*16
    
            res = card_connection.control(ccid_esc_command, status)
            print np.array(res)
    
            wr_cmd = [ 0x40, 0xc2, addr, 0x00, 0x00, 0x03, 0x10, 0x00 ]

	    data_s = f.read(16)
            data = map(ord, data_s)
    
            wr_cmd.extend(data)
            print "to_write", np.array(wr_cmd)
    
            res = card_connection.control(ccid_esc_command, wr_cmd)
            print np.array(res)

	# write serial
        if len(sys.argv) == 3:
           serial = sys.argv[2]
	   addr = 0x5d
	   slen = len(serial)
           wr_cmd = [ 0x40, 0xc2, addr, 0x00, 0x00, 0x03, 2*(slen+1), 0x00 ]
           data = [ (slen+1)*2, 3 ]
           for ch in serial:
               data.append(ord(ch))
               data.append(0)

           wr_cmd.extend(data)
           print "to_write", np.array(wr_cmd)
    
           res = card_connection.control(ccid_esc_command, wr_cmd)
           print np.array(res)
    
    else:

        for i in range(0,29):
    
            addr = i*8
            get_data = [0x40, 0xc3, addr, 0x00, 0x00, 0x00, 0x08, 0x00]
        
            res = card_connection.control(ccid_esc_command, get_data)
            print np.array(get_data)
            print np.array(res)