Esempio n. 1
0
    def increment(address=0, value=0x01, increment=True):
        if address < 0 or address > 255:
            raise apduBuilderException(
                "invalid argument address, a value between 0 and 255 was expected, got "
                + str(address))

        if value < 0 or value > 0xFFFFFFFF:
            raise apduBuilderException(
                "invalid argument value, a value between 0 and 4294967295 was expected, got "
                + str(value))

        if increment:
            return ApduDefault(cla=0xFF,
                               ins=0xF0,
                               p1=0x00,
                               p2=address,
                               data=[
                                   0xC0, address, value & 0xFF,
                                   (value >> 8) & 0xFF, (value >> 16) & 0xFF,
                                   (value >> 24) & 0xFF
                               ])
        else:
            return ApduDefault(cla=0xFF,
                               ins=0xF0,
                               p1=0x00,
                               p2=address,
                               data=[
                                   0xC1, address, value & 0xFF,
                                   (value >> 8) & 0xFF, (value >> 16) & 0xFF,
                                   (value >> 24) & 0xFF
                               ])
Esempio n. 2
0
    def mifareClassifWrite(blockNumber,datas,KeyName = None):
        if blockNumber < 0 or blockNumber > 255:
            raise apduBuilderException("invalid argument blockNumber, a value between 0 and 255 was expected, got "+str(blockNumber))

        if len(datas) < 1 or len(datas) > 255:
            raise apduBuilderException("invalid datas size, must be a list from 1 to 255 item, got "+str(len(datas)))
            
        if (len(datas) % 16) != 0:
            raise apduBuilderException("invalid datas size, must be a multiple of 16")

        if KeyName == None:
            return ApduDefault(cla=0xFF,ins=0xF4,p1=0x00,p2=blockNumber,data=datas)
        else:
            if KeyName not in keys:
                raise apduBuilderException("the key name doesn't exist "+str(KeyName))

            if len(keys[KeyName]) != 6:
                raise apduBuilderException("invalid key length, must be 6, got "+str(len(keys[KeyName])))
            
            #if len(KeyName) != 6:
            #    raise apduBuilderException("invalid key size, must be 6, got "+str(len(KeyName)))
        
            toSend = []
            toSend.extend(datas)
            toSend.extend(keys[KeyName])
            return ApduDefault(cla=0xFF,ins=0xF4,p1=0x00,p2=blockNumber,data=toSend)
Esempio n. 3
0
    def nfcType1WriteByte(byteValue, byteNumber=0, blockNumber=0, erase=True):
        if byteValue < 0 or byteValue > 255:
            raise apduBuilderException(
                "invalid argument byteValue, a value between 0 and 255 was expected, got "
                + str(byteValue))

        if byteNumber < 0 or byteNumber > 7:
            raise apduBuilderException(
                "invalid argument byteNumber, a value between 0 and 7 was expected, got "
                + str(byteNumber))

        if blockNumber < 0 or blockNumber > 0xE:
            raise apduBuilderException(
                "invalid argument byteNumber, a value between 0 and 14 was expected, got "
                + str(byteNumber))

        P2 = (byteNumber & 0x7) | ((blockNumber & 0x0f) << 3)

        if erase:
            return ApduDefault(cla=0xFF,
                               ins=0x56,
                               p1=0x00,
                               p2=P2,
                               data=[byteValue])
        else:
            return ApduDefault(cla=0xFF,
                               ins=0x58,
                               p1=0x00,
                               p2=P2,
                               data=[byteValue])
Esempio n. 4
0
    def setTimeoutParameter(value):
        if value < 0x0 or value > 0xFF:
            raise apduBuilderException(
                "invalid argument value, a value between 0 and 255 was expected, got "
                + str(value))

        return ApduDefault(cla=0xFF, ins=0x00, p1=0x41, p2=value)
Esempio n. 5
0
    def setPICCOperatingParameter(param):
        if param < 0x0 or param > 0xFF:
            raise apduBuilderException(
                "invalid argument param, a value between 0 and 255 was expected, got "
                + str(param))

        return ApduDefault(cla=0xFF, ins=0x00, p1=0x51, p2=param)
