|
|
|
|
|
by sarciszewski
4042 days ago
|
|
Node.js example: return new Buffer(sig).toString('base64') == signature;
PHP example: return hash_hmac("sha512", $string_to_verify, $shared_secret) == $signature;
Yeah, like fdomig said: timing attacks. The Python example included a mitigation. PHP includes hash_equals() and a constant time comparison in Javascript isn't difficult to write.Possibly also, the Ruby example: return OpenSSL::HMAC.digest('sha512', shared_secret, string_to_verify) == signature
(I don't write Ruby so I don't know if this is overloadable somewhere.) |
|
Ruby allows overriding the == operator[1], but OpenSSL::HMAC.digest returns an instance of String[2], rather than returning a special subclass of string or some other kind of special HMAC-representing class overloading ==.
[1] http://docs.ruby-lang.org/en/2.2.0/syntax/methods_rdoc.html#...
[2] http://ruby-doc.org/stdlib-2.0.0/libdoc/openssl/rdoc/OpenSSL...