crumbl 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
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