crumbl 0.0.1

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: 96844368eb9bb07b4a3e1b9f465e693e4ceb7968
4
+ data.tar.gz: 1650c8a197aac92dfbf656ee9c94e85fa55ca2a6
5
+ SHA512:
6
+ metadata.gz: 8107ad12dc873a67f434200ff53dd79c1c45075431b8685be13a00387f818e15026eed6431a8c0726f26718a195b1636d91cf2a9e202c699a11d686d5bbf048e
7
+ data.tar.gz: e874767de7015be80554ed2ecb03106a0b92e5f681d236eefa5a4fd8088be7c362513ac20d397cbe9f496de72fba21f49737b72410a199b7ed687fe8da883a27
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ begin
4
+ require 'crumbl'
5
+ require 'thor'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'crumbl'
9
+ require 'thor'
10
+ end
11
+
12
+ class CrumblCmd < Thor
13
+ desc "decode [COOKIE]", "Decode a Rails 3 cookie [COOKIE]"
14
+ def decode(cookie)
15
+ Crumbl.decode cookie
16
+ end
17
+
18
+ desc "encode [DATA] [KEY]", "Encode [DATA] as a Rails 3 cookie signed with secret key [KEY]"
19
+ def encode(data, key)
20
+ Crumbl.encode data, key
21
+ end
22
+
23
+ desc "decrypt [COOKIE] [KEY BASE]", "Decrypt Rails 4 [COOKIE] using secret key base [KEY BASE]"
24
+ method_option :iterations, :aliases => "-i", :default => Crumbl::DEFAULT_ITERATIONS, :type => :numeric
25
+ method_option :encrypted_cookie_salt, :aliases => "-e", :default => Crumbl::DEFAULT_ENCRYPTED_COOKIE_SALT
26
+ method_option :encrypted_signed_cookie_salt, :aliases => "-s", :default => Crumbl::DEFAULT_ENCRYPTED_SIGNED_COOKIE_SALT
27
+ def decrypt(cookie, secret_key_base)
28
+ Crumbl.decrypt cookie, secret_key_base, options[:iterations], options[:encrypted_cookie_salt], options[:encrypted_signed_cookie_salt]
29
+ end
30
+
31
+ desc "encrypt [DATA] [KEY BASE]", "Encrypt Rails 4 [DATA] using secret key base [KEY BASE]"
32
+ method_option :iterations, :aliases => "-i", :default => Crumbl::DEFAULT_ITERATIONS, :type => :numeric
33
+ method_option :encrypted_cookie_salt, :aliases => "-e", :default => Crumbl::DEFAULT_ENCRYPTED_COOKIE_SALT
34
+ method_option :encrypted_signed_cookie_salt, :aliases => "-s", :default => Crumbl::DEFAULT_ENCRYPTED_SIGNED_COOKIE_SALT
35
+ def encrypt(data, secret_key_base)
36
+ Crumbl.encrypt data, secret_key_base, options[:iterations], options[:encrypted_cookie_salt], options[:encrypted_signed_cookie_salt]
37
+ end
38
+ end
39
+
40
+ CrumblCmd.start
@@ -0,0 +1 @@
1
+ require 'crumbl/base'
@@ -0,0 +1,38 @@
1
+ require 'active_support/all'
2
+ require 'rack'
3
+
4
+ class Crumbl
5
+
6
+ DEFAULT_ITERATIONS = 1000
7
+ DEFAULT_ENCRYPTED_COOKIE_SALT = "encrypted cookie"
8
+ DEFAULT_ENCRYPTED_SIGNED_COOKIE_SALT = "signed encrypted cookie"
9
+
10
+ def self.decode cookie
11
+ decoded = ::Rack::Session::Cookie::Base64::Marshal.new.decode(cookie)
12
+ puts "Decoded: #{decoded}"
13
+ end
14
+
15
+ def self.encode data, key
16
+ cookie_verifier = ActiveSupport::MessageVerifier.new(key)
17
+ encoded = cookie_verifier.generate data
18
+ puts "Encoded: #{encoded}"
19
+ end
20
+
21
+ 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
22
+ key_generator = ActiveSupport::KeyGenerator.new(secret_key_base, iterations: iterations)
23
+ secret = key_generator.generate_key(encrypted_cookie_salt)
24
+ sign_secret = key_generator.generate_key(encrypted_signed_cookie_salt)
25
+ encryptor = ActiveSupport::MessageEncryptor.new(secret, sign_secret)
26
+ decrypted = encryptor.decrypt_and_verify(cookie)
27
+ puts "Decrypted: #{decrypted}"
28
+ end
29
+
30
+ 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
31
+ key_generator = ActiveSupport::KeyGenerator.new(secret_key_base, iterations: iterations)
32
+ secret = key_generator.generate_key(encrypted_cookie_salt)
33
+ sign_secret = key_generator.generate_key(encrypted_signed_cookie_salt)
34
+ encryptor = ActiveSupport::MessageEncryptor.new(secret, sign_secret)
35
+ encrypted = encryptor.encrypt_and_sign(data)
36
+ puts "Encrypted: #{encrypted}"
37
+ end
38
+ end
@@ -0,0 +1,3 @@
1
+ module Crumbl
2
+ VERSION = "0.0.1"
3
+ end
metadata ADDED
@@ -0,0 +1,78 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: crumbl
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - David Lanner
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-10-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rack
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
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: activesupport
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 4.0.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 4.0.0
41
+ description: Command line tool for reading and manipulating encoded or encrypted Rails
42
+ cookies
43
+ email: dhlanner2@gmail.com
44
+ executables:
45
+ - crumbl
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - bin/crumbl
50
+ - lib/crumbl.rb
51
+ - lib/crumbl/base.rb
52
+ - lib/crumbl/version.rb
53
+ homepage: http://rubygems.org/gems/crumbl
54
+ licenses:
55
+ - MIT
56
+ metadata: {}
57
+ post_install_message:
58
+ rdoc_options: []
59
+ require_paths:
60
+ - lib
61
+ - bin
62
+ required_ruby_version: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ required_rubygems_version: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: '0'
72
+ requirements: []
73
+ rubyforge_project:
74
+ rubygems_version: 2.4.2
75
+ signing_key:
76
+ specification_version: 4
77
+ summary: Read and manipulate encoded or encrypted Rails cookies
78
+ test_files: []