digest-kangarootwelve 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Gemfile +2 -0
- data/LICENSE +22 -0
- data/README.md +84 -0
- data/Rakefile +20 -0
- data/digest-kangarootwelve.gemspec +29 -0
- data/ext/digest/kangarootwelve/KangarooTwelve.c +275 -0
- data/ext/digest/kangarootwelve/KangarooTwelve.h +93 -0
- data/ext/digest/kangarootwelve/KeccakP-1600-SnP.h +38 -0
- data/ext/digest/kangarootwelve/KeccakP-1600-compact64.c +412 -0
- data/ext/digest/kangarootwelve/KeccakP-1600-times2-SnP.h +45 -0
- data/ext/digest/kangarootwelve/KeccakP-1600-times2-on1.c +31 -0
- data/ext/digest/kangarootwelve/KeccakP-1600-times4-SnP.h +45 -0
- data/ext/digest/kangarootwelve/KeccakP-1600-times4-on1.c +31 -0
- data/ext/digest/kangarootwelve/KeccakP-1600-times8-SnP.h +45 -0
- data/ext/digest/kangarootwelve/KeccakP-1600-times8-on1.c +31 -0
- data/ext/digest/kangarootwelve/KeccakSponge-common.h +37 -0
- data/ext/digest/kangarootwelve/KeccakSponge.inc +313 -0
- data/ext/digest/kangarootwelve/KeccakSpongeWidth1600.c +56 -0
- data/ext/digest/kangarootwelve/KeccakSpongeWidth1600.h +33 -0
- data/ext/digest/kangarootwelve/Phases.h +26 -0
- data/ext/digest/kangarootwelve/PlSnP-Fallback.inc +283 -0
- data/ext/digest/kangarootwelve/SnP-Relaned.h +134 -0
- data/ext/digest/kangarootwelve/align.h +34 -0
- data/ext/digest/kangarootwelve/brg_endian.h +142 -0
- data/ext/digest/kangarootwelve/ext.c +640 -0
- data/ext/digest/kangarootwelve/extconf.rb +2 -0
- data/lib/digest/kangarootwelve/version.rb +5 -0
- data/test/test.rb +102 -0
- metadata +116 -0
data/test/test.rb
ADDED
@@ -0,0 +1,102 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
TEST_DIR = File.dirname(__FILE__)
|
5
|
+
require File.join(TEST_DIR, %w{ .. lib digest kangarootwelve })
|
6
|
+
|
7
|
+
def get_repeated_0x00_to_0xfa(length)
|
8
|
+
hex = (0..0xfa).to_a.map{ |e| sprintf "%2x", e }.join
|
9
|
+
str = [hex].pack('H*')
|
10
|
+
cycles = (Float(length) / str.size).ceil
|
11
|
+
[str].cycle(cycles).to_a.join[0...length]
|
12
|
+
end
|
13
|
+
|
14
|
+
def get_repeated_0xff(length)
|
15
|
+
str = ["ffffffffffffffffffff"].pack('H*')
|
16
|
+
cycles = (Float(length) / str.size).ceil
|
17
|
+
[str].cycle(cycles).to_a.join[0...length]
|
18
|
+
end
|
19
|
+
|
20
|
+
describe Digest::KangarooTwelve do
|
21
|
+
it "produces implementation classes" do
|
22
|
+
Digest::KangarooTwelve[32].superclass.must_equal Digest::KangarooTwelve::Impl
|
23
|
+
Digest::KangarooTwelve[32].digest_length.must_equal 32
|
24
|
+
Digest::KangarooTwelve[32].must_equal Digest::KangarooTwelve_32
|
25
|
+
Digest::KangarooTwelve.implement(digest_length: 64).superclass.must_equal Digest::KangarooTwelve::Impl
|
26
|
+
Digest::KangarooTwelve.implement(digest_length: 64).digest_length.must_equal 64
|
27
|
+
Digest::KangarooTwelve.implement(digest_length: 64).must_equal Digest::KangarooTwelve_64
|
28
|
+
end
|
29
|
+
|
30
|
+
it "produces a default implemention with a digest length of 64" do
|
31
|
+
Digest::KangarooTwelve.implement.must_equal Digest::KangarooTwelve_64
|
32
|
+
Digest::KangarooTwelve_64.digest_length.must_equal 64
|
33
|
+
end
|
34
|
+
|
35
|
+
it "produces instances that are consistent with produced implementation classes" do
|
36
|
+
Digest::KangarooTwelve[32].new.class.must_equal Digest::KangarooTwelve_32
|
37
|
+
Digest::KangarooTwelve.implement(digest_length: 48).must_equal Digest::KangarooTwelve_48
|
38
|
+
end
|
39
|
+
|
40
|
+
it "produces classes with equal digest length as its instances" do
|
41
|
+
Digest::KangarooTwelve[32].new.digest_length.must_equal Digest::KangarooTwelve_32.digest_length
|
42
|
+
Digest::KangarooTwelve.implement(digest_length: 48).new.digest_length.must_equal Digest::KangarooTwelve_48.digest_length
|
43
|
+
end
|
44
|
+
|
45
|
+
it "produces a hash" do
|
46
|
+
Digest::KangarooTwelve.default.new.digest("")
|
47
|
+
end
|
48
|
+
|
49
|
+
it "works with customization strings" do
|
50
|
+
Digest::KangarooTwelve.implement(customization: "abc").new.digest("")
|
51
|
+
end
|
52
|
+
|
53
|
+
it "produces implementations with small and long option names" do
|
54
|
+
a = Digest::KangarooTwelve.implement(n: "KangarooTwelveTestA", d: 48, b: 512, c: "abc")
|
55
|
+
b = Digest::KangarooTwelve.implement(name: "KangarooTwelveTestB", digest_length: 48, block_length: 512, customization: "abc")
|
56
|
+
a.name.must_equal "Digest::KangarooTwelveTestA"
|
57
|
+
b.name.must_equal "Digest::KangarooTwelveTestB"
|
58
|
+
a.digest_length.must_equal 48
|
59
|
+
a.digest_length.must_equal b.digest_length
|
60
|
+
a.block_length.must_equal 512
|
61
|
+
a.block_length.must_equal b.block_length
|
62
|
+
a.customization.must_equal "abc"
|
63
|
+
a.customization.must_equal b.customization
|
64
|
+
end
|
65
|
+
|
66
|
+
it "produces valid hashes" do
|
67
|
+
# KangarooTwelve(M=empty, C=empty, 32 bytes):
|
68
|
+
Digest::KangarooTwelve[32].new.hexdigest("").must_equal "1ac2d450fc3b4205d19da7bfca1b37513c0803577ac7167f06fe2ce1f0ef39e5"
|
69
|
+
# KangarooTwelve(M=empty, C=empty, 64 bytes):
|
70
|
+
Digest::KangarooTwelve[64].new.hexdigest("").must_equal "1ac2d450fc3b4205d19da7bfca1b37513c0803577ac7167f06fe2ce1f0ef39e54269c056b8c82e48276038b6d292966cc07a3d4645272e31ff38508139eb0a71"
|
71
|
+
# KangarooTwelve(M=empty, C=empty, 10032 bytes), last 32 bytes:
|
72
|
+
Digest::KangarooTwelve[10032].new.hexdigest("")[-64..-1].must_equal "e8dc563642f7228c84684c898405d3a834799158c079b12880277a1d28e2ff6d"
|
73
|
+
|
74
|
+
# KangarooTwelve(M=pattern 0x00 to 0xFA for 17^i bytes, C=empty, 32 bytes):
|
75
|
+
[
|
76
|
+
[0, "2bda92450e8b147f8a7cb629e784a058efca7cf7d8218e02d345dfaa65244a1f"],
|
77
|
+
[1, "6bf75fa2239198db4772e36478f8e19b0f371205f6a9a93a273f51df37122888"],
|
78
|
+
[2, "0c315ebcdedbf61426de7dcf8fb725d1e74675d7f5327a5067f367b108ecb67c"],
|
79
|
+
[3, "cb552e2ec77d9910701d578b457ddf772c12e322e4ee7fe417f92c758f0d59d0"],
|
80
|
+
[4, "8701045e22205345ff4dda05555cbb5c3af1a771c2b89baef37db43d9998b9fe"],
|
81
|
+
[5, "844d610933b1b9963cbdeb5ae3b6b05cc7cbd67ceedf883eb678a0a8e0371682"],
|
82
|
+
[6, "3c390782a8a4e89fa6367f72feaaf13255c8d95878481d3cd8ce85f58e880af8"]
|
83
|
+
].each do |i, hash|
|
84
|
+
m = get_repeated_0x00_to_0xfa(17 ** i)
|
85
|
+
Digest::KangarooTwelve[32].new.hexdigest(m).must_equal hash
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
it "produces valid hashes with customization strings" do
|
90
|
+
# KangarooTwelve(M=i times byte 0xFF, C=pattern 0x00 to 0xFA for 41^j bytes, 32 bytes):
|
91
|
+
[
|
92
|
+
[0, 0, "fab658db63e94a246188bf7af69a133045f46ee984c56e3c3328caaf1aa1a583"],
|
93
|
+
[1, 1, "d848c5068ced736f4462159b9867fd4c20b808acc3d5bc48e0b06ba0a3762ec4"],
|
94
|
+
[3, 2, "c389e5009ae57120854c2e8c64670ac01358cf4c1baf89447a724234dc7ced74"],
|
95
|
+
[7, 3, "75d2f86a2e644566726b4fbcfc5657b9dbcf070c7b0dca06450ab291d7443bcf"]
|
96
|
+
].each do |i, j, hash|
|
97
|
+
m = get_repeated_0xff(i)
|
98
|
+
c = get_repeated_0x00_to_0xfa(41 ** j)
|
99
|
+
Digest::KangarooTwelve.implement(digest_length: 32, customization: c).new.hexdigest(m).must_equal hash
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
metadata
ADDED
@@ -0,0 +1,116 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: digest-kangarootwelve
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- konsolebox
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-08-12 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rake
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake-compiler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitest
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '5.8'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '5.8'
|
55
|
+
description: An implementation of KangarooTwelve for Ruby that works on top of Digest::Base.
|
56
|
+
email:
|
57
|
+
- konsolebox@gmail.com
|
58
|
+
executables: []
|
59
|
+
extensions:
|
60
|
+
- ext/digest/kangarootwelve/extconf.rb
|
61
|
+
extra_rdoc_files: []
|
62
|
+
files:
|
63
|
+
- Gemfile
|
64
|
+
- LICENSE
|
65
|
+
- README.md
|
66
|
+
- Rakefile
|
67
|
+
- digest-kangarootwelve.gemspec
|
68
|
+
- ext/digest/kangarootwelve/KangarooTwelve.c
|
69
|
+
- ext/digest/kangarootwelve/KangarooTwelve.h
|
70
|
+
- ext/digest/kangarootwelve/KeccakP-1600-SnP.h
|
71
|
+
- ext/digest/kangarootwelve/KeccakP-1600-compact64.c
|
72
|
+
- ext/digest/kangarootwelve/KeccakP-1600-times2-SnP.h
|
73
|
+
- ext/digest/kangarootwelve/KeccakP-1600-times2-on1.c
|
74
|
+
- ext/digest/kangarootwelve/KeccakP-1600-times4-SnP.h
|
75
|
+
- ext/digest/kangarootwelve/KeccakP-1600-times4-on1.c
|
76
|
+
- ext/digest/kangarootwelve/KeccakP-1600-times8-SnP.h
|
77
|
+
- ext/digest/kangarootwelve/KeccakP-1600-times8-on1.c
|
78
|
+
- ext/digest/kangarootwelve/KeccakSponge-common.h
|
79
|
+
- ext/digest/kangarootwelve/KeccakSponge.inc
|
80
|
+
- ext/digest/kangarootwelve/KeccakSpongeWidth1600.c
|
81
|
+
- ext/digest/kangarootwelve/KeccakSpongeWidth1600.h
|
82
|
+
- ext/digest/kangarootwelve/Phases.h
|
83
|
+
- ext/digest/kangarootwelve/PlSnP-Fallback.inc
|
84
|
+
- ext/digest/kangarootwelve/SnP-Relaned.h
|
85
|
+
- ext/digest/kangarootwelve/align.h
|
86
|
+
- ext/digest/kangarootwelve/brg_endian.h
|
87
|
+
- ext/digest/kangarootwelve/ext.c
|
88
|
+
- ext/digest/kangarootwelve/extconf.rb
|
89
|
+
- lib/digest/kangarootwelve/version.rb
|
90
|
+
- test/test.rb
|
91
|
+
homepage: https://github.com/konsolebox/digest-kangaootwelve-ruby
|
92
|
+
licenses:
|
93
|
+
- MIT
|
94
|
+
metadata: {}
|
95
|
+
post_install_message:
|
96
|
+
rdoc_options: []
|
97
|
+
require_paths:
|
98
|
+
- lib
|
99
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '2.2'
|
104
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
105
|
+
requirements:
|
106
|
+
- - ">="
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: '0'
|
109
|
+
requirements: []
|
110
|
+
rubyforge_project:
|
111
|
+
rubygems_version: 2.6.8
|
112
|
+
signing_key:
|
113
|
+
specification_version: 4
|
114
|
+
summary: KangarooTwelve for Ruby
|
115
|
+
test_files:
|
116
|
+
- test/test.rb
|