1*5c544019SMatthias Ringwald#!/usr/bin/env python3 2aa487f40SMatthias Ringwald# 3aa487f40SMatthias Ringwald# Parase and dump UUID128 in various formats 4aa487f40SMatthias Ringwald 5aa487f40SMatthias Ringwaldimport codecs 6aa487f40SMatthias Ringwaldimport io 7aa487f40SMatthias Ringwaldimport os 8aa487f40SMatthias Ringwaldimport re 9aa487f40SMatthias Ringwaldimport string 10aa487f40SMatthias Ringwaldimport sys 11aa487f40SMatthias Ringwald 12aa487f40SMatthias Ringwaldusage = ''' 13aa487f40SMatthias RingwaldUsage: ./uuid128_formats.py UUID128 14aa487f40SMatthias Ringwald''' 15aa487f40SMatthias Ringwald 16aa487f40SMatthias Ringwalddef twoByteLEFor(value): 17aa487f40SMatthias Ringwald return [ (value & 0xff), (value >> 8)] 18aa487f40SMatthias Ringwald 19aa487f40SMatthias Ringwalddef parseUUID128(uuid): 20aa487f40SMatthias Ringwald parts = re.match("([0-9A-Fa-f]{4})([0-9A-Fa-f]{4})-([0-9A-Fa-f]{4})-([0-9A-Fa-f]{4})-([0-9A-Fa-f]{4})-([0-9A-Fa-f]{4})([0-9A-Fa-f]{4})([0-9A-Fa-f]{4})", uuid) 21aa487f40SMatthias Ringwald uuid_bytes = [] 22aa487f40SMatthias Ringwald for i in range(8, 0, -1): 23aa487f40SMatthias Ringwald uuid_bytes = uuid_bytes + twoByteLEFor(int(parts.group(i),16)) 24aa487f40SMatthias Ringwald return uuid_bytes 25aa487f40SMatthias Ringwald 26aa487f40SMatthias Ringwaldif (len(sys.argv) < 2): 27aa487f40SMatthias Ringwald print(usage) 28aa487f40SMatthias Ringwald sys.exit(1) 29aa487f40SMatthias Ringwald 30aa487f40SMatthias Ringwalduuid128 = sys.argv[1] 31aa487f40SMatthias Ringwalduuid_bytes = parseUUID128(uuid128) 32aa487f40SMatthias Ringwaldprint('UUID128: %s' % uuid128) 33aa487f40SMatthias Ringwaldprint('little endian: %s' % ', '.join( [hex(i) for i in uuid_bytes] )) 34aa487f40SMatthias Ringwaldprint('big endian: %s' % ', '.join( [hex(i) for i in reversed(uuid_bytes)] )) 35