Documentation ¶
Overview ¶
Package multihash is the Go implementation of https://github.com/multiformats/multihash, or self-describing hashes.
Index ¶
Examples ¶
Constants ¶
const ( ID = 0x00 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 DBL_SHA2_256 = 0x56 MURMUR3 = 0x22 )
constants
Variables ¶
var ( ErrUnknownCode = errors.New("unknown multihash code") ErrTooShort = errors.New("multihash too short. must be > 3 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{ ID: "id", 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: "murmur3", KECCAK_224: "keccak-224", KECCAK_256: "keccak-256", KECCAK_384: "keccak-384", KECCAK_512: "keccak-512", SHAKE_128: "shake-128", SHAKE_256: "shake-256", }
Codes maps a hash code to it's name
var DefaultLengths = map[uint64]int{ ID: -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: 4, KECCAK_384: 48, KECCAK_512: 64, SHAKE_128: 32, SHAKE_256: 64, }
DefaultLengths maps a hash code to it's default length
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{ "id": ID, "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": MURMUR3, "keccak-224": KECCAK_224, "keccak-256": KECCAK_256, "keccak-384": KECCAK_384, "keccak-512": KECCAK_512, "shake-128": SHAKE_128, "shake-256": SHAKE_256, }
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
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 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 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.