#!/usr/bin/env python3
"""
Aggressively filter MISO to get pure data
"""
import csv

print("[*] Extracting ALL MISO bytes from export.csv...")

with open('export.csv', 'r') as f:
    reader = list(csv.DictReader(f))

all_miso = []
for row in reader:
    if row['type'] == 'result' and row['miso'] and row['miso'].startswith('0x'):
        miso_byte = int(row['miso'], 16)
        all_miso.append(miso_byte)

print(f"[+] Total MISO bytes: {len(all_miso)}")

# Filter out ALL status/padding bytes
# Common MFRC522/SPI status bytes
status_bytes = {0x00, 0x02, 0x04, 0x08, 0x0a, 0x0c, 0x0e,
                0x10, 0x12, 0x14, 0x16, 0x1a, 
                0x80, 0x82, 0x88, 0x8a, 0x8c, 0x90, 0x92, 0x93, 0x94, 0x98, 0x9a,
                0xc2, 0xc4}

filtered = [b for b in all_miso if b not in status_bytes]

print(f"[+] After aggressive filtering: {len(filtered)} bytes")

# Show first  512 bytes
print("\n[*] Filtered MISO bytes:")
for i in range(0, min(512, len(filtered)), 16):
    chunk = filtered[i:i+16]
    hex_str = ' '.join(f'{b:02x}' for b in chunk)
    ascii_str = ''.join(chr(b) if 32 <= b < 127 else '.' for b in chunk)
    print(f"  {i:04x}: {hex_str:<48} {ascii_str}")

# Search for readable text
print("\n[*] Looking for 16-byte blocks with readable text...")
for i in range(0, len(filtered)-15):
    block = filtered[i:i+16]
    ascii_count = sum(1 for b in block if 32 <= b < 127)
    
    if ascii_count >= 6:  # At least 6 readable chars
        hex_str = ''.join(f'{b:02x}' for b in block)
        ascii_str = ''.join(chr(b) if 32 <= b < 127 else '.' for b in block)
        print(f"\nOffset {i:04x}: {hex_str}")
        print(f"           '{ascii_str}'")
        
        # Show next 2 blocks
        if i + 32 <= len(filtered):
            block2 = filtered[i+16:i+32]
            hex2 = ''.join(f'{b:02x}' for b in block2)
            ascii2 = ''.join(chr(b) if 32 <= b < 127 else '.' for b in block2)
            print(f"Next:      {hex2}")
            print(f"           '{ascii2}'")
            
            if i + 48 <= len(filtered):
                block3 = filtered[i+32:i+48]
                hex3 = ''.join(f'{b:02x}' for b in block3)
                ascii3 = ''.join(chr(b) if 32 <= b < 127 else '.' for b in block3)
                print(f"Next:      {hex3}")
                print(f"           '{ascii3}'")
