multihashes 0.1.3 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 49a95084248a28b831e0fd3497b13976257d4ae8
4
- data.tar.gz: d5688edebe1445b25bdd21db616994a1451ea6b8
2
+ SHA256:
3
+ metadata.gz: 3919be2817c0d63b77acc535b0e12e0e6e3e81c1aa6ac36ca2cc2e7fd5242dd2
4
+ data.tar.gz: 548b5d4c5c8ec60a7434d82602c9688eba7e1964709148c84511256c95ae40fc
5
5
  SHA512:
6
- metadata.gz: c734cc7cdd4c812b498076ac7eb1f9a917bed22b539f7674ea90c4253a80f51dbad150d8052b75f3b7c80c1feac80e89b40bda6fcbbac944e14eb787be0fdf20
7
- data.tar.gz: f624a5af66df17f46798704aebc301d1f15e74045ee5f3f785cdaa0b1b63e787b2cd6dbb2801498b5516bacb4cc46f9d0eaccc44620982b8f4a83723f1fae4dc
6
+ metadata.gz: a560cac30066514c6d30eec9c54fbe08e60059eeab76da68668aacb76b11d42ec18c5929f1c6920a9fc396ddf6eaecc6fda7ebf28317b64afb575c6e7e91aa46
7
+ data.tar.gz: 5a35dca566b7c3c840a0c56ee3ca050704eaec15915a9a86551b6174f865c8a5f3d5dd3cf46d1e9b6f07ac73c90f0a91525f79fc525f44f20f0c6bccf7760c1f
@@ -1,4 +1,6 @@
1
+ ---
1
2
  language: ruby
3
+ cache: bundler
2
4
  rvm:
3
- - 2.1.2
4
- before_install: gem install bundler -v 1.10.2
5
+ - 2.6.3
6
+ before_install: gem install bundler -v 2.0.1
@@ -0,0 +1,35 @@
1
+ # Changelog
2
+
3
+ ## 0.2.0
4
+
5
+ - Add `multicodecs` (ruby-multicodec) which adds _all_ the current multihash
6
+ codecs to this gem.
7
+ - Add a test to show the breaking changes
8
+
9
+ ### Breaking changes:
10
+
11
+ The official codec table does not match the initial (`0.1.x`) multihash mapping.
12
+
13
+ `0x14` used to be named `sha3` and is now named `sha3-512`
14
+ `0x40` used to be named `blake2b` and is now not assigned
15
+ `0x41` used to be named `blake2s` and is now not assigned
16
+
17
+ `blake2b` consists of 64 output lengths that give different hashes
18
+ | name | code |
19
+ |-------------|--------|
20
+ | blake2b-8 | 0xb201 |
21
+ | blake2b-16 | 0xb202 |
22
+ | blake2b-24 | 0xb203 |
23
+ | ... | |
24
+ | blake2b-504 | 0xb23f |
25
+ | blake2b-512 | 0xb240 |
26
+
27
+ `blake2s` consists of 32 output lengths that give different hashes
28
+ | name | code |
29
+ |-------------|--------|
30
+ | blake2s-8 | 0xb241 |
31
+ | blake2s-16 | 0xb242 |
32
+ | blake2s-24 | 0xb243 |
33
+ | ... | |
34
+ | blake2s-248 | 0xb25f |
35
+ | blake2s-256 | 0xb260 |
data/README.md CHANGED
@@ -44,18 +44,61 @@ out = Multihashes.decode multihash_binary_string
44
44
 
