Защита обратных вызовов Coinbase: реализация шифрования rsa в nodejs - PullRequest
0 голосов
/ 04 марта 2020

Если вы хотите проверить обратные вызовы вручную на выбранном вами языке, используется дайджест сообщения SHA256, подписанное сообщение - это тело POST, схема заполнения - PKCS1_v1_5, а подпись, которую необходимо проверить, присутствует в заголовок HTTP 'CB-SIGNATURE', закодированный как base64.

Например, вот код подтверждения обратного вызова из нашей официальной библиотеки API Ruby:

https://developers.coinbase.com/docs/wallet/notifications

CALLBACK_DIGEST = OpenSSL::Digest.new("SHA256")
def self.verify_callback(body, signature)
  return false unless callback_signing_public_key
  callback_signing_public_key.verify(CALLBACK_DIGEST, signature.unpack("m0")[0], body)
rescue OpenSSL::PKey::RSAError, ArgumentError
  false
end
def self.callback_signing_public_key
  @@callback_signing_public_key ||= nil
  return @@callback_signing_public_key if @@callback_signing_public_key
  path = File.expand_path(File.join(File.dirname(__FILE__), 'coinbase-callback.pub'))
  @@callback_signing_public_key = OpenSSL::PKey::RSA.new(File.read(path))
end

Как я могу реализовать это в nodejs?

...