import os
import uuid
import time
from stat import *
from random import randrange

def chunkInt(uuid):
	uuidInt = uuid.int
	while uuidInt >= 0:
		yield uuidInt & 0xFFFFFFFF
		uuidInt >>= 32

def rotl(orig, count):
	return ((orig << count) | (orig >> (32-count))) & 0xFFFFFFFF 

def rotr(orig, count):
	return ((orig >> count) | (orig << (32-count))) & 0xFFFFFFFF

def writerand(f, count):
	for i in range(count):
		writeline(f, randrange(0xFFFFFFFF))

def writeline(f, num):
	f.write('{0:010d}\n'.format(num))	

def writefile(uuidstr, filename):
	mask = randrange(0xFFFFFFFF) 

	shiftline = randrange(0xFFFFFFFF)
	shift = shiftline % 32

	#origuuid = uuid.uuid4()
	origuuid = uuid.UUID(uuidstr)

	chunkIntGen = chunkInt(origuuid)
	chunkone = chunkIntGen.next()
	chunktwo = chunkIntGen.next()
	chunkthree = chunkIntGen.next()
	chunkfour = chunkIntGen.next()

	with open(filename, 'wb') as f:
		writerand(f,2)	
		writeline(f, rotr(chunkthree ^ mask, shift))  #3
		writeline(f, mask)                  #4
		writerand(f,1)	
		writeline(f, rotr(chunkone ^ mask, shift)) #6
		writerand(f,3)
		writeline(f, rotr(chunktwo ^ mask, shift)) #10
		writerand(f,2)
		writeline(f, rotr(chunkfour ^ mask, shift)) #13
		writerand(f,1)
		writeline(f, shiftline)              #15
		writerand(f, 5)

	st = os.stat(filename)
	new_atime = st[ST_ATIME] - 1728000
	new_mtime = st[ST_MTIME] - 1728000

	os.utime(filename,(new_atime,new_mtime))


#get the readable uuid from obfuscated file
def getUuid(file):
    uuidstr = ''
    if (os.path.isfile(file)):
        with open(file, 'r') as f:
            i = 1;
            for line in f:
                #print "{0} = {1}".format(i, line);
                if (i == 3):
                    chunkThree = long(line)
                elif (i == 4):
                    mask = long(line)
                elif(i == 6):
                    chunkOne = long(line)
                elif(i == 10):
                    chunkTwo = long(line)
                elif (i == 13):
                    chunkFour = long(line)
                elif (i == 15):
                    shift = long(line)%32
                
                i += 1
        
        hex4 = ''.join('{0:08X}'.format(rotl(chunkFour, shift) ^ mask))
        hex3 = ''.join('{0:08X}'.format(rotl(chunkThree, shift) ^ mask))
        hex2 = ''.join('{0:08X}'.format(rotl(chunkTwo, shift) ^ mask))
        hex1 = ''.join('{0:08X}'.format(rotl(chunkOne, shift) ^ mask))
        
        #print hex4 + " " + hex3 + " " + hex2 + " " + hex1 
        uuidstr = uuid.UUID(hex4 + hex3 + hex2 + hex1).hex
    
    #print ("uuid = " + uuidstr);    
    return uuidstr;
