Changeset 287015 in webkit
- Timestamp:
- Dec 14, 2021, 12:18:02 AM (5 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 6 added
- 8 edited
-
ChangeLog (modified) (1 diff)
-
Headers.cmake (modified) (1 diff)
-
Modules/push-api/PushCrypto.cpp (added)
-
Modules/push-api/PushCrypto.h (added)
-
Modules/push-api/PushManager.cpp (modified) (2 diffs)
-
Modules/push-api/PushMessageCrypto.cpp (added)
-
Modules/push-api/PushMessageCrypto.h (added)
-
Modules/push-api/cocoa (added)
-
Modules/push-api/cocoa/PushCryptoCocoa.cpp (added)
-
PAL/ChangeLog (modified) (1 diff)
-
PAL/pal/spi/cocoa/CommonCryptoSPI.h (modified) (2 diffs)
-
Sources.txt (modified) (1 diff)
-
SourcesCocoa.txt (modified) (1 diff)
-
WebCore.xcodeproj/project.pbxproj (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r287014 r287015 1 2021-12-14 Ben Nham <nham@apple.com> 2 3 Add web push message decryption routines 4 https://bugs.webkit.org/show_bug.cgi?id=233903 5 6 Reviewed by Brady Eidson. 7 8 This adds routines to decrypt push payloads encoded with the aes128gcm and aesgcm schemes. 9 The crypto primitives that we depend are implemented in PushCrypto, while the logic to use 10 those primitives to decrypt message payloads is in PushMessageCrypto. 11 12 Test: TestWebKitAPI.PushMessageCrypto 13 14 * Headers.cmake: 15 * Modules/push-api/PushCrypto.cpp: Added. 16 (WebCore::PushCrypto::P256DHKeyPair::generate): 17 (WebCore::PushCrypto::validateP256DHPublicKey): 18 (WebCore::PushCrypto::computeP256DHSharedSecret): 19 (WebCore::PushCrypto::hmacSHA256): 20 (WebCore::PushCrypto::decryptAES128GCM): 21 * Modules/push-api/PushCrypto.h: Added. 22 * Modules/push-api/PushManager.cpp: 23 (WebCore::PushManager::subscribe): 24 * Modules/push-api/PushMessageCrypto.cpp: Added. 25 (WebCore::PushCrypto::ClientKeys::generate): 26 (WebCore::PushCrypto::areClientKeyLengthsValid): 27 (WebCore::PushCrypto::computeAES128GCMPaddingLength): 28 (WebCore::PushCrypto::decryptAES128GCMPayload): 29 (WebCore::PushCrypto::computeAESGCMPaddingLength): 30 (WebCore::PushCrypto::decryptAESGCMPayload): 31 * Modules/push-api/PushMessageCrypto.h: Added. 32 * Modules/push-api/cocoa/PushCryptoCocoa.cpp: Added. 33 (WebCore::PushCrypto::P256DHKeyPair::generate): 34 (WebCore::PushCrypto::validateP256DHPublicKey): 35 (WebCore::PushCrypto::computeP256DHSharedSecret): 36 (WebCore::PushCrypto::hmacSHA256): 37 (WebCore::PushCrypto::decryptAES128GCM): 38 * Sources.txt: 39 * SourcesCocoa.txt: 40 * WebCore.xcodeproj/project.pbxproj: 41 1 42 2021-12-13 Carlos Garcia Campos <cgarcia@igalia.com> 2 43 -
trunk/Source/WebCore/Headers.cmake
r286943 r287015 291 291 Modules/permissions/PermissionState.h 292 292 293 Modules/push-api/PushCrypto.h 294 Modules/push-api/PushMessageCrypto.h 293 295 Modules/push-api/PushPermissionState.h 294 296 Modules/push-api/PushSubscriptionData.h -
trunk/Source/WebCore/Modules/push-api/PushManager.cpp
r285564 r287015 29 29 #if ENABLE(SERVICE_WORKER) 30 30 31 #include "CryptoKeyEC.h"32 31 #include "EventLoop.h" 33 32 #include "Exception.h" 34 33 #include "JSPushPermissionState.h" 35 34 #include "JSPushSubscription.h" 35 #include "PushCrypto.h" 36 36 #include "ScriptExecutionContext.h" 37 37 #include "ServiceWorkerRegistration.h" … … 102 102 } 103 103 104 #if ENABLE(WEB_CRYPTO) 105 auto keyData = keyDataResult.returnValue(); 106 auto key = CryptoKeyEC::importRaw(CryptoAlgorithmIdentifier::ECDSA, "P-256"_s, WTFMove(keyData), false, CryptoKeyUsageVerify); 107 #else 108 auto key = nullptr; 109 #endif 110 111 if (!key) { 104 if (!PushCrypto::validateP256DHPublicKey(keyDataResult.returnValue())) { 112 105 promise.reject(Exception { InvalidAccessError, "applicationServerKey must contain a valid P-256 public key"_s }); 113 106 return; -
trunk/Source/WebCore/PAL/ChangeLog
r286911 r287015 1 2021-12-14 Ben Nham <nham@apple.com> 2 3 Add web push message decryption routines 4 https://bugs.webkit.org/show_bug.cgi?id=233903 5 6 Reviewed by Brady Eidson. 7 8 * pal/spi/cocoa/CommonCryptoSPI.h: Add AES-GCM decryption SPI. 9 1 10 2021-12-11 Commit Queue <commit-queue@webkit.org> 2 11 -
trunk/Source/WebCore/PAL/pal/spi/cocoa/CommonCryptoSPI.h
r281554 r287015 25 25 26 26 #pragma once 27 28 #include <CommonCrypto/CommonCrypto.h> 27 29 28 30 #if USE(APPLE_INTERNAL_SDK) … … 119 121 extern "C" void CCKDFParametersDestroy(CCKDFParametersRef params); 120 122 extern "C" CCCryptorStatus CCCryptorGCM(CCOperation op, CCAlgorithm alg, const void* key, size_t keyLength, const void* iv, size_t ivLen, const void* aData, size_t aDataLen, const void* dataIn, size_t dataInLength, void* dataOut, void* tag, size_t* tagLength); 123 extern "C" CCCryptorStatus CCCryptorGCMOneshotDecrypt(CCAlgorithm alg, const void *key, size_t keyLength, const void *iv, size_t ivLen, const void *aData, size_t aDataLen, const void *dataIn, size_t dataInLength, void *dataOut, const void *tagIn, size_t tagLength); 121 124 extern "C" CCCryptorStatus CCRSACryptorCreateFromData(CCRSAKeyType keyType, const uint8_t *modulus, size_t modulusLength, const uint8_t *exponent, size_t exponentLength, const uint8_t *p, size_t pLength, const uint8_t *q, size_t qLength, CCRSACryptorRef *ref); 122 125 -
trunk/Source/WebCore/Sources.txt
r286962 r287015 258 258 Modules/pictureinpicture/HTMLVideoElementPictureInPicture.cpp 259 259 Modules/pictureinpicture/PictureInPictureWindow.cpp 260 Modules/push-api/PushCrypto.cpp 260 261 Modules/push-api/PushEvent.cpp 262 Modules/push-api/PushMessageCrypto.cpp 261 263 Modules/push-api/PushMessageData.cpp 262 264 Modules/push-api/PushSubscription.cpp -
trunk/Source/WebCore/SourcesCocoa.txt
r286943 r287015 107 107 Modules/model-element/scenekit/SceneKitModelLoaderUSD.mm 108 108 Modules/model-element/scenekit/SceneKitModelPlayer.mm 109 Modules/push-api/cocoa/PushCryptoCocoa.cpp 109 110 Modules/speech/cocoa/SpeechRecognizerCocoa.mm 110 111 Modules/speech/cocoa/WebSpeechRecognizerTask.mm -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r286962 r287015 5437 5437 EB3C29B62729C38800FB65B4 /* PushSubscriptionChangeEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = EB3C29B42729C36E00FB65B4 /* PushSubscriptionChangeEvent.h */; }; 5438 5438 EB3C29B72729C38C00FB65B4 /* PushSubscriptionChangeEventInit.h in Headers */ = {isa = PBXBuildFile; fileRef = EB3C29B12729C36D00FB65B4 /* PushSubscriptionChangeEventInit.h */; }; 5439 EBA75C46275EC61A00D6D31C /* PushCrypto.h in Headers */ = {isa = PBXBuildFile; fileRef = EBA75C42275EBDAB00D6D31C /* PushCrypto.h */; settings = {ATTRIBUTES = (Private, ); }; }; 5440 EBA75C47275EC62100D6D31C /* PushMessageCrypto.h in Headers */ = {isa = PBXBuildFile; fileRef = EBA75C40275EBDAA00D6D31C /* PushMessageCrypto.h */; settings = {ATTRIBUTES = (Private, ); }; }; 5439 5441 EBB9738127100671007732EF /* PushManager.h in Headers */ = {isa = PBXBuildFile; fileRef = EBB9738027100654007732EF /* PushManager.h */; }; 5440 5442 EBB9738227100676007732EF /* PushPermissionState.h in Headers */ = {isa = PBXBuildFile; fileRef = EBB9737827100651007732EF /* PushPermissionState.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 17582 17584 EB3C29B32729C36E00FB65B4 /* PushSubscriptionChangeEvent.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = PushSubscriptionChangeEvent.idl; sourceTree = "<group>"; }; 17583 17585 EB3C29B42729C36E00FB65B4 /* PushSubscriptionChangeEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PushSubscriptionChangeEvent.h; sourceTree = "<group>"; }; 17586 EBA75C3E275EBDAA00D6D31C /* PushMessageCrypto.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = PushMessageCrypto.cpp; sourceTree = "<group>"; }; 17587 EBA75C40275EBDAA00D6D31C /* PushMessageCrypto.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PushMessageCrypto.h; sourceTree = "<group>"; }; 17588 EBA75C41275EBDAB00D6D31C /* PushCrypto.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = PushCrypto.cpp; sourceTree = "<group>"; }; 17589 EBA75C42275EBDAB00D6D31C /* PushCrypto.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PushCrypto.h; sourceTree = "<group>"; }; 17590 EBA75C45275EC58E00D6D31C /* PushCryptoCocoa.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = PushCryptoCocoa.cpp; sourceTree = "<group>"; }; 17584 17591 EBB9737827100651007732EF /* PushPermissionState.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PushPermissionState.h; sourceTree = "<group>"; }; 17585 17592 EBB9737A27100652007732EF /* ServiceWorkerRegistrationPushAPI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ServiceWorkerRegistrationPushAPI.h; sourceTree = "<group>"; }; … … 21035 21042 isa = PBXGroup; 21036 21043 children = ( 21044 EBA75C44275EC56000D6D31C /* cocoa */, 21045 EBA75C41275EBDAB00D6D31C /* PushCrypto.cpp */, 21046 EBA75C42275EBDAB00D6D31C /* PushCrypto.h */, 21037 21047 EB0FB6FD270D0AE800F7810D /* PushEncryptionKeyName.h */, 21038 21048 EB0FB700270D0AEA00F7810D /* PushEncryptionKeyName.idl */, … … 21045 21055 EBB9738027100654007732EF /* PushManager.h */, 21046 21056 EBB9737E27100653007732EF /* PushManager.idl */, 21057 EBA75C3E275EBDAA00D6D31C /* PushMessageCrypto.cpp */, 21058 EBA75C40275EBDAA00D6D31C /* PushMessageCrypto.h */, 21047 21059 418FCBBE2706E4F700F96ECA /* PushMessageData.cpp */, 21048 21060 418FCBBC2706E4F600F96ECA /* PushMessageData.h */, … … 31230 31242 ); 31231 31243 path = "contact-picker"; 31244 sourceTree = "<group>"; 31245 }; 31246 EBA75C44275EC56000D6D31C /* cocoa */ = { 31247 isa = PBXGroup; 31248 children = ( 31249 EBA75C45275EC58E00D6D31C /* PushCryptoCocoa.cpp */, 31250 ); 31251 path = cocoa; 31232 31252 sourceTree = "<group>"; 31233 31253 }; … … 36425 36445 0081FF0016B0A2D3008AAA7A /* PublicSuffix.h in Headers */, 36426 36446 10FB084B14E15C7E00A3DB98 /* PublicURLManager.h in Headers */, 36447 EBA75C46275EC61A00D6D31C /* PushCrypto.h in Headers */, 36427 36448 EB0FB708270D0B1000F7810D /* PushEncryptionKeyName.h in Headers */, 36428 36449 418FCBC12706E4FB00F96ECA /* PushEvent.h in Headers */, 36429 36450 418FCBC22706E50100F96ECA /* PushEventInit.h in Headers */, 36430 36451 EBB9738127100671007732EF /* PushManager.h in Headers */, 36452 EBA75C47275EC62100D6D31C /* PushMessageCrypto.h in Headers */, 36431 36453 EBB9738227100676007732EF /* PushPermissionState.h in Headers */, 36432 36454 83D511F6250C1CBF002EDC51 /* PushPullFIFO.h in Headers */,
Note:
See TracChangeset
for help on using the changeset viewer.