Class: GooglePayRuby::EcV2DecryptionStrategy

Inherits:
Object
  • Object
show all
Defined in:
lib/google_pay_ruby/ec_v2_decryption_strategy.rb

Instance Method Summary collapse

Constructor Details

#initialize(private_key_pem) ⇒ EcV2DecryptionStrategy

Returns a new instance of EcV2DecryptionStrategy.



9
10
11
# File 'lib/google_pay_ruby/ec_v2_decryption_strategy.rb', line 9

def initialize(private_key_pem)
  @private_key = OpenSSL::PKey::EC.new(private_key_pem)
end

Instance Method Details

#decrypt(signed_message) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/google_pay_ruby/ec_v2_decryption_strategy.rb', line 13

def decrypt(signed_message)
  parsed_message = JSON.parse(signed_message)
  
  ephemeral_public_key = parsed_message['ephemeralPublicKey']
  encrypted_message = parsed_message['encryptedMessage']
  tag = parsed_message['tag']

  shared_key = get_shared_key(ephemeral_public_key)
  derived_key = get_derived_key(ephemeral_public_key, shared_key)

  symmetric_encryption_key = derived_key[0...64]
  mac_key = derived_key[64..-1]

  verify_message_hmac(mac_key, tag, encrypted_message)

  decrypted_message = decrypt_message(encrypted_message, symmetric_encryption_key)

  JSON.parse(decrypted_message)
end