crumbl 0.0.4 → 0.0.5

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 CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 9a9cd5c151e6d6301e39f0af90f109bd46090c37
4
- data.tar.gz: a525fd7edc440759cb02a8b6d545890e6bc2d192
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ NzQ4NDViMWE2Y2RhMDc5ZmI3YzJlN2VhNzdlMjM1ODBiM2M5ZmQyOQ==
5
+ data.tar.gz: !binary |-
6
+ YTNhMTQwMmVlY2YyMjNlNDk0YzBlNGQ0ZTM1OGM5YjJmMDA4ZWI3OQ==
5
7
  SHA512:
6
- metadata.gz: f83a7a2e08b4fc42262d210372f6afe0e0c3962ff6a2b0c9cac214ab2a94c3765fd680e5209dd47a7ef51f670f180b4c7f16b64fa2edef80f2697215011e5431
7
- data.tar.gz: 101da5b7c6fd3bcfbce9ac8a8566781c026711fa97e2a8c371aae4f1e5245395d9eca37ceed4a9ffd3531424373623c50eff19a9c70e18bbd746ac7949715ea8
8
+ metadata.gz: !binary |-
9
+ YzBmZjZiMDQyZjFjMWI4ZWJiN2I1NmUxODA2OWVjNzgzZTc4NjdlYzk1NjNi
10
+ NjQ0NDBlOWNiYjA2MTUzMzNkNmRlZjg4ZDkyNzc2MDNjNDE3MDk5OTdlNmM2
11
+ MWJmODlhYTgxZDQyODdhZTIyMWQ5MTcxZmZlNWQ5YmY5YWJjYWE=
12
+ data.tar.gz: !binary |-
13
+ N2ZmNmRhMjA3ZjBjZWNjN2ZhNzU1YmMzNmY3M2Q4YWZhODZkYTFkZjJiN2Rk
14
+ Y2E3NDE3ZWJiZTk4MWU5YjhmYWQ2MmZjMDE4YTU5M2ZiNDkwNDE1YmI2OTQ5
15
+ NTU5Yjk3ZTE4N2IwNTljODcxNjEyMWIwNzliZjhkN2ZmY2VkY2M=
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  crumbl
2
2
  ============
3
3
 
4
- Command line tool for reading and manipulating encoded or encrypted Rails cookies
4
+ Command line tool for reading and writing encoded or encrypted Rails sessions
5
5
 
