Esempio n. 1
0
    def _eeprom_create(self, args):
        cart = cartridge.Cartridge(args.serial_number,
                args.material_name,
                args.manufacturing_lot,
                args.manufacturing_date,
                args.use_date,
                args.initial_material_quantity,
                args.current_material_quantity,
                args.key_fragment,
                args.version,
                args.signature)

        machine_number = machine.get_number_from_type(args.machine_type)

        m = manager.Manager(crypto.Desx_Crypto(), checksum.Crc16_Checksum())
        eeprom = m.encode(machine_number, args.eeprom_uid, cart)

        mode = "w"
        if args.use_ascii == True: eeprom = self._make_ascii(args, cart, eeprom, machine_number)
        else: mode += "b"

        f = open(args.output_file, mode)
        f.write(eeprom)
        f.close()
        return
Esempio n. 2
0
    def command_refill(self, args):
        f = open(args.input_file, "rb")
        cartridge_crypted = bytearray(f.read())
        f.close()

        machine_number = machine.get_number_from_type(args.machine_type)

        m = manager.Manager(crypto.Desx_Crypto(), checksum.Crc16_Checksum())
        c = m.decode(machine_number, args.eeprom_uid, cartridge_crypted)

        material_name = c.material_name if args.material_name == None else args.material_name
        manufacturing_lot = c.manufacturing_lot if args.manufacturing_lot == None else args.manufacturing_lot
        manufacturing_date = datetime.now()
        serial_number = int(c.serial_number)+1 if args.serial_number == None else args.serial_number
        initial_material_quantity = float(c.initial_material_quantity) if args.initial_material_quantity == None else args.initial_material_quantity

        new_c = cartridge.Cartridge(serial_number,
                material_name,
                manufacturing_lot,
                manufacturing_date,
                manufacturing_date,
                initial_material_quantity,
                initial_material_quantity,
                c.key_fragment,
                c.version,
                c.signature)

        eeprom = m.encode(machine_number, args.eeprom_uid, new_c)
        f = open(args.output_file, "wb")
        f.write(eeprom)
        f.close()
Esempio n. 3
0
    def command_info(self, args):
        f = open(args.input_file, "rb")
        cartridge_crypted = bytearray(f.read())
        f.close()

        machine_number = machine.get_number_from_type(args.machine_type)

        m = manager.Manager(crypto.Desx_Crypto(), checksum.Crc16_Checksum())
        cartridge = m.decode(machine_number, args.eeprom_uid,
                             cartridge_crypted)
        eedat = open("./eedat", "w")
        eedat.write("Canister S/N: " + str(cartridge.serial_number) + "\n")
        eedat.write("Material type: " + cartridge.material_name + "\n")
        eedat.write("Manufacturing lot: " + str(cartridge.manufacturing_lot) +
                    "\n")
        eedat.write("Manufacturing date: " +
                    str(cartridge.manufacturing_date) + "\n")
        eedat.write("Use date: " + str(cartridge.use_date) + "\n")
        eedat.write("Initial material qty: " +
                    str(cartridge.initial_material_quantity) + "\n")
        eedat.write("Current material qty: " +
                    str(cartridge.current_material_quantity) + "\n")
        eedat.close()
        print("Cartridge - '" + args.input_file + "'")
        print("-" * 79)
        print("Serial number\t\t" + str(cartridge.serial_number))
        material_id = material.get_id_from_name(cartridge.material_name)
        print("Material type: " + cartridge.material_name + " (" +
              str(material_id) + " - " + hex(material_id) + ")")
        print("Manufacturing lot\t" + str(cartridge.manufacturing_lot))
        print("Manufacturing date\t" + str(cartridge.manufacturing_date))
        print("Last use date\t\t" + str(cartridge.use_date))
        print("Initial quantity\t" + str(cartridge.initial_material_quantity))
        print("Current quantity\t" + str(cartridge.current_material_quantity))
        print("Key fragment\t\t" + str(cartridge.key_fragment))
        print("Version\t\t\t" + str(cartridge.version))
        print("Signature\t\t" + str(cartridge.signature))
        print("")
        print("Machine type:\t\t" + str(args.machine_type) + " " +
              str(machine_number))
        print("EEPROM uid:\t\t" + str(args.eeprom_uid))

        if args.recreate_input_file:
            print("\nTo recreate this cartridge:")
            print("--output-file XXX_REPLACE_ME_XXX " \
                    + "--machine-type " + str(args.machine_type) \
                    + " --eeprom-uid " + str(args.eeprom_uid).encode("hex") \
                    + " --serial-number " + str(cartridge.serial_number) \
                    + " --material-name " + str(cartridge.material.name) \
                    + " --manufacturing-lot " + str(cartridge.manufacturing_lot) \
                    + " --manufacturing-date \"" + str(cartridge.manufacturing_date) + "\"" \
                    + " --use-date \"" + str(cartridge.use_date) + "\"" \
                    + " --initial-material " + str(cartridge.initial_material_quantity) \
                    + " --current-material " + str(cartridge.current_material_quantity) \
                    + " --key-fragment " + str(cartridge.key_fragment).encode("hex") \
                    + " --version " + str(cartridge.version) \
                    + " --signature " + str(cartridge.signature))
