Changeset 291423 in webkit
- Timestamp:
- Mar 17, 2022 11:28:13 AM (4 months ago)
- Location:
- trunk/Source
- Files:
-
- 2 added
- 13 edited
- 3 copied
-
WebCore/ChangeLog (modified) (1 diff)
-
WebCore/Modules/webauthn/WebAuthenticationConstants.h (modified) (1 diff)
-
WebCore/Modules/webauthn/WebAuthenticationUtils.cpp (modified) (2 diffs)
-
WebCore/Modules/webauthn/WebAuthenticationUtils.h (modified) (1 diff)
-
WebCore/Modules/webauthn/fido/FidoConstants.h (modified) (1 diff)
-
WebKit/ChangeLog (modified) (1 diff)
-
WebKit/UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm (modified) (2 diffs)
-
WebKit/UIProcess/WebAuthentication/Mock/MockHidConnection.cpp (modified) (7 diffs)
-
WebKit/UIProcess/WebAuthentication/Virtual/VirtualAuthenticatorManager.cpp (modified) (3 diffs)
-
WebKit/UIProcess/WebAuthentication/Virtual/VirtualAuthenticatorManager.h (modified) (2 diffs)
-
WebKit/UIProcess/WebAuthentication/Virtual/VirtualAuthenticatorUtils.h (copied) (copied from trunk/Source/WebKit/UIProcess/WebAuthentication/Virtual/VirtualService.h) (2 diffs)
-
WebKit/UIProcess/WebAuthentication/Virtual/VirtualAuthenticatorUtils.mm (added)
-
WebKit/UIProcess/WebAuthentication/Virtual/VirtualCredential.h (copied) (copied from trunk/Source/WebKit/UIProcess/WebAuthentication/Virtual/VirtualService.h) (2 diffs)
-
WebKit/UIProcess/WebAuthentication/Virtual/VirtualHidConnection.cpp (added)
-
WebKit/UIProcess/WebAuthentication/Virtual/VirtualHidConnection.h (copied) (copied from trunk/Source/WebKit/UIProcess/WebAuthentication/Virtual/VirtualService.h) (2 diffs)
-
WebKit/UIProcess/WebAuthentication/Virtual/VirtualService.h (modified) (1 diff)
-
WebKit/UIProcess/WebAuthentication/Virtual/VirtualService.mm (modified) (2 diffs)
-
WebKit/WebKit.xcodeproj/project.pbxproj (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r291421 r291423 1 2022-03-17 J Pascoe <j_pascoe@apple.com> 2 3 [WebAuthn] Support makeCredential for virtual HID authenticators 4 https://bugs.webkit.org/show_bug.cgi?id=237984 5 rdar://problem/90393676 6 7 Reviewed by Brent Fulgham. 8 9 Virtual authenticators for WebAuthn supports different transports: nfc,usb,internal,ble. 10 Currently, we support the internal transport, but the default transport used in web platform 11 tests is usb. This patch implements makeCredential for hid-based virtual authenticators. Virtual 12 credential information is stored in the VirtualCredential struct as suggested by the spec. 13 14 * Modules/webauthn/WebAuthenticationUtils.cpp: 15 (WebCore::buildAttestationMap): 16 (WebCore::buildAttestationObject): 17 * Modules/webauthn/WebAuthenticationUtils.h: 18 * Modules/webauthn/fido/FidoConstants.h: 19 1 20 2022-03-17 Youenn Fablet <youenn@apple.com> 2 21 -
trunk/Source/WebCore/Modules/webauthn/WebAuthenticationConstants.h
r290515 r291423 101 101 }; 102 102 103 // https://www.w3.org/TR/webauthn-2/#authenticator-data 104 constexpr uint8_t userPresenceFlag = 0b00000001; 105 constexpr uint8_t userVerifiedFlag = 0b00000100; 106 constexpr uint8_t attestedCredentialDataIncludedFlag = 0b01000000; 107 103 108 } // namespace WebAuthn -
trunk/Source/WebCore/Modules/webauthn/WebAuthenticationUtils.cpp
r287116 r291423 111 111 } 112 112 113 Vector<uint8_t> buildAttestationObject(Vector<uint8_t>&& authData, String&& format, cbor::CBORValue::MapValue&& statementMap, const AttestationConveyancePreference& attestation)113 cbor::CBORValue::MapValue buildAttestationMap(Vector<uint8_t>&& authData, String&& format, cbor::CBORValue::MapValue&& statementMap, const AttestationConveyancePreference& attestation) 114 114 { 115 115 cbor::CBORValue::MapValue attestationObjectMap; … … 128 128 attestationObjectMap[cbor::CBORValue("fmt")] = cbor::CBORValue(WTFMove(format)); 129 129 attestationObjectMap[cbor::CBORValue("attStmt")] = cbor::CBORValue(WTFMove(statementMap)); 130 return attestationObjectMap; 131 } 132 133 Vector<uint8_t> buildAttestationObject(Vector<uint8_t>&& authData, String&& format, cbor::CBORValue::MapValue&& statementMap, const AttestationConveyancePreference& attestation) 134 { 135 cbor::CBORValue::MapValue attestationObjectMap = buildAttestationMap(WTFMove(authData), WTFMove(format), WTFMove(statementMap), attestation); 130 136 131 137 auto attestationObject = cbor::CBORWriter::write(cbor::CBORValue(WTFMove(attestationObjectMap))); -
trunk/Source/WebCore/Modules/webauthn/WebAuthenticationUtils.h
r287116 r291423 50 50 WEBCORE_EXPORT Vector<uint8_t> buildAuthData(const String& rpId, const uint8_t flags, const uint32_t counter, const Vector<uint8_t>& optionalAttestedCredentialData); 51 51 52 WEBCORE_EXPORT cbor::CBORValue::MapValue buildAttestationMap(Vector<uint8_t>&&, String&&, cbor::CBORValue::MapValue&&, const AttestationConveyancePreference&); 53 52 54 // https://www.w3.org/TR/webauthn/#attestation-object 53 55 WEBCORE_EXPORT Vector<uint8_t> buildAttestationObject(Vector<uint8_t>&& authData, String&& format, cbor::CBORValue::MapValue&& statementMap, const AttestationConveyancePreference&); -
trunk/Source/WebCore/Modules/webauthn/fido/FidoConstants.h
r254079 r291423 256 256 const uint8_t kCtapNfcApduIns = 0x10; 257 257 258 // https://fidoalliance.org/specs/fido-v2.0-ps-20170927/fido-client-to-authenticator-protocol-v2.0-ps-20170927.html#mandatory-commands 259 const size_t kCtapChannelIdSize = 4; 260 const uint8_t kCtapKeepAliveStatusProcessing = 1; 261 // https://fidoalliance.org/specs/fido-v2.0-ps-20170927/fido-client-to-authenticator-protocol-v2.0-ps-20170927.html#commands 262 const int64_t kCtapMakeCredentialClientDataHashKey = 1; 263 const int64_t kCtapMakeCredentialRpKey = 2; 264 const int64_t kCtapMakeCredentialUserKey = 3; 265 const int64_t kCtapMakeCredentialPubKeyCredParamsKey = 4; 266 const int64_t kCtapMakeCredentialExcludeListKey = 5; 267 const int64_t kCtapMakeCredentialExtensionsKey = 6; 268 const int64_t kCtapMakeCredentialRequestOptionsKey = 7; 269 const int64_t kCtapGetAssertionRequestOptionsKey = 5; 270 258 271 } // namespace fido 259 272 -
trunk/Source/WebKit/ChangeLog
r291421 r291423 1 2022-03-17 J Pascoe <j_pascoe@apple.com> 2 3 [WebAuthn] Support makeCredential for virtual HID authenticators 4 https://bugs.webkit.org/show_bug.cgi?id=237984 5 rdar://problem/90393676 6 7 Reviewed by Brent Fulgham. 8 9 Virtual authenticators for WebAuthn supports different transports: nfc,usb,internal,ble. 10 Currently, we support the internal transport, but the default transport used in web platform 11 tests is usb. This patch implements makeCredential for hid-based virtual authenticators. Virtual 12 credential information is stored in the VirtualCredential struct as suggested by the spec. 13 14 Tested manually via creating virtual authenticator and performing create and via wpt tests. 15 16 * UIProcess/WebAuthentication/Mock/MockHidConnection.cpp: 17 (WebKit::MockHidConnection::parseRequest): 18 (WebKit::MockHidConnection::feedReports): 19 * UIProcess/WebAuthentication/Virtual/VirtualAuthenticatorManager.cpp: 20 (WebKit::VirtualAuthenticatorManager::createAuthenticator): 21 (WebKit::VirtualAuthenticatorManager::addCredential): 22 (WebKit::VirtualAuthenticatorManager::createService const): 23 * UIProcess/WebAuthentication/Virtual/VirtualAuthenticatorManager.h: 24 * UIProcess/WebAuthentication/Virtual/VirtualAuthenticatorUtils.h: Copied from Source/WebKit/UIProcess/WebAuthentication/Virtual/VirtualService.h. 25 * UIProcess/WebAuthentication/Virtual/VirtualAuthenticatorUtils.mm: Added. 26 (WebKit::flagsForConfig): 27 (WebKit::createPrivateKey): 28 (WebKit::credentialIdAndCosePubKeyForPrivateKey): 29 (WebKit::base64PrivateKey): 30 * UIProcess/WebAuthentication/Virtual/VirtualCredential.h: Copied from Source/WebKit/UIProcess/WebAuthentication/Virtual/VirtualService.h. 31 * UIProcess/WebAuthentication/Virtual/VirtualHidConnection.cpp: Added. 32 (WebKit::VirtualHidConnection::VirtualHidConnection): 33 (WebKit::VirtualHidConnection::initialize): 34 (WebKit::VirtualHidConnection::terminate): 35 (WebKit::VirtualHidConnection::sendSync): 36 (WebKit::VirtualHidConnection::send): 37 (WebKit::VirtualHidConnection::assembleRequest): 38 (WebKit::VirtualHidConnection::receiveHidMessage): 39 (WebKit::VirtualHidConnection::recieveResponseCode): 40 (WebKit::VirtualHidConnection::parseRequest): 41 * UIProcess/WebAuthentication/Virtual/VirtualHidConnection.h: Copied from Source/WebKit/UIProcess/WebAuthentication/Virtual/VirtualAuthenticatorManager.h. 42 * UIProcess/WebAuthentication/Virtual/VirtualService.h: 43 * UIProcess/WebAuthentication/Virtual/VirtualService.mm: 44 (WebKit::VirtualService::VirtualService): 45 (WebKit::VirtualService::createVirtual): 46 (WebKit::authenticatorInfoForConfig): 47 (WebKit::VirtualService::startDiscoveryInternal): 48 * WebKit.xcodeproj/project.pbxproj: 49 1 50 2022-03-17 Youenn Fablet <youenn@apple.com> 2 51 -
trunk/Source/WebKit/UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm
r290840 r291423 66 66 using namespace fido; 67 67 using namespace WebCore; 68 using namespace WebAuthn; 68 69 using CBOR = cbor::CBORValue; 69 70 … … 71 72 72 73 // See https://www.w3.org/TR/webauthn/#flags. 73 const uint8_t makeCredentialFlags = 0b01000101; // UP, UV and AT are set.74 const uint8_t otherMakeCredentialFlags = 0b01000001; // UP and AT are set.75 const uint8_t getAssertionFlags = 0b00000101; // UP and UV are set.76 const uint8_t otherGetAssertionFlags = 0b00000001; // UP is set.74 const uint8_t makeCredentialFlags = userPresenceFlag | userVerifiedFlag | attestedCredentialDataIncludedFlag; // UP, UV and AT are set. 75 const uint8_t otherMakeCredentialFlags = userPresenceFlag | attestedCredentialDataIncludedFlag; // UP and AT are set. 76 const uint8_t getAssertionFlags = userPresenceFlag | userVerifiedFlag; // UP and UV are set. 77 const uint8_t otherGetAssertionFlags = userPresenceFlag; // UP is set. 77 78 // Credential ID is currently SHA-1 of the corresponding public key. 78 79 const uint16_t credentialIdLength = 20; -
trunk/Source/WebKit/UIProcess/WebAuthentication/Mock/MockHidConnection.cpp
r284009 r291423 45 45 using namespace fido; 46 46 47 namespace MockHidConnectionInternal {48 // https://fidoalliance.org/specs/fido-v2.0-ps-20170927/fido-client-to-authenticator-protocol-v2.0-ps-20170927.html#mandatory-commands49 const size_t CtapChannelIdSize = 4;50 const uint8_t CtapKeepAliveStatusProcessing = 1;51 // https://fidoalliance.org/specs/fido-v2.0-ps-20170927/fido-client-to-authenticator-protocol-v2.0-ps-20170927.html#commands52 const int64_t CtapMakeCredentialRequestOptionsKey = 7;53 const int64_t CtapGetAssertionRequestOptionsKey = 5;54 }55 56 47 MockHidConnection::MockHidConnection(IOHIDDeviceRef device, const MockWebAuthenticationConfiguration& configuration) 57 48 : HidConnection(device) … … 131 122 void MockHidConnection::parseRequest() 132 123 { 133 using namespace MockHidConnectionInternal;134 135 124 ASSERT(m_requestMessage); 136 125 // Set stages. … … 163 152 164 153 if (cmd == CtapRequestCommand::kAuthenticatorMakeCredential) { 165 auto it = requestMap->getMap().find(CBORValue( CtapMakeCredentialRequestOptionsKey)); // Find options.154 auto it = requestMap->getMap().find(CBORValue(kCtapMakeCredentialRequestOptionsKey)); // Find options. 166 155 if (it != requestMap->getMap().end()) { 167 156 auto& optionMap = it->second.getMap(); … … 178 167 179 168 if (cmd == CtapRequestCommand::kAuthenticatorGetAssertion) { 180 auto it = requestMap->getMap().find(CBORValue( CtapGetAssertionRequestOptionsKey)); // Find options.169 auto it = requestMap->getMap().find(CBORValue(kCtapGetAssertionRequestOptionsKey)); // Find options. 181 170 if (it != requestMap->getMap().end()) { 182 171 auto& optionMap = it->second.getMap(); … … 203 192 void MockHidConnection::feedReports() 204 193 { 205 using namespace MockHidConnectionInternal;206 207 194 if (m_subStage == Mock::HidSubStage::Init) { 208 195 Vector<uint8_t> payload; … … 213 200 payload[0]--; 214 201 payload.grow(kHidInitResponseSize); 215 cryptographicallyRandomValues(payload.data() + writePosition, CtapChannelIdSize);202 cryptographicallyRandomValues(payload.data() + writePosition, kCtapChannelIdSize); 216 203 auto channel = kHidBroadcastChannel; 217 204 if (stagesMatch() && m_configuration.hid->error == Mock::HidError::WrongChannelId) … … 257 244 if (m_configuration.hid->keepAlive) { 258 245 m_configuration.hid->keepAlive = false; 259 FidoHidInitPacket initPacket(m_currentChannel, FidoHidDeviceCommand::kKeepAlive, { CtapKeepAliveStatusProcessing }, 1);246 FidoHidInitPacket initPacket(m_currentChannel, FidoHidDeviceCommand::kKeepAlive, { kCtapKeepAliveStatusProcessing }, 1); 260 247 receiveReport(initPacket.getSerializedData()); 261 248 continueFeedReports(); -
trunk/Source/WebKit/UIProcess/WebAuthentication/Virtual/VirtualAuthenticatorManager.cpp
r291321 r291423 34 34 namespace WebKit { 35 35 36 struct VirtualCredential; 37 36 38 VirtualAuthenticatorManager::VirtualAuthenticatorManager() 37 39 : AuthenticatorManager() … … 41 43 String VirtualAuthenticatorManager::createAuthenticator(const VirtualAuthenticatorConfiguration& config) 42 44 { 43 if (config.transport != WebCore::AuthenticatorTransport::Internal )45 if (config.transport != WebCore::AuthenticatorTransport::Internal && config.transport != WebCore::AuthenticatorTransport::Usb) 44 46 UNIMPLEMENTED(); 45 47 auto id = createVersion4UUIDString(); 46 48 m_virtualAuthenticators.set(id, makeUniqueRef<VirtualAuthenticatorConfiguration>(config)); 49 Vector<VirtualCredential> credentials; 50 m_credentialsByAuthenticator.set(id, WTFMove(credentials)); 47 51 48 52 return id; … … 54 58 } 55 59 60 void VirtualAuthenticatorManager::addCredential(const String& authenticatorId, const VirtualCredential& credential) 61 { 62 m_credentialsByAuthenticator.get(authenticatorId).append(credential); 63 } 64 56 65 UniqueRef<AuthenticatorTransportService> VirtualAuthenticatorManager::createService(WebCore::AuthenticatorTransport transport, AuthenticatorTransportService::Observer& observer) const 57 66 { 58 Vector<VirtualAuthenticatorConfiguration> configs; 59 for (auto& config : m_virtualAuthenticators.values()) { 60 if (config.get().transport == transport) 61 configs.append(config.get()); 67 Vector<std::pair<String, VirtualAuthenticatorConfiguration>> configs; 68 for (auto& id : m_virtualAuthenticators.keys()) { 69 auto config = m_virtualAuthenticators.get(id); 70 if (config->transport == transport) 71 configs.append(std::pair { id, *config }); 62 72 } 63 73 return VirtualService::createVirtual(transport, observer, configs); -
trunk/Source/WebKit/UIProcess/WebAuthentication/Virtual/VirtualAuthenticatorManager.h
r291321 r291423 30 30 #include "AuthenticatorManager.h" 31 31 #include "VirtualAuthenticatorConfiguration.h" 32 #include "VirtualCredential.h" 33 #include <wtf/WeakPtr.h> 32 34 33 35 namespace WebKit { 36 struct VirtualCredential; 34 37 35 38 class VirtualAuthenticatorManager final : public AuthenticatorManager { … … 41 44 42 45 bool isVirtual() const final { return true; } 43 void runPanel();44 void selectAssertionResponse(Vector<Ref<WebCore::AuthenticatorAssertionResponse>>&&, WebAuthenticationSource, CompletionHandler<void(WebCore::AuthenticatorAssertionResponse*)>&&);45 void decidePolicyForLocalAuthenticator(CompletionHandler<void(LocalAuthenticatorPolicy)>&&);46 46 47 void addCredential(const String&, const VirtualCredential&); 48 49 protected: 50 void decidePolicyForLocalAuthenticator(CompletionHandler<void(LocalAuthenticatorPolicy)>&&) override; 51 void selectAssertionResponse(Vector<Ref<WebCore::AuthenticatorAssertionResponse>>&&, WebAuthenticationSource, CompletionHandler<void(WebCore::AuthenticatorAssertionResponse*)>&&) override; 52 53 47 54 private: 48 55 UniqueRef<AuthenticatorTransportService> createService(WebCore::AuthenticatorTransport, AuthenticatorTransportService::Observer&) const final; 56 void runPanel() override; 49 57 50 58 HashMap<String, UniqueRef<VirtualAuthenticatorConfiguration>> m_virtualAuthenticators; 59 HashMap<String, Vector<VirtualCredential>> m_credentialsByAuthenticator; 51 60 }; 52 61 -
trunk/Source/WebKit/UIProcess/WebAuthentication/Virtual/VirtualAuthenticatorUtils.h
r291422 r291423 1 1 /* 2 * Copyright (C) 202 1Apple Inc. All rights reserved.2 * Copyright (C) 2022 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 28 28 #if ENABLE(WEB_AUTHN) 29 29 30 #include "AuthenticatorTransportService.h"31 30 #include "VirtualAuthenticatorConfiguration.h" 32 31 33 32 namespace WebKit { 34 33 35 class VirtualService : public AuthenticatorTransportService { 36 public: 37 explicit VirtualService(Observer&, const Vector<VirtualAuthenticatorConfiguration>&); 38 39 static UniqueRef<AuthenticatorTransportService> createVirtual(WebCore::AuthenticatorTransport, Observer&, const Vector<VirtualAuthenticatorConfiguration>& configs); 40 private: 41 void startDiscoveryInternal() final; 42 43 Vector<VirtualAuthenticatorConfiguration> m_configurations; 44 }; 34 uint8_t flagsForConfig(const VirtualAuthenticatorConfiguration&); 35 RetainPtr<SecKeyRef> createPrivateKey(); 36 std::pair<Vector<uint8_t>, Vector<uint8_t>> credentialIdAndCosePubKeyForPrivateKey(RetainPtr<SecKeyRef> privateKey); 37 String base64PrivateKey(RetainPtr<SecKeyRef> privateKey); 45 38 46 39 } // namespace WebKit -
trunk/Source/WebKit/UIProcess/WebAuthentication/Virtual/VirtualCredential.h
r291422 r291423 1 1 /* 2 * Copyright (C) 202 1Apple Inc. All rights reserved.2 * Copyright (C) 2022 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 28 28 #if ENABLE(WEB_AUTHN) 29 29 30 #include "AuthenticatorTransportService.h"31 #include "VirtualAuthenticatorConfiguration.h"30 #include <WebCore/AuthenticatorTransport.h> 31 #include <wtf/text/WTFString.h> 32 32 33 33 namespace WebKit { 34 34 35 class VirtualService : public AuthenticatorTransportService{36 public: 37 explicit VirtualService(Observer&, const Vector<VirtualAuthenticatorConfiguration>&);38 39 static UniqueRef<AuthenticatorTransportService> createVirtual(WebCore::AuthenticatorTransport, Observer&, const Vector<VirtualAuthenticatorConfiguration>& configs);40 private: 41 void startDiscoveryInternal() final;42 43 Vector<VirtualAuthenticatorConfiguration> m_configurations;35 struct VirtualCredential { 36 WTF_MAKE_STRUCT_FAST_ALLOCATED; 37 Vector<uint8_t> credentialId; 38 String rpId; 39 String privateKey; 40 std::optional<Vector<uint8_t>> userHandle; 41 uint64_t signCount; 42 bool isResidentCredential; 43 bool isVerificationRequired; 44 44 }; 45 45 -
trunk/Source/WebKit/UIProcess/WebAuthentication/Virtual/VirtualHidConnection.h
r291422 r291423 1 1 /* 2 * Copyright (C) 202 1Apple Inc. All rights reserved.2 * Copyright (C) 2022 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 28 28 #if ENABLE(WEB_AUTHN) 29 29 30 #include " AuthenticatorTransportService.h"30 #include "HidConnection.h" 31 31 #include "VirtualAuthenticatorConfiguration.h" 32 #include <WebCore/FidoHidMessage.h> 33 #include <wtf/WeakPtr.h> 32 34 33 35 namespace WebKit { 36 struct VirtualAuthenticatorConfiguration; 37 class VirtualAuthenticatorManager; 34 38 35 class Virtual Service : public AuthenticatorTransportService{39 class VirtualHidConnection final : public CanMakeWeakPtr<VirtualHidConnection>, public HidConnection { 36 40 public: 37 explicit Virtual Service(Observer&, const Vector<VirtualAuthenticatorConfiguration>&);41 explicit VirtualHidConnection(const String& authenticatorId, const VirtualAuthenticatorConfiguration&, const WeakPtr<VirtualAuthenticatorManager>&); 38 42 39 static UniqueRef<AuthenticatorTransportService> createVirtual(WebCore::AuthenticatorTransport, Observer&, const Vector<VirtualAuthenticatorConfiguration>& configs);40 43 private: 41 void startDiscoveryInternal() final; 44 void initialize() final; 45 void terminate() final; 46 DataSent sendSync(const Vector<uint8_t>& data) final; 47 void send(Vector<uint8_t>&& data, DataSentCallback&&) final; 48 void assembleRequest(Vector<uint8_t>&&); 49 void parseRequest(); 42 50 43 Vector<VirtualAuthenticatorConfiguration> m_configurations; 51 void receiveHidMessage(fido::FidoHidMessage&&); 52 void recieveResponseCode(fido::CtapDeviceResponseCode); 53 54 WeakPtr<VirtualAuthenticatorManager> m_manager; 55 VirtualAuthenticatorConfiguration m_configuration; 56 std::optional<fido::FidoHidMessage> m_requestMessage; 57 Vector<uint8_t> m_nonce; 58 uint32_t m_currentChannel { fido::kHidBroadcastChannel }; 59 String m_authenticatorId; 44 60 }; 45 46 61 } // namespace WebKit 47 48 #endif // ENABLE(WEB_AUTHN) 62 #endif -
trunk/Source/WebKit/UIProcess/WebAuthentication/Virtual/VirtualService.h
r285267 r291423 30 30 #include "AuthenticatorTransportService.h" 31 31 #include "VirtualAuthenticatorConfiguration.h" 32 #include "VirtualCredential.h" 33 #include <wtf/WeakPtr.h> 32 34 33 35 namespace WebKit { 34 36 37 class VirtualAuthenticatorManager; 38 35 39 class VirtualService : public AuthenticatorTransportService { 36 40 public: 37 explicit VirtualService(Observer&, const Vector<VirtualAuthenticatorConfiguration>&);41 explicit VirtualService(Observer&, Vector<std::pair<String, VirtualAuthenticatorConfiguration>>&); 38 42 39 static UniqueRef<AuthenticatorTransportService> createVirtual(WebCore::AuthenticatorTransport, Observer&, const Vector<VirtualAuthenticatorConfiguration>& configs);43 static UniqueRef<AuthenticatorTransportService> createVirtual(WebCore::AuthenticatorTransport, Observer&, Vector<std::pair<String, VirtualAuthenticatorConfiguration>>&); 40 44 private: 41 45 void startDiscoveryInternal() final; 42 46 43 Vector< VirtualAuthenticatorConfiguration> m_configurations;47 Vector<std::pair<String, VirtualAuthenticatorConfiguration>> m_authenticators; 44 48 }; 45 49 -
trunk/Source/WebKit/UIProcess/WebAuthentication/Virtual/VirtualService.mm
r285267 r291423 29 29 #if ENABLE(WEB_AUTHN) 30 30 31 #import "CtapAuthenticator.h" 32 #import "CtapHidDriver.h" 31 33 #import "LocalAuthenticator.h" 34 #import "VirtualAuthenticatorManager.h" 35 #import "VirtualHidConnection.h" 32 36 #import "VirtualLocalConnection.h" 37 #import <WebCore/FidoConstants.h> 38 #import <WebCore/WebAuthenticationConstants.h> 39 #import <wtf/UniqueRef.h> 33 40 #import <wtf/text/WTFString.h> 34 41 35 42 namespace WebKit { 43 using namespace fido; 44 using namespace WebCore; 36 45 37 VirtualService::VirtualService(Observer& observer, const Vector<VirtualAuthenticatorConfiguration>& configurations)38 : AuthenticatorTransportService(observer), m_ configurations(configurations)46 VirtualService::VirtualService(Observer& observer, Vector<std::pair<String, VirtualAuthenticatorConfiguration>>& authenticators) 47 : AuthenticatorTransportService(observer), m_authenticators(authenticators) 39 48 { 40 49 } 41 50 42 UniqueRef<AuthenticatorTransportService> VirtualService::createVirtual(WebCore::AuthenticatorTransport transport, Observer& observer, const Vector<VirtualAuthenticatorConfiguration>& configs)51 UniqueRef<AuthenticatorTransportService> VirtualService::createVirtual(WebCore::AuthenticatorTransport transport, Observer& observer, Vector<std::pair<String, VirtualAuthenticatorConfiguration>>& authenticators) 43 52 { 44 return makeUniqueRef<VirtualService>(observer, configs); 53 return makeUniqueRef<VirtualService>(observer, authenticators); 54 } 55 56 static AuthenticatorGetInfoResponse authenticatorInfoForConfig(const VirtualAuthenticatorConfiguration& config) 57 { 58 AuthenticatorGetInfoResponse infoResponse({ ProtocolVersion::kCtap }, Vector<uint8_t>(aaguidLength, 0u)); 59 AuthenticatorSupportedOptions options; 60 infoResponse.setOptions(WTFMove(options)); 61 return infoResponse; 45 62 } 46 63 … … 48 65 { 49 66 50 for (auto& config : m_configurations) {67 for (auto& authenticator : m_authenticators) { 51 68 if (!observer()) 52 69 return; 70 auto config = authenticator.second; 71 auto authenticatorId = authenticator.first; 53 72 switch (config.transport) { 73 case WebCore::AuthenticatorTransport::Usb: 74 observer()->authenticatorAdded(CtapAuthenticator::create(WTF::makeUnique<CtapHidDriver>(makeUniqueRef<VirtualHidConnection>(authenticatorId, config, WeakPtr { static_cast<VirtualAuthenticatorManager *>(observer()) })), authenticatorInfoForConfig(config))); 75 break; 54 76 case WebCore::AuthenticatorTransport::Internal: 55 77 observer()->authenticatorAdded(LocalAuthenticator::create(makeUniqueRef<VirtualLocalConnection>(config))); 56 break;78 break; 57 79 default: 58 80 UNIMPLEMENTED(); -
trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj
r291243 r291423 1082 1082 51FAEC3B1B0657680009C4E7 /* AuxiliaryProcessMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51FAEC361B0657310009C4E7 /* AuxiliaryProcessMessageReceiver.cpp */; }; 1083 1083 51FD18B61651FBAD00DBE1CE /* NetworkResourceLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 51FD18B41651FBAD00DBE1CE /* NetworkResourceLoader.h */; }; 1084 5252A51927E048740094BEB9 /* VirtualHidConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 5252A51727E048740094BEB9 /* VirtualHidConnection.h */; }; 1085 5252A51A27E048740094BEB9 /* VirtualHidConnection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5252A51827E048740094BEB9 /* VirtualHidConnection.cpp */; }; 1084 1086 52688AB427D7CE40003577A2 /* _WKResidentKeyRequirement.h in Headers */ = {isa = PBXBuildFile; fileRef = 52688AB327D7CE40003577A2 /* _WKResidentKeyRequirement.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1085 1087 5272D4C91E735F0900EB4290 /* WKProtectionSpaceNS.h in Headers */ = {isa = PBXBuildFile; fileRef = 5272D4C71E735F0900EB4290 /* WKProtectionSpaceNS.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 1094 1096 52D5A1B01C57495A00DE34A3 /* VideoFullscreenManagerProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 52D5A1AA1C57494E00DE34A3 /* VideoFullscreenManagerProxy.h */; }; 1095 1097 52F060E11654318500F3281B /* NetworkContentRuleListManagerMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 52F060DD1654317500F3281B /* NetworkContentRuleListManagerMessageReceiver.cpp */; }; 1098 52F4B46927E1197700FFD129 /* VirtualAuthenticatorUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 52F4B46727E1197700FFD129 /* VirtualAuthenticatorUtils.h */; }; 1099 52F4B46A27E1197700FFD129 /* VirtualAuthenticatorUtils.mm in Sources */ = {isa = PBXBuildFile; fileRef = 52F4B46827E1197700FFD129 /* VirtualAuthenticatorUtils.mm */; }; 1100 52F4B46D27E125A800FFD129 /* VirtualCredential.h in Headers */ = {isa = PBXBuildFile; fileRef = 52F4B46B27E125A800FFD129 /* VirtualCredential.h */; }; 1096 1101 532159551DBAE7290054AA3C /* NetworkSessionCocoa.h in Headers */ = {isa = PBXBuildFile; fileRef = 532159501DBAE6D70054AA3C /* NetworkSessionCocoa.h */; }; 1097 1102 532159561DBAE72D0054AA3C /* NetworkDataTaskCocoa.h in Headers */ = {isa = PBXBuildFile; fileRef = 5321594F1DBAE6D70054AA3C /* NetworkDataTaskCocoa.h */; }; … … 4645 4650 51FD18B31651FBAD00DBE1CE /* NetworkResourceLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NetworkResourceLoader.cpp; sourceTree = "<group>"; }; 4646 4651 51FD18B41651FBAD00DBE1CE /* NetworkResourceLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkResourceLoader.h; sourceTree = "<group>"; }; 4652 5252A51727E048740094BEB9 /* VirtualHidConnection.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VirtualHidConnection.h; sourceTree = "<group>"; }; 4653 5252A51827E048740094BEB9 /* VirtualHidConnection.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = VirtualHidConnection.cpp; sourceTree = "<group>"; }; 4647 4654 52688AB327D7CE40003577A2 /* _WKResidentKeyRequirement.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = _WKResidentKeyRequirement.h; path = UIProcess/API/Cocoa/_WKResidentKeyRequirement.h; sourceTree = "<group>"; }; 4648 4655 5272D4C71E735F0900EB4290 /* WKProtectionSpaceNS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WKProtectionSpaceNS.h; path = mac/WKProtectionSpaceNS.h; sourceTree = "<group>"; }; … … 4664 4671 52EB68CC279E2145005C98D9 /* ARKitSoftLink.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = ARKitSoftLink.mm; sourceTree = "<group>"; }; 4665 4672 52F060DD1654317500F3281B /* NetworkContentRuleListManagerMessageReceiver.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = NetworkContentRuleListManagerMessageReceiver.cpp; path = DerivedSources/WebKit/NetworkContentRuleListManagerMessageReceiver.cpp; sourceTree = BUILT_PRODUCTS_DIR; }; 4673 52F4B46727E1197700FFD129 /* VirtualAuthenticatorUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VirtualAuthenticatorUtils.h; sourceTree = "<group>"; }; 4674 52F4B46827E1197700FFD129 /* VirtualAuthenticatorUtils.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = VirtualAuthenticatorUtils.mm; sourceTree = "<group>"; }; 4675 52F4B46B27E125A800FFD129 /* VirtualCredential.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VirtualCredential.h; sourceTree = "<group>"; }; 4666 4676 5315876B2076B713004BF9F3 /* NetworkActivityTrackerCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = NetworkActivityTrackerCocoa.mm; sourceTree = "<group>"; }; 4667 4677 5321594F1DBAE6D70054AA3C /* NetworkDataTaskCocoa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkDataTaskCocoa.h; sourceTree = "<group>"; }; … … 9859 9869 52CDC5BF2731DA0C00A3E3EB /* VirtualAuthenticatorManager.cpp */, 9860 9870 52CDC5C32731DA0C00A3E3EB /* VirtualAuthenticatorManager.h */, 9871 52F4B46727E1197700FFD129 /* VirtualAuthenticatorUtils.h */, 9872 52F4B46827E1197700FFD129 /* VirtualAuthenticatorUtils.mm */, 9873 52F4B46B27E125A800FFD129 /* VirtualCredential.h */, 9874 5252A51827E048740094BEB9 /* VirtualHidConnection.cpp */, 9875 5252A51727E048740094BEB9 /* VirtualHidConnection.h */, 9861 9876 52CDC5C02731DA0C00A3E3EB /* VirtualLocalConnection.h */, 9862 9877 52CDC5C22731DA0C00A3E3EB /* VirtualLocalConnection.mm */, … … 13657 13672 52CDC5C42731DA0D00A3E3EB /* VirtualAuthenticatorConfiguration.h in Headers */, 13658 13673 52CDC5CA2731DA0D00A3E3EB /* VirtualAuthenticatorManager.h in Headers */, 13674 52F4B46927E1197700FFD129 /* VirtualAuthenticatorUtils.h in Headers */, 13675 52F4B46D27E125A800FFD129 /* VirtualCredential.h in Headers */, 13676 5252A51927E048740094BEB9 /* VirtualHidConnection.h in Headers */, 13659 13677 52CDC5C72731DA0D00A3E3EB /* VirtualLocalConnection.h in Headers */, 13660 13678 52CDC5C82731DA0D00A3E3EB /* VirtualService.h in Headers */, … … 16153 16171 2684055218B86ED60022C38B /* ViewUpdateDispatcherMessageReceiver.cpp in Sources */, 16154 16172 52CDC5C62731DA0D00A3E3EB /* VirtualAuthenticatorManager.cpp in Sources */, 16173 52F4B46A27E1197700FFD129 /* VirtualAuthenticatorUtils.mm in Sources */, 16174 5252A51A27E048740094BEB9 /* VirtualHidConnection.cpp in Sources */, 16155 16175 52CDC5C92731DA0D00A3E3EB /* VirtualLocalConnection.mm in Sources */, 16156 16176 52CDC5C52731DA0D00A3E3EB /* VirtualService.mm in Sources */,
Note: See TracChangeset
for help on using the changeset viewer.