45
45
  ```
46
46
 
47
- Hash function names (latest is [here](https://github.com/multiformats/multihash/blob/master/hashtable.csv))
48
-
49
- code name
50
- 0xd5 md5
51
- 0x11 sha1
52
- 0x12 sha2-256
53
- 0x13 sha2-512
54
- 0x14 sha3
55
- 0x40 blake2b
56
- 0x41 blake2s
57
- # 0x00-0x0f reserved for application specific functions
58
- # 0x10-0x3f reserved for SHA standard functions
47
+ Hash function names (latest is [here](https://github.com/multiformats/multicodec/blob/master/table.csv), current `multicodec` is [here](https://github.com/SleeplessByte/ruby-multicodec/blob/master/lib/table.csv))
48
+
49
+ | code | name | comment |
50
+ |--------|----------------|---------|
51
+ | 0x00 | identity | raw binary |
52
+ | 0x11 | sha1 | |
53
+ | 0x12 | sha2-256 | |
54
+ | 0x13 | sha2-512 | |
55
+ | 0x14 | sha3-512 | |
56
+ | 0x15 | sha3-384 | |
57
+ | 0x16 | sha3-256 | |
58
+ | 0x17 | sha3-224 | |
59
+ | 0x18 | shake-128 | |
60
+ | 0x19 | shake-256 | |
61
+ | 0x1a | keccak-224 | `keccak` has variable output length. The number specifies the core length |
62
+ | 0x1b | keccak-256 | |
63
+ | 0x1c | keccak-384 | |
64
+ | 0x1d | keccak-512 | |
65
+ | 0x22 | murmur3-128 | |
66
+ | 0x23 | murmur3-32 | |
67
+ | 0x56 | dbl-sha2-256 | |
68
+ | 0xd4 | md4 | |
69
+ | 0xd4 | md5 | |
70
+ | 0xd6 | bmt | Binary Merkle Tree Hash |
71
+ | 0x1100 | x11 | |
72
+ | 0xb201 | blake2b-8 | `blake2b` consists of 64 output lengths that give different hashes |
73
+ | 0xb202 | blake2b-16 | |
74
+ | 0xb203 | blake2b-24 | |
75
+ | ... | | |
76
+ | 0xb23f | blake2b-504 | |
77
+ | 0xb240 | blake2b-512 | |
78
+ | 0xb241 | blake2s-8 | `blake2s` consists of 32 output lengths that give different hashes |
79
+ | 0xb242 | blake2s-16 | |
80
+ | 0xb243 | blake2s-24 | |
81
+ | ... | | |
82
+ | 0xb25f | blake2s-248 | |
83
+ | 0xb260 | blake2s-256 | |
84
+ | 0xb301 | skein256-8 | `skein256` consists of 32 output lengths that give different hashes |
85
+ | 0xb302 | skein256-16 | |
86
+ | 0xb303 | skein256-24 | |
87
+ | ... | | |
88
+ | 0xb31f | skein256-248 | |
89
+ | 0xb320 | skein256-256 | |
90
+ | 0xb321 | skein512-8 | `skein256` consists of 32 output lengths that give different hashes |
91
+ | 0xb322 | skein512-16 | |
92
+ | 0xb323 | skein512-24 | |
93
+ | ... | | |
94
+ | 0xb35f | skein512-504 | |
95
+ | 0xb360 | skein512-512 | |
96
+ | 0xb361 | skein1024-8 | `skein1024` consists of 128 output lengths that give different hashes |
97
+ | 0xb362 | skein1024-16 | |
98
+ | 0xb363 | skein1024-24 | |
99
+ | ... | | |
100
+ | 0xb3df | skein1024-1016 | |
101
+ | 0xb3e0 | skein1024-1024 | |
59
102
 
60
103
  ## Development
61
104
 
@@ -1,29 +1,24 @@
1
1
  require 'multihashes/version'
2
+ require 'multicodecs'
2
3
 
3
4
  module Multihashes
4
5
  class HashFunctionNotImplemented < StandardError; end
5
6
  class DigestLengthError < StandardError; end
6
7
 
7
- # https://github.com/jbenet/multihash
8
- TABLE = {
9
- 0xd5 => 'md5',
10
- 0x11 => 'sha1',
11
- 0x12 => 'sha2-256',
12
- 0x13 => 'sha2-512',
13
- 0x14 => 'sha3',
14
- 0x40 => 'blake2b',
15
- 0x41 => 'blake2s'
16
- }
8
+ # https://github.com/multiformats/multicodec/blob/master/table.csv
9
+ TABLE = Multicodecs.where(tag: 'multihash')
10
+ .map { |codec| [codec.code, codec.name] }
11
+ .to_h
17
12
 
18
13
  def self.encode(digest, hash_function)
19
14
  length = digest.bytesize
20
15
  key = TABLE.key hash_function
21
16
  raise HashFunctionNotImplemented, 'unknown hash function code' if key.nil?
22
- [TABLE.key(hash_function), length, digest].pack("CCA#{length}")
17
+ [TABLE.key(hash_function), length, digest].pack("CCa#{length}")
23
18
  end
24
19
 
25
20
  def self.decode(multihash)
26
- integer, length, digest = multihash.unpack('CCA*')
21
+ integer, length, digest = multihash.unpack('CCa*')
27
22
 
28
23
  if length != digest.bytesize
29
24
  raise DigestLengthError, 'digest did not match expected multihash length'
@@ -1,3 +1,3 @@
1
1
  module Multihashes
2
- VERSION = "0.1.3"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -19,7 +19,9 @@ Gem::Specification.new do |spec|
19
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
20
  spec.require_paths = ["lib"]
21
21
 
22
- spec.add_development_dependency "bundler", "~> 1.10"
23
- spec.add_development_dependency "rake", "~> 10.0"
22
+ spec.add_development_dependency "bundler", "~> 2"
23
+ spec.add_development_dependency "rake", "~> 12.3"
24
24
  spec.add_development_dependency "minitest"
25
+
26
+ spec.add_dependency "multicodecs", ">= 0.2.0", "< 1"
25
27
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: multihashes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kyle Drake
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-09-05 00:00:00.000000000 Z
11
+ date: 2019-10-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.10'
19
+ version: '2'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.10'
26
+ version: '2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '12.3'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '12.3'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: minitest
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +52,26 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: multicodecs
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 0.2.0
62
+ - - "<"
63
+ - !ruby/object:Gem::Version
64
+ version: '1'
65
+ type: :runtime
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: 0.2.0
72
+ - - "<"
73
+ - !ruby/object:Gem::Version
74
+ version: '1'
55
75
  description: A simple, low-level multihash (https://github.com/jbenet/multihash) implementation
56
76
  for ruby.
57
77
  email:
@@ -62,6 +82,7 @@ extra_rdoc_files: []
62
82
  files:
63
83
  - ".gitignore"
64
84
  - ".travis.yml"
85
+ - CHANGELOG.md
65
86
  - Gemfile
66
87
  - LICENSE.txt
67
88
  - README.md
@@ -90,8 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
90
111
  - !ruby/object:Gem::Version
91
112
  version: '0'
92
113
  requirements: []
93
- rubyforge_project:
94
- rubygems_version: 2.6.11
114
+ rubygems_version: 3.0.3
95
115
  signing_key:
96
116
  specification_version: 4
97
117
  summary: A simple multihash (https://github.com/jbenet/multihash) implementation for