[
  {
    "path": ".github/workflows/generated-pr.yml",
    "content": "name: Close Generated PRs\n\non:\n  schedule:\n    - cron: '0 0 * * *'\n  workflow_dispatch:\n\npermissions:\n  issues: write\n  pull-requests: write\n\njobs:\n  stale:\n    uses: ipdxco/unified-github-workflows/.github/workflows/reusable-generated-pr.yml@v1\n"
  },
  {
    "path": ".github/workflows/stale.yml",
    "content": "name: Close Stale Issues\n\non:\n  schedule:\n    - cron: '0 0 * * *'\n  workflow_dispatch:\n\npermissions:\n  issues: write\n  pull-requests: write\n\njobs:\n  stale:\n    uses: ipdxco/unified-github-workflows/.github/workflows/reusable-stale-issue.yml@v1\n"
  },
  {
    "path": ".github/workflows/validate.yml",
    "content": "name: Validate\non: [push, pull_request]\njobs:\n  validate:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v2\n      - uses: actions/setup-python@v2\n        with:\n          python-version: '3.x'\n      - run: python validate.py\n"
  },
  {
    "path": "CODEOWNERS",
    "content": "* @darobin @rvagg @vmx @aschmahmann\n"
  },
  {
    "path": "LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2016 Protocol Labs Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# multicodec\n\n[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io)\n[![](https://img.shields.io/badge/project-multiformats-blue.svg?style=flat-square)](https://github.com/multiformats/multiformats)\n[![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](https://webchat.freenode.net/?channels=%23ipfs)\n[![](https://img.shields.io/badge/readme%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/RichardLitt/standard-readme)\n\n> Canonical table of of codecs used by various multiformats\n\n## Table of Contents\n\n- [Motivation](#motivation)\n- [Description](#description)\n- [Examples](#examples)\n- [Multicodec table](#multicodec-table)\n  - [Adding new multicodecs to the table](#adding-new-multicodecs-to-the-table)\n- [Implementations](#implementations)\n- [Reserved Code Ranges](#reserved-code-ranges)\n- [FAQ](#faq)\n- [Contribute](#contribute)\n- [License](#license)\n\n## Motivation\n\nMulticodec is an agreed-upon codec table. It is designed for use in binary representations, such as keys or identifiers (i.e [CID](https://github.com/ipld/cid)).\n\n## Description\n\nThe code of a multicodec is usually encoded as unsigned varint as defined by [multiformats/unsigned-varint](https://github.com/multiformats/unsigned-varint). It is then used as a prefix to identify the data that follows.\n\n## Examples\n\nMulticodec is used in various [Multiformats](https://github.com/multiformats/multiformats). In [Multihash](https://github.com/multiformats/multihash) it is used to identify the hashes, in the machine-readable [Multiaddr](https://github.com/multiformats/multiaddr) to identify components such as IP addresses, domain names, identities, etc.\n\n## Multicodec table\n\nFind the canonical table of multicodecs at [table.csv](/table.csv).\n\n### Status\n\nEach multicodec is marked with a status:\n\n* draft - this codec has been reserved but may be reassigned if it doesn't gain wide adoption.\n* permanent - this codec has been widely adopted and may not reassigned.\n* deprecated - this codec has been deprecated.\n\nNOTE: Just because a codec is marked draft, don't assume that it can be re-assigned. Check to see if it ever gained wide adoption and, if so, mark it as permanent.\n\n### Tag Categories\n\nEach multicodec entry in the table.csv has a \"tag\" column that helps categorize the entry type. When adding a new multicodec, it's important to assign the correct tag. Here are descriptions of the most common tags:\n\n* **multihash**: Entries for cryptographic hash functions as described in [multihash](https://github.com/multiformats/multihash). Multihash is a protocol for differentiating outputs from various well-established cryptographic hash functions, addressing size and encoding considerations.\n\n* **hash**: Non-cryptographic hash functions, which are not suitable for content addressing systems but may have other uses. As noted in the [multihash documentation](https://github.com/multiformats/multihash#non-cryptographic-hash-functions), these have specialized use-cases where identifying non-cryptographic hash functions by multihash may be desirable.\n\n* **key**: Cryptographic key types, including public and private keys for various cryptographic algorithms.\n\n* **multiaddr**: Network address formats as defined in [multiaddr](https://github.com/multiformats/multiaddr). Multiaddr aims to make network addresses future-proof, composable, and efficient.\n\n* **ipld**: [InterPlanetary Linked Data](https://ipld.io/) formats. These codecs are suitable for use as a codec in a [CID](https://github.com/multiformats/cid) and will deserialize linked data that may contain links to other data.\n\n* **serialization**: Similar to \"ipld\" but does not materialize links. For example, JSON and CBOR have the \"serialization\" tag, while DAG-JSON and DAG-CBOR have the \"ipld\" tag because they handle links.\n\n* **varsig**: Signature formats as described in [varsig](https://github.com/ChainAgnostic/varsig). Varsig is a multiformat for describing signatures over IPLD data and raw bytes in a way that preserves information about the payload and canonicalization information.\n\n* **namespace**: Namespace identifiers for various protocols and systems.\n\nSelecting the appropriate tag helps maintain organization in the table and provides context for how a codec is expected to be used.\n\n### Adding new multicodecs to the table\n\nThe process to add a new multicodec to the table is the following:\n\n1. Fork this repo\n2. Add your codecs to the table. Each newly proposed codec must have:\n  1. A unique codec.\n  2. A unique name.\n  3. A category.\n  4. A status of \"draft\".\n3. Submit a Pull Request\n\nThis [\"first come, first assign\"](https://github.com/multiformats/multicodec/pull/16#issuecomment-260146609) policy is a way to assign codes as they are most needed, without increasing the size of the table (and therefore the size of the multicodecs) too rapidly.\n\nThe first 127 values are encoded as a single-byte varint, hence they are reserved for the most widely used multicodecs. So if you are adding your own codec to the table, you most likely would want to ask for a codec bigger than `0x80`.\n\nCodec names should be easily convertible to constants in common programming languages using basic transformation rules (e.g. upper-case, conversion of `-` to `_`, etc.). Therefore they should contain alphanumeric characters, with the first character being alphabetic. The primary delimiter for multi-part names should be `-`, with `_` reserved for cases where a secondary delimiter is required. For example: `bls12_381-g1-pub` contains 3 parts: `bls12_381`, `g1` and `pub`, where `bls12_381` is \"BLS12 381\" which is not commonly written as \"BLS12381\" and therefore requires a secondary separator.\n\nThe `validate.py` script can be used to validate the table once it's edited.\n\n## Implementations\n\n- [go](https://github.com/multiformats/go-multicodec/)\n- [JavaScript](https://github.com/multiformats/js-multicodec)\n- Python\n  - [py-multicodec](https://github.com/multiformats/py-multicodec)\n  - `multicodec` sub-module of Python module [multiformats](https://github.com/hashberg-io/multiformats)\n- [Haskell](https://github.com/multiformats/haskell-multicodec)\n- [Elixir](https://github.com/nocursor/ex-multicodec)\n- [Scala](https://github.com/fluency03/scala-multicodec)\n- [Ruby](https://github.com/sleeplessbyte/ruby-multicodec)\n- Java\n  - [java-multicodec](https://github.com/richardbergquist/java-multicodec)\n  - [copper-multicodec](https://github.com/filip26/copper-multicodec)\n- Kotlin\n  - `multicodec` part of Kotlin project [multiformat](https://github.com/erwin-kok/multiformat)\n- Zig\n  - `multicodec` part of Zig project [multiformats-zig](https://github.com/zen-eth/multiformats-zig)\n- Swift\n  - `Multicodec` part of [MultiformatsKit](https://github.com/ATProtoKit/MultiformatsKit)\n- [Add yours today!](https://github.com/multiformats/multicodec/edit/master/table.csv)\n\n## Reserved Code Ranges\n\nThe following code ranges have special meaning and may only have meanings assigned to as specified in their description:\n\n### Private Use Area\n\n*Range*: `0x300000 – 0x3FFFFF`\n\nCodes in this range are reserved for internal use by applications and will never be assigned any meaning as part of the Multicodec specification.\n\n## FAQ\n\n> Why varints?\n\nSo that we have no limitation on protocols.\n\n> What kind of varints?\n\nAn Most Significant Bit unsigned varint, as defined by the [multiformats/unsigned-varint](https://github.com/multiformats/unsigned-varint).\n\n> Don't we have to agree on a table of protocols?\n\nYes, but we already have to agree on what protocols themselves are, so this is not so hard. The table even leaves some room for custom protocol paths, or you can use your own tables. The standard table is only for common things.\n\n> Where did multibase go?\n\nFor a period of time, the [multibase](https://github.com/multiformats/multibase) prefixes lived in this table. However, multibase prefixes are *symbols* that may map to *multiple* underlying byte representations (that may overlap with byte sequences used for other multicodecs). Including them in a table for binary/byte identifiers lead to more confusion than it solved.\n\nYou can still find the table in [multibase.csv](https://github.com/multiformats/multibase/blob/master/multibase.csv).\n\n> Can I use multicodec for my own purpose?\n\nSure, you can use multicodec whenever you have the need for self-identifiable data. Just prefix your own data with the corresponding varint encoded multicodec.\n\n## Contribute\n\nContributions welcome. Please check out [the issues](https://github.com/multiformats/multicodec/issues).\n\nCheck out our [contributing document](https://github.com/multiformats/multiformats/blob/master/contributing.md) for more information on how we work, and about contributing in general. Please be aware that all interactions related to multiformats are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\nSmall note: If editing the README, please conform to the [standard-readme](https://github.com/RichardLitt/standard-readme) specification.\n\n## License\n\nThis repository is only for documents. All of these are licensed under the [CC-BY-SA 3.0](https://ipfs.io/ipfs/QmVreNvKsQmQZ83T86cWSjPu2vR3yZHGPm5jnxFuunEB9u) license © 2016 Protocol Labs Inc. Any code is under a [MIT](LICENSE) © 2016 Protocol Labs Inc.\n"
  },
  {
    "path": "table.csv",
    "content": "name,                           tag,            code,           status,     description\nidentity,                       multihash,      0x00,           permanent,  raw binary\ncidv1,                          cid,            0x01,           permanent,  CIDv1\ncidv2,                          cid,            0x02,           draft,      CIDv2\ncidv3,                          cid,            0x03,           draft,      CIDv3\nip4,                            multiaddr,      0x04,           permanent,\ntcp,                            multiaddr,      0x06,           permanent,\nsha1,                           multihash,      0x11,           permanent,\nsha2-256,                       multihash,      0x12,           permanent,\nsha2-512,                       multihash,      0x13,           permanent,\nsha3-512,                       multihash,      0x14,           permanent,\nsha3-384,                       multihash,      0x15,           permanent,\nsha3-256,                       multihash,      0x16,           permanent,\nsha3-224,                       multihash,      0x17,           permanent,\nshake-128,                      multihash,      0x18,           draft,\nshake-256,                      multihash,      0x19,           draft,\nkeccak-224,                     multihash,      0x1a,           draft,      keccak has variable output length. The number specifies the core length\nkeccak-256,                     multihash,      0x1b,           draft,\nkeccak-384,                     multihash,      0x1c,           draft,\nkeccak-512,                     multihash,      0x1d,           draft,\nblake3,                         multihash,      0x1e,           draft,      BLAKE3 has a default 32 byte output length. The maximum length is (2^64)-1 bytes.\nsha2-384,                       multihash,      0x20,           permanent,  aka SHA-384; as specified by FIPS 180-4.\ndccp,                           multiaddr,      0x21,           draft,\nmurmur3-x64-64,                 hash,           0x22,           permanent,  The first 64-bits of a murmur3-x64-128 - used for UnixFS directory sharding.\nmurmur3-32,                     hash,           0x23,           draft,\nip6,                            multiaddr,      0x29,           permanent,\nip6zone,                        multiaddr,      0x2a,           draft,\nipcidr,                         multiaddr,      0x2b,           draft,      CIDR mask for IP addresses\npath,                           namespace,      0x2f,           permanent,  Namespace for string paths. Corresponds to `/` in ASCII.\nmulticodec,                     multiformat,    0x30,           draft,\nmultihash,                      multiformat,    0x31,           draft,\nmultiaddr,                      multiformat,    0x32,           draft,\nmultibase,                      multiformat,    0x33,           draft,\nvarsig,                         multiformat,    0x34,           draft,      Variable signature (varsig) multiformat\ndns,                            multiaddr,      0x35,           permanent,\ndns4,                           multiaddr,      0x36,           permanent,\ndns6,                           multiaddr,      0x37,           permanent,\ndnsaddr,                        multiaddr,      0x38,           permanent,\nprotobuf,                       serialization,  0x50,           draft,      Protocol Buffers\ncbor,                           ipld,           0x51,           permanent,  CBOR\nraw,                            ipld,           0x55,           permanent,  raw binary\ndbl-sha2-256,                   multihash,      0x56,           draft,\nrlp,                            serialization,  0x60,           draft,      recursive length prefix\nbencode,                        serialization,  0x63,           draft,      bencode\ndag-pb,                         ipld,           0x70,           permanent,  MerkleDAG protobuf\ndag-cbor,                       ipld,           0x71,           permanent,  MerkleDAG cbor\nlibp2p-key,                     ipld,           0x72,           permanent,  Libp2p Public Key\ngit-raw,                        ipld,           0x78,           permanent,  Raw Git object\ntorrent-info,                   ipld,           0x7b,           draft,      Torrent file info field (bencoded)\ntorrent-file,                   ipld,           0x7c,           draft,      Torrent file (bencoded)\nblake3-hashseq,                 ipld,           0x80,           draft,      BLAKE3 hash sequence - per Iroh collections spec\nleofcoin-block,                 ipld,           0x81,           draft,      Leofcoin Block\nleofcoin-tx,                    ipld,           0x82,           draft,      Leofcoin Transaction\nleofcoin-pr,                    ipld,           0x83,           draft,      Leofcoin Peer Reputation\nsctp,                           multiaddr,      0x84,           draft,\ndag-jose,                       ipld,           0x85,           draft,      MerkleDAG JOSE\ndag-cose,                       ipld,           0x86,           draft,      MerkleDAG COSE\nlbry,                           namespace,      0x8c,           draft,      LBRY Address\neth-block,                      ipld,           0x90,           permanent,  Ethereum Header (RLP)\neth-block-list,                 ipld,           0x91,           permanent,  Ethereum Header List (RLP)\neth-tx-trie,                    ipld,           0x92,           permanent,  Ethereum Transaction Trie (Eth-Trie)\neth-tx,                         ipld,           0x93,           permanent,  Ethereum Transaction (MarshalBinary)\neth-tx-receipt-trie,            ipld,           0x94,           permanent,  Ethereum Transaction Receipt Trie (Eth-Trie)\neth-tx-receipt,                 ipld,           0x95,           permanent,  Ethereum Transaction Receipt (MarshalBinary)\neth-state-trie,                 ipld,           0x96,           permanent,  Ethereum State Trie (Eth-Secure-Trie)\neth-account-snapshot,           ipld,           0x97,           permanent,  Ethereum Account Snapshot (RLP)\neth-storage-trie,               ipld,           0x98,           permanent,  Ethereum Contract Storage Trie (Eth-Secure-Trie)\neth-receipt-log-trie,           ipld,           0x99,           draft,      Ethereum Transaction Receipt Log Trie (Eth-Trie)\neth-receipt-log,                ipld,           0x9a,           draft,      Ethereum Transaction Receipt Log (RLP)\naes-128,                        key,            0xa0,           draft,      128-bit AES symmetric key\naes-192,                        key,            0xa1,           draft,      192-bit AES symmetric key\naes-256,                        key,            0xa2,           draft,      256-bit AES symmetric key\nchacha-128,                     key,            0xa3,           draft,      128-bit ChaCha symmetric key\nchacha-256,                     key,            0xa4,           draft,      256-bit ChaCha symmetric key\nbitcoin-block,                  ipld,           0xb0,           permanent,  Bitcoin Block\nbitcoin-tx,                     ipld,           0xb1,           permanent,  Bitcoin Tx\nbitcoin-witness-commitment,     ipld,           0xb2,           permanent,  Bitcoin Witness Commitment\nzcash-block,                    ipld,           0xc0,           permanent,  Zcash Block\nzcash-tx,                       ipld,           0xc1,           permanent,  Zcash Tx\ncaip-50,                        multiformat,    0xca,           draft,      CAIP-50 multi-chain account ID\nstreamid,                       namespace,      0xce,           draft,      Ceramic Stream ID\nstellar-block,                  ipld,           0xd0,           draft,      Stellar Block\nstellar-tx,                     ipld,           0xd1,           draft,      Stellar Tx\nmd4,                            multihash,      0xd4,           draft,\nmd5,                            multihash,      0xd5,           draft,\ndecred-block,                   ipld,           0xe0,           draft,      Decred Block\ndecred-tx,                      ipld,           0xe1,           draft,      Decred Tx\nipld,                           namespace,      0xe2,           draft,      IPLD path\nipfs,                           namespace,      0xe3,           draft,      IPFS path\nswarm,                          namespace,      0xe4,           draft,      Swarm path\nipns,                           namespace,      0xe5,           draft,      IPNS path\nzeronet,                        namespace,      0xe6,           draft,      ZeroNet site address\nsecp256k1-pub,                  key,            0xe7,           draft,      Secp256k1 public key (compressed)\ndnslink,                        namespace,      0xe8,           permanent,  DNSLink path\nbls12_381-g1-pub,               key,            0xea,           draft,      BLS12-381 public key in the G1 field\nbls12_381-g2-pub,               key,            0xeb,           draft,      BLS12-381 public key in the G2 field\nx25519-pub,                     key,            0xec,           draft,      Curve25519 public key\ned25519-pub,                    key,            0xed,           draft,      Ed25519 public key\nbls12_381-g1g2-pub,             key,            0xee,           draft,      BLS12-381 concatenated public keys in both the G1 and G2 fields\nsr25519-pub,                    key,            0xef,           draft,      Sr25519 public key\ndash-block,                     ipld,           0xf0,           draft,      Dash Block\ndash-tx,                        ipld,           0xf1,           draft,      Dash Tx\nswarm-manifest,                 ipld,           0xfa,           draft,      Swarm Manifest\nswarm-feed,                     ipld,           0xfb,           draft,      Swarm Feed\nbeeson,                         ipld,           0xfc,           draft,      Swarm BeeSon\nudp,                            multiaddr,      0x0111,         draft,\np2p-webrtc-star,                multiaddr,      0x0113,         deprecated, Use webrtc or webrtc-direct instead\np2p-webrtc-direct,              multiaddr,      0x0114,         deprecated, Use webrtc or webrtc-direct instead\np2p-stardust,                   multiaddr,      0x0115,         deprecated,\nwebrtc-direct,                  multiaddr,      0x0118,         draft,      ICE-lite webrtc transport with SDP munging during connection establishment and without use of a STUN server\nwebrtc,                         multiaddr,      0x0119,         draft,      webrtc transport where connection establishment is according to w3c spec\np2p-circuit,                    multiaddr,      0x0122,         permanent,\ndag-json,                       ipld,           0x0129,         permanent,  MerkleDAG json\nudt,                            multiaddr,      0x012d,         draft,\nutp,                            multiaddr,      0x012e,         draft,\ncrc32,                          hash,           0x0132,         draft,      CRC-32 non-cryptographic hash algorithm (IEEE 802.3)\ncrc64-ecma,                     hash,           0x0164,         draft,      CRC-64 non-cryptographic hash algorithm (ECMA-182 - Annex B)\ncrc64-nvme,                     hash,           0x0165,         draft,      CRC-64 checksum based on the NVME polynomial as specified in the NVM Express® NVM Command Set Specification\nunix,                           multiaddr,      0x0190,         permanent,\nthread,                         multiaddr,      0x0196,         draft,      Textile Thread\np2p,                            multiaddr,      0x01a5,         permanent,  libp2p\nhttps,                          multiaddr,      0x01bb,         draft,\nonion,                          multiaddr,      0x01bc,         draft,\nonion3,                         multiaddr,      0x01bd,         draft,\ngarlic64,                       multiaddr,      0x01be,         draft,      I2P base64 (raw public key)\ngarlic32,                       multiaddr,      0x01bf,         draft,      I2P base32 (hashed public key or encoded public key/checksum+optional secret)\ntls,                            multiaddr,      0x01c0,         draft,\nsni,                            multiaddr,      0x01c1,         draft,      Server Name Indication RFC 6066 § 3\nnoise,                          multiaddr,      0x01c6,         draft,\nshs,                            multiaddr,      0x01c8,         draft,      Secure Scuttlebutt - Secret Handshake Stream\nquic,                           multiaddr,      0x01cc,         permanent,\nquic-v1,                        multiaddr,      0x01cd,         permanent,\nwebtransport,                   multiaddr,      0x01d1,         draft,\ncerthash,                       multiaddr,      0x01d2,         draft,      TLS certificate's fingerprint as a multihash\nws,                             multiaddr,      0x01dd,         permanent,\nwss,                            multiaddr,      0x01de,         permanent,\np2p-websocket-star,             multiaddr,      0x01df,         permanent,\nhttp,                           multiaddr,      0x01e0,         draft,\nhttp-path,                      multiaddr,      0x01e1,         draft,      Percent-encoded path to an HTTP resource\nswhid-1-snp,                    ipld,           0x01f0,         draft,      SoftWare Heritage persistent IDentifier version 1 snapshot\njson,                           ipld,           0x0200,         permanent,  JSON (UTF-8-encoded)\nmessagepack,                    serialization,  0x0201,         draft,      MessagePack\ncar,                            serialization,  0x0202,         draft,      Content Addressable aRchive (CAR)\nx509-certificate,               serialization,  0x0210,         draft,      DER-encoded X.509 (PKIX) certificate per RFC 5280; single certificate only (no chain); raw DER bytes (not PEM)\nipns-record,                    serialization,  0x0300,         permanent,  Signed IPNS Record\nlibp2p-peer-record,             libp2p,         0x0301,         permanent,  libp2p peer record type\nlibp2p-relay-rsvp,              libp2p,         0x0302,         permanent,  libp2p relay reservation voucher\nmemorytransport,                libp2p,         0x0309,         permanent,  in memory transport for self-dialing and testing; arbitrary\ncar-index-sorted,               serialization,  0x0400,         draft,      CARv2 IndexSorted index format\ncar-multihash-index-sorted,     serialization,  0x0401,         draft,      CARv2 MultihashIndexSorted index format\ntransport-bitswap,              transport,      0x0900,         draft,      Bitswap datatransfer\ntransport-graphsync-filecoinv1, transport,      0x0910,         draft,      Filecoin graphsync datatransfer\ntransport-ipfs-gateway-http,    transport,      0x0920,         draft,      HTTP IPFS Gateway trustless datatransfer\ntransport-filecoin-piece-http,  transport,      0x0930,         draft,      HTTP piece retrieval from Filecoin storage provider; https://github.com/filecoin-project/FIPs/blob/master/FRCs/frc-0066.md\nmultidid,                       multiformat,    0x0d1d,         draft,      Compact encoding for Decentralized Identifers\nfr32-sha256-trunc254-padbintree,multihash,      0x1011,         draft,      A balanced binary tree hash used in Filecoin Piece Commitments as described in FRC-0069\nsha2-256-trunc254-padded,       multihash,      0x1012,         permanent,  SHA2-256 with the two most significant bits from the last byte zeroed (as via a mask with 0b00111111) - used for proving trees as in Filecoin\nsha2-224,                       multihash,      0x1013,         permanent,  aka SHA-224; as specified by FIPS 180-4.\nsha2-512-224,                   multihash,      0x1014,         permanent,  aka SHA-512/224; as specified by FIPS 180-4.\nsha2-512-256,                   multihash,      0x1015,         permanent,  aka SHA-512/256; as specified by FIPS 180-4.\nmurmur3-x64-128,                hash,           0x1022,         draft,\nripemd-128,                     multihash,      0x1052,         draft,\nripemd-160,                     multihash,      0x1053,         draft,\nripemd-256,                     multihash,      0x1054,         draft,\nripemd-320,                     multihash,      0x1055,         draft,\nx11,                            multihash,      0x1100,         draft,\np256-pub,                       key,            0x1200,         draft,      P-256 public Key (compressed)\np384-pub,                       key,            0x1201,         draft,      P-384 public Key (compressed)\np521-pub,                       key,            0x1202,         draft,      P-521 public Key (compressed)\ned448-pub,                      key,            0x1203,         draft,      Ed448 public Key\nx448-pub,                       key,            0x1204,         draft,      X448 public Key\nrsa-pub,                        key,            0x1205,         draft,      RSA public key. DER-encoded ASN.1 type RSAPublicKey according to IETF RFC 8017 (PKCS #1)\nsm2-pub,                        key,            0x1206,         draft,      SM2 public key (compressed)\nvlad,                           vlad,           0x1207,         draft,      Verifiable Long-lived ADdress\nprovenance-log,                 serialization,  0x1208,         draft,      Verifiable and permissioned append-only log\nprovenance-log-entry,           serialization,  0x1209,         draft,      Verifiable and permissioned append-only log entry\nprovenance-log-script,          serialization,  0x120a,         draft,      Verifiable and permissioned append-only log script\nmlkem-512-pub,                  key,            0x120b,         draft,      ML-KEM 512 public key; as specified by FIPS 203\nmlkem-768-pub,                  key,            0x120c,         draft,      ML-KEM 768 public key; as specified by FIPS 203\nmlkem-1024-pub,                 key,            0x120d,         draft,      ML-KEM 1024 public key; as specified by FIPS 203\nmldsa-44-pub,                   key,            0x1210,         draft,      ML-DSA 44 public key; as specified by FIPS 204\nmldsa-65-pub,                   key,            0x1211,         draft,      ML-DSA 65 public key; as specified by FIPS 204\nmldsa-87-pub,                   key,            0x1212,         draft,      ML-DSA 87 public key; as specified by FIPS 204\nslhdsa-sha2-128s-pub,           key,            0x1220,         draft,      SLH-DSA-SHA2-128s public key; as specified by FIPS 205\nslhdsa-shake-128s-pub,          key,            0x1221,         draft,      SLH-DSA-SHAKE-128s public key; as specified by FIPS 205\nslhdsa-sha2-128f-pub,           key,            0x1222,         draft,      SLH-DSA-SHA2-128f public key; as specified by FIPS 205\nslhdsa-shake-128f-pub,          key,            0x1223,         draft,      SLH-DSA-SHAKE-128f public key; as specified by FIPS 205\nslhdsa-sha2-192s-pub,           key,            0x1224,         draft,      SLH-DSA-SHA2-192s public key; as specified by FIPS 205\nslhdsa-shake-192s-pub,          key,            0x1225,         draft,      SLH-DSA-SHAKE-192s public key; as specified by FIPS 205\nslhdsa-sha2-192f-pub,           key,            0x1226,         draft,      SLH-DSA-SHA2-192f public key; as specified by FIPS 205\nslhdsa-shake-192f-pub,          key,            0x1227,         draft,      SLH-DSA-SHAKE-192f public key; as specified by FIPS 205\nslhdsa-sha2-256s-pub,           key,            0x1228,         draft,      SLH-DSA-SHA2-256s public key; as specified by FIPS 205\nslhdsa-shake-256s-pub,          key,            0x1229,         draft,      SLH-DSA-SHAKE-256s public key; as specified by FIPS 205\nslhdsa-sha2-256f-pub,           key,            0x122a,         draft,      SLH-DSA-SHA2-256f public key; as specified by FIPS 205\nslhdsa-shake-256f-pub,          key,            0x122b,         draft,      SLH-DSA-SHAKE-256f public key; as specified by FIPS 205\nmultisig,                       multiformat,    0x1239,         draft,      Digital signature multiformat\nmultikey,                       multiformat,    0x123a,         draft,      Encryption key multiformat\nnonce,                          nonce,          0x123b,         draft,      Nonce random value\ned25519-priv,                   key,            0x1300,         draft,      Ed25519 private key\nsecp256k1-priv,                 key,            0x1301,         draft,      Secp256k1 private key\nx25519-priv,                    key,            0x1302,         draft,      Curve25519 private key\nsr25519-priv,                   key,            0x1303,         draft,      Sr25519 private key\nrsa-priv,                       key,            0x1305,         draft,      RSA private key\np256-priv,                      key,            0x1306,         draft,      P-256 private key\np384-priv,                      key,            0x1307,         draft,      P-384 private key\np521-priv,                      key,            0x1308,         draft,      P-521 private key\nbls12_381-g1-priv,              key,            0x1309,         draft,      BLS12-381 G1 private key\nbls12_381-g2-priv,              key,            0x130a,         draft,      BLS12-381 G2 private key\nbls12_381-g1g2-priv,            key,            0x130b,         draft,      BLS12-381 G1 and G2 private key\nbls12_381-g1-pub-share,         key,            0x130c,         draft,      BLS12-381 G1 public key share\nbls12_381-g2-pub-share,         key,            0x130d,         draft,      BLS12-381 G2 public key share\nbls12_381-g1-priv-share,        key,            0x130e,         draft,      BLS12-381 G1 private key share\nbls12_381-g2-priv-share,        key,            0x130f,         draft,      BLS12-381 G2 private key share\nsm2-priv,                       key,            0x1310,         draft,      SM2 private key\ned448-priv,                     key,            0x1311,         draft,      Ed448 private key\nx448-priv,                      key,            0x1312,         draft,      X448 private key\nmlkem-512-priv,                 key,            0x1313,         draft,      ML-KEM 512 private key; as specified by FIPS 203\nmlkem-768-priv,                 key,            0x1314,         draft,      ML-KEM 768 public key; as specified by FIPS 203\nmlkem-1024-priv,                key,            0x1315,         draft,      ML-KEM 1024 public key; as specified by FIPS 203\njwk_jcs-priv,                   key,            0x1316,         draft,      JSON object containing only the required members of a JWK (RFC 7518 and RFC 7517) representing the private key. Serialisation based on JCS (RFC 8785)\nmldsa-44-priv,                  key,            0x1317,         draft,      ML-DSA 44 private key; expanded key format (2560 bytes) as specified by FIPS 204\nmldsa-65-priv,                  key,            0x1318,         draft,      ML-DSA 65 private key; expanded key format (4032 bytes) as specified by FIPS 204\nmldsa-87-priv,                  key,            0x1319,         draft,      ML-DSA 87 private key; expanded key format (4896 bytes) as specified by FIPS 204\nmldsa-44-priv-seed,             key,            0x131a,         draft,      ML-DSA 44 private key seed; (32 bytes) as specified by FIPS 204\nmldsa-65-priv-seed,             key,            0x131b,         draft,      ML-DSA 65 private key seed; (32 bytes) as specified by FIPS 204\nmldsa-87-priv-seed,             key,            0x131c,         draft,      ML-DSA 87 private key seed; (32 bytes) as specified by FIPS 204\nbip340-pub,                     key,            0x1340,         draft,      BIP340 public key\nbip340-priv,                    key,            0x1341,         draft,      BIP340 private key\nlamport-sha3-512-pub,           key,            0x1a14,         draft,      Lamport public key based on SHA3-512\nlamport-sha3-384-pub,           key,            0x1a15,         draft,      Lamport public key based on SHA3-384\nlamport-sha3-256-pub,           key,            0x1a16,         draft,      Lamport public key based on SHA3-256\nlamport-sha3-512-priv,          key,            0x1a24,         draft,      Lamport private key based on SHA3-512\nlamport-sha3-384-priv,          key,            0x1a25,         draft,      Lamport private key based on SHA3-384\nlamport-sha3-256-priv,          key,            0x1a26,         draft,      Lamport private key based on SHA3-256\nlamport-sha3-512-priv-share,    key,            0x1a34,         draft,      Lamport private key share based on SHA3-512 and split with Shamir gf256\nlamport-sha3-384-priv-share,    key,            0x1a35,         draft,      Lamport private key share based on SHA3-384 and split with Shamir gf256\nlamport-sha3-256-priv-share,    key,            0x1a36,         draft,      Lamport private key share based on SHA3-256 and split with Shamir gf256\nlamport-sha3-512-sig,           multisig,       0x1a44,         draft,      Lamport signature based on SHA3-512\nlamport-sha3-384-sig,           multisig,       0x1a45,         draft,      Lamport signature based on SHA3-384\nlamport-sha3-256-sig,           multisig,       0x1a46,         draft,      Lamport signature based on SHA3-256\nlamport-sha3-512-sig-share,     multisig,       0x1a54,         draft,      Lamport signature share based on SHA3-512 and split with Shamir gf256\nlamport-sha3-384-sig-share,     multisig,       0x1a55,         draft,      Lamport signature share based on SHA3-384 and split with Shamir gf256\nlamport-sha3-256-sig-share,     multisig,       0x1a56,         draft,      Lamport signature share based on SHA3-256 and split with Shamir gf256\nkt-128,                         multihash,      0x1d01,         draft,      KangarooTwelve KT128 extendable-output hash function (XOF) as defined in RFC 9861\nkt-256,                         multihash,      0x1d02,         draft,      KangarooTwelve KT256 extendable-output hash function (XOF) as defined in RFC 9861\naes-gcm-256,                    encryption,     0x2000,         draft,      AES Galois/Counter Mode with 256-bit key and 12-byte IV\nsilverpine,                     multiaddr,      0x3f42,         draft,      Experimental QUIC over yggdrasil and ironwood routing protocol\nsm3-256,                        multihash,      0x534d,         draft,\nsha256a,                        hash,           0x7012,         draft,      The sum of multiple sha2-256 hashes; as specified by Ceramic CIP-124.\nchacha20-poly1305,              multikey,       0xa000,         draft,      ChaCha20_Poly1305 encryption scheme\nblake2b-8,                      multihash,      0xb201,         draft,      Blake2b consists of 64 output lengths that give different hashes\nblake2b-16,                     multihash,      0xb202,         draft,\nblake2b-24,                     multihash,      0xb203,         draft,\nblake2b-32,                     multihash,      0xb204,         draft,\nblake2b-40,                     multihash,      0xb205,         draft,\nblake2b-48,                     multihash,      0xb206,         draft,\nblake2b-56,                     multihash,      0xb207,         draft,\nblake2b-64,                     multihash,      0xb208,         draft,\nblake2b-72,                     multihash,      0xb209,         draft,\nblake2b-80,                     multihash,      0xb20a,         draft,\nblake2b-88,                     multihash,      0xb20b,         draft,\nblake2b-96,                     multihash,      0xb20c,         draft,\nblake2b-104,                    multihash,      0xb20d,         draft,\nblake2b-112,                    multihash,      0xb20e,         draft,\nblake2b-120,                    multihash,      0xb20f,         draft,\nblake2b-128,                    multihash,      0xb210,         draft,\nblake2b-136,                    multihash,      0xb211,         draft,\nblake2b-144,                    multihash,      0xb212,         draft,\nblake2b-152,                    multihash,      0xb213,         draft,\nblake2b-160,                    multihash,      0xb214,         draft,\nblake2b-168,                    multihash,      0xb215,         draft,\nblake2b-176,                    multihash,      0xb216,         draft,\nblake2b-184,                    multihash,      0xb217,         draft,\nblake2b-192,                    multihash,      0xb218,         draft,\nblake2b-200,                    multihash,      0xb219,         draft,\nblake2b-208,                    multihash,      0xb21a,         draft,\nblake2b-216,                    multihash,      0xb21b,         draft,\nblake2b-224,                    multihash,      0xb21c,         draft,\nblake2b-232,                    multihash,      0xb21d,         draft,\nblake2b-240,                    multihash,      0xb21e,         draft,\nblake2b-248,                    multihash,      0xb21f,         draft,\nblake2b-256,                    multihash,      0xb220,         permanent,\nblake2b-264,                    multihash,      0xb221,         draft,\nblake2b-272,                    multihash,      0xb222,         draft,\nblake2b-280,                    multihash,      0xb223,         draft,\nblake2b-288,                    multihash,      0xb224,         draft,\nblake2b-296,                    multihash,      0xb225,         draft,\nblake2b-304,                    multihash,      0xb226,         draft,\nblake2b-312,                    multihash,      0xb227,         draft,\nblake2b-320,                    multihash,      0xb228,         draft,\nblake2b-328,                    multihash,      0xb229,         draft,\nblake2b-336,                    multihash,      0xb22a,         draft,\nblake2b-344,                    multihash,      0xb22b,         draft,\nblake2b-352,                    multihash,      0xb22c,         draft,\nblake2b-360,                    multihash,      0xb22d,         draft,\nblake2b-368,                    multihash,      0xb22e,         draft,\nblake2b-376,                    multihash,      0xb22f,         draft,\nblake2b-384,                    multihash,      0xb230,         draft,\nblake2b-392,                    multihash,      0xb231,         draft,\nblake2b-400,                    multihash,      0xb232,         draft,\nblake2b-408,                    multihash,      0xb233,         draft,\nblake2b-416,                    multihash,      0xb234,         draft,\nblake2b-424,                    multihash,      0xb235,         draft,\nblake2b-432,                    multihash,      0xb236,         draft,\nblake2b-440,                    multihash,      0xb237,         draft,\nblake2b-448,                    multihash,      0xb238,         draft,\nblake2b-456,                    multihash,      0xb239,         draft,\nblake2b-464,                    multihash,      0xb23a,         draft,\nblake2b-472,                    multihash,      0xb23b,         draft,\nblake2b-480,                    multihash,      0xb23c,         draft,\nblake2b-488,                    multihash,      0xb23d,         draft,\nblake2b-496,                    multihash,      0xb23e,         draft,\nblake2b-504,                    multihash,      0xb23f,         draft,\nblake2b-512,                    multihash,      0xb240,         draft,\nblake2s-8,                      multihash,      0xb241,         draft,      Blake2s consists of 32 output lengths that give different hashes\nblake2s-16,                     multihash,      0xb242,         draft,\nblake2s-24,                     multihash,      0xb243,         draft,\nblake2s-32,                     multihash,      0xb244,         draft,\nblake2s-40,                     multihash,      0xb245,         draft,\nblake2s-48,                     multihash,      0xb246,         draft,\nblake2s-56,                     multihash,      0xb247,         draft,\nblake2s-64,                     multihash,      0xb248,         draft,\nblake2s-72,                     multihash,      0xb249,         draft,\nblake2s-80,                     multihash,      0xb24a,         draft,\nblake2s-88,                     multihash,      0xb24b,         draft,\nblake2s-96,                     multihash,      0xb24c,         draft,\nblake2s-104,                    multihash,      0xb24d,         draft,\nblake2s-112,                    multihash,      0xb24e,         draft,\nblake2s-120,                    multihash,      0xb24f,         draft,\nblake2s-128,                    multihash,      0xb250,         draft,\nblake2s-136,                    multihash,      0xb251,         draft,\nblake2s-144,                    multihash,      0xb252,         draft,\nblake2s-152,                    multihash,      0xb253,         draft,\nblake2s-160,                    multihash,      0xb254,         draft,\nblake2s-168,                    multihash,      0xb255,         draft,\nblake2s-176,                    multihash,      0xb256,         draft,\nblake2s-184,                    multihash,      0xb257,         draft,\nblake2s-192,                    multihash,      0xb258,         draft,\nblake2s-200,                    multihash,      0xb259,         draft,\nblake2s-208,                    multihash,      0xb25a,         draft,\nblake2s-216,                    multihash,      0xb25b,         draft,\nblake2s-224,                    multihash,      0xb25c,         draft,\nblake2s-232,                    multihash,      0xb25d,         draft,\nblake2s-240,                    multihash,      0xb25e,         draft,\nblake2s-248,                    multihash,      0xb25f,         draft,\nblake2s-256,                    multihash,      0xb260,         draft,\nskein256-8,                     multihash,      0xb301,         draft,      Skein256 consists of 32 output lengths that give different hashes\nskein256-16,                    multihash,      0xb302,         draft,\nskein256-24,                    multihash,      0xb303,         draft,\nskein256-32,                    multihash,      0xb304,         draft,\nskein256-40,                    multihash,      0xb305,         draft,\nskein256-48,                    multihash,      0xb306,         draft,\nskein256-56,                    multihash,      0xb307,         draft,\nskein256-64,                    multihash,      0xb308,         draft,\nskein256-72,                    multihash,      0xb309,         draft,\nskein256-80,                    multihash,      0xb30a,         draft,\nskein256-88,                    multihash,      0xb30b,         draft,\nskein256-96,                    multihash,      0xb30c,         draft,\nskein256-104,                   multihash,      0xb30d,         draft,\nskein256-112,                   multihash,      0xb30e,         draft,\nskein256-120,                   multihash,      0xb30f,         draft,\nskein256-128,                   multihash,      0xb310,         draft,\nskein256-136,                   multihash,      0xb311,         draft,\nskein256-144,                   multihash,      0xb312,         draft,\nskein256-152,                   multihash,      0xb313,         draft,\nskein256-160,                   multihash,      0xb314,         draft,\nskein256-168,                   multihash,      0xb315,         draft,\nskein256-176,                   multihash,      0xb316,         draft,\nskein256-184,                   multihash,      0xb317,         draft,\nskein256-192,                   multihash,      0xb318,         draft,\nskein256-200,                   multihash,      0xb319,         draft,\nskein256-208,                   multihash,      0xb31a,         draft,\nskein256-216,                   multihash,      0xb31b,         draft,\nskein256-224,                   multihash,      0xb31c,         draft,\nskein256-232,                   multihash,      0xb31d,         draft,\nskein256-240,                   multihash,      0xb31e,         draft,\nskein256-248,                   multihash,      0xb31f,         draft,\nskein256-256,                   multihash,      0xb320,         draft,\nskein512-8,                     multihash,      0xb321,         draft,      Skein512 consists of 64 output lengths that give different hashes\nskein512-16,                    multihash,      0xb322,         draft,\nskein512-24,                    multihash,      0xb323,         draft,\nskein512-32,                    multihash,      0xb324,         draft,\nskein512-40,                    multihash,      0xb325,         draft,\nskein512-48,                    multihash,      0xb326,         draft,\nskein512-56,                    multihash,      0xb327,         draft,\nskein512-64,                    multihash,      0xb328,         draft,\nskein512-72,                    multihash,      0xb329,         draft,\nskein512-80,                    multihash,      0xb32a,         draft,\nskein512-88,                    multihash,      0xb32b,         draft,\nskein512-96,                    multihash,      0xb32c,         draft,\nskein512-104,                   multihash,      0xb32d,         draft,\nskein512-112,                   multihash,      0xb32e,         draft,\nskein512-120,                   multihash,      0xb32f,         draft,\nskein512-128,                   multihash,      0xb330,         draft,\nskein512-136,                   multihash,      0xb331,         draft,\nskein512-144,                   multihash,      0xb332,         draft,\nskein512-152,                   multihash,      0xb333,         draft,\nskein512-160,                   multihash,      0xb334,         draft,\nskein512-168,                   multihash,      0xb335,         draft,\nskein512-176,                   multihash,      0xb336,         draft,\nskein512-184,                   multihash,      0xb337,         draft,\nskein512-192,                   multihash,      0xb338,         draft,\nskein512-200,                   multihash,      0xb339,         draft,\nskein512-208,                   multihash,      0xb33a,         draft,\nskein512-216,                   multihash,      0xb33b,         draft,\nskein512-224,                   multihash,      0xb33c,         draft,\nskein512-232,                   multihash,      0xb33d,         draft,\nskein512-240,                   multihash,      0xb33e,         draft,\nskein512-248,                   multihash,      0xb33f,         draft,\nskein512-256,                   multihash,      0xb340,         draft,\nskein512-264,                   multihash,      0xb341,         draft,\nskein512-272,                   multihash,      0xb342,         draft,\nskein512-280,                   multihash,      0xb343,         draft,\nskein512-288,                   multihash,      0xb344,         draft,\nskein512-296,                   multihash,      0xb345,         draft,\nskein512-304,                   multihash,      0xb346,         draft,\nskein512-312,                   multihash,      0xb347,         draft,\nskein512-320,                   multihash,      0xb348,         draft,\nskein512-328,                   multihash,      0xb349,         draft,\nskein512-336,                   multihash,      0xb34a,         draft,\nskein512-344,                   multihash,      0xb34b,         draft,\nskein512-352,                   multihash,      0xb34c,         draft,\nskein512-360,                   multihash,      0xb34d,         draft,\nskein512-368,                   multihash,      0xb34e,         draft,\nskein512-376,                   multihash,      0xb34f,         draft,\nskein512-384,                   multihash,      0xb350,         draft,\nskein512-392,                   multihash,      0xb351,         draft,\nskein512-400,                   multihash,      0xb352,         draft,\nskein512-408,                   multihash,      0xb353,         draft,\nskein512-416,                   multihash,      0xb354,         draft,\nskein512-424,                   multihash,      0xb355,         draft,\nskein512-432,                   multihash,      0xb356,         draft,\nskein512-440,                   multihash,      0xb357,         draft,\nskein512-448,                   multihash,      0xb358,         draft,\nskein512-456,                   multihash,      0xb359,         draft,\nskein512-464,                   multihash,      0xb35a,         draft,\nskein512-472,                   multihash,      0xb35b,         draft,\nskein512-480,                   multihash,      0xb35c,         draft,\nskein512-488,                   multihash,      0xb35d,         draft,\nskein512-496,                   multihash,      0xb35e,         draft,\nskein512-504,                   multihash,      0xb35f,         draft,\nskein512-512,                   multihash,      0xb360,         draft,\nskein1024-8,                    multihash,      0xb361,         draft,      Skein1024 consists of 128 output lengths that give different hashes\nskein1024-16,                   multihash,      0xb362,         draft,\nskein1024-24,                   multihash,      0xb363,         draft,\nskein1024-32,                   multihash,      0xb364,         draft,\nskein1024-40,                   multihash,      0xb365,         draft,\nskein1024-48,                   multihash,      0xb366,         draft,\nskein1024-56,                   multihash,      0xb367,         draft,\nskein1024-64,                   multihash,      0xb368,         draft,\nskein1024-72,                   multihash,      0xb369,         draft,\nskein1024-80,                   multihash,      0xb36a,         draft,\nskein1024-88,                   multihash,      0xb36b,         draft,\nskein1024-96,                   multihash,      0xb36c,         draft,\nskein1024-104,                  multihash,      0xb36d,         draft,\nskein1024-112,                  multihash,      0xb36e,         draft,\nskein1024-120,                  multihash,      0xb36f,         draft,\nskein1024-128,                  multihash,      0xb370,         draft,\nskein1024-136,                  multihash,      0xb371,         draft,\nskein1024-144,                  multihash,      0xb372,         draft,\nskein1024-152,                  multihash,      0xb373,         draft,\nskein1024-160,                  multihash,      0xb374,         draft,\nskein1024-168,                  multihash,      0xb375,         draft,\nskein1024-176,                  multihash,      0xb376,         draft,\nskein1024-184,                  multihash,      0xb377,         draft,\nskein1024-192,                  multihash,      0xb378,         draft,\nskein1024-200,                  multihash,      0xb379,         draft,\nskein1024-208,                  multihash,      0xb37a,         draft,\nskein1024-216,                  multihash,      0xb37b,         draft,\nskein1024-224,                  multihash,      0xb37c,         draft,\nskein1024-232,                  multihash,      0xb37d,         draft,\nskein1024-240,                  multihash,      0xb37e,         draft,\nskein1024-248,                  multihash,      0xb37f,         draft,\nskein1024-256,                  multihash,      0xb380,         draft,\nskein1024-264,                  multihash,      0xb381,         draft,\nskein1024-272,                  multihash,      0xb382,         draft,\nskein1024-280,                  multihash,      0xb383,         draft,\nskein1024-288,                  multihash,      0xb384,         draft,\nskein1024-296,                  multihash,      0xb385,         draft,\nskein1024-304,                  multihash,      0xb386,         draft,\nskein1024-312,                  multihash,      0xb387,         draft,\nskein1024-320,                  multihash,      0xb388,         draft,\nskein1024-328,                  multihash,      0xb389,         draft,\nskein1024-336,                  multihash,      0xb38a,         draft,\nskein1024-344,                  multihash,      0xb38b,         draft,\nskein1024-352,                  multihash,      0xb38c,         draft,\nskein1024-360,                  multihash,      0xb38d,         draft,\nskein1024-368,                  multihash,      0xb38e,         draft,\nskein1024-376,                  multihash,      0xb38f,         draft,\nskein1024-384,                  multihash,      0xb390,         draft,\nskein1024-392,                  multihash,      0xb391,         draft,\nskein1024-400,                  multihash,      0xb392,         draft,\nskein1024-408,                  multihash,      0xb393,         draft,\nskein1024-416,                  multihash,      0xb394,         draft,\nskein1024-424,                  multihash,      0xb395,         draft,\nskein1024-432,                  multihash,      0xb396,         draft,\nskein1024-440,                  multihash,      0xb397,         draft,\nskein1024-448,                  multihash,      0xb398,         draft,\nskein1024-456,                  multihash,      0xb399,         draft,\nskein1024-464,                  multihash,      0xb39a,         draft,\nskein1024-472,                  multihash,      0xb39b,         draft,\nskein1024-480,                  multihash,      0xb39c,         draft,\nskein1024-488,                  multihash,      0xb39d,         draft,\nskein1024-496,                  multihash,      0xb39e,         draft,\nskein1024-504,                  multihash,      0xb39f,         draft,\nskein1024-512,                  multihash,      0xb3a0,         draft,\nskein1024-520,                  multihash,      0xb3a1,         draft,\nskein1024-528,                  multihash,      0xb3a2,         draft,\nskein1024-536,                  multihash,      0xb3a3,         draft,\nskein1024-544,                  multihash,      0xb3a4,         draft,\nskein1024-552,                  multihash,      0xb3a5,         draft,\nskein1024-560,                  multihash,      0xb3a6,         draft,\nskein1024-568,                  multihash,      0xb3a7,         draft,\nskein1024-576,                  multihash,      0xb3a8,         draft,\nskein1024-584,                  multihash,      0xb3a9,         draft,\nskein1024-592,                  multihash,      0xb3aa,         draft,\nskein1024-600,                  multihash,      0xb3ab,         draft,\nskein1024-608,                  multihash,      0xb3ac,         draft,\nskein1024-616,                  multihash,      0xb3ad,         draft,\nskein1024-624,                  multihash,      0xb3ae,         draft,\nskein1024-632,                  multihash,      0xb3af,         draft,\nskein1024-640,                  multihash,      0xb3b0,         draft,\nskein1024-648,                  multihash,      0xb3b1,         draft,\nskein1024-656,                  multihash,      0xb3b2,         draft,\nskein1024-664,                  multihash,      0xb3b3,         draft,\nskein1024-672,                  multihash,      0xb3b4,         draft,\nskein1024-680,                  multihash,      0xb3b5,         draft,\nskein1024-688,                  multihash,      0xb3b6,         draft,\nskein1024-696,                  multihash,      0xb3b7,         draft,\nskein1024-704,                  multihash,      0xb3b8,         draft,\nskein1024-712,                  multihash,      0xb3b9,         draft,\nskein1024-720,                  multihash,      0xb3ba,         draft,\nskein1024-728,                  multihash,      0xb3bb,         draft,\nskein1024-736,                  multihash,      0xb3bc,         draft,\nskein1024-744,                  multihash,      0xb3bd,         draft,\nskein1024-752,                  multihash,      0xb3be,         draft,\nskein1024-760,                  multihash,      0xb3bf,         draft,\nskein1024-768,                  multihash,      0xb3c0,         draft,\nskein1024-776,                  multihash,      0xb3c1,         draft,\nskein1024-784,                  multihash,      0xb3c2,         draft,\nskein1024-792,                  multihash,      0xb3c3,         draft,\nskein1024-800,                  multihash,      0xb3c4,         draft,\nskein1024-808,                  multihash,      0xb3c5,         draft,\nskein1024-816,                  multihash,      0xb3c6,         draft,\nskein1024-824,                  multihash,      0xb3c7,         draft,\nskein1024-832,                  multihash,      0xb3c8,         draft,\nskein1024-840,                  multihash,      0xb3c9,         draft,\nskein1024-848,                  multihash,      0xb3ca,         draft,\nskein1024-856,                  multihash,      0xb3cb,         draft,\nskein1024-864,                  multihash,      0xb3cc,         draft,\nskein1024-872,                  multihash,      0xb3cd,         draft,\nskein1024-880,                  multihash,      0xb3ce,         draft,\nskein1024-888,                  multihash,      0xb3cf,         draft,\nskein1024-896,                  multihash,      0xb3d0,         draft,\nskein1024-904,                  multihash,      0xb3d1,         draft,\nskein1024-912,                  multihash,      0xb3d2,         draft,\nskein1024-920,                  multihash,      0xb3d3,         draft,\nskein1024-928,                  multihash,      0xb3d4,         draft,\nskein1024-936,                  multihash,      0xb3d5,         draft,\nskein1024-944,                  multihash,      0xb3d6,         draft,\nskein1024-952,                  multihash,      0xb3d7,         draft,\nskein1024-960,                  multihash,      0xb3d8,         draft,\nskein1024-968,                  multihash,      0xb3d9,         draft,\nskein1024-976,                  multihash,      0xb3da,         draft,\nskein1024-984,                  multihash,      0xb3db,         draft,\nskein1024-992,                  multihash,      0xb3dc,         draft,\nskein1024-1000,                 multihash,      0xb3dd,         draft,\nskein1024-1008,                 multihash,      0xb3de,         draft,\nskein1024-1016,                 multihash,      0xb3df,         draft,\nskein1024-1024,                 multihash,      0xb3e0,         draft,\nxxh-32,                         hash,           0xb3e1,         draft,      Extremely fast non-cryptographic hash algorithm\nxxh-64,                         hash,           0xb3e2,         draft,      Extremely fast non-cryptographic hash algorithm\nxxh3-64,                        hash,           0xb3e3,         draft,      Extremely fast non-cryptographic hash algorithm\nxxh3-128,                       hash,           0xb3e4,         draft,      Extremely fast non-cryptographic hash algorithm\nposeidon-bls12_381-a2-fc1,      multihash,      0xb401,         permanent,  Poseidon using BLS12-381 and arity of 2 with Filecoin parameters\nposeidon-bls12_381-a2-fc1-sc,   multihash,      0xb402,         draft,      Poseidon using BLS12-381 and arity of 2 with Filecoin parameters - high-security variant\nrdfc-1,                         ipld,           0xb403,         draft,      The result of canonicalizing an input according to RDFC-1.0 and then expressing its hash value as a multihash value.\nssz,                            serialization,  0xb501,         draft,      SimpleSerialize (SSZ) serialization\nssz-sha2-256-bmt,               multihash,      0xb502,         draft,      SSZ Merkle tree root using SHA2-256 as the hashing function and SSZ serialization for the block binary\nsha2-256-chunked,               multihash,      0xb510,         draft,      Hash of concatenated SHA2-256 digests of 8*2^n MiB source chunks; n = ceil(log2(source_size/(10^4 * 8MiB)))\njson-jcs,                       ipld,           0xb601,         draft,      The result of canonicalizing an input according to JCS - JSON Canonicalisation Scheme (RFC 8785)\nbittorrent-pieces-root,         multihash,      0xb702,         draft,      BitTorrent v2 pieces root hash.\niscc,                           softhash,       0xcc01,         draft,      ISCC (International Standard Content Code) - similarity preserving hash\nzeroxcert-imprint-256,          zeroxcert,      0xce11,         draft,      0xcert Asset Imprint (root hash)\nnonstandard-sig,                varsig,         0xd000,         deprecated, Namespace for all not yet standard signature algorithms\nbcrypt-pbkdf,                   multihash,      0xd00d,         draft,      Bcrypt-PBKDF key derivation function\nes256k,                         varsig,         0xd0e7,         draft,      ES256K Signature Algorithm (secp256k1)\nbls12_381-g1-sig,               varsig,         0xd0ea,         draft,      G1 signature for BLS12-381\nbls12_381-g2-sig,               varsig,         0xd0eb,         draft,      G2 signature for BLS12-381\neddsa,                          varsig,         0xd0ed,         draft,      Edwards-Curve Digital Signature Algorithm\neip-191,                        varsig,         0xd191,         draft,      EIP-191 Ethereum Signed Data Standard\njwk_jcs-pub,                    key,            0xeb51,         draft,      JSON object containing only the required members of a JWK (RFC 7518 and RFC 7517) representing the public key. Serialisation based on JCS (RFC 8785)\ned2k,                           multihash,      0xed20,         draft,      eDonkey2000 hash.\nfil-commitment-unsealed,        filecoin,       0xf101,         permanent,  Filecoin piece or sector data commitment merkle node/root (CommP & CommD)\nfil-commitment-sealed,          filecoin,       0xf102,         permanent,  Filecoin sector data commitment merkle node/root - sealed and replicated (CommR)\nshelter-contract-manifest,      shelter,        0x511e00,       draft,      Shelter protocol contract manifest\nshelter-contract-text,          shelter,        0x511e01,       draft,      Shelter protocol contract text\nshelter-contract-data,          shelter,        0x511e02,       draft,      Shelter protocol contract data (contract chain)\nshelter-file-manifest,          shelter,        0x511e03,       draft,      Shelter protocol file manifest\nshelter-file-chunk,             shelter,        0x511e04,       draft,      Shelter protocol file chunk\nplaintextv2,                    multiaddr,      0x706c61,       draft,\nholochain-adr-v0,               holochain,      0x807124,       draft,      Holochain v0 address    + 8 R-S (63 x Base-32)\nholochain-adr-v1,               holochain,      0x817124,       draft,      Holochain v1 address    + 8 R-S (63 x Base-32)\nholochain-key-v0,               holochain,      0x947124,       draft,      Holochain v0 public key + 8 R-S (63 x Base-32)\nholochain-key-v1,               holochain,      0x957124,       draft,      Holochain v1 public key + 8 R-S (63 x Base-32)\nholochain-sig-v0,               holochain,      0xa27124,       draft,      Holochain v0 signature  + 8 R-S (63 x Base-32)\nholochain-sig-v1,               holochain,      0xa37124,       draft,      Holochain v1 signature  + 8 R-S (63 x Base-32)\nskynet-ns,                      namespace,      0xb19910,       draft,      Skynet Namespace\narweave-ns,                     namespace,      0xb29910,       draft,      Arweave Namespace\nsubspace-ns,                    namespace,      0xb39910,       draft,      Subspace Network Namespace\nkumandra-ns,                    namespace,      0xb49910,       draft,      Kumandra Network Namespace\nmassa,                          namespace,      0xb59910,       draft,      Massa blockchain ecosystem\nmassa-mainnet,                  namespace,      0xb59911,       draft,      Massa mainnet network\nmassa-buildnet,                 namespace,      0xb59912,       draft,      Massa buildnet network\nmassa-deweb,                    namespace,      0xb59913,       draft,      Massa DeWeb decentralized web\nmassa-gossip,                   namespace,      0xb59914,       draft,      Massa Gossip decentralized messaging\nmassa-mns,                      namespace,      0xb59915,       draft,      Massa Name Service target\nmassa-sc,                       namespace,      0xb59916,       draft,      Massa smart-contract address target\nmassa-gossip-id,                namespace,      0xb59917,       draft,      Massa Gossip ID target\nadnl,                           namespace,      0xb69910,       draft,      TON ADNL address: 32-byte SHA-256(0x4813b4c6_LE || Ed25519-pubkey)\nes256,                          varsig,         0xd01200,       draft,      ES256 Signature Algorithm\nes384,                          varsig,         0xd01201,       draft,      ES384 Signature Algorithm\nes512,                          varsig,         0xd01202,       draft,      ES512 Signature Algorithm\nrs256,                          varsig,         0xd01205,       draft,      RS256 Signature Algorithm\nbip340,                         varsig,         0xd01206,       draft,      BIP340 Signature Algorithm\nes256k-msig,                    multisig,       0xd01300,       draft,      ES256K (secp256k1) Signature as Multisig\nbls12_381-g1-msig,              multisig,       0xd01301,       draft,      G1 signature for BLS-12381-G2 as Multisig\nbls12_381-g2-msig,              multisig,       0xd01302,       draft,      G2 signature for BLS-12381-G1 as Multisig\neddsa-msig,                     multisig,       0xd01303,       draft,      Edwards-Curve Digital Signature as Multisig\nbls12_381-g1-share-msig,        multisig,       0xd01304,       draft,      G1 threshold signature share for BLS-12381-G2 as Multisig\nbls12_381-g2-share-msig,        multisig,       0xd01305,       draft,      G2 threshold signature share for BLS-12381-G1 as Multisig\nlamport-msig,                   multisig,       0xd01306,       draft,      Lamport signature as Multisig\nlamport-share-msig,             multisig,       0xd01307,       draft,      Lamport threshold signature share as Multisig\nes256-msig,                     multisig,       0xd01308,       draft,      ECDSA P-256 Signature as Multisig\nes384-msig,                     multisig,       0xd01309,       draft,      ECDSA P-384 Signature as Multisig\nes521-msig,                     multisig,       0xd0130a,       draft,      ECDSA P-521 Signature as Multisig\nrs256-msig,                     multisig,       0xd0130b,       draft,      RS256 Signature as Multisig\nscion,                          multiaddr,      0xd02000,       draft,      SCION Internet architecture\n"
  },
  {
    "path": "validate.py",
    "content": "#!/usr/bin/env python3\n\nimport csv\nimport sys\nimport re\n\ndef check(fname='table.csv'):\n    class CheckError(Exception):\n        pass\n\n    success = True\n    with open(fname) as table:\n        tablereader = csv.reader(table, strict=True, skipinitialspace=False)\n        codes = {}\n        names = {}\n        headerOffsets = []\n        lastCode = -1\n        for line, row in enumerate(tablereader):\n            try:\n                # Check the padding of each column\n                offset = 0\n                for col, item in enumerate(row):\n                    le = len(item)\n                    if col == 0:  # first column 0 has no padding\n                        offset = le\n                        continue\n                    offset = offset + le\n                    thisOffset = offset - len(item.lstrip())\n                    if line == 0:  # header line sets the standard\n                        headerOffsets.append(thisOffset)\n                    elif col < len(headerOffsets) or le != 0:\n                        if thisOffset != headerOffsets[col - 1]:\n                            raise CheckError(f\"bad spacing at column {col}\")\n\n                # Skip the header\n                if line == 0:\n                    continue\n\n                # Check for invalid rows\n                if len(row) != 5:\n                    raise CheckError(f\"expected 4 items, got {len(row)}\")\n\n                [name, _, code, _, _] = row\n\n                # Check for a name\n                if not name:\n                    raise CheckError(f\"empty protocol name for code '{code}'\")\n\n                # Check code format\n                if not re.match(r\"^\\s*0x([0-9a-f][0-9a-f])+$\", code):\n                    raise CheckError(f\"code for '{name}' does not look like a byte sequence: '{code}'\")\n\n                # Check name format\n                if not re.match(r\"^[a-z][a-z0-9_-]+$\", name):\n                    raise CheckError(f\"name '{name}' violates naming restrictions\")\n\n                # Parse the code\n                try:\n                    code = int(code, 16)\n                except Exception as e:\n                    raise CheckError(f\"failed to parse code '{code}' for '{name}': {e}\")\n\n                # Check codes are ascending\n                ooo = code < lastCode\n                lastCode = code\n                if ooo:\n                    raise CheckError(f\"code {code} is out of order, previous code was {lastCode}\")\n\n                # Finally, check for duplicates\n\n                if name in names:\n                    raise CheckError(f\"found duplicate {name}: {code} and {names[name]}\")\n                else:\n                    names[name] = code\n\n                if code in codes:\n                    raise CheckError(\n                        f\"found duplicate for code {hex(code)} \"\n                        f\"for '{codes[code]}' and '{name}'\"\n                    )\n                else:\n                    codes[code] = name\n\n                # Reserved Code Range: Private Use Area – Do not permit any codes in this range\n                if code in range(0x300000, 0x400000):\n                    raise CheckError(\n                        f\"found code in Private Use Area: {hex(code)} with name '{name}'\"\n                    )\n            except CheckError as e:\n                success = False\n                print(f\"row {line}: {e}\", file=sys.stderr)\n\n    return success\n\nif __name__ == \"__main__\":\n    if not check():\n        sys.exit(1)\n"
  }
]