Module: TinkoffClient::Payout::EncryptData

Included in:
Request
Defined in:
lib/tinkoff_client/payout/encrypt_data.rb

Instance Method Summary collapse

Instance Method Details

#encrypt_data(keys) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/tinkoff_client/payout/encrypt_data.rb', line 9

def encrypt_data(keys)
  pkey = OpenSSL::PKey::RSA.new File.read(TinkoffClient.configuration.payout_private_key)
  cert = OpenSSL::X509::Certificate.new File.read(TinkoffClient.configuration.payout_certificate)
  x509_serial_number = cert.serial.to_s

  context_keys = { :TerminalKey => TinkoffClient.configuration.payout_terminal_key, **keys }
  concatenated = context_keys.sort.transpose[1].join

  digest = OpenSSL::Digest::SHA256.new concatenated
  signed_bytes = pkey.sign "SHA256", digest.digest

  signature_value = Base64::strict_encode64 signed_bytes
  digest_value = Base64::strict_encode64 digest.digest

  result = { signature_value: signature_value, digest_value: digest_value, x509_serial_number: x509_serial_number }
end