siphash-ir 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 7e55091c7036c3907e829a763ad81b969cfd4191
4
+ data.tar.gz: 4e55f649e006f4d25a6a27b3800bcf6ccf5c6ec7
5
+ SHA512:
6
+ metadata.gz: 255d583c4f09f75ea3d26abc580022f8e416bc949c9cfea477b6363d5ba2201f71aff2256b0ccf2b084d2e34a616504e6a7fe47e0b4b69c90ef3a9dcc37a1bf1
7
+ data.tar.gz: 50dd66edc2a0a75ca23402f022367c85f4ce2bd4aff4a87b5f7ce56a8581c34d068f7bd201c24814d6b11c9cfd7f4718ec83bb55bde991e4c674713ee4fb5d44
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source "https://rubygems.org/"
2
+ gemspec
@@ -0,0 +1,19 @@
1
+ Copyright (C) 2011-2015 InfraRuby Vision
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a
4
+ copy of this software and associated documentation files (the "Software"),
5
+ to deal in the Software without restriction, including without limitation
6
+ the rights to use, copy, modify, merge, publish, distribute, sublicense,
7
+ and/or sell copies of the Software, and to permit persons to whom the
8
+ Software is furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
18
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
19
+ DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,23 @@
1
+ InfraRuby siphash
2
+ =================
3
+
4
+ This gem provides a SipHash implementation.
5
+
6
+
7
+ Example
8
+ -------
9
+
10
+ require "siphash-ir"
11
+
12
+ puts SipHash.digest("0123456789ABCDEF", "hello, world")
13
+
14
+
15
+ Support
16
+ -------
17
+
18
+ InfraRuby Vision
19
+ rubygems@infraruby.com
20
+
21
+ http://infraruby.com/
22
+ https://github.com/InfraRuby
23
+ https://twitter.com/InfraRuby
@@ -0,0 +1,7 @@
1
+ require "infraruby-task"
2
+
3
+ loader = InfraRuby.task_loader
4
+ loader.add_program("siphash-digest")
5
+ loader.load_tasks
6
+
7
+ task "default" => "spec"
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "siphash-ir"
4
+
5
+ if ARGV.size_as_int32 != 1
6
+ STDERR.puts "Usage: siphash-digest key"
7
+ STDERR.puts "Example:"
8
+ STDERR.puts "\t" + "siphash-digest 0123456789ABCDEF"
9
+ Kernel.exit(1)
10
+ end
11
+
12
+ key = ARGV.first!
13
+
14
+ if key.bytesize_as_int32 != 16
15
+ STDERR.puts "siphash-digest: key must be 16 bytes"
16
+ Kernel.exit(1)
17
+ end
18
+
19
+ puts SipHash.digest(key, STDIN.read)
@@ -0,0 +1,3 @@
1
+ require "infraruby-shim"
2
+
3
+ InfraRuby.load_parent_library(__dir__)
@@ -0,0 +1,6 @@
1
+ ## <>
2
+ ## .digest_as_int64: int64, int64, byte[] -> int64
3
+ ## .digest: String, String -> Integer
4
+ module SipHash
5
+ end
6
+
Binary file
@@ -0,0 +1,90 @@
1
+ ## <>
2
+ module SipHash
3
+ class << self
4
+ ## int64, int64, int64, int64 -> [int64, int64, int64, int64]
5
+ def __round(v0, v1, v2, v3)
6
+ v0 += v1
7
+ v2 += v3
8
+ v1 = v1.rol(13)
9
+ v3 = v3.rol(16)
10
+ v1 ^= v0
11
+ v3 ^= v2
12
+ v0 = v0.rol(32)
13
+ v2 += v1
14
+ v0 += v3
15
+ v1 = v1.rol(17)
16
+ v3 = v3.rol(21)
17
+ v1 ^= v2
18
+ v3 ^= v0
19
+ v2 = v2.rol(32)
20
+ return [v0, v1, v2, v3]
21
+ end
22
+
23
+ ## int64, int64, byte[] -> int64
24
+ def digest_as_int64(k0, k1, m)
25
+ v0 = k0 ^ 0x736F6D6570736575
26
+ v1 = k1 ^ 0x646F72616E646F6D
27
+ v2 = k0 ^ 0x6C7967656E657261
28
+ v3 = k1 ^ 0x7465646279746573
29
+ n = m.length.i32 & ~7.i32
30
+ i = 0.i32
31
+ while i < n
32
+ w = 0.i64
33
+ j = 0.i32
34
+ while j < 64
35
+ w |= (m[i.as_i].byte & 0xFF).to_int64 << j
36
+ i += 1
37
+ j += 8
38
+ end
39
+ v3 ^= w
40
+ v0, v1, v2, v3 = __round(v0, v1, v2, v3)
41
+ v0, v1, v2, v3 = __round(v0, v1, v2, v3)
42
+ v0 ^= w
43
+ end
44
+ w = 0.i64
45
+ j = 0.i32
46
+ while i < m.length
47
+ w |= (m[i.as_i].byte & 0xFF).to_int64 << j
48
+ i += 1
49
+ j += 8
50
+ end
51
+ w |= m.length.i32.to_int64 << 070
52
+ v3 ^= w
53
+ v0, v1, v2, v3 = __round(v0, v1, v2, v3)
54
+ v0, v1, v2, v3 = __round(v0, v1, v2, v3)
55
+ v0 ^= w
56
+ v2 ^= 0xFF
57
+ v0, v1, v2, v3 = __round(v0, v1, v2, v3)
58
+ v0, v1, v2, v3 = __round(v0, v1, v2, v3)
59
+ v0, v1, v2, v3 = __round(v0, v1, v2, v3)
60
+ v0, v1, v2, v3 = __round(v0, v1, v2, v3)
61
+ return v0 ^ v1 ^ v2 ^ v3
62
+ end
63
+
64
+ ## String, String -> Integer
65
+ def digest(k, s)
66
+ m = k.to_java_bytes_unsafe
67
+ n = m.length.i32
68
+ if n != 020
69
+ raise ArgumentError, "key must be 16 bytes"
70
+ end
71
+ k1 = 0.i64
72
+ while n > 8
73
+ n -= 1
74
+ k1 <<= 8
75
+ k1 |= (m[n.as_i].byte & 0xFF).to_int64
76
+ end
77
+ k0 = 0.i64
78
+ while n > 0
79
+ n -= 1
80
+ k0 <<= 8
81
+ k0 |= (m[n.as_i].byte & 0xFF).to_int64
82
+ end
83
+ v = digest_as_int64(k0, k1, s.to_java_bytes_unsafe)
84
+ if v < 0
85
+ return v.new_fixnum & 0xFFFFFFFFFFFFFFFF
86
+ end
87
+ return v.new_fixnum
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,16 @@
1
+ Gem::Specification.new do |s|
2
+ s.platform = "ruby"
3
+ s.name = "siphash-ir"
4
+ s.version = "0.1.0"
5
+ s.licenses = ["MIT"]
6
+ s.author = "InfraRuby Vision"
7
+ s.email = "rubygems@infraruby.com"
8
+ s.homepage = "http://infraruby.com/"
9
+ s.summary = "InfraRuby SipHash implementation"
10
+ s.description = "InfraRuby SipHash implementation"
11
+ s.executables = ["siphash-digest"]
12
+ s.files = Dir["**/*"]
13
+ s.add_runtime_dependency "infraruby-shim", "~> 3.6"
14
+ s.add_development_dependency "infraruby-task", "~> 3.6"
15
+ s.add_development_dependency "rspec", "~> 3.0"
16
+ end
@@ -0,0 +1 @@
1
+ require "siphash-ir"
metadata ADDED
@@ -0,0 +1,97 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: siphash-ir
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - InfraRuby Vision
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-03-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: infraruby-shim
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.6'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '3.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: infraruby-task
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.6'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.6'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ description: InfraRuby SipHash implementation
56
+ email: rubygems@infraruby.com
57
+ executables:
58
+ - siphash-digest
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - Gemfile
63
+ - MIT-LICENSE
64
+ - README.md
65
+ - Rakefile
66
+ - bin/siphash-digest
67
+ - lib/siphash-ir.rb
68
+ - pool/siphash-ir.cut
69
+ - pool/siphash-ir.jar
70
+ - ruby/SipHash.rb
71
+ - siphash-ir.gemspec
72
+ - spec/spec_helper.rb
73
+ homepage: http://infraruby.com/
74
+ licenses:
75
+ - MIT
76
+ metadata: {}
77
+ post_install_message:
78
+ rdoc_options: []
79
+ require_paths:
80
+ - lib
81
+ required_ruby_version: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ required_rubygems_version: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ requirements: []
92
+ rubyforge_project:
93
+ rubygems_version: 2.2.2
94
+ signing_key:
95
+ specification_version: 4
96
+ summary: InfraRuby SipHash implementation
97
+ test_files: []