Documentation ¶
Overview ¶
Package multihash is the Go implementation of https://github.com/multiformats/multihash, or self-describing hashes.
Index ¶
- Constants
- Variables
- func Encode(buf []byte, code uint64) ([]byte, error)
- func EncodeName(buf []byte, name string) ([]byte, error)
- func RegisterHashFunc(code uint64, hashFunc HashFunc) error
- func ValidCode(code uint64) bool
- type DecodedMultihash
- type ErrInconsistentLen
- type HashFunc
- type Multihash
- type Reader
- type Set
- type Writer
Examples ¶
Constants ¶
const ( IDENTITY = 0x00 // Deprecated: use IDENTITY ID = IDENTITY SHA1 = 0x11 SHA2_256 = 0x12 SHA2_512 = 0x13 SHA3_224 = 0x17 SHA3_256 = 0x16 SHA3_384 = 0x15 SHA3_512 = 0x14 SHA3 = SHA3_512 KECCAK_224 = 0x1A KECCAK_256 = 0x1B KECCAK_384 = 0x1C KECCAK_512 = 0x1D SHAKE_128 = 0x18 SHAKE_256 = 0x19 BLAKE2B_MIN = 0xb201 BLAKE2B_MAX = 0xb240 BLAKE2S_MIN = 0xb241 BLAKE2S_MAX = 0xb260 MD5 = 0xd5 DBL_SHA2_256 = 0x56 MURMUR3_128 = 0x22 // Deprecated: use MURMUR3_128 MURMUR3 = MURMUR3_128 X11 = 0x1100 )
constants
Variables ¶
var ( ErrUnknownCode = errors.New("unknown multihash code") ErrTooShort = errors.New("multihash too short. must be >= 2 bytes") ErrTooLong = errors.New("multihash too long. must be < 129 bytes") ErrLenNotSupported = errors.New("multihash does not yet support digests longer than 127 bytes") ErrInvalidMultihash = errors.New("input isn't valid multihash") ErrVarintBufferShort = errors.New("uvarint: buffer too small") ErrVarintTooLong = errors.New("uvarint: varint too big (max 64bit)") )
errors
var Codes = map[uint64]string{ IDENTITY: "identity", SHA1: "sha1", SHA2_256: "sha2-256", SHA2_512: "sha2-512", SHA3_224: "sha3-224", SHA3_256: "sha3-256", SHA3_384: "sha3-384", SHA3_512: "sha3-512", DBL_SHA2_256: "dbl-sha2-256", MURMUR3_128: "murmur3-128", KECCAK_224: "keccak-224", KECCAK_256: "keccak-256", KECCAK_384: "keccak-384", KECCAK_512: "keccak-512", SHAKE_128: "shake-128", SHAKE_256: "shake-256", X11: "x11", MD5: "md5", }
Codes maps a hash code to it's name
var DefaultLengths = map[uint64]int{ IDENTITY: -1, SHA1: 20, SHA2_256: 32, SHA2_512: 64, SHA3_224: 28, SHA3_256: 32, SHA3_384: 48, SHA3_512: 64, DBL_SHA2_256: 32, KECCAK_224: 28, KECCAK_256: 32, MURMUR3_128: 4, KECCAK_384: 48, KECCAK_512: 64, SHAKE_128: 32, SHAKE_256: 64, X11: 64, MD5: 16, }
DefaultLengths maps a hash code to it's default length
var ErrLenTooLarge = errors.New("requested length was too large for digest")
var ErrSumNotSupported = errors.New("Function not implemented. Complain to lib maintainer.")
ErrSumNotSupported is returned when the Sum function code is not implemented
var Names = map[string]uint64{ "identity": IDENTITY, "sha1": SHA1, "sha2-256": SHA2_256, "sha2-512": SHA2_512, "sha3": SHA3_512, "sha3-224": SHA3_224, "sha3-256": SHA3_256, "sha3-384": SHA3_384, "sha3-512": SHA3_512, "dbl-sha2-256": DBL_SHA2_256, "murmur3-128": MURMUR3_128, "keccak-224": KECCAK_224, "keccak-256": KECCAK_256, "keccak-384": KECCAK_384, "keccak-512": KECCAK_512, "shake-128": SHAKE_128, "shake-256": SHAKE_256, "x11": X11, "md5": MD5, }
Names maps the name of a hash to the code
Functions ¶
func Encode ¶
Encode a hash digest along with the specified function code. Note: the length is derived from the length of the digest itself.
func EncodeName ¶
EncodeName is like Encode() but providing a string name instead of a numeric code. See Names for allowed values.
Example ¶
// ignores errors for simplicity - don't do that at home. buf, _ := hex.DecodeString("0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33") mhbuf, _ := EncodeName(buf, "sha1") mhhex := hex.EncodeToString(mhbuf) fmt.Printf("hex: %v\n", mhhex)
Output: hex: 11140beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33
func RegisterHashFunc ¶
RegisterHashFunc adds an entry to the package-level code -> hash func map. The hash function must return at least the requested number of bytes. If it returns more, the hash will be truncated.
Types ¶
type DecodedMultihash ¶
type DecodedMultihash struct { Code uint64 Name string Length int // Length is just int as it is type of len() opearator Digest []byte // Digest holds the raw multihash bytes }
DecodedMultihash represents a parsed multihash and allows easy access to the different parts of a multihash.
func Decode ¶
func Decode(buf []byte) (*DecodedMultihash, error)
Decode parses multihash bytes into a DecodedMultihash.
Example ¶
// ignores errors for simplicity - don't do that at home. buf, _ := hex.DecodeString("0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33") mhbuf, _ := EncodeName(buf, "sha1") o, _ := Decode(mhbuf) mhhex := hex.EncodeToString(o.Digest) fmt.Printf("obj: %v 0x%x %d %s\n", o.Name, o.Code, o.Length, mhhex)
Output: obj: sha1 0x11 20 0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33
type ErrInconsistentLen ¶
type ErrInconsistentLen struct {
// contains filtered or unexported fields
}
ErrInconsistentLen is returned when a decoded multihash has an inconsistent length
func (ErrInconsistentLen) Error ¶
func (e ErrInconsistentLen) Error() string
type HashFunc ¶
HashFunc is a hash function that hashes data into digest.
The length is the size the digest will be truncated to. While the hash function isn't responsible for truncating the digest, it may want to error if the length is invalid for the hash function (e.g., truncation would make the hash useless).
type Multihash ¶
type Multihash []byte
Multihash is byte slice with the following form: <hash function code><digest size><hash function output>. See the spec for more information.
func FromB58String ¶
FromB58String parses a B58-encoded multihash.
func FromHexString ¶
FromHexString parses a hex-encoded multihash.
func MHFromBytes ¶ added in v0.0.9
MHFromBytes reads a multihash from the given byte buffer, returning the number of bytes read as well as the multihash
func Sum ¶
Sum obtains the cryptographic sum of a given buffer. The length parameter indicates the length of the resulting digest and passing a negative value use default length values for the selected hash function.
type Reader ¶
Reader is an io.Reader wrapper that exposes a function to read a whole multihash, parse it, and return it.
type Set ¶ added in v0.0.11
type Set struct {
// contains filtered or unexported fields
}
Set is a set of Multihashes, holding one copy per Multihash.
func (*Set) ForEach ¶ added in v0.0.11
ForEach runs f(m) with each multihash in the set. If returns immediately if f(m) returns an error.