adyen-cse-ruby 0.1.5 → 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
  SHA1:
3
- metadata.gz: 5c7ca95081976ea2f8c31a6ba33249d213534ec9
4
- data.tar.gz: 36c7dbb961da7aeb6a7b37d8e1709c8af7767047
3
+ metadata.gz: de9816514bfde8a7e82bc80437fadc0ebc0bd8b6
4
+ data.tar.gz: 7cd1f25ceeba3b576e42bdbd78949c30312583c6
5
5
  SHA512:
6
- metadata.gz: 6f8bca433565116733632974672df8cf832d4732be8db4c72ecdec91c086cb5fa87bf70b05ab58290e3b9f5827f5f35d67c58da051e02a60743748d20d1238f5
7
- data.tar.gz: 101ec3c369d1889579c9a86f8f820a249103d80379f3bc3d9443b047f7c277e28c96db2d859322000b19b75d79751c8ea1b21d493d57161ec69285e50eb2842b
6
+ metadata.gz: 476aa8acce591d1db06253e9c3579775a520d5343b32b4f51422d0ed6587b0853285316d72828429afe8e7284775a51b8e653af4d35d61884f0e94aedb6afe10
7
+ data.tar.gz: 0c695bf5902c7d6323b49f6f4e6bc23b4c03e54033e97e6ab3987a9cd6479e92cb3c3d4966f336340501ea0e9f05b4be2695d2d7efe0af72154c96842ca971b1
data/README.md CHANGED
@@ -29,13 +29,22 @@ Or install it yourself as:
29
29
  ```ruby
30
30
  require 'adyen_cse'
31
31
 
32
- cse = AdyenCse::Encrypter.new(public_key) do |card|
33
- card.holder_name = "Adyen Shopper"
34
- card.number = "4111111111111111"
35
- card.expiry_month = "08"
36
- card.expiry_year = "2018"
37
- card.cvc = "737"
38
- end
39
-
40
- encrypted_card = cse.encrypt!
32
+ cse = AdyenCse::Encrypter.new(public_key)
33
+
34
+ encrypted_card = cse.encrypt!(
35
+ holder_name: "Adyen Shopper",
36
+ number: 4111_1111_1111_1111.to_s,
37
+ expiry_month: "08",
38
+ expiry_year: "2018",
39
+ cvc: "737"
40
+ )
41
+ ```
42
+
43
+ Optionally, you may pass a custom `generation_time` to mock expired data.
44
+
45
+ ```ruby
46
+ encrypted_card = cse.encrypt!(
47
+ ...,
48
+ generation_time: Time.new(2015, 10, 21)
49
+ )
41
50
  ```
@@ -5,27 +5,34 @@ require "json"
5
5
 
6
6
  module AdyenCse
7
7
  class Encrypter
8
- PREFIX = "adyenrb"
9
- VERSION = "0_1_1"
8
+ PREFIX = "adyenrb"
9
+ VERSION = "0_1_1"
10
10
 
11
- attr_reader :public_key
12
- attr_accessor :holder_name, :number, :expiry_month, :expiry_year, :cvc, :generation_time
11
+ attr_reader :public_key
13
12
 
14
13
  def initialize(public_key)
15
14
  @public_key = public_key
16
- yield self rescue nil
17
- self.generation_time ||= Time.now
18
15
  end
19
16
 
20
- def encrypt!
21
- validate!
17
+ def encrypt!(params = {})
18
+ validate!(params.keys)
22
19
 
23
20
  key = SecureRandom.random_bytes(32)
24
21
  nonce = SecureRandom.random_bytes(12)
25
- data = card_data.to_json
22
+ generation_time = params.fetch(:generation_time, Time.now)
23
+
24
+ # keys sorted alphabetically
25
+ json_data = {
26
+ "cvc" => params[:cvc],
27
+ "expiryMonth" => params[:expiry_month],
28
+ "expiryYear" => params[:expiry_year],
29
+ "generationtime" => generation_time.utc.strftime("%FT%T.%LZ"),
30
+ "holderName" => params[:holder_name],
31
+ "number" => params[:number],
32
+ }.to_json
26
33
 
27
34
  ccm = OpenSSL::CCM.new("AES", key, 8)
28
- encrypted_card = ccm.encrypt(data, nonce)
35
+ encrypted_card = ccm.encrypt(json_data, nonce)
29
36
 
30
37
  rsa = self.class.parse_public_key(public_key)
31
38
  encrypted_aes_key = rsa.public_encrypt(key)
@@ -35,18 +42,6 @@ module AdyenCse
35
42
  [PREFIX, VERSION, "$", Base64.strict_encode64(encrypted_aes_key), "$", Base64.strict_encode64(encrypted_card_component)].join
36
43
  end
37
44
 
38
- def card_data
39
- # keys sorted alphabetically
40
- {
41
- "cvc" => cvc,
42
- "expiryMonth" => expiry_month,
43
- "expiryYear" => expiry_year,
44
- "generationtime" => generation_time.utc.strftime("%FT%T.%LZ"),
45
- "holderName" => holder_name,
46
- "number" => number,
47
- }
48
- end
49
-
50
45
  def self.parse_public_key(public_key)
51
46
  exponent, modulus = public_key.split("|").map { |n| n.to_i(16) }
52
47
 
@@ -58,9 +53,9 @@ module AdyenCse
58
53
 
59
54
  private
60
55
 
61
- def validate!
62
- %w(holder_name number expiry_month expiry_year cvc generation_time).each do |param|
63
- raise ArgumentError, "param `#{param}' is required" if instance_variable_get("@#{param}").nil?
56
+ def validate!(params)
57
+ %i(holder_name number expiry_month expiry_year cvc).each do |param|
58
+ raise ArgumentError, "param `#{param}' is required" unless params.include?(param)
64
59
  end
65
60
  end
66
61
  end
@@ -1,3 +1,3 @@
1
1
  module AdyenCse
2
- VERSION = "0.1.5"
2
+ VERSION = "1.0.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: adyen-cse-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joey Cheng
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-08-29 00:00:00.000000000 Z
11
+ date: 2018-03-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: openssl-ccm
@@ -106,7 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
106
106
  version: '0'
107
107
  requirements: []
108
108
  rubyforge_project:
109
- rubygems_version: 2.5.1
109
+ rubygems_version: 2.6.13
110
110
  signing_key:
111
111
  specification_version: 4
112
112
  summary: Adyen Client-side encryption library for Ruby