Esempio n. 6
0
    def valueBlockOperationDec(operation, value=0, blockNumber=0):
        if blockNumber < 0x0 or blockNumber > 0xFF:
            raise apduBuilderException(
                "invalid argument blockNumber, a value between 0 and 255 was expected, got "
                + str(blockNumber))

        if operation < 0x0 or operation > 0x03:
            raise apduBuilderException(
                "invalid argument operation, a value between 0 and 255 was expected, got "
                + str(operation))

        if value < -0x10000000 or value > 0xEFFFFFFF:
            raise apduBuilderException(
                "invalid argument value, a value between -2147483648 and 2147483647 was expected, got "
                + str(value))

        if value < 0:
            value = 0xFFFFFFFF + (value + 1)

        B4 = value & 0xFF
        B3 = (value >> 8) & 0xFF
        B2 = (value >> 16) & 0xFF
        B1 = (value >> 24) & 0xFF

        return ApduDefault(cla=0xFF,
                           ins=0xD7,
                           p1=0x00,
                           p2=blockNumber,
                           data=[B1, B2, B3, B4])
Esempio n. 7
0
    def verifyCommand(pin, reference=0, ReaderKey=None):
        if len(pin) < 1 or len(pin) > 255:
            raise apduBuilderException(
                "invalid pin size, must be a list from 1 to 255 item, got " +
                str(len(pin)))

        if reference < 0 or reference > 255:
            raise apduBuilderException(
                "invalid argument reference, a value between 0 and 255 was expected, got "
                + str(reference))

        structure = 0
        if ReaderKey != None:
            structure |= 0x40
            if ReaderKey < 0 or ReaderKey > 15:
                raise apduBuilderException(
                    "invalid argument ReaderKey, a value between 0 and 255 was expected, got "
                    + str(ReaderKey))

            structure |= (ReaderKey & 0xf)

        return ApduDefault(cla=0xFF,
                           ins=0x20,
                           p1=structure,
                           p2=reference,
                           data=pin)
Esempio n. 8
0
    def nfcType1Read8bytes(address=0):
        if address < 0 or address > 0xFF:
            raise apduBuilderException(
                "invalid argument address, a value between 0 and 255 was expected, got "
                + str(address))

        return ApduDefault(cla=0xFF, ins=0x5C, p1=0x00, p2=address)
Esempio n. 9
0
    def selectType(TYPE=0):
        if TYPE < 0 or TYPE > 0xD:
            raise apduBuilderException(
                "invalid argument TYPE, a value between 0 and 13 was expected, got "
                + str(TYPE))

        return ApduDefault(cla=0xFF, ins=0xA4, p1=0x00, p2=0x00, data=[TYPE])
Esempio n. 10
0
    def readBinary(address=0):
        if address < 0 or address > 255:
            raise apduBuilderException(
                "invalid argument address, a value between 0 and 255 was expected, got "
                + str(address))

        return ApduDefault(cla=0xFF, ins=0xB0, p1=0x00, p2=address & 0xFF)
Esempio n. 11
0
    def nfcType3Read(ServiceCodeList, BlockCodeList):
        Data = []
        for s in ServiceCodeList:
            if s < 0 or s > 0xFFFF:
                raise apduBuilderException(
                    "invalid argument in service code list, a value between 0 and 65535 was expected, got "
                    + str(s))

            lsb = s & 0xFF
            msb = (s >> 8) & 0xFF

            Data.extend([msb, lsb])

        for s in BlockCodeList:
            if s < 0 or s > 0xFFFF:
                raise apduBuilderException(
                    "invalid argument in block code list, a value between 0 and 65535 was expected, got "
                    + str(s))

            lsb = s & 0xFF
            msb = (s >> 8) & 0xFF

            Data.extend([msb, lsb])

        return ApduDefault(cla=0xFF,
                           ins=0x46,
                           p1=len(ServiceCodes),
                           p2=len(BlockCodes),
                           data=Data)
