Blame vendor/github.com/google/uuid/version4.go

Packit Service 4d2de5
// Copyright 2016 Google Inc.  All rights reserved.
Packit Service 4d2de5
// Use of this source code is governed by a BSD-style
Packit Service 4d2de5
// license that can be found in the LICENSE file.
Packit Service 4d2de5
Packit Service 4d2de5
package uuid
Packit Service 4d2de5
Packit Service 4d2de5
import "io"
Packit Service 4d2de5
Packit Service 4d2de5
// New creates a new random UUID or panics.  New is equivalent to
Packit Service 4d2de5
// the expression
Packit Service 4d2de5
//
Packit Service 4d2de5
//    uuid.Must(uuid.NewRandom())
Packit Service 4d2de5
func New() UUID {
Packit Service 4d2de5
	return Must(NewRandom())
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
// NewRandom returns a Random (Version 4) UUID.
Packit Service 4d2de5
//
Packit Service 4d2de5
// The strength of the UUIDs is based on the strength of the crypto/rand
Packit Service 4d2de5
// package.
Packit Service 4d2de5
//
Packit Service 4d2de5
// A note about uniqueness derived from the UUID Wikipedia entry:
Packit Service 4d2de5
//
Packit Service 4d2de5
//  Randomly generated UUIDs have 122 random bits.  One's annual risk of being
Packit Service 4d2de5
//  hit by a meteorite is estimated to be one chance in 17 billion, that
Packit Service 4d2de5
//  means the probability is about 0.00000000006 (6 × 10−11),
Packit Service 4d2de5
//  equivalent to the odds of creating a few tens of trillions of UUIDs in a
Packit Service 4d2de5
//  year and having one duplicate.
Packit Service 4d2de5
func NewRandom() (UUID, error) {
Packit Service 4d2de5
	var uuid UUID
Packit Service 4d2de5
	_, err := io.ReadFull(rander, uuid[:])
Packit Service 4d2de5
	if err != nil {
Packit Service 4d2de5
		return Nil, err
Packit Service 4d2de5
	}
Packit Service 4d2de5
	uuid[6] = (uuid[6] & 0x0f) | 0x40 // Version 4
Packit Service 4d2de5
	uuid[8] = (uuid[8] & 0x3f) | 0x80 // Variant is 10
Packit Service 4d2de5
	return uuid, nil
Packit Service 4d2de5
}