Esempio n. 4
0
    def command_create(self, args):
        cart = cartridge.Cartridge(
            args.serial_number, args.material_name, args.manufacturing_lot,
            args.manufacturing_date, args.use_date,
            args.initial_material_quantity, args.current_material_quantity,
            args.key_fragment, args.version, args.signature)

        machine_number = machine.get_number_from_type(args.machine_type)

        m = manager.Manager(crypto.Desx_Crypto(), checksum.Crc16_Checksum())
        eeprom = m.encode(machine_number, args.eeprom_uid, cart)

        f = open(args.output_file, "wb")
        f.write(eeprom)
        f.close()
Esempio n. 5
0
    def _eeprom_info(self, args):
        f = open(args.input_file, "rb")
        cartridge_crypted = bytearray(f.read())
        f.close()

        m = manager.Manager(crypto.Desx_Crypto(), checksum.Crc16_Checksum())
        machine_number = machine.get_number_from_type(args.machine_type)
        cartridge = m.decode(machine_number, args.eeprom_uid, cartridge_crypted)

        lines = self._make_info(args, cartridge, machine_number)
        if args.recreate_input_file:
            lines.append('')
            lines.extend(self._make_recreate(args, cartridge))
        lines.append('')
        for l in lines: print(l)

        return
Esempio n. 6
0
    def _eeprom_info(self, args):
        f = open(args.input_file, "rb")
        cartridge_crypted = bytearray(f.read())
        f.close()

        m = manager.Manager(crypto.Desx_Crypto(), checksum.Crc16_Checksum())
        machine_number = machine.get_number_from_type(args.machine_type)
        cartridge = m.decode(machine_number, args.eeprom_uid,
                             cartridge_crypted)

        lines = self._make_info(args, cartridge, machine_number)
        if args.recreate_input_file:
            lines.append('')
            lines.extend(self._make_recreate(args, cartridge))
        lines.append('')
        for l in lines:
            print(l)

        return