Esempio n. 12
0
    def mifareClassicRead(blockNumber,KeyName = None):
        if blockNumber < 0 or blockNumber > 255:
            raise apduBuilderException("invalid argument blockNumber, a value between 0 and 255 was expected, got "+str(blockNumber))
        
        if KeyName == None:
            return ApduDefault(cla=0xFF,ins=0xF3,p1=0x00,p2=blockNumber)
        else:
            if KeyName not in keys:
                raise apduBuilderException("the key name doesn't exist "+str(KeyName))

            if len(keys[KeyName]) != 6:
                raise apduBuilderException("invalid key length, must be 6, got "+str(len(keys[KeyName])))
            
            #if len(KeyName) != 6:
            #    raise apduBuilderException("invalid key size, must be 6, got "+str(len(KeyName)))
                
            return ApduDefault(cla=0xFF,ins=0xF3,p1=0x00,p2=blockNumber,data=keys[KeyName])
Esempio n. 13
0
 def setBuzzerDuration(duration):
     if duration < 0 or duration > 60000:
         raise apduBuilderException("invalid argument duration, a value between 0 and 60000 was expected, got "+str(duration))
     
     lsb = duration&0xFF
     msb = (duration>>8)&0xFF
     
     return ApduDefault(cla=0xFF,ins=0xF0,p1=0x00,p2=0x00,data=[0x1C,msb,lsb])
Esempio n. 14
0
    def directTransmit(args):
        "acr122 transmit data to pn532"

        if len(args) < 1 or len(args) > 255:
            raise apduBuilderException(
                "invalid args size, must be a list from 1 to 255 item, got " +
                str(len(datas)))

        return ApduDefault(cla=0xFF, ins=0x00, p1=0x00, p2=0x00, data=args)
Esempio n. 15
0
    def iclassGetKeySlotInfo(KeySlot=0, Secured=False):

        if KeySlot < 0 or KeySlot > 255:
            raise apduBuilderException(
                "invalid argument KeySlot, a value between 0 and 255 was expected, got "
                + str(address))

        if Secured:
            return ApduDefault(cla=0x84,
                               ins=0xC4,
                               p1=0x00,
                               p2=KeySlot,
                               data=[])
        else:
            return ApduDefault(cla=0x80,
                               ins=0xC4,
                               p1=0x00,
                               p2=KeySlot,
                               data=[])
Esempio n. 16
0
    def nfcType1ReadSegment(address=0):
        if address < 0 or address > 0xF:
            raise apduBuilderException(
                "invalid argument address, a value between 0 and 15 was expected, got "
                + str(address))

        return ApduDefault(cla=0xFF,
                           ins=0x5A,
                           p1=0x00,
                           p2=((address & 0xF) << 4))
Esempio n. 17
0
    def generalAuthenticate(blockNumber,
                            KeyIndex,
                            InVolatile=True,
                            isTypeA=True):
        data = [0x01]  #Auth version

        data.extend(
            pcscAPDUBuilder.getAuthenticateData(blockNumber, KeyIndex,
                                                InVolatile, isTypeA))

        return ApduDefault(cla=0xFF, ins=0x86, p1=0x00, p2=0x00, data=datas)
Esempio n. 18
0
    def readValueBlock(blockNumber=0):
        if blockNumber < 0x0 or blockNumber > 0xFF:
            raise apduBuilderException(
                "invalid argument blockNumber, a value between 0 and 255 was expected, got "
                + str(blockNumber))

        return ApduDefault(cla=0xFF,
                           ins=0xB1,
                           p1=0x00,
                           p2=blockNumber,
                           data=[],
                           expected_answer=0x04)
Esempio n. 19
0
 def test(expected_answer_size = 0,delay_to_answer=0, datas = []):
     
     if expected_answer_size < 0 or expected_answer_size > 255:
         raise apduBuilderException("invalid argument expected_answer_size, a value between 0 and 255 was expected, got "+str(expected_answer_size))
         
     if delay_to_answer < 0 or delay_to_answer > 63:
         raise apduBuilderException("invalid argument delay_to_answer, a value between 0 and 63 was expected, got "+str(delay_to_answer))
         
     if len(datas) < 0 or len(datas) > 255:
         raise apduBuilderException("invalid argument datas, a value list of length 0 to 255 was expected, got "+str(len(datas)))
     
     return ApduDefault(cla=0xFF,ins=0xFD,p1=expected_answer_size,p2=delay_to_answer,data=datas)
