diff --git a/.gitignore b/.gitignore index 493cb2c..6d2c0cb 100644 --- a/.gitignore +++ b/.gitignore @@ -35,15 +35,11 @@ var/ pip-log.txt pip-delete-this-directory.txt -# Unit test / coverage reports +# Unit test reports htmlcov/ .tox/ -.coverage -.coverage.* .cache nosetests.xml -coverage.xml -*,cover .hypothesis/ # Translations diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 897c7c1..ad831d8 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -8,7 +8,7 @@ repos: - id: end-of-file-fixer - id: trailing-whitespace - repo: https://github.com/asottile/pyupgrade - rev: v3.15.0 + rev: v3.21.2 hooks: - id: pyupgrade args: [--py310-plus] diff --git a/.readthedocs.yaml b/.readthedocs.yaml index fc9e76e..8d1ee6e 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -7,6 +7,10 @@ build: os: ubuntu-24.04 tools: python: "3.10" + jobs: + pre_build: + - rm -f docs/multicodec.rst docs/modules.rst + - python -m sphinx.ext.apidoc -o docs/ multicodec sphinx: configuration: docs/conf.py diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index d7a71df..86300df 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -118,9 +118,6 @@ The project provides several ``make`` targets to help with development: run linting, type checking, and tests. This is the recommended command to run before submitting a pull request. -* ``make coverage`` - Run tests with coverage reporting and open the HTML report - in your browser. - For a full list of available commands, run ``make help``. 7. Commit your changes and push your branch to GitHub:: @@ -150,7 +147,3 @@ Tips To run a subset of tests:: $ pytest tests/test_multicodec.py - -To run tests with coverage:: - - $ make coverage diff --git a/Makefile b/Makefile index f74052e..86d65ad 100644 --- a/Makefile +++ b/Makefile @@ -22,7 +22,6 @@ help: @echo "lint - run pre-commit hooks on all files" @echo "typecheck - run mypy type checking" @echo "test - run tests quickly with the default Python" - @echo "coverage - run tests with coverage report" @echo "docs-ci - generate docs for CI" @echo "docs - generate docs and open in browser" @echo "servedocs - serve docs with live reload" @@ -48,7 +47,6 @@ clean-test: rm -fr .tox/ rm -fr .mypy_cache rm -fr .ruff_cache - rm -f .coverage rm -fr htmlcov/ setup: @@ -66,12 +64,6 @@ typecheck: test: python -m pytest tests -coverage: - coverage run --source multicodec -m pytest tests - coverage report -m - coverage html - $(BROWSER) htmlcov/index.html - docs-ci: rm -f docs/multicodec.rst rm -f docs/modules.rst diff --git a/README.rst b/README.rst index 0c10b98..51b6882 100644 --- a/README.rst +++ b/README.rst @@ -7,9 +7,6 @@ py-multicodec .. image:: https://github.com/multiformats/py-multicodec/actions/workflows/tox.yml/badge.svg?branch=master :target: https://github.com/multiformats/py-multicodec/actions/workflows/tox.yml -.. image:: https://codecov.io/gh/multiformats/py-multicodec/branch/master/graph/badge.svg - :target: https://codecov.io/gh/multiformats/py-multicodec - .. image:: https://readthedocs.org/projects/py-multicodec/badge/?version=stable :target: https://py-multicodec.readthedocs.io/en/stable/?badge=stable :alt: Documentation Status diff --git a/codecov.yaml b/codecov.yaml deleted file mode 100644 index 66dde9e..0000000 --- a/codecov.yaml +++ /dev/null @@ -1,2 +0,0 @@ -comment: - layout: header, changes, diff, uncovered diff --git a/docs/conf.py b/docs/conf.py index f2fd116..fc019b9 100755 --- a/docs/conf.py +++ b/docs/conf.py @@ -45,13 +45,13 @@ templates_path = ['_templates'] # The suffix of source filenames. -source_suffix = '.rst' +source_suffix = {'.rst': 'restructuredtext'} # The encoding of source files. # source_encoding = 'utf-8-sig' -# The master toctree document. -master_doc = 'index' +# The root toctree document. +root_doc = 'index' # General information about the project. project = 'py-multicodec' diff --git a/multicodec/code_table.py b/multicodec/code_table.py index 0c2f484..a9250d9 100644 --- a/multicodec/code_table.py +++ b/multicodec/code_table.py @@ -31,20 +31,46 @@ KECCAK_384: Code = Code(0x1C) # keccak-384 KECCAK_512: Code = Code(0x1D) # keccak-512 BLAKE3: Code = Code(0x1E) # blake3 -MURMUR3_128: Code = Code(0x22) # murmur3-128 +SHA2_384: Code = Code(0x20) # sha2-384 +MURMUR3_X64_64: Code = Code(0x22) # murmur3-x64-64 MURMUR3_32: Code = Code(0x23) # murmur3-32 DBL_SHA2_256: Code = Code(0x56) # dbl-sha2-256 +BLAKE3_HASHSEQ: Code = Code(0x80) # blake3-hashseq MD4: Code = Code(0xD4) # md4 MD5: Code = Code(0xD5) # md5 -BMT: Code = Code(0xD6) # bmt +FR32_SHA256_TRUNC254_PADBINTREE: Code = Code(0x1011) # fr32-sha256-trunc254-padbintree SHA2_256_TRUNC254_PADDED: Code = Code(0x1012) # sha2-256-trunc254-padded +SHA2_224: Code = Code(0x1013) # sha2-224 +SHA2_512_224: Code = Code(0x1014) # sha2-512-224 +SHA2_512_256: Code = Code(0x1015) # sha2-512-256 +MURMUR3_X64_128: Code = Code(0x1022) # murmur3-x64-128 RIPEMD_128: Code = Code(0x1052) # ripemd-128 RIPEMD_160: Code = Code(0x1053) # ripemd-160 RIPEMD_256: Code = Code(0x1054) # ripemd-256 RIPEMD_320: Code = Code(0x1055) # ripemd-320 X11: Code = Code(0x1100) # x11 +BLS12_381_G1_PUB_SHARE: Code = Code(0x130C) # bls12_381-g1-pub-share +BLS12_381_G2_PUB_SHARE: Code = Code(0x130D) # bls12_381-g2-pub-share +BLS12_381_G1_PRIV_SHARE: Code = Code(0x130E) # bls12_381-g1-priv-share +BLS12_381_G2_PRIV_SHARE: Code = Code(0x130F) # bls12_381-g2-priv-share +LAMPORT_SHA3_512_PUB: Code = Code(0x1A14) # lamport-sha3-512-pub +LAMPORT_SHA3_384_PUB: Code = Code(0x1A15) # lamport-sha3-384-pub +LAMPORT_SHA3_256_PUB: Code = Code(0x1A16) # lamport-sha3-256-pub +LAMPORT_SHA3_512_PRIV: Code = Code(0x1A24) # lamport-sha3-512-priv +LAMPORT_SHA3_384_PRIV: Code = Code(0x1A25) # lamport-sha3-384-priv +LAMPORT_SHA3_256_PRIV: Code = Code(0x1A26) # lamport-sha3-256-priv +LAMPORT_SHA3_512_PRIV_SHARE: Code = Code(0x1A34) # lamport-sha3-512-priv-share +LAMPORT_SHA3_384_PRIV_SHARE: Code = Code(0x1A35) # lamport-sha3-384-priv-share +LAMPORT_SHA3_256_PRIV_SHARE: Code = Code(0x1A36) # lamport-sha3-256-priv-share +LAMPORT_SHA3_512_SIG: Code = Code(0x1A44) # lamport-sha3-512-sig +LAMPORT_SHA3_384_SIG: Code = Code(0x1A45) # lamport-sha3-384-sig +LAMPORT_SHA3_256_SIG: Code = Code(0x1A46) # lamport-sha3-256-sig +LAMPORT_SHA3_512_SIG_SHARE: Code = Code(0x1A54) # lamport-sha3-512-sig-share +LAMPORT_SHA3_384_SIG_SHARE: Code = Code(0x1A55) # lamport-sha3-384-sig-share +LAMPORT_SHA3_256_SIG_SHARE: Code = Code(0x1A56) # lamport-sha3-256-sig-share KANGAROOTWELVE: Code = Code(0x1D01) # kangarootwelve SM3_256: Code = Code(0x534D) # sm3-256 +SHA256A: Code = Code(0x7012) # sha256a BLAKE2B_8: Code = Code(0xB201) # blake2b-8 BLAKE2B_16: Code = Code(0xB202) # blake2b-16 BLAKE2B_24: Code = Code(0xB203) # blake2b-24 @@ -367,6 +393,11 @@ SKEIN1024_1024: Code = Code(0xB3E0) # skein1024-1024 POSEIDON_BLS12_381_A2_FC1: Code = Code(0xB401) # poseidon-bls12_381-a2-fc1 POSEIDON_BLS12_381_A2_FC1_SC: Code = Code(0xB402) # poseidon-bls12_381-a2-fc1-sc +SSZ_SHA2_256_BMT: Code = Code(0xB502) # ssz-sha2-256-bmt +SHA2_256_CHUNKED: Code = Code(0xB510) # sha2-256-chunked +BLS12_381_G1_SHARE_MSIG: Code = Code(0xD01304) # bls12_381-g1-share-msig +BLS12_381_G2_SHARE_MSIG: Code = Code(0xD01305) # bls12_381-g2-share-msig +LAMPORT_SHARE_MSIG: Code = Code(0xD01307) # lamport-share-msig # Multiaddr IP4: Code = Code(0x04) # ip4 @@ -380,10 +411,13 @@ DNSADDR: Code = Code(0x38) # dnsaddr LIBP2P_KEY: Code = Code(0x72) # libp2p-key SCTP: Code = Code(0x84) # sctp +DNSLINK: Code = Code(0xE8) # dnslink UDP: Code = Code(0x111) # udp P2P_WEBRTC_STAR: Code = Code(0x113) # p2p-webrtc-star P2P_WEBRTC_DIRECT: Code = Code(0x114) # p2p-webrtc-direct P2P_STARDUST: Code = Code(0x115) # p2p-stardust +WEBRTC_DIRECT: Code = Code(0x118) # webrtc-direct +WEBRTC: Code = Code(0x119) # webrtc P2P_CIRCUIT: Code = Code(0x122) # p2p-circuit UDT: Code = Code(0x12D) # udt UTP: Code = Code(0x12E) # utp @@ -396,17 +430,30 @@ GARLIC64: Code = Code(0x1BE) # garlic64 GARLIC32: Code = Code(0x1BF) # garlic32 TLS: Code = Code(0x1C0) # tls +SNI: Code = Code(0x1C1) # sni +NOISE: Code = Code(0x1C6) # noise +SHS: Code = Code(0x1C8) # shs QUIC: Code = Code(0x1CC) # quic +QUIC_V1: Code = Code(0x1CD) # quic-v1 +CERTHASH: Code = Code(0x1D2) # certhash WS: Code = Code(0x1DD) # ws WSS: Code = Code(0x1DE) # wss P2P_WEBSOCKET_STAR: Code = Code(0x1DF) # p2p-websocket-star HTTP: Code = Code(0x1E0) # http +HTTP_PATH: Code = Code(0x1E1) # http-path LIBP2P_PEER_RECORD: Code = Code(0x301) # libp2p-peer-record +LIBP2P_RELAY_RSVP: Code = Code(0x302) # libp2p-relay-rsvp +MEMORYTRANSPORT: Code = Code(0x309) # memorytransport +TRANSPORT_IPFS_GATEWAY_HTTP: Code = Code(0x920) # transport-ipfs-gateway-http +TRANSPORT_FILECOIN_PIECE_HTTP: Code = Code(0x930) # transport-filecoin-piece-http +PLAINTEXTV2: Code = Code(0x706C61) # plaintextv2 +SCION: Code = Code(0xD02000) # scion # Ipld CIDV1: Code = Code(0x01) # cidv1 CIDV2: Code = Code(0x02) # cidv2 CIDV3: Code = Code(0x03) # cidv3 +IPCIDR: Code = Code(0x2B) # ipcidr RAW: Code = Code(0x55) # raw DAG_PB: Code = Code(0x70) # dag-pb DAG_CBOR: Code = Code(0x71) # dag-cbor @@ -427,12 +474,13 @@ ETH_STATE_TRIE: Code = Code(0x96) # eth-state-trie ETH_ACCOUNT_SNAPSHOT: Code = Code(0x97) # eth-account-snapshot ETH_STORAGE_TRIE: Code = Code(0x98) # eth-storage-trie +ETH_RECEIPT_LOG_TRIE: Code = Code(0x99) # eth-receipt-log-trie +ETH_RECEIPT_LOG: Code = Code(0x9A) # eth-receipt-log BITCOIN_BLOCK: Code = Code(0xB0) # bitcoin-block BITCOIN_TX: Code = Code(0xB1) # bitcoin-tx BITCOIN_WITNESS_COMMITMENT: Code = Code(0xB2) # bitcoin-witness-commitment ZCASH_BLOCK: Code = Code(0xC0) # zcash-block ZCASH_TX: Code = Code(0xC1) # zcash-tx -DOCID: Code = Code(0xCE) # docid STELLAR_BLOCK: Code = Code(0xD0) # stellar-block STELLAR_TX: Code = Code(0xD1) # stellar-tx DECRED_BLOCK: Code = Code(0xE0) # decred-block @@ -441,7 +489,10 @@ DASH_TX: Code = Code(0xF1) # dash-tx SWARM_MANIFEST: Code = Code(0xFA) # swarm-manifest SWARM_FEED: Code = Code(0xFB) # swarm-feed +BEESON: Code = Code(0xFC) # beeson DAG_JSON: Code = Code(0x129) # dag-json +SWHID_1_SNP: Code = Code(0x1F0) # swhid-1-snp +BITTORRENT_PIECES_ROOT: Code = Code(0xB702) # bittorrent-pieces-root # Serialization PROTOBUF: Code = Code(0x50) # protobuf @@ -450,12 +501,20 @@ BENCODE: Code = Code(0x63) # bencode JSON: Code = Code(0x200) # json MESSAGEPACK: Code = Code(0x201) # messagepack +CAR: Code = Code(0x202) # car +X509_CERTIFICATE: Code = Code(0x210) # x509-certificate +IPNS_RECORD: Code = Code(0x300) # ipns-record +CAR_INDEX_SORTED: Code = Code(0x400) # car-index-sorted +CAR_MULTIHASH_INDEX_SORTED: Code = Code(0x401) # car-multihash-index-sorted +SSZ: Code = Code(0xB501) # ssz +JSON_JCS: Code = Code(0xB601) # json-jcs # Multiformat MULTICODEC: Code = Code(0x30) # multicodec MULTIHASH: Code = Code(0x31) # multihash MULTIADDR: Code = Code(0x32) # multiaddr MULTIBASE: Code = Code(0x33) # multibase +VARSIG: Code = Code(0x34) # varsig # Key SECP256K1_PUB: Code = Code(0xE7) # secp256k1-pub @@ -464,38 +523,130 @@ X25519_PUB: Code = Code(0xEC) # x25519-pub ED25519_PUB: Code = Code(0xED) # ed25519-pub BLS12_381_G1G2_PUB: Code = Code(0xEE) # bls12_381-g1g2-pub +SR25519_PUB: Code = Code(0xEF) # sr25519-pub P256_PUB: Code = Code(0x1200) # p256-pub P384_PUB: Code = Code(0x1201) # p384-pub P521_PUB: Code = Code(0x1202) # p521-pub ED448_PUB: Code = Code(0x1203) # ed448-pub X448_PUB: Code = Code(0x1204) # x448-pub +RSA_PUB: Code = Code(0x1205) # rsa-pub +SM2_PUB: Code = Code(0x1206) # sm2-pub +MLKEM_512_PUB: Code = Code(0x120B) # mlkem-512-pub +MLKEM_768_PUB: Code = Code(0x120C) # mlkem-768-pub +MLKEM_1024_PUB: Code = Code(0x120D) # mlkem-1024-pub ED25519_PRIV: Code = Code(0x1300) # ed25519-priv +SECP256K1_PRIV: Code = Code(0x1301) # secp256k1-priv +X25519_PRIV: Code = Code(0x1302) # x25519-priv +SR25519_PRIV: Code = Code(0x1303) # sr25519-priv +RSA_PRIV: Code = Code(0x1305) # rsa-priv +P256_PRIV: Code = Code(0x1306) # p256-priv +P384_PRIV: Code = Code(0x1307) # p384-priv +P521_PRIV: Code = Code(0x1308) # p521-priv +BLS12_381_G1_PRIV: Code = Code(0x1309) # bls12_381-g1-priv +BLS12_381_G2_PRIV: Code = Code(0x130A) # bls12_381-g2-priv +BLS12_381_G1G2_PRIV: Code = Code(0x130B) # bls12_381-g1g2-priv +SM2_PRIV: Code = Code(0x1310) # sm2-priv +ED448_PRIV: Code = Code(0x1311) # ed448-priv +X448_PRIV: Code = Code(0x1312) # x448-priv +MLKEM_512_PRIV: Code = Code(0x1313) # mlkem-512-priv +MLKEM_768_PRIV: Code = Code(0x1314) # mlkem-768-priv +MLKEM_1024_PRIV: Code = Code(0x1315) # mlkem-1024-priv +JWK_JCS_PRIV: Code = Code(0x1316) # jwk_jcs-priv +BLS12_381_G1_SIG: Code = Code(0xD0EA) # bls12_381-g1-sig +BLS12_381_G2_SIG: Code = Code(0xD0EB) # bls12_381-g2-sig +JWK_JCS_PUB: Code = Code(0xEB51) # jwk_jcs-pub +BLS12_381_G1_MSIG: Code = Code(0xD01301) # bls12_381-g1-msig +BLS12_381_G2_MSIG: Code = Code(0xD01302) # bls12_381-g2-msig # Namespace PATH: Code = Code(0x2F) # path -IPLD_NS: Code = Code(0xE2) # ipld-ns -IPFS_NS: Code = Code(0xE3) # ipfs-ns -SWARM_NS: Code = Code(0xE4) # swarm-ns -IPNS_NS: Code = Code(0xE5) # ipns-ns +LBRY: Code = Code(0x8C) # lbry +STREAMID: Code = Code(0xCE) # streamid +IPNS: Code = Code(0xE5) # ipns ZERONET: Code = Code(0xE6) # zeronet +WEBTRANSPORT: Code = Code(0x1D1) # webtransport +TRANSPORT_BITSWAP: Code = Code(0x900) # transport-bitswap +TRANSPORT_GRAPHSYNC_FILECOINV1: Code = Code(0x910) # transport-graphsync-filecoinv1 +NONSTANDARD_SIG: Code = Code(0xD000) # nonstandard-sig FIL_COMMITMENT_UNSEALED: Code = Code(0xF101) # fil-commitment-unsealed SKYNET_NS: Code = Code(0xB19910) # skynet-ns +ARWEAVE_NS: Code = Code(0xB29910) # arweave-ns +SUBSPACE_NS: Code = Code(0xB39910) # subspace-ns +KUMANDRA_NS: Code = Code(0xB49910) # kumandra-ns # Other +AES_128: Code = Code(0xA0) # aes-128 +AES_192: Code = Code(0xA1) # aes-192 +AES_256: Code = Code(0xA2) # aes-256 +CHACHA_128: Code = Code(0xA3) # chacha-128 +CHACHA_256: Code = Code(0xA4) # chacha-256 +CAIP_50: Code = Code(0xCA) # caip-50 +IPLD: Code = Code(0xE2) # ipld +IPFS: Code = Code(0xE3) # ipfs +SWARM: Code = Code(0xE4) # swarm +CRC32: Code = Code(0x132) # crc32 +CRC64_ECMA: Code = Code(0x164) # crc64-ecma +CRC64_NVME: Code = Code(0x165) # crc64-nvme +MULTIDID: Code = Code(0xD1D) # multidid +VLAD: Code = Code(0x1207) # vlad +PROVENANCE_LOG: Code = Code(0x1208) # provenance-log +PROVENANCE_LOG_ENTRY: Code = Code(0x1209) # provenance-log-entry +PROVENANCE_LOG_SCRIPT: Code = Code(0x120A) # provenance-log-script +MULTISIG: Code = Code(0x1239) # multisig +MULTIKEY: Code = Code(0x123A) # multikey +NONCE: Code = Code(0x123B) # nonce +AES_GCM_256: Code = Code(0x2000) # aes-gcm-256 +SILVERPINE: Code = Code(0x3F42) # silverpine +CHACHA20_POLY1305: Code = Code(0xA000) # chacha20-poly1305 +XXH_32: Code = Code(0xB3E1) # xxh-32 +XXH_64: Code = Code(0xB3E2) # xxh-64 +XXH3_64: Code = Code(0xB3E3) # xxh3-64 +XXH3_128: Code = Code(0xB3E4) # xxh3-128 +RDFC_1: Code = Code(0xB403) # rdfc-1 +ISCC: Code = Code(0xCC01) # iscc ZEROXCERT_IMPRINT_256: Code = Code(0xCE11) # zeroxcert-imprint-256 +BCRYPT_PBKDF: Code = Code(0xD00D) # bcrypt-pbkdf +ES256K: Code = Code(0xD0E7) # es256k +EDDSA: Code = Code(0xD0ED) # eddsa +EIP_191: Code = Code(0xD191) # eip-191 +ED2K: Code = Code(0xED20) # ed2k FIL_COMMITMENT_SEALED: Code = Code(0xF102) # fil-commitment-sealed +SHELTER_CONTRACT_MANIFEST: Code = Code(0x511E00) # shelter-contract-manifest +SHELTER_CONTRACT_TEXT: Code = Code(0x511E01) # shelter-contract-text +SHELTER_CONTRACT_DATA: Code = Code(0x511E02) # shelter-contract-data +SHELTER_FILE_MANIFEST: Code = Code(0x511E03) # shelter-file-manifest +SHELTER_FILE_CHUNK: Code = Code(0x511E04) # shelter-file-chunk HOLOCHAIN_ADR_V0: Code = Code(0x807124) # holochain-adr-v0 HOLOCHAIN_ADR_V1: Code = Code(0x817124) # holochain-adr-v1 HOLOCHAIN_KEY_V0: Code = Code(0x947124) # holochain-key-v0 HOLOCHAIN_KEY_V1: Code = Code(0x957124) # holochain-key-v1 HOLOCHAIN_SIG_V0: Code = Code(0xA27124) # holochain-sig-v0 HOLOCHAIN_SIG_V1: Code = Code(0xA37124) # holochain-sig-v1 +ES256: Code = Code(0xD01200) # es256 +ES384: Code = Code(0xD01201) # es384 +ES512: Code = Code(0xD01202) # es512 +RS256: Code = Code(0xD01205) # rs256 +ES256K_MSIG: Code = Code(0xD01300) # es256k-msig +EDDSA_MSIG: Code = Code(0xD01303) # eddsa-msig +LAMPORT_MSIG: Code = Code(0xD01306) # lamport-msig +ES256_MSIG: Code = Code(0xD01308) # es256-msig +ES384_MSIG: Code = Code(0xD01309) # es384-msig +ES521_MSIG: Code = Code(0xD0130A) # es521-msig +RS256_MSIG: Code = Code(0xD0130B) # rs256-msig __all__ = [ + "AES_128", + "AES_192", + "AES_256", + "AES_GCM_256", + "ARWEAVE_NS", + "BCRYPT_PBKDF", + "BEESON", "BENCODE", "BITCOIN_BLOCK", "BITCOIN_TX", "BITCOIN_WITNESS_COMMITMENT", + "BITTORRENT_PIECES_ROOT", "BLAKE2B_8", "BLAKE2B_16", "BLAKE2B_24", @@ -593,14 +744,38 @@ "BLAKE2S_248", "BLAKE2S_256", "BLAKE3", + "BLAKE3_HASHSEQ", + "BLS12_381_G1G2_PRIV", "BLS12_381_G1G2_PUB", + "BLS12_381_G1_MSIG", + "BLS12_381_G1_PRIV", + "BLS12_381_G1_PRIV_SHARE", "BLS12_381_G1_PUB", + "BLS12_381_G1_PUB_SHARE", + "BLS12_381_G1_SHARE_MSIG", + "BLS12_381_G1_SIG", + "BLS12_381_G2_MSIG", + "BLS12_381_G2_PRIV", + "BLS12_381_G2_PRIV_SHARE", "BLS12_381_G2_PUB", - "BMT", + "BLS12_381_G2_PUB_SHARE", + "BLS12_381_G2_SHARE_MSIG", + "BLS12_381_G2_SIG", + "CAIP_50", + "CAR", + "CAR_INDEX_SORTED", + "CAR_MULTIHASH_INDEX_SORTED", "CBOR", + "CERTHASH", + "CHACHA20_POLY1305", + "CHACHA_128", + "CHACHA_256", "CIDV1", "CIDV2", "CIDV3", + "CRC32", + "CRC64_ECMA", + "CRC64_NVME", "DAG_CBOR", "DAG_COSE", "DAG_JOSE", @@ -616,13 +791,28 @@ "DNS4", "DNS6", "DNSADDR", - "DOCID", + "DNSLINK", + "ED2K", + "ED448_PRIV", "ED448_PUB", "ED25519_PRIV", "ED25519_PUB", + "EDDSA", + "EDDSA_MSIG", + "EIP_191", + "ES256", + "ES256K", + "ES256K_MSIG", + "ES256_MSIG", + "ES384", + "ES384_MSIG", + "ES512", + "ES521_MSIG", "ETH_ACCOUNT_SNAPSHOT", "ETH_BLOCK", "ETH_BLOCK_LIST", + "ETH_RECEIPT_LOG", + "ETH_RECEIPT_LOG_TRIE", "ETH_STATE_TRIE", "ETH_STORAGE_TRIE", "ETH_TX", @@ -631,6 +821,7 @@ "ETH_TX_TRIE", "FIL_COMMITMENT_SEALED", "FIL_COMMITMENT_UNSEALED", + "FR32_SHA256_TRUNC254_PADBINTREE", "GARLIC32", "GARLIC64", "GIT_RAW", @@ -642,33 +833,74 @@ "HOLOCHAIN_SIG_V1", "HTTP", "HTTPS", + "HTTP_PATH", "IDENTITY", "IP4", "IP6", "IP6ZONE", - "IPFS_NS", - "IPLD_NS", - "IPNS_NS", + "IPCIDR", + "IPFS", + "IPLD", + "IPNS", + "IPNS_RECORD", + "ISCC", "JSON", + "JSON_JCS", + "JWK_JCS_PRIV", + "JWK_JCS_PUB", "KANGAROOTWELVE", "KECCAK_224", "KECCAK_256", "KECCAK_384", "KECCAK_512", + "KUMANDRA_NS", + "LAMPORT_MSIG", + "LAMPORT_SHA3_256_PRIV", + "LAMPORT_SHA3_256_PRIV_SHARE", + "LAMPORT_SHA3_256_PUB", + "LAMPORT_SHA3_256_SIG", + "LAMPORT_SHA3_256_SIG_SHARE", + "LAMPORT_SHA3_384_PRIV", + "LAMPORT_SHA3_384_PRIV_SHARE", + "LAMPORT_SHA3_384_PUB", + "LAMPORT_SHA3_384_SIG", + "LAMPORT_SHA3_384_SIG_SHARE", + "LAMPORT_SHA3_512_PRIV", + "LAMPORT_SHA3_512_PRIV_SHARE", + "LAMPORT_SHA3_512_PUB", + "LAMPORT_SHA3_512_SIG", + "LAMPORT_SHA3_512_SIG_SHARE", + "LAMPORT_SHARE_MSIG", + "LBRY", "LEOFCOIN_BLOCK", "LEOFCOIN_PR", "LEOFCOIN_TX", "LIBP2P_KEY", "LIBP2P_PEER_RECORD", + "LIBP2P_RELAY_RSVP", "MD4", "MD5", + "MEMORYTRANSPORT", "MESSAGEPACK", + "MLKEM_512_PRIV", + "MLKEM_512_PUB", + "MLKEM_768_PRIV", + "MLKEM_768_PUB", + "MLKEM_1024_PRIV", + "MLKEM_1024_PUB", "MULTIADDR", "MULTIBASE", "MULTICODEC", + "MULTIDID", "MULTIHASH", + "MULTIKEY", + "MULTISIG", "MURMUR3_32", - "MURMUR3_128", + "MURMUR3_X64_64", + "MURMUR3_X64_128", + "NOISE", + "NONCE", + "NONSTANDARD_SIG", "ONION", "ONION3", "P2P", @@ -677,32 +909,60 @@ "P2P_WEBRTC_DIRECT", "P2P_WEBRTC_STAR", "P2P_WEBSOCKET_STAR", + "P256_PRIV", "P256_PUB", + "P384_PRIV", "P384_PUB", + "P521_PRIV", "P521_PUB", "PATH", + "PLAINTEXTV2", "POSEIDON_BLS12_381_A2_FC1", "POSEIDON_BLS12_381_A2_FC1_SC", "PROTOBUF", + "PROVENANCE_LOG", + "PROVENANCE_LOG_ENTRY", + "PROVENANCE_LOG_SCRIPT", "QUIC", + "QUIC_V1", "RAW", + "RDFC_1", "RIPEMD_128", "RIPEMD_160", "RIPEMD_256", "RIPEMD_320", "RLP", + "RS256", + "RS256_MSIG", + "RSA_PRIV", + "RSA_PUB", + "SCION", "SCTP", + "SECP256K1_PRIV", "SECP256K1_PUB", "SHA1", + "SHA2_224", "SHA2_256", + "SHA2_256_CHUNKED", "SHA2_256_TRUNC254_PADDED", + "SHA2_384", "SHA2_512", + "SHA2_512_224", + "SHA2_512_256", "SHA3_224", "SHA3_256", "SHA3_384", "SHA3_512", + "SHA256A", "SHAKE_128", "SHAKE_256", + "SHELTER_CONTRACT_DATA", + "SHELTER_CONTRACT_MANIFEST", + "SHELTER_CONTRACT_TEXT", + "SHELTER_FILE_CHUNK", + "SHELTER_FILE_MANIFEST", + "SHS", + "SILVERPINE", "SKEIN256_8", "SKEIN256_16", "SKEIN256_24", @@ -928,26 +1188,52 @@ "SKEIN1024_1016", "SKEIN1024_1024", "SKYNET_NS", + "SM2_PRIV", + "SM2_PUB", "SM3_256", + "SNI", + "SR25519_PRIV", + "SR25519_PUB", + "SSZ", + "SSZ_SHA2_256_BMT", "STELLAR_BLOCK", "STELLAR_TX", + "STREAMID", + "SUBSPACE_NS", + "SWARM", "SWARM_FEED", "SWARM_MANIFEST", - "SWARM_NS", + "SWHID_1_SNP", "TCP", "THREAD", "TLS", "TORRENT_FILE", "TORRENT_INFO", + "TRANSPORT_BITSWAP", + "TRANSPORT_FILECOIN_PIECE_HTTP", + "TRANSPORT_GRAPHSYNC_FILECOINV1", + "TRANSPORT_IPFS_GATEWAY_HTTP", "UDP", "UDT", "UNIX", "UTP", + "VARSIG", + "VLAD", + "WEBRTC", + "WEBRTC_DIRECT", + "WEBTRANSPORT", "WS", "WSS", "X11", + "X448_PRIV", "X448_PUB", + "X509_CERTIFICATE", + "X25519_PRIV", "X25519_PUB", + "XXH3_64", + "XXH3_128", + "XXH_32", + "XXH_64", "ZCASH_BLOCK", "ZCASH_TX", "ZERONET", diff --git a/multicodec/constants.py b/multicodec/constants.py index 4a0c3ef..37ec44b 100644 --- a/multicodec/constants.py +++ b/multicodec/constants.py @@ -6,21 +6,42 @@ "protobuf": { "prefix": 0x50, }, - "cbor": { - "prefix": 0x51, - }, "rlp": { "prefix": 0x60, }, "bencode": { "prefix": 0x63, }, - "json": { - "prefix": 0x0200, - }, "messagepack": { "prefix": 0x0201, }, + "car": { + "prefix": 0x0202, + }, + "x509-certificate": { + "prefix": 0x0210, + }, + "ipns-record": { + "prefix": 0x0300, + }, + "car-index-sorted": { + "prefix": 0x0400, + }, + "car-multihash-index-sorted": { + "prefix": 0x0401, + }, + "provenance-log": { + "prefix": 0x1208, + }, + "provenance-log-entry": { + "prefix": 0x1209, + }, + "provenance-log-script": { + "prefix": 0x120A, + }, + "ssz": { + "prefix": 0xB501, + }, # multiformat "multicodec": { "prefix": 0x30, @@ -34,6 +55,21 @@ "multibase": { "prefix": 0x33, }, + "varsig": { + "prefix": 0x34, + }, + "caip-50": { + "prefix": 0xCA, + }, + "multidid": { + "prefix": 0x0D1D, + }, + "multisig": { + "prefix": 0x1239, + }, + "multikey": { + "prefix": 0x123A, + }, # multihash "identity": { "prefix": 0x00, @@ -80,11 +116,8 @@ "blake3": { "prefix": 0x1E, }, - "murmur3-128": { - "prefix": 0x22, - }, - "murmur3-32": { - "prefix": 0x23, + "sha2-384": { + "prefix": 0x20, }, "dbl-sha2-256": { "prefix": 0x56, @@ -95,12 +128,21 @@ "md5": { "prefix": 0xD5, }, - "bmt": { - "prefix": 0xD6, + "fr32-sha256-trunc254-padbintree": { + "prefix": 0x1011, }, "sha2-256-trunc254-padded": { "prefix": 0x1012, }, + "sha2-224": { + "prefix": 0x1013, + }, + "sha2-512-224": { + "prefix": 0x1014, + }, + "sha2-512-256": { + "prefix": 0x1015, + }, "ripemd-128": { "prefix": 0x1052, }, @@ -1088,6 +1130,21 @@ "poseidon-bls12_381-a2-fc1-sc": { "prefix": 0xB402, }, + "ssz-sha2-256-bmt": { + "prefix": 0xB502, + }, + "sha2-256-chunked": { + "prefix": 0xB510, + }, + "bittorrent-pieces-root": { + "prefix": 0xB702, + }, + "bcrypt-pbkdf": { + "prefix": 0xD00D, + }, + "ed2k": { + "prefix": 0xED20, + }, # multiaddr "ip4": { "prefix": 0x04, @@ -1104,6 +1161,9 @@ "ip6zone": { "prefix": 0x2A, }, + "ipcidr": { + "prefix": 0x2B, + }, "dns": { "prefix": 0x35, }, @@ -1131,6 +1191,12 @@ "p2p-stardust": { "prefix": 0x0115, }, + "webrtc-direct": { + "prefix": 0x0118, + }, + "webrtc": { + "prefix": 0x0119, + }, "p2p-circuit": { "prefix": 0x0122, }, @@ -1167,9 +1233,27 @@ "tls": { "prefix": 0x01C0, }, + "sni": { + "prefix": 0x01C1, + }, + "noise": { + "prefix": 0x01C6, + }, + "shs": { + "prefix": 0x01C8, + }, "quic": { "prefix": 0x01CC, }, + "quic-v1": { + "prefix": 0x01CD, + }, + "webtransport": { + "prefix": 0x01D1, + }, + "certhash": { + "prefix": 0x01D2, + }, "ws": { "prefix": 0x01DD, }, @@ -1182,15 +1266,21 @@ "http": { "prefix": 0x01E0, }, - # ipld - "cidv1": { - "prefix": 0x01, + "http-path": { + "prefix": 0x01E1, }, - "cidv2": { - "prefix": 0x02, + "silverpine": { + "prefix": 0x3F42, }, - "cidv3": { - "prefix": 0x03, + "plaintextv2": { + "prefix": 0x706C61, + }, + "scion": { + "prefix": 0xD02000, + }, + # ipld + "cbor": { + "prefix": 0x51, }, "raw": { "prefix": 0x55, @@ -1213,6 +1303,9 @@ "torrent-file": { "prefix": 0x7C, }, + "blake3-hashseq": { + "prefix": 0x80, + }, "leofcoin-block": { "prefix": 0x81, }, @@ -1255,6 +1348,12 @@ "eth-storage-trie": { "prefix": 0x98, }, + "eth-receipt-log-trie": { + "prefix": 0x99, + }, + "eth-receipt-log": { + "prefix": 0x9A, + }, "bitcoin-block": { "prefix": 0xB0, }, @@ -1294,35 +1393,80 @@ "swarm-feed": { "prefix": 0xFB, }, + "beeson": { + "prefix": 0xFC, + }, "dag-json": { "prefix": 0x0129, }, + "swhid-1-snp": { + "prefix": 0x01F0, + }, + "json": { + "prefix": 0x0200, + }, + "rdfc-1": { + "prefix": 0xB403, + }, + "json-jcs": { + "prefix": 0xB601, + }, # namespace "path": { "prefix": 0x2F, }, - "docid": { + "lbry": { + "prefix": 0x8C, + }, + "streamid": { "prefix": 0xCE, }, - "ipld-ns": { + "ipld": { "prefix": 0xE2, }, - "ipfs-ns": { + "ipfs": { "prefix": 0xE3, }, - "swarm-ns": { + "swarm": { "prefix": 0xE4, }, - "ipns-ns": { + "ipns": { "prefix": 0xE5, }, "zeronet": { "prefix": 0xE6, }, + "dnslink": { + "prefix": 0xE8, + }, "skynet-ns": { "prefix": 0xB19910, }, + "arweave-ns": { + "prefix": 0xB29910, + }, + "subspace-ns": { + "prefix": 0xB39910, + }, + "kumandra-ns": { + "prefix": 0xB49910, + }, # key + "aes-128": { + "prefix": 0xA0, + }, + "aes-192": { + "prefix": 0xA1, + }, + "aes-256": { + "prefix": 0xA2, + }, + "chacha-128": { + "prefix": 0xA3, + }, + "chacha-256": { + "prefix": 0xA4, + }, "secp256k1-pub": { "prefix": 0xE7, }, @@ -1341,6 +1485,9 @@ "bls12_381-g1g2-pub": { "prefix": 0xEE, }, + "sr25519-pub": { + "prefix": 0xEF, + }, "p256-pub": { "prefix": 0x1200, }, @@ -1356,9 +1503,117 @@ "x448-pub": { "prefix": 0x1204, }, + "rsa-pub": { + "prefix": 0x1205, + }, + "sm2-pub": { + "prefix": 0x1206, + }, + "mlkem-512-pub": { + "prefix": 0x120B, + }, + "mlkem-768-pub": { + "prefix": 0x120C, + }, + "mlkem-1024-pub": { + "prefix": 0x120D, + }, "ed25519-priv": { "prefix": 0x1300, }, + "secp256k1-priv": { + "prefix": 0x1301, + }, + "x25519-priv": { + "prefix": 0x1302, + }, + "sr25519-priv": { + "prefix": 0x1303, + }, + "rsa-priv": { + "prefix": 0x1305, + }, + "p256-priv": { + "prefix": 0x1306, + }, + "p384-priv": { + "prefix": 0x1307, + }, + "p521-priv": { + "prefix": 0x1308, + }, + "bls12_381-g1-priv": { + "prefix": 0x1309, + }, + "bls12_381-g2-priv": { + "prefix": 0x130A, + }, + "bls12_381-g1g2-priv": { + "prefix": 0x130B, + }, + "bls12_381-g1-pub-share": { + "prefix": 0x130C, + }, + "bls12_381-g2-pub-share": { + "prefix": 0x130D, + }, + "bls12_381-g1-priv-share": { + "prefix": 0x130E, + }, + "bls12_381-g2-priv-share": { + "prefix": 0x130F, + }, + "sm2-priv": { + "prefix": 0x1310, + }, + "ed448-priv": { + "prefix": 0x1311, + }, + "x448-priv": { + "prefix": 0x1312, + }, + "mlkem-512-priv": { + "prefix": 0x1313, + }, + "mlkem-768-priv": { + "prefix": 0x1314, + }, + "mlkem-1024-priv": { + "prefix": 0x1315, + }, + "jwk_jcs-priv": { + "prefix": 0x1316, + }, + "lamport-sha3-512-pub": { + "prefix": 0x1A14, + }, + "lamport-sha3-384-pub": { + "prefix": 0x1A15, + }, + "lamport-sha3-256-pub": { + "prefix": 0x1A16, + }, + "lamport-sha3-512-priv": { + "prefix": 0x1A24, + }, + "lamport-sha3-384-priv": { + "prefix": 0x1A25, + }, + "lamport-sha3-256-priv": { + "prefix": 0x1A26, + }, + "lamport-sha3-512-priv-share": { + "prefix": 0x1A34, + }, + "lamport-sha3-384-priv-share": { + "prefix": 0x1A35, + }, + "lamport-sha3-256-priv-share": { + "prefix": 0x1A36, + }, + "jwk_jcs-pub": { + "prefix": 0xEB51, + }, # holochain "holochain-adr-v0": { "prefix": 0x807124, @@ -1378,14 +1633,183 @@ "holochain-sig-v1": { "prefix": 0xA37124, }, + # cid + "cidv1": { + "prefix": 0x01, + }, + "cidv2": { + "prefix": 0x02, + }, + "cidv3": { + "prefix": 0x03, + }, + # hash + "murmur3-x64-64": { + "prefix": 0x22, + }, + "murmur3-32": { + "prefix": 0x23, + }, + "crc32": { + "prefix": 0x0132, + }, + "crc64-ecma": { + "prefix": 0x0164, + }, + "crc64-nvme": { + "prefix": 0x0165, + }, + "murmur3-x64-128": { + "prefix": 0x1022, + }, + "sha256a": { + "prefix": 0x7012, + }, + "xxh-32": { + "prefix": 0xB3E1, + }, + "xxh-64": { + "prefix": 0xB3E2, + }, + "xxh3-64": { + "prefix": 0xB3E3, + }, + "xxh3-128": { + "prefix": 0xB3E4, + }, # libp2p "libp2p-peer-record": { "prefix": 0x0301, }, + "libp2p-relay-rsvp": { + "prefix": 0x0302, + }, + "memorytransport": { + "prefix": 0x0309, + }, + # transport + "transport-bitswap": { + "prefix": 0x0900, + }, + "transport-graphsync-filecoinv1": { + "prefix": 0x0910, + }, + "transport-ipfs-gateway-http": { + "prefix": 0x0920, + }, + "transport-filecoin-piece-http": { + "prefix": 0x0930, + }, + # vlad + "vlad": { + "prefix": 0x1207, + }, + # nonce + "nonce": { + "prefix": 0x123B, + }, + # multisig + "lamport-sha3-512-sig": { + "prefix": 0x1A44, + }, + "lamport-sha3-384-sig": { + "prefix": 0x1A45, + }, + "lamport-sha3-256-sig": { + "prefix": 0x1A46, + }, + "lamport-sha3-512-sig-share": { + "prefix": 0x1A54, + }, + "lamport-sha3-384-sig-share": { + "prefix": 0x1A55, + }, + "lamport-sha3-256-sig-share": { + "prefix": 0x1A56, + }, + "es256k-msig": { + "prefix": 0xD01300, + }, + "bls12_381-g1-msig": { + "prefix": 0xD01301, + }, + "bls12_381-g2-msig": { + "prefix": 0xD01302, + }, + "eddsa-msig": { + "prefix": 0xD01303, + }, + "bls12_381-g1-share-msig": { + "prefix": 0xD01304, + }, + "bls12_381-g2-share-msig": { + "prefix": 0xD01305, + }, + "lamport-msig": { + "prefix": 0xD01306, + }, + "lamport-share-msig": { + "prefix": 0xD01307, + }, + "es256-msig": { + "prefix": 0xD01308, + }, + "es384-msig": { + "prefix": 0xD01309, + }, + "es521-msig": { + "prefix": 0xD0130A, + }, + "rs256-msig": { + "prefix": 0xD0130B, + }, + # encryption + "aes-gcm-256": { + "prefix": 0x2000, + }, + # multikey + "chacha20-poly1305": { + "prefix": 0xA000, + }, + # softhash + "iscc": { + "prefix": 0xCC01, + }, # zeroxcert "zeroxcert-imprint-256": { "prefix": 0xCE11, }, + # varsig + "nonstandard-sig": { + "prefix": 0xD000, + }, + "es256k": { + "prefix": 0xD0E7, + }, + "bls12_381-g1-sig": { + "prefix": 0xD0EA, + }, + "bls12_381-g2-sig": { + "prefix": 0xD0EB, + }, + "eddsa": { + "prefix": 0xD0ED, + }, + "eip-191": { + "prefix": 0xD191, + }, + "es256": { + "prefix": 0xD01200, + }, + "es384": { + "prefix": 0xD01201, + }, + "es512": { + "prefix": 0xD01202, + }, + "rs256": { + "prefix": 0xD01205, + }, # filecoin "fil-commitment-unsealed": { "prefix": 0xF101, @@ -1393,6 +1817,22 @@ "fil-commitment-sealed": { "prefix": 0xF102, }, + # shelter + "shelter-contract-manifest": { + "prefix": 0x511E00, + }, + "shelter-contract-text": { + "prefix": 0x511E01, + }, + "shelter-contract-data": { + "prefix": 0x511E02, + }, + "shelter-file-manifest": { + "prefix": 0x511E03, + }, + "shelter-file-chunk": { + "prefix": 0x511E04, + }, } NAME_TABLE = {name: value["prefix"] for name, value in CODECS.items()} diff --git a/newsfragments/29.docs.rst b/newsfragments/29.docs.rst new file mode 100644 index 0000000..c1e8cf2 --- /dev/null +++ b/newsfragments/29.docs.rst @@ -0,0 +1 @@ +Fixed Read the Docs build failures by updating deprecated Sphinx settings and adding API documentation generation. diff --git a/newsfragments/29.internal.rst b/newsfragments/29.internal.rst new file mode 100644 index 0000000..4b33e77 --- /dev/null +++ b/newsfragments/29.internal.rst @@ -0,0 +1 @@ +Dropped ``coverage`` and ``codecov`` references, no longer using it. diff --git a/newsfragments/31.feature.rst b/newsfragments/31.feature.rst new file mode 100644 index 0000000..dca05c0 --- /dev/null +++ b/newsfragments/31.feature.rst @@ -0,0 +1 @@ +Updated codec table from official multicodec repository to include all 603 codecs (up from 460). This adds many previously missing codecs including hash functions (sha2-384, sha2-224, murmur3-x64 variants), encryption algorithms (aes-128/192/256, chacha variants), network protocols (noise, quic-v1, webrtc), and many others. Addresses gap analysis from discussion #1063. diff --git a/pyproject.toml b/pyproject.toml index 8fbc7cd..1c46e79 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,12 +36,9 @@ dev = [ "Sphinx>=5.0.0", "build>=0.9.0", "bump-my-version>=1.2.0", - "codecov", - "coverage>=6.5.0", "mypy", "pre-commit", "pytest", - "pytest-cov", "pytest-runner", "ruff", "towncrier>=24,<25", @@ -63,21 +60,6 @@ include = ["multicodec*"] testpaths = ["tests"] python_classes = "*TestCase" -[tool.coverage.run] -source = ["multicodec"] - -[tool.coverage.report] -exclude_lines = [ - "pragma: no cover", - "def __repr__", - "if self.debug:", - "if settings.DEBUG", - "raise AssertionError", - "raise NotImplementedError", - "if 0:", - "if __name__ == .__main__.:", -] - [tool.towncrier] # Read https://github.com/multiformats/py-multicodec/blob/master/newsfragments/README.md for instructions directory = "newsfragments"