import sys
import binascii

# Fonction pour extraire le MCUID à partir d'une position donnée dans le fichier
def extract_mcuid_at_position(file_path, position, mcuid_length=8):
    with open(file_path, 'rb') as file:
        file.seek(position)
        mcuid_bytes = file.read(mcuid_length)
    mcuid_hex = binascii.hexlify(mcuid_bytes).decode('utf-8').lower()
    return mcuid_hex

# Fonction pour calculer les positions de modification en fonction des valeurs du MCUID
def calculate_modification_positions(mcuid_values, base_positions):
    calculated_positions = []
    for base_pos in base_positions:
        for value in mcuid_values:
            calculated_positions.append(base_pos + value)
    return calculated_positions

# Fonction principale pour extraire le MCUID et calculer les positions de modification
def main(input_file, mcuid_position, base_positions):
    # Extraire le MCUID
    mcuid_hex = extract_mcuid_at_position(input_file, mcuid_position)
    mcuid_values = [int(byte) for byte in bytes.fromhex(mcuid_hex)]
    
    # Calculer les positions des modifications
    calculated_positions = calculate_modification_positions(mcuid_values, base_positions)
    
    print("Positions calculées pour les modifications :")
    for pos in calculated_positions:
        print(f"Position: {pos}")

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("Usage: python3 calculate_positions.py <input_file>")
        sys.exit(1)

    input_file = sys.argv[1]

    # Position du MCUID dans le fichier
    mcuid_position = 82432
    
    # Positions de base pour les modifications
    base_positions = [
        131908, 131909, 131910, 131911,
        262740, 262741, 262742, 262743,
        1395070, 1395071,
        1395072, 1395073, 1395074, 1395075,
        1399726, 1399727,
        1571584, 1571585, 1571586, 1571588,
        1571589, 1571590, 1571591, 1571592,
        1571593, 1571594, 1571595, 1571596,
        1571597, 1571598, 1571599, 1571600,
        1571601, 1571602, 1571603, 1571604,
        1571605, 1571606, 1571607, 1571608,
        1571609, 1571610, 1571611, 1571612,
        1571613, 1571614, 1571615, 1571616,
        1571617, 1571619
    ]

    main(input_file, mcuid_position, base_positions)
