Title: [159975] trunk
Revision
159975
Author
[email protected]
Date
2013-12-02 15:43:01 -0800 (Mon, 02 Dec 2013)

Log Message

WebCrypto HMAC doesn't check key algorithm's hash
https://bugs.webkit.org/show_bug.cgi?id=125114

Reviewed by Anders Carlsson.

Source/WebCore: 

Test: crypto/subtle/hmac-check-algorithm.html

* crypto/algorithms/CryptoAlgorithmHMAC.cpp:
(WebCore::CryptoAlgorithmHMAC::keyAlgorithmMatches): Check it.

LayoutTests: 

* crypto/subtle/hmac-check-algorithm-expected.txt: Added.
* crypto/subtle/hmac-check-algorithm.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (159974 => 159975)


--- trunk/LayoutTests/ChangeLog	2013-12-02 23:30:53 UTC (rev 159974)
+++ trunk/LayoutTests/ChangeLog	2013-12-02 23:43:01 UTC (rev 159975)
@@ -1,3 +1,13 @@
+2013-12-02  Alexey Proskuryakov  <[email protected]>
+
+        WebCrypto HMAC doesn't check key algorithm's hash
+        https://bugs.webkit.org/show_bug.cgi?id=125114
+
+        Reviewed by Anders Carlsson.
+
+        * crypto/subtle/hmac-check-algorithm-expected.txt: Added.
+        * crypto/subtle/hmac-check-algorithm.html: Added.
+
 2013-12-02  Zoltan Horvath  <[email protected]>
 
         [CSS Shapes] Support inset parsing

Added: trunk/LayoutTests/crypto/subtle/hmac-check-algorithm-expected.txt (0 => 159975)


--- trunk/LayoutTests/crypto/subtle/hmac-check-algorithm-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/crypto/subtle/hmac-check-algorithm-expected.txt	2013-12-02 23:43:01 UTC (rev 159975)
@@ -0,0 +1,12 @@
+Test that HMAC operations only work when hash functions match between invocation and key.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Importing a raw HMAC SHA-1 key from string literal...
+PASS crypto.subtle.sign({name: 'hmac', hash: {name: 'sha-256'}}, key, asciiToUint8Array('foo')) threw exception Error: NotSupportedError: DOM Exception 9.
+PASS crypto.subtle.verify({name: 'hmac', hash: {name: 'sha-256'}}, key, asciiToUint8Array('fake signature'), asciiToUint8Array('foo')) threw exception Error: NotSupportedError: DOM Exception 9.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Property changes on: trunk/LayoutTests/crypto/subtle/hmac-check-algorithm-expected.txt
___________________________________________________________________

Added: svn:mime-type

Added: svn:eol-style

Added: trunk/LayoutTests/crypto/subtle/hmac-check-algorithm.html (0 => 159975)


--- trunk/LayoutTests/crypto/subtle/hmac-check-algorithm.html	                        (rev 0)
+++ trunk/LayoutTests/crypto/subtle/hmac-check-algorithm.html	2013-12-02 23:43:01 UTC (rev 159975)
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src=""
+<script src=""
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+
+<script>
+description("Test that HMAC operations only work when hash functions match between invocation and key.");
+
+jsTestIsAsync = true;
+
+var hmacKey = asciiToUint8Array('a');
+var extractable = true;
+
+debug("Importing a raw HMAC SHA-1 key from string literal...");
+crypto.subtle.importKey("raw", hmacKey, {name: 'hmac', hash: {name: 'sha-1'}}, extractable, ["sign", "verify"]).then(function(result) {
+    debug("Done");
+    key = result;
+
+    shouldNotThrow("crypto.subtle.sign({name: 'hmac', hash: {name: 'sha-1'}}, key, asciiToUint8Array('foo'))");
+    shouldThrow("crypto.subtle.sign({name: 'hmac', hash: {name: 'sha-256'}}, key, asciiToUint8Array('foo'))");
+
+    shouldNotThrow("crypto.subtle.verify({name: 'hmac', hash: {name: 'sha-1'}}, key, asciiToUint8Array('fake signature'), asciiToUint8Array('foo'))");
+    shouldThrow("crypto.subtle.verify({name: 'hmac', hash: {name: 'sha-256'}}, key, asciiToUint8Array('fake signature'), asciiToUint8Array('foo'))");
+
+    finishJSTest();
+});
+</script>
+
+<script src=""
+</body>
+</html>
Property changes on: trunk/LayoutTests/crypto/subtle/hmac-check-algorithm.html
___________________________________________________________________

Added: svn:mime-type

Modified: trunk/Source/WebCore/ChangeLog (159974 => 159975)


--- trunk/Source/WebCore/ChangeLog	2013-12-02 23:30:53 UTC (rev 159974)
+++ trunk/Source/WebCore/ChangeLog	2013-12-02 23:43:01 UTC (rev 159975)
@@ -1,3 +1,15 @@
+2013-12-02  Alexey Proskuryakov  <[email protected]>
+
+        WebCrypto HMAC doesn't check key algorithm's hash
+        https://bugs.webkit.org/show_bug.cgi?id=125114
+
+        Reviewed by Anders Carlsson.
+
+        Test: crypto/subtle/hmac-check-algorithm.html
+
+        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
+        (WebCore::CryptoAlgorithmHMAC::keyAlgorithmMatches): Check it.
+
 2013-12-02  Brady Eidson  <[email protected]>
 
         Possible crash in ProgressTracker::progressHeartbeatTimerFired(Timer<ProgressTracker>*)

Modified: trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmHMAC.cpp (159974 => 159975)


--- trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmHMAC.cpp	2013-12-02 23:30:53 UTC (rev 159974)
+++ trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmHMAC.cpp	2013-12-02 23:43:01 UTC (rev 159975)
@@ -56,12 +56,15 @@
     return s_identifier;
 }
 
-bool CryptoAlgorithmHMAC::keyAlgorithmMatches(const CryptoAlgorithmHmacParams&, const CryptoKey& key) const
+bool CryptoAlgorithmHMAC::keyAlgorithmMatches(const CryptoAlgorithmHmacParams& parameters, const CryptoKey& key) const
 {
     if (key.algorithmIdentifier() != s_identifier)
         return false;
     ASSERT(isCryptoKeyHMAC(key));
 
+    if (toCryptoKeyHMAC(key).hashAlgorithmIdentifier() != parameters.hash)
+        return false;
+
     return true;
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to