module CsobPaymentGateway::Crypt
Public Instance Methods
prepare_data_to_sign(data, method)
click to toggle source
# File lib/csob_payment_gateway/crypt.rb, line 8 def prepare_data_to_sign(data, method) if method == "POST" cart_to_sign = [ data[:cart][0][:name], data[:cart][0][:quantity], data[:cart][0][:amount], data[:cart][0][:description] ].map { |param| param.is_a?(Hash) ? "" : param.to_s }.join("|") data_to_sign = [ data[:merchantId], data[:orderNo], data[:dttm], data[:payOperation], data[:payMethod], data[:totalAmount], data[:currency], data[:closePayment], data[:returnUrl], data[:returnMethod], cart_to_sign, data[:description] ].map { |param| param.is_a?(Hash) ? "" : param.to_s }.join("|") merchant_data = data[:merchantData] data_to_sign = "#{data_to_sign}|#{merchant_data}" unless merchant_data.nil? customer_id = data[:customerId] data_to_sign = "#{data_to_sign}|#{customer_id}" if !customer_id.nil? and customer_id.to_s != "0" data_to_sign = "#{data_to_sign}|#{data[:language]}" data_to_sign = data_to_sign.chop if data_to_sign[-1] == "|" elsif method == "GET" data_to_sign = data end data_to_sign end
private_key_url()
click to toggle source
# File lib/csob_payment_gateway/crypt.rb, line 50 def private_key_url ::Rails.root.join(CsobPaymentGateway.configuration.keys_directory.to_s, CsobPaymentGateway.configuration.private_key.to_s) end
public_key_url()
click to toggle source
# File lib/csob_payment_gateway/crypt.rb, line 54 def public_key_url ::Rails.root.join(CsobPaymentGateway.configuration.keys_directory.to_s, CsobPaymentGateway.configuration.public_key.to_s) end
sign(data, method)
click to toggle source
# File lib/csob_payment_gateway/crypt.rb, line 58 def sign(data, method) data_to_sign = prepare_data_to_sign(data, method) key = OpenSSL::PKey::RSA.new(File.read(private_key_url)) digest = OpenSSL::Digest::SHA1.new signature = key.sign(digest, data_to_sign) Base64.encode64(signature).gsub("\n","") end
verify(data, signature_64)
click to toggle source
# File lib/csob_payment_gateway/crypt.rb, line 68 def verify(data, signature_64) key = OpenSSL::PKey::RSA.new(File.read(public_key_url)) signature = Base64.decode64(signature_64) digest = OpenSSL::Digest::SHA1.new if key.verify digest, signature, data "Valid" else "Invalid" end end