{"id":21664688,"url":"https://github.com/swift-libp2p/swift-multihash","last_synced_at":"2025-04-12T00:21:40.468Z","repository":{"id":122482440,"uuid":"487678009","full_name":"swift-libp2p/swift-multihash","owner":"swift-libp2p","description":"Self identifying hashes","archived":false,"fork":false,"pushed_at":"2025-02-28T19:26:16.000Z","size":100,"stargazers_count":2,"open_issues_count":4,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-02T03:46:27.810Z","etag":null,"topics":["libp2p","multiformats"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/swift-libp2p.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-05-02T00:52:31.000Z","updated_at":"2025-02-28T19:21:17.000Z","dependencies_parsed_at":"2024-11-25T10:52:54.405Z","dependency_job_id":null,"html_url":"https://github.com/swift-libp2p/swift-multihash","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swift-libp2p%2Fswift-multihash","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swift-libp2p%2Fswift-multihash/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swift-libp2p%2Fswift-multihash/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swift-libp2p%2Fswift-multihash/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/swift-libp2p","download_url":"https://codeload.github.com/swift-libp2p/swift-multihash/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248498095,"owners_count":21114037,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["libp2p","multiformats"],"created_at":"2024-11-25T10:41:57.164Z","updated_at":"2025-04-12T00:21:40.459Z","avatar_url":"https://github.com/swift-libp2p.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Multihash\n\n[![](https://img.shields.io/badge/made%20by-Breth-blue.svg?style=flat-square)](https://breth.app)\n[![](https://img.shields.io/badge/project-multiformats-blue.svg?style=flat-square)](https://github.com/multiformats/multiformats)\n[![Swift Package Manager compatible](https://img.shields.io/badge/SPM-compatible-blue.svg?style=flat-square)](https://github.com/apple/swift-package-manager)\n![Build \u0026 Test (macos and linux)](https://github.com/swift-libp2p/swift-multihash/actions/workflows/build+test.yml/badge.svg)\n\n\u003e Swift implementation of Multihash -\u003e Self identifying hashes\n\n## Table of Contents\n\n- [Overview](#overview)\n- [Install](#install)\n- [Usage](#usage)\n  - [Example](#example)\n  - [API](#api)\n- [Contributing](#contributing)\n- [Credits](#credits)\n- [License](#license)\n\n## Overview\nMultihash is a protocol for differentiating outputs from various well-established cryptographic hash functions, addressing size + encoding considerations.\n\n#### For more details see \n- [https://github.com/multiformats/multihash](https://github.com/multiformats/multihash)\n\n#### Note:\nThis package currently doesn't support Blake2b, Blake2s \u0026 Blake3. If you're up for the challenge, please feel free to add support!\n\n## Install\n\nInclude the following dependency in your Package.swift file\n```Swift\nlet package = Package(\n    ...\n    dependencies: [\n        ...\n        .package(url: \"https://github.com/swift-libp2p/swift-multihash.git\", .upToNextMajor(from: \"0.0.1\"))\n    ],\n    ...\n        .target(\n            ...\n            dependencies: [\n                ...\n                .product(name: \"Multihash\", package: \"swift-multihash\"),\n            ]),\n    ...\n)\n```\n\n## Usage\n\n### Example\n\n```Swift\n\nimport Multihash\n\n/// Multihash Format \n/// \u003cvarint hash function code\u003e\u003cvarint digest size in bytes\u003e\u003chash function output\u003e\n\nMultihash.supportedHashAlgorithms\n/// [.md5, .sha1, .sha2_256, .sha2_512, .sha3_224, .sha3_256, .sha3_384, .sha3_512, .keccak_224, .keccak_256, .keccak_384, .keccak_512]\n\n/// Encoding a Multihash\nlet multihash = try Multihash(raw: \"multihash\", hashedWith: .sha1)\nmultihash.asString(base: .base16)         // -\u003e \"111488c2f11fb2ce392acb5b2986e640211c4690073e\"\nmultihash.asString(base: .base32PadUpper) // -\u003e \"CEKIRQXRD6ZM4OJKZNNSTBXGIAQRYRUQA47A====\"\nmultihash.asString(base: .base58btc)      // -\u003e \"5dsgvJGnvAfiR3K6HCBc4hcokSfmjj\"\nmultihash.asString(base: .base64Pad)      // -\u003e \"ERSIwvEfss45KstbKYbmQCEcRpAHPg==\"\n\nlet multihash = try Multihash(raw: \"multihash\", hashedWith: .sha2_256)\nmultihash.asString(base: .base16)         // -\u003e \"12209cbc07c3f991725836a3aa2a581ca2029198aa420b9d99bc0e131d9f3e2cbe47\"\nmultihash.asString(base: .base32PadUpper) // -\u003e \"CIQJZPAHYP4ZC4SYG2R2UKSYDSRAFEMYVJBAXHMZXQHBGHM7HYWL4RY=\"\nmultihash.asString(base: .base58btc)      // -\u003e \"QmYtUc4iTCbbfVSDNKvtQqrfyezPPnFvE33wFmutw9PBBk\"\nmultihash.asString(base: .base64Pad)      // -\u003e \"EiCcvAfD+ZFyWDajqipYHKICkZiqQgudmbwOEx2fPiy+Rw==\"\n\n/// Decoding a Multihash\n\n/// Given a Multibase compliant Multihash String\n/// \n/// Example\n/// \"f111488c2f11fb2ce392acb5b2986e640211c4690073e\"\n///     f       11      14     88c2f11fb2ce392acb5b2986e640211c4690073e\n/// \u003cbase16\u003e \u003csha1\u003e \u003c20 bits\u003e \u003csha1 digest\u003e\n\nlet mh = try Multihash(multihash: \"f111488c2f11fb2ce392acb5b2986e640211c4690073e\")\nprint(mh.name) // -\u003e \"sha1\"\nprint(mh.code) // -\u003e  0x11\nprint(mh.digest.hexString) // -\u003e \"88c2f11fb2ce392acb5b2986e640211c4690073e\"\n\n/// Or use the try decodeMultihashBuffer() method\n\nlet multihashBuffer = Data(...)           // -\u003e 111488c2f11fb2ce392acb5b2986e640211c4690073e\nlet decoded = try decodeMultihashBuffer(multihashBuffer)\ndecoded.name                              // -\u003e \"sha1\"\ndecoded.code                              // -\u003e 0x11\ndecoded.digest                            // -\u003e 88c2f11fb2ce392acb5b2986e640211c4690073e (as hex)\ndecoded.length                            // -\u003e 20\n\n```\n\n### API\n```Swift\n\n/// Initializers\nMultihash(multihash:String) throws \nMultihash(:[UInt8]) throws\nMultihash(hexString str:String) throws\nMultihash(b58String str:String) throws\nMultihash(multibase:String, codec:Codecs) throws\n\n\n/// Properties\nMultihash.code:Int?\nMultihash.algorithm:Codecs?\nMultihash.name:String?\nMultihash.length:Int?\nMultihash.digest:[UInt8]?\n\nMultihash.asMultibase(_ base: BaseEncoding) -\u003e String\nMultihash.asString(base: BaseEncoding) -\u003e String\n\nMultihash.hexString:String\nMultihash.b58String:String\n\n```\n\n## Contributing\n\nContributions are welcomed! This code is very much a proof of concept. I can guarantee you there's a better / safer way to accomplish the same results. Any suggestions, improvements, or even just critiques, are welcome! \n\nLet's make this code better together! 🤝\n\n## Credits\n\n- [Multiformats / Multihash](https://github.com/multiformats/multihash)\n- [CryptoSwift](https://github.com/krzyzanowskim/CryptoSwift)\n\n## License\n\n[MIT](LICENSE) © 2022 Breth Inc.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fswift-libp2p%2Fswift-multihash","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fswift-libp2p%2Fswift-multihash","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fswift-libp2p%2Fswift-multihash/lists"}