Fix UUID logic to match spec.
diff --git a/init.go b/init.go index 54745d9..d143dde 100644 --- a/init.go +++ b/init.go
@@ -5,7 +5,6 @@ "encoding/json" "fmt" "github.com/30x/apid" - "time" ) const ( @@ -38,16 +37,18 @@ } /* - * generates a random uuid (mix of timestamp & crypto random string) + * generates a random uuid */ func generate_uuid() string { - unix32bits := uint32(time.Now().UTC().Unix()) - buff := make([]byte, 12) + buff := make([]byte, 16) numRead, err := rand.Read(buff) if numRead != len(buff) || err != nil { panic(err) } - return fmt.Sprintf("%x-%x-%x-%x-%x-%x", unix32bits, buff[0:2], buff[2:4], buff[4:6], buff[6:8], buff[8:]) + /* uuid v4 spec */ + buff[6] = (buff[6] | 0x40) & 0x4F + buff[8] = (buff[8] | 0x80) & 0xBF + return fmt.Sprintf("%x-%x-%x-%x-%x", buff[0:4], buff[4:6], buff[6:8], buff[8:10], buff[10:]) } func init() {