Module: Integrobr::NfseSdk::Webhooks
- Defined in:
- lib/integrobr/nfse_sdk/webhooks.rb
Class Method Summary collapse
- .comparar_tempo_constante(a, b) ⇒ Boolean
-
.verificar_assinatura(corpo_bruto, assinatura_recebida, segredo) ⇒ Boolean
Verifica a assinatura HMAC-SHA256 (cabeçalho
X-IntegroBR-Signature) de uma entrega de webhook, comparando em tempo constante pra evitar ataques de timing.
Class Method Details
.comparar_tempo_constante(a, b) ⇒ Boolean
27 28 29 30 31 32 33 34 |
# File 'lib/integrobr/nfse_sdk/webhooks.rb', line 27 def comparar_tempo_constante(a, b) return false unless a.is_a?(String) && b.is_a?(String) return false unless a.bytesize == b.bytesize resultado = 0 a.bytes.zip(b.bytes) { |x, y| resultado |= x ^ y } resultado.zero? end |
.verificar_assinatura(corpo_bruto, assinatura_recebida, segredo) ⇒ Boolean
Verifica a assinatura HMAC-SHA256 (cabeçalho X-IntegroBR-Signature)
de uma entrega de webhook, comparando em tempo constante pra evitar
ataques de timing.
21 22 23 24 |
# File 'lib/integrobr/nfse_sdk/webhooks.rb', line 21 def verificar_assinatura(corpo_bruto, assinatura_recebida, segredo) esperada = OpenSSL::HMAC.hexdigest("SHA256", segredo, corpo_bruto) comparar_tempo_constante(esperada, assinatura_recebida) end |