Esempio n. 20
0
    def ledAndBuzzerControl(initialRed, initialGreen, finalRed, finalGreen,
                            T1Duration, T2Duration, Repetition, LinkToBuzzer):
        "acr122 manage led and buzzer"

        P2 = 0

        if finalRed != None:
            if finalRed:
                P2 |= 0x01
            P2 |= 0x04

        if finalGreen != None:
            if finalGreen:
                P2 |= 0x02
            P2 |= 0x08

        if initialRed != None:
            if initialRed:
                P2 |= 0x10
            P2 |= 0x40

        if initialGreen != None:
            if initialGreen:
                P2 |= 0x20
            P2 |= 0x80

        if T1Duration < 1 or T1Duration > 255:
            raise apduBuilderException(
                "invalid argument T1Duration, must be a value between 1 and 255, got "
                + str(T1Duration))

        if T2Duration < 1 or T2Duration > 255:
            raise apduBuilderException(
                "invalid argument T2Duration, must be a value between 1 and 255, got "
                + str(T2Duration))

        if Repetition < 1 or Repetition > 255:
            raise apduBuilderException(
                "invalid argument Repetition, must be a value between 1 and 255, got "
                + str(Repetition))

        if LinkToBuzzer < 0 or LinkToBuzzer > 3:
            raise apduBuilderException(
                "invalid argument LinkToBuzzer, must be a value between 0 and 4, got "
                + str(LinkToBuzzer))

        return ApduDefault(
            cla=0xFF,
            ins=0x00,
            p1=0x40,
            p2=P2,
            data=[T1Duration, T2Duration, Repetition, LinkToBuzzer])
Esempio n. 21
0
    def getResponse(Length):
        "acr122 get response from pn532"

        if Length < 1 or Length > 255:
            raise apduBuilderException(
                "invalid argument Length, must be a value between 1 and 255, got "
                + str(Length))

        return ApduDefault(cla=0xFF,
                           ins=0xC0,
                           p1=0x00,
                           p2=0x00,
                           expected_answer=Length)
Esempio n. 22
0
    def sendCommandGenericSession(Cmd):
        if len(Cmd) < 1 or len(Cmd) > 249:
            raise apduBuilderException(
                "invalid Cmd size, must be a list from 1 to 249 item, got " +
                str(len(Cmd)))

        d = [0x01, 0x00, 0xF3, 0x00, 0x00, 0x64]
        d.extend(Cmd)
        return ApduDefault(cla=0xFF,
                           ins=0xA0,
                           p1=0x00,
                           p2=0x05,
                           data=[0x01, 0x00, 0x02])
Esempio n. 23
0
    def loadKey(KeyName, isTypeA=True):
        #TODO KeyName

        if len(Key) != 6:
            raise apduBuilderException("invalid key size, must be 6, got " +
                                       str(len(Key)))

        if isTypeA:
            P2 = 0x60
        else:
            P2 = 0x61

        return ApduDefault(cla=0xFF, ins=0x82, p1=0x00, p2=P2, data=Key)
Esempio n. 24
0
    def nfcType1ReadByte(byteNumber=0, blockNumber=0):
        if byteNumber < 0 or byteNumber > 7:
            raise apduBuilderException(
                "invalid argument byteNumber, a value between 0 and 7 was expected, got "
                + str(byteNumber))

        if blockNumber < 0 or blockNumber > 0xE:
            raise apduBuilderException(
                "invalid argument byteNumber, a value between 0 and 14 was expected, got "
                + str(byteNumber))

        P2 = (byteNumber & 0x7) | ((blockNumber & 0x0f) << 3)

        return ApduDefault(cla=0xFF, ins=0x54, p1=0x00, p2=P2)
Esempio n. 25
0
    def readBinary(address=0, expected=0):
        if address < 0 or address > 65535:
            raise apduBuilderException(
                "invalid argument address, a value between 0 and 65535 was expected, got "
                + str(address))

        lsb = address & 0xFF
        msb = (address >> 8) & 0xFF

        return ApduDefault(cla=0xFF,
                           ins=0xB0,
                           p1=msb,
                           p2=lsb,
                           expected_answer=expected)
