RESOLVED FIXED Bug 124673
Use std::function callbacks in CryptoAlgorithm instead of JS promises
https://bugs.webkit.org/show_bug.cgi?id=124673
Summary Use std::function callbacks in CryptoAlgorithm instead of JS promises
Alexey Proskuryakov
Reported 2013-11-20 12:02:46 PST
To implement key wrapping/unwrapping, we'll need to chain existing operations. It's much easier to do with C++ callbacks than with functions fulfilling JS promises directly. Also, this will decouple CryptoAlgorithm from JS, which is nice.
Attachments
proposed patch (56.19 KB, patch)
2013-11-20 12:19 PST, Alexey Proskuryakov
andersca: review+
Alexey Proskuryakov
Comment 1 2013-11-20 12:19:16 PST
Created attachment 217463 [details] proposed patch
WebKit Commit Bot
Comment 2 2013-11-20 12:20:47 PST
Attachment 217463 [details] did not pass style-queue: Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'Source/WebCore/ChangeLog', u'Source/WebCore/bindings/js/JSDOMPromise.cpp', u'Source/WebCore/bindings/js/JSDOMPromise.h', u'Source/WebCore/bindings/js/JSSubtleCryptoCustom.cpp', u'Source/WebCore/crypto/CryptoAlgorithm.cpp', u'Source/WebCore/crypto/CryptoAlgorithm.h', u'Source/WebCore/crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp', u'Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CBC.cpp', u'Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CBC.h', u'Source/WebCore/crypto/algorithms/CryptoAlgorithmHMAC.cpp', u'Source/WebCore/crypto/algorithms/CryptoAlgorithmHMAC.h', u'Source/WebCore/crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp', u'Source/WebCore/crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h', u'Source/WebCore/crypto/algorithms/CryptoAlgorithmSHA1.cpp', u'Source/WebCore/crypto/algorithms/CryptoAlgorithmSHA1.h', u'Source/WebCore/crypto/algorithms/CryptoAlgorithmSHA224.cpp', u'Source/WebCore/crypto/algorithms/CryptoAlgorithmSHA224.h', u'Source/WebCore/crypto/algorithms/CryptoAlgorithmSHA256.cpp', u'Source/WebCore/crypto/algorithms/CryptoAlgorithmSHA256.h', u'Source/WebCore/crypto/algorithms/CryptoAlgorithmSHA384.cpp', u'Source/WebCore/crypto/algorithms/CryptoAlgorithmSHA384.h', u'Source/WebCore/crypto/algorithms/CryptoAlgorithmSHA512.cpp', u'Source/WebCore/crypto/algorithms/CryptoAlgorithmSHA512.h', u'Source/WebCore/crypto/keys/CryptoKeyRSA.h', u'Source/WebCore/crypto/mac/CryptoAlgorithmAES_CBCMac.cpp', u'Source/WebCore/crypto/mac/CryptoAlgorithmHMACMac.cpp', u'Source/WebCore/crypto/mac/CryptoKeyRSAMac.cpp']" exit_code: 1 Source/WebCore/crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:45: The parameter name "data" adds no information, so it should be removed. [readability/parameter_name] [5] Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:58: CryptoAlgorithmAES_CBC::generateKey is incorrectly named. Don't use underscores in your identifier names. [readability/naming/underscores] [4] Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:71: CryptoAlgorithmAES_CBC::importKey is incorrectly named. Don't use underscores in your identifier names. [readability/naming/underscores] [4] Source/WebCore/crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:58: CryptoAlgorithmRSASSA_PKCS1_v1_5::generateKey is incorrectly named. Don't use underscores in your identifier names. [readability/naming/underscores] [4] Source/WebCore/crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:62: Place brace on its own line for function definitions. [whitespace/braces] [4] Source/WebCore/crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:69: CryptoAlgorithmRSASSA_PKCS1_v1_5::importKey is incorrectly named. Don't use underscores in your identifier names. [readability/naming/underscores] [4] Source/WebCore/crypto/algorithms/CryptoAlgorithmHMAC.h:45: The parameter name "data" adds no information, so it should be removed. [readability/parameter_name] [5] Source/WebCore/crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:91: CryptoAlgorithmRSASSA_PKCS1_v1_5::sign is incorrectly named. Don't use underscores in your identifier names. [readability/naming/underscores] [4] Source/WebCore/crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:130: CryptoAlgorithmRSASSA_PKCS1_v1_5::verify is incorrectly named. Don't use underscores in your identifier names. [readability/naming/underscores] [4] Source/WebCore/crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:38: transformAES_CBC is incorrectly named. Don't use underscores in your identifier names. [readability/naming/underscores] [4] Source/WebCore/crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:85: CryptoAlgorithmAES_CBC::encrypt is incorrectly named. Don't use underscores in your identifier names. [readability/naming/underscores] [4] Source/WebCore/crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:98: CryptoAlgorithmAES_CBC::decrypt is incorrectly named. Don't use underscores in your identifier names. [readability/naming/underscores] [4] Source/WebCore/crypto/CryptoAlgorithm.h:65: The parameter name "data" adds no information, so it should be removed. [readability/parameter_name] [5] Total errors found: 13 in 27 files If any of these errors are false positives, please file a bug against check-webkit-style.
Anders Carlsson
Comment 3 2013-11-20 12:23:16 PST
Comment on attachment 217463 [details] proposed patch View in context: https://bugs.webkit.org/attachment.cgi?id=217463&action=review > Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:68 > + callback(result.get(), 0); nullptr? > Source/WebCore/crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:63 > + callback(0, &pair); nullptr? > Source/WebCore/crypto/mac/CryptoKeyRSAMac.cpp:222 > + KeyPairCallback* localCallback = new KeyPairCallback(callback); Can std::move callback here to avoid a copy. > Source/WebCore/crypto/mac/CryptoKeyRSAMac.cpp:223 > + VoidCallback* localFailureCallback = new VoidCallback(failureCallback); Ditto for failureCallback.
Alexey Proskuryakov
Comment 4 2013-11-20 13:16:16 PST
Darin Adler
Comment 5 2013-11-20 15:20:42 PST
Comment on attachment 217463 [details] proposed patch View in context: https://bugs.webkit.org/attachment.cgi?id=217463&action=review > Source/WebCore/bindings/js/JSDOMPromise.h:44 > + PromiseWrapper(const PromiseWrapper&); > + PromiseWrapper& operator=(const PromiseWrapper&); Why don’t we just let the compiler generate these? The hand-written functions look the same as what the compiler would generate if we didn’t say anything.
Note You need to log in before you can comment on or make changes to this bug.