6
6
  [![Build Status](https://api.travis-ci.org/dlanner/crumbl.png?branch=master)](https://travis-ci.org/dlanner/crumbl)
7
7
 
@@ -13,8 +13,8 @@ Command line tool for reading and manipulating encoded or encrypted Rails cookie
13
13
  #### Decrypt Rails 4 encrypted cookie:
14
14
 
15
15
  ```
16
- $ crumbl decrypt "secret key base" RWRWZ0xHSEsrNmx1TlZFOEpmcCtNVEY4QjdKelNETWlNdVV0TnlCZU0zTnA4ejZka2ZCR2EyQStydGhOaTRySC0tOEQyMFc2SkpLejRidjV5V1ZBUXpEUT09--67e625ac91a2fecc9a3da7146a3a92b667e0ed17
17
- {"session_type"=>"user"}
16
+ $ crumbl decrypt "secret key base" V25qdmEwZVp3ME9HNXU5ZkxzM2srQlFrcU1FQ3dGYit1YmtlRVVnVVRROD0tLTI0U2t1cXZhNDhucGtxMnIyVTFXN2c9PQ==--62bb4aa196b53de5cc993e6377be37d704aaf372
17
+ {:session_type=>"user"}
18
18
  ```
19
19
 
20
20
  #### Encrypt Rails 4 cookie:
@@ -22,14 +22,14 @@ $ crumbl decrypt "secret key base" RWRWZ0xHSEsrNmx1TlZFOEpmcCtNVEY4QjdKelNETWlNd
22
22
  $ crumbl encrypt "secret key base"
23
23
  Data to encrypt:
24
24
  crumbl> {:session_type=>"admin"}
25
- => eXV1ckhjbHhiTjMrOFI1VzVWUzNrNnFSQnhFZzdWNE5iS2ZvaFRHRFBtaz0tLVQvNmhGSE5KeENFbWxUd0pHV2RLbnc9PQ==--7061c2425a407e5820d33d68739f54cf8a072ca3
25
+ => Z1FpV2FHRjVXQmtRQUJiamo4Vm1XSThpK0xVMlVNSUVFblpRODAvcFA0WT0tLWNlSW4zdzM1VGNmNHZNR1pSVUxMaUE9PQ==--da1cab0cf5b4a6429c9afba06294dcee5da32172
26
26
  ```
27
27
 
28
28
  #### Decode Rails 3 signed cookie:
29
29
 
30
30
  ```
31
- # crumble decode BAh7BjoRc2Vzc2lvbl90eXBlSSIJdXNlcgY6BkVU--b5ff66e18316d861087756523d129a17fcc801af
32
- {"session_type"=>"user"}
31
+ # crumbl decode BAhJIh17OnNlc3Npb25fdHlwZT0+ImFkbWluIn0GOgZFVA==--4f4881f111cd39dc06b8189580088b1472daf045
32
+ {:session_type=>"admin"}
33
33
  ```
34
34
 
35
35
  #### Encode Rails 3 signed cookie:
@@ -38,6 +38,28 @@ crumbl> {:session_type=>"admin"}
38
38
  $ crumbl encode "signing key"
39
39
  Data to encode:
40
40
  crumbl> {:session_type=>"admin"}
41
- => BAh7BjoRc2Vzc2lvbl90eXBlSSIKYWRtaW4GOgZFVA==--c2d31489de15c835a8984011f0d36f44679ad5ad
41
+ => BAhJIh17OnNlc3Npb25fdHlwZT0+ImFkbWluIn0GOgZFVA==--4f4881f111cd39dc06b8189580088b1472daf045
42
42
 
43
43
  ```
44
+
45
+ # Options
46
+
47
+ #### JSON Input:
48
+ ```
49
+ $ crumbl encrypt "secret key base"
50
+ Data to encrypt:
51
+ crumbl> {"allowed_ip": "1.2.3.4"}
52
+ => K0hjc1FYdW9hUWVkRFA2MFhHVFE4dmhWalVCSndITWtlanhVRW1ZYmM3TT0tLXhvQm1EZWZhRnZLT3E3SFgzQTFhU3c9PQ==--b9e14fdf3c4f216824a3336079853b63cbaf5d47
53
+ ```
54
+
55
+
56
+ #### Command-Line Options
57
+ ```
58
+ $ crumbl help
59
+ Commands:
60
+ crumbl decode [COOKIE] # Decode a Rails 3 cookie [COOKIE]
61
+ crumbl decrypt [KEY BASE] [COOKIE] # Decrypt Rails 4 [COOKIE] using secret key base [KEY BASE]
62
+ crumbl encode [KEY] # Encode [DATA] as a Rails 3 cookie signed with secret key [KEY]
63
+ crumbl encrypt [KEY BASE] # Encrypt Rails 4 [DATA] using secret key base [KEY BASE]
64
+ crumbl help [COMMAND] # Describe available commands or one specific command
65
+ ```
data/bin/crumbl CHANGED
@@ -12,33 +12,43 @@ end
12
12
  class CrumblCmd < Thor
13
13
  desc "decode [COOKIE]", "Decode a Rails 3 cookie [COOKIE]"
14
14
  def decode(cookie)
15
- puts Crumbl.decode cookie
15
+ puts Crumbl.new.decode cookie
16
16
  end
17
17
 
18
18
  desc "encode [KEY]", "Encode [DATA] as a Rails 3 cookie signed with secret key [KEY]"
19
19
  def encode(key)
20
20
  puts "Data to encode: "
21
21
  data = read_eval
22
- encoded = Crumbl.encode data, key
22
+ encoded = Crumbl.new.encode data, key
23
23
  show_result encoded
24
24
  end
25
25
 
26
26
  desc "decrypt [KEY BASE] [COOKIE]", "Decrypt Rails 4 [COOKIE] using secret key base [KEY BASE]"
27
- method_option :iterations, :aliases => "-i", :default => Crumbl::DEFAULT_ITERATIONS, :type => :numeric
28
- method_option :encrypted_cookie_salt, :aliases => "-e", :default => Crumbl::DEFAULT_ENCRYPTED_COOKIE_SALT
29
- method_option :encrypted_signed_cookie_salt, :aliases => "-s", :default => Crumbl::DEFAULT_ENCRYPTED_SIGNED_COOKIE_SALT
27
+ method_option :iterations, :aliases => "-i", :type => :numeric
28
+ method_option :encrypted_cookie_salt, :aliases => "-e"
29
+ method_option :encrypted_signed_cookie_salt, :aliases => "-s"
30
30
  def decrypt(secret_key_base, cookie)
31
- puts Crumbl.decrypt cookie, secret_key_base, options[:iterations], options[:encrypted_cookie_salt], options[:encrypted_signed_cookie_salt]
31
+ crumbl = Crumbl.new do |opts|
32
+ opts[:iterations] = options[:iterations]
33
+ opts[:encrypted_cookie_salt] = options[:encrypted_cookie_salt]
34
+ opts[:encrypted_signed_cookie_salt] = options[:encrypted_signed_cookie_salt]
35
+ end
36
+ puts crumbl.decrypt cookie, secret_key_base
32
37
  end
33
38
 
34
39
  desc "encrypt [KEY BASE]", "Encrypt Rails 4 [DATA] using secret key base [KEY BASE]"
35
- method_option :iterations, :aliases => "-i", :default => Crumbl::DEFAULT_ITERATIONS, :type => :numeric
36
- method_option :encrypted_cookie_salt, :aliases => "-e", :default => Crumbl::DEFAULT_ENCRYPTED_COOKIE_SALT
37
- method_option :encrypted_signed_cookie_salt, :aliases => "-s", :default => Crumbl::DEFAULT_ENCRYPTED_SIGNED_COOKIE_SALT
40
+ method_option :iterations, :aliases => "-i", :type => :numeric
41
+ method_option :encrypted_cookie_salt, :aliases => "-e"
42
+ method_option :encrypted_signed_cookie_salt, :aliases => "-s"
38
43
  def encrypt(secret_key_base)
39
44
  puts "Data to encrypt: "
40
45
  data = read_eval
41
- encrypted = Crumbl.encrypt data, secret_key_base, options[:iterations], options[:encrypted_cookie_salt], options[:encrypted_signed_cookie_salt]
46
+ crumbl = Crumbl.new do |opts|
47
+ opts[:iterations] = options[:iterations]
48
+ opts[:encrypted_cookie_salt] = options[:encrypted_cookie_salt]
49
+ opts[:encrypted_signed_cookie_salt] = options[:encrypted_signed_cookie_salt]
50
+ end
51
+ encrypted = crumbl.encrypt data, secret_key_base
42
52
  show_result encrypted
43
53
  end
44
54
 
@@ -46,7 +56,11 @@ class CrumblCmd < Thor
46
56
  def read_eval
47
57
  print "crumbl> "
48
58
  input = get_input
49
- result = eval(input)
59
+ if input.is_json?
60
+ result = JSON.parse(input)
61
+ else
62
+ result = input
63
+ end
50
64
  end
51
65
 
52
66
  def show_result result
@@ -7,8 +7,8 @@ Gem::Specification.new do |s|
7
7
  s.name = 'crumbl'
8
8
  s.version = Crumbl::VERSION
9
9
  s.date = '2014-10-08'
10
- s.summary = "Read and manipulate encoded or encrypted Rails cookies"
11
- s.description = "Command line tool for reading and manipulating encoded or encrypted Rails cookies"
10
+ s.summary = "Read and write encoded or encrypted Rails cookies"
11
+ s.description = "Command line tool for reading and writing encoded or encrypted Rails cookies"
12
12
  s.authors = ["David Lanner"]
13
13
  s.email = 'dhlanner2@gmail.com'
14
14
  s.files = `git ls-files -z`.split("\x0")
@@ -18,7 +18,7 @@ Gem::Specification.new do |s|
18
18
  s.homepage =
19
19
  'https://github.com/dlanner/crumbl'
20
20
  s.license = 'MIT'
21
- s.add_runtime_dependency "rack"
21
+ s.add_development_dependency "minitest", "~> 5"
22
22
  s.add_runtime_dependency "thor"
23
- s.add_runtime_dependency "activesupport", '~> 4.0.0'
23
+ s.add_runtime_dependency "activesupport", '~> 4.2.0'
24
24
  end
@@ -1,34 +1,53 @@
1
1
  require 'active_support/all'
2
- require 'rack'
3
2
 
4
- module Crumbl
3
+ class Crumbl
5
4
 
6
5
  DEFAULT_ITERATIONS = 1000
7
6
  DEFAULT_ENCRYPTED_COOKIE_SALT = "encrypted cookie"
8
7
  DEFAULT_ENCRYPTED_SIGNED_COOKIE_SALT = "signed encrypted cookie"
9
8
 
10
- def self.decode cookie
11
- ::Rack::Session::Cookie::Base64::Marshal.new.decode(cookie)
9
+ attr_accessor :options
10
+
11
+ def initialize
12
+ @options = {}
13
+ yield @options if block_given?
14
+ options[:iterations] ||= DEFAULT_ITERATIONS
15
+ options[:encrypted_cookie_salt] ||= DEFAULT_ENCRYPTED_COOKIE_SALT
16
+ options[:encrypted_signed_cookie_salt] ||= DEFAULT_ENCRYPTED_SIGNED_COOKIE_SALT
17
+ end
18
+
19
+ def decode cookie
20
+ Marshal.load(Base64.decode64(cookie))
12
21
  end
13
22
 
14
- def self.encode data, key
23
+ def encode data, key
15
24
  cookie_verifier = ActiveSupport::MessageVerifier.new(key)
16
25
  cookie_verifier.generate data
17
26
  end
18
27
 
19
- def self.decrypt cookie, secret_key_base, iterations=DEFAULT_ITERATIONS, encrypted_cookie_salt=DEFAULT_ENCRYPTED_COOKIE_SALT, encrypted_signed_cookie_salt=DEFAULT_ENCRYPTED_SIGNED_COOKIE_SALT
20
- key_generator = ActiveSupport::KeyGenerator.new(secret_key_base, iterations: iterations)
21
- secret = key_generator.generate_key(encrypted_cookie_salt)
22
- sign_secret = key_generator.generate_key(encrypted_signed_cookie_salt)
23
- encryptor = ActiveSupport::MessageEncryptor.new(secret, sign_secret)
28
+ def decrypt cookie, secret_key_base
29
+ encryptor = build_message_encryptor(secret_key_base)
24
30
  encryptor.decrypt_and_verify(cookie)
25
31
  end
26
32
 
27
- def self.encrypt data, secret_key_base, iterations=DEFAULT_ITERATIONS, encrypted_cookie_salt=DEFAULT_ENCRYPTED_COOKIE_SALT, encrypted_signed_cookie_salt=DEFAULT_ENCRYPTED_SIGNED_COOKIE_SALT
28
- key_generator = ActiveSupport::KeyGenerator.new(secret_key_base, iterations: iterations)
29
- secret = key_generator.generate_key(encrypted_cookie_salt)
30
- sign_secret = key_generator.generate_key(encrypted_signed_cookie_salt)
31
- encryptor = ActiveSupport::MessageEncryptor.new(secret, sign_secret)
32
- encryptor.encrypt_and_sign(data)
33
+ def encrypt data, secret_key_base
34
+ encryptor = build_message_encryptor(secret_key_base)
35
+ encryptor.encrypt_and_sign(data.to_s)
36
+ end
37
+
38
+ private
39
+
40
+ def build_message_encryptor secret_key_base
41
+ key_generator = ActiveSupport::KeyGenerator.new(secret_key_base, iterations: options[:iterations])
42
+ secret = key_generator.generate_key(options[:encrypted_cookie_salt])
43
+ sign_secret = key_generator.generate_key(options[:encrypted_signed_cookie_salt])
44
+ ActiveSupport::MessageEncryptor.new(secret, sign_secret, serializer: ActiveSupport::MessageEncryptor::NullSerializer)
45
+ end
46
+
47
+ end
48
+
49
+ class String
50
+ def is_json?
51
+ !!JSON.parse(self) rescue false
33
52
  end
34
53
  end
@@ -1,3 +1,3 @@
1
- module Crumbl
2
- VERSION = "0.0.4"
1
+ class Crumbl
2
+ VERSION = "0.0.5"
3
3
  end
@@ -10,47 +10,74 @@ class CrumblTest < Minitest::Unit::TestCase
10
10
  end
11
11
 
12
12
  def test_decrypt_encrypted
13
- encrypted = Crumbl.encrypt(@data, @key_base)
14
- decrypted = Crumbl.decrypt(encrypted, @key_base)
15
- assert_equal @data, decrypted
13
+ encrypted = Crumbl.new.encrypt(@data, @key_base)
14
+ decrypted = Crumbl.new.decrypt(encrypted, @key_base)
15
+ assert_equal @data, eval(decrypted)
16
16
  end
17
17
 
18
18
  def test_custom_iterations_equal
19
- encrypted = Crumbl.encrypt(@data, @key_base, @custom_iterations)
20
- decrypted = Crumbl.decrypt(encrypted, @key_base, @custom_iterations)
21
- assert_equal @data, decrypted
19
+ crumbl = Crumbl.new do |opts|
20
+ opts[:iterations] = @custom_iterations
21
+ opts[:encrypted_cookie_salt] = @custom_encrypted_cookie_salt
22
+ opts[:encrypted_signed_cookie_salt] = @custom_encrypted_signed_cookie_salt
23
+ end
24
+ encrypted = crumbl.encrypt(@data, @key_base)
25
+ decrypted = crumbl.decrypt(encrypted, @key_base)
26
+ assert_equal @data, eval(decrypted)
22
27
  end
23
28
 
24
29
  def test_custom_iterations_not_equal
25
- encrypted = Crumbl.encrypt(@data, @key_base)
30
+ encrypted = Crumbl.new.encrypt(@data, @key_base)
26
31
  assert_raises ActiveSupport::MessageVerifier::InvalidSignature do
27
- Crumbl.decrypt(encrypted, @key_base, @custom_iterations)
32
+ crumbl = Crumbl.new do |opts|
33
+ opts[:iterations] = @custom_iterations
34
+ end
35
+ crumbl.decrypt(encrypted, @key_base)
28
36
  end
29
37
  end
30
38
 
31
39
  def test_custom_encrypted_cookie_salt_equal
32
- encrypted = Crumbl.encrypt(@data, @key_base, Crumbl::DEFAULT_ITERATIONS, @custom_encrypted_cookie_salt)
33
- decrypted = Crumbl.decrypt(encrypted, @key_base, Crumbl::DEFAULT_ITERATIONS, @custom_encrypted_cookie_salt)
34
- assert_equal @data, decrypted
40
+ crumbl = Crumbl.new do |opts|
41
+ opts[:encrypted_cookie_salt] = @custom_encrypted_cookie_salt
42
+ end
43
+ encrypted = crumbl.encrypt(@data, @key_base)
44
+ decrypted = crumbl.decrypt(encrypted, @key_base)
45
+ assert_equal @data, eval(decrypted)
35
46
  end
36
47
 
37
48
  def test_custom_encrypted_cookie_salt_not_equal
38
- encrypted = Crumbl.encrypt(@data, @key_base)
49
+ encrypted = Crumbl.new.encrypt(@data, @key_base)
39
50
  assert_raises ActiveSupport::MessageEncryptor::InvalidMessage do
40
- Crumbl.decrypt(encrypted, @key_base, Crumbl::DEFAULT_ITERATIONS, @custom_encrypted_cookie_salt)
51
+ crumbl = Crumbl.new do |opts|
52
+ opts[:encrypted_cookie_salt] = @custom_encrypted_cookie_salt
53
+ end
54
+ crumbl.decrypt(encrypted, @key_base)
41
55
  end
42
56
  end
43
57
 
44
58
  def test_custom_encrypted_signed_cookie_salt_equal
45
- encrypted = Crumbl.encrypt(@data, @key_base, Crumbl::DEFAULT_ITERATIONS, Crumbl::DEFAULT_ENCRYPTED_COOKIE_SALT, @custom_encrypted_signed_cookie_salt)
46
- decrypted = Crumbl.decrypt(encrypted, @key_base, Crumbl::DEFAULT_ITERATIONS, Crumbl::DEFAULT_ENCRYPTED_COOKIE_SALT, @custom_encrypted_signed_cookie_salt)
47
- assert_equal @data, decrypted
59
+ crumbl = Crumbl.new do |opts|
60
+ opts[:encrypted_signed_cookie_salt] = @custom_encrypted_signed_cookie_salt
61
+ end
62
+ encrypted = crumbl.encrypt(@data, @key_base)
63
+ decrypted = crumbl.decrypt(encrypted, @key_base)
64
+ assert_equal @data, eval(decrypted)
48
65
  end
49
66
 
50
67
  def test_custom_encrypted_signed_cookie_salt_not_equal
51
- encrypted = Crumbl.encrypt(@data, @key_base)
68
+ encrypted = Crumbl.new.encrypt(@data, @key_base)
52
69
  assert_raises ActiveSupport::MessageVerifier::InvalidSignature do
53
- Crumbl.decrypt(encrypted, @key_base, Crumbl::DEFAULT_ITERATIONS, Crumbl::DEFAULT_ENCRYPTED_COOKIE_SALT, @custom_encrypted_signed_cookie_salt)
70
+ crumbl = Crumbl.new do |opts|
71
+ opts[:encrypted_signed_cookie_salt] = @custom_encrypted_signed_cookie_salt
72
+ end
73
+ crumbl.decrypt(encrypted, @key_base)
54
74
  end
55
75
  end
76
+
77
+ def test_accepts_json
78
+ json_data = @data.to_json.to_s
79
+ encrypted = Crumbl.new.encrypt(json_data, @key_base)
80
+ decrypted = Crumbl.new.decrypt(encrypted, @key_base)
81
+ assert_equal HashWithIndifferentAccess.new(@data), HashWithIndifferentAccess.new(JSON.parse(decrypted))
82
+ end
56
83
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: crumbl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Lanner
@@ -11,48 +11,48 @@ cert_chain: []
11
11
  date: 2014-10-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rack
14
+ name: minitest
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :runtime
19
+ version: '5'
20
+ type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - ~>
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '5'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: thor
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - ! '>='
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - ! '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: activesupport
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ~>
46
46
  - !ruby/object:Gem::Version
47
- version: 4.0.0
47
+ version: 4.2.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ~>
53
53
  - !ruby/object:Gem::Version
54
- version: 4.0.0
55
- description: Command line tool for reading and manipulating encoded or encrypted Rails
54
+ version: 4.2.0
55
+ description: Command line tool for reading and writing encoded or encrypted Rails
56
56
  cookies
57
57
  email: dhlanner2@gmail.com
58
58
  executables:
@@ -60,8 +60,8 @@ executables:
60
60
  extensions: []
61
61
  extra_rdoc_files: []
62
62
  files:
63
- - ".gitignore"
64
- - ".travis.yml"
63
+ - .gitignore
64
+ - .travis.yml
65
65
  - Gemfile
66
66
  - LICENSE
67
67
  - README.md
@@ -83,12 +83,12 @@ require_paths:
83
83
  - bin
84
84
  required_ruby_version: !ruby/object:Gem::Requirement
85
85
  requirements:
86
- - - ">="
86
+ - - ! '>='
87
87
  - !ruby/object:Gem::Version
88
88
  version: '0'
89
89
  required_rubygems_version: !ruby/object:Gem::Requirement
90
90
  requirements:
91
- - - ">="
91
+ - - ! '>='
92
92
  - !ruby/object:Gem::Version
93
93
  version: '0'
94
94
  requirements: []
@@ -96,6 +96,6 @@ rubyforge_project:
96
96
  rubygems_version: 2.4.2
97
97
  signing_key:
98
98
  specification_version: 4
99
- summary: Read and manipulate encoded or encrypted Rails cookies
99
+ summary: Read and write encoded or encrypted Rails cookies
100
100
  test_files:
101
101
  - test/test_crumbl.rb