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
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()
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))
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()
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
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
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))
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()
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." )
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