Changeset 268575 in webkit


Ignore:
Timestamp:
Oct 16, 2020 12:52:45 AM (3 years ago)
Author:
jiewen_tan@apple.com
Message:

[WebAuthn] Move AppAttestInternal related code from WKA to OpenSource
https://bugs.webkit.org/show_bug.cgi?id=217790
<rdar://problem/59613406>

Reviewed by Brent Fulgham.

Source/WebKit:

Covered by manual testing.

  • Platform/spi/Cocoa/AppAttestSPI.h: Copied from Source/WebKit/UIProcess/WebAuthentication/Cocoa/AppAttestInternalSoftLink.mm.
  • SourcesCocoa.txt:
  • UIProcess/WebAuthentication/Cocoa/AppAttestInternalSoftLink.h: Added.
  • UIProcess/WebAuthentication/Cocoa/AppAttestInternalSoftLink.mm: Added.
  • UIProcess/WebAuthentication/Cocoa/LocalConnection.mm:

(WebKit::LocalConnection::getAttestation const):

  • UIProcess/WebAuthentication/Cocoa/LocalService.mm:

(WebKit::LocalService::isAvailable):

  • WebKit.xcodeproj/project.pbxproj:

Source/WTF:

  • wtf/PlatformHave.h:
Location:
trunk/Source
Files:
2 added
7 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/Source/WTF/ChangeLog

    r268543 r268575  
     12020-10-15  Jiewen Tan  <jiewen_tan@apple.com>
     2
     3        [WebAuthn] Move AppAttestInternal related code from WKA to OpenSource
     4        https://bugs.webkit.org/show_bug.cgi?id=217790
     5        <rdar://problem/59613406>
     6
     7        Reviewed by Brent Fulgham.
     8
     9        * wtf/PlatformHave.h:
     10
    1112020-10-15  David Kilzer  <ddkilzer@apple.com>
    212
  • trunk/Source/WTF/wtf/PlatformHave.h

    r268148 r268575  
    736736#define HAVE_PENCILKIT_TEXT_INPUT 1
    737737#endif
     738
     739#if (PLATFORM(IOS) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 140000 || PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 110000)
     740#if !defined(HAVE_APPLE_ATTESTATION)
     741#define HAVE_APPLE_ATTESTATION 1
     742#endif
     743#endif
  • trunk/Source/WebKit/ChangeLog

    r268570 r268575  
     12020-10-15  Jiewen Tan  <jiewen_tan@apple.com>
     2
     3        [WebAuthn] Move AppAttestInternal related code from WKA to OpenSource
     4        https://bugs.webkit.org/show_bug.cgi?id=217790
     5        <rdar://problem/59613406>
     6
     7        Reviewed by Brent Fulgham.
     8
     9        Covered by manual testing.
     10
     11        * Platform/spi/Cocoa/AppAttestSPI.h: Copied from Source/WebKit/UIProcess/WebAuthentication/Cocoa/AppAttestInternalSoftLink.mm.
     12        * SourcesCocoa.txt:
     13        * UIProcess/WebAuthentication/Cocoa/AppAttestInternalSoftLink.h: Added.
     14        * UIProcess/WebAuthentication/Cocoa/AppAttestInternalSoftLink.mm: Added.
     15        * UIProcess/WebAuthentication/Cocoa/LocalConnection.mm:
     16        (WebKit::LocalConnection::getAttestation const):
     17        * UIProcess/WebAuthentication/Cocoa/LocalService.mm:
     18        (WebKit::LocalService::isAvailable):
     19        * WebKit.xcodeproj/project.pbxproj:
     20
    1212020-10-15  David Kilzer  <ddkilzer@apple.com>
    222
  • trunk/Source/WebKit/Platform/spi/Cocoa/AppAttestSPI.h

    r268574 r268575  
    11/*
    2  * Copyright (C) 2018 Apple Inc. All rights reserved.
     2 * Copyright (C) 2020 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2424 */
    2525
    26 #import "config.h"
    27 #import "LocalService.h"
    28 
    29 #if ENABLE(WEB_AUTHN)
    30 
    31 #import "LocalAuthenticator.h"
    32 #import "LocalConnection.h"
     26#pragma once
    3327
    3428#if USE(APPLE_INTERNAL_SDK)
    35 #import <WebKitAdditions/LocalServiceAdditions.h>
    36 #endif
    3729
    38 #import "LocalAuthenticationSoftLink.h"
     30#import <AppAttestInternal/AppAttest.h>
    3931
    40 namespace WebKit {
     32#else
    4133
    42 LocalService::LocalService(Observer& observer)
    43     : AuthenticatorTransportService(observer)
    44 {
    45 }
     34WTF_EXTERN_C_BEGIN
    4635
    47 bool LocalService::isAvailable()
    48 {
    49     auto context = adoptNS([allocLAContextInstance() init]);
    50     NSError *error = nil;
    51     if (![context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
    52         LOG_ERROR("Couldn't find local authenticators: %@", error);
    53         return false;
    54     }
     36BOOL AppAttest_WebAuthentication_IsSupported(void);
    5537
    56 #if defined(LOCALSERVICE_ADDITIONS)
    57 LOCALSERVICE_ADDITIONS
    58 #else
    59     return false;
    60 #endif
     38typedef void (^AppAttest_WebAuthentication_AttestKeyCompletionBlock) (NSArray * _Nullable certificates, NSError * _Nullable error);
    6139
    62     return true;
    63 }
     40void AppAttest_WebAuthentication_AttestKey(SecKeyRef _Nonnull referenceKey, NSData * _Nonnull authenticatorData, NSData * _Nonnull clientDataHash, AppAttest_WebAuthentication_AttestKeyCompletionBlock _Nonnull completion);
    6441
    65 void LocalService::startDiscoveryInternal()
    66 {
    67     if (!platformStartDiscovery() || !observer())
    68         return;
    69     observer()->authenticatorAdded(LocalAuthenticator::create(createLocalConnection()));
    70 }
     42WTF_EXTERN_C_END
    7143
    72 bool LocalService::platformStartDiscovery() const
    73 {
    74     return LocalService::isAvailable();
    75 }
    76 
    77 UniqueRef<LocalConnection> LocalService::createLocalConnection() const
    78 {
    79     return makeUniqueRef<LocalConnection>();
    80 }
    81 
    82 } // namespace WebKit
    83 
    84 #endif // ENABLE(WEB_AUTHN)
     44#endif // USE(APPLE_INTERNAL_SDK)
  • trunk/Source/WebKit/SourcesCocoa.txt

    r268521 r268575  
    531531UIProcess/RemoteLayerTree/RemoteScrollingTree.cpp
    532532
     533UIProcess/WebAuthentication/Cocoa/AppAttestInternalSoftLink.mm @no-unify
    533534UIProcess/WebAuthentication/Cocoa/HidConnection.mm
    534535UIProcess/WebAuthentication/Cocoa/HidService.mm
  • trunk/Source/WebKit/UIProcess/WebAuthentication/Cocoa/LocalConnection.mm

    r261118 r268575  
    3434#import <wtf/RunLoop.h>
    3535
    36 #if USE(APPLE_INTERNAL_SDK)
    37 #import <WebKitAdditions/LocalConnectionAdditions.h>
    38 #endif
    39 
     36#import "AppAttestInternalSoftLink.h"
    4037#import "LocalAuthenticationSoftLink.h"
    4138
     
    126123void LocalConnection::getAttestation(SecKeyRef privateKey, NSData *authData, NSData *hash, AttestationCallback&& completionHandler) const
    127124{
    128 #if defined(LOCALCONNECTION_ADDITIONS)
    129 LOCALCONNECTION_ADDITIONS
     125#if HAVE(APPLE_ATTESTATION)
     126    AppAttest_WebAuthentication_AttestKey(privateKey, authData, hash, makeBlockPtr([completionHandler = WTFMove(completionHandler)] (NSArray *certificates, NSError *error) mutable {
     127        completionHandler(certificates, error);
     128    }).get());
    130129#endif
    131130}
  • trunk/Source/WebKit/UIProcess/WebAuthentication/Cocoa/LocalService.mm

    r257877 r268575  
    3232#import "LocalConnection.h"
    3333
    34 #if USE(APPLE_INTERNAL_SDK)
    35 #import <WebKitAdditions/LocalServiceAdditions.h>
    36 #endif
    37 
     34#import "AppAttestInternalSoftLink.h"
    3835#import "LocalAuthenticationSoftLink.h"
    3936
     
    5451    }
    5552
    56 #if defined(LOCALSERVICE_ADDITIONS)
    57 LOCALSERVICE_ADDITIONS
     53#if HAVE(APPLE_ATTESTATION)
     54    if (!AppAttest_WebAuthentication_IsSupported()) {
     55        LOG_ERROR("Device is unable to support Apple attestation features.");
     56        return false;
     57    }
    5858#else
    5959    return false;
  • trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj

    r268521 r268575  
    10971097                570DAAC623037F7F00E8FC04 /* WKNFReaderSessionDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 570DAAC423037F7E00E8FC04 /* WKNFReaderSessionDelegate.h */; };
    10981098                570DAACA230385FD00E8FC04 /* CtapNfcDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 570DAAC8230385FD00E8FC04 /* CtapNfcDriver.h */; };
     1099                572EBBDA2538F6B4000552B3 /* AppAttestInternalSoftLink.mm in Sources */ = {isa = PBXBuildFile; fileRef = 572EBBD82538F6A1000552B3 /* AppAttestInternalSoftLink.mm */; };
     1100                572EBBDB2538F6B6000552B3 /* AppAttestInternalSoftLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 572EBBD92538F6A1000552B3 /* AppAttestInternalSoftLink.h */; };
     1101                572EBBDD25392181000552B3 /* AppAttestSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 572EBBDC25392181000552B3 /* AppAttestSPI.h */; };
    10991102                572FD44322265CE200A1ECC3 /* WebViewDidMoveToWindowObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 572FD44122265CE200A1ECC3 /* WebViewDidMoveToWindowObserver.h */; };
    11001103                574217922400E286002B303D /* LocalAuthenticationSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 574217912400E098002B303D /* LocalAuthenticationSPI.h */; };
     
    39113914                570DAAC8230385FD00E8FC04 /* CtapNfcDriver.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CtapNfcDriver.h; sourceTree = "<group>"; };
    39123915                570DAAC9230385FD00E8FC04 /* CtapNfcDriver.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CtapNfcDriver.cpp; sourceTree = "<group>"; };
     3916                572EBBD82538F6A1000552B3 /* AppAttestInternalSoftLink.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = AppAttestInternalSoftLink.mm; sourceTree = "<group>"; };
     3917                572EBBD92538F6A1000552B3 /* AppAttestInternalSoftLink.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppAttestInternalSoftLink.h; sourceTree = "<group>"; };
     3918                572EBBDC25392181000552B3 /* AppAttestSPI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppAttestSPI.h; sourceTree = "<group>"; };
    39133919                572FD44122265CE200A1ECC3 /* WebViewDidMoveToWindowObserver.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WebViewDidMoveToWindowObserver.h; sourceTree = "<group>"; };
    39143920                574217912400E098002B303D /* LocalAuthenticationSPI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LocalAuthenticationSPI.h; sourceTree = "<group>"; };
     
    72187224                        children = (
    72197225                                E3CAAA432413278A00CED2E2 /* AccessibilitySupportSPI.h */,
     7226                                572EBBDC25392181000552B3 /* AppAttestSPI.h */,
    72207227                                1A5705101BE410E500874AF1 /* BlockSPI.h */,
    72217228                                37C21CAD1E994C0C0029D5F9 /* CorePredictionSPI.h */,
     
    82328239                        isa = PBXGroup;
    82338240                        children = (
     8241                                572EBBD92538F6A1000552B3 /* AppAttestInternalSoftLink.h */,
     8242                                572EBBD82538F6A1000552B3 /* AppAttestInternalSoftLink.mm */,
    82348243                                57AC8F4E217FEED90055438C /* HidConnection.h */,
    82358244                                57AC8F4F217FEED90055438C /* HidConnection.mm */,
     
    1080910818                                1AE286841C7F93860069AC4F /* APIWebsiteDataRecord.h in Headers */,
    1081010819                                1A6563E51B7A8C50009CF787 /* APIWindowFeatures.h in Headers */,
     10820                                572EBBDB2538F6B6000552B3 /* AppAttestInternalSoftLink.h in Headers */,
     10821                                572EBBDD25392181000552B3 /* AppAttestSPI.h in Headers */,
    1081110822                                074879B92373A90900F5678E /* AppKitSoftLink.h in Headers */,
    1081210823                                F48D2A8521583A7E00C6752B /* AppKitSPI.h in Headers */,
     
    1281812829                                99E7189A21F79D9E0055E975 /* _WKTouchEventGenerator.mm in Sources */,
    1281912830                                2D92A784212B6AB100F493FD /* ActivityAssertion.cpp in Sources */,
     12831                                572EBBDA2538F6B4000552B3 /* AppAttestInternalSoftLink.mm in Sources */,
    1282012832                                2D92A77B212B6A7100F493FD /* ArgumentCoders.cpp in Sources */,
    1282112833                                2DEB1D2E2127473600933906 /* ArgumentCodersCF.cpp in Sources */,
Note: See TracChangeset for help on using the changeset viewer.