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