⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 284890 in webkit


Ignore:
Timestamp:
Oct 26, 2021, 12:50:30 PM (5 years ago)
Author:
commit-queue@webkit.org
Message:

Update PCM test public key to one with RSA-PSS OID
https://bugs.webkit.org/show_bug.cgi?id=231048

Patch by Alex Christensen <achristensen@webkit.org> on 2021-10-26
Reviewed by John Wilander.

Source/WTF:

  • wtf/PlatformHave.h:

Tools:

In rdar://79069615 support for public keys with rsaEncryption OIDs was removed as stated on the blog at
https://webkit.org/blog/11940/pcm-click-fraud-prevention-and-attribution-sent-to-advertiser/
This implements enough ASN1 serialization to serialize a public key in the form accepted by WebKit now,
which is described at https://datatracker.ietf.org/doc/html/rfc8017#appendix-A.2.3

  • TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
  • TestWebKitAPI/Tests/WebCore/ASN1Utilities.cpp: Added.

(ASN1::Object::sizeSerializedSize const):
(ASN1::Object::serializeSize const):
(ASN1::ObjectIdentifier::ObjectIdentifier):
(ASN1::ObjectIdentifier::bytes const):
(ASN1::Sequence::create):
(ASN1::Sequence::Sequence):
(ASN1::Sequence::elementEncodedLengthBytes const):
(ASN1::IndexWrapper::IndexWrapper):
(ASN1::Integer::Integer):
(ASN1::BitString::BitString):
(TestWebKitAPI::wrapPublicKeyWithRSAPSSOID):

  • TestWebKitAPI/Tests/WebCore/ASN1Utilities.h: Added.
  • TestWebKitAPI/Tests/WebCore/PrivateClickMeasurement.cpp:

(TestWebKitAPI::TEST):

  • TestWebKitAPI/Tests/WebCore/cocoa/PrivateClickMeasurementCocoa.mm:

(TestWebKitAPI::TEST):

  • TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm:

(TestWebKitAPI::TEST):

