blake2b 0.9.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.
@@ -0,0 +1,29 @@
1
+ require 'blake2b_ext'
2
+ require 'blake2b/key'
3
+
4
+ class Blake2b
5
+ def self.hex(input, key = Blake2b::Key.none, out_len = 32)
6
+ check_if_valid!(input, key, out_len)
7
+ Blake2b.new(out_len, key).digest(input, :to_hex)
8
+ end
9
+
10
+ def self.bytes(input, key = Blake2b::Key.none, out_len = 32)
11
+ check_if_valid!(input, key, out_len)
12
+ Blake2b.new(out_len, key).digest(input, :to_bytes)
13
+ end
14
+
15
+ def self.check_if_valid!(input, key, out_len)
16
+ unless input.is_a?(String)
17
+ raise ArgumentError, 'input arg must be a String'
18
+ end
19
+
20
+ unless key.is_a?(Blake2b::Key)
21
+ raise ArgumentError, 'key arg must be a Blake2b::Key'
22
+ end
23
+
24
+ unless out_len.is_a?(Integer) && out_len.between?(1, 64)
25
+ raise ArgumentError, 'out_len arg must be an Integer between 1 and 64 inclusive'
26
+ end
27
+ end
28
+ private_class_method :check_if_valid!
29
+ end
@@ -0,0 +1,55 @@
1
+ class Blake2b
2
+ # Validate and normalize an HMAC key, provided in different formats,
3
+ # into an Array of Integer Bytes.
4
+ class Key
5
+ attr_reader :bytes
6
+
7
+ def initialize(bytes)
8
+ @bytes = bytes
9
+ end
10
+
11
+ # Create a blank Key
12
+ #
13
+ # @return [Blake2b::Key] a Blake2b::Key object with a `bytes` attr
14
+ def self.none
15
+ new([])
16
+ end
17
+
18
+ # Create a key from an ASCII String
19
+ #
20
+ # @param str [String] an ASCII String key
21
+ # @return [Blake2b::Key] a Blake2b::Key object with a `bytes` attr
22
+ def self.from_string(str)
23
+ if str.is_a?(String) && str.ascii_only?
24
+ new(str.bytes)
25
+ else
26
+ raise ArgumentError, 'key must be an ASCII String'
27
+ end
28
+ end
29
+
30
+ # Create a key from a Hex String [a-fA-F0-9]
31
+ #
32
+ # @param str [String] a Hex String key
33
+ # @return [Blake2b::Key] a Blake2b::Key object with a `bytes` attr
34
+ def self.from_hex(str)
35
+ if str.is_a?(String) && str.match(/^[a-fA-F0-9]+$/)
36
+ new([str].pack('H*').bytes)
37
+ else
38
+ raise ArgumentError, 'key must be a Hex String [a-fA-F0-9]'
39
+ end
40
+ end
41
+
42
+ # Create a key from Array of Integer (0-255) Bytes.
43
+ # This simply validates and passes through the Array.
44
+ #
45
+ # @param str [Array] an Array of Integer (0-255) Bytes
46
+ # @return [Blake2b::Key] a Blake2b::Key object with a `bytes` attr
47
+ def self.from_bytes(bytes)
48
+ if bytes.all? { |b| b.is_a?(Integer) && b.between?(0, 255) }
49
+ new(bytes)
50
+ else
51
+ raise ArgumentError, 'key must be a Byte Array of Integers (0-255)'
52
+ end
53
+ end
54
+ end
55
+ end
metadata ADDED
@@ -0,0 +1,118 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: blake2b
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.0
5
+ platform: ruby
6
+ authors:
7
+ - Franck Verrot
8
+ - Mauricio Gomes
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2018-05-30 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake-compiler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '0.9'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '0.9'
28
+ - !ruby/object:Gem::Dependency
29
+ name: bundler
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '1.5'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '1.5'
42
+ - !ruby/object:Gem::Dependency
43
+ name: rake
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '11.1'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '11.1'
56
+ - !ruby/object:Gem::Dependency
57
+ name: minitest
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '5.11'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '5.11'
70
+ description: A cryptographic hash function faster than MD5, SHA-1, SHA-2, and SHA-3
71
+ for 64-bit systems.
72
+ email:
73
+ - mauricio@edge14.com
74
+ executables: []
75
+ extensions:
76
+ - ext/blake2b_ext/extconf.rb
77
+ extra_rdoc_files: []
78
+ files:
79
+ - ".circleci/config.yml"
80
+ - ".gitignore"
81
+ - Gemfile
82
+ - LICENSE.txt
83
+ - README.md
84
+ - Rakefile
85
+ - blake2b.gemspec
86
+ - ext/blake2b_ext/blake2-impl.h
87
+ - ext/blake2b_ext/blake2.h
88
+ - ext/blake2b_ext/blake2b-ref.c
89
+ - ext/blake2b_ext/extconf.rb
90
+ - ext/blake2b_ext/rbext.c
91
+ - lib/blake2b.rb
92
+ - lib/blake2b/key.rb
93
+ homepage: https://github.com/mgomes/blake2b
94
+ licenses:
95
+ - GPL-3.0
96
+ metadata: {}
97
+ post_install_message:
98
+ rdoc_options: []
99
+ require_paths:
100
+ - lib
101
+ required_ruby_version: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ version: 2.1.0
106
+ required_rubygems_version: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ requirements: []
112
+ rubyforge_project:
113
+ rubygems_version: 2.7.6
114
+ signing_key:
115
+ specification_version: 4
116
+ summary: A cryptographic hash function faster than MD5, SHA-1, SHA-2, and SHA-3 for
117
+ 64-bit systems.
118
+ test_files: []