├── .github └── workflows │ ├── generated-pr.yml │ └── stale.yml ├── LICENSE ├── README.md └── drafts ├── draft-snell-multicodec-00.txt ├── draft-snell-multicodec-00.xml ├── draft-snell-multihash-00.txt └── draft-snell-multihash-00.xml /.github/workflows/generated-pr.yml: -------------------------------------------------------------------------------- 1 | name: Close Generated PRs 2 | 3 | on: 4 | schedule: 5 | - cron: '0 0 * * *' 6 | workflow_dispatch: 7 | 8 | permissions: 9 | issues: write 10 | pull-requests: write 11 | 12 | jobs: 13 | stale: 14 | uses: ipdxco/unified-github-workflows/.github/workflows/reusable-generated-pr.yml@v1 15 | -------------------------------------------------------------------------------- /.github/workflows/stale.yml: -------------------------------------------------------------------------------- 1 | name: Close Stale Issues 2 | 3 | on: 4 | schedule: 5 | - cron: '0 0 * * *' 6 | workflow_dispatch: 7 | 8 | permissions: 9 | issues: write 10 | pull-requests: write 11 | 12 | jobs: 13 | stale: 14 | uses: ipdxco/unified-github-workflows/.github/workflows/reusable-stale-issue.yml@v1 15 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Protocol Labs Inc. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # specs 2 | 3 | [![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) 4 | [![](https://img.shields.io/badge/project-multiformats-blue.svg?style=flat-square)](https://github.com/multiformats/multiformats) 5 | [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](https://webchat.freenode.net/?channels=%23ipfs) 6 | [![](https://img.shields.io/badge/readme%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/RichardLitt/standard-readme) 7 | 8 | > Specification work regarding multihash, multiaddr, and others 9 | 10 | This repository is a **work in progress**. 11 | 12 | ## Maintainers 13 | 14 | - [@nicola](https://github.com/nicola) 15 | 16 | ## Contribute 17 | 18 | Please contribute! [Look at the issues](https://github.com/multiformats/specs/issues)! 19 | 20 | Check out our [contributing document](https://github.com/multiformats/multiformats/blob/master/contributing.md) for more information on how we work, and about contributing in general. Please be aware that all interactions related to multiformats are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md). 21 | 22 | Small note: If editing the README, please conform to the [standard-readme](https://github.com/RichardLitt/standard-readme) specification. 23 | 24 | ## License 25 | 26 | This repository is only for documents. All of these are licensed under the [CC-BY-SA 3.0](https://ipfs.io/ipfs/QmVreNvKsQmQZ83T86cWSjPu2vR3yZHGPm5jnxFuunEB9u) license © 2016 Protocol Labs Inc. Any code is under a [MIT](LICENSE) © 2016 Protocol Labs Inc. 27 | -------------------------------------------------------------------------------- /drafts/draft-snell-multicodec-00.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Individual Submission J. Snell, Ed. 6 | Internet-Draft NearForm Research 7 | Intended status: Standards Track N. Greco 8 | Expires: August 27, 2020 J. Benet 9 | D. Dalrymple 10 | D. Dias 11 | L. Gierth 12 | Protocol Labs 13 | February 24, 2020 14 | 15 | 16 | Additional Multiformat Codec Registrations 17 | draft-snell-multicodec-00 18 | 19 | Abstract 20 | 21 | This document defines additional registrations for the Multiformats 22 | Codec Registry. 23 | 24 | Status of This Memo 25 | 26 | This Internet-Draft is submitted to IETF in full conformance with the 27 | provisions of BCP 78 and BCP 79. 28 | 29 | Internet-Drafts are working documents of the Internet Engineering 30 | Task Force (IETF). Note that other groups may also distribute 31 | working documents as Internet-Drafts. The list of current Internet- 32 | Drafts is at https://datatracker.ietf.org/drafts/current/. 33 | 34 | Internet-Drafts are draft documents valid for a maximum of six months 35 | and may be updated, replaced, or obsoleted by other documents at any 36 | time. It is inappropriate to use Internet-Drafts as reference 37 | material or to cite them other than as "work in progress." 38 | 39 | This Internet-Draft will expire on August 27, 2020. 40 | 41 | Copyright Notice 42 | 43 | Copyright (c) 2020 IETF Trust and the persons identified as the 44 | document authors. All rights reserved. 45 | 46 | This document is subject to BCP 78 and the IETF Trust's Legal 47 | Provisions Relating to IETF Documents 48 | (https://trustee.ietf.org/license-info) in effect on the date of 49 | publication of this document. Please review these documents 50 | carefully, as they describe your rights and restrictions with respect 51 | to this document. 52 | 53 | 54 | 55 | 56 | Snell, et al. Expires August 27, 2020 [Page 1] 57 | 58 | Internet-Draft Multiformats February 2020 59 | 60 | 61 | Table of Contents 62 | 63 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 64 | 2. Codec Registrations . . . . . . . . . . . . . . . . . . . . . 2 65 | 3. Security Considerations . . . . . . . . . . . . . . . . . . . 5 66 | 4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 5 67 | 5. Normative References . . . . . . . . . . . . . . . . . . . . 5 68 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 5 69 | 70 | 1. Introduction 71 | 72 | TBD 73 | 74 | In this document, the key words "MUST", "MUST NOT", "REQUIRED", 75 | "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", 76 | and "OPTIONAL" are to be interpreted as described in [RFC2119]. 77 | 78 | 2. Codec Registrations 79 | 80 | +--------------------+-------------+----------+---------------------+ 81 | | Name | Tag | Code | Description | 82 | +--------------------+-------------+----------+---------------------+ 83 | | ip4 | multiaddr | 0x04 | | 84 | | tcp | multiaddr | 0x06 | | 85 | | dccp | multiaddr | 0x21 | | 86 | | ip6 | multiaddr | 0x29 | | 87 | | ip6zone | multiaddr | 0x2a | | 88 | | path | namespace | 0x2f | Namespace for | 89 | | | | | string paths. | 90 | | | | | Corresponds to / in | 91 | | | | | ASCII. | 92 | | multiaddr | multiformat | 0x32 | | 93 | | dns | multiaddr | 0x35 | | 94 | | dns4 | multiaddr | 0x36 | | 95 | | dns6 | multiaddr | 0x37 | | 96 | | dnsaddr | multiaddr | 0x38 | | 97 | | protobuf | serializati | 0x50 | Protocol Buffers | 98 | | | on | | | 99 | | cbor | serializati | 0x51 | CBOR | 100 | | | on | | | 101 | | raw | ipld | 0x55 | raw binary | 102 | | rlp | serializati | 0x60 | recursive length | 103 | | | on | | prefix | 104 | | bencode | serializati | 0x63 | bencode | 105 | | | on | | | 106 | | dag-pb | ipld | 0x70 | MerkleDAG protobuf | 107 | | dag-cbor | ipld | 0x71 | MerkleDAG cbor | 108 | | libp2p-key | ipld | 0x72 | Libp2p Public Key | 109 | 110 | 111 | 112 | Snell, et al. Expires August 27, 2020 [Page 2] 113 | 114 | Internet-Draft Multiformats February 2020 115 | 116 | 117 | | git-raw | ipld | 0x78 | Raw Git object | 118 | | torrent-info | ipld | 0x7b | Torrent file info | 119 | | | | | field (bencoded) | 120 | | torrent-file | ipld | 0x7c | Torrent file | 121 | | | | | (bencoded) | 122 | | leofcoin-block | ipld | 0x81 | Leofcoin Block | 123 | | leofcoin-tx | ipld | 0x82 | Leofcoin | 124 | | | | | Transaction | 125 | | leofcoin-pr | ipld | 0x83 | Leofcoin Peer | 126 | | | | | Reputation | 127 | | sctp | multiaddr | 0x84 | | 128 | | eth-block | ipld | 0x90 | Ethereum Block | 129 | | | | | (RLP) | 130 | | eth-block-list | ipld | 0x91 | Ethereum Block List | 131 | | | | | (RLP) | 132 | | eth-tx-trie | ipld | 0x92 | Ethereum | 133 | | | | | Transaction Trie | 134 | | | | | (Eth-Trie) | 135 | | eth-tx | ipld | 0x93 | Ethereum | 136 | | | | | Transaction (RLP) | 137 | | eth-tx-receipt- | ipld | 0x94 | Ethereum | 138 | | trie | | | Transaction Receipt | 139 | | | | | Trie (Eth-Trie) | 140 | | eth-tx-receipt | ipld | 0x95 | Ethereum | 141 | | | | | Transaction Receipt | 142 | | | | | (RLP) | 143 | | eth-state-trie | ipld | 0x96 | Ethereum State Trie | 144 | | | | | (Eth-Secure-Trie) | 145 | | eth-account- | ipld | 0x97 | Ethereum Account | 146 | | snapshot | | | Snapshot (RLP) | 147 | | eth-storage-trie | ipld | 0x98 | Ethereum Contract | 148 | | | | | Storage Trie (Eth- | 149 | | | | | Secure-Trie) | 150 | | bitcoin-block | ipld | 0xb0 | Bitcoin Block | 151 | | bitcoin-tx | ipld | 0xb1 | Bitcoin Tx | 152 | | zcash-block | ipld | 0xc0 | Zcash Block | 153 | | zcash-tx | ipld | 0xc1 | Zcash Tx | 154 | | stellar-block | ipld | 0xd0 | Stellar Block | 155 | | stellar-tx | ipld | 0xd1 | Stellar Tx | 156 | | decred-block | ipld | 0xe0 | Decred Block | 157 | | decred-tx | ipld | 0xe1 | Decred Tx | 158 | | ipld-ns | namespace | 0xe2 | IPLD path | 159 | | ipfs-ns | namespace | 0xe3 | IPFS path | 160 | | swarm-ns | namespace | 0xe4 | Swarm path | 161 | | ipns-ns | namespace | 0xe5 | IPNS path | 162 | | ed25519-pub | key | 0xed | Ed25519 public key | 163 | | dash-block | ipld | 0xf0 | Dash Block | 164 | | dash-tx | ipld | 0xf1 | Dash Tx | 165 | 166 | 167 | 168 | Snell, et al. Expires August 27, 2020 [Page 3] 169 | 170 | Internet-Draft Multiformats February 2020 171 | 172 | 173 | | swarm-manifest | ipld | 0xfa | Swarm Manifest | 174 | | swarm-feed | ipld | 0xfb | Swarm Feed | 175 | | udp | multiaddr | 0x0111 | | 176 | | p2p-webrtc-star | multiaddr | 0x0113 | | 177 | | p2p-webrtc-direct | multiaddr | 0x0114 | | 178 | | p2p-stardust | multiaddr | 0x0115 | | 179 | | p2p-circuit | multiaddr | 0x0122 | | 180 | | dag-json | ipld | 0x0129 | MerkleDAG json | 181 | | udt | multiaddr | 0x012d | | 182 | | utp | multiaddr | 0x012e | | 183 | | unix | multiaddr | 0x0190 | | 184 | | p2p | multiaddr | 0x01a5 | libp2p | 185 | | ipfs | multiaddr | 0x01a5 | libp2p (deprecated) | 186 | | https | multiaddr | 0x01bb | | 187 | | onion | multiaddr | 0x01bc | | 188 | | onion3 | multiaddr | 0x01bd | | 189 | | garlic64 | multiaddr | 0x01be | I2P base64 (raw | 190 | | | | | public key) | 191 | | garlic32 | multiaddr | 0x01bf | I2P base32 (hashed | 192 | | | | | public key or | 193 | | | | | encoded public key/ | 194 | | | | | checksum+optional | 195 | | | | | secret) | 196 | | quic | multiaddr | 0x01cc | | 197 | | ws | multiaddr | 0x01dd | | 198 | | wss | multiaddr | 0x01de | | 199 | | p2p-websocket-star | multiaddr | 0x01df | | 200 | | http | multiaddr | 0x01e0 | | 201 | | holochain-adr-v0 | holochain | 0x807124 | Holochain v0 | 202 | | | | | address + 8 R-S | 203 | | | | | (63 x Base-32) | 204 | | holochain-adr-v1 | holochain | 0x817124 | Holochain v1 | 205 | | | | | address + 8 R-S | 206 | | | | | (63 x Base-32) | 207 | | holochain-key-v0 | holochain | 0x947124 | Holochain v0 public | 208 | | | | | key + 8 R-S (63 x | 209 | | | | | Base-32) | 210 | | holochain-key-v1 | holochain | 0x957124 | Holochain v1 public | 211 | | | | | key + 8 R-S (63 x | 212 | | | | | Base-32) | 213 | | holochain-sig-v0 | holochain | 0xa27124 | Holochain v0 | 214 | | | | | signature + 8 R-S | 215 | | | | | (63 x Base-32) | 216 | | holochain-sig-v1 | holochain | 0xa37124 | Holochain v1 | 217 | | | | | signature + 8 R-S | 218 | | | | | (63 x Base-32) | 219 | +--------------------+-------------+----------+---------------------+ 220 | 221 | 222 | 223 | 224 | Snell, et al. Expires August 27, 2020 [Page 4] 225 | 226 | Internet-Draft Multiformats February 2020 227 | 228 | 229 | 3. Security Considerations 230 | 231 | TBD 232 | 233 | 4. IANA Considerations 234 | 235 | TBD 236 | 237 | 5. Normative References 238 | 239 | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 240 | Requirement Levels", BCP 14, RFC 2119, 241 | DOI 10.17487/RFC2119, March 1997, 242 | . 243 | 244 | Authors' Addresses 245 | 246 | James M Snell (editor) 247 | NearForm Research 248 | 249 | Email: jasnell@gmail.com 250 | 251 | 252 | Nicola Greco 253 | Protocol Labs 254 | 255 | Email: me@nicola.io 256 | 257 | 258 | Juan Benet 259 | Protocol Labs 260 | 261 | Email: juan@benet.ai 262 | 263 | 264 | David A. Dalrymple 265 | Protocol Labs 266 | 267 | Email: david.dalrymple@protocol.ai 268 | 269 | 270 | David Dias 271 | Protocol Labs 272 | 273 | Email: mail@daviddias.me 274 | 275 | 276 | 277 | 278 | 279 | 280 | Snell, et al. Expires August 27, 2020 [Page 5] 281 | 282 | Internet-Draft Multiformats February 2020 283 | 284 | 285 | Lars Gierth 286 | Protocol Labs 287 | 288 | Email: lars.gierth@gmail.com 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | Snell, et al. Expires August 27, 2020 [Page 6] 337 | -------------------------------------------------------------------------------- /drafts/draft-snell-multicodec-00.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | ]> 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | Additional Multiformat Codec Registrations 16 | 17 | 18 | 22 | NearForm Research 23 |
24 | jasnell@gmail.com 25 |
26 |
27 | 28 | 31 | Protocol Labs 32 |
33 | me@nicola.io 34 |
35 |
36 | 39 | Protocol Labs 40 |
41 | juan@benet.ai 42 |
43 |
44 | 45 | 48 | Protocol Labs 49 |
50 | david.dalrymple@protocol.ai 51 |
52 |
53 | 54 | 57 | Protocol Labs 58 |
59 | mail@daviddias.me 60 |
61 |
62 | 63 | 66 | Protocol Labs 67 |
68 | lars.gierth@gmail.com 69 |
70 |
71 | 72 | 73 | 74 | Applications 75 | Individual Submission 76 | I-D 77 | multicodec 78 | 79 | 80 | 81 | This document defines additional registrations for the 82 | Multiformats Codec Registry. 83 | 84 | 85 | 86 |
87 | 88 | 89 | 90 |
91 | 92 | 93 | TBD 94 | 95 | 96 | 97 | In this document, the key words "MUST", "MUST NOT", "REQUIRED", "SHALL", 98 | "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" 99 | are to be interpreted as described in . 100 | 101 | 102 |
103 | 104 |
105 | 106 | Name 107 | Tag 108 | Code 109 | Description 110 | 111 | ip4 112 | multiaddr 113 | 0x04 114 | 115 | 116 | tcp 117 | multiaddr 118 | 0x06 119 | 120 | 121 | dccp 122 | multiaddr 123 | 0x21 124 | 125 | 126 | ip6 127 | multiaddr 128 | 0x29 129 | 130 | 131 | ip6zone 132 | multiaddr 133 | 0x2a 134 | 135 | 136 | path 137 | namespace 138 | 0x2f 139 | Namespace for string paths. Corresponds to / in ASCII. 140 | 141 | multiaddr 142 | multiformat 143 | 0x32 144 | 145 | 146 | dns 147 | multiaddr 148 | 0x35 149 | 150 | 151 | dns4 152 | multiaddr 153 | 0x36 154 | 155 | 156 | dns6 157 | multiaddr 158 | 0x37 159 | 160 | 161 | dnsaddr 162 | multiaddr 163 | 0x38 164 | 165 | 166 | protobuf 167 | serialization 168 | 0x50 169 | Protocol Buffers 170 | 171 | cbor 172 | serialization 173 | 0x51 174 | CBOR 175 | 176 | raw 177 | ipld 178 | 0x55 179 | raw binary 180 | 181 | rlp 182 | serialization 183 | 0x60 184 | recursive length prefix 185 | 186 | bencode 187 | serialization 188 | 0x63 189 | bencode 190 | 191 | dag-pb 192 | ipld 193 | 0x70 194 | MerkleDAG protobuf 195 | 196 | dag-cbor 197 | ipld 198 | 0x71 199 | MerkleDAG cbor 200 | 201 | libp2p-key 202 | ipld 203 | 0x72 204 | Libp2p Public Key 205 | 206 | git-raw 207 | ipld 208 | 0x78 209 | Raw Git object 210 | 211 | torrent-info 212 | ipld 213 | 0x7b 214 | Torrent file info field (bencoded) 215 | 216 | torrent-file 217 | ipld 218 | 0x7c 219 | Torrent file (bencoded) 220 | 221 | leofcoin-block 222 | ipld 223 | 0x81 224 | Leofcoin Block 225 | 226 | leofcoin-tx 227 | ipld 228 | 0x82 229 | Leofcoin Transaction 230 | 231 | leofcoin-pr 232 | ipld 233 | 0x83 234 | Leofcoin Peer Reputation 235 | 236 | sctp 237 | multiaddr 238 | 0x84 239 | 240 | 241 | eth-block 242 | ipld 243 | 0x90 244 | Ethereum Block (RLP) 245 | 246 | eth-block-list 247 | ipld 248 | 0x91 249 | Ethereum Block List (RLP) 250 | 251 | eth-tx-trie 252 | ipld 253 | 0x92 254 | Ethereum Transaction Trie (Eth-Trie) 255 | 256 | eth-tx 257 | ipld 258 | 0x93 259 | Ethereum Transaction (RLP) 260 | 261 | eth-tx-receipt-trie 262 | ipld 263 | 0x94 264 | Ethereum Transaction Receipt Trie (Eth-Trie) 265 | 266 | eth-tx-receipt 267 | ipld 268 | 0x95 269 | Ethereum Transaction Receipt (RLP) 270 | 271 | eth-state-trie 272 | ipld 273 | 0x96 274 | Ethereum State Trie (Eth-Secure-Trie) 275 | 276 | eth-account-snapshot 277 | ipld 278 | 0x97 279 | Ethereum Account Snapshot (RLP) 280 | 281 | eth-storage-trie 282 | ipld 283 | 0x98 284 | Ethereum Contract Storage Trie (Eth-Secure-Trie) 285 | 286 | bitcoin-block 287 | ipld 288 | 0xb0 289 | Bitcoin Block 290 | 291 | bitcoin-tx 292 | ipld 293 | 0xb1 294 | Bitcoin Tx 295 | 296 | zcash-block 297 | ipld 298 | 0xc0 299 | Zcash Block 300 | 301 | zcash-tx 302 | ipld 303 | 0xc1 304 | Zcash Tx 305 | 306 | stellar-block 307 | ipld 308 | 0xd0 309 | Stellar Block 310 | 311 | stellar-tx 312 | ipld 313 | 0xd1 314 | Stellar Tx 315 | 316 | decred-block 317 | ipld 318 | 0xe0 319 | Decred Block 320 | 321 | decred-tx 322 | ipld 323 | 0xe1 324 | Decred Tx 325 | 326 | ipld-ns 327 | namespace 328 | 0xe2 329 | IPLD path 330 | 331 | ipfs-ns 332 | namespace 333 | 0xe3 334 | IPFS path 335 | 336 | swarm-ns 337 | namespace 338 | 0xe4 339 | Swarm path 340 | 341 | ipns-ns 342 | namespace 343 | 0xe5 344 | IPNS path 345 | 346 | ed25519-pub 347 | key 348 | 0xed 349 | Ed25519 public key 350 | 351 | dash-block 352 | ipld 353 | 0xf0 354 | Dash Block 355 | 356 | dash-tx 357 | ipld 358 | 0xf1 359 | Dash Tx 360 | 361 | swarm-manifest 362 | ipld 363 | 0xfa 364 | Swarm Manifest 365 | 366 | swarm-feed 367 | ipld 368 | 0xfb 369 | Swarm Feed 370 | 371 | udp 372 | multiaddr 373 | 0x0111 374 | 375 | 376 | p2p-webrtc-star 377 | multiaddr 378 | 0x0113 379 | 380 | 381 | p2p-webrtc-direct 382 | multiaddr 383 | 0x0114 384 | 385 | 386 | p2p-stardust 387 | multiaddr 388 | 0x0115 389 | 390 | 391 | p2p-circuit 392 | multiaddr 393 | 0x0122 394 | 395 | 396 | dag-json 397 | ipld 398 | 0x0129 399 | MerkleDAG json 400 | 401 | udt 402 | multiaddr 403 | 0x012d 404 | 405 | 406 | utp 407 | multiaddr 408 | 0x012e 409 | 410 | 411 | unix 412 | multiaddr 413 | 0x0190 414 | 415 | 416 | p2p 417 | multiaddr 418 | 0x01a5 419 | libp2p 420 | 421 | ipfs 422 | multiaddr 423 | 0x01a5 424 | libp2p (deprecated) 425 | 426 | https 427 | multiaddr 428 | 0x01bb 429 | 430 | 431 | onion 432 | multiaddr 433 | 0x01bc 434 | 435 | 436 | onion3 437 | multiaddr 438 | 0x01bd 439 | 440 | 441 | garlic64 442 | multiaddr 443 | 0x01be 444 | I2P base64 (raw public key) 445 | 446 | garlic32 447 | multiaddr 448 | 0x01bf 449 | I2P base32 (hashed public key or encoded public key/checksum+optional secret) 450 | 451 | quic 452 | multiaddr 453 | 0x01cc 454 | 455 | 456 | ws 457 | multiaddr 458 | 0x01dd 459 | 460 | 461 | wss 462 | multiaddr 463 | 0x01de 464 | 465 | 466 | p2p-websocket-star 467 | multiaddr 468 | 0x01df 469 | 470 | 471 | http 472 | multiaddr 473 | 0x01e0 474 | 475 | 476 | holochain-adr-v0 477 | holochain 478 | 0x807124 479 | Holochain v0 address + 8 R-S (63 x Base-32) 480 | 481 | holochain-adr-v1 482 | holochain 483 | 0x817124 484 | Holochain v1 address + 8 R-S (63 x Base-32) 485 | 486 | holochain-key-v0 487 | holochain 488 | 0x947124 489 | Holochain v0 public key + 8 R-S (63 x Base-32) 490 | 491 | holochain-key-v1 492 | holochain 493 | 0x957124 494 | Holochain v1 public key + 8 R-S (63 x Base-32) 495 | 496 | holochain-sig-v0 497 | holochain 498 | 0xa27124 499 | Holochain v0 signature + 8 R-S (63 x Base-32) 500 | 501 | holochain-sig-v1 502 | holochain 503 | 0xa37124 504 | Holochain v1 signature + 8 R-S (63 x Base-32) 505 | 506 |
507 | 508 |
509 | TBD 510 |
511 | 512 |
513 | TBD 514 |
515 |
516 | 517 | 518 | &rfc2119; 519 | 520 | 521 |
522 | -------------------------------------------------------------------------------- /drafts/draft-snell-multihash-00.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Individual Submission J. Snell, Ed. 6 | Internet-Draft NearForm Research 7 | Intended status: Standards Track N. Greco 8 | Expires: August 27, 2020 J. Benet 9 | D. Dalrymple 10 | D. Dias 11 | L. Gierth 12 | Protocol Labs 13 | February 24, 2020 14 | 15 | 16 | Multiformats 17 | draft-snell-multihash-00 18 | 19 | Abstract 20 | 21 | Defines Multiformats, a collection of data formats that aim to 22 | future-proof systems by adding self-description to format values; and 23 | defines the Multihash and Multibase Multiformat data formats. 24 | 25 | Status of This Memo 26 | 27 | This Internet-Draft is submitted to IETF in full conformance with the 28 | provisions of BCP 78 and BCP 79. 29 | 30 | Internet-Drafts are working documents of the Internet Engineering 31 | Task Force (IETF). Note that other groups may also distribute 32 | working documents as Internet-Drafts. The list of current Internet- 33 | Drafts is at https://datatracker.ietf.org/drafts/current/. 34 | 35 | Internet-Drafts are draft documents valid for a maximum of six months 36 | and may be updated, replaced, or obsoleted by other documents at any 37 | time. It is inappropriate to use Internet-Drafts as reference 38 | material or to cite them other than as "work in progress." 39 | 40 | This Internet-Draft will expire on August 27, 2020. 41 | 42 | Copyright Notice 43 | 44 | Copyright (c) 2020 IETF Trust and the persons identified as the 45 | document authors. All rights reserved. 46 | 47 | This document is subject to BCP 78 and the IETF Trust's Legal 48 | Provisions Relating to IETF Documents 49 | (https://trustee.ietf.org/license-info) in effect on the date of 50 | publication of this document. Please review these documents 51 | carefully, as they describe your rights and restrictions with respect 52 | to this document. 53 | 54 | 55 | 56 | Snell, et al. Expires August 27, 2020 [Page 1] 57 | 58 | Internet-Draft Multiformats February 2020 59 | 60 | 61 | Table of Contents 62 | 63 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 64 | 2. Unsigned Variable Length Integer . . . . . . . . . . . . . . 3 65 | 2.1. ABNF Definition . . . . . . . . . . . . . . . . . . . . . 4 66 | 3. Multibase . . . . . . . . . . . . . . . . . . . . . . . . . . 4 67 | 3.1. Examples . . . . . . . . . . . . . . . . . . . . . . . . 4 68 | 3.2. Multibase ABNF . . . . . . . . . . . . . . . . . . . . . 4 69 | 4. Multihash . . . . . . . . . . . . . . . . . . . . . . . . . . 5 70 | 4.1. Example Multihashes . . . . . . . . . . . . . . . . . . . 5 71 | 4.2. Multihash ABNF . . . . . . . . . . . . . . . . . . . . . 5 72 | 5. Security Considerations . . . . . . . . . . . . . . . . . . . 5 73 | 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 6 74 | 6.1. The Codec Registry . . . . . . . . . . . . . . . . . . . 6 75 | 6.1.1. Codec Registration . . . . . . . . . . . . . . . . . 6 76 | 6.1.2. Initial Contents . . . . . . . . . . . . . . . . . . 7 77 | 6.2. The Multibase Registry . . . . . . . . . . . . . . . . . 15 78 | 6.2.1. Base-Encoding Registration . . . . . . . . . . . . . 15 79 | 6.2.2. Initial Contents . . . . . . . . . . . . . . . . . . 16 80 | 7. Normative References . . . . . . . . . . . . . . . . . . . . 17 81 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 18 82 | 83 | 1. Introduction 84 | 85 | Multiformats are a collection of data formats that aim to future- 86 | proof systems by adding self-description to format values; allowing 87 | interoperability and protocol agility while avoiding lock in. 88 | 89 | The self-describing aspects of the Multiformat values have a few 90 | stipulations: 91 | 92 | o They MUST be in-band (encoded within and carried with the value). 93 | 94 | o They MUST avoid lock-in and promote extensibility. 95 | 96 | o They MUST be compact and have a binary-packed representation. 97 | 98 | o They MUST have a human-readable representation. 99 | 100 | This specification defines the Multihash and Multibase formats. 101 | 102 | This specification also defines extensible registries for codec and 103 | base-encoding identifiers. 104 | 105 | New Multiformat data formats SHOULD be registered within the Codec 106 | Registry using the "multiformat" type identifier. 107 | 108 | 109 | 110 | 111 | 112 | Snell, et al. Expires August 27, 2020 [Page 2] 113 | 114 | Internet-Draft Multiformats February 2020 115 | 116 | 117 | In this document, the key words "MUST", "MUST NOT", "REQUIRED", 118 | "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", 119 | and "OPTIONAL" are to be interpreted as described in [RFC2119]. 120 | 121 | This specification uses the Augmented Backus-Naur Form (ABNF) 122 | notation of [RFC5234] 123 | 124 | 2. Unsigned Variable Length Integer 125 | 126 | The various Multiformats defined in this specification make use of 127 | the Unsigned Variable Length Integer encoding defined in Appendix C 128 | of the [LEB128] standard. 129 | 130 | As suggested by the name, this variable length encoding is only 131 | capable of representing unsigned integers. Further, while there is 132 | no theoretical maximum integer value that can be represented by the 133 | format, implementations MUST NOT encode more than nine (9) bytes 134 | giving a practical limit of integers in a range between 0 and 2^63 - 135 | 1. 136 | 137 | Specific Multiformats using the Unsigned Variable Length Integer 138 | encoding MAY explicitly declare a more restricted range of encoded 139 | values but MUST NOT require values greater than 2^63 - 1. 140 | 141 | All integer values between 0 and 127 are encoded as a single byte 142 | that is identical to the input. That is, the value 1 is encoded as 143 | 00000001, and the value 127 is encoded as 01111111. 144 | 145 | Values greater than 127 require two or more bytes as illustrated in 146 | the examples below. 147 | 148 | Numbers MUST be encoded using the least number of bytes possible. 149 | 150 | +---------+----------------------------+ 151 | | Integer | Encoding | 152 | +---------+----------------------------+ 153 | | 1 | 00000001 | 154 | | 127 | 01111111 | 155 | | 128 | 10000000 00000001 | 156 | | 255 | 11111111 00000001 | 157 | | 300 | 10101100 00000010 | 158 | | 16384 | 10000000 10000000 00000001 | 159 | +---------+----------------------------+ 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | Snell, et al. Expires August 27, 2020 [Page 3] 169 | 170 | Internet-Draft Multiformats February 2020 171 | 172 | 173 | 2.1. ABNF Definition 174 | 175 | Specifications signal use of the Unsigned Variable Length Encoded 176 | Integer format by referencing the unsigned-varint ABNF grammar rule 177 | defined below. 178 | 179 | varint-terminator = %x00-7f 180 | varint-continuation = %x80-ff 181 | unsigned-varint = *8varint-continuation varint-terminator 182 | 183 | 3. Multibase 184 | 185 | Multibase is a format for differentiating outputs from various well- 186 | established text base-encoding algorithms. 187 | 188 | A Multibase consists simply of a single prefix character that 189 | identifies the base-encoding of the remaining characters. All valid 190 | Multibase prefix characters are registered in The Multibase Registry. 191 | 192 | The prefix character for each base are selected such that they are 193 | included in the alphabets of the base they represent. For example, 194 | "f" is the base code for base16 (hex) because "f" is in hex's 16 195 | character alphabet. 196 | 197 | 3.1. Examples 198 | 199 | Given the sample text, "Multibase is awesome! \o/", the following 200 | example Multibase encodings may be generated. 201 | 202 | +------------+-----------------------------------------------------+ 203 | | Base | Multibase | 204 | +------------+-----------------------------------------------------+ 205 | | 16 (upper) | F4D756C74696261736520697320617765736F6D6521205C6F2F | 206 | | 16 (lower) | f4d756c74696261736520697320617765736f6d6521205c6f2f | 207 | | 32 | BJV2WY5DJMJQXGZJANFZSAYLXMVZW63LFEEQFY3ZP | 208 | | 58 | zYAjKoNbau5KiqmHPmSxYCvn66dA1vLmwbt | 209 | | 64 | MTXVsdGliYXNlIGlzIGF3ZXNvbWUhIFxvLw== | 210 | +------------+-----------------------------------------------------+ 211 | 212 | 3.2. Multibase ABNF 213 | 214 | ABNF 215 | 216 | base-identifier = 217 | multibase = base-identifier {base-encoded-data} 218 | 219 | 220 | 221 | 222 | 223 | 224 | Snell, et al. Expires August 27, 2020 [Page 4] 225 | 226 | Internet-Draft Multiformats February 2020 227 | 228 | 229 | 4. Multihash 230 | 231 | Multihash is a format for differentiating outputs from various well- 232 | established cryptographic hash functions while adressing output 233 | length and encoding considerations. 234 | 235 | Multihash values encode the hash function output prefixed by an id 236 | identifying the hash function encoded as an unsigned variable length 237 | integer, and the length of the hash function output encoded as an 238 | unsigned variable length integer. All valid Multihash function 239 | identifiers are registered in the Codec Registry. 240 | 241 | Multihash values are byte sequences that MAY be encoded in multiple 242 | base-encodings including hex, base64, base32, or others. When 243 | representing a Multihash using a base-encoding, the Multibase format 244 | SHOULD be used. 245 | 246 | 4.1. Example Multihashes 247 | 248 | Given the sample text "multihash", the following example Multihash 249 | values may be generated: 250 | 251 | +--------+-----+----------------------------------------------------+ 252 | | Functi | ID | Multihash (Multibase/Base16) | 253 | | on | | | 254 | +--------+-----+----------------------------------------------------+ 255 | | sha1 | 0x1 | f111488c2f11fb2ce392acb5b2986e640211c4690073e | 256 | | | 1 | | 257 | | sha2-2 | 0x1 | f12209cbc07c3f991725836a3aa2a581ca2029198aa420b9d9 | 258 | | 56 | 2 | 9bc0e131d9f3e2cbe47 | 259 | +--------+-----+----------------------------------------------------+ 260 | 261 | 4.2. Multihash ABNF 262 | 263 | Multihash 264 | 265 | hash-function-code = unsigned-varint 266 | hash-digest-size = unsigned-varint 267 | hash = {hash function output} 268 | 269 | multihash = hash-function-code hash-digest-size hash 270 | 271 | 5. Security Considerations 272 | 273 | There are no additional security considerations introduced by the use 274 | of Multiformat data formats. Note, however, that various hash 275 | functions that may be used with multiformats may be vulnerable to 276 | 277 | 278 | 279 | 280 | Snell, et al. Expires August 27, 2020 [Page 5] 281 | 282 | Internet-Draft Multiformats February 2020 283 | 284 | 285 | various known security issues and limitations (e.g. sha1) and thus 286 | SHOULD be avoided. 287 | 288 | 6. IANA Considerations 289 | 290 | 6.1. The Codec Registry 291 | 292 | 6.1.1. Codec Registration 293 | 294 | Codec identifiers can be registered using the procedure described 295 | herein. 296 | 297 | Codecs are registered using the Expert Review policy (see Section 4.5 298 | of [RFC8126]). The goal of the registry is to reflect common use of 299 | codecs on the Internet. Therefore, the expert(s) should be strongly 300 | biased towards approving registrations, unless they are abusive, 301 | frivolous, not likely to be used on the Internet, or actively harmful 302 | to the Internet and/or the Web (not merely aesthetically displeasing 303 | or architecturally dubious). Expert(s) can withhold registration of 304 | codecs that are too general for the proposal application. 305 | 306 | Expert(s) will clearly identify any issues that cause a registration 307 | to be refused. Advice about the semantics of a proposed codec can be 308 | given, but if it does not block registration, this should be 309 | explicitly stated. 310 | 311 | When a request if approved, the expert(s) shall inform IANA, and the 312 | regstration will be processed. The IESG is the final arbiter of any 313 | objection. 314 | 315 | The Codec Registry is located at https://www.iana.org/assignments/ 316 | multiformat-codecs. Registration requests can be made by following 317 | instructions located there or by sending an email to the multiformat- 318 | codecs@ietf.org mailing list. 319 | 320 | Registration requests consist of at least the following information: 321 | 322 | o *Codec Name*: The name of codec 323 | 324 | o *Type*: The type of applicable multiformat 325 | 326 | o *Code*: The requested identity code 327 | 328 | o *Description*: An optional short text description of the codec. 329 | 330 | o *Reference*: A reference to the document that specifies the codec, 331 | preferably including a URI that can be used to retrieve a copy of 332 | 333 | 334 | 335 | 336 | Snell, et al. Expires August 27, 2020 [Page 6] 337 | 338 | Internet-Draft Multiformats February 2020 339 | 340 | 341 | the document. An indication of the relevant section(s) can also 342 | be included but is not required. 343 | 344 | Multiformat data formats themselves MAY be registered within The 345 | Codec Registry using a Type field value of "multiformat". For all 346 | other registrations, the Type field MUST refer to an entry in The 347 | Codec Registry whose Type is "multiformat". 348 | 349 | The expert(s) can define additional fields to be collected in the 350 | registry. 351 | 352 | Registrations SHOULD reference a freely available, stable 353 | specification. 354 | 355 | Note that codecs can be registered by third parties (including the 356 | expert(s)), if the expert(s) determine that an unregistered codec is 357 | widely deployed and not likely to be registered in a timely manner 358 | otherwise. Such registrations still are subject to the requirements 359 | defined. 360 | 361 | 6.1.2. Initial Contents 362 | 363 | The initial contents of the Codec Registry include: 364 | 365 | +----------------+-------------+--------+---------------------------+ 366 | | Name | Type | Code | Description | 367 | +----------------+-------------+--------+---------------------------+ 368 | | identity | multihash | 0x00 | raw binary | 369 | | sha1 | multihash | 0x11 | | 370 | | sha2-256 | multihash | 0x12 | | 371 | | sha2-512 | multihash | 0x13 | | 372 | | sha3-512 | multihash | 0x14 | | 373 | | sha3-384 | multihash | 0x15 | | 374 | | sha3-256 | multihash | 0x16 | | 375 | | sha3-224 | multihash | 0x17 | | 376 | | shake-128 | multihash | 0x18 | | 377 | | shake-256 | multihash | 0x19 | | 378 | | keccak-224 | multihash | 0x1a | keccak has variable | 379 | | | | | output length. The number | 380 | | | | | specifies the core length | 381 | | keccak-256 | multihash | 0x1b | | 382 | | keccak-384 | multihash | 0x1c | | 383 | | keccak-512 | multihash | 0x1d | | 384 | | murmur3-128 | multihash | 0x22 | | 385 | | murmur3-32 | multihash | 0x23 | | 386 | | multicodec | multiformat | 0x30 | | 387 | | multihash | multiformat | 0x31 | | 388 | | multibase | multiformat | 0x33 | | 389 | 390 | 391 | 392 | Snell, et al. Expires August 27, 2020 [Page 7] 393 | 394 | Internet-Draft Multiformats February 2020 395 | 396 | 397 | | dbl-sha2-256 | multihash | 0x56 | | 398 | | md4 | multihash | 0xd4 | | 399 | | md5 | multihash | 0xd5 | | 400 | | bmt | multihash | 0xd6 | Binary Merkle Tree Hash | 401 | | x11 | multihash | 0x1100 | | 402 | | blake2b-8 | multihash | 0xb201 | Blake2b consists of 64 | 403 | | | | | output lengths that give | 404 | | | | | different hashes | 405 | | blake2b-16 | multihash | 0xb202 | | 406 | | blake2b-24 | multihash | 0xb203 | | 407 | | blake2b-32 | multihash | 0xb204 | | 408 | | blake2b-40 | multihash | 0xb205 | | 409 | | blake2b-48 | multihash | 0xb206 | | 410 | | blake2b-56 | multihash | 0xb207 | | 411 | | blake2b-64 | multihash | 0xb208 | | 412 | | blake2b-72 | multihash | 0xb209 | | 413 | | blake2b-80 | multihash | 0xb20a | | 414 | | blake2b-88 | multihash | 0xb20b | | 415 | | blake2b-96 | multihash | 0xb20c | | 416 | | blake2b-104 | multihash | 0xb20d | | 417 | | blake2b-112 | multihash | 0xb20e | | 418 | | blake2b-120 | multihash | 0xb20f | | 419 | | blake2b-128 | multihash | 0xb210 | | 420 | | blake2b-136 | multihash | 0xb211 | | 421 | | blake2b-144 | multihash | 0xb212 | | 422 | | blake2b-152 | multihash | 0xb213 | | 423 | | blake2b-160 | multihash | 0xb214 | | 424 | | blake2b-168 | multihash | 0xb215 | | 425 | | blake2b-176 | multihash | 0xb216 | | 426 | | blake2b-184 | multihash | 0xb217 | | 427 | | blake2b-192 | multihash | 0xb218 | | 428 | | blake2b-200 | multihash | 0xb219 | | 429 | | blake2b-208 | multihash | 0xb21a | | 430 | | blake2b-216 | multihash | 0xb21b | | 431 | | blake2b-224 | multihash | 0xb21c | | 432 | | blake2b-232 | multihash | 0xb21d | | 433 | | blake2b-240 | multihash | 0xb21e | | 434 | | blake2b-248 | multihash | 0xb21f | | 435 | | blake2b-256 | multihash | 0xb220 | | 436 | | blake2b-264 | multihash | 0xb221 | | 437 | | blake2b-272 | multihash | 0xb222 | | 438 | | blake2b-280 | multihash | 0xb223 | | 439 | | blake2b-288 | multihash | 0xb224 | | 440 | | blake2b-296 | multihash | 0xb225 | | 441 | | blake2b-304 | multihash | 0xb226 | | 442 | | blake2b-312 | multihash | 0xb227 | | 443 | | blake2b-320 | multihash | 0xb228 | | 444 | | blake2b-328 | multihash | 0xb229 | | 445 | 446 | 447 | 448 | Snell, et al. Expires August 27, 2020 [Page 8] 449 | 450 | Internet-Draft Multiformats February 2020 451 | 452 | 453 | | blake2b-336 | multihash | 0xb22a | | 454 | | blake2b-344 | multihash | 0xb22b | | 455 | | blake2b-352 | multihash | 0xb22c | | 456 | | blake2b-360 | multihash | 0xb22d | | 457 | | blake2b-368 | multihash | 0xb22e | | 458 | | blake2b-376 | multihash | 0xb22f | | 459 | | blake2b-384 | multihash | 0xb230 | | 460 | | blake2b-392 | multihash | 0xb231 | | 461 | | blake2b-400 | multihash | 0xb232 | | 462 | | blake2b-408 | multihash | 0xb233 | | 463 | | blake2b-416 | multihash | 0xb234 | | 464 | | blake2b-424 | multihash | 0xb235 | | 465 | | blake2b-432 | multihash | 0xb236 | | 466 | | blake2b-440 | multihash | 0xb237 | | 467 | | blake2b-448 | multihash | 0xb238 | | 468 | | blake2b-456 | multihash | 0xb239 | | 469 | | blake2b-464 | multihash | 0xb23a | | 470 | | blake2b-472 | multihash | 0xb23b | | 471 | | blake2b-480 | multihash | 0xb23c | | 472 | | blake2b-488 | multihash | 0xb23d | | 473 | | blake2b-496 | multihash | 0xb23e | | 474 | | blake2b-504 | multihash | 0xb23f | | 475 | | blake2b-512 | multihash | 0xb240 | | 476 | | blake2s-8 | multihash | 0xb241 | Blake2s consists of 32 | 477 | | | | | output lengths that give | 478 | | | | | different hashes | 479 | | blake2s-16 | multihash | 0xb242 | | 480 | | blake2s-24 | multihash | 0xb243 | | 481 | | blake2s-32 | multihash | 0xb244 | | 482 | | blake2s-40 | multihash | 0xb245 | | 483 | | blake2s-48 | multihash | 0xb246 | | 484 | | blake2s-56 | multihash | 0xb247 | | 485 | | blake2s-64 | multihash | 0xb248 | | 486 | | blake2s-72 | multihash | 0xb249 | | 487 | | blake2s-80 | multihash | 0xb24a | | 488 | | blake2s-88 | multihash | 0xb24b | | 489 | | blake2s-96 | multihash | 0xb24c | | 490 | | blake2s-104 | multihash | 0xb24d | | 491 | | blake2s-112 | multihash | 0xb24e | | 492 | | blake2s-120 | multihash | 0xb24f | | 493 | | blake2s-128 | multihash | 0xb250 | | 494 | | blake2s-136 | multihash | 0xb251 | | 495 | | blake2s-144 | multihash | 0xb252 | | 496 | | blake2s-152 | multihash | 0xb253 | | 497 | | blake2s-160 | multihash | 0xb254 | | 498 | | blake2s-168 | multihash | 0xb255 | | 499 | | blake2s-176 | multihash | 0xb256 | | 500 | | blake2s-184 | multihash | 0xb257 | | 501 | 502 | 503 | 504 | Snell, et al. Expires August 27, 2020 [Page 9] 505 | 506 | Internet-Draft Multiformats February 2020 507 | 508 | 509 | | blake2s-192 | multihash | 0xb258 | | 510 | | blake2s-200 | multihash | 0xb259 | | 511 | | blake2s-208 | multihash | 0xb25a | | 512 | | blake2s-216 | multihash | 0xb25b | | 513 | | blake2s-224 | multihash | 0xb25c | | 514 | | blake2s-232 | multihash | 0xb25d | | 515 | | blake2s-240 | multihash | 0xb25e | | 516 | | blake2s-248 | multihash | 0xb25f | | 517 | | blake2s-256 | multihash | 0xb260 | | 518 | | skein256-8 | multihash | 0xb301 | Skein256 consists of 32 | 519 | | | | | output lengths that give | 520 | | | | | different hashes | 521 | | skein256-16 | multihash | 0xb302 | | 522 | | skein256-24 | multihash | 0xb303 | | 523 | | skein256-32 | multihash | 0xb304 | | 524 | | skein256-40 | multihash | 0xb305 | | 525 | | skein256-48 | multihash | 0xb306 | | 526 | | skein256-56 | multihash | 0xb307 | | 527 | | skein256-64 | multihash | 0xb308 | | 528 | | skein256-72 | multihash | 0xb309 | | 529 | | skein256-80 | multihash | 0xb30a | | 530 | | skein256-88 | multihash | 0xb30b | | 531 | | skein256-96 | multihash | 0xb30c | | 532 | | skein256-104 | multihash | 0xb30d | | 533 | | skein256-112 | multihash | 0xb30e | | 534 | | skein256-120 | multihash | 0xb30f | | 535 | | skein256-128 | multihash | 0xb310 | | 536 | | skein256-136 | multihash | 0xb311 | | 537 | | skein256-144 | multihash | 0xb312 | | 538 | | skein256-152 | multihash | 0xb313 | | 539 | | skein256-160 | multihash | 0xb314 | | 540 | | skein256-168 | multihash | 0xb315 | | 541 | | skein256-176 | multihash | 0xb316 | | 542 | | skein256-184 | multihash | 0xb317 | | 543 | | skein256-192 | multihash | 0xb318 | | 544 | | skein256-200 | multihash | 0xb319 | | 545 | | skein256-208 | multihash | 0xb31a | | 546 | | skein256-216 | multihash | 0xb31b | | 547 | | skein256-224 | multihash | 0xb31c | | 548 | | skein256-232 | multihash | 0xb31d | | 549 | | skein256-240 | multihash | 0xb31e | | 550 | | skein256-248 | multihash | 0xb31f | | 551 | | skein256-256 | multihash | 0xb320 | | 552 | | skein512-8 | multihash | 0xb321 | Skein512 consists of 64 | 553 | | | | | output lengths that give | 554 | | | | | different hashes | 555 | | skein512-16 | multihash | 0xb322 | | 556 | | skein512-24 | multihash | 0xb323 | | 557 | 558 | 559 | 560 | Snell, et al. Expires August 27, 2020 [Page 10] 561 | 562 | Internet-Draft Multiformats February 2020 563 | 564 | 565 | | skein512-32 | multihash | 0xb324 | | 566 | | skein512-40 | multihash | 0xb325 | | 567 | | skein512-48 | multihash | 0xb326 | | 568 | | skein512-56 | multihash | 0xb327 | | 569 | | skein512-64 | multihash | 0xb328 | | 570 | | skein512-72 | multihash | 0xb329 | | 571 | | skein512-80 | multihash | 0xb32a | | 572 | | skein512-88 | multihash | 0xb32b | | 573 | | skein512-96 | multihash | 0xb32c | | 574 | | skein512-104 | multihash | 0xb32d | | 575 | | skein512-112 | multihash | 0xb32e | | 576 | | skein512-120 | multihash | 0xb32f | | 577 | | skein512-128 | multihash | 0xb330 | | 578 | | skein512-136 | multihash | 0xb331 | | 579 | | skein512-144 | multihash | 0xb332 | | 580 | | skein512-152 | multihash | 0xb333 | | 581 | | skein512-160 | multihash | 0xb334 | | 582 | | skein512-168 | multihash | 0xb335 | | 583 | | skein512-176 | multihash | 0xb336 | | 584 | | skein512-184 | multihash | 0xb337 | | 585 | | skein512-192 | multihash | 0xb338 | | 586 | | skein512-200 | multihash | 0xb339 | | 587 | | skein512-208 | multihash | 0xb33a | | 588 | | skein512-216 | multihash | 0xb33b | | 589 | | skein512-224 | multihash | 0xb33c | | 590 | | skein512-232 | multihash | 0xb33d | | 591 | | skein512-240 | multihash | 0xb33e | | 592 | | skein512-248 | multihash | 0xb33f | | 593 | | skein512-256 | multihash | 0xb340 | | 594 | | skein512-264 | multihash | 0xb341 | | 595 | | skein512-272 | multihash | 0xb342 | | 596 | | skein512-280 | multihash | 0xb343 | | 597 | | skein512-288 | multihash | 0xb344 | | 598 | | skein512-296 | multihash | 0xb345 | | 599 | | skein512-304 | multihash | 0xb346 | | 600 | | skein512-312 | multihash | 0xb347 | | 601 | | skein512-320 | multihash | 0xb348 | | 602 | | skein512-328 | multihash | 0xb349 | | 603 | | skein512-336 | multihash | 0xb34a | | 604 | | skein512-344 | multihash | 0xb34b | | 605 | | skein512-352 | multihash | 0xb34c | | 606 | | skein512-360 | multihash | 0xb34d | | 607 | | skein512-368 | multihash | 0xb34e | | 608 | | skein512-376 | multihash | 0xb34f | | 609 | | skein512-384 | multihash | 0xb350 | | 610 | | skein512-392 | multihash | 0xb351 | | 611 | | skein512-400 | multihash | 0xb352 | | 612 | | skein512-408 | multihash | 0xb353 | | 613 | 614 | 615 | 616 | Snell, et al. Expires August 27, 2020 [Page 11] 617 | 618 | Internet-Draft Multiformats February 2020 619 | 620 | 621 | | skein512-416 | multihash | 0xb354 | | 622 | | skein512-424 | multihash | 0xb355 | | 623 | | skein512-432 | multihash | 0xb356 | | 624 | | skein512-440 | multihash | 0xb357 | | 625 | | skein512-448 | multihash | 0xb358 | | 626 | | skein512-456 | multihash | 0xb359 | | 627 | | skein512-464 | multihash | 0xb35a | | 628 | | skein512-472 | multihash | 0xb35b | | 629 | | skein512-480 | multihash | 0xb35c | | 630 | | skein512-488 | multihash | 0xb35d | | 631 | | skein512-496 | multihash | 0xb35e | | 632 | | skein512-504 | multihash | 0xb35f | | 633 | | skein512-512 | multihash | 0xb360 | | 634 | | skein1024-8 | multihash | 0xb361 | Skein1024 consists of 128 | 635 | | | | | output lengths that give | 636 | | | | | different hashes | 637 | | skein1024-16 | multihash | 0xb362 | | 638 | | skein1024-24 | multihash | 0xb363 | | 639 | | skein1024-32 | multihash | 0xb364 | | 640 | | skein1024-40 | multihash | 0xb365 | | 641 | | skein1024-48 | multihash | 0xb366 | | 642 | | skein1024-56 | multihash | 0xb367 | | 643 | | skein1024-64 | multihash | 0xb368 | | 644 | | skein1024-72 | multihash | 0xb369 | | 645 | | skein1024-80 | multihash | 0xb36a | | 646 | | skein1024-88 | multihash | 0xb36b | | 647 | | skein1024-96 | multihash | 0xb36c | | 648 | | skein1024-104 | multihash | 0xb36d | | 649 | | skein1024-112 | multihash | 0xb36e | | 650 | | skein1024-120 | multihash | 0xb36f | | 651 | | skein1024-128 | multihash | 0xb370 | | 652 | | skein1024-136 | multihash | 0xb371 | | 653 | | skein1024-144 | multihash | 0xb372 | | 654 | | skein1024-152 | multihash | 0xb373 | | 655 | | skein1024-160 | multihash | 0xb374 | | 656 | | skein1024-168 | multihash | 0xb375 | | 657 | | skein1024-176 | multihash | 0xb376 | | 658 | | skein1024-184 | multihash | 0xb377 | | 659 | | skein1024-192 | multihash | 0xb378 | | 660 | | skein1024-200 | multihash | 0xb379 | | 661 | | skein1024-208 | multihash | 0xb37a | | 662 | | skein1024-216 | multihash | 0xb37b | | 663 | | skein1024-224 | multihash | 0xb37c | | 664 | | skein1024-232 | multihash | 0xb37d | | 665 | | skein1024-240 | multihash | 0xb37e | | 666 | | skein1024-248 | multihash | 0xb37f | | 667 | | skein1024-256 | multihash | 0xb380 | | 668 | | skein1024-264 | multihash | 0xb381 | | 669 | 670 | 671 | 672 | Snell, et al. Expires August 27, 2020 [Page 12] 673 | 674 | Internet-Draft Multiformats February 2020 675 | 676 | 677 | | skein1024-272 | multihash | 0xb382 | | 678 | | skein1024-280 | multihash | 0xb383 | | 679 | | skein1024-288 | multihash | 0xb384 | | 680 | | skein1024-296 | multihash | 0xb385 | | 681 | | skein1024-304 | multihash | 0xb386 | | 682 | | skein1024-312 | multihash | 0xb387 | | 683 | | skein1024-320 | multihash | 0xb388 | | 684 | | skein1024-328 | multihash | 0xb389 | | 685 | | skein1024-336 | multihash | 0xb38a | | 686 | | skein1024-344 | multihash | 0xb38b | | 687 | | skein1024-352 | multihash | 0xb38c | | 688 | | skein1024-360 | multihash | 0xb38d | | 689 | | skein1024-368 | multihash | 0xb38e | | 690 | | skein1024-376 | multihash | 0xb38f | | 691 | | skein1024-384 | multihash | 0xb390 | | 692 | | skein1024-392 | multihash | 0xb391 | | 693 | | skein1024-400 | multihash | 0xb392 | | 694 | | skein1024-408 | multihash | 0xb393 | | 695 | | skein1024-416 | multihash | 0xb394 | | 696 | | skein1024-424 | multihash | 0xb395 | | 697 | | skein1024-432 | multihash | 0xb396 | | 698 | | skein1024-440 | multihash | 0xb397 | | 699 | | skein1024-448 | multihash | 0xb398 | | 700 | | skein1024-456 | multihash | 0xb399 | | 701 | | skein1024-464 | multihash | 0xb39a | | 702 | | skein1024-472 | multihash | 0xb39b | | 703 | | skein1024-480 | multihash | 0xb39c | | 704 | | skein1024-488 | multihash | 0xb39d | | 705 | | skein1024-496 | multihash | 0xb39e | | 706 | | skein1024-504 | multihash | 0xb39f | | 707 | | skein1024-512 | multihash | 0xb3a0 | | 708 | | skein1024-520 | multihash | 0xb3a1 | | 709 | | skein1024-528 | multihash | 0xb3a2 | | 710 | | skein1024-536 | multihash | 0xb3a3 | | 711 | | skein1024-544 | multihash | 0xb3a4 | | 712 | | skein1024-552 | multihash | 0xb3a5 | | 713 | | skein1024-560 | multihash | 0xb3a6 | | 714 | | skein1024-568 | multihash | 0xb3a7 | | 715 | | skein1024-576 | multihash | 0xb3a8 | | 716 | | skein1024-584 | multihash | 0xb3a9 | | 717 | | skein1024-592 | multihash | 0xb3aa | | 718 | | skein1024-600 | multihash | 0xb3ab | | 719 | | skein1024-608 | multihash | 0xb3ac | | 720 | | skein1024-616 | multihash | 0xb3ad | | 721 | | skein1024-624 | multihash | 0xb3ae | | 722 | | skein1024-632 | multihash | 0xb3af | | 723 | | skein1024-640 | multihash | 0xb3b0 | | 724 | | skein1024-648 | multihash | 0xb3b1 | | 725 | 726 | 727 | 728 | Snell, et al. Expires August 27, 2020 [Page 13] 729 | 730 | Internet-Draft Multiformats February 2020 731 | 732 | 733 | | skein1024-656 | multihash | 0xb3b2 | | 734 | | skein1024-664 | multihash | 0xb3b3 | | 735 | | skein1024-672 | multihash | 0xb3b4 | | 736 | | skein1024-680 | multihash | 0xb3b5 | | 737 | | skein1024-688 | multihash | 0xb3b6 | | 738 | | skein1024-696 | multihash | 0xb3b7 | | 739 | | skein1024-704 | multihash | 0xb3b8 | | 740 | | skein1024-712 | multihash | 0xb3b9 | | 741 | | skein1024-720 | multihash | 0xb3ba | | 742 | | skein1024-728 | multihash | 0xb3bb | | 743 | | skein1024-736 | multihash | 0xb3bc | | 744 | | skein1024-744 | multihash | 0xb3bd | | 745 | | skein1024-752 | multihash | 0xb3be | | 746 | | skein1024-760 | multihash | 0xb3bf | | 747 | | skein1024-768 | multihash | 0xb3c0 | | 748 | | skein1024-776 | multihash | 0xb3c1 | | 749 | | skein1024-784 | multihash | 0xb3c2 | | 750 | | skein1024-792 | multihash | 0xb3c3 | | 751 | | skein1024-800 | multihash | 0xb3c4 | | 752 | | skein1024-808 | multihash | 0xb3c5 | | 753 | | skein1024-816 | multihash | 0xb3c6 | | 754 | | skein1024-824 | multihash | 0xb3c7 | | 755 | | skein1024-832 | multihash | 0xb3c8 | | 756 | | skein1024-840 | multihash | 0xb3c9 | | 757 | | skein1024-848 | multihash | 0xb3ca | | 758 | | skein1024-856 | multihash | 0xb3cb | | 759 | | skein1024-864 | multihash | 0xb3cc | | 760 | | skein1024-872 | multihash | 0xb3cd | | 761 | | skein1024-880 | multihash | 0xb3ce | | 762 | | skein1024-888 | multihash | 0xb3cf | | 763 | | skein1024-896 | multihash | 0xb3d0 | | 764 | | skein1024-904 | multihash | 0xb3d1 | | 765 | | skein1024-912 | multihash | 0xb3d2 | | 766 | | skein1024-920 | multihash | 0xb3d3 | | 767 | | skein1024-928 | multihash | 0xb3d4 | | 768 | | skein1024-936 | multihash | 0xb3d5 | | 769 | | skein1024-944 | multihash | 0xb3d6 | | 770 | | skein1024-952 | multihash | 0xb3d7 | | 771 | | skein1024-960 | multihash | 0xb3d8 | | 772 | | skein1024-968 | multihash | 0xb3d9 | | 773 | | skein1024-976 | multihash | 0xb3da | | 774 | | skein1024-984 | multihash | 0xb3db | | 775 | | skein1024-992 | multihash | 0xb3dc | | 776 | | skein1024-1000 | multihash | 0xb3dd | | 777 | | skein1024-1008 | multihash | 0xb3de | | 778 | | skein1024-1016 | multihash | 0xb3df | | 779 | | skein1024-1024 | multihash | 0xb3e0 | | 780 | +----------------+-------------+--------+---------------------------+ 781 | 782 | 783 | 784 | Snell, et al. Expires August 27, 2020 [Page 14] 785 | 786 | Internet-Draft Multiformats February 2020 787 | 788 | 789 | For each of the above entries, this document serves as the reference. 790 | 791 | 6.2. The Multibase Registry 792 | 793 | 6.2.1. Base-Encoding Registration 794 | 795 | Base-encoding identifiers can be registered using the procedure 796 | described herein. 797 | 798 | Base-encodings are registered using the Expert Review policy (see 799 | Section 4.5 of [RFC8126]). The goal of the registry is to reflect 800 | common use of codecs on the Internet. Therefore, the expert(s) 801 | should be strongly biased towards approving registrations, unless 802 | they are abusive, frivolous, not likely to be used on the Internet, 803 | or actively harmful to the Internet and/or the Web (not merely 804 | aesthetically displeasing or architecturally dubious). Expert(s) can 805 | withhold registration of codecs that are too general for the proposal 806 | application. 807 | 808 | Expert(s) will clearly identify any issues that cause a registration 809 | to be refused. Advice about the semantics of a proposed codec can be 810 | given, but if it does not block registration, this should be 811 | explicitly stated. 812 | 813 | When a request if approved, the expert(s) shall inform IANA, and the 814 | regstration will be processed. The IESG is the final arbiter of any 815 | objection. 816 | 817 | The Multibase Registry is located at 818 | https://www.iana.org/assignments/multiformat-base. Registration 819 | requests can be made by following instructions located there or by 820 | sending an email to the multiformat-codecs@ietf.org mailing list. 821 | 822 | Registration requests consist of at least the following information: 823 | 824 | o *Name*: The name of base-encoding 825 | 826 | o *Prefix*: The requested prefix identifier 827 | 828 | o *Description*: An optional short text description of the base 829 | encoding. 830 | 831 | o *Status*: An indicator of the current implementation status of the 832 | encoding and prefix. MUST be one of "draft", "candidate", or 833 | "default". 834 | 835 | o *Reference*: A reference to the document that specifies the base 836 | encoding, preferably including a URI that can be used to retrieve 837 | 838 | 839 | 840 | Snell, et al. Expires August 27, 2020 [Page 15] 841 | 842 | Internet-Draft Multiformats February 2020 843 | 844 | 845 | a copy of the document. An indication of the relevant section(s) 846 | can also be included but is not required. 847 | 848 | Each of the Status field values indicates the following meanings: 849 | 850 | o *draft*: The encoding has been proposed but is not widely 851 | implemented and may be removed in the future. 852 | 853 | o *candidate*: The encoding is mature and widely implemented by many 854 | but not all implementations. 855 | 856 | o *default*: The encoding SHOULD be implemented by all 857 | implementations and are widely used. 858 | 859 | The expert(s) can change the Status of a registration at any time. 860 | 861 | The expert(s) can define additional fields to be collected in the 862 | registry. 863 | 864 | Registrations SHOULD reference a freely available, stable 865 | specification. 866 | 867 | Note that base encoding can be registered by third parties (including 868 | the expert(s)), if the expert(s) determine that an unregistered base 869 | encoding is widely deployed and not likely to be registered in a 870 | timely manner otherwise. Such registrations still are subject to the 871 | requirements defined. 872 | 873 | 6.2.2. Initial Contents 874 | 875 | The initial contents of the Multibase Registry are as follows: 876 | 877 | 878 | 879 | 880 | 881 | 882 | 883 | 884 | 885 | 886 | 887 | 888 | 889 | 890 | 891 | 892 | 893 | 894 | 895 | 896 | Snell, et al. Expires August 27, 2020 [Page 16] 897 | 898 | Internet-Draft Multiformats February 2020 899 | 900 | 901 | +-------------------+------+----------------------------+-----------+ 902 | | Encoding | Code | Description | Status | 903 | +-------------------+------+----------------------------+-----------+ 904 | | identity | 0x00 | 8-bit binary (encoder and | default | 905 | | | | decoder keeps data | | 906 | | | | unmodified) | | 907 | | base2 | 0 | binary (01010101) | candidate | 908 | | base8 | 7 | octal | draft | 909 | | base10 | 9 | decimal | draft | 910 | | base16 | f | hexadecimal | default | 911 | | base16upper | F | hexadecimal | default | 912 | | base32hex | v | rfc4648 no padding - | candidate | 913 | | | | highest char | | 914 | | base32hexupper | V | rfc4648 no padding - | candidate | 915 | | | | highest char | | 916 | | base32hexpad | t | rfc4648 with padding | candidate | 917 | | base32hexpadupper | T | rfc4648 with padding | candidate | 918 | | base32 | b | rfc4648 no padding | default | 919 | | base32upper | B | rfc4648 no padding | default | 920 | | base32pad | c | rfc4648 with padding | candidate | 921 | | base32padupper | C | rfc4648 with padding | candidate | 922 | | base32z | h | z-base-32 (used by Tahoe- | draft | 923 | | | | LAFS) | | 924 | | base58flickr | Z | base58 flicker | candidate | 925 | | base58btc | z | base58 bitcoin | default | 926 | | base64 | m | rfc4648 no padding | default | 927 | | base64pad | M | rfc4648 with padding - | candidate | 928 | | | | MIME encoding | | 929 | | base64url | u | rfc4648 no padding | default | 930 | | base64urlpad | U | rfc4648 with padding | default | 931 | +-------------------+------+----------------------------+-----------+ 932 | 933 | For each of the above entries, this document serves as the reference. 934 | 935 | 7. Normative References 936 | 937 | [LEB128] DWARF Debugging Information Format Workgroup, "DWARF 938 | Debugging Information Format", December 2005, 939 | . 940 | 941 | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 942 | Requirement Levels", BCP 14, RFC 2119, 943 | DOI 10.17487/RFC2119, March 1997, 944 | . 945 | 946 | 947 | 948 | 949 | 950 | 951 | 952 | Snell, et al. Expires August 27, 2020 [Page 17] 953 | 954 | Internet-Draft Multiformats February 2020 955 | 956 | 957 | [RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax 958 | Specifications: ABNF", STD 68, RFC 5234, 959 | DOI 10.17487/RFC5234, January 2008, 960 | . 961 | 962 | [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for 963 | Writing an IANA Considerations Section in RFCs", BCP 26, 964 | RFC 8126, DOI 10.17487/RFC8126, June 2017, 965 | . 966 | 967 | Authors' Addresses 968 | 969 | James M Snell (editor) 970 | NearForm Research 971 | 972 | Email: jasnell@gmail.com 973 | 974 | 975 | Nicola Greco 976 | Protocol Labs 977 | 978 | Email: me@nicola.io 979 | 980 | 981 | Juan Benet 982 | Protocol Labs 983 | 984 | Email: juan@benet.ai 985 | 986 | 987 | David A. Dalrymple 988 | Protocol Labs 989 | 990 | Email: david.dalrymple@protocol.ai 991 | 992 | 993 | David Dias 994 | Protocol Labs 995 | 996 | Email: mail@daviddias.me 997 | 998 | 999 | Lars Gierth 1000 | Protocol Labs 1001 | 1002 | Email: lars.gierth@gmail.com 1003 | 1004 | 1005 | 1006 | 1007 | 1008 | Snell, et al. Expires August 27, 2020 [Page 18] 1009 | -------------------------------------------------------------------------------- /drafts/draft-snell-multihash-00.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | ]> 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | Multiformats 16 | 17 | 18 | 22 | NearForm Research 23 |
24 | jasnell@gmail.com 25 |
26 |
27 | 28 | 31 | Protocol Labs 32 |
33 | me@nicola.io 34 |
35 |
36 | 37 | 40 | Protocol Labs 41 |
42 | juan@benet.ai 43 |
44 |
45 | 46 | 49 | Protocol Labs 50 |
51 | david.dalrymple@protocol.ai 52 |
53 |
54 | 55 | 58 | Protocol Labs 59 |
60 | mail@daviddias.me 61 |
62 |
63 | 64 | 67 | Protocol Labs 68 |
69 | lars.gierth@gmail.com 70 |
71 |
72 | 73 | 74 | 75 | Applications 76 | Individual Submission 77 | I-D 78 | multihash 79 | 80 | 81 | 82 | Defines Multiformats, a collection of data formats that aim to 83 | future-proof systems by adding self-description to format values; 84 | and defines the Multihash and Multibase Multiformat data 85 | formats. 86 | 87 | 88 | 89 |
90 | 91 | 92 | 93 |
94 | 95 | 96 | Multiformats are a collection of data formats that aim to future-proof 97 | systems by adding self-description to format values; allowing 98 | interoperability and protocol agility while avoiding lock in. 99 | 100 | 101 | 102 | The self-describing aspects of the Multiformat values have a few 103 | stipulations: 104 | 105 | 106 | They MUST be in-band (encoded within and carried with the value). 107 | 108 | 109 | They MUST avoid lock-in and promote extensibility. 110 | 111 | 112 | They MUST be compact and have a binary-packed representation. 113 | 114 | 115 | They MUST have a human-readable representation. 116 | 117 | 118 | 119 | 120 | 121 | This specification defines the Multihash and Multibase formats. 122 | 123 | 124 | 125 | This specification also defines extensible registries for codec and base-encoding identifiers. 126 | 127 | 128 | 129 | New Multiformat data formats SHOULD be registered within the Codec 130 | Registry using the "multiformat" type identifier. 131 | 132 | 133 | 134 | In this document, the key words "MUST", "MUST NOT", "REQUIRED", "SHALL", 135 | "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" 136 | are to be interpreted as described in . 137 | 138 | 139 | 140 | This specification uses the Augmented Backus-Naur Form (ABNF) 141 | notation of 142 | 143 | 144 |
145 | 146 |
147 | 148 | 149 | The various Multiformats defined in this specification make use of the 150 | Unsigned Variable Length Integer encoding defined in Appendix C of the 151 | standard. 152 | 153 | 154 | 155 | As suggested by the name, this variable length encoding is only 156 | capable of representing unsigned integers. Further, while there 157 | is no theoretical maximum integer value that can be represented 158 | by the format, implementations MUST NOT encode more than nine (9) 159 | bytes giving a practical limit of integers in a range between 0 and 160 | 2^63 - 1. 161 | 162 | 163 | 164 | Specific Multiformats using the Unsigned Variable Length Integer 165 | encoding MAY explicitly declare a more restricted range of encoded 166 | values but MUST NOT require values greater than 2^63 - 1. 167 | 168 | 169 | 170 | All integer values between 0 and 127 are encoded as a single byte that 171 | is identical to the input. That is, the value 1 is encoded as 00000001, 172 | and the value 127 is encoded as 01111111. 173 | 174 | 175 | 176 | Values greater than 127 require two or more bytes as illustrated 177 | in the examples below. 178 | 179 | 180 | 181 | Numbers MUST be encoded using the least number of bytes possible. 182 | 183 | 184 | 185 | Integer 186 | Encoding 187 | 100000001 188 | 12701111111 189 | 12810000000 00000001 190 | 25511111111 00000001 191 | 30010101100 00000010 192 | 1638410000000 10000000 00000001 193 | 194 | 195 |
196 | 197 | 198 | Specifications signal use of the Unsigned Variable Length Encoded 199 | Integer format by referencing the unsigned-varint ABNF grammar rule 200 | defined below. 201 | 202 | 203 |
204 |
209 |
210 | 211 |
212 | 213 |
214 | 215 | 216 | Multibase is a format for differentiating outputs from various 217 | well-established text base-encoding algorithms. 218 | 219 | 220 | 221 | A Multibase consists simply of a single prefix character that 222 | identifies the base-encoding of the remaining characters. All 223 | valid Multibase prefix characters are registered in The 224 | Multibase Registry. 225 | 226 | 227 | 228 | The prefix character for each base are selected such that they 229 | are included in the alphabets of the base they represent. For 230 | example, "f" is the base code for base16 (hex) because "f" is in 231 | hex's 16 character alphabet. 232 | 233 | 234 |
235 | 236 | 237 | Given the sample text, "Multibase is awesome! \o/", the following 238 | example Multibase encodings may be generated. 239 | 240 | 241 | 242 | Base 243 | Multibase 244 | 16 (upper) 245 | F4D756C74696261736520697320617765736F6D6521205C6F2F 246 | 16 (lower) 247 | f4d756c74696261736520697320617765736f6d6521205c6f2f 248 | 32 249 | BJV2WY5DJMJQXGZJANFZSAYLXMVZW63LFEEQFY3ZP 250 | 58 251 | zYAjKoNbau5KiqmHPmSxYCvn66dA1vLmwbt 252 | 64 253 | MTXVsdGliYXNlIGlzIGF3ZXNvbWUhIFxvLw== 254 | 255 |
256 | 257 |
258 |
ABNF 259 | 261 | multibase = base-identifier {base-encoded-data} 262 | ]]>
263 |
264 | 265 |
266 | 267 |
268 | 269 | 270 | Multihash is a format for differentiating outputs from various 271 | well-established cryptographic hash functions while adressing 272 | output length and encoding considerations. 273 | 274 | 275 | 276 | Multihash values encode the hash function output prefixed by an 277 | id identifying the hash function encoded as an unsigned variable 278 | length integer, and the length of the hash function output encoded 279 | as an unsigned variable length integer. All valid Multihash function 280 | identifiers are registered in the Codec Registry. 281 | 282 | 283 | 284 | Multihash values are byte sequences that MAY be encoded in multiple 285 | base-encodings including hex, base64, base32, or others. When 286 | representing a Multihash using a base-encoding, the Multibase format 287 | SHOULD be used. 288 | 289 | 290 |
291 | 292 | 293 | Given the sample text "multihash", the following example 294 | Multihash values may be generated: 295 | 296 | 297 | 298 | Function 299 | ID 300 | Multihash (Multibase/Base16) 301 | 302 | sha1 303 | 0x11 304 | f111488c2f11fb2ce392acb5b2986e640211c4690073e 305 | 306 | sha2-256 307 | 0x12 308 | f12209cbc07c3f991725836a3aa2a581ca2029198aa420b9d99bc0e131d9f3e2cbe47 309 | 310 |
311 | 312 |
313 |
Multihash 314 |
321 |
322 | 323 |
324 | 325 |
326 | 327 | There are no additional security considerations introduced by the 328 | use of Multiformat data formats. Note, however, that various hash 329 | functions that may be used with multiformats may be vulnerable to 330 | various known security issues and limitations (e.g. sha1) and 331 | thus SHOULD be avoided. 332 | 333 |
334 | 335 |
336 | 337 |
338 | 339 |
340 | 341 | Codec identifiers can be registered using the procedure 342 | described herein. 343 | 344 | 345 | 346 | Codecs are registered using the Expert Review policy (see 347 | Section 4.5 of ). The goal of the 348 | registry is to reflect common use of codecs on the Internet. 349 | Therefore, the expert(s) should be strongly biased towards approving 350 | registrations, unless they are abusive, frivolous, not likely 351 | to be used on the Internet, or actively harmful to the Internet 352 | and/or the Web (not merely aesthetically displeasing or 353 | architecturally dubious). Expert(s) can withhold registration 354 | of codecs that are too general for the proposal application. 355 | 356 | 357 | 358 | Expert(s) will clearly identify any issues that cause a 359 | registration to be refused. Advice about the semantics of a 360 | proposed codec can be given, but if it does not block registration, 361 | this should be explicitly stated. 362 | 363 | 364 | 365 | When a request if approved, the expert(s) shall inform IANA, and 366 | the regstration will be processed. The IESG is the final arbiter 367 | of any objection. 368 | 369 | 370 | 371 | The Codec Registry is located at https://www.iana.org/assignments/multiformat-codecs. Registration requests can be made by following 372 | instructions located there or by sending an email to the multiformat-codecs@ietf.org mailing list. 373 | 374 | 375 | 376 | Registration requests consist of at least the following information: 377 | 378 | *Codec Name*: The name of codec 379 | *Type*: The type of applicable multiformat 380 | *Code*: The requested identity code 381 | *Description*: An optional short text description of the codec. 382 | *Reference*: A reference to the document that specifies the codec, preferably including a URI that can be used to retrieve a copy of the document. An indication of the relevant section(s) can also be included but is not required. 383 | 384 | 385 | 386 | 387 | Multiformat data formats themselves MAY be registered within The 388 | Codec Registry using a Type field value of "multiformat". For all 389 | other registrations, the Type field MUST refer to an entry in The 390 | Codec Registry whose Type is "multiformat". 391 | 392 | 393 | 394 | The expert(s) can define additional fields to be collected in 395 | the registry. 396 | 397 | 398 | 399 | Registrations SHOULD reference a freely available, stable 400 | specification. 401 | 402 | 403 | 404 | Note that codecs can be registered by third parties (including the 405 | expert(s)), if the expert(s) determine that an unregistered codec 406 | is widely deployed and not likely to be registered in a timely 407 | manner otherwise. Such registrations still are subject to the 408 | requirements defined. 409 | 410 | 411 |
412 | 413 |
414 | 415 | 416 | The initial contents of the Codec Registry include: 417 | 418 | 419 | 420 | Name 421 | Type 422 | Code 423 | Description 424 | 425 | identity 426 | multihash 427 | 0x00 428 | raw binary 429 | 430 | sha1 431 | multihash 432 | 0x11 433 | 434 | 435 | sha2-256 436 | multihash 437 | 0x12 438 | 439 | 440 | sha2-512 441 | multihash 442 | 0x13 443 | 444 | 445 | sha3-512 446 | multihash 447 | 0x14 448 | 449 | 450 | sha3-384 451 | multihash 452 | 0x15 453 | 454 | 455 | sha3-256 456 | multihash 457 | 0x16 458 | 459 | 460 | sha3-224 461 | multihash 462 | 0x17 463 | 464 | 465 | shake-128 466 | multihash 467 | 0x18 468 | 469 | 470 | shake-256 471 | multihash 472 | 0x19 473 | 474 | 475 | keccak-224 476 | multihash 477 | 0x1a 478 | keccak has variable output length. The number specifies the core length 479 | 480 | keccak-256 481 | multihash 482 | 0x1b 483 | 484 | 485 | keccak-384 486 | multihash 487 | 0x1c 488 | 489 | 490 | keccak-512 491 | multihash 492 | 0x1d 493 | 494 | 495 | murmur3-128 496 | multihash 497 | 0x22 498 | 499 | 500 | murmur3-32 501 | multihash 502 | 0x23 503 | 504 | 505 | multicodec 506 | multiformat 507 | 0x30 508 | 509 | 510 | multihash 511 | multiformat 512 | 0x31 513 | 514 | 515 | multibase 516 | multiformat 517 | 0x33 518 | 519 | 520 | dbl-sha2-256 521 | multihash 522 | 0x56 523 | 524 | 525 | md4 526 | multihash 527 | 0xd4 528 | 529 | 530 | md5 531 | multihash 532 | 0xd5 533 | 534 | 535 | bmt 536 | multihash 537 | 0xd6 538 | Binary Merkle Tree Hash 539 | 540 | x11 541 | multihash 542 | 0x1100 543 | 544 | 545 | blake2b-8 546 | multihash 547 | 0xb201 548 | Blake2b consists of 64 output lengths that give different hashes 549 | 550 | blake2b-16 551 | multihash 552 | 0xb202 553 | 554 | 555 | blake2b-24 556 | multihash 557 | 0xb203 558 | 559 | 560 | blake2b-32 561 | multihash 562 | 0xb204 563 | 564 | 565 | blake2b-40 566 | multihash 567 | 0xb205 568 | 569 | 570 | blake2b-48 571 | multihash 572 | 0xb206 573 | 574 | 575 | blake2b-56 576 | multihash 577 | 0xb207 578 | 579 | 580 | blake2b-64 581 | multihash 582 | 0xb208 583 | 584 | 585 | blake2b-72 586 | multihash 587 | 0xb209 588 | 589 | 590 | blake2b-80 591 | multihash 592 | 0xb20a 593 | 594 | 595 | blake2b-88 596 | multihash 597 | 0xb20b 598 | 599 | 600 | blake2b-96 601 | multihash 602 | 0xb20c 603 | 604 | 605 | blake2b-104 606 | multihash 607 | 0xb20d 608 | 609 | 610 | blake2b-112 611 | multihash 612 | 0xb20e 613 | 614 | 615 | blake2b-120 616 | multihash 617 | 0xb20f 618 | 619 | 620 | blake2b-128 621 | multihash 622 | 0xb210 623 | 624 | 625 | blake2b-136 626 | multihash 627 | 0xb211 628 | 629 | 630 | blake2b-144 631 | multihash 632 | 0xb212 633 | 634 | 635 | blake2b-152 636 | multihash 637 | 0xb213 638 | 639 | 640 | blake2b-160 641 | multihash 642 | 0xb214 643 | 644 | 645 | blake2b-168 646 | multihash 647 | 0xb215 648 | 649 | 650 | blake2b-176 651 | multihash 652 | 0xb216 653 | 654 | 655 | blake2b-184 656 | multihash 657 | 0xb217 658 | 659 | 660 | blake2b-192 661 | multihash 662 | 0xb218 663 | 664 | 665 | blake2b-200 666 | multihash 667 | 0xb219 668 | 669 | 670 | blake2b-208 671 | multihash 672 | 0xb21a 673 | 674 | 675 | blake2b-216 676 | multihash 677 | 0xb21b 678 | 679 | 680 | blake2b-224 681 | multihash 682 | 0xb21c 683 | 684 | 685 | blake2b-232 686 | multihash 687 | 0xb21d 688 | 689 | 690 | blake2b-240 691 | multihash 692 | 0xb21e 693 | 694 | 695 | blake2b-248 696 | multihash 697 | 0xb21f 698 | 699 | 700 | blake2b-256 701 | multihash 702 | 0xb220 703 | 704 | 705 | blake2b-264 706 | multihash 707 | 0xb221 708 | 709 | 710 | blake2b-272 711 | multihash 712 | 0xb222 713 | 714 | 715 | blake2b-280 716 | multihash 717 | 0xb223 718 | 719 | 720 | blake2b-288 721 | multihash 722 | 0xb224 723 | 724 | 725 | blake2b-296 726 | multihash 727 | 0xb225 728 | 729 | 730 | blake2b-304 731 | multihash 732 | 0xb226 733 | 734 | 735 | blake2b-312 736 | multihash 737 | 0xb227 738 | 739 | 740 | blake2b-320 741 | multihash 742 | 0xb228 743 | 744 | 745 | blake2b-328 746 | multihash 747 | 0xb229 748 | 749 | 750 | blake2b-336 751 | multihash 752 | 0xb22a 753 | 754 | 755 | blake2b-344 756 | multihash 757 | 0xb22b 758 | 759 | 760 | blake2b-352 761 | multihash 762 | 0xb22c 763 | 764 | 765 | blake2b-360 766 | multihash 767 | 0xb22d 768 | 769 | 770 | blake2b-368 771 | multihash 772 | 0xb22e 773 | 774 | 775 | blake2b-376 776 | multihash 777 | 0xb22f 778 | 779 | 780 | blake2b-384 781 | multihash 782 | 0xb230 783 | 784 | 785 | blake2b-392 786 | multihash 787 | 0xb231 788 | 789 | 790 | blake2b-400 791 | multihash 792 | 0xb232 793 | 794 | 795 | blake2b-408 796 | multihash 797 | 0xb233 798 | 799 | 800 | blake2b-416 801 | multihash 802 | 0xb234 803 | 804 | 805 | blake2b-424 806 | multihash 807 | 0xb235 808 | 809 | 810 | blake2b-432 811 | multihash 812 | 0xb236 813 | 814 | 815 | blake2b-440 816 | multihash 817 | 0xb237 818 | 819 | 820 | blake2b-448 821 | multihash 822 | 0xb238 823 | 824 | 825 | blake2b-456 826 | multihash 827 | 0xb239 828 | 829 | 830 | blake2b-464 831 | multihash 832 | 0xb23a 833 | 834 | 835 | blake2b-472 836 | multihash 837 | 0xb23b 838 | 839 | 840 | blake2b-480 841 | multihash 842 | 0xb23c 843 | 844 | 845 | blake2b-488 846 | multihash 847 | 0xb23d 848 | 849 | 850 | blake2b-496 851 | multihash 852 | 0xb23e 853 | 854 | 855 | blake2b-504 856 | multihash 857 | 0xb23f 858 | 859 | 860 | blake2b-512 861 | multihash 862 | 0xb240 863 | 864 | 865 | blake2s-8 866 | multihash 867 | 0xb241 868 | Blake2s consists of 32 output lengths that give different hashes 869 | 870 | blake2s-16 871 | multihash 872 | 0xb242 873 | 874 | 875 | blake2s-24 876 | multihash 877 | 0xb243 878 | 879 | 880 | blake2s-32 881 | multihash 882 | 0xb244 883 | 884 | 885 | blake2s-40 886 | multihash 887 | 0xb245 888 | 889 | 890 | blake2s-48 891 | multihash 892 | 0xb246 893 | 894 | 895 | blake2s-56 896 | multihash 897 | 0xb247 898 | 899 | 900 | blake2s-64 901 | multihash 902 | 0xb248 903 | 904 | 905 | blake2s-72 906 | multihash 907 | 0xb249 908 | 909 | 910 | blake2s-80 911 | multihash 912 | 0xb24a 913 | 914 | 915 | blake2s-88 916 | multihash 917 | 0xb24b 918 | 919 | 920 | blake2s-96 921 | multihash 922 | 0xb24c 923 | 924 | 925 | blake2s-104 926 | multihash 927 | 0xb24d 928 | 929 | 930 | blake2s-112 931 | multihash 932 | 0xb24e 933 | 934 | 935 | blake2s-120 936 | multihash 937 | 0xb24f 938 | 939 | 940 | blake2s-128 941 | multihash 942 | 0xb250 943 | 944 | 945 | blake2s-136 946 | multihash 947 | 0xb251 948 | 949 | 950 | blake2s-144 951 | multihash 952 | 0xb252 953 | 954 | 955 | blake2s-152 956 | multihash 957 | 0xb253 958 | 959 | 960 | blake2s-160 961 | multihash 962 | 0xb254 963 | 964 | 965 | blake2s-168 966 | multihash 967 | 0xb255 968 | 969 | 970 | blake2s-176 971 | multihash 972 | 0xb256 973 | 974 | 975 | blake2s-184 976 | multihash 977 | 0xb257 978 | 979 | 980 | blake2s-192 981 | multihash 982 | 0xb258 983 | 984 | 985 | blake2s-200 986 | multihash 987 | 0xb259 988 | 989 | 990 | blake2s-208 991 | multihash 992 | 0xb25a 993 | 994 | 995 | blake2s-216 996 | multihash 997 | 0xb25b 998 | 999 | 1000 | blake2s-224 1001 | multihash 1002 | 0xb25c 1003 | 1004 | 1005 | blake2s-232 1006 | multihash 1007 | 0xb25d 1008 | 1009 | 1010 | blake2s-240 1011 | multihash 1012 | 0xb25e 1013 | 1014 | 1015 | blake2s-248 1016 | multihash 1017 | 0xb25f 1018 | 1019 | 1020 | blake2s-256 1021 | multihash 1022 | 0xb260 1023 | 1024 | 1025 | skein256-8 1026 | multihash 1027 | 0xb301 1028 | Skein256 consists of 32 output lengths that give different hashes 1029 | 1030 | skein256-16 1031 | multihash 1032 | 0xb302 1033 | 1034 | 1035 | skein256-24 1036 | multihash 1037 | 0xb303 1038 | 1039 | 1040 | skein256-32 1041 | multihash 1042 | 0xb304 1043 | 1044 | 1045 | skein256-40 1046 | multihash 1047 | 0xb305 1048 | 1049 | 1050 | skein256-48 1051 | multihash 1052 | 0xb306 1053 | 1054 | 1055 | skein256-56 1056 | multihash 1057 | 0xb307 1058 | 1059 | 1060 | skein256-64 1061 | multihash 1062 | 0xb308 1063 | 1064 | 1065 | skein256-72 1066 | multihash 1067 | 0xb309 1068 | 1069 | 1070 | skein256-80 1071 | multihash 1072 | 0xb30a 1073 | 1074 | 1075 | skein256-88 1076 | multihash 1077 | 0xb30b 1078 | 1079 | 1080 | skein256-96 1081 | multihash 1082 | 0xb30c 1083 | 1084 | 1085 | skein256-104 1086 | multihash 1087 | 0xb30d 1088 | 1089 | 1090 | skein256-112 1091 | multihash 1092 | 0xb30e 1093 | 1094 | 1095 | skein256-120 1096 | multihash 1097 | 0xb30f 1098 | 1099 | 1100 | skein256-128 1101 | multihash 1102 | 0xb310 1103 | 1104 | 1105 | skein256-136 1106 | multihash 1107 | 0xb311 1108 | 1109 | 1110 | skein256-144 1111 | multihash 1112 | 0xb312 1113 | 1114 | 1115 | skein256-152 1116 | multihash 1117 | 0xb313 1118 | 1119 | 1120 | skein256-160 1121 | multihash 1122 | 0xb314 1123 | 1124 | 1125 | skein256-168 1126 | multihash 1127 | 0xb315 1128 | 1129 | 1130 | skein256-176 1131 | multihash 1132 | 0xb316 1133 | 1134 | 1135 | skein256-184 1136 | multihash 1137 | 0xb317 1138 | 1139 | 1140 | skein256-192 1141 | multihash 1142 | 0xb318 1143 | 1144 | 1145 | skein256-200 1146 | multihash 1147 | 0xb319 1148 | 1149 | 1150 | skein256-208 1151 | multihash 1152 | 0xb31a 1153 | 1154 | 1155 | skein256-216 1156 | multihash 1157 | 0xb31b 1158 | 1159 | 1160 | skein256-224 1161 | multihash 1162 | 0xb31c 1163 | 1164 | 1165 | skein256-232 1166 | multihash 1167 | 0xb31d 1168 | 1169 | 1170 | skein256-240 1171 | multihash 1172 | 0xb31e 1173 | 1174 | 1175 | skein256-248 1176 | multihash 1177 | 0xb31f 1178 | 1179 | 1180 | skein256-256 1181 | multihash 1182 | 0xb320 1183 | 1184 | 1185 | skein512-8 1186 | multihash 1187 | 0xb321 1188 | Skein512 consists of 64 output lengths that give different hashes 1189 | 1190 | skein512-16 1191 | multihash 1192 | 0xb322 1193 | 1194 | 1195 | skein512-24 1196 | multihash 1197 | 0xb323 1198 | 1199 | 1200 | skein512-32 1201 | multihash 1202 | 0xb324 1203 | 1204 | 1205 | skein512-40 1206 | multihash 1207 | 0xb325 1208 | 1209 | 1210 | skein512-48 1211 | multihash 1212 | 0xb326 1213 | 1214 | 1215 | skein512-56 1216 | multihash 1217 | 0xb327 1218 | 1219 | 1220 | skein512-64 1221 | multihash 1222 | 0xb328 1223 | 1224 | 1225 | skein512-72 1226 | multihash 1227 | 0xb329 1228 | 1229 | 1230 | skein512-80 1231 | multihash 1232 | 0xb32a 1233 | 1234 | 1235 | skein512-88 1236 | multihash 1237 | 0xb32b 1238 | 1239 | 1240 | skein512-96 1241 | multihash 1242 | 0xb32c 1243 | 1244 | 1245 | skein512-104 1246 | multihash 1247 | 0xb32d 1248 | 1249 | 1250 | skein512-112 1251 | multihash 1252 | 0xb32e 1253 | 1254 | 1255 | skein512-120 1256 | multihash 1257 | 0xb32f 1258 | 1259 | 1260 | skein512-128 1261 | multihash 1262 | 0xb330 1263 | 1264 | 1265 | skein512-136 1266 | multihash 1267 | 0xb331 1268 | 1269 | 1270 | skein512-144 1271 | multihash 1272 | 0xb332 1273 | 1274 | 1275 | skein512-152 1276 | multihash 1277 | 0xb333 1278 | 1279 | 1280 | skein512-160 1281 | multihash 1282 | 0xb334 1283 | 1284 | 1285 | skein512-168 1286 | multihash 1287 | 0xb335 1288 | 1289 | 1290 | skein512-176 1291 | multihash 1292 | 0xb336 1293 | 1294 | 1295 | skein512-184 1296 | multihash 1297 | 0xb337 1298 | 1299 | 1300 | skein512-192 1301 | multihash 1302 | 0xb338 1303 | 1304 | 1305 | skein512-200 1306 | multihash 1307 | 0xb339 1308 | 1309 | 1310 | skein512-208 1311 | multihash 1312 | 0xb33a 1313 | 1314 | 1315 | skein512-216 1316 | multihash 1317 | 0xb33b 1318 | 1319 | 1320 | skein512-224 1321 | multihash 1322 | 0xb33c 1323 | 1324 | 1325 | skein512-232 1326 | multihash 1327 | 0xb33d 1328 | 1329 | 1330 | skein512-240 1331 | multihash 1332 | 0xb33e 1333 | 1334 | 1335 | skein512-248 1336 | multihash 1337 | 0xb33f 1338 | 1339 | 1340 | skein512-256 1341 | multihash 1342 | 0xb340 1343 | 1344 | 1345 | skein512-264 1346 | multihash 1347 | 0xb341 1348 | 1349 | 1350 | skein512-272 1351 | multihash 1352 | 0xb342 1353 | 1354 | 1355 | skein512-280 1356 | multihash 1357 | 0xb343 1358 | 1359 | 1360 | skein512-288 1361 | multihash 1362 | 0xb344 1363 | 1364 | 1365 | skein512-296 1366 | multihash 1367 | 0xb345 1368 | 1369 | 1370 | skein512-304 1371 | multihash 1372 | 0xb346 1373 | 1374 | 1375 | skein512-312 1376 | multihash 1377 | 0xb347 1378 | 1379 | 1380 | skein512-320 1381 | multihash 1382 | 0xb348 1383 | 1384 | 1385 | skein512-328 1386 | multihash 1387 | 0xb349 1388 | 1389 | 1390 | skein512-336 1391 | multihash 1392 | 0xb34a 1393 | 1394 | 1395 | skein512-344 1396 | multihash 1397 | 0xb34b 1398 | 1399 | 1400 | skein512-352 1401 | multihash 1402 | 0xb34c 1403 | 1404 | 1405 | skein512-360 1406 | multihash 1407 | 0xb34d 1408 | 1409 | 1410 | skein512-368 1411 | multihash 1412 | 0xb34e 1413 | 1414 | 1415 | skein512-376 1416 | multihash 1417 | 0xb34f 1418 | 1419 | 1420 | skein512-384 1421 | multihash 1422 | 0xb350 1423 | 1424 | 1425 | skein512-392 1426 | multihash 1427 | 0xb351 1428 | 1429 | 1430 | skein512-400 1431 | multihash 1432 | 0xb352 1433 | 1434 | 1435 | skein512-408 1436 | multihash 1437 | 0xb353 1438 | 1439 | 1440 | skein512-416 1441 | multihash 1442 | 0xb354 1443 | 1444 | 1445 | skein512-424 1446 | multihash 1447 | 0xb355 1448 | 1449 | 1450 | skein512-432 1451 | multihash 1452 | 0xb356 1453 | 1454 | 1455 | skein512-440 1456 | multihash 1457 | 0xb357 1458 | 1459 | 1460 | skein512-448 1461 | multihash 1462 | 0xb358 1463 | 1464 | 1465 | skein512-456 1466 | multihash 1467 | 0xb359 1468 | 1469 | 1470 | skein512-464 1471 | multihash 1472 | 0xb35a 1473 | 1474 | 1475 | skein512-472 1476 | multihash 1477 | 0xb35b 1478 | 1479 | 1480 | skein512-480 1481 | multihash 1482 | 0xb35c 1483 | 1484 | 1485 | skein512-488 1486 | multihash 1487 | 0xb35d 1488 | 1489 | 1490 | skein512-496 1491 | multihash 1492 | 0xb35e 1493 | 1494 | 1495 | skein512-504 1496 | multihash 1497 | 0xb35f 1498 | 1499 | 1500 | skein512-512 1501 | multihash 1502 | 0xb360 1503 | 1504 | 1505 | skein1024-8 1506 | multihash 1507 | 0xb361 1508 | Skein1024 consists of 128 output lengths that give different hashes 1509 | 1510 | skein1024-16 1511 | multihash 1512 | 0xb362 1513 | 1514 | 1515 | skein1024-24 1516 | multihash 1517 | 0xb363 1518 | 1519 | 1520 | skein1024-32 1521 | multihash 1522 | 0xb364 1523 | 1524 | 1525 | skein1024-40 1526 | multihash 1527 | 0xb365 1528 | 1529 | 1530 | skein1024-48 1531 | multihash 1532 | 0xb366 1533 | 1534 | 1535 | skein1024-56 1536 | multihash 1537 | 0xb367 1538 | 1539 | 1540 | skein1024-64 1541 | multihash 1542 | 0xb368 1543 | 1544 | 1545 | skein1024-72 1546 | multihash 1547 | 0xb369 1548 | 1549 | 1550 | skein1024-80 1551 | multihash 1552 | 0xb36a 1553 | 1554 | 1555 | skein1024-88 1556 | multihash 1557 | 0xb36b 1558 | 1559 | 1560 | skein1024-96 1561 | multihash 1562 | 0xb36c 1563 | 1564 | 1565 | skein1024-104 1566 | multihash 1567 | 0xb36d 1568 | 1569 | 1570 | skein1024-112 1571 | multihash 1572 | 0xb36e 1573 | 1574 | 1575 | skein1024-120 1576 | multihash 1577 | 0xb36f 1578 | 1579 | 1580 | skein1024-128 1581 | multihash 1582 | 0xb370 1583 | 1584 | 1585 | skein1024-136 1586 | multihash 1587 | 0xb371 1588 | 1589 | 1590 | skein1024-144 1591 | multihash 1592 | 0xb372 1593 | 1594 | 1595 | skein1024-152 1596 | multihash 1597 | 0xb373 1598 | 1599 | 1600 | skein1024-160 1601 | multihash 1602 | 0xb374 1603 | 1604 | 1605 | skein1024-168 1606 | multihash 1607 | 0xb375 1608 | 1609 | 1610 | skein1024-176 1611 | multihash 1612 | 0xb376 1613 | 1614 | 1615 | skein1024-184 1616 | multihash 1617 | 0xb377 1618 | 1619 | 1620 | skein1024-192 1621 | multihash 1622 | 0xb378 1623 | 1624 | 1625 | skein1024-200 1626 | multihash 1627 | 0xb379 1628 | 1629 | 1630 | skein1024-208 1631 | multihash 1632 | 0xb37a 1633 | 1634 | 1635 | skein1024-216 1636 | multihash 1637 | 0xb37b 1638 | 1639 | 1640 | skein1024-224 1641 | multihash 1642 | 0xb37c 1643 | 1644 | 1645 | skein1024-232 1646 | multihash 1647 | 0xb37d 1648 | 1649 | 1650 | skein1024-240 1651 | multihash 1652 | 0xb37e 1653 | 1654 | 1655 | skein1024-248 1656 | multihash 1657 | 0xb37f 1658 | 1659 | 1660 | skein1024-256 1661 | multihash 1662 | 0xb380 1663 | 1664 | 1665 | skein1024-264 1666 | multihash 1667 | 0xb381 1668 | 1669 | 1670 | skein1024-272 1671 | multihash 1672 | 0xb382 1673 | 1674 | 1675 | skein1024-280 1676 | multihash 1677 | 0xb383 1678 | 1679 | 1680 | skein1024-288 1681 | multihash 1682 | 0xb384 1683 | 1684 | 1685 | skein1024-296 1686 | multihash 1687 | 0xb385 1688 | 1689 | 1690 | skein1024-304 1691 | multihash 1692 | 0xb386 1693 | 1694 | 1695 | skein1024-312 1696 | multihash 1697 | 0xb387 1698 | 1699 | 1700 | skein1024-320 1701 | multihash 1702 | 0xb388 1703 | 1704 | 1705 | skein1024-328 1706 | multihash 1707 | 0xb389 1708 | 1709 | 1710 | skein1024-336 1711 | multihash 1712 | 0xb38a 1713 | 1714 | 1715 | skein1024-344 1716 | multihash 1717 | 0xb38b 1718 | 1719 | 1720 | skein1024-352 1721 | multihash 1722 | 0xb38c 1723 | 1724 | 1725 | skein1024-360 1726 | multihash 1727 | 0xb38d 1728 | 1729 | 1730 | skein1024-368 1731 | multihash 1732 | 0xb38e 1733 | 1734 | 1735 | skein1024-376 1736 | multihash 1737 | 0xb38f 1738 | 1739 | 1740 | skein1024-384 1741 | multihash 1742 | 0xb390 1743 | 1744 | 1745 | skein1024-392 1746 | multihash 1747 | 0xb391 1748 | 1749 | 1750 | skein1024-400 1751 | multihash 1752 | 0xb392 1753 | 1754 | 1755 | skein1024-408 1756 | multihash 1757 | 0xb393 1758 | 1759 | 1760 | skein1024-416 1761 | multihash 1762 | 0xb394 1763 | 1764 | 1765 | skein1024-424 1766 | multihash 1767 | 0xb395 1768 | 1769 | 1770 | skein1024-432 1771 | multihash 1772 | 0xb396 1773 | 1774 | 1775 | skein1024-440 1776 | multihash 1777 | 0xb397 1778 | 1779 | 1780 | skein1024-448 1781 | multihash 1782 | 0xb398 1783 | 1784 | 1785 | skein1024-456 1786 | multihash 1787 | 0xb399 1788 | 1789 | 1790 | skein1024-464 1791 | multihash 1792 | 0xb39a 1793 | 1794 | 1795 | skein1024-472 1796 | multihash 1797 | 0xb39b 1798 | 1799 | 1800 | skein1024-480 1801 | multihash 1802 | 0xb39c 1803 | 1804 | 1805 | skein1024-488 1806 | multihash 1807 | 0xb39d 1808 | 1809 | 1810 | skein1024-496 1811 | multihash 1812 | 0xb39e 1813 | 1814 | 1815 | skein1024-504 1816 | multihash 1817 | 0xb39f 1818 | 1819 | 1820 | skein1024-512 1821 | multihash 1822 | 0xb3a0 1823 | 1824 | 1825 | skein1024-520 1826 | multihash 1827 | 0xb3a1 1828 | 1829 | 1830 | skein1024-528 1831 | multihash 1832 | 0xb3a2 1833 | 1834 | 1835 | skein1024-536 1836 | multihash 1837 | 0xb3a3 1838 | 1839 | 1840 | skein1024-544 1841 | multihash 1842 | 0xb3a4 1843 | 1844 | 1845 | skein1024-552 1846 | multihash 1847 | 0xb3a5 1848 | 1849 | 1850 | skein1024-560 1851 | multihash 1852 | 0xb3a6 1853 | 1854 | 1855 | skein1024-568 1856 | multihash 1857 | 0xb3a7 1858 | 1859 | 1860 | skein1024-576 1861 | multihash 1862 | 0xb3a8 1863 | 1864 | 1865 | skein1024-584 1866 | multihash 1867 | 0xb3a9 1868 | 1869 | 1870 | skein1024-592 1871 | multihash 1872 | 0xb3aa 1873 | 1874 | 1875 | skein1024-600 1876 | multihash 1877 | 0xb3ab 1878 | 1879 | 1880 | skein1024-608 1881 | multihash 1882 | 0xb3ac 1883 | 1884 | 1885 | skein1024-616 1886 | multihash 1887 | 0xb3ad 1888 | 1889 | 1890 | skein1024-624 1891 | multihash 1892 | 0xb3ae 1893 | 1894 | 1895 | skein1024-632 1896 | multihash 1897 | 0xb3af 1898 | 1899 | 1900 | skein1024-640 1901 | multihash 1902 | 0xb3b0 1903 | 1904 | 1905 | skein1024-648 1906 | multihash 1907 | 0xb3b1 1908 | 1909 | 1910 | skein1024-656 1911 | multihash 1912 | 0xb3b2 1913 | 1914 | 1915 | skein1024-664 1916 | multihash 1917 | 0xb3b3 1918 | 1919 | 1920 | skein1024-672 1921 | multihash 1922 | 0xb3b4 1923 | 1924 | 1925 | skein1024-680 1926 | multihash 1927 | 0xb3b5 1928 | 1929 | 1930 | skein1024-688 1931 | multihash 1932 | 0xb3b6 1933 | 1934 | 1935 | skein1024-696 1936 | multihash 1937 | 0xb3b7 1938 | 1939 | 1940 | skein1024-704 1941 | multihash 1942 | 0xb3b8 1943 | 1944 | 1945 | skein1024-712 1946 | multihash 1947 | 0xb3b9 1948 | 1949 | 1950 | skein1024-720 1951 | multihash 1952 | 0xb3ba 1953 | 1954 | 1955 | skein1024-728 1956 | multihash 1957 | 0xb3bb 1958 | 1959 | 1960 | skein1024-736 1961 | multihash 1962 | 0xb3bc 1963 | 1964 | 1965 | skein1024-744 1966 | multihash 1967 | 0xb3bd 1968 | 1969 | 1970 | skein1024-752 1971 | multihash 1972 | 0xb3be 1973 | 1974 | 1975 | skein1024-760 1976 | multihash 1977 | 0xb3bf 1978 | 1979 | 1980 | skein1024-768 1981 | multihash 1982 | 0xb3c0 1983 | 1984 | 1985 | skein1024-776 1986 | multihash 1987 | 0xb3c1 1988 | 1989 | 1990 | skein1024-784 1991 | multihash 1992 | 0xb3c2 1993 | 1994 | 1995 | skein1024-792 1996 | multihash 1997 | 0xb3c3 1998 | 1999 | 2000 | skein1024-800 2001 | multihash 2002 | 0xb3c4 2003 | 2004 | 2005 | skein1024-808 2006 | multihash 2007 | 0xb3c5 2008 | 2009 | 2010 | skein1024-816 2011 | multihash 2012 | 0xb3c6 2013 | 2014 | 2015 | skein1024-824 2016 | multihash 2017 | 0xb3c7 2018 | 2019 | 2020 | skein1024-832 2021 | multihash 2022 | 0xb3c8 2023 | 2024 | 2025 | skein1024-840 2026 | multihash 2027 | 0xb3c9 2028 | 2029 | 2030 | skein1024-848 2031 | multihash 2032 | 0xb3ca 2033 | 2034 | 2035 | skein1024-856 2036 | multihash 2037 | 0xb3cb 2038 | 2039 | 2040 | skein1024-864 2041 | multihash 2042 | 0xb3cc 2043 | 2044 | 2045 | skein1024-872 2046 | multihash 2047 | 0xb3cd 2048 | 2049 | 2050 | skein1024-880 2051 | multihash 2052 | 0xb3ce 2053 | 2054 | 2055 | skein1024-888 2056 | multihash 2057 | 0xb3cf 2058 | 2059 | 2060 | skein1024-896 2061 | multihash 2062 | 0xb3d0 2063 | 2064 | 2065 | skein1024-904 2066 | multihash 2067 | 0xb3d1 2068 | 2069 | 2070 | skein1024-912 2071 | multihash 2072 | 0xb3d2 2073 | 2074 | 2075 | skein1024-920 2076 | multihash 2077 | 0xb3d3 2078 | 2079 | 2080 | skein1024-928 2081 | multihash 2082 | 0xb3d4 2083 | 2084 | 2085 | skein1024-936 2086 | multihash 2087 | 0xb3d5 2088 | 2089 | 2090 | skein1024-944 2091 | multihash 2092 | 0xb3d6 2093 | 2094 | 2095 | skein1024-952 2096 | multihash 2097 | 0xb3d7 2098 | 2099 | 2100 | skein1024-960 2101 | multihash 2102 | 0xb3d8 2103 | 2104 | 2105 | skein1024-968 2106 | multihash 2107 | 0xb3d9 2108 | 2109 | 2110 | skein1024-976 2111 | multihash 2112 | 0xb3da 2113 | 2114 | 2115 | skein1024-984 2116 | multihash 2117 | 0xb3db 2118 | 2119 | 2120 | skein1024-992 2121 | multihash 2122 | 0xb3dc 2123 | 2124 | 2125 | skein1024-1000 2126 | multihash 2127 | 0xb3dd 2128 | 2129 | 2130 | skein1024-1008 2131 | multihash 2132 | 0xb3de 2133 | 2134 | 2135 | skein1024-1016 2136 | multihash 2137 | 0xb3df 2138 | 2139 | 2140 | skein1024-1024 2141 | multihash 2142 | 0xb3e0 2143 | 2144 | 2145 | 2146 | 2147 | 2148 | For each of the above entries, this document serves as the reference. 2149 | 2150 | 2151 |
2152 | 2153 |
2154 | 2155 |
2156 | 2157 |
2158 | 2159 | Base-encoding identifiers can be registered using the procedure 2160 | described herein. 2161 | 2162 | 2163 | 2164 | Base-encodings are registered using the Expert Review policy (see 2165 | Section 4.5 of ). The goal of the registry 2166 | is to reflect common use of codecs on the Internet. Therefore, 2167 | the expert(s) should be strongly biased towards approving 2168 | registrations, unless they are abusive, frivolous, not likely 2169 | to be used on the Internet, or actively harmful to the Internet 2170 | and/or the Web (not merely aesthetically displeasing or 2171 | architecturally dubious). Expert(s) can withhold registration 2172 | of codecs that are too general for the proposal application. 2173 | 2174 | 2175 | 2176 | Expert(s) will clearly identify any issues that cause a 2177 | registration to be refused. Advice about the semantics of a 2178 | proposed codec can be given, but if it does not block registration, 2179 | this should be explicitly stated. 2180 | 2181 | 2182 | 2183 | When a request if approved, the expert(s) shall inform IANA, and 2184 | the regstration will be processed. The IESG is the final arbiter 2185 | of any objection. 2186 | 2187 | 2188 | 2189 | The Multibase Registry is located at https://www.iana.org/assignments/multiformat-base. Registration requests can be made by following 2190 | instructions located there or by sending an email to the multiformat-codecs@ietf.org mailing list. 2191 | 2192 | 2193 | 2194 | Registration requests consist of at least the following information: 2195 | 2196 | *Name*: The name of base-encoding 2197 | *Prefix*: The requested prefix identifier 2198 | *Description*: An optional short text description of the base encoding. 2199 | *Status*: An indicator of the current implementation status of the encoding and prefix. MUST be one of "draft", "candidate", or 2200 | "default". 2201 | *Reference*: A reference to the document that specifies the base encoding, preferably including a URI that can be used to retrieve a copy of the document. An indication of the relevant section(s) can also be included but is not required. 2202 | 2203 | 2204 | 2205 | 2206 | Each of the Status field values indicates the following meanings: 2207 | 2208 | *draft*: The encoding has been proposed but is not widely implemented and may be removed in the future. 2209 | *candidate*: The encoding is mature and widely implemented by many but not all implementations. 2210 | *default*: The encoding SHOULD be implemented by all implementations and are widely used. 2211 | 2212 | 2213 | 2214 | 2215 | The expert(s) can change the Status of a registration at any time. 2216 | 2217 | 2218 | 2219 | The expert(s) can define additional fields to be collected in 2220 | the registry. 2221 | 2222 | 2223 | 2224 | Registrations SHOULD reference a freely available, stable 2225 | specification. 2226 | 2227 | 2228 | 2229 | Note that base encoding can be registered by third parties (including 2230 | the expert(s)), if the expert(s) determine that an unregistered 2231 | base encoding is widely deployed and not likely to be registered in a 2232 | timely manner otherwise. Such registrations still are subject to the 2233 | requirements defined. 2234 | 2235 | 2236 |
2237 | 2238 |
2239 | 2240 | 2241 | The initial contents of the Multibase Registry are as follows: 2242 | 2243 | 2244 | 2245 | Encoding 2246 | Code 2247 | Description 2248 | Status 2249 | 2250 | identity 2251 | 0x00 2252 | 8-bit binary (encoder and decoder keeps data unmodified) 2253 | default 2254 | 2255 | base2 2256 | 0 2257 | binary (01010101) 2258 | candidate 2259 | 2260 | base8 2261 | 7 2262 | octal 2263 | draft 2264 | 2265 | base10 2266 | 9 2267 | decimal 2268 | draft 2269 | 2270 | base16 2271 | f 2272 | hexadecimal 2273 | default 2274 | 2275 | base16upper 2276 | F 2277 | hexadecimal 2278 | default 2279 | 2280 | base32hex 2281 | v 2282 | rfc4648 no padding - highest char 2283 | candidate 2284 | 2285 | base32hexupper 2286 | V 2287 | rfc4648 no padding - highest char 2288 | candidate 2289 | 2290 | base32hexpad 2291 | t 2292 | rfc4648 with padding 2293 | candidate 2294 | 2295 | base32hexpadupper 2296 | T 2297 | rfc4648 with padding 2298 | candidate 2299 | 2300 | base32 2301 | b 2302 | rfc4648 no padding 2303 | default 2304 | 2305 | base32upper 2306 | B 2307 | rfc4648 no padding 2308 | default 2309 | 2310 | base32pad 2311 | c 2312 | rfc4648 with padding 2313 | candidate 2314 | 2315 | base32padupper 2316 | C 2317 | rfc4648 with padding 2318 | candidate 2319 | 2320 | base32z 2321 | h 2322 | z-base-32 (used by Tahoe-LAFS) 2323 | draft 2324 | 2325 | base58flickr 2326 | Z 2327 | base58 flicker 2328 | candidate 2329 | 2330 | base58btc 2331 | z 2332 | base58 bitcoin 2333 | default 2334 | 2335 | base64 2336 | m 2337 | rfc4648 no padding 2338 | default 2339 | 2340 | base64pad 2341 | M 2342 | rfc4648 with padding - MIME encoding 2343 | candidate 2344 | 2345 | base64url 2346 | u 2347 | rfc4648 no padding 2348 | default 2349 | 2350 | base64urlpad 2351 | U 2352 | rfc4648 with padding 2353 | default 2354 | 2355 | 2356 | 2357 | For each of the above entries, this document serves as the reference. 2358 | 2359 | 2360 |
2361 | 2362 |
2363 | 2364 |
2365 | 2366 |
2367 | 2368 | 2369 | &rfc2119; 2370 | &rfc5234; 2371 | &rfc8126; 2372 | 2373 | 2374 | 2375 | DWARF Debugging Information Format 2376 | 2377 | DWARF Debugging Information Format Workgroup 2378 | 2379 | 2380 | 2381 | 2382 | This document defines the format for the information generated by compilers, assemblers and linkage editors, that is necessary for symbolic, source-level debugging. The debugging information format does not favor the design of any compiler or debugger. Instead, the goal is to create a method of communicating an accurate picture of the source program to any debugger in a form that is extensible to different languages while retaining backward compatibility 2383 | 2384 | 2385 | 2386 | 2387 | 2388 | 2389 | 2390 |
2391 | --------------------------------------------------------------------------------