Module: AllinpayCnp::Signature

Defined in:
lib/allinpay_cnp/signature.rb

Class Method Summary collapse

Class Method Details

.build_sign_string(params) ⇒ Object



25
26
27
28
29
30
31
32
# File 'lib/allinpay_cnp/signature.rb', line 25

def build_sign_string(params)
  params
    .transform_keys(&:to_s)
    .reject { |k, v| k == 'sign' || v.nil? || v.to_s.strip.empty? }
    .sort_by { |k, _| k }
    .map { |k, v| "#{k}=#{v.to_s.strip}" }
    .join('&')
end

.sign(params, private_key) ⇒ Object



9
10
11
12
# File 'lib/allinpay_cnp/signature.rb', line 9

def sign(params, private_key)
  sign_string = build_sign_string(params)
  rsa_sign(sign_string, private_key)
end

.verify(params, public_key) ⇒ Object



14
15
16
17
18
19
20
21
22
23
# File 'lib/allinpay_cnp/signature.rb', line 14

def verify(params, public_key)
  params = params.transform_keys(&:to_s)
  signature = params.delete('sign')
  return false if signature.nil? || signature.empty?

  sign_string = build_sign_string(params)
  rsa_verify(sign_string, signature, public_key)
rescue OpenSSL::PKey::PKeyError, OpenSSL::OpenSSLError
  false
end