cryptojs-aes-decrypt 0.1.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 97e555cf18775a8fad5297ee3a5d24996b5e8cf6fc9674b494a6b41f8c8b2bc2
4
- data.tar.gz: a1cf78a75fb41ec870bdf64876bdba4531e40cd09c392e6a9e6f88bc804c65fe
3
+ metadata.gz: b9f4a4d7c1ac65ccf3cadd229eebdcdb3953ad7e23e47d37776c0af6f9789e2a
4
+ data.tar.gz: 023c33f306221e80f99bda4a7dc615ef67e6c00ae3b1438fb7b6ed8aba914aeb
5
5
  SHA512:
6
- metadata.gz: a303c2f0e48d1c1c85bd6af175899438cf1e65d411fe1f2f96fedd2da7600c1dd9dd843310024a61d6778f867d2c5e2835f171002d0df5e818edaf2c9441b53a
7
- data.tar.gz: d77676a902493dcab1901ad3371294ed4f57f2c4f86439d4f44df8106f06600f07c7b89111d79a823131dfcc13a9cbbc46af009b7e4f23db4269fcd2fcf05033
6
+ metadata.gz: 3440a48d2bbf73b7085c72a01fa245c5052b93a343c8e48218bf4573706e7065a6279945f049f26a68c963772f38f447511026f9c752b083c0872bdec622f150
7
+ data.tar.gz: 846bc8bddb9b134bdae721c82d88c0ca9ac20d15b9825477e392626e131b5cb8c75bfaa202e95d1b9eafc48938710f71654570ff7b3f8f73bc68a2d8db63f7f7
data/README.md CHANGED
@@ -20,7 +20,15 @@ Or install it yourself as:
20
20
 
21
21
  ## Usage
22
22
 
23
- TODO: Write usage instructions here
23
+ ```ruby
24
+ require 'cryptojs-aes-decrypt'
25
+ cipher = 'U2FsdGVkX1/cJw+ISoZKbICgFmoJ+Ehx/atOTgPlt4IOCpmgrHJBY9J2gvoupPbNQs3dHsshX2EljZPlnVLATRJRyF8rOMui+uFMl8DV9I0VVA+1IqecvcP+a2gswGSjYEOiEG9kKQQ8cNlZPtGZdD4ksxxKxm/DhDxquzYX9mWwtMLe0EVYqFd0gncHX2wYzOrvKbMLZlGn/rN70XC+kQgEd47syLFOBm/cjzmVFGvymJfvuRNDl66PRzMtoGqZkQ7uufZuFS3rRUpcsiVv+0XbkSTiaZeD2t7cs+pn4G4uAymMJathk2z2pmhhd184rnXpuooaz8pXPmfdL8CwbQ=='
26
+ passphrase = 'passcode'
27
+ expected = '{"id":"0a09a9e1-eee2-4a8e-bf77-901be943621c","key":"WHAT","value":"IS_THIS_NAH","comment":"","addedBy":{"name":"Aleem Isiaka","id":"a3748a40-3ab8-4dd1-bac6-e73c1047c95f"},"addedDate":"April 22, 2022 | 20:09 GMT","method":""}'
28
+ decrypted = CryptojsAesDecrypt.run(cipher, passphrase)
29
+ p decrypted == expected
30
+
31
+ ```
24
32
 
25
33
  ## Development
26
34
 
@@ -1,14 +1,15 @@
1
1
 
