signed_json 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +9 -11
- data/README.md +10 -1
- data/Rakefile +3 -0
- data/lib/signed_json/version.rb +1 -1
- data/lib/signed_json.rb +6 -3
- data/signed_json.gemspec +2 -2
- metadata +6 -6
data/Gemfile.lock
CHANGED
@@ -10,16 +10,14 @@ GEM
|
|
10
10
|
diff-lcs (1.1.2)
|
11
11
|
json (1.4.6)
|
12
12
|
rake (0.8.7)
|
13
|
-
rspec (2.0
|
14
|
-
rspec-core (~> 2.
|
15
|
-
rspec-expectations (~> 2.
|
16
|
-
rspec-mocks (~> 2.
|
17
|
-
rspec-core (2.
|
18
|
-
rspec-expectations (2.0
|
19
|
-
diff-lcs (
|
20
|
-
rspec-mocks (2.0
|
21
|
-
rspec-core (~> 2.0.1)
|
22
|
-
rspec-expectations (~> 2.0.1)
|
13
|
+
rspec (2.2.0)
|
14
|
+
rspec-core (~> 2.2)
|
15
|
+
rspec-expectations (~> 2.2)
|
16
|
+
rspec-mocks (~> 2.2)
|
17
|
+
rspec-core (2.2.1)
|
18
|
+
rspec-expectations (2.2.0)
|
19
|
+
diff-lcs (~> 1.1.2)
|
20
|
+
rspec-mocks (2.2.0)
|
23
21
|
|
24
22
|
PLATFORMS
|
25
23
|
ruby
|
@@ -27,5 +25,5 @@ PLATFORMS
|
|
27
25
|
DEPENDENCIES
|
28
26
|
json
|
29
27
|
rake
|
30
|
-
rspec (~> 2.
|
28
|
+
rspec (~> 2.1)
|
31
29
|
signed_json!
|
data/README.md
CHANGED
@@ -17,7 +17,7 @@ Use.
|
|
17
17
|
### encode ###
|
18
18
|
s.encode 'a string'
|
19
19
|
s.encode ['an', 'array']
|
20
|
-
s.encode
|
20
|
+
s.encode :a => 'hash'
|
21
21
|
|
22
22
|
### decode ###
|
23
23
|
s.decode '["da7555389d05e04a3367b84aed401cafbbecfe3d","example"]'
|
@@ -43,6 +43,8 @@ Rails already has a nice signed cookie implementation, but because [`ActiveSuppo
|
|
43
43
|
|
44
44
|
`SignedJson::Signer`, on the other hand, can easily be implemented in other languages, allowing for signed cookies shared between same-domain web applications, for example.
|
45
45
|
|
46
|
+
Note that the JSON-encoding must be consistent across implementations. For example in Python, separators=(',',':') must be specified to eliminate whitespace which would invalidate the HMAC digest.
|
47
|
+
|
46
48
|
|
47
49
|
[1]: http://en.wikipedia.org/wiki/HMAC
|
48
50
|
[2]: http://ruby-doc.org/ruby-1.9/classes/OpenSSL/HMAC.html
|
@@ -75,6 +77,13 @@ RSpec speaks for the Ruby implementation:
|
|
75
77
|
Finished in 0.0186 seconds
|
76
78
|
9 examples, 0 failures
|
77
79
|
|
80
|
+
Tested against:
|
81
|
+
|
82
|
+
ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-linux]
|
83
|
+
rubinius 1.1.0 (1.8.7 release 2010-09-23 JI) [x86_64-unknown-linux-gnu]
|
84
|
+
ruby 1.8.7 (2010-08-16 patchlevel 302) [x86_64-linux]
|
85
|
+
jruby 1.5.3 (ruby 1.8.7 patchlevel 249) (2010-09-28 7ca06d7) (Java HotSpot(TM) 64-Bit Server VM 1.6.0_22) [amd64-java]
|
86
|
+
|
78
87
|
|
79
88
|
Meh.
|
80
89
|
----
|
data/Rakefile
CHANGED
data/lib/signed_json/version.rb
CHANGED
data/lib/signed_json.rb
CHANGED
@@ -19,10 +19,13 @@ module SignedJson
|
|
19
19
|
data
|
20
20
|
end
|
21
21
|
|
22
|
+
# Generates an HMAC digest for the JSON representation of the given input.
|
23
|
+
# JSON generation must be consistent across platforms.
|
24
|
+
# e.g. in Python, specify separators=(',',':') to eliminate whitespace.
|
22
25
|
def digest_for(input)
|
23
|
-
|
24
|
-
|
25
|
-
OpenSSL::HMAC.hexdigest(
|
26
|
+
require 'openssl' unless defined?(OpenSSL) # from ActiveSupport::MessageVerifier
|
27
|
+
digest = OpenSSL::Digest.const_get(@digest).new
|
28
|
+
OpenSSL::HMAC.hexdigest(digest, @secret, input.to_json)
|
26
29
|
end
|
27
30
|
|
28
31
|
private
|
data/signed_json.gemspec
CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |s|
|
|
9
9
|
s.authors = ["Paul Annesley"]
|
10
10
|
s.email = ["paul@annesley.cc"]
|
11
11
|
s.homepage = "http://github.com/pda/signed_json"
|
12
|
-
s.summary = %q{Encodes and decodes
|
12
|
+
s.summary = %q{Encodes and decodes data to a JSON string signed with OpenSSL HMAC. Great for signed cookies.}
|
13
13
|
|
14
14
|
s.rubyforge_project = "signed_json"
|
15
15
|
|
@@ -20,6 +20,6 @@ Gem::Specification.new do |s|
|
|
20
20
|
|
21
21
|
s.add_dependency('json')
|
22
22
|
|
23
|
-
s.add_development_dependency('rspec', ['~> 2.
|
23
|
+
s.add_development_dependency('rspec', ['~> 2.1'])
|
24
24
|
s.add_development_dependency('rake')
|
25
25
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 2
|
9
|
+
version: 0.0.2
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Paul Annesley
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-12-06 00:00:00 +11:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -40,8 +40,8 @@ dependencies:
|
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
segments:
|
42
42
|
- 2
|
43
|
-
-
|
44
|
-
version: "2.
|
43
|
+
- 1
|
44
|
+
version: "2.1"
|
45
45
|
type: :development
|
46
46
|
version_requirements: *id002
|
47
47
|
- !ruby/object:Gem::Dependency
|
@@ -109,6 +109,6 @@ rubyforge_project: signed_json
|
|
109
109
|
rubygems_version: 1.3.7
|
110
110
|
signing_key:
|
111
111
|
specification_version: 3
|
112
|
-
summary: Encodes and decodes
|
112
|
+
summary: Encodes and decodes data to a JSON string signed with OpenSSL HMAC. Great for signed cookies.
|
113
113
|
test_files: []
|
114
114
|
|