uncle_blake3 0.0.2 → 0.0.3

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
2
  SHA256:
3
- metadata.gz: 9da28c3f3c9490f04d35fc3d29efb959b079ad9acdb2f79d1cb1019bc437213a
4
- data.tar.gz: bda52bea8990bf57253dc0b72b8c14759b3eeae3944f3f98362c2985feb8027d
3
+ metadata.gz: 743e230c6eeeecf88ca38acfa04bb212085d456dcded4b872d70426835cea804
4
+ data.tar.gz: b47f56a53d6ebe8a83ac09cd63e4d89ff0af61afd6969d5d31350167576b2897
5
5
  SHA512:
6
- metadata.gz: ed506ef5ba7b9042bd1f201ffd8906b970f421c4f67e3a5e683d61aa88023adf8755afa9bfd339dfdce888e9b3fe57854a2be4ce2f0a6633191eca3a26c12898
7
- data.tar.gz: 82271beb236082775ec8a221849c11202c3d6aba329d73477a701c90fbacd484cc8c18986336b6ca36748059910523e2e2db62ed7c8a60617c203265b466ef08
6
+ metadata.gz: b22a753142ae17492aca3210d36a3e8f7332d848dfb4c3ed9bd629ef87eadee9be41e25f71441e6419e150ab93a9d9d2a9dec4defa4c0f48982426ddea1085a0
7
+ data.tar.gz: 9093e31501959a8e22970eac43a0857100da31eff9225eec07b23e1f253c849e34e2dfb20a18823aa99fe9dacf37dd56ac31b4dbce93b800a4bd87131ad9b5b4
data/README.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # UncleBlake3
2
2
 