Esempio n. 7
0
    def command_info(self, args):
        f = open(args.input_file, "rb")
        cartridge_crypted = bytearray(f.read())
        f.close()

        machine_number = machine.get_number_from_type(args.machine_type)

        m = manager.Manager(crypto.Desx_Crypto(), checksum.Crc16_Checksum())
        cartridge = m.decode(machine_number, args.eeprom_uid, cartridge_crypted)

        print("Cartridge - '" + args.input_file + "'")
        print("-"*79)
        print("Serial number\t\t" + str(cartridge.serial_number))
        material_id = material.get_id_from_name(cartridge.material_name)
        print("Material\t\t" + cartridge.material_name + " (" + str(material_id) + " - " + hex(material_id) +")")
        print("Manufacturing lot\t" + str(cartridge.manufacturing_lot))
        print("Manufacturing date\t" + str(cartridge.manufacturing_date))
        print("Last use date\t\t" + str(cartridge.use_date))
        print("Initial quantity\t" + str(cartridge.initial_material_quantity))
        print("Current quantity\t" + str(cartridge.current_material_quantity))
        print("Key fragment\t\t" + str(cartridge.key_fragment))
        print("Version\t\t\t" + str(cartridge.version))
        print("Signature\t\t" + str(cartridge.signature))
        print("")
        print("Machine type:\t\t" + str(args.machine_type) + " " + str(machine_number))
        print("EEPROM uid:\t\t" + str(args.eeprom_uid))

        if args.recreate_input_file:
            print("\nTo recreate this cartridge:")
            print("--output-file XXX_REPLACE_ME_XXX " \
                    + "--machine-type " + str(args.machine_type) \
                    + " --eeprom-uid " + str(args.eeprom_uid).encode("hex") \
                    + " --serial-number " + str(cartridge.serial_number) \
                    + " --material-name " + str(cartridge.material.name) \
                    + " --manufacturing-lot " + str(cartridge.manufacturing_lot) \
                    + " --manufacturing-date \"" + str(cartridge.manufacturing_date) + "\"" \
                    + " --use-date \"" + str(cartridge.use_date) + "\"" \
                    + " --initial-material " + str(cartridge.initial_material_quantity) \
                    + " --current-material " + str(cartridge.current_material_quantity) \
                    + " --key-fragment " + str(cartridge.key_fragment).encode("hex") \
                    + " --version " + str(cartridge.version) \
                    + " --signature " + str(cartridge.signature))
Esempio n. 8
0
    def command_create(self, args):
        cart = cartridge.Cartridge(args.serial_number,
                args.material_name,
                args.manufacturing_lot,
                args.manufacturing_date,
                args.use_date,
                args.initial_material_quantity,
                args.current_material_quantity,
                args.key_fragment,
                args.version,
                args.signature)

        machine_number = machine.get_number_from_type(args.machine_type)

        m = manager.Manager(crypto.Desx_Crypto(), checksum.Crc16_Checksum())
        eeprom = m.encode(machine_number, args.eeprom_uid, cart)

        f = open(args.output_file, "wb")
        f.write(eeprom)
        f.close()
Esempio n. 9
0
    def _guess_machine_type(self, cartridge_crypted, eeprom_uid):
        m = manager.Manager(crypto.Desx_Crypto(), checksum.Crc16_Checksum())

        for machine_type in machine.type_to_number:
            machine_number = machine.get_number_from_type(machine_type)
            try:
                # make copy of cartridge_crypted each time because it gets mutated
                cartridge = m.decode(machine_number, eeprom_uid,
                                     cartridge_crypted[:])
            except Exception as e:
                sys.stderr.write("Decode as %s failed: %s\n" %
                                 (machine_type, e))
                pass
            else:
                sys.stderr.write("Machine type guessed as %s\n" %
                                 (machine_type, ))
                return machine_type
        else:
            # didn't find a matching machine type
            raise ValueError(
                "Tried to guess machine type but failed - cart data might be invalid."
            )
Esempio n. 10
0
    def _eeprom_create(self, args):
        cart = cartridge.Cartridge(
            args.serial_number, args.material_name, args.manufacturing_lot,
            args.manufacturing_date, args.use_date,
            args.initial_material_quantity, args.current_material_quantity,
            args.key_fragment, args.version, args.signature)

        machine_number = machine.get_number_from_type(args.machine_type)

        m = manager.Manager(crypto.Desx_Crypto(), checksum.Crc16_Checksum())
        eeprom = m.encode(machine_number, args.eeprom_uid, cart)

        mode = "w"
        if args.use_ascii == True:
            eeprom = self._make_ascii(args, cart, eeprom, machine_number)
        else:
            mode += "b"

        f = open(args.output_file, mode)
        f.write(eeprom)
        f.close()
        return