Если вы хотите проверить обратные вызовы вручную на выбранном вами языке, используется дайджест сообщения 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?