├── .github └── workflows │ ├── generated-pr.yml │ └── stale.yml ├── LICENSE ├── README.md ├── img ├── multihash.001.jpg ├── multihash.002.jpg ├── multihash.003.jpg ├── multihash.004.jpg ├── multihash.005.jpg ├── multihash.006.jpg ├── multihash.007.jpg └── multihash.008.jpg └── tests ├── sharness ├── .gitignore ├── Makefile ├── lib │ ├── install-sharness.sh │ └── test-lib.sh ├── t0000-sharness.sh ├── t0010-multihash-basics.sh ├── t0020-sha1.sh └── t0030-sha2.sh └── values ├── Makefile ├── gen_multihashes.py ├── gen_random.py ├── random_vals.csv └── test_cases.csv /.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 13 | all 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 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # multihash 2 | 3 | [![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](https://protocol.ai/) 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 | > Self identifying hashes 9 | 10 | Multihash is a protocol for differentiating outputs from various well-established cryptographic hash functions, addressing size + encoding considerations. 11 | 12 | It is useful to write applications that future-proof their use of hashes, and allow multiple hash functions to coexist. See [jbenet/random-ideas#1](https://github.com/jbenet/random-ideas/issues/1) for a longer discussion. 13 | 14 | ## Table of Contents 15 | 16 | - [Table of Contents](#table-of-contents) 17 | - [Example](#example) 18 | - [Format](#format) 19 | - [Implementations](#implementations) 20 | - [Table for Multihash](#table-for-multihash) 21 | - [Other Tables](#other-tables) 22 | - [Notes](#notes) 23 | - [Multihash and randomness](#multihash-and-randomness) 24 | - [Insecure / obsolete hash functions](#insecure--obsolete-hash-functions) 25 | - [Non-cryptographic hash functions](#non-cryptographic-hash-functions) 26 | - [Visual Examples](#visual-examples) 27 | - [Maintainers](#maintainers) 28 | - [Contribute](#contribute) 29 | - [License](#license) 30 | 31 | ## Example 32 | 33 | Outputs of `.encode(multihash(, ))`: 34 | 35 | ``` 36 | # sha1 - 0x11 - sha1("multihash") 37 | 111488c2f11fb2ce392acb5b2986e640211c4690073e # sha1 in hex 38 | CEKIRQXRD6ZM4OJKZNNSTBXGIAQRYRUQA47A==== # sha1 in base32 39 | 5dsgvJGnvAfiR3K6HCBc4hcokSfmjj # sha1 in base58 40 | ERSIwvEfss45KstbKYbmQCEcRpAHPg== # sha1 in base64 41 | 42 | # sha2-256 0x12 - sha2-256("multihash") 43 | 12209cbc07c3f991725836a3aa2a581ca2029198aa420b9d99bc0e131d9f3e2cbe47 # sha2-256 in hex 44 | CIQJZPAHYP4ZC4SYG2R2UKSYDSRAFEMYVJBAXHMZXQHBGHM7HYWL4RY= # sha256 in base32 45 | QmYtUc4iTCbbfVSDNKvtQqrfyezPPnFvE33wFmutw9PBBk # sha256 in base58 46 | EiCcvAfD+ZFyWDajqipYHKICkZiqQgudmbwOEx2fPiy+Rw== # sha256 in base64 47 | ``` 48 | 49 | Note: You should consider using [multibase](https://github.com/multiformats/multibase) to base-encode these hashes instead of base-encoding them directly. 50 | 51 | ## Format 52 | 53 | ``` 54 | 55 | ``` 56 | 57 | Binary example (only 4 bytes for simplicity): 58 | 59 | ``` 60 | fn code dig size hash digest 61 | -------- -------- ----------------------------------- 62 | 00010001 00000100 10110110 11111000 01011100 10110101 63 | sha1 4 bytes 4 byte sha1 digest 64 | ``` 65 | 66 | > Why have digest size as a separate number? 67 | 68 | Because otherwise you end up with a function code really meaning "function-and-digest-size-code". Makes using custom digest sizes annoying, and is less flexible. 69 | 70 | > Why isn't the size first? 71 | 72 | Because aesthetically I prefer the code first. You already have to write your stream parsing code to understand that a single byte already means "a length in bytes more to skip". Reversing these doesn't buy you much. 73 | 74 | > Why varints? 75 | 76 | So that we have no limitation on functions or lengths. 77 | 78 | > What kind of varints? 79 | 80 | A Most Significant Bit unsigned varint (also called base-128 varints), as defined by the [multiformats/unsigned-varint](https://github.com/multiformats/unsigned-varint). 81 | 82 | > Don't we have to agree on a table of functions? 83 | 84 | Yes, but we already have to agree on functions, so this is not hard. The table even leaves some room for custom function codes. 85 | 86 | ## Implementations 87 | 88 | 89 | 90 | - [clj-multihash](//github.com/multiformats/clj-multihash) 91 | - [cpp-multihash](//github.com/cpp-ipfs/cpp-multihash) 92 | - [dart-multihash](https://github.com/dwyl/dart_multihash) 93 | - elixir-multihash 94 | - [elixir-multihash](//github.com/zabirauf/ex_multihash) 95 | - [elixir-multihashing](//github.com/candeira/ex_multihashing) 96 | - [go-multihash](//github.com/multiformats/go-multihash) 97 | - [haskell-multihash](//github.com/LukeHoersten/multihash) 98 | - js-multihash 99 | - [js-multiformats](//github.com/multiformats/js-multiformats) 100 | - [js-multihash](//github.com/multiformats/js-multihash) (archived) 101 | - java-multihash 102 | - [multiformats/java-multihash](//github.com/multiformats/java-multihash) 103 | - [copper multicodec and multihash](https://github.com/filip26/copper-multicodec) 104 | - kotlin-multihash 105 | - [kotlin-multihash](//github.com/changjiashuai/kotlin-multihash) 106 | - [multiformat](https://github.com/erwin-kok/multiformat) 107 | - net-multihash 108 | - [cs-multihash](//github.com/multiformats/cs-multihash) 109 | - [MultiHash.Net](//github.com/MCGPPeters/MultiHash.Net) 110 | - [net-ipfs-core](//github.com/richardschneider/net-ipfs-core) 111 | - [nim-libp2p](//github.com/status-im/nim-libp2p) 112 | - [ocaml-multihash](//github.com/patricoferris/ocaml-multihash) 113 | - [php-multihash](//github.com/Fil/php-multihash) 114 | - python-multihash 115 | - [multiformats/py-multihash](//github.com/multiformats/py-multihash) 116 | - [ivilata/pymultihash](//github.com/ivilata/pymultihash) 117 | - `multihash` sub-module of Python module [multiformats](//github.com/hashberg-io/multiformats) 118 | - [ruby-multihash](//github.com/neocities/ruby-multihash) 119 | - rust-multihash 120 | - [by @multiformats](//github.com/multiformats/rust-multihash) 121 | - [by @google](//github.com/google/rust-multihash) 122 | - [scala-multihash](//github.com/mediachain/scala-multihash) 123 | - swift-multihash 124 | - [by @multiformats](//github.com/multiformats/SwiftMultihash) 125 | - [by @yeeth](//github.com/yeeth/Multihash.swift) 126 | - [by @ATProtoKit](https://github.com/ATProtoKit/MultiformatsKit) 127 | - [zig-multihash](https://github.com/zen-eth/multiformats-zig) 128 | 129 | ## Table for Multihash 130 | 131 | We use a single [Multicodec](https://github.com/multiformats/multicodec) [table](https://github.com/multiformats/multicodec/blob/master/table.csv) across all of our multiformat projects. The shared namespace reduces the chances of accidentally interpreting a code in the wrong context. Multihash entries are identified with a `multihash` value in the `tag` column. 132 | 133 | ### Other Tables 134 | 135 | Cannot find a good standard on this. Found some _different_ IANA ones: 136 | 137 | - https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-18 138 | - http://tools.ietf.org/html/rfc6920#section-9.4 139 | 140 | They disagree. :( 141 | 142 | ## Notes 143 | 144 | ### Multihash and randomness 145 | 146 | **Obviously multihash values bias the first two bytes**. Do not expect them to be uniformly distributed. The entropy size is `len(multihash) - 2`. Skip the first two bytes when using them with bloom filters, etc. Why not _ap_pend instead of _pre_pend? Because when reading a stream of hashes, you can know the length of the whole value, and allocate the right amount of memory, skip it, or discard it. 147 | 148 | ### Insecure / obsolete hash functions 149 | 150 | **Obsolete and deprecated hash functions are included** in this list. [MD4](https://en.wikipedia.org/wiki/MD4), [MD5](https://en.wikipedia.org/wiki/MD5) and [SHA-1](https://en.wikipedia.org/wiki/SHA-1) should no longer be used for cryptographic purposes, but since many such hashes already exist they are included in this specification and may be implemented in multihash libraries. 151 | 152 | ### Non-cryptographic hash functions 153 | 154 | Multihash is intended for *"well-established cryptographic hash functions"* as **non-cryptographic hash functions are not suitable for content addressing systems**. However, there may be use-cases where it is desireable to identify non-cryptographic hash functions or their digests by use of a multihash. Non-cryptographic hash functions are identified in the [Multicodec table](https://github.com/multiformats/multicodec/blob/master/table.csv) with a tag `hash` value in the `tag` column. 155 | 156 | ## Visual Examples 157 | 158 | These are visual aids that help tell the story of why Multihash matters. 159 | 160 | ![](https://raw.githubusercontent.com/multiformats/multihash/master/img/multihash.001.jpg) 161 | 162 | #### Consider these 4 different hashes of same input 163 | 164 | ![](https://raw.githubusercontent.com/multiformats/multihash/master/img/multihash.002.jpg) 165 | 166 | #### Same length: 256 bits 167 | 168 | ![](https://raw.githubusercontent.com/multiformats/multihash/master/img/multihash.003.jpg) 169 | 170 | #### Different hash functions 171 | 172 | ![](https://raw.githubusercontent.com/multiformats/multihash/master/img/multihash.004.jpg) 173 | 174 | #### Idea: self-describe the values to distinguish 175 | 176 | ![](https://raw.githubusercontent.com/multiformats/multihash/master/img/multihash.005.jpg) 177 | 178 | #### Multihash: fn code + length prefix 179 | 180 | ![](https://raw.githubusercontent.com/multiformats/multihash/master/img/multihash.006.jpg) 181 | 182 | #### Multihash: a pretty good multiformat 183 | 184 | ![](https://raw.githubusercontent.com/multiformats/multihash/master/img/multihash.007.jpg) 185 | 186 | #### Multihash: has a bunch of implementations already 187 | 188 | ![](https://raw.githubusercontent.com/multiformats/multihash/master/img/multihash.008.jpg) 189 | 190 | ## Contribute 191 | 192 | Contributions welcome. Please check out [the issues](https://github.com/multiformats/multihash/issues). 193 | 194 | 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). 195 | 196 | Small note: If editing the README, please conform to the [standard-readme](https://github.com/RichardLitt/standard-readme) specification. 197 | 198 | ## License 199 | 200 | 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. 201 | -------------------------------------------------------------------------------- /img/multihash.001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/multiformats/multihash/b43ec1026a610fa87878e53b3daecf3a14b3ef6f/img/multihash.001.jpg -------------------------------------------------------------------------------- /img/multihash.002.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/multiformats/multihash/b43ec1026a610fa87878e53b3daecf3a14b3ef6f/img/multihash.002.jpg -------------------------------------------------------------------------------- /img/multihash.003.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/multiformats/multihash/b43ec1026a610fa87878e53b3daecf3a14b3ef6f/img/multihash.003.jpg -------------------------------------------------------------------------------- /img/multihash.004.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/multiformats/multihash/b43ec1026a610fa87878e53b3daecf3a14b3ef6f/img/multihash.004.jpg -------------------------------------------------------------------------------- /img/multihash.005.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/multiformats/multihash/b43ec1026a610fa87878e53b3daecf3a14b3ef6f/img/multihash.005.jpg -------------------------------------------------------------------------------- /img/multihash.006.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/multiformats/multihash/b43ec1026a610fa87878e53b3daecf3a14b3ef6f/img/multihash.006.jpg -------------------------------------------------------------------------------- /img/multihash.007.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/multiformats/multihash/b43ec1026a610fa87878e53b3daecf3a14b3ef6f/img/multihash.007.jpg -------------------------------------------------------------------------------- /img/multihash.008.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/multiformats/multihash/b43ec1026a610fa87878e53b3daecf3a14b3ef6f/img/multihash.008.jpg -------------------------------------------------------------------------------- /tests/sharness/.gitignore: -------------------------------------------------------------------------------- 1 | lib/sharness/ 2 | test-results/ 3 | trash directory.*.sh/ 4 | -------------------------------------------------------------------------------- /tests/sharness/Makefile: -------------------------------------------------------------------------------- 1 | # Run sharness tests 2 | # 3 | # Copyright (c) 2014 Christian Couder 4 | # MIT Licensed; see the LICENSE file in this repository. 5 | # 6 | # NOTE: run with TEST_VERBOSE=1 for verbose sharness tests. 7 | 8 | T = $(sort $(wildcard t[0-9][0-9][0-9][0-9]-*.sh)) 9 | LIBDIR = lib 10 | SHARNESSDIR = sharness 11 | AGGREGATE = $(LIBDIR)/$(SHARNESSDIR)/aggregate-results.sh 12 | 13 | 14 | # Add below the binaries that this project generates or needs. 15 | # For example: 16 | # BINS = bin/ipfs 17 | BINS = 18 | 19 | all: aggregate 20 | 21 | clean: clean-test-results 22 | @echo "*** $@ ***" 23 | # Clean binaries below. 24 | # For example: 25 | # -rm -rf bin/ipfs 26 | 27 | clean-test-results: 28 | @echo "*** $@ ***" 29 | -rm -rf test-results 30 | 31 | $(T): clean-test-results deps 32 | @echo "*** $@ ***" 33 | ./$@ 34 | 35 | aggregate: clean-test-results $(T) 36 | @echo "*** $@ ***" 37 | ls test-results/t*-*.sh.*.counts | $(AGGREGATE) 38 | 39 | # Add below some needed dependencies. 40 | # For example: 41 | # deps: sharness $(BINS) curl 42 | deps: sharness $(BINS) 43 | 44 | sharness: 45 | @echo "*** checking $@ ***" 46 | lib/install-sharness.sh 47 | 48 | # Add below other targets like: 49 | # - the targets needed to build binaries, 50 | # - targets using special compile flags, 51 | # - targets to check or install dependencies. 52 | # 53 | # For example: 54 | # 55 | # GOFLAGS = 56 | # 57 | # bin/%: FORCE 58 | # cd .. && make GOFLAGS=$(GOFLAGS) $@ 59 | # 60 | # race: 61 | # make GOFLAGS=-race all 62 | # 63 | # curl: 64 | # @which curl >/dev/null || (echo "Please install curl!" && false) 65 | 66 | .PHONY: all clean clean-test-results $(T) aggregate deps sharness FORCE 67 | 68 | -------------------------------------------------------------------------------- /tests/sharness/lib/install-sharness.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # install-sharness.sh 3 | # 4 | # Copyright (c) 2014 Juan Batiz-Benet 5 | # Copyright (c) 2015 Christian Couder 6 | # MIT Licensed; see the LICENSE file in this repository. 7 | # 8 | # This script checks that Sharness is installed in: 9 | # 10 | # $(pwd)/$clonedir/$sharnessdir/ 11 | # 12 | # where $clonedir and $sharnessdir are configured below. 13 | # 14 | # If Sharness is not installed, this script will clone it 15 | # from $urlprefix (defined below). 16 | # 17 | # If Sharness is not uptodate with $version (defined below), 18 | # this script will fetch and will update the installed 19 | # version to $version. 20 | # 21 | 22 | # settings 23 | version=2298d6a491f43da26a89175173b6b56edd4313dd 24 | urlprefix=https://github.com/mlafeldt/sharness.git 25 | clonedir=lib 26 | sharnessdir=sharness 27 | 28 | if test -f "$clonedir/$sharnessdir/SHARNESS_VERSION_$version" 29 | then 30 | # There is the right version file. Great, we are done! 31 | exit 0 32 | fi 33 | 34 | die() { 35 | echo >&2 "$@" 36 | exit 1 37 | } 38 | 39 | checkout_version() { 40 | git checkout "$version" || die "Could not checkout '$version'" 41 | rm -f SHARNESS_VERSION_* || die "Could not remove 'SHARNESS_VERSION_*'" 42 | touch "SHARNESS_VERSION_$version" || die "Could not create 'SHARNESS_VERSION_$version'" 43 | echo "Sharness version $version is checked out!" 44 | } 45 | 46 | if test -d "$clonedir/$sharnessdir/.git" 47 | then 48 | # We need to update sharness! 49 | cd "$clonedir/$sharnessdir" || die "Could not cd into '$clonedir/$sharnessdir' directory" 50 | git fetch || die "Could not fetch to update sharness" 51 | else 52 | # We need to clone sharness! 53 | mkdir -p "$clonedir" || die "Could not create '$clonedir' directory" 54 | cd "$clonedir" || die "Could not cd into '$clonedir' directory" 55 | 56 | git clone "$urlprefix" || die "Could not clone '$urlprefix'" 57 | cd "$sharnessdir" || die "Could not cd into '$sharnessdir' directory" 58 | fi 59 | 60 | checkout_version 61 | -------------------------------------------------------------------------------- /tests/sharness/lib/test-lib.sh: -------------------------------------------------------------------------------- 1 | # Test framework for multihash 2 | # 3 | # Copyright (c) 2016 Christian Couder 4 | # MIT Licensed; see the LICENSE file in this repository. 5 | # 6 | # We are using sharness (https://github.com/chriscool/sharness) 7 | # which was extracted from the Git test framework. 8 | 9 | # Test the first 'multihash' tool available in the PATH. 10 | 11 | # Add current bin directory to path, in case multihash tool is there. 12 | PATH=$(pwd)/bin:${PATH} 13 | 14 | # Set sharness verbosity. we set the env var directly as 15 | # it's too late to pass in --verbose, and --verbose is harder 16 | # to pass through in some cases. 17 | test "$TEST_VERBOSE" = 1 && verbose=t 18 | 19 | # Assert a multihash tool, either given by the MULTIHASH_BIN env 20 | # variable or called 'multihash', is available. 21 | if test -n "$MULTIHASH_BIN" 22 | then 23 | echo "Testing '$MULTIHASH_BIN' from MULTIHASH_BIN env variable." 24 | else 25 | echo "Testing 'multihash' as MULTIHASH_BIN env variable is empty." 26 | MULTIHASH_BIN="multihash" 27 | fi 28 | export MULTIHASH_BIN 29 | type "$MULTIHASH_BIN" >/dev/null || { 30 | echo >&2 "Cannot find '$MULTIHASH_BIN'." 31 | echo >&2 "Please make sure it is either:" 32 | echo >&2 " - a path to an executable file, or" 33 | echo >&2 " - the name of an executable file in your PATH ($PATH)." 34 | exit 1 35 | } 36 | 37 | SHARNESS_LIB="lib/sharness/sharness.sh" 38 | 39 | . "$SHARNESS_LIB" || { 40 | echo >&2 "Cannot source: $SHARNESS_LIB" 41 | echo >&2 "Please check Sharness installation." 42 | exit 1 43 | } 44 | 45 | # Please put multihash specific shell functions below 46 | 47 | if type shasum >/dev/null; then 48 | export SHA1SUMBIN="shasum" && 49 | test_set_prereq SHA1SUM && 50 | export SHA256SUMBIN="shasum -a 256" && 51 | test_set_prereq SHA256SUM && 52 | export SHA512SUMBIN="shasum -a 512" && 53 | test_set_prereq SHA512SUM 54 | else 55 | if type sha1sum >/dev/null; then 56 | export SHA1SUMBIN="sha1sum" && 57 | test_set_prereq SHA1SUM 58 | fi 59 | if type sha256sum >/dev/null; then 60 | export SHA256SUMBIN="sha256sum" && 61 | test_set_prereq SHA256SUM 62 | fi 63 | if type sha512sum >/dev/null; then 64 | export SHA512SUMBIN="sha512sum" && 65 | test_set_prereq SHA512SUM 66 | fi 67 | fi 68 | -------------------------------------------------------------------------------- /tests/sharness/t0000-sharness.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | test_description="Show basic features of Sharness" 4 | 5 | . ./lib/sharness/sharness.sh 6 | 7 | test_expect_success "Success is reported like this" " 8 | echo hello world | grep hello 9 | " 10 | 11 | test_expect_success "Commands are chained this way" " 12 | test x = 'x' && 13 | test 2 -gt 1 && 14 | echo success 15 | " 16 | 17 | return_42() { 18 | echo "Will return soon" 19 | return 42 20 | } 21 | 22 | test_expect_success "You can test for a specific exit code" " 23 | test_expect_code 42 return_42 24 | " 25 | 26 | test_expect_failure "We expect this to fail" " 27 | test 1 = 2 28 | " 29 | 30 | test_done 31 | 32 | # vi: set ft=sh : 33 | -------------------------------------------------------------------------------- /tests/sharness/t0010-multihash-basics.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | test_description="Test multihash basics" 4 | 5 | . lib/test-lib.sh 6 | 7 | test_expect_success "current dir is writable" ' 8 | echo "It works!" >test.txt 9 | ' 10 | 11 | test_expect_success "'$MULTIHASH_BIN --help' looks good" ' 12 | "$MULTIHASH_BIN" --help >actual 2>&1 || true && 13 | egrep -i "usage" actual >/dev/null 14 | ' 15 | 16 | for opt in algorithm check encoding length quiet help 17 | do 18 | test_expect_success "'$MULTIHASH_BIN --help' mention -$opt option" ' 19 | egrep "[-]$opt" actual >/dev/null 20 | ' 21 | done 22 | 23 | test_expect_success "'$MULTIHASH_BIN test.txt' works" ' 24 | "$MULTIHASH_BIN" test.txt >actual 25 | ' 26 | 27 | test_expect_success "'$MULTIHASH_BIN test.txt' output looks good" ' 28 | echo "QmTwovvskpD1hzuJA8wLA73wjxSisrVknKeNvGZVyjDguU" >expected && 29 | test_cmp expected actual 30 | ' 31 | 32 | test_done 33 | 34 | # vi: set ft=sh : 35 | -------------------------------------------------------------------------------- /tests/sharness/t0020-sha1.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # Copyright (c) 2015 Christian Couder 4 | # MIT Licensed; see the LICENSE file in this repository. 5 | # 6 | 7 | test_description="sha1 tests" 8 | 9 | . lib/test-lib.sh 10 | 11 | test_expect_success "setup sha1 tests" ' 12 | echo "Hash me!" >hash_me.txt && 13 | SHA1=bc6f2c3cd945bc754789e50b2f68deee2f421810 && 14 | echo "1114$SHA1" >expected 15 | ' 16 | 17 | test_expect_success "'$MULTIHASH_BIN -a=sha1 -e=hex' works" ' 18 | "$MULTIHASH_BIN" -a=sha1 -e=hex hash_me.txt >actual 19 | ' 20 | 21 | test_expect_success "'$MULTIHASH_BIN -a=sha1 -e=hex' output looks good" ' 22 | test_cmp expected actual 23 | ' 24 | 25 | test_expect_success SHA1SUM "check hash using '$SHA1SUMBIN'" ' 26 | echo "$SHA1 hash_me.txt" >expected && 27 | $SHA1SUMBIN hash_me.txt >actual && 28 | test_cmp expected actual 29 | ' 30 | 31 | test_done 32 | -------------------------------------------------------------------------------- /tests/sharness/t0030-sha2.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # Copyright (c) 2016 Christian Couder 4 | # MIT Licensed; see the LICENSE file in this repository. 5 | # 6 | 7 | test_description="sha2 tests" 8 | 9 | . lib/test-lib.sh 10 | 11 | test_expect_success "setup sha2 tests" ' 12 | echo "Hash me!" >hash_me.txt && 13 | SHA256=c16bdce7e126ff8e241a9893ccd908c292cd0e54c403145326eb0c567071a613 && 14 | SHA512=4c4a59a7d958cff035eb7d752b319b90337037e352b89d58aa5be29ef051ea0a565133781aa3279384654274c4786893287ea8037f0a1a15d9b40ea0bc4be73c && 15 | echo "1220$SHA256" >expected256 && 16 | echo "1340$SHA512" >expected512 17 | ' 18 | 19 | test_expect_success "'$MULTIHASH_BIN -a=sha2-256 -e=hex' works" ' 20 | "$MULTIHASH_BIN" -a=sha2-256 -e=hex hash_me.txt >actual256 21 | ' 22 | 23 | test_expect_success "'$MULTIHASH_BIN -a=sha2-256 -e=hex' output looks good" ' 24 | test_cmp expected256 actual256 25 | ' 26 | 27 | test_expect_success "'$MULTIHASH_BIN -a=sha2-512 -e=hex' works" ' 28 | "$MULTIHASH_BIN" -a=sha2-512 -e=hex hash_me.txt >actual512 29 | ' 30 | 31 | test_expect_success "'$MULTIHASH_BIN -a=sha2-512 -e=hex' output looks good" ' 32 | test_cmp expected512 actual512 33 | ' 34 | 35 | test_expect_success SHA256SUM "check sha2-256 hash using '$SHA256SUMBIN'" ' 36 | echo "$SHA256 hash_me.txt" >expected && 37 | $SHA256SUMBIN hash_me.txt >actual && 38 | test_cmp expected actual 39 | ' 40 | 41 | test_expect_success SHA512SUM "check sha2-512 hash using '$SHA512SUMBIN'" ' 42 | echo "$SHA512 hash_me.txt" >expected && 43 | $SHA512SUMBIN hash_me.txt >actual && 44 | test_cmp expected actual 45 | ' 46 | 47 | test_done 48 | -------------------------------------------------------------------------------- /tests/values/Makefile: -------------------------------------------------------------------------------- 1 | 2 | main: test_cases.csv 3 | 4 | clean: 5 | rm -f random_vals.csv test_cases.csv 6 | 7 | # multihash random_vals with all hash functions 8 | test_cases.csv: random_vals.csv 9 | ./gen_multihashes.py <$^ >$@ 10 | 11 | # make some random values 12 | random_vals.csv: 13 | ./gen_random.py 20 42 >$@ 14 | 15 | # make sure a multihash is installed 16 | deps: 17 | @multihash /dev/null || (echo "a multihash binary must be installed" && exit 1) 18 | -------------------------------------------------------------------------------- /tests/values/gen_multihashes.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python2 2 | 3 | import os 4 | import sys 5 | import subprocess 6 | 7 | # modify these to add more test cases 8 | algs = ['sha1', 'sha2-256', 'sha2-512', 'sha3'] 9 | sizes = [80, 160, 256, 512] 10 | 11 | def die(arg): 12 | print "error:", arg 13 | sys.exit(1) 14 | 15 | def require(tool): 16 | if os.system("which " + tool + ">/dev/null") is not 0: 17 | die("requires %s tool" % tool) 18 | 19 | def usage(code): 20 | print "usage:", sys.argv[0], "test_cases" 21 | print "output multihash test cases for every string in stdin" 22 | sys.exit(code) 23 | 24 | def multihash(val, alg, size): 25 | cmd = "multihash -a %s -l %d -e hex -q" % (alg, size) 26 | proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE) 27 | (out, err) = proc.communicate(val) 28 | 29 | # failed to process multihash 30 | if proc.returncode != 0: 31 | raise ValueError("multihash failed") 32 | 33 | # incorrect length (truncated shorter than desired length) 34 | shdbe = ((size / 8) + 2) * 2 35 | if shdbe != len(out): 36 | raise ValueError("incorrect multihash length: %s %s" % (len(out), shdbe)) 37 | 38 | return out 39 | 40 | def produce(val, alg, size): 41 | m = multihash(val, alg, size) 42 | return "%s,%s,%s,%s" % (alg, size, val, m) 43 | 44 | def gen_testcases(strings): 45 | for l in strings: 46 | l = l.strip() 47 | for a in algs: 48 | for s in sizes: 49 | try: 50 | yield produce(l, a, s) 51 | except ValueError, e: 52 | pass 53 | 54 | def main(): 55 | if '-h' in sys.argv or '--help' in sys.argv: 56 | usage(0) 57 | if len(sys.argv) != 1: 58 | usage(1) 59 | 60 | require("multihash") 61 | print "algorithm,bits,input,multihash" 62 | for t in gen_testcases(sys.stdin): 63 | print t 64 | 65 | if __name__ == "__main__": 66 | main() 67 | -------------------------------------------------------------------------------- /tests/values/gen_random.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python2 2 | 3 | import os 4 | import sys 5 | import random 6 | 7 | def usage(code): 8 | print "usage:", sys.argv[0], " " 9 | print "output random hex-encoded strings of bytes" 10 | sys.exit(code) 11 | 12 | hexcode = '0123456789abcdef' 13 | def randstr(length): 14 | return ''.join(random.choice(hexcode) for i in range(length)) 15 | 16 | def gen_strings(num, length): 17 | for i in range(0, num): 18 | yield randstr(length) 19 | 20 | def main(): 21 | if '-h' in sys.argv or '--help' in sys.argv: 22 | usage(0) 23 | if len(sys.argv) != 3: 24 | usage(1) 25 | 26 | num = int(sys.argv[1]) 27 | length = int(sys.argv[2]) 28 | if not (num > 0 and length > 0): 29 | usage(1) 30 | 31 | for s in gen_strings(num, length): 32 | print s 33 | 34 | if __name__ == "__main__": 35 | main() 36 | -------------------------------------------------------------------------------- /tests/values/random_vals.csv: -------------------------------------------------------------------------------- 1 | 431fb5d4c9b735ba1a34d0df045118806ae2336f2c 2 | 2d6db2d7882fa8b7d56e74b8e24036deb475de8c94 3 | 6c00022ba29d15926c4580332ded091e666f0ec5d9 4 | 1391551dc8f15110d256c493ed485bca8cfed07241 5 | 557f47c855a5ca40daa3c0904a1e43647b4021ce0c 6 | 4c44254356730838195a32cbb1b8be3bed4c6c05c0 7 | 3647da9e56b1afffa9921ce9a9caaa51ac8a166706 8 | f7f96cf1e683e6f7e752dab4613a1b1225889bb15d 9 | 8fc7992293335bb2e2f6d962f66734a652e495022e 10 | a244e61f124cd3590173e2809b1177ca611ff15e9a 11 | 8a461139f4d5078f6ff77af4fbc1befc775c0e0cb0 12 | eaf89d6d7fa2ee40c7357e3d627cbd1338009570f5 13 | 4c98758072933abd55fef35782cf37386db7ce4dce 14 | 79f28aba59f256868f8b7f868e75aedcab8b068be0 15 | fe2bd8cb6ad52767eae6fbd354ceb3e72e8f55669b 16 | 7f0bb0ac4dd2404c097dade4c8b2292ae2419b7a70 17 | b07cb1832e7e253f3eb7cf4029a82d881217d3c02f 18 | 29a53e335621740c0fbc8dd85970fa0311b0d58e25 19 | f6896cafdd752d9615f22017dfce1a281fb0598038 20 | 444a8ca03cce5b47991b3baf807f4eaa1d8175a72e 21 | -------------------------------------------------------------------------------- /tests/values/test_cases.csv: -------------------------------------------------------------------------------- 1 | algorithm,bits,input,multihash 2 | sha1,80,431fb5d4c9b735ba1a34d0df045118806ae2336f2c,110ae861e452cfd84dca9a17 3 | sha1,160,431fb5d4c9b735ba1a34d0df045118806ae2336f2c,1114e861e452cfd84dca9a176258c3d06e020a0c93d8 4 | sha2-256,80,431fb5d4c9b735ba1a34d0df045118806ae2336f2c,120affb31f07aa15348368c9 5 | sha2-256,160,431fb5d4c9b735ba1a34d0df045118806ae2336f2c,1214ffb31f07aa15348368c90c73a834dbf9f8710365 6 | sha2-256,256,431fb5d4c9b735ba1a34d0df045118806ae2336f2c,1220ffb31f07aa15348368c90c73a834dbf9f8710365860fa0fd4ddce9ac2782cc17 7 | sha2-512,80,431fb5d4c9b735ba1a34d0df045118806ae2336f2c,130aabffa1926b038a2f1833 8 | sha2-512,160,431fb5d4c9b735ba1a34d0df045118806ae2336f2c,1314abffa1926b038a2f1833092d93859ba2ee56e07a 9 | sha2-512,256,431fb5d4c9b735ba1a34d0df045118806ae2336f2c,1320abffa1926b038a2f1833092d93859ba2ee56e07a86b158200fc7d4d5d1eaf350 10 | sha2-512,512,431fb5d4c9b735ba1a34d0df045118806ae2336f2c,1340abffa1926b038a2f1833092d93859ba2ee56e07a86b158200fc7d4d5d1eaf350b0f0e511ea6f5043a9f4a7c7886f93355652114709d75b2db4c33741124fd4fe 11 | sha3,80,431fb5d4c9b735ba1a34d0df045118806ae2336f2c,140a9a7a8207a57d03e9c524 12 | sha3,160,431fb5d4c9b735ba1a34d0df045118806ae2336f2c,14149a7a8207a57d03e9c524ae7fd39563bfe1a466a3 13 | sha3,256,431fb5d4c9b735ba1a34d0df045118806ae2336f2c,14209a7a8207a57d03e9c524ae7fd39563bfe1a466a3a0323875eba8b034a1d59c3b 14 | sha3,512,431fb5d4c9b735ba1a34d0df045118806ae2336f2c,14409a7a8207a57d03e9c524ae7fd39563bfe1a466a3a0323875eba8b034a1d59c3b7218103543f7777f17ef03dcaf44d12c74dfb83726e7425cf61225e9a54b3b3a 15 | sha1,80,2d6db2d7882fa8b7d56e74b8e24036deb475de8c94,110aa29eea788860fb1b2884 16 | sha1,160,2d6db2d7882fa8b7d56e74b8e24036deb475de8c94,1114a29eea788860fb1b288408345592c8662a4dcde5 17 | sha2-256,80,2d6db2d7882fa8b7d56e74b8e24036deb475de8c94,120a3afa34fba2f3572ac56d 18 | sha2-256,160,2d6db2d7882fa8b7d56e74b8e24036deb475de8c94,12143afa34fba2f3572ac56d80f52002e8727dd95f17 19 | sha2-256,256,2d6db2d7882fa8b7d56e74b8e24036deb475de8c94,12203afa34fba2f3572ac56d80f52002e8727dd95f17a2e7c9376a3147a96d3e78ac 20 | sha2-512,80,2d6db2d7882fa8b7d56e74b8e24036deb475de8c94,130a1c452c7d9f572510fa1a 21 | sha2-512,160,2d6db2d7882fa8b7d56e74b8e24036deb475de8c94,13141c452c7d9f572510fa1a3224e37a3030c8750b3e 22 | sha2-512,256,2d6db2d7882fa8b7d56e74b8e24036deb475de8c94,13201c452c7d9f572510fa1a3224e37a3030c8750b3e1763f1ad0d38274b3ea58ca7 23 | sha2-512,512,2d6db2d7882fa8b7d56e74b8e24036deb475de8c94,13401c452c7d9f572510fa1a3224e37a3030c8750b3e1763f1ad0d38274b3ea58ca7b4317dd0913250b4b16c9b0f6281aa74c42d8d5e72043e0fb214d3ad51d4ee8c 24 | sha3,80,2d6db2d7882fa8b7d56e74b8e24036deb475de8c94,140a968e697b2d5e92470002 25 | sha3,160,2d6db2d7882fa8b7d56e74b8e24036deb475de8c94,1414968e697b2d5e92470002f9e59e13557f47b895dc 26 | sha3,256,2d6db2d7882fa8b7d56e74b8e24036deb475de8c94,1420968e697b2d5e92470002f9e59e13557f47b895dc9c79082a90e91515f0255637 27 | sha3,512,2d6db2d7882fa8b7d56e74b8e24036deb475de8c94,1440968e697b2d5e92470002f9e59e13557f47b895dc9c79082a90e91515f025563773aec0f70219c87350c79707de67500866d7fe084c5316e12c6930949b28865d 28 | sha1,80,6c00022ba29d15926c4580332ded091e666f0ec5d9,110ac8a5b445ce470e4bc548 29 | sha1,160,6c00022ba29d15926c4580332ded091e666f0ec5d9,1114c8a5b445ce470e4bc54884e60e48e31fe12cb1a6 30 | sha2-256,80,6c00022ba29d15926c4580332ded091e666f0ec5d9,120aef387c6fea7ab702d470 31 | sha2-256,160,6c00022ba29d15926c4580332ded091e666f0ec5d9,1214ef387c6fea7ab702d470a9432c4cde44199c8d06 32 | sha2-256,256,6c00022ba29d15926c4580332ded091e666f0ec5d9,1220ef387c6fea7ab702d470a9432c4cde44199c8d06c6eaa5a1f2c61cfb0b70a97f 33 | sha2-512,80,6c00022ba29d15926c4580332ded091e666f0ec5d9,130aa1e9a63a3835d69983dd 34 | sha2-512,160,6c00022ba29d15926c4580332ded091e666f0ec5d9,1314a1e9a63a3835d69983dddefe78f1d9b233c9844d 35 | sha2-512,256,6c00022ba29d15926c4580332ded091e666f0ec5d9,1320a1e9a63a3835d69983dddefe78f1d9b233c9844d42ac14bb4e62d39f1f007b35 36 | sha2-512,512,6c00022ba29d15926c4580332ded091e666f0ec5d9,1340a1e9a63a3835d69983dddefe78f1d9b233c9844d42ac14bb4e62d39f1f007b350dc152a0b3f3cbd20bfdf0e19d9b62ca71f1ae8a8c7e67268ca92325d549deb3 37 | sha3,80,6c00022ba29d15926c4580332ded091e666f0ec5d9,140a47f57e2056010afa03bc 38 | sha3,160,6c00022ba29d15926c4580332ded091e666f0ec5d9,141447f57e2056010afa03bc58141ba3754f41917518 39 | sha3,256,6c00022ba29d15926c4580332ded091e666f0ec5d9,142047f57e2056010afa03bc58141ba3754f41917518c81711236eaca3766e333b9a 40 | sha3,512,6c00022ba29d15926c4580332ded091e666f0ec5d9,144047f57e2056010afa03bc58141ba3754f41917518c81711236eaca3766e333b9a2a767a90363f7a179e776d85aa6610713709ee46531f9a454565f737c68bdc56 41 | sha1,80,1391551dc8f15110d256c493ed485bca8cfed07241,110aae1351506b464f8e5deb 42 | sha1,160,1391551dc8f15110d256c493ed485bca8cfed07241,1114ae1351506b464f8e5deb0f6a2b2a272dcacbfadf 43 | sha2-256,80,1391551dc8f15110d256c493ed485bca8cfed07241,120a8a54b2b6b031da07e720 44 | sha2-256,160,1391551dc8f15110d256c493ed485bca8cfed07241,12148a54b2b6b031da07e72055828cbf41ad2562a6f3 45 | sha2-256,256,1391551dc8f15110d256c493ed485bca8cfed07241,12208a54b2b6b031da07e72055828cbf41ad2562a6f3675fcc84857577cbd1a935c1 46 | sha2-512,80,1391551dc8f15110d256c493ed485bca8cfed07241,130aeb89b3c6225e2b0b984e 47 | sha2-512,160,1391551dc8f15110d256c493ed485bca8cfed07241,1314eb89b3c6225e2b0b984e5267260759ba43351a04 48 | sha2-512,256,1391551dc8f15110d256c493ed485bca8cfed07241,1320eb89b3c6225e2b0b984e5267260759ba43351a04d8769973a2d54b670d96b98e 49 | sha2-512,512,1391551dc8f15110d256c493ed485bca8cfed07241,1340eb89b3c6225e2b0b984e5267260759ba43351a04d8769973a2d54b670d96b98e0d90cb7dddcc370c5b4f75be260f0927da4215b0952a6cd4edefaf35f68821d9 50 | sha3,80,1391551dc8f15110d256c493ed485bca8cfed07241,140a89c62811bc2d3fec8163 51 | sha3,160,1391551dc8f15110d256c493ed485bca8cfed07241,141489c62811bc2d3fec81631112ad9f03de23d06569 52 | sha3,256,1391551dc8f15110d256c493ed485bca8cfed07241,142089c62811bc2d3fec81631112ad9f03de23d065697f758b8df9e5d791474ab2f2 53 | sha3,512,1391551dc8f15110d256c493ed485bca8cfed07241,144089c62811bc2d3fec81631112ad9f03de23d065697f758b8df9e5d791474ab2f20ddac684c23b203b730be465a5d0f06b76e9dbc48590def7d58e96d93b4e0418 54 | sha1,80,557f47c855a5ca40daa3c0904a1e43647b4021ce0c,110a40c95ed89d5a648d4057 55 | sha1,160,557f47c855a5ca40daa3c0904a1e43647b4021ce0c,111440c95ed89d5a648d4057e6e57d7906dd58d2bb66 56 | sha2-256,80,557f47c855a5ca40daa3c0904a1e43647b4021ce0c,120ab17e5d52e94b25c5fe09 57 | sha2-256,160,557f47c855a5ca40daa3c0904a1e43647b4021ce0c,1214b17e5d52e94b25c5fe098c233133c5d43556b35d 58 | sha2-256,256,557f47c855a5ca40daa3c0904a1e43647b4021ce0c,1220b17e5d52e94b25c5fe098c233133c5d43556b35d2a50c59cf617fc61df1713fd 59 | sha2-512,80,557f47c855a5ca40daa3c0904a1e43647b4021ce0c,130a0339347318e40bf23fc0 60 | sha2-512,160,557f47c855a5ca40daa3c0904a1e43647b4021ce0c,13140339347318e40bf23fc03c93569df19c767e2495 61 | sha2-512,256,557f47c855a5ca40daa3c0904a1e43647b4021ce0c,13200339347318e40bf23fc03c93569df19c767e2495cdcfa30aa7385fd43dd6a91f 62 | sha2-512,512,557f47c855a5ca40daa3c0904a1e43647b4021ce0c,13400339347318e40bf23fc03c93569df19c767e2495cdcfa30aa7385fd43dd6a91fdd0c3962be324cf4c2527cc17aa65aa0349df6260599e38c7bd2fea9a178a66b 63 | sha3,80,557f47c855a5ca40daa3c0904a1e43647b4021ce0c,140aa7ab209784597d2e2518 64 | sha3,160,557f47c855a5ca40daa3c0904a1e43647b4021ce0c,1414a7ab209784597d2e251860e2464c04c386c4887a 65 | sha3,256,557f47c855a5ca40daa3c0904a1e43647b4021ce0c,1420a7ab209784597d2e251860e2464c04c386c4887af778136414c80d7c643ccd3b 66 | sha3,512,557f47c855a5ca40daa3c0904a1e43647b4021ce0c,1440a7ab209784597d2e251860e2464c04c386c4887af778136414c80d7c643ccd3b2a0b61e31986a79ef8e4fdd41601fbe7c982c132df4bc77ecc2e27d3edd55f90 67 | sha1,80,4c44254356730838195a32cbb1b8be3bed4c6c05c0,110a96c5114c52a3ea787360 68 | sha1,160,4c44254356730838195a32cbb1b8be3bed4c6c05c0,111496c5114c52a3ea7873603eb59da1ab88c0ec2ceb 69 | sha2-256,80,4c44254356730838195a32cbb1b8be3bed4c6c05c0,120ab8018a7f12b6da389260 70 | sha2-256,160,4c44254356730838195a32cbb1b8be3bed4c6c05c0,1214b8018a7f12b6da3892608167fc5ead90fc57fd1e 71 | sha2-256,256,4c44254356730838195a32cbb1b8be3bed4c6c05c0,1220b8018a7f12b6da3892608167fc5ead90fc57fd1e83aefe9453b623022d5f2b9b 72 | sha2-512,80,4c44254356730838195a32cbb1b8be3bed4c6c05c0,130a6885c2f6127bc432ff56 73 | sha2-512,160,4c44254356730838195a32cbb1b8be3bed4c6c05c0,13146885c2f6127bc432ff56198855ee6543a821c4b6 74 | sha2-512,256,4c44254356730838195a32cbb1b8be3bed4c6c05c0,13206885c2f6127bc432ff56198855ee6543a821c4b6ced4e250d1b5c9d628e24b94 75 | sha2-512,512,4c44254356730838195a32cbb1b8be3bed4c6c05c0,13406885c2f6127bc432ff56198855ee6543a821c4b6ced4e250d1b5c9d628e24b946a0aa1e5eba54310d8710e26075c82ad0ba6a8f8639dd56366976b79d067f368 76 | sha3,80,4c44254356730838195a32cbb1b8be3bed4c6c05c0,140a3dc43b479f5e9e008a52 77 | sha3,160,4c44254356730838195a32cbb1b8be3bed4c6c05c0,14143dc43b479f5e9e008a5256ca442e66286995c39d 78 | sha3,256,4c44254356730838195a32cbb1b8be3bed4c6c05c0,14203dc43b479f5e9e008a5256ca442e66286995c39deb732a6fb4e2e791a3c4a6a6 79 | sha3,512,4c44254356730838195a32cbb1b8be3bed4c6c05c0,14403dc43b479f5e9e008a5256ca442e66286995c39deb732a6fb4e2e791a3c4a6a6e5322e571e945a78748896edc67866ab00c767320f6956833857eab991a73a77 80 | sha1,80,3647da9e56b1afffa9921ce9a9caaa51ac8a166706,110afbce59ad61c0ec28ed14 81 | sha1,160,3647da9e56b1afffa9921ce9a9caaa51ac8a166706,1114fbce59ad61c0ec28ed14406c1432c9793b57adec 82 | sha2-256,80,3647da9e56b1afffa9921ce9a9caaa51ac8a166706,120ae96d0371442d2a8eae11 83 | sha2-256,160,3647da9e56b1afffa9921ce9a9caaa51ac8a166706,1214e96d0371442d2a8eae119eefe1d8710e8c59562a 84 | sha2-256,256,3647da9e56b1afffa9921ce9a9caaa51ac8a166706,1220e96d0371442d2a8eae119eefe1d8710e8c59562a8fe70adcba25322de2a0f854 85 | sha2-512,80,3647da9e56b1afffa9921ce9a9caaa51ac8a166706,130ac41a063c611e882714d8 86 | sha2-512,160,3647da9e56b1afffa9921ce9a9caaa51ac8a166706,1314c41a063c611e882714d8424f4edd0009b4b7c525 87 | sha2-512,256,3647da9e56b1afffa9921ce9a9caaa51ac8a166706,1320c41a063c611e882714d8424f4edd0009b4b7c525f132446af45780bfe4ff9980 88 | sha2-512,512,3647da9e56b1afffa9921ce9a9caaa51ac8a166706,1340c41a063c611e882714d8424f4edd0009b4b7c525f132446af45780bfe4ff998001c6479f48ae3289ea40a876a16e33c9d6b90201a307549938e33beb5e73e9f0 89 | sha3,80,3647da9e56b1afffa9921ce9a9caaa51ac8a166706,140acc1a0acb60f17e825b4c 90 | sha3,160,3647da9e56b1afffa9921ce9a9caaa51ac8a166706,1414cc1a0acb60f17e825b4c41b1eff84fc42cf5dd2b 91 | sha3,256,3647da9e56b1afffa9921ce9a9caaa51ac8a166706,1420cc1a0acb60f17e825b4c41b1eff84fc42cf5dd2b4468a47d0e8053ff55a4e7aa 92 | sha3,512,3647da9e56b1afffa9921ce9a9caaa51ac8a166706,1440cc1a0acb60f17e825b4c41b1eff84fc42cf5dd2b4468a47d0e8053ff55a4e7aa95e00fae8fc8eaf241a1027275c8243b8a7341b7fbd1878ac35eb0a8e174b46e 93 | sha1,80,f7f96cf1e683e6f7e752dab4613a1b1225889bb15d,110a92094dd3eed1997cfa0d 94 | sha1,160,f7f96cf1e683e6f7e752dab4613a1b1225889bb15d,111492094dd3eed1997cfa0d4c9743c6c03d9ab9fee5 95 | sha2-256,80,f7f96cf1e683e6f7e752dab4613a1b1225889bb15d,120a4341e7832a0625d57845 96 | sha2-256,160,f7f96cf1e683e6f7e752dab4613a1b1225889bb15d,12144341e7832a0625d578451df1d6f07b36fdec4505 97 | sha2-256,256,f7f96cf1e683e6f7e752dab4613a1b1225889bb15d,12204341e7832a0625d578451df1d6f07b36fdec4505484ede11615893a5d1162bdc 98 | sha2-512,80,f7f96cf1e683e6f7e752dab4613a1b1225889bb15d,130a6f558362cb0c867f40bd 99 | sha2-512,160,f7f96cf1e683e6f7e752dab4613a1b1225889bb15d,13146f558362cb0c867f40bd8fda18d004a14206d024 100 | sha2-512,256,f7f96cf1e683e6f7e752dab4613a1b1225889bb15d,13206f558362cb0c867f40bd8fda18d004a14206d0243879c1ff80dc70c89d60eaf8 101 | sha2-512,512,f7f96cf1e683e6f7e752dab4613a1b1225889bb15d,13406f558362cb0c867f40bd8fda18d004a14206d0243879c1ff80dc70c89d60eaf8ed19a96c6c5a0d38597a027a30856a6be4c25e5ce8473fa9ebd6f834c4bbdab3 102 | sha3,80,f7f96cf1e683e6f7e752dab4613a1b1225889bb15d,140ad4d533c326e157fbc53e 103 | sha3,160,f7f96cf1e683e6f7e752dab4613a1b1225889bb15d,1414d4d533c326e157fbc53e52f4dfa219d67e998a8f 104 | sha3,256,f7f96cf1e683e6f7e752dab4613a1b1225889bb15d,1420d4d533c326e157fbc53e52f4dfa219d67e998a8f54e0a899b1fd32b07be18635 105 | sha3,512,f7f96cf1e683e6f7e752dab4613a1b1225889bb15d,1440d4d533c326e157fbc53e52f4dfa219d67e998a8f54e0a899b1fd32b07be18635f32cd8e9152282a9d52ce647ff4add11adffeecde5b3b00400fac68a0807e95f 106 | sha1,80,8fc7992293335bb2e2f6d962f66734a652e495022e,110a6cc39b02d728945459e0 107 | sha1,160,8fc7992293335bb2e2f6d962f66734a652e495022e,11146cc39b02d728945459e08e4a638b1d1bc3648e6e 108 | sha2-256,80,8fc7992293335bb2e2f6d962f66734a652e495022e,120ac94ab4830a2f1eef4e37 109 | sha2-256,160,8fc7992293335bb2e2f6d962f66734a652e495022e,1214c94ab4830a2f1eef4e378a499d91f09f1a909a24 110 | sha2-256,256,8fc7992293335bb2e2f6d962f66734a652e495022e,1220c94ab4830a2f1eef4e378a499d91f09f1a909a249c48b27d3366ee6d97c2fc2e 111 | sha2-512,80,8fc7992293335bb2e2f6d962f66734a652e495022e,130a763993febeab714f75ca 112 | sha2-512,160,8fc7992293335bb2e2f6d962f66734a652e495022e,1314763993febeab714f75ca06511c52ddb69da2faaf 113 | sha2-512,256,8fc7992293335bb2e2f6d962f66734a652e495022e,1320763993febeab714f75ca06511c52ddb69da2faaf6654a1e9a9dc545c639ee2c9 114 | sha2-512,512,8fc7992293335bb2e2f6d962f66734a652e495022e,1340763993febeab714f75ca06511c52ddb69da2faaf6654a1e9a9dc545c639ee2c964deddf5b0a1aaae5b32d2c445b37278a1ba1de3948033012dbc4278dbba0ea0 115 | sha3,80,8fc7992293335bb2e2f6d962f66734a652e495022e,140a459506c8c26789f203ac 116 | sha3,160,8fc7992293335bb2e2f6d962f66734a652e495022e,1414459506c8c26789f203acd827c84bf1c68c821f80 117 | sha3,256,8fc7992293335bb2e2f6d962f66734a652e495022e,1420459506c8c26789f203acd827c84bf1c68c821f800a1b977306d574d9c5fcc637 118 | sha3,512,8fc7992293335bb2e2f6d962f66734a652e495022e,1440459506c8c26789f203acd827c84bf1c68c821f800a1b977306d574d9c5fcc637eb2a4255742d3a6b247bfc188983a633e5074e98fcaee4c5f43fe211cc256891 119 | sha1,80,a244e61f124cd3590173e2809b1177ca611ff15e9a,110a420ce85fe6648e367114 120 | sha1,160,a244e61f124cd3590173e2809b1177ca611ff15e9a,1114420ce85fe6648e367114f073ae09581d2d5c92da 121 | sha2-256,80,a244e61f124cd3590173e2809b1177ca611ff15e9a,120a2efcc65fc37070bb5973 122 | sha2-256,160,a244e61f124cd3590173e2809b1177ca611ff15e9a,12142efcc65fc37070bb5973df7a99bbb2bc19a7dfe0 123 | sha2-256,256,a244e61f124cd3590173e2809b1177ca611ff15e9a,12202efcc65fc37070bb5973df7a99bbb2bc19a7dfe05c448dd2e052ace46df9a80b 124 | sha2-512,80,a244e61f124cd3590173e2809b1177ca611ff15e9a,130a6276d25a66a2731c3c2e 125 | sha2-512,160,a244e61f124cd3590173e2809b1177ca611ff15e9a,13146276d25a66a2731c3c2eb1def1b0cdd077f2d82d 126 | sha2-512,256,a244e61f124cd3590173e2809b1177ca611ff15e9a,13206276d25a66a2731c3c2eb1def1b0cdd077f2d82d0318e43746c928e49ca2026a 127 | sha2-512,512,a244e61f124cd3590173e2809b1177ca611ff15e9a,13406276d25a66a2731c3c2eb1def1b0cdd077f2d82d0318e43746c928e49ca2026a5f8e118393f46993e6e959212318a4c6fae8e66f8430b700097cd6192e8c3535 128 | sha3,80,a244e61f124cd3590173e2809b1177ca611ff15e9a,140aedf3dbcb6a229c00d6aa 129 | sha3,160,a244e61f124cd3590173e2809b1177ca611ff15e9a,1414edf3dbcb6a229c00d6aa35e9751d9609ab71d951 130 | sha3,256,a244e61f124cd3590173e2809b1177ca611ff15e9a,1420edf3dbcb6a229c00d6aa35e9751d9609ab71d95148a28fb8fc9f3bf26df4c9ed 131 | sha3,512,a244e61f124cd3590173e2809b1177ca611ff15e9a,1440edf3dbcb6a229c00d6aa35e9751d9609ab71d95148a28fb8fc9f3bf26df4c9eddcd4297a520f91d7a02972903197c92c2dc5e1f886a9d497a2c82a4d10d06307 132 | sha1,80,8a461139f4d5078f6ff77af4fbc1befc775c0e0cb0,110a0987a972a0122c7f0788 133 | sha1,160,8a461139f4d5078f6ff77af4fbc1befc775c0e0cb0,11140987a972a0122c7f0788fe35b3505adb2da889e7 134 | sha2-256,80,8a461139f4d5078f6ff77af4fbc1befc775c0e0cb0,120addc3fcda5d7fc1f3c48a 135 | sha2-256,160,8a461139f4d5078f6ff77af4fbc1befc775c0e0cb0,1214ddc3fcda5d7fc1f3c48a284aca1b5440b54ee8dd 136 | sha2-256,256,8a461139f4d5078f6ff77af4fbc1befc775c0e0cb0,1220ddc3fcda5d7fc1f3c48a284aca1b5440b54ee8dd1e2c4dbb7bcb77db696f71e2 137 | sha2-512,80,8a461139f4d5078f6ff77af4fbc1befc775c0e0cb0,130a3deb07d2b0fe9891149e 138 | sha2-512,160,8a461139f4d5078f6ff77af4fbc1befc775c0e0cb0,13143deb07d2b0fe9891149e5681625ba78c2b30777c 139 | sha2-512,256,8a461139f4d5078f6ff77af4fbc1befc775c0e0cb0,13203deb07d2b0fe9891149e5681625ba78c2b30777cfffb543d5672f83aa2b6a03e 140 | sha2-512,512,8a461139f4d5078f6ff77af4fbc1befc775c0e0cb0,13403deb07d2b0fe9891149e5681625ba78c2b30777cfffb543d5672f83aa2b6a03e61c72738ec3d1eb61df1d1691da9fe516b8f9668e14a38c0b620d1d7eac0e3bb 141 | sha3,80,8a461139f4d5078f6ff77af4fbc1befc775c0e0cb0,140acdbfc227b85b786ec47f 142 | sha3,160,8a461139f4d5078f6ff77af4fbc1befc775c0e0cb0,1414cdbfc227b85b786ec47f75bea9c19e7caaf70b8c 143 | sha3,256,8a461139f4d5078f6ff77af4fbc1befc775c0e0cb0,1420cdbfc227b85b786ec47f75bea9c19e7caaf70b8cbe61e080856df5650d4b2b6b 144 | sha3,512,8a461139f4d5078f6ff77af4fbc1befc775c0e0cb0,1440cdbfc227b85b786ec47f75bea9c19e7caaf70b8cbe61e080856df5650d4b2b6b671ce9f68d9c66b6a1a8de15d3c8d5978a737f21e4d89e74d598d9ae87c4694e 145 | sha1,80,eaf89d6d7fa2ee40c7357e3d627cbd1338009570f5,110a69a49abea40f7b33515d 146 | sha1,160,eaf89d6d7fa2ee40c7357e3d627cbd1338009570f5,111469a49abea40f7b33515d2c78ac3ad27c9659ddf8 147 | sha2-256,80,eaf89d6d7fa2ee40c7357e3d627cbd1338009570f5,120acf9991b40b273af2ef5c 148 | sha2-256,160,eaf89d6d7fa2ee40c7357e3d627cbd1338009570f5,1214cf9991b40b273af2ef5c3d41668539d7adfc2637 149 | sha2-256,256,eaf89d6d7fa2ee40c7357e3d627cbd1338009570f5,1220cf9991b40b273af2ef5c3d41668539d7adfc2637dad7102593ea36b200355124 150 | sha2-512,80,eaf89d6d7fa2ee40c7357e3d627cbd1338009570f5,130ad9bb89326f0d56c5d5c5 151 | sha2-512,160,eaf89d6d7fa2ee40c7357e3d627cbd1338009570f5,1314d9bb89326f0d56c5d5c5ee71c1a0cf2138db6146 152 | sha2-512,256,eaf89d6d7fa2ee40c7357e3d627cbd1338009570f5,1320d9bb89326f0d56c5d5c5ee71c1a0cf2138db6146126ea1f135bbebf136d29bf9 153 | sha2-512,512,eaf89d6d7fa2ee40c7357e3d627cbd1338009570f5,1340d9bb89326f0d56c5d5c5ee71c1a0cf2138db6146126ea1f135bbebf136d29bf9658bfc9ac3a5ac096c60842f1008d6162cefc4bbeabc413f5e5d0ceff94fa344 154 | sha3,80,eaf89d6d7fa2ee40c7357e3d627cbd1338009570f5,140acfe85f27f18a9b31eeb9 155 | sha3,160,eaf89d6d7fa2ee40c7357e3d627cbd1338009570f5,1414cfe85f27f18a9b31eeb941b4fb385b22cb6cb745 156 | sha3,256,eaf89d6d7fa2ee40c7357e3d627cbd1338009570f5,1420cfe85f27f18a9b31eeb941b4fb385b22cb6cb7458ff3ecec239d551ecf8b4645 157 | sha3,512,eaf89d6d7fa2ee40c7357e3d627cbd1338009570f5,1440cfe85f27f18a9b31eeb941b4fb385b22cb6cb7458ff3ecec239d551ecf8b4645652877f27fc71fcc927866409143613bbd2586315c53538f6df06d720a4452cb 158 | sha1,80,4c98758072933abd55fef35782cf37386db7ce4dce,110a0088dbe5cfcac4d78f2a 159 | sha1,160,4c98758072933abd55fef35782cf37386db7ce4dce,11140088dbe5cfcac4d78f2a6b9f0078007b3141e7fc 160 | sha2-256,80,4c98758072933abd55fef35782cf37386db7ce4dce,120a8988c716536184426e96 161 | sha2-256,160,4c98758072933abd55fef35782cf37386db7ce4dce,12148988c716536184426e96e1714964c18a3ec7c3df 162 | sha2-256,256,4c98758072933abd55fef35782cf37386db7ce4dce,12208988c716536184426e96e1714964c18a3ec7c3df537d692b410728bf79e16868 163 | sha2-512,80,4c98758072933abd55fef35782cf37386db7ce4dce,130acf9b4008bfd4d617035c 164 | sha2-512,160,4c98758072933abd55fef35782cf37386db7ce4dce,1314cf9b4008bfd4d617035c5686cc21bfb9c5d09936 165 | sha2-512,256,4c98758072933abd55fef35782cf37386db7ce4dce,1320cf9b4008bfd4d617035c5686cc21bfb9c5d0993685868921758a369a2434f3b2 166 | sha2-512,512,4c98758072933abd55fef35782cf37386db7ce4dce,1340cf9b4008bfd4d617035c5686cc21bfb9c5d0993685868921758a369a2434f3b26e01124a0d42797f0a30bfca8db324798b857816e7f4637e55a4941c5974c351 167 | sha3,80,4c98758072933abd55fef35782cf37386db7ce4dce,140a51e7bd1d173316156e0c 168 | sha3,160,4c98758072933abd55fef35782cf37386db7ce4dce,141451e7bd1d173316156e0cfeb28186da1a6df4d542 169 | sha3,256,4c98758072933abd55fef35782cf37386db7ce4dce,142051e7bd1d173316156e0cfeb28186da1a6df4d542ad968b1c038a5f66c7eed65a 170 | sha3,512,4c98758072933abd55fef35782cf37386db7ce4dce,144051e7bd1d173316156e0cfeb28186da1a6df4d542ad968b1c038a5f66c7eed65add6465e79d51899db0278e11b3cbfa04821967feaa822eea22948b05c464cf93 171 | sha1,80,79f28aba59f256868f8b7f868e75aedcab8b068be0,110a81aaff208d63691d5176 172 | sha1,160,79f28aba59f256868f8b7f868e75aedcab8b068be0,111481aaff208d63691d5176d4aaf27aa59559385887 173 | sha2-256,80,79f28aba59f256868f8b7f868e75aedcab8b068be0,120af28cd11dcb49a131f9b8 174 | sha2-256,160,79f28aba59f256868f8b7f868e75aedcab8b068be0,1214f28cd11dcb49a131f9b8773035bdc2605a6c2d64 175 | sha2-256,256,79f28aba59f256868f8b7f868e75aedcab8b068be0,1220f28cd11dcb49a131f9b8773035bdc2605a6c2d6459782b987d08c5a8c1fd1814 176 | sha2-512,80,79f28aba59f256868f8b7f868e75aedcab8b068be0,130ab184c8ffda3791a2916a 177 | sha2-512,160,79f28aba59f256868f8b7f868e75aedcab8b068be0,1314b184c8ffda3791a2916a632e9f59aaf13e762667 178 | sha2-512,256,79f28aba59f256868f8b7f868e75aedcab8b068be0,1320b184c8ffda3791a2916a632e9f59aaf13e762667d5cd8f514cf38d90933a6c37 179 | sha2-512,512,79f28aba59f256868f8b7f868e75aedcab8b068be0,1340b184c8ffda3791a2916a632e9f59aaf13e762667d5cd8f514cf38d90933a6c3734fd4ab3b0b3e5a9a3701eb761beca3e01a5efcc2558077f7d301f3092e8abec 180 | sha3,80,79f28aba59f256868f8b7f868e75aedcab8b068be0,140a9b6b98749e9b038091fa 181 | sha3,160,79f28aba59f256868f8b7f868e75aedcab8b068be0,14149b6b98749e9b038091fa50532ee3267a67ed3607 182 | sha3,256,79f28aba59f256868f8b7f868e75aedcab8b068be0,14209b6b98749e9b038091fa50532ee3267a67ed3607438f7bf25b0c29295f806b10 183 | sha3,512,79f28aba59f256868f8b7f868e75aedcab8b068be0,14409b6b98749e9b038091fa50532ee3267a67ed3607438f7bf25b0c29295f806b10bc1a8ae13e8c23744672bf7628114a557ff28ee3e2ccc73b0759f4a98a7f86de 184 | sha1,80,fe2bd8cb6ad52767eae6fbd354ceb3e72e8f55669b,110a9daeb5b0eb9d59501635 185 | sha1,160,fe2bd8cb6ad52767eae6fbd354ceb3e72e8f55669b,11149daeb5b0eb9d59501635b20b1f1c2e12e481adae 186 | sha2-256,80,fe2bd8cb6ad52767eae6fbd354ceb3e72e8f55669b,120a9eeab680ac6bd543dfc3 187 | sha2-256,160,fe2bd8cb6ad52767eae6fbd354ceb3e72e8f55669b,12149eeab680ac6bd543dfc34b3d90aa6e5a4bb27961 188 | sha2-256,256,fe2bd8cb6ad52767eae6fbd354ceb3e72e8f55669b,12209eeab680ac6bd543dfc34b3d90aa6e5a4bb27961faef39680e3f549516dc948e 189 | sha2-512,80,fe2bd8cb6ad52767eae6fbd354ceb3e72e8f55669b,130a621cb2040060c6024e57 190 | sha2-512,160,fe2bd8cb6ad52767eae6fbd354ceb3e72e8f55669b,1314621cb2040060c6024e57e9d68abb8c41ec55b327 191 | sha2-512,256,fe2bd8cb6ad52767eae6fbd354ceb3e72e8f55669b,1320621cb2040060c6024e57e9d68abb8c41ec55b327b9f2e5865e65a1ff8609d00f 192 | sha2-512,512,fe2bd8cb6ad52767eae6fbd354ceb3e72e8f55669b,1340621cb2040060c6024e57e9d68abb8c41ec55b327b9f2e5865e65a1ff8609d00fb27c419ec9a68978b83652a44f47d7866ba57717a0203ba117eb01cf449c1ec7 193 | sha3,80,fe2bd8cb6ad52767eae6fbd354ceb3e72e8f55669b,140a888e30d43451afe15d97 194 | sha3,160,fe2bd8cb6ad52767eae6fbd354ceb3e72e8f55669b,1414888e30d43451afe15d9711d6459f069471835705 195 | sha3,256,fe2bd8cb6ad52767eae6fbd354ceb3e72e8f55669b,1420888e30d43451afe15d9711d6459f06947183570586b38b20723e7f02fa478c13 196 | sha3,512,fe2bd8cb6ad52767eae6fbd354ceb3e72e8f55669b,1440888e30d43451afe15d9711d6459f06947183570586b38b20723e7f02fa478c13ac363e07528ee22e1319a1cbfcb329e6f687acc23d650ff599abbc9c828b5efd 197 | sha1,80,7f0bb0ac4dd2404c097dade4c8b2292ae2419b7a70,110a92ecbf3facfa79118d36 198 | sha1,160,7f0bb0ac4dd2404c097dade4c8b2292ae2419b7a70,111492ecbf3facfa79118d3611e7e406f4d4d6242f1c 199 | sha2-256,80,7f0bb0ac4dd2404c097dade4c8b2292ae2419b7a70,120af000499860abadcf61ed 200 | sha2-256,160,7f0bb0ac4dd2404c097dade4c8b2292ae2419b7a70,1214f000499860abadcf61edec7453c0a9112c5083ed 201 | sha2-256,256,7f0bb0ac4dd2404c097dade4c8b2292ae2419b7a70,1220f000499860abadcf61edec7453c0a9112c5083ed9fa27c350ded0a8ed27ea236 202 | sha2-512,80,7f0bb0ac4dd2404c097dade4c8b2292ae2419b7a70,130abf1acd49f89a81fa6099 203 | sha2-512,160,7f0bb0ac4dd2404c097dade4c8b2292ae2419b7a70,1314bf1acd49f89a81fa60995a03709ae483850abb0e 204 | sha2-512,256,7f0bb0ac4dd2404c097dade4c8b2292ae2419b7a70,1320bf1acd49f89a81fa60995a03709ae483850abb0e1f168e75a02db9d0b9ad58c0 205 | sha2-512,512,7f0bb0ac4dd2404c097dade4c8b2292ae2419b7a70,1340bf1acd49f89a81fa60995a03709ae483850abb0e1f168e75a02db9d0b9ad58c0053202cf4dff68112835191b07067693d65d73727db81a0624ccffdd92a87fa2 206 | sha3,80,7f0bb0ac4dd2404c097dade4c8b2292ae2419b7a70,140a39e3d69186b5252fd69c 207 | sha3,160,7f0bb0ac4dd2404c097dade4c8b2292ae2419b7a70,141439e3d69186b5252fd69cff646c2f12eaa3f63772 208 | sha3,256,7f0bb0ac4dd2404c097dade4c8b2292ae2419b7a70,142039e3d69186b5252fd69cff646c2f12eaa3f63772e6062a1657dc3af9623e2e57 209 | sha3,512,7f0bb0ac4dd2404c097dade4c8b2292ae2419b7a70,144039e3d69186b5252fd69cff646c2f12eaa3f63772e6062a1657dc3af9623e2e57bf3c74b7d1f96f4a4d0c8b85cd7b2bfdcb0f9712795726378d9ccccd192d8086 210 | sha1,80,b07cb1832e7e253f3eb7cf4029a82d881217d3c02f,110af7165b40913fe411ae00 211 | sha1,160,b07cb1832e7e253f3eb7cf4029a82d881217d3c02f,1114f7165b40913fe411ae0012435ac0ac9491cd68e9 212 | sha2-256,80,b07cb1832e7e253f3eb7cf4029a82d881217d3c02f,120a88af105116b3006c14cc 213 | sha2-256,160,b07cb1832e7e253f3eb7cf4029a82d881217d3c02f,121488af105116b3006c14cc9c38e5bd9049386dc827 214 | sha2-256,256,b07cb1832e7e253f3eb7cf4029a82d881217d3c02f,122088af105116b3006c14cc9c38e5bd9049386dc82785fbb15a69a907fb9da8c831 215 | sha2-512,80,b07cb1832e7e253f3eb7cf4029a82d881217d3c02f,130a7d185f12ce400ce8d3e5 216 | sha2-512,160,b07cb1832e7e253f3eb7cf4029a82d881217d3c02f,13147d185f12ce400ce8d3e55ef3a126e8f6ed89dd5d 217 | sha2-512,256,b07cb1832e7e253f3eb7cf4029a82d881217d3c02f,13207d185f12ce400ce8d3e55ef3a126e8f6ed89dd5da8e296e84b7da105bf28d643 218 | sha2-512,512,b07cb1832e7e253f3eb7cf4029a82d881217d3c02f,13407d185f12ce400ce8d3e55ef3a126e8f6ed89dd5da8e296e84b7da105bf28d6437eec013a5e760065221791ea7a2d4a8458d7d454b9acbe7418db05dce0b5412c 219 | sha3,80,b07cb1832e7e253f3eb7cf4029a82d881217d3c02f,140a9b596b0ed3e0fbe6be32 220 | sha3,160,b07cb1832e7e253f3eb7cf4029a82d881217d3c02f,14149b596b0ed3e0fbe6be325b26e94f83a99119c95a 221 | sha3,256,b07cb1832e7e253f3eb7cf4029a82d881217d3c02f,14209b596b0ed3e0fbe6be325b26e94f83a99119c95ad6b376115cc228f94087a4ca 222 | sha3,512,b07cb1832e7e253f3eb7cf4029a82d881217d3c02f,14409b596b0ed3e0fbe6be325b26e94f83a99119c95ad6b376115cc228f94087a4ca68059c964164757f76e08c89e5d521c256c00b21af19b0c8a5a0484ec9db65eb 223 | sha1,80,29a53e335621740c0fbc8dd85970fa0311b0d58e25,110a22b6cc60a0782c145dc9 224 | sha1,160,29a53e335621740c0fbc8dd85970fa0311b0d58e25,111422b6cc60a0782c145dc925d2c3d02e722d564fe9 225 | sha2-256,80,29a53e335621740c0fbc8dd85970fa0311b0d58e25,120a66b0aa772b7562dbf534 226 | sha2-256,160,29a53e335621740c0fbc8dd85970fa0311b0d58e25,121466b0aa772b7562dbf534ae653ab686735baf7ed3 227 | sha2-256,256,29a53e335621740c0fbc8dd85970fa0311b0d58e25,122066b0aa772b7562dbf534ae653ab686735baf7ed3614caad398868d8e2b84a289 228 | sha2-512,80,29a53e335621740c0fbc8dd85970fa0311b0d58e25,130a8cad36ff75b598968e94 229 | sha2-512,160,29a53e335621740c0fbc8dd85970fa0311b0d58e25,13148cad36ff75b598968e94c5152800fe2a9d6de6cc 230 | sha2-512,256,29a53e335621740c0fbc8dd85970fa0311b0d58e25,13208cad36ff75b598968e94c5152800fe2a9d6de6cca92617c0fb331bf9539a80f7 231 | sha2-512,512,29a53e335621740c0fbc8dd85970fa0311b0d58e25,13408cad36ff75b598968e94c5152800fe2a9d6de6cca92617c0fb331bf9539a80f7b55de98fda8708dd771fb359ef72ce3794440d104ef7bef501ddb01735d2855f 232 | sha3,80,29a53e335621740c0fbc8dd85970fa0311b0d58e25,140a28b681db6b5674389e1b 233 | sha3,160,29a53e335621740c0fbc8dd85970fa0311b0d58e25,141428b681db6b5674389e1be7a410887260ecc8169e 234 | sha3,256,29a53e335621740c0fbc8dd85970fa0311b0d58e25,142028b681db6b5674389e1be7a410887260ecc8169effa342907ee1294d7a13cd20 235 | sha3,512,29a53e335621740c0fbc8dd85970fa0311b0d58e25,144028b681db6b5674389e1be7a410887260ecc8169effa342907ee1294d7a13cd203ece5816b9bc3866e10d1c9d5be00e4e6ad05482e6b6b3e76e6f8b669a3aaef3 236 | sha1,80,f6896cafdd752d9615f22017dfce1a281fb0598038,110ac80fba1987567ea9f3ff 237 | sha1,160,f6896cafdd752d9615f22017dfce1a281fb0598038,1114c80fba1987567ea9f3ff4a587da9a537a3655f46 238 | sha2-256,80,f6896cafdd752d9615f22017dfce1a281fb0598038,120a4577ee99ca45b00bae3a 239 | sha2-256,160,f6896cafdd752d9615f22017dfce1a281fb0598038,12144577ee99ca45b00bae3afe7f3a50cbafb109ef1a 240 | sha2-256,256,f6896cafdd752d9615f22017dfce1a281fb0598038,12204577ee99ca45b00bae3afe7f3a50cbafb109ef1a165ec698cb29a62daf1addab 241 | sha2-512,80,f6896cafdd752d9615f22017dfce1a281fb0598038,130ac039899eef738c417dcf 242 | sha2-512,160,f6896cafdd752d9615f22017dfce1a281fb0598038,1314c039899eef738c417dcf0b59358c4cf027496458 243 | sha2-512,256,f6896cafdd752d9615f22017dfce1a281fb0598038,1320c039899eef738c417dcf0b59358c4cf02749645893734eda05871f7ccbe89064 244 | sha2-512,512,f6896cafdd752d9615f22017dfce1a281fb0598038,1340c039899eef738c417dcf0b59358c4cf02749645893734eda05871f7ccbe89064dbf95c96edc6245c54ec5601f44afcea126d0ba66f0a5423ab7ac2e91e144897 245 | sha3,80,f6896cafdd752d9615f22017dfce1a281fb0598038,140a6fd4a8be27a828434ce7 246 | sha3,160,f6896cafdd752d9615f22017dfce1a281fb0598038,14146fd4a8be27a828434ce7b0935a50df11dcc43143 247 | sha3,256,f6896cafdd752d9615f22017dfce1a281fb0598038,14206fd4a8be27a828434ce7b0935a50df11dcc431437cace07f460d22649745ce1a 248 | sha3,512,f6896cafdd752d9615f22017dfce1a281fb0598038,14406fd4a8be27a828434ce7b0935a50df11dcc431437cace07f460d22649745ce1abfc1d65a361e9f3e0852cb4f425c7c9427328499d2a4e6999b35f05e37195908 249 | sha1,80,444a8ca03cce5b47991b3baf807f4eaa1d8175a72e,110abd23220dec583addf275 250 | sha1,160,444a8ca03cce5b47991b3baf807f4eaa1d8175a72e,1114bd23220dec583addf27599f0dc3a53c2a1dcf806 251 | sha2-256,80,444a8ca03cce5b47991b3baf807f4eaa1d8175a72e,120af6a17055da6921b92a23 252 | sha2-256,160,444a8ca03cce5b47991b3baf807f4eaa1d8175a72e,1214f6a17055da6921b92a23f6fa4e2434160dec6ccf 253 | sha2-256,256,444a8ca03cce5b47991b3baf807f4eaa1d8175a72e,1220f6a17055da6921b92a23f6fa4e2434160dec6ccfe1ce5979415ccf6467a8d8ac 254 | sha2-512,80,444a8ca03cce5b47991b3baf807f4eaa1d8175a72e,130aaeeaaf6cbfe3b61b01f4 255 | sha2-512,160,444a8ca03cce5b47991b3baf807f4eaa1d8175a72e,1314aeeaaf6cbfe3b61b01f4dabee8cad7c3063b3ae8 256 | sha2-512,256,444a8ca03cce5b47991b3baf807f4eaa1d8175a72e,1320aeeaaf6cbfe3b61b01f4dabee8cad7c3063b3ae80e0f346c5212699c5bf369fb 257 | sha2-512,512,444a8ca03cce5b47991b3baf807f4eaa1d8175a72e,1340aeeaaf6cbfe3b61b01f4dabee8cad7c3063b3ae80e0f346c5212699c5bf369fb57143a7b4a980fe5bfdf0420da7ff2667530a16f2c2d96c7c5c858584b151b49 258 | sha3,80,444a8ca03cce5b47991b3baf807f4eaa1d8175a72e,140a5541d5148a03e5ba0a91 259 | sha3,160,444a8ca03cce5b47991b3baf807f4eaa1d8175a72e,14145541d5148a03e5ba0a916b8f91175219b15e260f 260 | sha3,256,444a8ca03cce5b47991b3baf807f4eaa1d8175a72e,14205541d5148a03e5ba0a916b8f91175219b15e260f0b26c4fdfa24b24bc54ac640 261 | sha3,512,444a8ca03cce5b47991b3baf807f4eaa1d8175a72e,14405541d5148a03e5ba0a916b8f91175219b15e260f0b26c4fdfa24b24bc54ac64045ea813027252d05c43a3f0d5def492937a33fbc04c3eaf7ad61af5e16bb7c3f 262 | --------------------------------------------------------------------------------