Class: Adyen::Utils::HmacValidator
- Inherits:
-
Object
- Object
- Adyen::Utils::HmacValidator
- Defined in:
- lib/adyen/utils/hmac_validator.rb
Constant Summary collapse
- HMAC_ALGORITHM =
'sha256'.freeze
- DATA_SEPARATOR =
':'.freeze
- NOTIFICATION_VALIDATION_KEYS =
%w[ pspReference originalReference merchantAccountCode merchantReference amount.value amount.currency eventCode success ].freeze
Instance Method Summary collapse
- #calculate_notification_hmac(notification_request_item, hmac_key) ⇒ Object
- #data_to_sign(notification_request_item) ⇒ Object
- #valid_notification_hmac?(notification_request_item, hmac_key) ⇒ Boolean
Instance Method Details
#calculate_notification_hmac(notification_request_item, hmac_key) ⇒ Object
18 19 20 21 22 |
# File 'lib/adyen/utils/hmac_validator.rb', line 18 def calculate_notification_hmac(notification_request_item, hmac_key) data = data_to_sign(notification_request_item) Base64.strict_encode64(OpenSSL::HMAC.digest(HMAC_ALGORITHM, [hmac_key].pack('H*'), data)) end |
#data_to_sign(notification_request_item) ⇒ Object
24 25 26 27 28 |
# File 'lib/adyen/utils/hmac_validator.rb', line 24 def data_to_sign(notification_request_item) NOTIFICATION_VALIDATION_KEYS.map { |key| fetch(notification_request_item, key).to_s } .map { |value| value.gsub('\\', '\\\\').gsub(':', '\\:') } .join(DATA_SEPARATOR) end |
#valid_notification_hmac?(notification_request_item, hmac_key) ⇒ Boolean
11 12 13 14 15 16 |
# File 'lib/adyen/utils/hmac_validator.rb', line 11 def valid_notification_hmac?(notification_request_item, hmac_key) expected_sign = calculate_notification_hmac(notification_request_item, hmac_key) merchant_sign = fetch(notification_request_item, 'additionalData.hmacSignature') expected_sign == merchant_sign end |