7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# File 'lib/sepay_pg_ruby/ipn.rb', line 7
def verify_signature(payload, secret_key)
payload_hash = payload.transform_keys(&:to_s)
received_signature = payload_hash['signature']
return false if received_signature.nil? || received_signature.empty?
data_to_verify = payload_hash.reject { |k, _| k == 'signature' }
sorted_keys = data_to_verify.keys.select { |k| !data_to_verify[k].nil? }.sort
query_string = sorted_keys.map { |key| "#{key}=#{data_to_verify[key]}" }.join('&')
calculated = OpenSSL::HMAC.hexdigest('sha256', secret_key.to_s, query_string)
secure_compare(received_signature, calculated)
rescue StandardError
false
end
|