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.
- checksums.yaml +7 -0
- data/.circleci/config.yml +92 -0
- data/.gitignore +4 -0
- data/Gemfile +2 -0
- data/LICENSE.txt +674 -0
- data/README.md +80 -0
- data/Rakefile +46 -0
- data/blake2b.gemspec +24 -0
- data/ext/blake2b_ext/blake2-impl.h +160 -0
- data/ext/blake2b_ext/blake2.h +195 -0
- data/ext/blake2b_ext/blake2b-ref.c +379 -0
- data/ext/blake2b_ext/extconf.rb +3 -0
- data/ext/blake2b_ext/rbext.c +108 -0
- data/lib/blake2b.rb +29 -0
- data/lib/blake2b/key.rb +55 -0
- metadata +118 -0
data/lib/blake2b.rb
ADDED
@@ -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
|
data/lib/blake2b/key.rb
ADDED
@@ -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: []
|