urlcrypt 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 43b85d8e2005d9c5fb0b2181f9865acb54c85123b9e4aeac7c7c66360aedbdfd
4
+ data.tar.gz: '008bc1517bf2fd48531d97bdfa4738520b59c855f145716238bd92edc5ba52bc'
5
+ SHA512:
6
+ metadata.gz: 9c663737786ae94458f6a28442936fd6bdcdde71bbb198d13c1693d151a028d03d647ff080ccdb2b243fa49310b6cc97b95ea305abc28fd22d46d918f10e00e0
7
+ data.tar.gz: 92567f8985d16055720cea95be351e0a675c764734ae9aba366cb85f360d763d623e44136385c09edece332765eb417f5f79be943a2046abcf466323baf6b110
data/README.md CHANGED
@@ -20,7 +20,7 @@ that doesn't have other authentication or persistence mechanisms (like cookies):
20
20
  * Links that come with an expiration date (à la S3)
21
21
  * Mini-apps that don't persist data on the server
22
22
 
23
- Works with Ruby 1.8, 1.9 and 2.0.
23
+ Works with Ruby 2.1+
24
24
 
25
25
  **Important**: As a general guideline, URL lengths shouldn't exceed about 2000
26
26
  characters in length, as URLs longer than that will not work in some browsers
@@ -29,14 +29,17 @@ with URLcrypt.
29
29
 
30
30
  **WORD OF WARNING: THERE IS NO GUARANTEE WHATSOEVER THAT THIS GEM IS ACTUALLY SECURE AND WORKS. USE AT YOUR OWN RISK.**
31
31
 
