cryptojs-aes-decrypt 0.1.0 → 1.0.0

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,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