sha1.go 783 B

12345678910111213141516171819202122232425262728293031323334
  1. package sha1
  2. import (
  3. "crypto/sha1"
  4. "github.com/golang-plus/uuid/internal"
  5. "github.com/golang-plus/errors"
  6. )
  7. // NewUUID returns a new name-based uses SHA-1 hashing uuid.
  8. func NewUUID(namespace, name string) ([]byte, error) {
  9. hash := sha1.New()
  10. _, err := hash.Write([]byte(namespace))
  11. if err != nil {
  12. return nil, errors.Wrapf(err, "could not compute hash value for namespace %q", namespace)
  13. }
  14. _, err = hash.Write([]byte(name))
  15. if err != nil {
  16. return nil, errors.Wrapf(err, "could not compute hash value for name %q", name)
  17. }
  18. sum := hash.Sum(nil)
  19. uuid := make([]byte, 16)
  20. copy(uuid, sum)
  21. // set version(v5)
  22. internal.SetVersion(uuid, internal.VersionNameBasedSHA1)
  23. // set layout(RFC4122)
  24. internal.SetLayout(uuid, internal.LayoutRFC4122)
  25. return uuid, nil
  26. }