32
- URLcrypt is an extraction from [Freckle Time Tracking](http://letsfreckle.com/),
32
+ URLcrypt is an extraction from [Noko Time Tracking](https://nokotime.com),
33
33
  where it is used to generate URLs for dynamically generated images in emails.
34
34
 
35
35
  Patches are welcome; please include tests!
36
36
 
37
37
  ## Installation
38
38
 
39
- Add `urlcrypt` to your Gemfile.
39
+ Add to your Gemfile:
40
+ ```ruby
41
+ gem 'urlcrypt', '~> 0.1.1', require: 'URLcrypt'
42
+ ```
40
43
 
41
44
  ## Example
42
45
 
data/Rakefile CHANGED
@@ -38,7 +38,7 @@ gemspec = Gem::Specification.new do |s|
38
38
  s.require_paths << 'lib'
39
39
  s.requirements << 'none'
40
40
  s.summary = "Securely encode and decode short pieces of arbitrary binary data in URLs."
41
- s.version = "0.1.1"
41
+ s.version = "0.1.2"
42
42
  end
43
43
 
44
44
  Gem::PackageTask.new(gemspec) do |pkg|
@@ -72,7 +72,7 @@ module URLcrypt
72
72
  def self.cipher(mode)
73
73
  cipher = OpenSSL::Cipher.new('aes-256-cbc')
74
74
  cipher.send(mode)
75
- cipher.key = @key
75
+ cipher.key = @key.byteslice(0,cipher.key_len)
76
76
  cipher
77
77
  end
78
78
 
@@ -1,37 +1,7 @@
1
1
  # encoding: utf-8
2
- require 'bundler'
3
- Bundler.require(:default, :test)
4
-
5
- require 'coveralls'
6
- Coveralls.wear!
7
-
8
- require 'test/unit'
9
-
10
- class TestURLcrypt < Test::Unit::TestCase
11
-
12
- require 'URLcrypt'
13
-
14
- def assert_bytes_equal(string1, string2)
15
- bytes1 = string1.bytes.to_a.join(':')
16
- bytes2 = string2.bytes.to_a.join(':')
17
- assert_equal(bytes1, bytes2)
18
- end
19
-
20
- def assert_decoding(encoded, plain)
21
- decoded = URLcrypt.decode(encoded)
22
- assert_bytes_equal(plain, decoded)
23
- end
24
-
25
- def assert_encoding(encoded, plain)
26
- actual = URLcrypt.encode(plain)
27
- assert_bytes_equal(encoded, actual)
28
- end
29
-
30
- def assert_encode_and_decode(encoded, plain)
31
- assert_encoding(encoded, plain)
32
- assert_decoding(encoded, plain)
33
- end
2
+ require 'test_helper'
34
3
 
4
+ class TestURLcrypt < TestClass
35
5
  def test_empty_string
36
6
  assert_encode_and_decode('', '')
37
7
  end
@@ -41,11 +11,11 @@ class TestURLcrypt < Test::Unit::TestCase
41
11
  '111gc86f4nxw5zj1b3qmhpb14n5h25l4m7111',
42
12
  "\0\0awesome \n ü string\0\0")
43
13
  end
44
-
14
+
45
15
  def test_invalid_encoding
46
16
  assert_decoding('ZZZZZ', '')
47
17
  end
48
-
18
+
49
19
  def test_arbitrary_byte_strings
50
20
  0.step(1500,17) do |n|
51
21
  original = (0..n).map{rand(256).chr}.join
@@ -55,10 +25,12 @@ class TestURLcrypt < Test::Unit::TestCase
55
25
  end
56
26
 
57
27
  def test_encryption
58
- # this key was generated via rake secret in a rails app, the pack() converts it into a byte array
59
- URLcrypt::key =
60
- ['d25883a27b9a639da85ea7e159b661218799c9efa63069fac13a6778c954fb6d721968887a19bdb01af8f59eb5a90d256bd9903355c20b0b4b39bf4048b9b17b'].pack('H*')
61
-
28
+ # pack() converts this secret into a byte array
29
+ secret = ['d25883a27b9a639da85ea7e159b661218799c9efa63069fac13a6778c954fb6d'].pack('H*')
30
+ URLcrypt::key = secret
31
+
32
+ assert_equal OpenSSL::Cipher.new('aes-256-cbc').key_len, secret.bytesize
33
+
62
34
  original = "hello world!"
63
35
  encrypted = URLcrypt::encrypt(original)
64
36
  assert_equal(URLcrypt::decrypt(encrypted), original)
@@ -0,0 +1,36 @@
1
+ # encoding: utf-8
2
+ class URLcryptRegressionTest < TestClass
3
+ def test_encryption_and_decryption
4
+ original = '{"some":"json_data","token":"dfsfsdfsdf"}'
5
+ encrypted = URLcrypt.encrypt(original)
6
+
7
+ encrypted = URLcrypt::encrypt(original)
8
+ assert_equal(URLcrypt::decrypt(encrypted), original)
9
+ end
10
+
11
+ def test_encryption_with_too_long_key
12
+ # this key was generated via rake secret in a rails app, the pack() converts it into a byte array
13
+ secret = ['d25883a27b9a639da85ea7e159b661218799c9efa63069fac13a6778c954fb6d721968887a19bdb01af8f59eb5a90d256bd9903355c20b0b4b39bf4048b9b17b'].pack('H*')
14
+ URLcrypt::key = secret
15
+
16
+ assert OpenSSL::Cipher.new('aes-256-cbc').key_len < secret.bytesize
17
+
18
+ original = "hello world!"
19
+ encrypted = URLcrypt::encrypt(original)
20
+ assert_equal(URLcrypt::decrypt(encrypted), original)
21
+ end
22
+
23
+ def test_encryption_and_decryption_with_too_long_key
24
+ # this key was generated via rake secret in a rails app, the pack() converts it into a byte array
25
+ secret = ['d25883a27b9a639da85ea7e159b661218799c9efa63069fac13a6778c954fb6d721968887a19bdb01af8f59eb5a90d256bd9903355c20b0b4b39bf4048b9b17b'].pack('H*')
26
+ URLcrypt::key = secret
27
+
28
+ assert OpenSSL::Cipher.new('aes-256-cbc').key_len < secret.bytesize
29
+
30
+ original = '{"some":"json_data","token":"dfsfsdfsdf"}'
31
+ encrypted = URLcrypt.encrypt(original)
32
+
33
+ encrypted = URLcrypt::encrypt(original)
34
+ assert_equal(URLcrypt::decrypt(encrypted), original)
35
+ end
36
+ end
@@ -0,0 +1,33 @@
1
+ # encoding: utf-8
2
+ require 'bundler'
3
+ Bundler.require(:default, :test)
4
+
5
+ require 'coveralls'
6
+ Coveralls.wear!
7
+
8
+ require 'test/unit'
9
+
10
+ class TestClass < Test::Unit::TestCase
11
+ require 'URLcrypt'
12
+
13
+ def assert_bytes_equal(string1, string2)
14
+ bytes1 = string1.bytes.to_a.join(':')
15
+ bytes2 = string2.bytes.to_a.join(':')
16
+ assert_equal(bytes1, bytes2)
17
+ end
18
+
19
+ def assert_decoding(encoded, plain)
20
+ decoded = URLcrypt.decode(encoded)
21
+ assert_bytes_equal(plain, decoded)
22
+ end
23
+
24
+ def assert_encoding(encoded, plain)
25
+ actual = URLcrypt.encode(plain)
26
+ assert_bytes_equal(encoded, actual)
27
+ end
28
+
29
+ def assert_encode_and_decode(encoded, plain)
30
+ assert_encoding(encoded, plain)
31
+ assert_decoding(encoded, plain)
32
+ end
33
+ end
metadata CHANGED
@@ -1,70 +1,51 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: urlcrypt
3
- version: !ruby/object:Gem::Version
4
- hash: 25
5
- prerelease:
6
- segments:
7
- - 0
8
- - 1
9
- - 1
10
- version: 0.1.1
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.2
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Thomas Fuchs
14
8
  autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2015-03-18 00:00:00 Z
11
+ date: 2020-11-02 00:00:00.000000000 Z
19
12
  dependencies: []
20
-
21
13
  description:
22
14
  email: thomas@slash7.com
23
15
  executables: []
24
-
25
16
  extensions: []
26
-
27
- extra_rdoc_files:
17
+ extra_rdoc_files:
18
+ - README.md
19
+ files:
28
20
  - README.md
29
- files:
30
21
  - Rakefile
31
22
  - config/environment.rb
32
23
  - lib/URLcrypt.rb
33
24
  - test/URLcrypt_test.rb
34
- - README.md
25
+ - test/regression_test.rb
26
+ - test/test_helper.rb
35
27
  homepage:
36
28
  licenses: []
37
-
29
+ metadata: {}
38
30
  post_install_message:
39
31
  rdoc_options: []
40
-
41
- require_paths:
32
+ require_paths:
42
33
  - lib
43
34
  - lib
44
- required_ruby_version: !ruby/object:Gem::Requirement
45
- none: false
46
- requirements:
35
+ required_ruby_version: !ruby/object:Gem::Requirement
36
+ requirements:
47
37
  - - ">="
48
- - !ruby/object:Gem::Version
49
- hash: 3
50
- segments:
51
- - 0
52
- version: "0"
53
- required_rubygems_version: !ruby/object:Gem::Requirement
54
- none: false
55
- requirements:
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ required_rubygems_version: !ruby/object:Gem::Requirement
41
+ requirements:
56
42
  - - ">="
57
- - !ruby/object:Gem::Version
58
- hash: 3
59
- segments:
60
- - 0
61
- version: "0"
62
- requirements:
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ requirements:
63
46
  - none
64
- rubyforge_project:
65
- rubygems_version: 1.8.24
47
+ rubygems_version: 3.1.2
66
48
  signing_key:
67
- specification_version: 3
49
+ specification_version: 4
68
50
  summary: Securely encode and decode short pieces of arbitrary binary data in URLs.
69
51
  test_files: []
70
-