Location:
trunk
Files:
2 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WTF/ChangeLog

    r284857 r284890  
     12021-10-26  Alex Christensen  <achristensen@webkit.org>
     2
     3        Update PCM test public key to one with RSA-PSS OID
     4        https://bugs.webkit.org/show_bug.cgi?id=231048
     5
     6        Reviewed by John Wilander.
     7
     8        * wtf/PlatformHave.h:
     9
    1102021-10-26  Fujii Hironori  <Hironori.Fujii@sony.com>
    211
  • trunk/Source/WTF/wtf/PlatformHave.h

    r284823 r284890  
    935935#endif
    936936
     937#if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 120400) \
     938    || (PLATFORM(IOS_FAMILY) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 150400) \
     939    || (PLATFORM(APPLETV) && __TV_OS_VERSION_MAX_ALLOWED >= 150400) \
     940    || (PLATFORM(WATCHOS) && __WATCH_OS_VERSION_MAX_ALLOWED >= 80400)
     941#define HAVE_RSA_PSS_OID 1
     942#endif
     943
    937944#if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101600) \
    938945    || (PLATFORM(IOS) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 140000) \
  • trunk/Tools/ChangeLog

    r284888 r284890  
     12021-10-26  Alex Christensen  <achristensen@webkit.org>
     2
     3        Update PCM test public key to one with RSA-PSS OID
     4        https://bugs.webkit.org/show_bug.cgi?id=231048
     5
     6        Reviewed by John Wilander.
     7
     8        In rdar://79069615 support for public keys with rsaEncryption OIDs was removed as stated on the blog at
     9        https://webkit.org/blog/11940/pcm-click-fraud-prevention-and-attribution-sent-to-advertiser/
     10        This implements enough ASN1 serialization to serialize a public key in the form accepted by WebKit now,
     11        which is described at https://datatracker.ietf.org/doc/html/rfc8017#appendix-A.2.3
     12
     13        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
     14        * TestWebKitAPI/Tests/WebCore/ASN1Utilities.cpp: Added.
     15        (ASN1::Object::sizeSerializedSize const):
     16        (ASN1::Object::serializeSize const):
     17        (ASN1::ObjectIdentifier::ObjectIdentifier):
     18        (ASN1::ObjectIdentifier::bytes const):
     19        (ASN1::Sequence::create):
     20        (ASN1::Sequence::Sequence):
     21        (ASN1::Sequence::elementEncodedLengthBytes const):
     22        (ASN1::IndexWrapper::IndexWrapper):
     23        (ASN1::Integer::Integer):
     24        (ASN1::BitString::BitString):
     25        (TestWebKitAPI::wrapPublicKeyWithRSAPSSOID):
     26        * TestWebKitAPI/Tests/WebCore/ASN1Utilities.h: Added.
     27        * TestWebKitAPI/Tests/WebCore/PrivateClickMeasurement.cpp:
     28        (TestWebKitAPI::TEST):
     29        * TestWebKitAPI/Tests/WebCore/cocoa/PrivateClickMeasurementCocoa.mm:
     30        (TestWebKitAPI::TEST):
     31        * TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm:
     32        (TestWebKitAPI::TEST):
     33
    1342021-10-26  Tim Horton  <timothy_horton@apple.com>
    235
  • trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj

    r284786 r284890  
    11511151                D34E08761E4E42E1005FF14A /* WKWebViewGetContents.mm in Sources */ = {isa = PBXBuildFile; fileRef = D3BE5E341E4CE85E00FD563A /* WKWebViewGetContents.mm */; };
    11521152                DF4B273921A47728009BD1CA /* WKNSDictionaryEmptyDictionaryCrash.mm in Sources */ = {isa = PBXBuildFile; fileRef = DF4B273821A47727009BD1CA /* WKNSDictionaryEmptyDictionaryCrash.mm */; };
     1153                DF6580942722168900B3F1C1 /* ASN1Utilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF6580922722168900B3F1C1 /* ASN1Utilities.cpp */; };
    11531154                DFB80E38261512C1002D4771 /* TestAwakener.mm in Sources */ = {isa = PBXBuildFile; fileRef = DFB80E362615124E002D4771 /* TestAwakener.mm */; };
    11541155                DFB8FF322492F52400F00B0D /* Preconnect.mm in Sources */ = {isa = PBXBuildFile; fileRef = DFB8FF312492F51A00F00B0D /* Preconnect.mm */; };
     
    30123013                DC69AA621CF77C6500C6272F /* ScopedLambda.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScopedLambda.cpp; sourceTree = "<group>"; };
    30133014                DF4B273821A47727009BD1CA /* WKNSDictionaryEmptyDictionaryCrash.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKNSDictionaryEmptyDictionaryCrash.mm; sourceTree = "<group>"; };
     3015                DF6580922722168900B3F1C1 /* ASN1Utilities.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ASN1Utilities.cpp; sourceTree = "<group>"; };
     3016                DF6580932722168900B3F1C1 /* ASN1Utilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASN1Utilities.h; sourceTree = "<group>"; };
    30143017                DF6BC46F2534E120008F63CC /* TestDownloadDelegate.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = TestDownloadDelegate.mm; path = cocoa/TestDownloadDelegate.mm; sourceTree = "<group>"; };
    30153018                DF6BC4702534E120008F63CC /* TestDownloadDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TestDownloadDelegate.h; path = cocoa/TestDownloadDelegate.h; sourceTree = "<group>"; };
     
    37843787                                57152B5D21CC2045000C37CA /* ApduTest.cpp */,
    37853788                                6354F4D01F7C3AB500D89DF3 /* ApplicationManifestParser.cpp */,
     3789                                DF6580922722168900B3F1C1 /* ASN1Utilities.cpp */,
     3790                                DF6580932722168900B3F1C1 /* ASN1Utilities.h */,
    37863791                                93A720E518F1A0E800A848E1 /* CalculationValue.cpp */,
    37873792                                07C046C91E42573E007201E7 /* CARingBuffer.cpp */,
     
    54555460                                6354F4D11F7C3AB500D89DF3 /* ApplicationManifestParser.cpp in Sources */,
    54565461                                49EF6AD52677C0BE007967DC /* AppPrivacyReport.mm in Sources */,
     5462                                DF6580942722168900B3F1C1 /* ASN1Utilities.cpp in Sources */,
    54575463                                51B40D9E23AC962400E05241 /* AsyncFunction.mm in Sources */,
    54585464                                834138C7203261CA00F26960 /* AsyncPolicyForNavigationResponse.mm in Sources */,
  • trunk/Tools/TestWebKitAPI/Tests/WebCore/PrivateClickMeasurement.cpp

    r283313 r284890  
    302302TEST(PrivateClickMeasurement, InvalidBlindedSecret)
    303303{
     304#if HAVE(RSA_PSS_OID)
     305    const char serverPublicKeyBase64URL[] = "MIICUjA9BgkqhkiG9w0BAQowMKANMAsGCWCGSAFlAwQCAqEaMBgGCSqGSIb3DQEBCDALBglghkgBZQMEAgKiAwIBMAOCAg8AMIICCgKCAgEAoGhU5Mgsbb51ZbJVPHSgf8c93TJdtkxeKfyxQ5fCpwE2Fe9xJ7tByExdGKj4XO-HFi7npmtEPzR4cRXdsAL7YcH5UXNbVhXmVcbFCBXks-Ih-jqLwfNac0wPLG5K1Zzhf1gZ--JBzVjw87zvqpWrzzxviuV__0sn_u7f01E1OdaD83110fhfiXp_Ex62Q2uhcek0hqbqEvyKlLVBOjlJFJc2FLyw-l8-9xd7GcX1ZRyPx4lITvYG7KIbSMrFTfuQNOyJf4DlO97qq08R6Utl249AnBfLe3ZDbWBnl0fDOwkJgBmbaa7EnRlQ3p6Ir2SY1hNTnzW-p2ceytIMYwTMSES7-j21oeTUC-OmcC_5g05AgxROzUJPZdyY33m4Q7lqkHkLAYtdN2TVCP79MuswS-fJJQOD_dDCqq_hk0MySLCbnUGe5lyFBoO5vBMH5k38LjSQuN6jfP7quYA6cOONzmn842eLT61tIjRoX2czeUJrSmx89SfY8WnFE2fhk9G52cXp6L2Vzr5IV7rOws3ZPw-RnjKnZZaejs0bKGOXC1-jl-u4A5ip55ohlUjm7lvDtKFAeJ7gajJBtiNnq3s3m_IMkv7ztCQpv0pBxst6MmvNOO0jOQvYkzQbGooI1_qjeDup0BYY67xxyNRaA9V4CKEJ7j_hznrAmjSiz0LSqTkCAwEAAQ==";
     306#else
    304307    const char serverPublicKeyBase64URL[] = "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzb1dThrtYwVh46SjInegKhAqpbJwm1XnTBCvybSK8zk53R0Am1hG33AVF5J1lqYf36wp663GasclHtqzvxFZIvDA1DUSH4aZz_fDHCTTxEeJVPORS3zNN2UjWwbtnwsh4BmDTi-z_cDn0LAz2JuZyKlyFt5GgVLAQvL9H3VLHU9_XHNK-uboyXfcHRTtrDnpu3c6wvX5dd-AJoLmIQTZBEJfVkxBGznk1qKHjc6nASAirKF_wJCnuwAK8C6BAcjNcwUWCeKp0YECzCXU--JXd2OEU-QhxPC67faiDOh3V0vlfqZLtrlbnanUCKrvhw7GaGOGYotIrnZtuNfxC14d_XNVd1FS8nHjRTHnEgw_jnlSssfgStz0uJtcmkfgoJBvOE4mIRpi7iSlRfXNkKsWX1J-gwcnCVo5u0uJEW6X6NyvEGYJ8w5BPfwsQuK9y-4Z7ikt9IOucEHY7ThDmi9TNNhHBVj0Gu4wGoSjq3a6vL5N10ZSHXoq1XgfGPrmHhhL90cjvWonoyOXsUqlXEzTjD2W9897Q-Mx9BUNrGQPqmIx8F5MwxWcOrye8WRp4Q88n2YSUnV7C8ayld3v1Fh7N5jeSqeVmtDVRYTn2sVfNqgXrzgdigJcQR8vFENu6nzFPwsrXPMaCiLUnZNUmQ1ZSLQeQyhYXxHqRJrnuCDWXLkCAwEAAQ";
     308#endif
    305309
    306310    WebCore::PrivateClickMeasurement pcm(
  • trunk/Tools/TestWebKitAPI/Tests/WebCore/cocoa/PrivateClickMeasurementCocoa.mm

    r283313 r284890  
    2929#if HAVE(RSA_BSSA)
    3030
     31#include "ASN1Utilities.h"
    3132#include "CoreCryptoSPI.h"
    32 
    3333#include <WebCore/PrivateClickMeasurement.h>
    3434#include <wtf/spi/cocoa/SecuritySPI.h>
    3535
     36namespace TestWebKitAPI {
    3637using namespace WebCore;
    37 
    38 namespace TestWebKitAPI {
    3938
    4039TEST(PrivateClickMeasurement, ValidBlindedSecret)
     
    7170
    7271    size_t exportSize = ccder_encode_rsa_pub_size(rsaPublicKey);
    73     auto publicKey = adoptNS([[NSMutableData alloc] initWithLength:exportSize]);
    74     ccder_encode_rsa_pub(rsaPublicKey, static_cast<uint8_t*>([publicKey mutableBytes]), static_cast<uint8_t*>([publicKey mutableBytes]) + [publicKey length]);
     72    Vector<uint8_t> rawKeyBytes(exportSize);
     73    ccder_encode_rsa_pub(rsaPublicKey, rawKeyBytes.data(), rawKeyBytes.data() + exportSize);
    7574
    76     auto secKey = adoptCF(SecKeyCreateWithData((__bridge CFDataRef)publicKey.get(), (__bridge CFDictionaryRef)@{
    77         (__bridge id)kSecAttrKeyType: (__bridge id)kSecAttrKeyTypeRSA,
    78         (__bridge id)kSecAttrKeyClass: (__bridge id)kSecAttrKeyClassPublic
    79     }, nil));
    80     EXPECT_NOT_NULL(secKey);
    81 
    82     auto spkiData = adoptCF(SecKeyCopySubjectPublicKeyInfo(secKey.get()));
    83     auto *nsSpkiData = (__bridge NSData *)spkiData.get();
     75    auto wrappedKeyBytes = wrapPublicKeyWithRSAPSSOID(WTFMove(rawKeyBytes));
    8476
    8577    // Continue the test.
    86     auto errorMessage = pcm.calculateAndUpdateSourceUnlinkableToken(base64URLEncodeToString(nsSpkiData.bytes, nsSpkiData.length));
     78    auto errorMessage = pcm.calculateAndUpdateSourceUnlinkableToken(base64URLEncodeToString(wrappedKeyBytes.data(), wrappedKeyBytes.size()));
    8779    EXPECT_FALSE(errorMessage);
     80   
    8881    auto sourceUnlinkableToken = pcm.tokenSignatureJSON();
    8982    EXPECT_EQ(sourceUnlinkableToken->asObject()->size(), 4ul);
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm

    r284474 r284890  
    2626#import "config.h"
    2727
     28#import "ASN1Utilities.h"
    2829#import "DaemonTestUtilities.h"
    2930#import "HTTPServer.h"
     
    217218        (__bridge id)kSecAttrKeyClass: (__bridge id)kSecAttrKeyClassPublic
    218219    }, nil));
    219 
    220     auto spkiData = adoptCF(SecKeyCopySubjectPublicKeyInfo(secKey.get()));
    221     auto *nsSpkiData = (__bridge NSData *)spkiData.get();
    222 
    223     auto keyData = base64URLEncodeToString(nsSpkiData.bytes, nsSpkiData.length);
     220    Vector<uint8_t> rawKeyBytes(static_cast<const uint8_t*>(publicKey.get().bytes), publicKey.get().length);
     221    auto wrappedKeyBytes = wrapPublicKeyWithRSAPSSOID(WTFMove(rawKeyBytes));
     222
     223    auto keyData = base64URLEncodeToString(wrappedKeyBytes.data(), wrappedKeyBytes.size());
    224224
    225225    // The server.
Note: See TracChangeset for help on using the changeset viewer.