lib/braintree/digest.rb in braintree-2.15.0 vs lib/braintree/digest.rb in braintree-2.16.0
- old
+ new
@@ -2,13 +2,26 @@
module Digest # :nodoc:
def self.hexdigest(private_key, string)
_hmac_sha1(private_key, string)
end
+ def self.secure_compare(left, right)
+ return false unless left && right
+
+ left_bytes = left.unpack("C*")
+ right_bytes = right.unpack("C*")
+ return false if left_bytes.size != right_bytes.size
+
+ result = 0
+ left_bytes.zip(right_bytes).each do |left_byte, right_byte|
+ result |= left_byte ^ right_byte
+ end
+ result == 0
+ end
+
def self._hmac_sha1(key, message)
key_digest = ::Digest::SHA1.digest(key)
sha1 = OpenSSL::Digest::Digest.new("sha1")
OpenSSL::HMAC.hexdigest(sha1, key_digest, message.to_s)
end
end
end
-