2
2
  lib = File.expand_path('lib', __dir__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'cryptojs/aes/decrypt/version'
4
+ require File.expand_path('lib/decrypt/version', __dir__)
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = 'cryptojs-aes-decrypt'
8
- spec.version = Cryptojs::Aes::Decrypt::VERSION
8
+ spec.version = CryptojsAesDecrypt::VERSION
9
9
  spec.authors = ['Aleem Isiaka']
10
10
  spec.email = ['aleemisiaka@gmail.com']
11
11
 
12
+ spec.extra_rdoc_files = ['README.md']
12
13
  spec.summary = 'Decrypt Cryptojs AES Ciphers'
13
14
  spec.description = 'Decrypt Cryptojs AES Ciphers'
14
15
  spec.homepage = 'https://github.com/limistah/ruby-cryptojs-aes-decrypt'
@@ -17,6 +18,8 @@ Gem::Specification.new do |spec|
17
18
  # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
18
19
  # to allow pushing to a single host or delete this section to allow pushing to any host.
19
20
  if spec.respond_to?(:metadata)
21
+ spec.metadata['allowed_push_host'] = 'https://rubygems.org'
22
+
20
23
  spec.metadata['homepage_uri'] = spec.homepage
21
24
  spec.metadata['source_code_uri'] = 'https://github.com/limistah/ruby-cryptojs-aes-decrypt'
22
25
  spec.metadata['changelog_uri'] = 'https://github.com/limistah/ruby-cryptojs-aes-decrypt/CHANGELOG.MD'
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+ module CryptojsAesDecrypt
3
+ VERSION = '1.0.0'
4
+ end
data/lib/decrypt.rb ADDED
@@ -0,0 +1,49 @@
1
+ require 'digest/md5'
2
+ require 'base64'
3
+ require 'base64'
4
+ require 'digest'
5
+ require 'openssl'
6
+
7
+ module CryptojsAesDecrypt
8
+ class Error < StandardError; end
9
+ class << self
10
+ def bytes_to_key(data, salt, output = 48)
11
+ merged = data + salt
12
+ key = Digest::MD5.digest(merged)
13
+ final_key = key
14
+ while final_key.length < output
15
+ key = Digest::MD5.digest(key + merged)
16
+ final_key += key
17
+ end
18
+ final_key[0..output - 1]
19
+ end
20
+
21
+ def aes256_cbc_decrypt(key, data, iv)
22
+ # p key
23
+ key = Digest::SHA256.digest(key) if key.is_a?(String) && key.bytesize != 32
24
+ iv = Digest::MD5.digest(iv) if iv.is_a?(String) && iv.bytesize != 16
25
+ aes = OpenSSL::Cipher.new('AES-256-CBC')
26
+ aes.decrypt
27
+ aes.key = key
28
+ aes.iv = iv
29
+ aes.update(data) + aes.final
30
+ end
31
+
32
+ def run(cipher, passcode)
33
+ secret = Base64.decode64(cipher)
34
+ unless secret[0..7] == 'Salted__'
35
+ puts 'Invalid encrypted data'
36
+ exit(1)
37
+ end
38
+ decrypt(secret, passcode)
39
+ end
40
+
41
+ def decrypt(secret, passcode)
42
+ salt = secret[8..15]
43
+ key_iv = bytes_to_key(passcode, salt, 48)
44
+ key = key_iv[0..31]
45
+ iv = key_iv[32..key_iv.length - 1]
46
+ aes256_cbc_decrypt(key, secret[16..secret.length - 1], iv)
47
+ end
48
+ end
49
+ end
data/test.rb CHANGED
@@ -1,7 +1,7 @@
1
- require File.expand_path('lib/cryptojs/aes/decrypt', __dir__)
1
+ require File.expand_path('lib/decrypt', __dir__)
2
2
 
3
3
  cipher = 'U2FsdGVkX1/cJw+ISoZKbICgFmoJ+Ehx/atOTgPlt4IOCpmgrHJBY9J2gvoupPbNQs3dHsshX2EljZPlnVLATRJRyF8rOMui+uFMl8DV9I0VVA+1IqecvcP+a2gswGSjYEOiEG9kKQQ8cNlZPtGZdD4ksxxKxm/DhDxquzYX9mWwtMLe0EVYqFd0gncHX2wYzOrvKbMLZlGn/rN70XC+kQgEd47syLFOBm/cjzmVFGvymJfvuRNDl66PRzMtoGqZkQ7uufZuFS3rRUpcsiVv+0XbkSTiaZeD2t7cs+pn4G4uAymMJathk2z2pmhhd184rnXpuooaz8pXPmfdL8CwbQ=='
4
4
  passphrase = 'passcode'
5
5
  expected = '{"id":"0a09a9e1-eee2-4a8e-bf77-901be943621c","key":"WHAT","value":"IS_THIS_NAH","comment":"","addedBy":{"name":"Aleem Isiaka","id":"a3748a40-3ab8-4dd1-bac6-e73c1047c95f"},"addedDate":"April 22, 2022 | 20:09 GMT","method":""}'
6
- decrypted = Cryptojs::Aes::Decrypt.run(cipher, passphrase)
6
+ decrypted = CryptojsAesDecrypt.run(cipher, passphrase)
7
7
  p decrypted == expected
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cryptojs-aes-decrypt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aleem Isiaka
@@ -57,7 +57,8 @@ email:
57
57
  - aleemisiaka@gmail.com
58
58
  executables: []
59
59
  extensions: []
60
- extra_rdoc_files: []
60
+ extra_rdoc_files:
61
+ - README.md
61
62
  files:
62
63
  - ".gitignore"
63
64
  - ".idea/.gitignore"
@@ -72,13 +73,14 @@ files:
72
73
  - README.md
73
74
  - Rakefile
74
75
  - cryptojs-aes-decrypt.gemspec
75
- - lib/cryptojs/aes/decrypt.rb
76
- - lib/cryptojs/aes/decrypt/version.rb
76
+ - lib/decrypt.rb
77
+ - lib/decrypt/version.rb
77
78
  - test.rb
78
79
  homepage: https://github.com/limistah/ruby-cryptojs-aes-decrypt
79
80
  licenses:
80
81
  - MIT
81
82
  metadata:
83
+ allowed_push_host: https://rubygems.org
82
84
  homepage_uri: https://github.com/limistah/ruby-cryptojs-aes-decrypt
83
85
  source_code_uri: https://github.com/limistah/ruby-cryptojs-aes-decrypt
84
86
  changelog_uri: https://github.com/limistah/ruby-cryptojs-aes-decrypt/CHANGELOG.MD
@@ -1,7 +0,0 @@
1
- module Cryptojs
2
- module Aes
3
- module Decrypt
4
- VERSION = "0.1.0".freeze
5
- end
6
- end
7
- end
@@ -1,53 +0,0 @@
1
- require 'digest/md5'
2
- require 'base64'
3
- require 'base64'
4
- require 'digest'
5
- require 'openssl'
6
-
7
- module Cryptojs
8
- module Aes
9
- module Decrypt
10
- class Error < StandardError; end
11
- class << self
12
- def bytes_to_key(data, salt, output = 48)
13
- merged = data + salt
14
- key = Digest::MD5.digest(merged)
15
- final_key = key
16
- while final_key.length < output
17
- key = Digest::MD5.digest(key + merged)
18
- final_key += key
19
- end
20
- final_key[0..output - 1]
21
- end
22
-
23
- def aes256_cbc_decrypt(key, data, iv)
24
- # p key
25
- key = Digest::SHA256.digest(key) if key.is_a?(String) && key.bytesize != 32
26
- iv = Digest::MD5.digest(iv) if iv.is_a?(String) && iv.bytesize != 16
27
- aes = OpenSSL::Cipher.new('AES-256-CBC')
28
- aes.decrypt
29
- aes.key = key
30
- aes.iv = iv
31
- aes.update(data) + aes.final
32
- end
33
-
34
- def run(cipher, passcode)
35
- secret = Base64.decode64(cipher)
36
- unless secret[0..7] == 'Salted__'
37
- puts 'Invalid encrypted data'
38
- exit(1)
39
- end
40
- decrypt(secret, passcode)
41
- end
42
-
43
- def decrypt(secret, passcode)
44
- salt = secret[8..15]
45
- key_iv = bytes_to_key(passcode, salt, 48)
46
- key = key_iv[0..31]
47
- iv = key_iv[32..key_iv.length - 1]
48
- aes256_cbc_decrypt(key, secret[16..secret.length - 1], iv)
49
- end
50
- end
51
- end
52
- end
53
- end