Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

# SECUREAUTH LABS. Copyright 2018 SecureAuth Corporation. All rights reserved. 

# 

# This software is provided under under a slightly modified version 

# of the Apache Software License. See the accompanying LICENSE file 

# for more information. 

# 

# Description: 

# Generate UUID compliant with http://www.webdav.org/specs/draft-leach-uuids-guids-01.txt. 

# A different, much simpler (not necessarily better) algorithm is used. 

# 

# Author: 

# Javier Kohen (jkohen) 

# 

from __future__ import absolute_import 

from __future__ import print_function 

import re 

 

from random import randrange 

from struct import pack, unpack 

 

def generate(): 

# UHm... crappy Python has an maximum integer of 2**31-1. 

top = (1<<31)-1 

return pack("IIII", randrange(top), randrange(top), randrange(top), randrange(top)) 

 

def bin_to_string(uuid): 

uuid1, uuid2, uuid3 = unpack('<LHH', uuid[:8]) 

uuid4, uuid5, uuid6 = unpack('>HHL', uuid[8:16]) 

return '%08X-%04X-%04X-%04X-%04X%08X' % (uuid1, uuid2, uuid3, uuid4, uuid5, uuid6) 

 

def string_to_bin(uuid): 

matches = re.match('([\dA-Fa-f]{8})-([\dA-Fa-f]{4})-([\dA-Fa-f]{4})-([\dA-Fa-f]{4})-([\dA-Fa-f]{4})([\dA-Fa-f]{8})', uuid) 

(uuid1, uuid2, uuid3, uuid4, uuid5, uuid6) = [int(x, 16) for x in matches.groups()] 

uuid = pack('<LHH', uuid1, uuid2, uuid3) 

uuid += pack('>HHL', uuid4, uuid5, uuid6) 

return uuid 

 

def stringver_to_bin(s): 

(maj,min) = s.split('.') 

return pack('<H',int(maj)) + pack('<H',int(min)) 

 

def uuidtup_to_bin(tup): 

43 ↛ 44line 43 didn't jump to line 44, because the condition on line 43 was never true if len(tup) != 2: 

return 

return string_to_bin(tup[0]) + stringver_to_bin(tup[1]) 

 

def bin_to_uuidtup(bin): 

assert len(bin) == 20 

uuidstr = bin_to_string(bin[:16]) 

maj, min = unpack("<HH", bin[16:]) 

return uuidstr, "%d.%d" % (maj, min) 

 

#input: string 

#output: tuple (uuid,version)  

#if version is not found in the input string "1.0" is returned 

#example:  

# "00000000-0000-0000-0000-000000000000 3.0" returns ('00000000-0000-0000-0000-000000000000','3.0')  

# "10000000-2000-3000-4000-500000000000 version 3.0" returns ('00000000-0000-0000-0000-000000000000','3.0')  

# "10000000-2000-3000-4000-500000000000 v 3.0" returns ('00000000-0000-0000-0000-000000000000','3.0')  

# "10000000-2000-3000-4000-500000000000" returns ('00000000-0000-0000-0000-000000000000','1.0')  

def string_to_uuidtup(s): 

g = re.search("([A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}).*?([0-9]{1,5}\.[0-9]{1,5})",s+" 1.0") 

if g: 

(u,v) = g.groups() 

return (u,v) 

return 

 

def uuidtup_to_string(tup): 

uuid, (maj, min) = tup 

return "%s v%d.%d" % (uuid, maj, min)