Esempio n. 26
0
    def authentification(blockNumber=0, KeyIndex=0, isTypeA=True):
        if blockNumber < 0x0 or blockNumber > 0xFF:
            raise apduBuilderException(
                "invalid argument blockNumber, a value between 0 and 255 was expected, got "
                + str(blockNumber))

        if KeyIndex < 0x0 or KeyIndex > 0x1:
            raise apduBuilderException(
                "invalid argument KeyIndex, a value between 0 and 1 was expected, got "
                + str(KeyIndex))

        if isTypeA:
            return ApduDefault(cla=0xFF,
                               ins=0x86,
                               p1=0x00,
                               p2=0x00,
                               data=[0x01, 0x00, blockNumber, 0x60, KeyIndex])
        else:
            return ApduDefault(cla=0xFF,
                               ins=0x86,
                               p1=0x00,
                               p2=0x00,
                               data=[0x01, 0x00, blockNumber, 0x61, KeyIndex])
Esempio n. 27
0
    def nfcType1Write8Bytes(bytes, address=0, erase=True):
        if address < 0 or address > 0xFF:
            raise apduBuilderException(
                "invalid argument address, a value between 0 and 255 was expected, got "
                + str(address))

        if len(bytes) != 8:
            raise apduBuilderException(
                "invalid bytes size, must be a list of 8 item, got " +
                str(len(bytes)))

        if erase:
            return ApduDefault(cla=0xFF,
                               ins=0x5E,
                               p1=0x00,
                               p2=address,
                               data=bytes)
        else:
            return ApduDefault(cla=0xFF,
                               ins=0x60,
                               p1=0x00,
                               p2=address,
                               data=bytes)
Esempio n. 28
0
 def encapsulate(datas,protocolType=0x00,timeoutType=0x00,defaultSW = True):
     
     #TODO limite de 255
     
     if timeoutType < 0 or timeoutType > 0x0D:
         raise apduBuilderException("invalid argument timeoutType, a value between 0 and 13 was expected, got "+str(timeoutType))
         
     if protocolType != 0x00 and protocolType != 0x01 and protocolType != 0x02 and protocolType != 0x04 and protocolType != 0x05 and protocolType != 0x09 and protocolType != 0x0A and protocolType != 0x0C and protocolType != 0x0F and protocolType != 0x1F and protocolType != 0x2F and protocolType != 0x3F and protocolType != 0x4F and protocolType != 0x5F and protocolType != 0x6F and protocolType != 0x7F and protocolType != 0x80 and protocolType != 0x81 and protocolType != 0x82 and protocolType != 0x83 and protocolType != 0x84:
         raise apduBuilderException("invalid argument protocolType, see the documentation")
         
     if not defaultSW:
         timeoutType &= 0x80
         
     return ApduDefault(cla=0xFF,ins=0xFE,p1=protocolType,p2=timeoutType,data=datas)
Esempio n. 29
0
 def setLedColorFun(red,green,yellow_blue = None):        
     if red < 0 or red > 5:
         raise apduBuilderException("invalid argument red, a value between 0 and 5 was expected, got "+str(red))
         
     if green < 0 or green > 5:
         raise apduBuilderException("invalid argument green, a value between 0 and 5 was expected, got "+str(green))
     
     if yellow_blue == None:
         d = [0x1E,red,green]
     else:
         if yellow_blue < 0 or yellow_blue > 5:
             raise apduBuilderException("invalid argument yellow_blue, a value between 0 and 5 was expected, got "+str(yellow_blue))
         d = [0x1E,red,green,yellow_blue]
     
     return ApduDefault(cla=0xFF,ins=0xF0,p1=0x00,p2=0x00,data=d)
Esempio n. 30
0
    def updateBinary(datas, address=0):
        if address < 0 or address > 65535:
            raise apduBuilderException(
                "invalid argument address, a value between 0 and 65535 was expected, got "
                + str(address))

        if len(datas) < 1 or len(datas) > 255:
            raise apduBuilderException(
                "invalid datas size, must be a list from 1 to 255 item, got " +
                str(len(datas)))

        lsb = address & 0xFF
        msb = (address >> 8) & 0xFF

        return ApduDefault(cla=0xFF, ins=0xD6, p1=msb, p2=lsb, data=datas)