mirror of
https://github.com/hanzoai/forge.git
synced 2026-10-30 15:00:39 +00:00
Source files keep their SPDX-License-Identifier and Hanzo copyright line; the Gitea, Gogs and LFS Test Server copyrights they used to repeat now live once in NOTICE, alongside LICENSE. The header lint accepts any copyright line above the SPDX line, so it no longer demands an upstream one. Co-authored-by: Hanzo Dev <[email protected]>
29 lines
974 B
Go
29 lines
974 B
Go
// Copyright 2026 Hanzo AI, Inc. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package avatar
|
|
|
|
import (
|
|
"crypto/sha256"
|
|
"encoding/hex"
|
|
"strconv"
|
|
)
|
|
|
|
// HashAvatar will generate a unique string, which ensures that when there's a
|
|
// different unique ID while the data is the same, it will generate a different
|
|
// output. It will generate the output according to:
|
|
// HEX(HASH(uniqueID || - || data))
|
|
// The hash being used is SHA256.
|
|
// The sole purpose of the unique ID is to generate a distinct hash Such that
|
|
// two unique IDs with the same data will have a different hash output.
|
|
// The "-" byte is important to ensure that data cannot be modified such that
|
|
// the first byte is a number, which could lead to a "collision" with the hash
|
|
// of another unique ID.
|
|
func HashAvatar(uniqueID int64, data []byte) string {
|
|
h := sha256.New()
|
|
h.Write([]byte(strconv.FormatInt(uniqueID, 10)))
|
|
h.Write([]byte{'-'})
|
|
h.Write(data)
|
|
return hex.EncodeToString(h.Sum(nil))
|
|
}
|