3
+ [![GitHub version](https://badge.fury.io/gh/the-cave%2Funcle-blake3.svg)](https://badge.fury.io/gh/the-cave%2Funcle-blake3)
4
+ [![Gem Version](https://badge.fury.io/rb/uncle_blake3.svg)](https://badge.fury.io/rb/uncle_blake3)
5
+
3
6
  ## What is it?
4
7
 
5
8
  UncleBlake3 is a Ruby binding of [Blake3](https://github.com/BLAKE3-team/BLAKE3), a fast cryptographic hash function.
@@ -25,9 +28,9 @@ In order to install the gem, your needs:
25
28
 
26
29
  Add this line to your application's Gemfile:
27
30
 
28
- ```ruby
31
+ ~~~ruby
29
32
  gem 'uncle_blake3'
30
- ```
33
+ ~~~
31
34
 
32
35
  And then execute:
33
36
 
@@ -35,7 +38,7 @@ And then execute:
35
38
 
36
39
  ## Usage Examples
37
40
 
38
- ~~~Ruby
41
+ ~~~ruby
39
42
  # basic usage
40
43
  ::UncleBlake3::Digest.hexdigest("\x00")
41
44
  # => "2d3adedff11b61f14c886e35afa036736dcd87a74d27b5c1510225d0f592e213"
@@ -3,6 +3,7 @@
3
3
  require_relative 'build/loader'
4
4
 
5
5
  module UncleBlake3
6
+ # @!visibility private
6
7
  module Binding
7
8
  extend ::FFI::Library
8
9
  ffi_lib Build::Loader.find('UncleBlake3')
@@ -5,6 +5,7 @@ require 'pathname'
5
5
  require_relative 'platform'
6
6
 
7
7
  module UncleBlake3
8
+ # @!visibility private
8
9
  module Build
9
10
  # taken from:
10
11
  # https://github.com/ffi/ffi-compiler/blob/master/lib/ffi-compiler/loader.rb
@@ -4,6 +4,7 @@ require 'ffi'
4
4
  require 'singleton'
5
5
 
6
6
  module UncleBlake3
7
+ # @!visibility private
7
8
  module Build
8
9
  # mostly taken from:
9
10
  # https://github.com/ffi/ffi-compiler/blob/master/lib/ffi-compiler/platform.rb
@@ -6,6 +6,13 @@ require 'objspace'
6
6
  require_relative 'binding'
7
7
 
8
8
  module UncleBlake3
9
+ # @example basic usage
10
+ # digest = ::UncleBlake3::Digest.new(output_length: 10)
11
+ # digest << 'some input'
12
+ # digest << 'some more input'
13
+ # digest.hexdigest
14
+ # #=> "d709fca62bbf74099e87"
15
+ # See {file:README.md README} for more usage examples
9
16
  class Digest
10
17
  KEY_LENGTH = Binding.key_length
11
18
  DEFAULT_OUTPUT_LENGTH = Binding.default_output_length
@@ -21,6 +28,7 @@ module UncleBlake3
21
28
  include Error
22
29
  end
23
30
 
31
+ # Create a new Digest
24
32
  def initialize(output_length: DEFAULT_OUTPUT_LENGTH, key: nil, key_seed: nil)
25
33
  raise TypeError, 'Hash length is not an Integer' unless output_length.is_a?(::Integer)
26
34
  raise ArgumentError, 'Hash length out of range' unless (1...(1 << 20)).include?(output_length)
@@ -49,6 +57,7 @@ module UncleBlake3
49
57
  invalidate_cache
50
58
  end
51
59
 
60
+ # Feed in the data
52
61
  def update(data)
53
62
  data_size = data.bytesize
54
63
  data_buffer = ::FFI::MemoryPointer.new(:uint8, data_size)
@@ -59,10 +68,12 @@ module UncleBlake3
59
68
  invalidate_cache
60
69
  end
61
70
 
71
+ # Alias for {#update}
62
72
  def <<(*args, **kwargs)
63
73
  update(*args, **kwargs)
64
74
  end
65
75
 
76
+ # Finalize and output a binary hash
66
77
  def digest
67
78
  @_digest_cache ||= begin
68
79
  data_buffer = ::FFI::MemoryPointer.new(:uint8, @output_length)
@@ -71,10 +82,12 @@ module UncleBlake3
71
82
  end
72
83
  end
73
84
 
85
+ # Finalize and output a hexadecimal-encoded hash
74
86
  def hexdigest
75
87
  @_hexdigest_cache ||= digest.unpack1('H*')
76
88
  end
77
89
 
90
+ # Finalize and output a Base64-encoded hash
78
91
  def base64digest
79
92
  @_base64digest_cache ||= ::Base64.strict_encode64(digest)
80
93
  end
@@ -88,21 +101,37 @@ module UncleBlake3
88
101
  end
89
102
 
90
103
  class << self
104
+ # @!visibility private
91
105
  # https://www.mikeperham.com/2010/02/24/the-trouble-with-ruby-finalizers/
92
106
  def _create_finalizer(instance)
93
- proc {
107
+ proc do
94
108
  Binding.destroy(instance)
95
- }
109
+ end
96
110
  end
97
111
 
112
+ # Shortcut to calculate a raw digest
113
+ # @example basic usage
114
+ # ::UncleBlake3::Digest.digest('some input')
115
+ # #=> "{7\x00\f\x00EZ\xBD \x9A\x9A\x02\xDDH|>({\xC6\xA1\x9DNA\xEB\x81\xC8K\x85\x9E\xBF\x87;"
116
+ # @example with key derived from seed
117
+ # ::UncleBlake3::Digest.digest('some input', key_seed: 'secret')
118
+ # #=> "\xA7d\x13c)e\e`>\x9D\e\xB0\x9E\xF9\xA6\x82F:\xA8w;\xB0!\xBC*l\xF3w\x83\x85\xCA\x1E"
119
+ # @example with raw key (fixed-length key)
120
+ # ::UncleBlake3::Digest.digest('some input', key: '0123456789abcdef0123456789abcdef')
121
+ # #=> "8Z\x89+\x1A}\x0E\xBBI\xD4)\xC5\x9A\x8A\x17\x13[\xB7\x1DO\x98\xE8\xEF\x06\xD58\x83c\xC3u\x13\xE1"
122
+ # @example controlled output length
123
+ # ::UncleBlake3::Digest.digest('some input', output_length: 5)
124
+ # #=> "{7\x00\f\x00"
98
125
  def digest(*args, **kwargs)
99
126
  _generic_digest(*args, **kwargs, &:digest)
100
127
  end
101
128
 
129
+ # Same as {.digest} but encode the output in hexadecimal format
102
130
  def hexdigest(*args, **kwargs)
103
131
  _generic_digest(*args, **kwargs, &:hexdigest)
104
132
  end
105
133
 
134
+ # Same as {.digest} but encode the output in Base64 format
106
135
  def base64digest(*args, **kwargs)
107
136
  _generic_digest(*args, **kwargs, &:base64digest)
108
137
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module UncleBlake3
4
- VERSION = '0.0.2'
4
+ VERSION = '0.0.3'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uncle_blake3
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sarun Rattanasiri
@@ -38,9 +38,10 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 13.0.0
41
- description: This gem brought the hash algorithm, Blake3, to Ruby. It uses the official
42
- Blake3 implementation which optimized and maintained by the original Blake3 team
43
- themselves.
41
+ description: |-
42
+ Blake3 binding for Ruby
43
+ The gem build on top of the official Blake3 implementation maintained by the team behind Blake3 themselves.
44
+ It supports `AVX512`, `AVX2`, `SSE4.1`, and `SSE2` acceleration with thin and stable binding.
44
45
  email: midnight_w@gmx.tw
45
46
  executables: []
46
47
  extensions:
@@ -90,8 +91,8 @@ licenses:
90
91
  - BSD-3-Clause
91
92
  metadata:
92
93
  homepage_uri: https://github.com/the-cave/uncle-blake3
93
- source_code_uri: https://github.com/the-cave/uncle-blake3/tree/v0.0.2
94
- documentation_uri: https://rubydoc.info/gems/uncle_blake3/0.0.2/
94
+ source_code_uri: https://github.com/the-cave/uncle-blake3/tree/v0.0.3
95
+ documentation_uri: https://rubydoc.info/gems/uncle_blake3/0.0.3
95
96
  bug_tracker_uri: https://github.com/the-cave/uncle-blake3/issues
96
97
  post_install_message:
97
98
  rdoc_options: []
@@ -111,5 +112,5 @@ requirements: []
111
112
  rubygems_version: 3.2.32
112
113
  signing_key:
113
114
  specification_version: 4
114
- summary: A binding of the Blake3 hash algorithm for Ruby
115
+ summary: Blake3, the hash algorithm, native binding for Ruby
115
116
  test_files: []