From 8c84982755cd09514f8f9e67b721c5c58a17448f Mon Sep 17 00:00:00 2001 From: acul71 Date: Mon, 7 Sep 2026 22:47:31 +0200 Subject: [PATCH] feat: preserve tag/status/description when generating constants Update tools/update-table.py to emit full CSV metadata into constants.CODECS, regenerate the table, and add smoke tests. Closes #38. Co-authored-by: Cursor --- multicodec/constants.py | 2109 +++++++++++++++++++++++++++++- newsfragments/38.internal.rst | 1 + ruff.toml | 4 + tests/test_constants_metadata.py | 24 + tools/update-table.py | 59 +- 5 files changed, 2177 insertions(+), 20 deletions(-) create mode 100644 newsfragments/38.internal.rst create mode 100644 tests/test_constants_metadata.py diff --git a/multicodec/constants.py b/multicodec/constants.py index 37ec44b..33217bf 100644 --- a/multicodec/constants.py +++ b/multicodec/constants.py @@ -1,1839 +1,3940 @@ # THIS FILE IS GENERATED, DO NO EDIT MANUALLY # For more information see the README.md -CODECS = { +from __future__ import annotations + +from typing import Any, cast + +CODECS: dict[str, dict[str, Any]] = { # serialization "protobuf": { "prefix": 0x50, + "tag": "serialization", + "status": "draft", + "description": "Protocol Buffers", }, "rlp": { "prefix": 0x60, + "tag": "serialization", + "status": "draft", + "description": "recursive length prefix", }, "bencode": { "prefix": 0x63, + "tag": "serialization", + "status": "draft", + "description": "bencode", }, "messagepack": { "prefix": 0x0201, + "tag": "serialization", + "status": "draft", + "description": "MessagePack", }, "car": { "prefix": 0x0202, + "tag": "serialization", + "status": "draft", + "description": "Content Addressable aRchive (CAR)", }, "x509-certificate": { "prefix": 0x0210, + "tag": "serialization", + "status": "draft", + "description": "DER-encoded X.509 (PKIX) certificate per RFC 5280; single certificate only (no chain); raw DER bytes (not PEM)", }, "ipns-record": { "prefix": 0x0300, + "tag": "serialization", + "status": "permanent", + "description": "Signed IPNS Record", }, "car-index-sorted": { "prefix": 0x0400, + "tag": "serialization", + "status": "draft", + "description": "CARv2 IndexSorted index format", }, "car-multihash-index-sorted": { "prefix": 0x0401, + "tag": "serialization", + "status": "draft", + "description": "CARv2 MultihashIndexSorted index format", }, "provenance-log": { "prefix": 0x1208, + "tag": "serialization", + "status": "draft", + "description": "Verifiable and permissioned append-only log", }, "provenance-log-entry": { "prefix": 0x1209, + "tag": "serialization", + "status": "draft", + "description": "Verifiable and permissioned append-only log entry", }, "provenance-log-script": { "prefix": 0x120A, + "tag": "serialization", + "status": "draft", + "description": "Verifiable and permissioned append-only log script", }, "ssz": { "prefix": 0xB501, + "tag": "serialization", + "status": "draft", + "description": "SimpleSerialize (SSZ) serialization", }, # multiformat "multicodec": { "prefix": 0x30, + "tag": "multiformat", + "status": "draft", + "description": "", }, "multihash": { "prefix": 0x31, + "tag": "multiformat", + "status": "draft", + "description": "", }, "multiaddr": { "prefix": 0x32, + "tag": "multiformat", + "status": "draft", + "description": "", }, "multibase": { "prefix": 0x33, + "tag": "multiformat", + "status": "draft", + "description": "", }, "varsig": { "prefix": 0x34, + "tag": "multiformat", + "status": "draft", + "description": "Variable signature (varsig) multiformat", }, "caip-50": { "prefix": 0xCA, + "tag": "multiformat", + "status": "draft", + "description": "CAIP-50 multi-chain account ID", }, "multidid": { "prefix": 0x0D1D, + "tag": "multiformat", + "status": "draft", + "description": "Compact encoding for Decentralized Identifers", }, "multisig": { "prefix": 0x1239, + "tag": "multiformat", + "status": "draft", + "description": "Digital signature multiformat", }, "multikey": { "prefix": 0x123A, + "tag": "multiformat", + "status": "draft", + "description": "Encryption key multiformat", }, # multihash "identity": { "prefix": 0x00, + "tag": "multihash", + "status": "permanent", + "description": "raw binary", }, "sha1": { "prefix": 0x11, + "tag": "multihash", + "status": "permanent", + "description": "", }, "sha2-256": { "prefix": 0x12, + "tag": "multihash", + "status": "permanent", + "description": "", }, "sha2-512": { "prefix": 0x13, + "tag": "multihash", + "status": "permanent", + "description": "", }, "sha3-512": { "prefix": 0x14, + "tag": "multihash", + "status": "permanent", + "description": "", }, "sha3-384": { "prefix": 0x15, + "tag": "multihash", + "status": "permanent", + "description": "", }, "sha3-256": { "prefix": 0x16, + "tag": "multihash", + "status": "permanent", + "description": "", }, "sha3-224": { "prefix": 0x17, + "tag": "multihash", + "status": "permanent", + "description": "", }, "shake-128": { "prefix": 0x18, + "tag": "multihash", + "status": "draft", + "description": "", }, "shake-256": { "prefix": 0x19, + "tag": "multihash", + "status": "draft", + "description": "", }, "keccak-224": { "prefix": 0x1A, + "tag": "multihash", + "status": "draft", + "description": "keccak has variable output length. The number specifies the core length", }, "keccak-256": { "prefix": 0x1B, + "tag": "multihash", + "status": "draft", + "description": "", }, "keccak-384": { "prefix": 0x1C, + "tag": "multihash", + "status": "draft", + "description": "", }, "keccak-512": { "prefix": 0x1D, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake3": { "prefix": 0x1E, + "tag": "multihash", + "status": "draft", + "description": "BLAKE3 has a default 32 byte output length. The maximum length is (2^64)-1 bytes.", }, "sha2-384": { "prefix": 0x20, + "tag": "multihash", + "status": "permanent", + "description": "aka SHA-384; as specified by FIPS 180-4.", }, "dbl-sha2-256": { "prefix": 0x56, + "tag": "multihash", + "status": "draft", + "description": "", }, "md4": { "prefix": 0xD4, + "tag": "multihash", + "status": "draft", + "description": "", }, "md5": { "prefix": 0xD5, + "tag": "multihash", + "status": "draft", + "description": "", }, "fr32-sha256-trunc254-padbintree": { "prefix": 0x1011, + "tag": "multihash", + "status": "draft", + "description": "A balanced binary tree hash used in Filecoin Piece Commitments as described in FRC-0069", }, "sha2-256-trunc254-padded": { "prefix": 0x1012, + "tag": "multihash", + "status": "permanent", + "description": "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", }, "sha2-224": { "prefix": 0x1013, + "tag": "multihash", + "status": "permanent", + "description": "aka SHA-224; as specified by FIPS 180-4.", }, "sha2-512-224": { "prefix": 0x1014, + "tag": "multihash", + "status": "permanent", + "description": "aka SHA-512/224; as specified by FIPS 180-4.", }, "sha2-512-256": { "prefix": 0x1015, + "tag": "multihash", + "status": "permanent", + "description": "aka SHA-512/256; as specified by FIPS 180-4.", }, "ripemd-128": { "prefix": 0x1052, + "tag": "multihash", + "status": "draft", + "description": "", }, "ripemd-160": { "prefix": 0x1053, + "tag": "multihash", + "status": "draft", + "description": "", }, "ripemd-256": { "prefix": 0x1054, + "tag": "multihash", + "status": "draft", + "description": "", }, "ripemd-320": { "prefix": 0x1055, + "tag": "multihash", + "status": "draft", + "description": "", }, "x11": { "prefix": 0x1100, + "tag": "multihash", + "status": "draft", + "description": "", }, - "kangarootwelve": { + "kt-128": { "prefix": 0x1D01, + "tag": "multihash", + "status": "draft", + "description": "KangarooTwelve KT128 extendable-output hash function (XOF) as defined in RFC 9861", + }, + "kt-256": { + "prefix": 0x1D02, + "tag": "multihash", + "status": "draft", + "description": "KangarooTwelve KT256 extendable-output hash function (XOF) as defined in RFC 9861", }, "sm3-256": { "prefix": 0x534D, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-8": { "prefix": 0xB201, + "tag": "multihash", + "status": "draft", + "description": "Blake2b consists of 64 output lengths that give different hashes", }, "blake2b-16": { "prefix": 0xB202, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-24": { "prefix": 0xB203, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-32": { "prefix": 0xB204, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-40": { "prefix": 0xB205, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-48": { "prefix": 0xB206, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-56": { "prefix": 0xB207, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-64": { "prefix": 0xB208, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-72": { "prefix": 0xB209, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-80": { "prefix": 0xB20A, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-88": { "prefix": 0xB20B, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-96": { "prefix": 0xB20C, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-104": { "prefix": 0xB20D, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-112": { "prefix": 0xB20E, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-120": { "prefix": 0xB20F, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-128": { "prefix": 0xB210, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-136": { "prefix": 0xB211, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-144": { "prefix": 0xB212, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-152": { "prefix": 0xB213, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-160": { "prefix": 0xB214, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-168": { "prefix": 0xB215, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-176": { "prefix": 0xB216, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-184": { "prefix": 0xB217, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-192": { "prefix": 0xB218, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-200": { "prefix": 0xB219, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-208": { "prefix": 0xB21A, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-216": { "prefix": 0xB21B, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-224": { "prefix": 0xB21C, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-232": { "prefix": 0xB21D, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-240": { "prefix": 0xB21E, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-248": { "prefix": 0xB21F, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-256": { "prefix": 0xB220, + "tag": "multihash", + "status": "permanent", + "description": "", }, "blake2b-264": { "prefix": 0xB221, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-272": { "prefix": 0xB222, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-280": { "prefix": 0xB223, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-288": { "prefix": 0xB224, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-296": { "prefix": 0xB225, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-304": { "prefix": 0xB226, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-312": { "prefix": 0xB227, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-320": { "prefix": 0xB228, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-328": { "prefix": 0xB229, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-336": { "prefix": 0xB22A, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-344": { "prefix": 0xB22B, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-352": { "prefix": 0xB22C, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-360": { "prefix": 0xB22D, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-368": { "prefix": 0xB22E, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-376": { "prefix": 0xB22F, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-384": { "prefix": 0xB230, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-392": { "prefix": 0xB231, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-400": { "prefix": 0xB232, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-408": { "prefix": 0xB233, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-416": { "prefix": 0xB234, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-424": { "prefix": 0xB235, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-432": { "prefix": 0xB236, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-440": { "prefix": 0xB237, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-448": { "prefix": 0xB238, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-456": { "prefix": 0xB239, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-464": { "prefix": 0xB23A, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-472": { "prefix": 0xB23B, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-480": { "prefix": 0xB23C, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-488": { "prefix": 0xB23D, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-496": { "prefix": 0xB23E, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-504": { "prefix": 0xB23F, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2b-512": { "prefix": 0xB240, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2s-8": { "prefix": 0xB241, + "tag": "multihash", + "status": "draft", + "description": "Blake2s consists of 32 output lengths that give different hashes", }, "blake2s-16": { "prefix": 0xB242, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2s-24": { "prefix": 0xB243, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2s-32": { "prefix": 0xB244, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2s-40": { "prefix": 0xB245, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2s-48": { "prefix": 0xB246, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2s-56": { "prefix": 0xB247, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2s-64": { "prefix": 0xB248, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2s-72": { "prefix": 0xB249, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2s-80": { "prefix": 0xB24A, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2s-88": { "prefix": 0xB24B, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2s-96": { "prefix": 0xB24C, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2s-104": { "prefix": 0xB24D, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2s-112": { "prefix": 0xB24E, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2s-120": { "prefix": 0xB24F, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2s-128": { "prefix": 0xB250, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2s-136": { "prefix": 0xB251, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2s-144": { "prefix": 0xB252, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2s-152": { "prefix": 0xB253, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2s-160": { "prefix": 0xB254, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2s-168": { "prefix": 0xB255, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2s-176": { "prefix": 0xB256, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2s-184": { "prefix": 0xB257, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2s-192": { "prefix": 0xB258, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2s-200": { "prefix": 0xB259, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2s-208": { "prefix": 0xB25A, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2s-216": { "prefix": 0xB25B, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2s-224": { "prefix": 0xB25C, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2s-232": { "prefix": 0xB25D, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2s-240": { "prefix": 0xB25E, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2s-248": { "prefix": 0xB25F, + "tag": "multihash", + "status": "draft", + "description": "", }, "blake2s-256": { "prefix": 0xB260, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein256-8": { "prefix": 0xB301, + "tag": "multihash", + "status": "draft", + "description": "Skein256 consists of 32 output lengths that give different hashes", }, "skein256-16": { "prefix": 0xB302, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein256-24": { "prefix": 0xB303, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein256-32": { "prefix": 0xB304, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein256-40": { "prefix": 0xB305, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein256-48": { "prefix": 0xB306, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein256-56": { "prefix": 0xB307, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein256-64": { "prefix": 0xB308, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein256-72": { "prefix": 0xB309, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein256-80": { "prefix": 0xB30A, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein256-88": { "prefix": 0xB30B, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein256-96": { "prefix": 0xB30C, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein256-104": { "prefix": 0xB30D, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein256-112": { "prefix": 0xB30E, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein256-120": { "prefix": 0xB30F, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein256-128": { "prefix": 0xB310, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein256-136": { "prefix": 0xB311, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein256-144": { "prefix": 0xB312, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein256-152": { "prefix": 0xB313, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein256-160": { "prefix": 0xB314, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein256-168": { "prefix": 0xB315, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein256-176": { "prefix": 0xB316, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein256-184": { "prefix": 0xB317, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein256-192": { "prefix": 0xB318, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein256-200": { "prefix": 0xB319, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein256-208": { "prefix": 0xB31A, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein256-216": { "prefix": 0xB31B, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein256-224": { "prefix": 0xB31C, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein256-232": { "prefix": 0xB31D, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein256-240": { "prefix": 0xB31E, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein256-248": { "prefix": 0xB31F, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein256-256": { "prefix": 0xB320, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-8": { "prefix": 0xB321, + "tag": "multihash", + "status": "draft", + "description": "Skein512 consists of 64 output lengths that give different hashes", }, "skein512-16": { "prefix": 0xB322, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-24": { "prefix": 0xB323, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-32": { "prefix": 0xB324, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-40": { "prefix": 0xB325, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-48": { "prefix": 0xB326, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-56": { "prefix": 0xB327, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-64": { "prefix": 0xB328, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-72": { "prefix": 0xB329, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-80": { "prefix": 0xB32A, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-88": { "prefix": 0xB32B, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-96": { "prefix": 0xB32C, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-104": { "prefix": 0xB32D, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-112": { "prefix": 0xB32E, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-120": { "prefix": 0xB32F, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-128": { "prefix": 0xB330, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-136": { "prefix": 0xB331, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-144": { "prefix": 0xB332, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-152": { "prefix": 0xB333, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-160": { "prefix": 0xB334, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-168": { "prefix": 0xB335, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-176": { "prefix": 0xB336, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-184": { "prefix": 0xB337, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-192": { "prefix": 0xB338, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-200": { "prefix": 0xB339, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-208": { "prefix": 0xB33A, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-216": { "prefix": 0xB33B, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-224": { "prefix": 0xB33C, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-232": { "prefix": 0xB33D, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-240": { "prefix": 0xB33E, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-248": { "prefix": 0xB33F, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-256": { "prefix": 0xB340, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-264": { "prefix": 0xB341, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-272": { "prefix": 0xB342, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-280": { "prefix": 0xB343, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-288": { "prefix": 0xB344, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-296": { "prefix": 0xB345, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-304": { "prefix": 0xB346, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-312": { "prefix": 0xB347, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-320": { "prefix": 0xB348, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-328": { "prefix": 0xB349, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-336": { "prefix": 0xB34A, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-344": { "prefix": 0xB34B, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-352": { "prefix": 0xB34C, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-360": { "prefix": 0xB34D, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-368": { "prefix": 0xB34E, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-376": { "prefix": 0xB34F, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-384": { "prefix": 0xB350, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-392": { "prefix": 0xB351, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-400": { "prefix": 0xB352, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-408": { "prefix": 0xB353, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-416": { "prefix": 0xB354, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-424": { "prefix": 0xB355, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-432": { "prefix": 0xB356, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-440": { "prefix": 0xB357, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-448": { "prefix": 0xB358, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-456": { "prefix": 0xB359, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-464": { "prefix": 0xB35A, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-472": { "prefix": 0xB35B, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-480": { "prefix": 0xB35C, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-488": { "prefix": 0xB35D, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-496": { "prefix": 0xB35E, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-504": { "prefix": 0xB35F, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein512-512": { "prefix": 0xB360, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-8": { "prefix": 0xB361, + "tag": "multihash", + "status": "draft", + "description": "Skein1024 consists of 128 output lengths that give different hashes", }, "skein1024-16": { "prefix": 0xB362, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-24": { "prefix": 0xB363, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-32": { "prefix": 0xB364, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-40": { "prefix": 0xB365, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-48": { "prefix": 0xB366, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-56": { "prefix": 0xB367, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-64": { "prefix": 0xB368, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-72": { "prefix": 0xB369, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-80": { "prefix": 0xB36A, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-88": { "prefix": 0xB36B, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-96": { "prefix": 0xB36C, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-104": { "prefix": 0xB36D, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-112": { "prefix": 0xB36E, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-120": { "prefix": 0xB36F, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-128": { "prefix": 0xB370, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-136": { "prefix": 0xB371, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-144": { "prefix": 0xB372, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-152": { "prefix": 0xB373, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-160": { "prefix": 0xB374, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-168": { "prefix": 0xB375, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-176": { "prefix": 0xB376, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-184": { "prefix": 0xB377, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-192": { "prefix": 0xB378, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-200": { "prefix": 0xB379, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-208": { "prefix": 0xB37A, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-216": { "prefix": 0xB37B, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-224": { "prefix": 0xB37C, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-232": { "prefix": 0xB37D, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-240": { "prefix": 0xB37E, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-248": { "prefix": 0xB37F, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-256": { "prefix": 0xB380, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-264": { "prefix": 0xB381, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-272": { "prefix": 0xB382, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-280": { "prefix": 0xB383, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-288": { "prefix": 0xB384, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-296": { "prefix": 0xB385, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-304": { "prefix": 0xB386, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-312": { "prefix": 0xB387, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-320": { "prefix": 0xB388, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-328": { "prefix": 0xB389, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-336": { "prefix": 0xB38A, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-344": { "prefix": 0xB38B, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-352": { "prefix": 0xB38C, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-360": { "prefix": 0xB38D, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-368": { "prefix": 0xB38E, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-376": { "prefix": 0xB38F, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-384": { "prefix": 0xB390, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-392": { "prefix": 0xB391, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-400": { "prefix": 0xB392, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-408": { "prefix": 0xB393, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-416": { "prefix": 0xB394, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-424": { "prefix": 0xB395, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-432": { "prefix": 0xB396, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-440": { "prefix": 0xB397, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-448": { "prefix": 0xB398, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-456": { "prefix": 0xB399, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-464": { "prefix": 0xB39A, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-472": { "prefix": 0xB39B, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-480": { "prefix": 0xB39C, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-488": { "prefix": 0xB39D, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-496": { "prefix": 0xB39E, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-504": { "prefix": 0xB39F, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-512": { "prefix": 0xB3A0, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-520": { "prefix": 0xB3A1, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-528": { "prefix": 0xB3A2, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-536": { "prefix": 0xB3A3, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-544": { "prefix": 0xB3A4, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-552": { "prefix": 0xB3A5, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-560": { "prefix": 0xB3A6, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-568": { "prefix": 0xB3A7, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-576": { "prefix": 0xB3A8, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-584": { "prefix": 0xB3A9, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-592": { "prefix": 0xB3AA, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-600": { "prefix": 0xB3AB, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-608": { "prefix": 0xB3AC, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-616": { "prefix": 0xB3AD, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-624": { "prefix": 0xB3AE, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-632": { "prefix": 0xB3AF, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-640": { "prefix": 0xB3B0, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-648": { "prefix": 0xB3B1, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-656": { "prefix": 0xB3B2, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-664": { "prefix": 0xB3B3, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-672": { "prefix": 0xB3B4, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-680": { "prefix": 0xB3B5, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-688": { "prefix": 0xB3B6, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-696": { "prefix": 0xB3B7, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-704": { "prefix": 0xB3B8, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-712": { "prefix": 0xB3B9, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-720": { "prefix": 0xB3BA, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-728": { "prefix": 0xB3BB, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-736": { "prefix": 0xB3BC, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-744": { "prefix": 0xB3BD, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-752": { "prefix": 0xB3BE, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-760": { "prefix": 0xB3BF, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-768": { "prefix": 0xB3C0, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-776": { "prefix": 0xB3C1, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-784": { "prefix": 0xB3C2, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-792": { "prefix": 0xB3C3, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-800": { "prefix": 0xB3C4, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-808": { "prefix": 0xB3C5, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-816": { "prefix": 0xB3C6, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-824": { "prefix": 0xB3C7, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-832": { "prefix": 0xB3C8, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-840": { "prefix": 0xB3C9, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-848": { "prefix": 0xB3CA, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-856": { "prefix": 0xB3CB, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-864": { "prefix": 0xB3CC, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-872": { "prefix": 0xB3CD, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-880": { "prefix": 0xB3CE, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-888": { "prefix": 0xB3CF, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-896": { "prefix": 0xB3D0, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-904": { "prefix": 0xB3D1, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-912": { "prefix": 0xB3D2, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-920": { "prefix": 0xB3D3, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-928": { "prefix": 0xB3D4, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-936": { "prefix": 0xB3D5, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-944": { "prefix": 0xB3D6, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-952": { "prefix": 0xB3D7, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-960": { "prefix": 0xB3D8, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-968": { "prefix": 0xB3D9, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-976": { "prefix": 0xB3DA, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-984": { "prefix": 0xB3DB, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-992": { "prefix": 0xB3DC, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-1000": { "prefix": 0xB3DD, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-1008": { "prefix": 0xB3DE, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-1016": { "prefix": 0xB3DF, + "tag": "multihash", + "status": "draft", + "description": "", }, "skein1024-1024": { "prefix": 0xB3E0, + "tag": "multihash", + "status": "draft", + "description": "", }, "poseidon-bls12_381-a2-fc1": { "prefix": 0xB401, + "tag": "multihash", + "status": "permanent", + "description": "Poseidon using BLS12-381 and arity of 2 with Filecoin parameters", }, "poseidon-bls12_381-a2-fc1-sc": { "prefix": 0xB402, + "tag": "multihash", + "status": "draft", + "description": "Poseidon using BLS12-381 and arity of 2 with Filecoin parameters - high-security variant", }, "ssz-sha2-256-bmt": { "prefix": 0xB502, + "tag": "multihash", + "status": "draft", + "description": "SSZ Merkle tree root using SHA2-256 as the hashing function and SSZ serialization for the block binary", }, "sha2-256-chunked": { "prefix": 0xB510, + "tag": "multihash", + "status": "draft", + "description": "Hash of concatenated SHA2-256 digests of 8*2^n MiB source chunks; n = ceil(log2(source_size/(10^4 * 8MiB)))", }, "bittorrent-pieces-root": { "prefix": 0xB702, + "tag": "multihash", + "status": "draft", + "description": "BitTorrent v2 pieces root hash.", }, "bcrypt-pbkdf": { "prefix": 0xD00D, + "tag": "multihash", + "status": "draft", + "description": "Bcrypt-PBKDF key derivation function", }, "ed2k": { "prefix": 0xED20, + "tag": "multihash", + "status": "draft", + "description": "eDonkey2000 hash.", }, # multiaddr "ip4": { "prefix": 0x04, + "tag": "multiaddr", + "status": "permanent", + "description": "", }, "tcp": { "prefix": 0x06, + "tag": "multiaddr", + "status": "permanent", + "description": "", }, "dccp": { "prefix": 0x21, + "tag": "multiaddr", + "status": "draft", + "description": "", }, "ip6": { "prefix": 0x29, + "tag": "multiaddr", + "status": "permanent", + "description": "", }, "ip6zone": { "prefix": 0x2A, + "tag": "multiaddr", + "status": "draft", + "description": "", }, "ipcidr": { "prefix": 0x2B, + "tag": "multiaddr", + "status": "draft", + "description": "CIDR mask for IP addresses", }, "dns": { "prefix": 0x35, + "tag": "multiaddr", + "status": "permanent", + "description": "", }, "dns4": { "prefix": 0x36, + "tag": "multiaddr", + "status": "permanent", + "description": "", }, "dns6": { "prefix": 0x37, + "tag": "multiaddr", + "status": "permanent", + "description": "", }, "dnsaddr": { "prefix": 0x38, + "tag": "multiaddr", + "status": "permanent", + "description": "", }, "sctp": { "prefix": 0x84, + "tag": "multiaddr", + "status": "draft", + "description": "", }, "udp": { "prefix": 0x0111, + "tag": "multiaddr", + "status": "draft", + "description": "", }, "p2p-webrtc-star": { "prefix": 0x0113, + "tag": "multiaddr", + "status": "deprecated", + "description": "Use webrtc or webrtc-direct instead", }, "p2p-webrtc-direct": { "prefix": 0x0114, + "tag": "multiaddr", + "status": "deprecated", + "description": "Use webrtc or webrtc-direct instead", }, "p2p-stardust": { "prefix": 0x0115, + "tag": "multiaddr", + "status": "deprecated", + "description": "", }, "webrtc-direct": { "prefix": 0x0118, + "tag": "multiaddr", + "status": "draft", + "description": "ICE-lite webrtc transport with SDP munging during connection establishment and without use of a STUN server", }, "webrtc": { "prefix": 0x0119, + "tag": "multiaddr", + "status": "draft", + "description": "webrtc transport where connection establishment is according to w3c spec", }, "p2p-circuit": { "prefix": 0x0122, + "tag": "multiaddr", + "status": "permanent", + "description": "", }, "udt": { "prefix": 0x012D, + "tag": "multiaddr", + "status": "draft", + "description": "", }, "utp": { "prefix": 0x012E, + "tag": "multiaddr", + "status": "draft", + "description": "", }, "unix": { "prefix": 0x0190, + "tag": "multiaddr", + "status": "permanent", + "description": "", }, "thread": { "prefix": 0x0196, + "tag": "multiaddr", + "status": "draft", + "description": "Textile Thread", }, "p2p": { "prefix": 0x01A5, + "tag": "multiaddr", + "status": "permanent", + "description": "libp2p", }, "https": { "prefix": 0x01BB, + "tag": "multiaddr", + "status": "draft", + "description": "", }, "onion": { "prefix": 0x01BC, + "tag": "multiaddr", + "status": "draft", + "description": "", }, "onion3": { "prefix": 0x01BD, + "tag": "multiaddr", + "status": "draft", + "description": "", }, "garlic64": { "prefix": 0x01BE, + "tag": "multiaddr", + "status": "draft", + "description": "I2P base64 (raw public key)", }, "garlic32": { "prefix": 0x01BF, + "tag": "multiaddr", + "status": "draft", + "description": "I2P base32 (hashed public key or encoded public key/checksum+optional secret)", }, "tls": { "prefix": 0x01C0, + "tag": "multiaddr", + "status": "draft", + "description": "", }, "sni": { "prefix": 0x01C1, + "tag": "multiaddr", + "status": "draft", + "description": "Server Name Indication RFC 6066 § 3", }, "noise": { "prefix": 0x01C6, + "tag": "multiaddr", + "status": "draft", + "description": "", }, "shs": { "prefix": 0x01C8, + "tag": "multiaddr", + "status": "draft", + "description": "Secure Scuttlebutt - Secret Handshake Stream", }, "quic": { "prefix": 0x01CC, + "tag": "multiaddr", + "status": "permanent", + "description": "", }, "quic-v1": { "prefix": 0x01CD, + "tag": "multiaddr", + "status": "permanent", + "description": "", }, "webtransport": { "prefix": 0x01D1, + "tag": "multiaddr", + "status": "draft", + "description": "", }, "certhash": { "prefix": 0x01D2, + "tag": "multiaddr", + "status": "draft", + "description": "TLS certificate's fingerprint as a multihash", }, "ws": { "prefix": 0x01DD, + "tag": "multiaddr", + "status": "permanent", + "description": "", }, "wss": { "prefix": 0x01DE, + "tag": "multiaddr", + "status": "permanent", + "description": "", }, "p2p-websocket-star": { "prefix": 0x01DF, + "tag": "multiaddr", + "status": "permanent", + "description": "", }, "http": { "prefix": 0x01E0, + "tag": "multiaddr", + "status": "draft", + "description": "", }, "http-path": { "prefix": 0x01E1, + "tag": "multiaddr", + "status": "draft", + "description": "Percent-encoded path to an HTTP resource", + }, + "ech": { + "prefix": 0x2679, + "tag": "multiaddr", + "status": "draft", + "description": "ECHConfigList as defined in RFC 9849 (0x2679 == 9849). See the multiaddr repo for more details.", }, "silverpine": { "prefix": 0x3F42, + "tag": "multiaddr", + "status": "draft", + "description": "Experimental QUIC over yggdrasil and ironwood routing protocol", }, "plaintextv2": { "prefix": 0x706C61, + "tag": "multiaddr", + "status": "draft", + "description": "", }, "scion": { "prefix": 0xD02000, + "tag": "multiaddr", + "status": "draft", + "description": "SCION Internet architecture", }, # ipld "cbor": { "prefix": 0x51, + "tag": "ipld", + "status": "permanent", + "description": "CBOR", }, "raw": { "prefix": 0x55, + "tag": "ipld", + "status": "permanent", + "description": "raw binary", }, "dag-pb": { "prefix": 0x70, + "tag": "ipld", + "status": "permanent", + "description": "MerkleDAG protobuf", }, "dag-cbor": { "prefix": 0x71, + "tag": "ipld", + "status": "permanent", + "description": "MerkleDAG cbor", }, "libp2p-key": { "prefix": 0x72, + "tag": "ipld", + "status": "permanent", + "description": "Libp2p public key", }, "git-raw": { "prefix": 0x78, + "tag": "ipld", + "status": "permanent", + "description": "Raw Git object", }, "torrent-info": { "prefix": 0x7B, + "tag": "ipld", + "status": "draft", + "description": "Torrent file info field (bencoded)", }, "torrent-file": { "prefix": 0x7C, + "tag": "ipld", + "status": "draft", + "description": "Torrent file (bencoded)", }, "blake3-hashseq": { "prefix": 0x80, + "tag": "ipld", + "status": "draft", + "description": "BLAKE3 hash sequence - per Iroh collections spec", }, "leofcoin-block": { "prefix": 0x81, + "tag": "ipld", + "status": "draft", + "description": "Leofcoin Block", }, "leofcoin-tx": { "prefix": 0x82, + "tag": "ipld", + "status": "draft", + "description": "Leofcoin Transaction", }, "leofcoin-pr": { "prefix": 0x83, + "tag": "ipld", + "status": "draft", + "description": "Leofcoin Peer Reputation", }, "dag-jose": { "prefix": 0x85, + "tag": "ipld", + "status": "draft", + "description": "MerkleDAG JOSE", }, "dag-cose": { "prefix": 0x86, + "tag": "ipld", + "status": "draft", + "description": "MerkleDAG COSE", }, "eth-block": { "prefix": 0x90, + "tag": "ipld", + "status": "permanent", + "description": "Ethereum Header (RLP)", }, "eth-block-list": { "prefix": 0x91, + "tag": "ipld", + "status": "permanent", + "description": "Ethereum Header List (RLP)", }, "eth-tx-trie": { "prefix": 0x92, + "tag": "ipld", + "status": "permanent", + "description": "Ethereum Transaction Trie (Eth-Trie)", }, "eth-tx": { "prefix": 0x93, + "tag": "ipld", + "status": "permanent", + "description": "Ethereum Transaction (MarshalBinary)", }, "eth-tx-receipt-trie": { "prefix": 0x94, + "tag": "ipld", + "status": "permanent", + "description": "Ethereum Transaction Receipt Trie (Eth-Trie)", }, "eth-tx-receipt": { "prefix": 0x95, + "tag": "ipld", + "status": "permanent", + "description": "Ethereum Transaction Receipt (MarshalBinary)", }, "eth-state-trie": { "prefix": 0x96, + "tag": "ipld", + "status": "permanent", + "description": "Ethereum State Trie (Eth-Secure-Trie)", }, "eth-account-snapshot": { "prefix": 0x97, + "tag": "ipld", + "status": "permanent", + "description": "Ethereum Account Snapshot (RLP)", }, "eth-storage-trie": { "prefix": 0x98, + "tag": "ipld", + "status": "permanent", + "description": "Ethereum Contract Storage Trie (Eth-Secure-Trie)", }, "eth-receipt-log-trie": { "prefix": 0x99, + "tag": "ipld", + "status": "draft", + "description": "Ethereum Transaction Receipt Log Trie (Eth-Trie)", }, "eth-receipt-log": { "prefix": 0x9A, + "tag": "ipld", + "status": "draft", + "description": "Ethereum Transaction Receipt Log (RLP)", }, "bitcoin-block": { "prefix": 0xB0, + "tag": "ipld", + "status": "permanent", + "description": "Bitcoin Block", }, "bitcoin-tx": { "prefix": 0xB1, + "tag": "ipld", + "status": "permanent", + "description": "Bitcoin Tx", }, "bitcoin-witness-commitment": { "prefix": 0xB2, + "tag": "ipld", + "status": "permanent", + "description": "Bitcoin Witness Commitment", }, "zcash-block": { "prefix": 0xC0, + "tag": "ipld", + "status": "permanent", + "description": "Zcash Block", }, "zcash-tx": { "prefix": 0xC1, + "tag": "ipld", + "status": "permanent", + "description": "Zcash Tx", }, "stellar-block": { "prefix": 0xD0, + "tag": "ipld", + "status": "draft", + "description": "Stellar Block", }, "stellar-tx": { "prefix": 0xD1, + "tag": "ipld", + "status": "draft", + "description": "Stellar Tx", }, "decred-block": { "prefix": 0xE0, + "tag": "ipld", + "status": "draft", + "description": "Decred Block", }, "decred-tx": { "prefix": 0xE1, + "tag": "ipld", + "status": "draft", + "description": "Decred Tx", }, "dash-block": { "prefix": 0xF0, + "tag": "ipld", + "status": "draft", + "description": "Dash Block", }, "dash-tx": { "prefix": 0xF1, + "tag": "ipld", + "status": "draft", + "description": "Dash Tx", }, "swarm-manifest": { "prefix": 0xFA, + "tag": "ipld", + "status": "draft", + "description": "Swarm Manifest", }, "swarm-feed": { "prefix": 0xFB, + "tag": "ipld", + "status": "draft", + "description": "Swarm Feed", }, "beeson": { "prefix": 0xFC, + "tag": "ipld", + "status": "draft", + "description": "Swarm BeeSon", }, "dag-json": { "prefix": 0x0129, + "tag": "ipld", + "status": "permanent", + "description": "MerkleDAG json", }, "swhid-1-snp": { "prefix": 0x01F0, + "tag": "ipld", + "status": "draft", + "description": "SoftWare Heritage persistent IDentifier version 1 snapshot", }, "json": { "prefix": 0x0200, + "tag": "ipld", + "status": "permanent", + "description": "JSON (UTF-8-encoded)", + }, + "grid-cbor": { + "prefix": 0x1027, + "tag": "ipld", + "status": "draft", + "description": "Grid message envelope: RFC-8949 deterministic CBOR; 'grid'-tagged; codec preserves arbitrary tags/keys while allowing traversal of tag-42 CID links; spec: https://github.com/promisegrid/promisegrid/blob/main/docs/grid-cbor-multicodec-spec.md", }, "rdfc-1": { "prefix": 0xB403, + "tag": "ipld", + "status": "draft", + "description": "The result of canonicalizing an input according to RDFC-1.0 and then expressing its hash value as a multihash value.", }, "json-jcs": { "prefix": 0xB601, + "tag": "ipld", + "status": "draft", + "description": "The result of canonicalizing an input according to JCS - JSON Canonicalisation Scheme (RFC 8785)", }, # namespace "path": { "prefix": 0x2F, + "tag": "namespace", + "status": "permanent", + "description": "Namespace for string paths. Corresponds to `/` in ASCII.", }, "lbry": { "prefix": 0x8C, + "tag": "namespace", + "status": "draft", + "description": "LBRY Address", }, "streamid": { "prefix": 0xCE, + "tag": "namespace", + "status": "draft", + "description": "Ceramic Stream ID", }, "ipld": { "prefix": 0xE2, + "tag": "namespace", + "status": "draft", + "description": "IPLD path", }, "ipfs": { "prefix": 0xE3, + "tag": "namespace", + "status": "draft", + "description": "IPFS path", }, "swarm": { "prefix": 0xE4, + "tag": "namespace", + "status": "draft", + "description": "Swarm path", }, "ipns": { "prefix": 0xE5, + "tag": "namespace", + "status": "draft", + "description": "IPNS path", }, "zeronet": { "prefix": 0xE6, + "tag": "namespace", + "status": "draft", + "description": "ZeroNet site address", }, "dnslink": { "prefix": 0xE8, + "tag": "namespace", + "status": "permanent", + "description": "DNSLink path", }, "skynet-ns": { "prefix": 0xB19910, + "tag": "namespace", + "status": "draft", + "description": "Skynet Namespace", }, "arweave-ns": { "prefix": 0xB29910, + "tag": "namespace", + "status": "draft", + "description": "Arweave Namespace", }, "subspace-ns": { "prefix": 0xB39910, + "tag": "namespace", + "status": "draft", + "description": "Subspace Network Namespace", }, "kumandra-ns": { "prefix": 0xB49910, + "tag": "namespace", + "status": "draft", + "description": "Kumandra Network Namespace", + }, + "massa": { + "prefix": 0xB59910, + "tag": "namespace", + "status": "draft", + "description": "Massa blockchain ecosystem", + }, + "massa-mainnet": { + "prefix": 0xB59911, + "tag": "namespace", + "status": "draft", + "description": "Massa mainnet network", + }, + "massa-buildnet": { + "prefix": 0xB59912, + "tag": "namespace", + "status": "draft", + "description": "Massa buildnet network", + }, + "massa-deweb": { + "prefix": 0xB59913, + "tag": "namespace", + "status": "draft", + "description": "Massa DeWeb decentralized web", + }, + "massa-gossip": { + "prefix": 0xB59914, + "tag": "namespace", + "status": "draft", + "description": "Massa Gossip decentralized messaging", + }, + "massa-mns": { + "prefix": 0xB59915, + "tag": "namespace", + "status": "draft", + "description": "Massa Name Service target", + }, + "massa-sc": { + "prefix": 0xB59916, + "tag": "namespace", + "status": "draft", + "description": "Massa smart-contract address target", + }, + "massa-gossip-id": { + "prefix": 0xB59917, + "tag": "namespace", + "status": "draft", + "description": "Massa Gossip ID target", + }, + "adnl": { + "prefix": 0xB69910, + "tag": "namespace", + "status": "draft", + "description": "TON ADNL address: 32-byte SHA-256(0x4813b4c6_LE || Ed25519-pubkey)", }, # key "aes-128": { "prefix": 0xA0, + "tag": "key", + "status": "draft", + "description": "128-bit AES symmetric key", }, "aes-192": { "prefix": 0xA1, + "tag": "key", + "status": "draft", + "description": "192-bit AES symmetric key", }, "aes-256": { "prefix": 0xA2, + "tag": "key", + "status": "draft", + "description": "256-bit AES symmetric key", }, "chacha-128": { "prefix": 0xA3, + "tag": "key", + "status": "draft", + "description": "128-bit ChaCha symmetric key", }, "chacha-256": { "prefix": 0xA4, + "tag": "key", + "status": "draft", + "description": "256-bit ChaCha symmetric key", }, "secp256k1-pub": { "prefix": 0xE7, + "tag": "key", + "status": "draft", + "description": "Secp256k1 public key (compressed)", }, "bls12_381-g1-pub": { "prefix": 0xEA, + "tag": "key", + "status": "draft", + "description": "BLS12-381 public key in the G1 field", }, "bls12_381-g2-pub": { "prefix": 0xEB, + "tag": "key", + "status": "draft", + "description": "BLS12-381 public key in the G2 field", }, "x25519-pub": { "prefix": 0xEC, + "tag": "key", + "status": "draft", + "description": "Curve25519 public key", }, "ed25519-pub": { "prefix": 0xED, + "tag": "key", + "status": "draft", + "description": "Ed25519 public key", }, "bls12_381-g1g2-pub": { "prefix": 0xEE, + "tag": "key", + "status": "draft", + "description": "BLS12-381 concatenated public keys in both the G1 and G2 fields", }, "sr25519-pub": { "prefix": 0xEF, + "tag": "key", + "status": "draft", + "description": "Sr25519 public key", }, "p256-pub": { "prefix": 0x1200, + "tag": "key", + "status": "draft", + "description": "P-256 public key (compressed)", }, "p384-pub": { "prefix": 0x1201, + "tag": "key", + "status": "draft", + "description": "P-384 public key (compressed)", }, "p521-pub": { "prefix": 0x1202, + "tag": "key", + "status": "draft", + "description": "P-521 public key (compressed)", }, "ed448-pub": { "prefix": 0x1203, + "tag": "key", + "status": "draft", + "description": "Ed448 public key", }, "x448-pub": { "prefix": 0x1204, + "tag": "key", + "status": "draft", + "description": "X448 public key", }, "rsa-pub": { "prefix": 0x1205, + "tag": "key", + "status": "draft", + "description": "RSA public key. DER-encoded ASN.1 type RSAPublicKey according to IETF RFC 8017 (PKCS #1)", }, "sm2-pub": { "prefix": 0x1206, + "tag": "key", + "status": "draft", + "description": "SM2 public key (compressed)", }, "mlkem-512-pub": { "prefix": 0x120B, + "tag": "key", + "status": "draft", + "description": "ML-KEM 512 public key; as specified by FIPS 203", }, "mlkem-768-pub": { "prefix": 0x120C, + "tag": "key", + "status": "draft", + "description": "ML-KEM 768 public key; as specified by FIPS 203", }, "mlkem-1024-pub": { "prefix": 0x120D, + "tag": "key", + "status": "draft", + "description": "ML-KEM 1024 public key; as specified by FIPS 203", + }, + "mldsa-44-pub": { + "prefix": 0x1210, + "tag": "key", + "status": "draft", + "description": "ML-DSA 44 public key; as specified by FIPS 204", + }, + "mldsa-65-pub": { + "prefix": 0x1211, + "tag": "key", + "status": "draft", + "description": "ML-DSA 65 public key; as specified by FIPS 204", + }, + "mldsa-87-pub": { + "prefix": 0x1212, + "tag": "key", + "status": "draft", + "description": "ML-DSA 87 public key; as specified by FIPS 204", + }, + "slhdsa-sha2-128s-pub": { + "prefix": 0x1220, + "tag": "key", + "status": "draft", + "description": "SLH-DSA-SHA2-128s public key; as specified by FIPS 205", + }, + "slhdsa-shake-128s-pub": { + "prefix": 0x1221, + "tag": "key", + "status": "draft", + "description": "SLH-DSA-SHAKE-128s public key; as specified by FIPS 205", + }, + "slhdsa-sha2-128f-pub": { + "prefix": 0x1222, + "tag": "key", + "status": "draft", + "description": "SLH-DSA-SHA2-128f public key; as specified by FIPS 205", + }, + "slhdsa-shake-128f-pub": { + "prefix": 0x1223, + "tag": "key", + "status": "draft", + "description": "SLH-DSA-SHAKE-128f public key; as specified by FIPS 205", + }, + "slhdsa-sha2-192s-pub": { + "prefix": 0x1224, + "tag": "key", + "status": "draft", + "description": "SLH-DSA-SHA2-192s public key; as specified by FIPS 205", + }, + "slhdsa-shake-192s-pub": { + "prefix": 0x1225, + "tag": "key", + "status": "draft", + "description": "SLH-DSA-SHAKE-192s public key; as specified by FIPS 205", + }, + "slhdsa-sha2-192f-pub": { + "prefix": 0x1226, + "tag": "key", + "status": "draft", + "description": "SLH-DSA-SHA2-192f public key; as specified by FIPS 205", + }, + "slhdsa-shake-192f-pub": { + "prefix": 0x1227, + "tag": "key", + "status": "draft", + "description": "SLH-DSA-SHAKE-192f public key; as specified by FIPS 205", + }, + "slhdsa-sha2-256s-pub": { + "prefix": 0x1228, + "tag": "key", + "status": "draft", + "description": "SLH-DSA-SHA2-256s public key; as specified by FIPS 205", + }, + "slhdsa-shake-256s-pub": { + "prefix": 0x1229, + "tag": "key", + "status": "draft", + "description": "SLH-DSA-SHAKE-256s public key; as specified by FIPS 205", + }, + "slhdsa-sha2-256f-pub": { + "prefix": 0x122A, + "tag": "key", + "status": "draft", + "description": "SLH-DSA-SHA2-256f public key; as specified by FIPS 205", + }, + "slhdsa-shake-256f-pub": { + "prefix": 0x122B, + "tag": "key", + "status": "draft", + "description": "SLH-DSA-SHAKE-256f public key; as specified by FIPS 205", }, "ed25519-priv": { "prefix": 0x1300, + "tag": "key", + "status": "draft", + "description": "Ed25519 private key", }, "secp256k1-priv": { "prefix": 0x1301, + "tag": "key", + "status": "draft", + "description": "Secp256k1 private key", }, "x25519-priv": { "prefix": 0x1302, + "tag": "key", + "status": "draft", + "description": "Curve25519 private key", }, "sr25519-priv": { "prefix": 0x1303, + "tag": "key", + "status": "draft", + "description": "Sr25519 private key", }, "rsa-priv": { "prefix": 0x1305, + "tag": "key", + "status": "draft", + "description": "RSA private key", }, "p256-priv": { "prefix": 0x1306, + "tag": "key", + "status": "draft", + "description": "P-256 private key", }, "p384-priv": { "prefix": 0x1307, + "tag": "key", + "status": "draft", + "description": "P-384 private key", }, "p521-priv": { "prefix": 0x1308, + "tag": "key", + "status": "draft", + "description": "P-521 private key", }, "bls12_381-g1-priv": { "prefix": 0x1309, + "tag": "key", + "status": "draft", + "description": "BLS12-381 G1 private key", }, "bls12_381-g2-priv": { "prefix": 0x130A, + "tag": "key", + "status": "draft", + "description": "BLS12-381 G2 private key", }, "bls12_381-g1g2-priv": { "prefix": 0x130B, + "tag": "key", + "status": "draft", + "description": "BLS12-381 G1 and G2 private key", }, "bls12_381-g1-pub-share": { "prefix": 0x130C, + "tag": "key", + "status": "draft", + "description": "BLS12-381 G1 public key share", }, "bls12_381-g2-pub-share": { "prefix": 0x130D, + "tag": "key", + "status": "draft", + "description": "BLS12-381 G2 public key share", }, "bls12_381-g1-priv-share": { "prefix": 0x130E, + "tag": "key", + "status": "draft", + "description": "BLS12-381 G1 private key share", }, "bls12_381-g2-priv-share": { "prefix": 0x130F, + "tag": "key", + "status": "draft", + "description": "BLS12-381 G2 private key share", }, "sm2-priv": { "prefix": 0x1310, + "tag": "key", + "status": "draft", + "description": "SM2 private key", }, "ed448-priv": { "prefix": 0x1311, + "tag": "key", + "status": "draft", + "description": "Ed448 private key", }, "x448-priv": { "prefix": 0x1312, + "tag": "key", + "status": "draft", + "description": "X448 private key", }, "mlkem-512-priv": { "prefix": 0x1313, + "tag": "key", + "status": "draft", + "description": "ML-KEM 512 private key; as specified by FIPS 203", }, "mlkem-768-priv": { "prefix": 0x1314, + "tag": "key", + "status": "draft", + "description": "ML-KEM 768 private key; as specified by FIPS 203", }, "mlkem-1024-priv": { "prefix": 0x1315, + "tag": "key", + "status": "draft", + "description": "ML-KEM 1024 private key; as specified by FIPS 203", }, "jwk_jcs-priv": { "prefix": 0x1316, + "tag": "key", + "status": "draft", + "description": "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)", + }, + "mldsa-44-priv": { + "prefix": 0x1317, + "tag": "key", + "status": "draft", + "description": "ML-DSA 44 private key; expanded key format (2560 bytes) as specified by FIPS 204", + }, + "mldsa-65-priv": { + "prefix": 0x1318, + "tag": "key", + "status": "draft", + "description": "ML-DSA 65 private key; expanded key format (4032 bytes) as specified by FIPS 204", + }, + "mldsa-87-priv": { + "prefix": 0x1319, + "tag": "key", + "status": "draft", + "description": "ML-DSA 87 private key; expanded key format (4896 bytes) as specified by FIPS 204", + }, + "mldsa-44-priv-seed": { + "prefix": 0x131A, + "tag": "key", + "status": "draft", + "description": "ML-DSA 44 private key seed; (32 bytes) as specified by FIPS 204", + }, + "mldsa-65-priv-seed": { + "prefix": 0x131B, + "tag": "key", + "status": "draft", + "description": "ML-DSA 65 private key seed; (32 bytes) as specified by FIPS 204", + }, + "mldsa-87-priv-seed": { + "prefix": 0x131C, + "tag": "key", + "status": "draft", + "description": "ML-DSA 87 private key seed; (32 bytes) as specified by FIPS 204", + }, + "slhdsa-sha2-128s-priv": { + "prefix": 0x131D, + "tag": "key", + "status": "draft", + "description": "SLH-DSA-SHA2-128s private key; as specified by FIPS 205", + }, + "slhdsa-shake-128s-priv": { + "prefix": 0x131E, + "tag": "key", + "status": "draft", + "description": "SLH-DSA-SHAKE-128s private key; as specified by FIPS 205", + }, + "slhdsa-sha2-128f-priv": { + "prefix": 0x131F, + "tag": "key", + "status": "draft", + "description": "SLH-DSA-SHA2-128f private key; as specified by FIPS 205", + }, + "slhdsa-shake-128f-priv": { + "prefix": 0x1320, + "tag": "key", + "status": "draft", + "description": "SLH-DSA-SHAKE-128f private key; as specified by FIPS 205", + }, + "slhdsa-sha2-192s-priv": { + "prefix": 0x1321, + "tag": "key", + "status": "draft", + "description": "SLH-DSA-SHA2-192s private key; as specified by FIPS 205", + }, + "slhdsa-shake-192s-priv": { + "prefix": 0x1322, + "tag": "key", + "status": "draft", + "description": "SLH-DSA-SHAKE-192s private key; as specified by FIPS 205", + }, + "slhdsa-sha2-192f-priv": { + "prefix": 0x1323, + "tag": "key", + "status": "draft", + "description": "SLH-DSA-SHA2-192f private key; as specified by FIPS 205", + }, + "slhdsa-shake-192f-priv": { + "prefix": 0x1324, + "tag": "key", + "status": "draft", + "description": "SLH-DSA-SHAKE-192f private key; as specified by FIPS 205", + }, + "slhdsa-sha2-256s-priv": { + "prefix": 0x1325, + "tag": "key", + "status": "draft", + "description": "SLH-DSA-SHA2-256s private key; as specified by FIPS 205", + }, + "slhdsa-shake-256s-priv": { + "prefix": 0x1326, + "tag": "key", + "status": "draft", + "description": "SLH-DSA-SHAKE-256s private key; as specified by FIPS 205", + }, + "slhdsa-sha2-256f-priv": { + "prefix": 0x1327, + "tag": "key", + "status": "draft", + "description": "SLH-DSA-SHA2-256f private key; as specified by FIPS 205", + }, + "slhdsa-shake-256f-priv": { + "prefix": 0x1328, + "tag": "key", + "status": "draft", + "description": "SLH-DSA-SHAKE-256f private key; as specified by FIPS 205", + }, + "bip340-pub": { + "prefix": 0x1340, + "tag": "key", + "status": "draft", + "description": "BIP340 public key", + }, + "bip340-priv": { + "prefix": 0x1341, + "tag": "key", + "status": "draft", + "description": "BIP340 private key", }, "lamport-sha3-512-pub": { "prefix": 0x1A14, + "tag": "key", + "status": "draft", + "description": "Lamport public key based on SHA3-512", }, "lamport-sha3-384-pub": { "prefix": 0x1A15, + "tag": "key", + "status": "draft", + "description": "Lamport public key based on SHA3-384", }, "lamport-sha3-256-pub": { "prefix": 0x1A16, + "tag": "key", + "status": "draft", + "description": "Lamport public key based on SHA3-256", }, "lamport-sha3-512-priv": { "prefix": 0x1A24, + "tag": "key", + "status": "draft", + "description": "Lamport private key based on SHA3-512", }, "lamport-sha3-384-priv": { "prefix": 0x1A25, + "tag": "key", + "status": "draft", + "description": "Lamport private key based on SHA3-384", }, "lamport-sha3-256-priv": { "prefix": 0x1A26, + "tag": "key", + "status": "draft", + "description": "Lamport private key based on SHA3-256", }, "lamport-sha3-512-priv-share": { "prefix": 0x1A34, + "tag": "key", + "status": "draft", + "description": "Lamport private key share based on SHA3-512 and split with Shamir gf256", }, "lamport-sha3-384-priv-share": { "prefix": 0x1A35, + "tag": "key", + "status": "draft", + "description": "Lamport private key share based on SHA3-384 and split with Shamir gf256", }, "lamport-sha3-256-priv-share": { "prefix": 0x1A36, + "tag": "key", + "status": "draft", + "description": "Lamport private key share based on SHA3-256 and split with Shamir gf256", }, "jwk_jcs-pub": { "prefix": 0xEB51, + "tag": "key", + "status": "draft", + "description": "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)", }, # holochain "holochain-adr-v0": { "prefix": 0x807124, + "tag": "holochain", + "status": "draft", + "description": "Holochain v0 address + 8 R-S (63 x Base-32)", }, "holochain-adr-v1": { "prefix": 0x817124, + "tag": "holochain", + "status": "draft", + "description": "Holochain v1 address + 8 R-S (63 x Base-32)", }, "holochain-key-v0": { "prefix": 0x947124, + "tag": "holochain", + "status": "draft", + "description": "Holochain v0 public key + 8 R-S (63 x Base-32)", }, "holochain-key-v1": { "prefix": 0x957124, + "tag": "holochain", + "status": "draft", + "description": "Holochain v1 public key + 8 R-S (63 x Base-32)", }, "holochain-sig-v0": { "prefix": 0xA27124, + "tag": "holochain", + "status": "draft", + "description": "Holochain v0 signature + 8 R-S (63 x Base-32)", }, "holochain-sig-v1": { "prefix": 0xA37124, + "tag": "holochain", + "status": "draft", + "description": "Holochain v1 signature + 8 R-S (63 x Base-32)", }, # cid "cidv1": { "prefix": 0x01, + "tag": "cid", + "status": "permanent", + "description": "CIDv1", }, "cidv2": { "prefix": 0x02, + "tag": "cid", + "status": "draft", + "description": "CIDv2", }, "cidv3": { "prefix": 0x03, + "tag": "cid", + "status": "draft", + "description": "CIDv3", }, # hash "murmur3-x64-64": { "prefix": 0x22, + "tag": "hash", + "status": "permanent", + "description": "The first 64-bits of a murmur3-x64-128 - used for UnixFS directory sharding.", }, "murmur3-32": { "prefix": 0x23, + "tag": "hash", + "status": "draft", + "description": "", }, "crc32": { "prefix": 0x0132, + "tag": "hash", + "status": "draft", + "description": "CRC-32 non-cryptographic hash algorithm (IEEE 802.3)", }, "crc64-ecma": { "prefix": 0x0164, + "tag": "hash", + "status": "draft", + "description": "CRC-64 non-cryptographic hash algorithm (ECMA-182 - Annex B)", }, "crc64-nvme": { "prefix": 0x0165, + "tag": "hash", + "status": "draft", + "description": "CRC-64 checksum based on the NVME polynomial as specified in the NVM Express® NVM Command Set Specification", }, "murmur3-x64-128": { "prefix": 0x1022, + "tag": "hash", + "status": "draft", + "description": "", }, "sha256a": { "prefix": 0x7012, + "tag": "hash", + "status": "draft", + "description": "The sum of multiple sha2-256 hashes; as specified by Ceramic CIP-124.", }, "xxh-32": { "prefix": 0xB3E1, + "tag": "hash", + "status": "draft", + "description": "Extremely fast non-cryptographic hash algorithm", }, "xxh-64": { "prefix": 0xB3E2, + "tag": "hash", + "status": "draft", + "description": "Extremely fast non-cryptographic hash algorithm", }, "xxh3-64": { "prefix": 0xB3E3, + "tag": "hash", + "status": "draft", + "description": "Extremely fast non-cryptographic hash algorithm", }, "xxh3-128": { "prefix": 0xB3E4, + "tag": "hash", + "status": "draft", + "description": "Extremely fast non-cryptographic hash algorithm", }, # libp2p "libp2p-peer-record": { "prefix": 0x0301, + "tag": "libp2p", + "status": "permanent", + "description": "libp2p peer record type", }, "libp2p-relay-rsvp": { "prefix": 0x0302, + "tag": "libp2p", + "status": "permanent", + "description": "libp2p relay reservation voucher", }, "memorytransport": { "prefix": 0x0309, + "tag": "libp2p", + "status": "permanent", + "description": "in memory transport for self-dialing and testing; arbitrary", }, # transport "transport-bitswap": { "prefix": 0x0900, + "tag": "transport", + "status": "draft", + "description": "Bitswap datatransfer", }, "transport-graphsync-filecoinv1": { "prefix": 0x0910, + "tag": "transport", + "status": "draft", + "description": "Filecoin graphsync datatransfer", }, "transport-ipfs-gateway-http": { "prefix": 0x0920, + "tag": "transport", + "status": "draft", + "description": "HTTP IPFS Gateway trustless datatransfer", }, "transport-filecoin-piece-http": { "prefix": 0x0930, + "tag": "transport", + "status": "draft", + "description": "HTTP piece retrieval from Filecoin storage provider; https://github.com/filecoin-project/FIPs/blob/master/FRCs/frc-0066.md", }, # vlad "vlad": { "prefix": 0x1207, + "tag": "vlad", + "status": "draft", + "description": "Verifiable Long-lived ADdress", }, # nonce "nonce": { "prefix": 0x123B, + "tag": "nonce", + "status": "draft", + "description": "Nonce random value", }, # multisig "lamport-sha3-512-sig": { "prefix": 0x1A44, + "tag": "multisig", + "status": "draft", + "description": "Lamport signature based on SHA3-512", }, "lamport-sha3-384-sig": { "prefix": 0x1A45, + "tag": "multisig", + "status": "draft", + "description": "Lamport signature based on SHA3-384", }, "lamport-sha3-256-sig": { "prefix": 0x1A46, + "tag": "multisig", + "status": "draft", + "description": "Lamport signature based on SHA3-256", }, "lamport-sha3-512-sig-share": { "prefix": 0x1A54, + "tag": "multisig", + "status": "draft", + "description": "Lamport signature share based on SHA3-512 and split with Shamir gf256", }, "lamport-sha3-384-sig-share": { "prefix": 0x1A55, + "tag": "multisig", + "status": "draft", + "description": "Lamport signature share based on SHA3-384 and split with Shamir gf256", }, "lamport-sha3-256-sig-share": { "prefix": 0x1A56, + "tag": "multisig", + "status": "draft", + "description": "Lamport signature share based on SHA3-256 and split with Shamir gf256", }, "es256k-msig": { "prefix": 0xD01300, + "tag": "multisig", + "status": "draft", + "description": "ES256K (secp256k1) Signature as Multisig", }, "bls12_381-g1-msig": { "prefix": 0xD01301, + "tag": "multisig", + "status": "draft", + "description": "G1 signature for BLS-12381-G2 as Multisig", }, "bls12_381-g2-msig": { "prefix": 0xD01302, + "tag": "multisig", + "status": "draft", + "description": "G2 signature for BLS-12381-G1 as Multisig", }, "eddsa-msig": { "prefix": 0xD01303, + "tag": "multisig", + "status": "draft", + "description": "Edwards-Curve Digital Signature as Multisig", }, "bls12_381-g1-share-msig": { "prefix": 0xD01304, + "tag": "multisig", + "status": "draft", + "description": "G1 threshold signature share for BLS-12381-G2 as Multisig", }, "bls12_381-g2-share-msig": { "prefix": 0xD01305, + "tag": "multisig", + "status": "draft", + "description": "G2 threshold signature share for BLS-12381-G1 as Multisig", }, "lamport-msig": { "prefix": 0xD01306, + "tag": "multisig", + "status": "draft", + "description": "Lamport signature as Multisig", }, "lamport-share-msig": { "prefix": 0xD01307, + "tag": "multisig", + "status": "draft", + "description": "Lamport threshold signature share as Multisig", }, "es256-msig": { "prefix": 0xD01308, + "tag": "multisig", + "status": "draft", + "description": "ECDSA P-256 Signature as Multisig", }, "es384-msig": { "prefix": 0xD01309, + "tag": "multisig", + "status": "draft", + "description": "ECDSA P-384 Signature as Multisig", }, "es521-msig": { "prefix": 0xD0130A, + "tag": "multisig", + "status": "draft", + "description": "ECDSA P-521 Signature as Multisig", }, "rs256-msig": { "prefix": 0xD0130B, + "tag": "multisig", + "status": "draft", + "description": "RS256 Signature as Multisig", }, # encryption "aes-gcm-256": { "prefix": 0x2000, + "tag": "encryption", + "status": "draft", + "description": "AES Galois/Counter Mode with 256-bit key and 12-byte IV", }, # multikey "chacha20-poly1305": { "prefix": 0xA000, + "tag": "multikey", + "status": "draft", + "description": "ChaCha20_Poly1305 encryption scheme", }, # softhash "iscc": { "prefix": 0xCC01, + "tag": "softhash", + "status": "draft", + "description": "ISCC (International Standard Content Code) - similarity preserving hash", }, # zeroxcert "zeroxcert-imprint-256": { "prefix": 0xCE11, + "tag": "zeroxcert", + "status": "draft", + "description": "0xcert Asset Imprint (root hash)", }, # varsig "nonstandard-sig": { "prefix": 0xD000, + "tag": "varsig", + "status": "deprecated", + "description": "Namespace for all not yet standard signature algorithms", }, "es256k": { "prefix": 0xD0E7, + "tag": "varsig", + "status": "draft", + "description": "ES256K Signature Algorithm (secp256k1)", }, "bls12_381-g1-sig": { "prefix": 0xD0EA, + "tag": "varsig", + "status": "draft", + "description": "G1 signature for BLS12-381", }, "bls12_381-g2-sig": { "prefix": 0xD0EB, + "tag": "varsig", + "status": "draft", + "description": "G2 signature for BLS12-381", }, "eddsa": { "prefix": 0xD0ED, + "tag": "varsig", + "status": "draft", + "description": "Edwards-Curve Digital Signature Algorithm", }, "eip-191": { "prefix": 0xD191, + "tag": "varsig", + "status": "draft", + "description": "EIP-191 Ethereum Signed Data Standard", }, "es256": { "prefix": 0xD01200, + "tag": "varsig", + "status": "draft", + "description": "ES256 Signature Algorithm", }, "es384": { "prefix": 0xD01201, + "tag": "varsig", + "status": "draft", + "description": "ES384 Signature Algorithm", }, "es512": { "prefix": 0xD01202, + "tag": "varsig", + "status": "draft", + "description": "ES512 Signature Algorithm", }, "rs256": { "prefix": 0xD01205, + "tag": "varsig", + "status": "draft", + "description": "RS256 Signature Algorithm", + }, + "bip340": { + "prefix": 0xD01206, + "tag": "varsig", + "status": "draft", + "description": "BIP340 Signature Algorithm", }, # filecoin "fil-commitment-unsealed": { "prefix": 0xF101, + "tag": "filecoin", + "status": "permanent", + "description": "Filecoin piece or sector data commitment merkle node/root (CommP & CommD)", }, "fil-commitment-sealed": { "prefix": 0xF102, + "tag": "filecoin", + "status": "permanent", + "description": "Filecoin sector data commitment merkle node/root - sealed and replicated (CommR)", }, # shelter "shelter-contract-manifest": { "prefix": 0x511E00, + "tag": "shelter", + "status": "draft", + "description": "Shelter protocol contract manifest", }, "shelter-contract-text": { "prefix": 0x511E01, + "tag": "shelter", + "status": "draft", + "description": "Shelter protocol contract text", }, "shelter-contract-data": { "prefix": 0x511E02, + "tag": "shelter", + "status": "draft", + "description": "Shelter protocol contract data (contract chain)", }, "shelter-file-manifest": { "prefix": 0x511E03, + "tag": "shelter", + "status": "draft", + "description": "Shelter protocol file manifest", }, "shelter-file-chunk": { "prefix": 0x511E04, + "tag": "shelter", + "status": "draft", + "description": "Shelter protocol file chunk", }, } -NAME_TABLE = {name: value["prefix"] for name, value in CODECS.items()} -CODE_TABLE = {value["prefix"]: name for name, value in CODECS.items()} +NAME_TABLE: dict[str, int] = {name: cast(int, value["prefix"]) for name, value in CODECS.items()} +CODE_TABLE: dict[int, str] = {cast(int, value["prefix"]): name for name, value in CODECS.items()} diff --git a/newsfragments/38.internal.rst b/newsfragments/38.internal.rst new file mode 100644 index 0000000..6a7a806 --- /dev/null +++ b/newsfragments/38.internal.rst @@ -0,0 +1 @@ +Preserve ``tag``, ``status``, and ``description`` from the upstream multicodec table when generating ``constants.py``. diff --git a/ruff.toml b/ruff.toml index eb11d8e..2c8cc94 100644 --- a/ruff.toml +++ b/ruff.toml @@ -17,6 +17,10 @@ exclude = [ select = ["E", "F", "W", "I", "RUF"] dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$" +[lint.per-file-ignores] +# Generated codec table may contain long upstream description strings. +"multicodec/constants.py" = ["E501"] + [format] quote-style = "double" indent-style = "space" diff --git a/tests/test_constants_metadata.py b/tests/test_constants_metadata.py new file mode 100644 index 0000000..5da39b3 --- /dev/null +++ b/tests/test_constants_metadata.py @@ -0,0 +1,24 @@ +"""Smoke tests for enriched CODECS metadata from update-table.py.""" + +from multicodec.constants import CODE_TABLE, CODECS, NAME_TABLE + + +def test_codecs_include_csv_metadata_keys(): + sample = CODECS["sha2-256"] + assert sample["prefix"] == 0x12 + assert sample["tag"] == "multihash" + assert sample["status"] in {"permanent", "draft", "deprecated"} + assert "description" in sample + + +def test_identity_preserves_description(): + sample = CODECS["identity"] + assert sample["prefix"] == 0x00 + assert sample["tag"] == "multihash" + assert sample["status"] == "permanent" + assert "binary" in sample["description"] + + +def test_name_and_code_tables_still_use_prefix(): + assert NAME_TABLE["sha2-256"] == 0x12 + assert CODE_TABLE[0x12] == "sha2-256" diff --git a/tools/update-table.py b/tools/update-table.py index 91ebfc3..49ee444 100644 --- a/tools/update-table.py +++ b/tools/update-table.py @@ -4,6 +4,7 @@ import os import sys from collections import OrderedDict +from textwrap import dedent # This is relative to where this script resides # Though you can also define an absolute path @@ -14,18 +15,26 @@ # THIS FILE IS GENERATED, DO NO EDIT MANUALLY # For more information see the README.md +from __future__ import annotations + +from typing import Any, cast + """ FOOTER = """\ -NAME_TABLE = {name: value['prefix'] for name, value in CODECS.items()} -CODE_TABLE = {value['prefix']: name for name, value in CODECS.items()} +NAME_TABLE: dict[str, int] = { + name: cast(int, value["prefix"]) for name, value in CODECS.items() +} +CODE_TABLE: dict[int, str] = { + cast(int, value["prefix"]): name for name, value in CODECS.items() +} """ -def padded_hex(hexstring): +def padded_hex(hexstring: str) -> str: """Creates a padded (starting with a 0 if odd) hex string""" - number = int(row["code"], 16) + number = int(hexstring, 16) hexbytes = f"{number:x}" if len(hexbytes) % 2: prefix = "0x0" @@ -51,6 +60,11 @@ def unique_code(codecs): return unique +def escape_py_str(value: str) -> str: + """Escape a string for embedding in a double-quoted Python literal.""" + return value.replace("\\", "\\\\").replace('"', '\\"') + + # Preserve the order from earlier versions. New tags are appended parsed = OrderedDict( [ @@ -65,36 +79,49 @@ def unique_code(codecs): ] ) -maxlen = 0 - multicodec_reader = csv.DictReader(sys.stdin, skipinitialspace=True) for row in multicodec_reader: code = padded_hex(row["code"]) name_const = row["name"].upper().replace("-", "_") name_human = row["name"] tag = row["tag"] - value = {"const": name_const, "human": name_human, "code": code} + status = row.get("status", "") or "" + description = row.get("description", "") or "" + value = { + "const": name_const, + "human": name_human, + "code": code, + "tag": tag, + "status": status, + "description": description, + } if tag not in parsed: parsed[tag] = [] parsed[tag].append(value) - if maxlen < len(name_human): - maxlen = len(name_human) - tools_dir = os.path.dirname(os.path.abspath(__file__)) output_dir = os.path.join(tools_dir, DEFAULT_OUTPUT_DIR) print_file = os.path.join(output_dir, "constants.py") with open(print_file, "w") as ff: ff.write(HEADER) - ff.write("CODECS = {") + ff.write("CODECS: dict[str, dict[str, Any]] = {\n") for _tagindex, (tag, codecs) in enumerate(parsed.items()): - ff.write(f"\n # {tag}\n") + ff.write(f" # {tag}\n") unique = unique_code(codecs) - for _codecindex, codec in enumerate(unique): - name = "'{human}':".format(human=codec["human"]).ljust(maxlen + 4) - value = "{{'prefix': {code}, }},\n".format(code=codec["code"]) - ff.write(" " + name + value) + for codec in unique: + entry = dedent( + f"""\ + "{codec["human"]}": {{ + "prefix": {codec["code"]}, + "tag": "{escape_py_str(codec.get("tag", ""))}", + "status": "{escape_py_str(codec.get("status", ""))}", + "description": "{escape_py_str(codec.get("description", ""))}", + }}, + """ + ) + for line in entry.splitlines(): + ff.write(" " + line + "\n") ff.write("}\n") ff.write(FOOTER)