From 55d39afcdf88aa401b312ee315f7d13e738468dc Mon Sep 17 00:00:00 2001 From: Sydney Morton Date: Mon, 5 Dec 2022 12:33:13 -0500 Subject: [PATCH 01/38] Add submodule --- .gitignore | 1 + .gitmodules | 3 +++ 2 files changed, 4 insertions(+) create mode 100644 .gitmodules diff --git a/.gitignore b/.gitignore index 330d1674..9b2c072b 100644 --- a/.gitignore +++ b/.gitignore @@ -88,3 +88,4 @@ fastlane/test_output # https://github.com/johnno1962/injectionforxcode iOSInjectionProject/ +.DS_Store \ No newline at end of file diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..07257cee --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "Library/Submodules/VerifiableCredential-SDK-iOS"] + path = Library/Submodules/VerifiableCredential-SDK-iOS + url = https://github.com/microsoft/VerifiableCredential-SDK-iOS From 26d6cdae439c5eadc9a458c3165d2ae778f23147 Mon Sep 17 00:00:00 2001 From: Sydney Morton Date: Mon, 5 Dec 2022 15:36:41 -0500 Subject: [PATCH 02/38] Add git submodule for VC SDK --- .gitmodules | 4 +- .../Submodules/VerifiableCredential-SDK-iOS | 1 + .../WalletLibrary.xcodeproj/project.pbxproj | 2472 +++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcschemes/WalletLibrary.xcscheme | 78 + WalletLibrary/WalletLibrary/WalletLibrary.h | 16 + 7 files changed, 2584 insertions(+), 2 deletions(-) create mode 160000 WalletLibrary/Submodules/VerifiableCredential-SDK-iOS create mode 100644 WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj create mode 100644 WalletLibrary/WalletLibrary.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 WalletLibrary/WalletLibrary.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 WalletLibrary/WalletLibrary.xcodeproj/xcshareddata/xcschemes/WalletLibrary.xcscheme create mode 100644 WalletLibrary/WalletLibrary/WalletLibrary.h diff --git a/.gitmodules b/.gitmodules index 07257cee..d02827ca 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ -[submodule "Library/Submodules/VerifiableCredential-SDK-iOS"] - path = Library/Submodules/VerifiableCredential-SDK-iOS +[submodule "WalletLibrary/Submodules/VerifiableCredential-SDK-iOS"] + path = WalletLibrary/Submodules/VerifiableCredential-SDK-iOS url = https://github.com/microsoft/VerifiableCredential-SDK-iOS diff --git a/WalletLibrary/Submodules/VerifiableCredential-SDK-iOS b/WalletLibrary/Submodules/VerifiableCredential-SDK-iOS new file mode 160000 index 00000000..7e25576f --- /dev/null +++ b/WalletLibrary/Submodules/VerifiableCredential-SDK-iOS @@ -0,0 +1 @@ +Subproject commit 7e25576f3d3d1f881eedf697fcab4af7c95e5f08 diff --git a/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj b/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj new file mode 100644 index 00000000..94587898 --- /dev/null +++ b/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj @@ -0,0 +1,2472 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 56; + objects = { + +/* Begin PBXBuildFile section */ + 552E509B293E6AB200868F47 /* WalletLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 552E5092293E6AB200868F47 /* WalletLibrary.framework */; }; + 552E50A0293E6AB200868F47 /* VerifiedIdFlowTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 552E509F293E6AB200868F47 /* VerifiedIdFlowTests.swift */; }; + 552E50A1293E6AB200868F47 /* WalletLibrary.h in Headers */ = {isa = PBXBuildFile; fileRef = 552E5095293E6AB200868F47 /* WalletLibrary.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 552E52CB293E71D700868F47 /* VCEntities.h in Headers */ = {isa = PBXBuildFile; fileRef = 552E50C2293E71D600868F47 /* VCEntities.h */; }; + 552E5371293E71D800868F47 /* VCUseCase.h in Headers */ = {isa = PBXBuildFile; fileRef = 552E5193293E71D700868F47 /* VCUseCase.h */; }; + 552E539E293E71D800868F47 /* VCToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 552E51CE293E71D700868F47 /* VCToken.h */; }; + 552E53E4293E71D800868F47 /* VCCrypto.h in Headers */ = {isa = PBXBuildFile; fileRef = 552E5227293E71D700868F47 /* VCCrypto.h */; }; + 552E542E293E71D800868F47 /* networking.h in Headers */ = {isa = PBXBuildFile; fileRef = 552E5292293E71D700868F47 /* networking.h */; }; + 552E5432293E71D800868F47 /* VCSamples.h in Headers */ = {isa = PBXBuildFile; fileRef = 552E529B293E71D700868F47 /* VCSamples.h */; }; + 552E544E293E736F00868F47 /* VCCrypto.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 552E52A5293E71D700868F47 /* VCCrypto.framework */; platformFilter = ios; }; + 552E5450293E737300868F47 /* VCEntities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 552E52AD293E71D700868F47 /* VCEntities.framework */; platformFilter = ios; }; + 552E5452293E737900868F47 /* VCNetworking.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 552E52B3293E71D700868F47 /* VCNetworking.framework */; platformFilter = ios; }; + 552E5454293E737F00868F47 /* VCServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 552E52BD293E71D700868F47 /* VCServices.framework */; platformFilter = ios; }; + 552E5456293E738200868F47 /* VCToken.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 552E52C5293E71D700868F47 /* VCToken.framework */; platformFilter = ios; }; + 552E546B293E759300868F47 /* VerifiedIdFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 552E50AB293E6F5500868F47 /* VerifiedIdFlow.swift */; }; + 55E33684293E7B6600CD2ED7 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55E33679293E7B5F00CD2ED7 /* PromiseKit.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 552E509C293E6AB200868F47 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 552E5089293E6AB100868F47 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 552E5091293E6AB200868F47; + remoteInfo = WalletLibrary; + }; + 552E52A4293E71D700868F47 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 552E5229293E71D700868F47 /* VCCrypto.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 92CDE7AA24DC78DD00F95B5D; + remoteInfo = VCCrypto; + }; + 552E52A6293E71D700868F47 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 552E5229293E71D700868F47 /* VCCrypto.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 92CDE7B324DC78DD00F95B5D; + remoteInfo = VCCryptoTests; + }; + 552E52A8293E71D700868F47 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 552E5229293E71D700868F47 /* VCCrypto.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 92CDE7ED24DE1C6100F95B5D; + remoteInfo = VCCryptoTestApp; + }; + 552E52AC293E71D700868F47 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 552E50BD293E71D600868F47 /* VCEntities.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 5557572E251BC575009979AB; + remoteInfo = VCEntities; + }; + 552E52AE293E71D700868F47 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 552E50BD293E71D600868F47 /* VCEntities.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 55575737251BC575009979AB; + remoteInfo = VCEntitiesTests; + }; + 552E52B2293E71D700868F47 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 552E5237293E71D700868F47 /* VCNetworking.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 55D7BFEA24C4CBBD0090F495; + remoteInfo = VCNetworking; + }; + 552E52B4293E71D700868F47 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 552E5237293E71D700868F47 /* VCNetworking.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 55D7BFF324C4CBBD0090F495; + remoteInfo = VCNetworkingTests; + }; + 552E52B7293E71D700868F47 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 552E5295293E71D700868F47 /* VCSamples.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 554E0BAC261E0D8D006A4403; + remoteInfo = VCSamples; + }; + 552E52BC293E71D700868F47 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 552E51AE293E71D700868F47 /* VCServices.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 550F1E3525101758009AF467; + remoteInfo = VCServices; + }; + 552E52BE293E71D700868F47 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 552E51AE293E71D700868F47 /* VCServices.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 550F1E3E25101759009AF467; + remoteInfo = VCServicesTests; + }; + 552E52C0293E71D700868F47 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 552E51AE293E71D700868F47 /* VCServices.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 555BDAF52530E5E2001E7A18; + remoteInfo = VCServicesTestApp; + }; + 552E52C4293E71D700868F47 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 552E51D8293E71D700868F47 /* VCToken.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 55ADE25724F5406000D9990E; + remoteInfo = VCToken; + }; + 552E52C6293E71D700868F47 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 552E51D8293E71D700868F47 /* VCToken.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 55ADE26024F5406000D9990E; + remoteInfo = VCTokenTests; + }; + 55E3366B293E7B5000CD2ED7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 55E33666293E7B5000CD2ED7 /* PMKFoundation.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 63C7FFA71D5BEE09003BAE60; + remoteInfo = PMKFoundation; + }; + 55E3366D293E7B5000CD2ED7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 55E33666293E7B5000CD2ED7 /* PMKFoundation.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 63C7FFF21D5C020D003BAE60; + remoteInfo = PMKNSTests; + }; + 55E33678293E7B5F00CD2ED7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 55E3366F293E7B5F00CD2ED7 /* PromiseKit.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 63B0AC571D595E1B00FA21D9; + remoteInfo = PromiseKit; + }; + 55E3367A293E7B5F00CD2ED7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 55E3366F293E7B5F00CD2ED7 /* PromiseKit.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 631751A81D59766500A9DDDC; + remoteInfo = "PMKA+Tests"; + }; + 55E3367C293E7B5F00CD2ED7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 55E3366F293E7B5F00CD2ED7 /* PromiseKit.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 6314113C1D59795700E24B9E; + remoteInfo = PMKBridgeTests; + }; + 55E3367E293E7B5F00CD2ED7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 55E3366F293E7B5F00CD2ED7 /* PromiseKit.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 630019221D596292003B4E30; + remoteInfo = PMKCoreTests; + }; + 55E33680293E7B5F00CD2ED7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 55E3366F293E7B5F00CD2ED7 /* PromiseKit.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 633027EA203CC0060037E136; + remoteInfo = PMKDeprecatedTests; + }; + 55E33682293E7B5F00CD2ED7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 55E3366F293E7B5F00CD2ED7 /* PromiseKit.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = C0244E622047A6CB00ACB4AC; + remoteInfo = "PMKJSA+Tests"; + }; + 55E33689293E7B7E00CD2ED7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 55E33685293E7B7D00CD2ED7 /* Secp256k1.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 92B9684D25240F2100F64AB0; + remoteInfo = Secp256k1; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 552E5092293E6AB200868F47 /* WalletLibrary.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = WalletLibrary.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 552E5095293E6AB200868F47 /* WalletLibrary.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WalletLibrary.h; sourceTree = ""; }; + 552E509A293E6AB200868F47 /* WalletLibraryTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WalletLibraryTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 552E509F293E6AB200868F47 /* VerifiedIdFlowTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VerifiedIdFlowTests.swift; sourceTree = ""; }; + 552E50AB293E6F5500868F47 /* VerifiedIdFlow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VerifiedIdFlow.swift; sourceTree = ""; }; + 552E50BD293E71D600868F47 /* VCEntities.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = VCEntities.xcodeproj; sourceTree = ""; }; + 552E50C1293E71D600868F47 /* ResponseMappings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ResponseMappings.swift; sourceTree = ""; }; + 552E50C2293E71D600868F47 /* VCEntities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VCEntities.h; sourceTree = ""; }; + 552E50C5293E71D600868F47 /* ExchangeRequestClaims.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExchangeRequestClaims.swift; sourceTree = ""; }; + 552E50C6293E71D600868F47 /* ExchangeRequestContainer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExchangeRequestContainer.swift; sourceTree = ""; }; + 552E50C8293E71D600868F47 /* VerifiablePresentationDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VerifiablePresentationDescriptor.swift; sourceTree = ""; }; + 552E50C9293E71D600868F47 /* VerifiablePresentationClaims.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VerifiablePresentationClaims.swift; sourceTree = ""; }; + 552E50CB293E71D600868F47 /* Multihash.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Multihash.swift; sourceTree = ""; }; + 552E50CC293E71D600868F47 /* VCEntitiesConstants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VCEntitiesConstants.swift; sourceTree = ""; }; + 552E50CD293E71D600868F47 /* VCSDKConfiguration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VCSDKConfiguration.swift; sourceTree = ""; }; + 552E50CE293E71D600868F47 /* CorrelationHeader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CorrelationHeader.swift; sourceTree = ""; }; + 552E50CF293E71D600868F47 /* JSONCodingKeys.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JSONCodingKeys.swift; sourceTree = ""; }; + 552E50D0293E71D600868F47 /* RequestedVerifiableCredentialMapping.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RequestedVerifiableCredentialMapping.swift; sourceTree = ""; }; + 552E50D1293E71D600868F47 /* ResponseContaining.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ResponseContaining.swift; sourceTree = ""; }; + 552E50D3293E71D600868F47 /* DomainLinkageCredentialSubject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DomainLinkageCredentialSubject.swift; sourceTree = ""; }; + 552E50D4293E71D600868F47 /* DomainLinkageCredential.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DomainLinkageCredential.swift; sourceTree = ""; }; + 552E50D5293E71D600868F47 /* DomainLinkageCredentialContent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DomainLinkageCredentialContent.swift; sourceTree = ""; }; + 552E50D6293E71D600868F47 /* LinkedDomainResult.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LinkedDomainResult.swift; sourceTree = ""; }; + 552E50D7293E71D600868F47 /* WellKnownConfigDocument.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WellKnownConfigDocument.swift; sourceTree = ""; }; + 552E50D9293E71D600868F47 /* DiscoveryServiceResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DiscoveryServiceResponse.swift; sourceTree = ""; }; + 552E50DB293E71D600868F47 /* OIDCClaims.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OIDCClaims.swift; sourceTree = ""; }; + 552E50DC293E71D600868F47 /* AllowedAlgorithms.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AllowedAlgorithms.swift; sourceTree = ""; }; + 552E50DD293E71D600868F47 /* PresentationRequestClaims.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationRequestClaims.swift; sourceTree = ""; }; + 552E50DE293E71D600868F47 /* RequestedVPToken.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RequestedVPToken.swift; sourceTree = ""; }; + 552E50DF293E71D600868F47 /* RegistrationClaims.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RegistrationClaims.swift; sourceTree = ""; }; + 552E50E0293E71D600868F47 /* SupportedVerifiablePresentationFormats.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SupportedVerifiablePresentationFormats.swift; sourceTree = ""; }; + 552E50E1293E71D600868F47 /* RequestedClaims.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RequestedClaims.swift; sourceTree = ""; }; + 552E50E3293E71D600868F47 /* PresentationResponseFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationResponseFormatter.swift; sourceTree = ""; }; + 552E50E4293E71D600868F47 /* TokenTimeConstraints.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TokenTimeConstraints.swift; sourceTree = ""; }; + 552E50E5293E71D600868F47 /* ExchangeRequestFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExchangeRequestFormatter.swift; sourceTree = ""; }; + 552E50E6293E71D600868F47 /* FormatterError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormatterError.swift; sourceTree = ""; }; + 552E50E7293E71D600868F47 /* JwsHeaderFormatter .swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "JwsHeaderFormatter .swift"; sourceTree = ""; }; + 552E50E8293E71D600868F47 /* IssuanceVPFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceVPFormatter.swift; sourceTree = ""; }; + 552E50E9293E71D600868F47 /* IdentifierFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IdentifierFormatter.swift; sourceTree = ""; }; + 552E50EA293E71D600868F47 /* IssuanceResponseFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceResponseFormatter.swift; sourceTree = ""; }; + 552E50EB293E71D600868F47 /* VerifiablePresentationFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VerifiablePresentationFormatter.swift; sourceTree = ""; }; + 552E50ED293E71D600868F47 /* IdentifierCreator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IdentifierCreator.swift; sourceTree = ""; }; + 552E50EE293E71D600868F47 /* AliasComputer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AliasComputer.swift; sourceTree = ""; }; + 552E50F0293E71D600868F47 /* IdentifierDocumentPublicKey.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IdentifierDocumentPublicKey.swift; sourceTree = ""; }; + 552E50F1293E71D600868F47 /* IdentifierDocumentServiceEndpoint.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IdentifierDocumentServiceEndpoint.swift; sourceTree = ""; }; + 552E50F3293E71D600868F47 /* IONDocumentPatch.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IONDocumentPatch.swift; sourceTree = ""; }; + 552E50F4293E71D600868F47 /* IONDocumentInitialState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IONDocumentInitialState.swift; sourceTree = ""; }; + 552E50F5293E71D600868F47 /* IONDocumentDeltaDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IONDocumentDeltaDescriptor.swift; sourceTree = ""; }; + 552E50F6293E71D600868F47 /* IONDocumentModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IONDocumentModel.swift; sourceTree = ""; }; + 552E50F7293E71D600868F47 /* IdentifierDocumentSuffixDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IdentifierDocumentSuffixDescriptor.swift; sourceTree = ""; }; + 552E50F8293E71D600868F47 /* IdentifierDocument.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IdentifierDocument.swift; sourceTree = ""; }; + 552E50F9293E71D600868F47 /* IdentifierDocumentServiceEndpointDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IdentifierDocumentServiceEndpointDescriptor.swift; sourceTree = ""; }; + 552E50FA293E71D600868F47 /* KeyContainer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyContainer.swift; sourceTree = ""; }; + 552E50FB293E71D600868F47 /* Identifier.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Identifier.swift; sourceTree = ""; }; + 552E50FE293E71D600868F47 /* AttestationsDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AttestationsDescriptor.swift; sourceTree = ""; }; + 552E50FF293E71D600868F47 /* PresentationDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationDescriptor.swift; sourceTree = ""; }; + 552E5100293E71D600868F47 /* ConsentDisplayDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConsentDisplayDescriptor.swift; sourceTree = ""; }; + 552E5101293E71D600868F47 /* LogoDisplayDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LogoDisplayDescriptor.swift; sourceTree = ""; }; + 552E5102293E71D600868F47 /* DisplayDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DisplayDescriptor.swift; sourceTree = ""; }; + 552E5103293E71D600868F47 /* ClaimDisplayDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ClaimDisplayDescriptor.swift; sourceTree = ""; }; + 552E5104293E71D600868F47 /* AccessTokenDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccessTokenDescriptor.swift; sourceTree = ""; }; + 552E5105293E71D600868F47 /* IssuerDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuerDescriptor.swift; sourceTree = ""; }; + 552E5106293E71D600868F47 /* ContractInputDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContractInputDescriptor.swift; sourceTree = ""; }; + 552E5107293E71D600868F47 /* Contract.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Contract.swift; sourceTree = ""; }; + 552E5108293E71D600868F47 /* CardDisplayDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CardDisplayDescriptor.swift; sourceTree = ""; }; + 552E5109293E71D600868F47 /* SelfIssuedClaimsDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelfIssuedClaimsDescriptor.swift; sourceTree = ""; }; + 552E510A293E71D600868F47 /* ClaimDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ClaimDescriptor.swift; sourceTree = ""; }; + 552E510B293E71D600868F47 /* IdTokenDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IdTokenDescriptor.swift; sourceTree = ""; }; + 552E510C293E71D600868F47 /* IssuanceCompletionResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceCompletionResponse.swift; sourceTree = ""; }; + 552E510D293E71D600868F47 /* IssuanceResponseContainer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceResponseContainer.swift; sourceTree = ""; }; + 552E510E293E71D600868F47 /* IssuanceRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceRequest.swift; sourceTree = ""; }; + 552E510F293E71D600868F47 /* AttestationResponseDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AttestationResponseDescriptor.swift; sourceTree = ""; }; + 552E5110293E71D600868F47 /* IssuanceServiceResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceServiceResponse.swift; sourceTree = ""; }; + 552E5111293E71D600868F47 /* ContractServiceResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContractServiceResponse.swift; sourceTree = ""; }; + 552E5112293E71D600868F47 /* IssuancePin.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuancePin.swift; sourceTree = ""; }; + 552E5114293E71D600868F47 /* PinClaims.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PinClaims.swift; sourceTree = ""; }; + 552E5115293E71D600868F47 /* IssuanceResponseClaims.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceResponseClaims.swift; sourceTree = ""; }; + 552E5117293E71D600868F47 /* ServiceDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ServiceDescriptor.swift; sourceTree = ""; }; + 552E5118293E71D600868F47 /* VerifiableCredentialDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VerifiableCredentialDescriptor.swift; sourceTree = ""; }; + 552E5119293E71D600868F47 /* VCClaims.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VCClaims.swift; sourceTree = ""; }; + 552E511B293E71D600868F47 /* PresentationRequestValidator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationRequestValidator.swift; sourceTree = ""; }; + 552E511C293E71D600868F47 /* DomainLinkageCredentialValidator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DomainLinkageCredentialValidator.swift; sourceTree = ""; }; + 552E511D293E71D600868F47 /* IssuanceRequestValidator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceRequestValidator.swift; sourceTree = ""; }; + 552E511F293E71D600868F47 /* UnprotectedBackup.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UnprotectedBackup.swift; sourceTree = ""; }; + 552E5121293E71D600868F47 /* ProtectedBackupData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProtectedBackupData.swift; sourceTree = ""; }; + 552E5123293E71D600868F47 /* Microsoft2020IdentifierBackup.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Microsoft2020IdentifierBackup.swift; sourceTree = ""; }; + 552E5124293E71D600868F47 /* RawIdentity.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RawIdentity.swift; sourceTree = ""; }; + 552E5125293E71D600868F47 /* VcMetadata.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VcMetadata.swift; sourceTree = ""; }; + 552E5126293E71D600868F47 /* Microsoft2020UnprotectedBackup.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Microsoft2020UnprotectedBackup.swift; sourceTree = ""; }; + 552E5127293E71D600868F47 /* WalletMetadata.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletMetadata.swift; sourceTree = ""; }; + 552E5128293E71D600868F47 /* UnprotectedBackupData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UnprotectedBackupData.swift; sourceTree = ""; }; + 552E512A293E71D600868F47 /* BackupProtectionMethod.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BackupProtectionMethod.swift; sourceTree = ""; }; + 552E512C293E71D600868F47 /* JwePasswordProtectedBackupData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JwePasswordProtectedBackupData.swift; sourceTree = ""; }; + 552E512D293E71D600868F47 /* JwePasswordProtectionMethod.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JwePasswordProtectionMethod.swift; sourceTree = ""; }; + 552E5130293E71D600868F47 /* IssuerIdToken.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuerIdToken.swift; sourceTree = ""; }; + 552E5131293E71D600868F47 /* PinDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PinDescriptor.swift; sourceTree = ""; }; + 552E5132293E71D600868F47 /* IssuerIdTokenClaims.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuerIdTokenClaims.swift; sourceTree = ""; }; + 552E5135293E71D600868F47 /* VPTokenResponseDescription.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VPTokenResponseDescription.swift; sourceTree = ""; }; + 552E5136293E71D600868F47 /* PresentationSubmission.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationSubmission.swift; sourceTree = ""; }; + 552E5137293E71D600868F47 /* NestedInputDescriptorMapping.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NestedInputDescriptorMapping.swift; sourceTree = ""; }; + 552E5138293E71D600868F47 /* InputDescriptorMapping.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InputDescriptorMapping.swift; sourceTree = ""; }; + 552E513A293E71D600868F47 /* PresentationInputDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationInputDescriptor.swift; sourceTree = ""; }; + 552E513B293E71D600868F47 /* PresentationExchangeField.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationExchangeField.swift; sourceTree = ""; }; + 552E513C293E71D600868F47 /* PresentationExchangeFilter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationExchangeFilter.swift; sourceTree = ""; }; + 552E513D293E71D600868F47 /* InputDescriptorSchema.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InputDescriptorSchema.swift; sourceTree = ""; }; + 552E513E293E71D600868F47 /* PresentationExchangeConstraints.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationExchangeConstraints.swift; sourceTree = ""; }; + 552E513F293E71D600868F47 /* PresentationDefinition.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationDefinition.swift; sourceTree = ""; }; + 552E5140293E71D600868F47 /* IssuanceMetadata.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceMetadata.swift; sourceTree = ""; }; + 552E5141293E71D600868F47 /* RequestedVerifiableCredentialMapping.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RequestedVerifiableCredentialMapping.swift; sourceTree = ""; }; + 552E5142293E71D600868F47 /* PresentationRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationRequest.swift; sourceTree = ""; }; + 552E5143293E71D600868F47 /* PresentationResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationResponse.swift; sourceTree = ""; }; + 552E5144293E71D600868F47 /* PresentationResponseClaims.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationResponseClaims.swift; sourceTree = ""; }; + 552E5145293E71D600868F47 /* PresentationResponseContainer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationResponseContainer.swift; sourceTree = ""; }; + 552E5148293E71D600868F47 /* NestedInputDescriptorMapping.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NestedInputDescriptorMapping.swift; sourceTree = ""; }; + 552E5149293E71D600868F47 /* InputDescriptorMapping.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InputDescriptorMapping.swift; sourceTree = ""; }; + 552E514A293E71D600868F47 /* PresentationRequestClaims.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationRequestClaims.swift; sourceTree = ""; }; + 552E514C293E71D600868F47 /* VCLogConsumer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VCLogConsumer.swift; sourceTree = ""; }; + 552E514D293E71D600868F47 /* MeasureTime.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MeasureTime.swift; sourceTree = ""; }; + 552E514E293E71D600868F47 /* VCSDKLog.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VCSDKLog.swift; sourceTree = ""; }; + 552E514F293E71D600868F47 /* VCTraceLevel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VCTraceLevel.swift; sourceTree = ""; }; + 552E5150293E71D600868F47 /* DefaultLogConsumer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DefaultLogConsumer.swift; sourceTree = ""; }; + 552E5151293E71D600868F47 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 552E5154293E71D600868F47 /* MockTokenVerifier.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockTokenVerifier.swift; sourceTree = ""; }; + 552E5155293E71D600868F47 /* MockCryptoSecret.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockCryptoSecret.swift; sourceTree = ""; }; + 552E5156293E71D600868F47 /* MockOIDCClaims.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockOIDCClaims.swift; sourceTree = ""; }; + 552E5157293E71D600868F47 /* MockTokenSigner.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockTokenSigner.swift; sourceTree = ""; }; + 552E5158293E71D600868F47 /* TestData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestData.swift; sourceTree = ""; }; + 552E5159293E71D600868F47 /* MockCryptoOperations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockCryptoOperations.swift; sourceTree = ""; }; + 552E515A293E71D600868F47 /* SecretStoreMock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecretStoreMock.swift; sourceTree = ""; }; + 552E515B293E71D600868F47 /* MockCodableObject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockCodableObject.swift; sourceTree = ""; }; + 552E515C293E71D600868F47 /* MockIdentifierFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockIdentifierFormatter.swift; sourceTree = ""; }; + 552E515E293E71D600868F47 /* ExchangeRequestContainerTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExchangeRequestContainerTests.swift; sourceTree = ""; }; + 552E5160293E71D600868F47 /* JSONCodingKeysTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JSONCodingKeysTests.swift; sourceTree = ""; }; + 552E5161293E71D600868F47 /* MultihashTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MultihashTests.swift; sourceTree = ""; }; + 552E5163293E71D600868F47 /* IssuanceResponseFormatterTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceResponseFormatterTests.swift; sourceTree = ""; }; + 552E5164293E71D600868F47 /* ExchangeRequestFormatterTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExchangeRequestFormatterTests.swift; sourceTree = ""; }; + 552E5165293E71D600868F47 /* IdentifierFormatterTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IdentifierFormatterTests.swift; sourceTree = ""; }; + 552E5166293E71D600868F47 /* PresentationResponseFormatterTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationResponseFormatterTests.swift; sourceTree = ""; }; + 552E5168293E71D600868F47 /* IdentifierCreatorTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IdentifierCreatorTests.swift; sourceTree = ""; }; + 552E516A293E71D600868F47 /* IssuanceServiceResponseTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceServiceResponseTests.swift; sourceTree = ""; }; + 552E516B293E71D600868F47 /* IssuanceResponseClaimsTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceResponseClaimsTests.swift; sourceTree = ""; }; + 552E516C293E71D600868F47 /* IssuancePinTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuancePinTests.swift; sourceTree = ""; }; + 552E516E293E71D600868F47 /* VerifiableCredentialTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VerifiableCredentialTests.swift; sourceTree = ""; }; + 552E5170293E71D600868F47 /* DomainLinkageCredentialValidatorTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DomainLinkageCredentialValidatorTests.swift; sourceTree = ""; }; + 552E5171293E71D600868F47 /* PresentationRequestValidatorTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationRequestValidatorTests.swift; sourceTree = ""; }; + 552E5172293E71D600868F47 /* OIDCClaimsTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OIDCClaimsTests.swift; sourceTree = ""; }; + 552E5173293E71D600868F47 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 552E5177293E71D700868F47 /* MockIssuanceRequestValidator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockIssuanceRequestValidator.swift; sourceTree = ""; }; + 552E5178293E71D700868F47 /* MockTokenSigner.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockTokenSigner.swift; sourceTree = ""; }; + 552E5179293E71D700868F47 /* MockExchangeApiCalls.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockExchangeApiCalls.swift; sourceTree = ""; }; + 552E517A293E71D700868F47 /* MockIssuanceApiCalls.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockIssuanceApiCalls.swift; sourceTree = ""; }; + 552E517B293E71D700868F47 /* TestData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestData.swift; sourceTree = ""; }; + 552E517C293E71D700868F47 /* MockIssuanceResponseFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockIssuanceResponseFormatter.swift; sourceTree = ""; }; + 552E517D293E71D700868F47 /* MockVCCryptoSecret.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockVCCryptoSecret.swift; sourceTree = ""; }; + 552E517E293E71D700868F47 /* MockVCSDKConfiguration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockVCSDKConfiguration.swift; sourceTree = ""; }; + 552E517F293E71D700868F47 /* MockPresentationApiCalls.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockPresentationApiCalls.swift; sourceTree = ""; }; + 552E5180293E71D700868F47 /* MockPresentationRequestValidator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockPresentationRequestValidator.swift; sourceTree = ""; }; + 552E5181293E71D700868F47 /* MockExchangeRequestFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockExchangeRequestFormatter.swift; sourceTree = ""; }; + 552E5182293E71D700868F47 /* MockDiscoveryApiCalls.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockDiscoveryApiCalls.swift; sourceTree = ""; }; + 552E5183293E71D700868F47 /* MockWellKnownConfigDocumentApiCalls.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockWellKnownConfigDocumentApiCalls.swift; sourceTree = ""; }; + 552E5184293E71D700868F47 /* SecretStoreMock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecretStoreMock.swift; sourceTree = ""; }; + 552E5185293E71D700868F47 /* MockDomainLinkageCredentialValidator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockDomainLinkageCredentialValidator.swift; sourceTree = ""; }; + 552E5186293E71D700868F47 /* MockPresentationResponseFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockPresentationResponseFormatter.swift; sourceTree = ""; }; + 552E5187293E71D700868F47 /* IssuanceServiceTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceServiceTests.swift; sourceTree = ""; }; + 552E5188293E71D700868F47 /* DifWordListTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DifWordListTests.swift; sourceTree = ""; }; + 552E5189293E71D700868F47 /* CoreDataManagerTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoreDataManagerTests.swift; sourceTree = ""; }; + 552E518A293E71D700868F47 /* LinkedDomainServiceTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LinkedDomainServiceTests.swift; sourceTree = ""; }; + 552E518B293E71D700868F47 /* ExchangeServiceTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExchangeServiceTests.swift; sourceTree = ""; }; + 552E518C293E71D700868F47 /* IdentifierDatabaseTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IdentifierDatabaseTests.swift; sourceTree = ""; }; + 552E518D293E71D700868F47 /* PresentationServiceTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationServiceTests.swift; sourceTree = ""; }; + 552E518E293E71D700868F47 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 552E5190293E71D700868F47 /* difwordlist.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = difwordlist.txt; sourceTree = ""; }; + 552E5192293E71D700868F47 /* IdentifierService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IdentifierService.swift; sourceTree = ""; }; + 552E5193293E71D700868F47 /* VCUseCase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VCUseCase.h; sourceTree = ""; }; + 552E5195293E71D700868F47 /* difwordlist.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = difwordlist.txt; sourceTree = ""; }; + 552E5196293E71D700868F47 /* PairwiseService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PairwiseService.swift; sourceTree = ""; }; + 552E5198293E71D700868F47 /* CoreDataManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoreDataManager.swift; sourceTree = ""; }; + 552E519A293E71D700868F47 /* Identifier.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Identifier.xcdatamodel; sourceTree = ""; }; + 552E519B293E71D700868F47 /* IdentifierDatabase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IdentifierDatabase.swift; sourceTree = ""; }; + 552E519C293E71D700868F47 /* LinkedDomainService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LinkedDomainService.swift; sourceTree = ""; }; + 552E519D293E71D700868F47 /* ServicesConstants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ServicesConstants.swift; sourceTree = ""; }; + 552E519E293E71D700868F47 /* DifWordList.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DifWordList.swift; sourceTree = ""; }; + 552E519F293E71D700868F47 /* ExchangeService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExchangeService.swift; sourceTree = ""; }; + 552E51A0293E71D700868F47 /* VerifiableCredentialSDK.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VerifiableCredentialSDK.swift; sourceTree = ""; }; + 552E51A1293E71D700868F47 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 552E51A2293E71D700868F47 /* IssuanceService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceService.swift; sourceTree = ""; }; + 552E51A3293E71D700868F47 /* PresentationService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationService.swift; sourceTree = ""; }; + 552E51A5293E71D700868F47 /* ViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + 552E51A6293E71D700868F47 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 552E51A8293E71D700868F47 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 552E51AA293E71D700868F47 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 552E51AB293E71D700868F47 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 552E51AC293E71D700868F47 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 552E51AD293E71D700868F47 /* SceneDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + 552E51AE293E71D700868F47 /* VCServices.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = VCServices.xcodeproj; sourceTree = ""; }; + 552E51B5293E71D700868F47 /* MockClaims.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockClaims.swift; sourceTree = ""; }; + 552E51B6293E71D700868F47 /* MockAlgorithm.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockAlgorithm.swift; sourceTree = ""; }; + 552E51B7293E71D700868F47 /* MockVerifier.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockVerifier.swift; sourceTree = ""; }; + 552E51B8293E71D700868F47 /* MockCryptoOperations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockCryptoOperations.swift; sourceTree = ""; }; + 552E51B9293E71D700868F47 /* MockSigner.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockSigner.swift; sourceTree = ""; }; + 552E51BA293E71D700868F47 /* JwsDecoderTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JwsDecoderTests.swift; sourceTree = ""; }; + 552E51BB293E71D700868F47 /* TokenVerifierTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TokenVerifierTests.swift; sourceTree = ""; }; + 552E51BC293E71D700868F47 /* ClaimsTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ClaimsTest.swift; sourceTree = ""; }; + 552E51BD293E71D700868F47 /* JwsTokenTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JwsTokenTests.swift; sourceTree = ""; }; + 552E51BE293E71D700868F47 /* ECPublicJwkTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ECPublicJwkTests.swift; sourceTree = ""; }; + 552E51BF293E71D700868F47 /* JwsEncoderTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JwsEncoderTests.swift; sourceTree = ""; }; + 552E51C0293E71D700868F47 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 552E51C1293E71D700868F47 /* Secp256k1Tests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Secp256k1Tests.swift; sourceTree = ""; }; + 552E51C3293E71D700868F47 /* Claims.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Claims.swift; sourceTree = ""; }; + 552E51C4293E71D700868F47 /* JweEncoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JweEncoder.swift; sourceTree = ""; }; + 552E51C5293E71D700868F47 /* JweDecoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JweDecoder.swift; sourceTree = ""; }; + 552E51C6293E71D700868F47 /* VCTokenError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VCTokenError.swift; sourceTree = ""; }; + 552E51C8293E71D700868F47 /* PbesJwe.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PbesJwe.swift; sourceTree = ""; }; + 552E51C9293E71D700868F47 /* ECPublicJwk.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ECPublicJwk.swift; sourceTree = ""; }; + 552E51CA293E71D700868F47 /* Secp256k1Signer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Secp256k1Signer.swift; sourceTree = ""; }; + 552E51CB293E71D700868F47 /* JWK.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JWK.swift; sourceTree = ""; }; + 552E51CC293E71D700868F47 /* Header.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Header.swift; sourceTree = ""; }; + 552E51CD293E71D700868F47 /* JwsEncoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JwsEncoder.swift; sourceTree = ""; }; + 552E51CE293E71D700868F47 /* VCToken.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VCToken.h; sourceTree = ""; }; + 552E51CF293E71D700868F47 /* JweToken.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JweToken.swift; sourceTree = ""; }; + 552E51D0293E71D700868F47 /* JwsDecoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JwsDecoder.swift; sourceTree = ""; }; + 552E51D1293E71D700868F47 /* TokenVerifier.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TokenVerifier.swift; sourceTree = ""; }; + 552E51D3293E71D700868F47 /* TokenVerifying.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TokenVerifying.swift; sourceTree = ""; }; + 552E51D4293E71D700868F47 /* TokenSigning.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TokenSigning.swift; sourceTree = ""; }; + 552E51D5293E71D700868F47 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 552E51D6293E71D700868F47 /* JwsToken.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JwsToken.swift; sourceTree = ""; }; + 552E51D7293E71D700868F47 /* KeyId.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyId.swift; sourceTree = ""; }; + 552E51D8293E71D700868F47 /* VCToken.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = VCToken.xcodeproj; sourceTree = ""; }; + 552E51DB293E71D700868F47 /* .gitmodules */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .gitmodules; sourceTree = ""; }; + 552E51DE293E71D700868F47 /* .gitignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .gitignore; sourceTree = ""; }; + 552E51EA293E71D700868F47 /* CODEOWNERS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CODEOWNERS; sourceTree = ""; }; + 552E51ED293E71D700868F47 /* Sha256Tests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Sha256Tests.swift; sourceTree = ""; }; + 552E51EF293E71D700868F47 /* Utf8TestData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Utf8TestData.swift; sourceTree = ""; }; + 552E51F0293E71D700868F47 /* VCSDKConfigurationMock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VCSDKConfigurationMock.swift; sourceTree = ""; }; + 552E51F1293E71D700868F47 /* HashingMock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HashingMock.swift; sourceTree = ""; }; + 552E51F2293E71D700868F47 /* SecretStoreMock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecretStoreMock.swift; sourceTree = ""; }; + 552E51F3293E71D700868F47 /* SecretMock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecretMock.swift; sourceTree = ""; }; + 552E51F4293E71D700868F47 /* SigningMock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SigningMock.swift; sourceTree = ""; }; + 552E51F5293E71D700868F47 /* PublicKeyMock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PublicKeyMock.swift; sourceTree = ""; }; + 552E51F6293E71D700868F47 /* KeyManagementOperationsTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyManagementOperationsTests.swift; sourceTree = ""; }; + 552E51F7293E71D700868F47 /* Sha512Tests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Sha512Tests.swift; sourceTree = ""; }; + 552E51F8293E71D700868F47 /* AesTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AesTests.swift; sourceTree = ""; }; + 552E51F9293E71D700868F47 /* CryptoOperationsTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CryptoOperationsTests.swift; sourceTree = ""; }; + 552E51FA293E71D700868F47 /* Secp256k1PublicKeyTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Secp256k1PublicKeyTests.swift; sourceTree = ""; }; + 552E51FB293E71D700868F47 /* ES256kTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ES256kTests.swift; sourceTree = ""; }; + 552E51FC293E71D700868F47 /* PbkdfTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PbkdfTests.swift; sourceTree = ""; }; + 552E51FD293E71D700868F47 /* KeychainSecretStoreTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeychainSecretStoreTests.swift; sourceTree = ""; }; + 552E51FE293E71D700868F47 /* EdDSATests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EdDSATests.swift; sourceTree = ""; }; + 552E51FF293E71D700868F47 /* Random32BytesSecretTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Random32BytesSecretTests.swift; sourceTree = ""; }; + 552E5200293E71D700868F47 /* HmacSha512Tests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HmacSha512Tests.swift; sourceTree = ""; }; + 552E5201293E71D700868F47 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 552E5202293E71D700868F47 /* Secp256k1Tests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Secp256k1Tests.swift; sourceTree = ""; }; + 552E5204293E71D700868F47 /* KeychainSecretStore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeychainSecretStore.swift; sourceTree = ""; }; + 552E5206293E71D700868F47 /* Aes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Aes.swift; sourceTree = ""; }; + 552E5207293E71D700868F47 /* HmacSha512.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HmacSha512.swift; sourceTree = ""; }; + 552E5208293E71D700868F47 /* Sha256.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Sha256.swift; sourceTree = ""; }; + 552E5209293E71D700868F47 /* SupportedSigningAlgorithms.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SupportedSigningAlgorithms.swift; sourceTree = ""; }; + 552E520A293E71D700868F47 /* EdDSA.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EdDSA.swift; sourceTree = ""; }; + 552E520B293E71D700868F47 /* Pbkdf.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Pbkdf.swift; sourceTree = ""; }; + 552E520C293E71D700868F47 /* SigningAlgorithm.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SigningAlgorithm.swift; sourceTree = ""; }; + 552E520D293E71D700868F47 /* HmacSha2AesCbc.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HmacSha2AesCbc.swift; sourceTree = ""; }; + 552E520E293E71D700868F47 /* ES256k.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ES256k.swift; sourceTree = ""; }; + 552E520F293E71D700868F47 /* Secp256k1.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Secp256k1.swift; sourceTree = ""; }; + 552E5210293E71D700868F47 /* HmacSha2.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HmacSha2.swift; sourceTree = ""; }; + 552E5211293E71D700868F47 /* Sha512.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Sha512.swift; sourceTree = ""; }; + 552E5213293E71D700868F47 /* Data+Hex.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Data+Hex.swift"; sourceTree = ""; }; + 552E5214293E71D700868F47 /* Data+Base64.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Data+Base64.swift"; sourceTree = ""; }; + 552E5215293E71D700868F47 /* KeyManagementOperations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyManagementOperations.swift; sourceTree = ""; }; + 552E5216293E71D700868F47 /* CryptoOperations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CryptoOperations.swift; sourceTree = ""; }; + 552E5218293E71D700868F47 /* PublicKey.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PublicKey.swift; sourceTree = ""; }; + 552E5219293E71D700868F47 /* EphemeralSecret.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EphemeralSecret.swift; sourceTree = ""; }; + 552E521A293E71D700868F47 /* ED25519PublicKey.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ED25519PublicKey.swift; sourceTree = ""; }; + 552E521B293E71D700868F47 /* Secret.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Secret.swift; sourceTree = ""; }; + 552E521C293E71D700868F47 /* Random32BytesSecret.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Random32BytesSecret.swift; sourceTree = ""; }; + 552E521D293E71D700868F47 /* Secp256k1PublicKey.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Secp256k1PublicKey.swift; sourceTree = ""; }; + 552E521E293E71D700868F47 /* SecretStoring.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecretStoring.swift; sourceTree = ""; }; + 552E5220293E71D700868F47 /* Signing.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Signing.swift; sourceTree = ""; }; + 552E5221293E71D700868F47 /* VCSDKConfigurable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VCSDKConfigurable.swift; sourceTree = ""; }; + 552E5222293E71D700868F47 /* Hashing.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Hashing.swift; sourceTree = ""; }; + 552E5223293E71D700868F47 /* CryptoOperating.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CryptoOperating.swift; sourceTree = ""; }; + 552E5224293E71D700868F47 /* SupportedCurve.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SupportedCurve.swift; sourceTree = ""; }; + 552E5225293E71D700868F47 /* SupportedHashAlgorithm.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SupportedHashAlgorithm.swift; sourceTree = ""; }; + 552E5226293E71D700868F47 /* KeyManagementOperating.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyManagementOperating.swift; sourceTree = ""; }; + 552E5227293E71D700868F47 /* VCCrypto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VCCrypto.h; sourceTree = ""; }; + 552E5228293E71D700868F47 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 552E5229293E71D700868F47 /* VCCrypto.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = VCCrypto.xcodeproj; sourceTree = ""; }; + 552E522D293E71D700868F47 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 552E522F293E71D700868F47 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; + 552E5231293E71D700868F47 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 552E5232293E71D700868F47 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 552E5233293E71D700868F47 /* ContentView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; + 552E5234293E71D700868F47 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 552E5235293E71D700868F47 /* SceneDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + 552E5237293E71D700868F47 /* VCNetworking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = VCNetworking.xcodeproj; sourceTree = ""; }; + 552E523C293E71D700868F47 /* MockNetworkOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockNetworkOperation.swift; sourceTree = ""; }; + 552E523D293E71D700868F47 /* TestData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestData.swift; sourceTree = ""; }; + 552E523E293E71D700868F47 /* UrlProtocolMock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UrlProtocolMock.swift; sourceTree = ""; }; + 552E523F293E71D700868F47 /* MockObject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockObject.swift; sourceTree = ""; }; + 552E5240293E71D700868F47 /* MockDecoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockDecoder.swift; sourceTree = ""; }; + 552E5242293E71D700868F47 /* HelperNetworkFunctionsTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HelperNetworkFunctionsTests.swift; sourceTree = ""; }; + 552E5244293E71D700868F47 /* SimpleSuccessHandlerTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SimpleSuccessHandlerTests.swift; sourceTree = ""; }; + 552E5246293E71D700868F47 /* NoRetryTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NoRetryTests.swift; sourceTree = ""; }; + 552E5249293E71D700868F47 /* PostIssuanceResponseOperationTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostIssuanceResponseOperationTests.swift; sourceTree = ""; }; + 552E524A293E71D700868F47 /* PostPresentationResponseOperationTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostPresentationResponseOperationTests.swift; sourceTree = ""; }; + 552E524B293E71D700868F47 /* PostExchangeRequestOperationTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostExchangeRequestOperationTests.swift; sourceTree = ""; }; + 552E524D293E71D700868F47 /* FetchDIDDocumentOperationTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FetchDIDDocumentOperationTests.swift; sourceTree = ""; }; + 552E524E293E71D700868F47 /* FetchWellKnownConfigDocumentOperationTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FetchWellKnownConfigDocumentOperationTests.swift; sourceTree = ""; }; + 552E524F293E71D700868F47 /* FetchContractOperationTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FetchContractOperationTests.swift; sourceTree = ""; }; + 552E5250293E71D700868F47 /* FetchPresentationRequestOperationTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FetchPresentationRequestOperationTests.swift; sourceTree = ""; }; + 552E5251293E71D700868F47 /* NetworkOperationTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetworkOperationTests.swift; sourceTree = ""; }; + 552E5253293E71D700868F47 /* String+PercentEncodingTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String+PercentEncodingTests.swift"; sourceTree = ""; }; + 552E5255293E71D700868F47 /* SimpleFailureHandlerTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SimpleFailureHandlerTests.swift; sourceTree = ""; }; + 552E5257293E71D700868F47 /* ExchangeRequestEncoderTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExchangeRequestEncoderTests.swift; sourceTree = ""; }; + 552E5258293E71D700868F47 /* IssuanceResponseEncoderTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceResponseEncoderTests.swift; sourceTree = ""; }; + 552E525A293E71D700868F47 /* PresentationServiceResponseDecoderTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationServiceResponseDecoderTests.swift; sourceTree = ""; }; + 552E525B293E71D700868F47 /* ContractDecoderTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContractDecoderTests.swift; sourceTree = ""; }; + 552E525C293E71D700868F47 /* PresentationRequestDecoderTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationRequestDecoderTests.swift; sourceTree = ""; }; + 552E525D293E71D700868F47 /* DIDDocumentDecoderTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DIDDocumentDecoderTests.swift; sourceTree = ""; }; + 552E525E293E71D700868F47 /* IssuanceServiceResponseDecoderTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceServiceResponseDecoderTests.swift; sourceTree = ""; }; + 552E525F293E71D700868F47 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 552E5261293E71D700868F47 /* NetworkingError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetworkingError.swift; sourceTree = ""; }; + 552E5263293E71D700868F47 /* HelperNetworkFunctions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HelperNetworkFunctions.swift; sourceTree = ""; }; + 552E5264293E71D700868F47 /* ExchangeNetworkCalls.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExchangeNetworkCalls.swift; sourceTree = ""; }; + 552E5265293E71D700868F47 /* WellKnownConfigDocumentNetworkCalls.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WellKnownConfigDocumentNetworkCalls.swift; sourceTree = ""; }; + 552E5267293E71D700868F47 /* SimpleSuccessHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SimpleSuccessHandler.swift; sourceTree = ""; }; + 552E5268293E71D700868F47 /* SuccessHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SuccessHandler.swift; sourceTree = ""; }; + 552E526A293E71D700868F47 /* NoRetry.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NoRetry.swift; sourceTree = ""; }; + 552E526B293E71D700868F47 /* RetryHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RetryHandler.swift; sourceTree = ""; }; + 552E526C293E71D700868F47 /* IssuanceNetworkCalls.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceNetworkCalls.swift; sourceTree = ""; }; + 552E526E293E71D700868F47 /* NetworkOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetworkOperation.swift; sourceTree = ""; }; + 552E5270293E71D700868F47 /* PostPresentationResponseOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostPresentationResponseOperation.swift; sourceTree = ""; }; + 552E5271293E71D700868F47 /* PostNetworkOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostNetworkOperation.swift; sourceTree = ""; }; + 552E5272293E71D700868F47 /* PostIssuanceResponseOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostIssuanceResponseOperation.swift; sourceTree = ""; }; + 552E5273293E71D700868F47 /* PostIssuanceCompletionResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostIssuanceCompletionResponse.swift; sourceTree = ""; }; + 552E5274293E71D700868F47 /* PostExchangeRequestOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostExchangeRequestOperation.swift; sourceTree = ""; }; + 552E5276293E71D700868F47 /* FetchDIDDocumentOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FetchDIDDocumentOperation.swift; sourceTree = ""; }; + 552E5277293E71D700868F47 /* FetchContractOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FetchContractOperation.swift; sourceTree = ""; }; + 552E5278293E71D700868F47 /* FetchWellKnownConfigDocumentOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FetchWellKnownConfigDocumentOperation.swift; sourceTree = ""; }; + 552E5279293E71D700868F47 /* FetchPresentationRequestOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FetchPresentationRequestOperation.swift; sourceTree = ""; }; + 552E527B293E71D700868F47 /* String+PercentEncoding.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String+PercentEncoding.swift"; sourceTree = ""; }; + 552E527C293E71D700868F47 /* URL+PercentEncodedString.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "URL+PercentEncodedString.swift"; sourceTree = ""; }; + 552E527E293E71D700868F47 /* FailureHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FailureHandler.swift; sourceTree = ""; }; + 552E527F293E71D700868F47 /* SimpleFailureHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SimpleFailureHandler.swift; sourceTree = ""; }; + 552E5280293E71D700868F47 /* NetworkingConstants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetworkingConstants.swift; sourceTree = ""; }; + 552E5282293E71D700868F47 /* ExchangeRequestEncoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExchangeRequestEncoder.swift; sourceTree = ""; }; + 552E5283293E71D700868F47 /* PresentationResponseEncoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationResponseEncoder.swift; sourceTree = ""; }; + 552E5284293E71D700868F47 /* Encoding.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Encoding.swift; sourceTree = ""; }; + 552E5285293E71D700868F47 /* IssuanceCompletionResponseEncoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceCompletionResponseEncoder.swift; sourceTree = ""; }; + 552E5286293E71D700868F47 /* IssuanceResponseEncoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceResponseEncoder.swift; sourceTree = ""; }; + 552E5287293E71D700868F47 /* PresentationNetworkCalls.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationNetworkCalls.swift; sourceTree = ""; }; + 552E5289293E71D700868F47 /* WellKnownConfigDocumentDecoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WellKnownConfigDocumentDecoder.swift; sourceTree = ""; }; + 552E528A293E71D700868F47 /* DIDDocumentDecoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DIDDocumentDecoder.swift; sourceTree = ""; }; + 552E528B293E71D700868F47 /* BasicServiceResponseDecoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BasicServiceResponseDecoder.swift; sourceTree = ""; }; + 552E528C293E71D700868F47 /* ContractDecoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContractDecoder.swift; sourceTree = ""; }; + 552E528D293E71D700868F47 /* IssuanceServiceResponseDecoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceServiceResponseDecoder.swift; sourceTree = ""; }; + 552E528E293E71D700868F47 /* PresentationRequestDecoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationRequestDecoder.swift; sourceTree = ""; }; + 552E528F293E71D700868F47 /* Decoding.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Decoding.swift; sourceTree = ""; }; + 552E5290293E71D700868F47 /* PresentationServiceResponseDecoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationServiceResponseDecoder.swift; sourceTree = ""; }; + 552E5291293E71D700868F47 /* DIDDocumentNetworkCalls.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DIDDocumentNetworkCalls.swift; sourceTree = ""; }; + 552E5292293E71D700868F47 /* networking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = networking.h; sourceTree = ""; }; + 552E5293293E71D700868F47 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 552E5295293E71D700868F47 /* VCSamples.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = VCSamples.xcodeproj; sourceTree = ""; }; + 552E5299293E71D700868F47 /* IssuanceSample.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceSample.swift; sourceTree = ""; }; + 552E529A293E71D700868F47 /* PresentationSample.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationSample.swift; sourceTree = ""; }; + 552E529B293E71D700868F47 /* VCSamples.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VCSamples.h; sourceTree = ""; }; + 552E529C293E71D700868F47 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 55E33666293E7B5000CD2ED7 /* PMKFoundation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = PMKFoundation.xcodeproj; path = Foundation/PMKFoundation.xcodeproj; sourceTree = ""; }; + 55E3366F293E7B5F00CD2ED7 /* PromiseKit.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = PromiseKit.xcodeproj; path = PromiseKit/PromiseKit.xcodeproj; sourceTree = ""; }; + 55E33685293E7B7D00CD2ED7 /* Secp256k1.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Secp256k1.xcodeproj; path = Secp256k1/Secp256k1.xcodeproj; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 552E508F293E6AB200868F47 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 55E33684293E7B6600CD2ED7 /* PromiseKit.framework in Frameworks */, + 552E5450293E737300868F47 /* VCEntities.framework in Frameworks */, + 552E544E293E736F00868F47 /* VCCrypto.framework in Frameworks */, + 552E5456293E738200868F47 /* VCToken.framework in Frameworks */, + 552E5452293E737900868F47 /* VCNetworking.framework in Frameworks */, + 552E5454293E737F00868F47 /* VCServices.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 552E5097293E6AB200868F47 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 552E509B293E6AB200868F47 /* WalletLibrary.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 552E5088293E6AB100868F47 = { + isa = PBXGroup; + children = ( + 552E50AB293E6F5500868F47 /* VerifiedIdFlow.swift */, + 552E50AA293E6B6B00868F47 /* Submodules */, + 552E5094293E6AB200868F47 /* WalletLibrary */, + 552E509E293E6AB200868F47 /* WalletLibraryTests */, + 552E5093293E6AB200868F47 /* Products */, + 552E544A293E736C00868F47 /* Frameworks */, + ); + sourceTree = ""; + }; + 552E5093293E6AB200868F47 /* Products */ = { + isa = PBXGroup; + children = ( + 552E5092293E6AB200868F47 /* WalletLibrary.framework */, + 552E509A293E6AB200868F47 /* WalletLibraryTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 552E5094293E6AB200868F47 /* WalletLibrary */ = { + isa = PBXGroup; + children = ( + 552E5095293E6AB200868F47 /* WalletLibrary.h */, + ); + path = WalletLibrary; + sourceTree = ""; + }; + 552E509E293E6AB200868F47 /* WalletLibraryTests */ = { + isa = PBXGroup; + children = ( + 552E509F293E6AB200868F47 /* VerifiedIdFlowTests.swift */, + ); + path = WalletLibraryTests; + sourceTree = ""; + }; + 552E50AA293E6B6B00868F47 /* Submodules */ = { + isa = PBXGroup; + children = ( + 552E50B9293E71D600868F47 /* VerifiableCredential-SDK-iOS */, + ); + path = Submodules; + sourceTree = ""; + }; + 552E50B9293E71D600868F47 /* VerifiableCredential-SDK-iOS */ = { + isa = PBXGroup; + children = ( + 552E50BC293E71D600868F47 /* VCEntities */, + 552E5174293E71D600868F47 /* VCServices */, + 552E51B2293E71D700868F47 /* VCToken */, + 552E51DB293E71D700868F47 /* .gitmodules */, + 552E51DE293E71D700868F47 /* .gitignore */, + 552E51E0293E71D700868F47 /* Submodules */, + 552E51E9293E71D700868F47 /* .github */, + 552E51EB293E71D700868F47 /* VCCrypto */, + 552E5236293E71D700868F47 /* VCNetworking */, + 552E5294293E71D700868F47 /* VCSamples */, + ); + path = "VerifiableCredential-SDK-iOS"; + sourceTree = ""; + }; + 552E50BC293E71D600868F47 /* VCEntities */ = { + isa = PBXGroup; + children = ( + 552E50BD293E71D600868F47 /* VCEntities.xcodeproj */, + 552E50C0293E71D600868F47 /* VCEntities */, + 552E5152293E71D600868F47 /* VCEntitiesTests */, + ); + path = VCEntities; + sourceTree = ""; + }; + 552E50BE293E71D600868F47 /* Products */ = { + isa = PBXGroup; + children = ( + 552E52AD293E71D700868F47 /* VCEntities.framework */, + 552E52AF293E71D700868F47 /* VCEntitiesTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 552E50C0293E71D600868F47 /* VCEntities */ = { + isa = PBXGroup; + children = ( + 552E50C1293E71D600868F47 /* ResponseMappings.swift */, + 552E50C2293E71D600868F47 /* VCEntities.h */, + 552E50C3293E71D600868F47 /* exchange */, + 552E50C7293E71D600868F47 /* verifiablePresentation */, + 552E50CA293E71D600868F47 /* util */, + 552E50D0293E71D600868F47 /* RequestedVerifiableCredentialMapping.swift */, + 552E50D1293E71D600868F47 /* ResponseContaining.swift */, + 552E50D2293E71D600868F47 /* linkedDomains */, + 552E50D8293E71D600868F47 /* discovery */, + 552E50DA293E71D600868F47 /* oidc */, + 552E50E2293E71D600868F47 /* formatters */, + 552E50EC293E71D600868F47 /* identifier */, + 552E50FC293E71D600868F47 /* issuance */, + 552E5116293E71D600868F47 /* verifiableCredential */, + 552E511A293E71D600868F47 /* validators */, + 552E511E293E71D600868F47 /* backup */, + 552E512E293E71D600868F47 /* presentation */, + 552E514B293E71D600868F47 /* logging */, + 552E5151293E71D600868F47 /* Info.plist */, + ); + path = VCEntities; + sourceTree = ""; + }; + 552E50C3293E71D600868F47 /* exchange */ = { + isa = PBXGroup; + children = ( + 552E50C4293E71D600868F47 /* claims */, + 552E50C6293E71D600868F47 /* ExchangeRequestContainer.swift */, + ); + path = exchange; + sourceTree = ""; + }; + 552E50C4293E71D600868F47 /* claims */ = { + isa = PBXGroup; + children = ( + 552E50C5293E71D600868F47 /* ExchangeRequestClaims.swift */, + ); + path = claims; + sourceTree = ""; + }; + 552E50C7293E71D600868F47 /* verifiablePresentation */ = { + isa = PBXGroup; + children = ( + 552E50C8293E71D600868F47 /* VerifiablePresentationDescriptor.swift */, + 552E50C9293E71D600868F47 /* VerifiablePresentationClaims.swift */, + ); + path = verifiablePresentation; + sourceTree = ""; + }; + 552E50CA293E71D600868F47 /* util */ = { + isa = PBXGroup; + children = ( + 552E50CB293E71D600868F47 /* Multihash.swift */, + 552E50CC293E71D600868F47 /* VCEntitiesConstants.swift */, + 552E50CD293E71D600868F47 /* VCSDKConfiguration.swift */, + 552E50CE293E71D600868F47 /* CorrelationHeader.swift */, + 552E50CF293E71D600868F47 /* JSONCodingKeys.swift */, + ); + path = util; + sourceTree = ""; + }; + 552E50D2293E71D600868F47 /* linkedDomains */ = { + isa = PBXGroup; + children = ( + 552E50D3293E71D600868F47 /* DomainLinkageCredentialSubject.swift */, + 552E50D4293E71D600868F47 /* DomainLinkageCredential.swift */, + 552E50D5293E71D600868F47 /* DomainLinkageCredentialContent.swift */, + 552E50D6293E71D600868F47 /* LinkedDomainResult.swift */, + 552E50D7293E71D600868F47 /* WellKnownConfigDocument.swift */, + ); + path = linkedDomains; + sourceTree = ""; + }; + 552E50D8293E71D600868F47 /* discovery */ = { + isa = PBXGroup; + children = ( + 552E50D9293E71D600868F47 /* DiscoveryServiceResponse.swift */, + ); + path = discovery; + sourceTree = ""; + }; + 552E50DA293E71D600868F47 /* oidc */ = { + isa = PBXGroup; + children = ( + 552E50DB293E71D600868F47 /* OIDCClaims.swift */, + 552E50DC293E71D600868F47 /* AllowedAlgorithms.swift */, + 552E50DD293E71D600868F47 /* PresentationRequestClaims.swift */, + 552E50DE293E71D600868F47 /* RequestedVPToken.swift */, + 552E50DF293E71D600868F47 /* RegistrationClaims.swift */, + 552E50E0293E71D600868F47 /* SupportedVerifiablePresentationFormats.swift */, + 552E50E1293E71D600868F47 /* RequestedClaims.swift */, + ); + path = oidc; + sourceTree = ""; + }; + 552E50E2293E71D600868F47 /* formatters */ = { + isa = PBXGroup; + children = ( + 552E50E3293E71D600868F47 /* PresentationResponseFormatter.swift */, + 552E50E4293E71D600868F47 /* TokenTimeConstraints.swift */, + 552E50E5293E71D600868F47 /* ExchangeRequestFormatter.swift */, + 552E50E6293E71D600868F47 /* FormatterError.swift */, + 552E50E7293E71D600868F47 /* JwsHeaderFormatter .swift */, + 552E50E8293E71D600868F47 /* IssuanceVPFormatter.swift */, + 552E50E9293E71D600868F47 /* IdentifierFormatter.swift */, + 552E50EA293E71D600868F47 /* IssuanceResponseFormatter.swift */, + 552E50EB293E71D600868F47 /* VerifiablePresentationFormatter.swift */, + ); + path = formatters; + sourceTree = ""; + }; + 552E50EC293E71D600868F47 /* identifier */ = { + isa = PBXGroup; + children = ( + 552E50ED293E71D600868F47 /* IdentifierCreator.swift */, + 552E50EE293E71D600868F47 /* AliasComputer.swift */, + 552E50EF293E71D600868F47 /* document */, + 552E50FA293E71D600868F47 /* KeyContainer.swift */, + 552E50FB293E71D600868F47 /* Identifier.swift */, + ); + path = identifier; + sourceTree = ""; + }; + 552E50EF293E71D600868F47 /* document */ = { + isa = PBXGroup; + children = ( + 552E50F0293E71D600868F47 /* IdentifierDocumentPublicKey.swift */, + 552E50F1293E71D600868F47 /* IdentifierDocumentServiceEndpoint.swift */, + 552E50F2293E71D600868F47 /* ion */, + 552E50F7293E71D600868F47 /* IdentifierDocumentSuffixDescriptor.swift */, + 552E50F8293E71D600868F47 /* IdentifierDocument.swift */, + 552E50F9293E71D600868F47 /* IdentifierDocumentServiceEndpointDescriptor.swift */, + ); + path = document; + sourceTree = ""; + }; + 552E50F2293E71D600868F47 /* ion */ = { + isa = PBXGroup; + children = ( + 552E50F3293E71D600868F47 /* IONDocumentPatch.swift */, + 552E50F4293E71D600868F47 /* IONDocumentInitialState.swift */, + 552E50F5293E71D600868F47 /* IONDocumentDeltaDescriptor.swift */, + 552E50F6293E71D600868F47 /* IONDocumentModel.swift */, + ); + path = ion; + sourceTree = ""; + }; + 552E50FC293E71D600868F47 /* issuance */ = { + isa = PBXGroup; + children = ( + 552E50FD293E71D600868F47 /* contract */, + 552E510C293E71D600868F47 /* IssuanceCompletionResponse.swift */, + 552E510D293E71D600868F47 /* IssuanceResponseContainer.swift */, + 552E510E293E71D600868F47 /* IssuanceRequest.swift */, + 552E510F293E71D600868F47 /* AttestationResponseDescriptor.swift */, + 552E5110293E71D600868F47 /* IssuanceServiceResponse.swift */, + 552E5111293E71D600868F47 /* ContractServiceResponse.swift */, + 552E5112293E71D600868F47 /* IssuancePin.swift */, + 552E5113293E71D600868F47 /* claims */, + ); + path = issuance; + sourceTree = ""; + }; + 552E50FD293E71D600868F47 /* contract */ = { + isa = PBXGroup; + children = ( + 552E50FE293E71D600868F47 /* AttestationsDescriptor.swift */, + 552E50FF293E71D600868F47 /* PresentationDescriptor.swift */, + 552E5100293E71D600868F47 /* ConsentDisplayDescriptor.swift */, + 552E5101293E71D600868F47 /* LogoDisplayDescriptor.swift */, + 552E5102293E71D600868F47 /* DisplayDescriptor.swift */, + 552E5103293E71D600868F47 /* ClaimDisplayDescriptor.swift */, + 552E5104293E71D600868F47 /* AccessTokenDescriptor.swift */, + 552E5105293E71D600868F47 /* IssuerDescriptor.swift */, + 552E5106293E71D600868F47 /* ContractInputDescriptor.swift */, + 552E5107293E71D600868F47 /* Contract.swift */, + 552E5108293E71D600868F47 /* CardDisplayDescriptor.swift */, + 552E5109293E71D600868F47 /* SelfIssuedClaimsDescriptor.swift */, + 552E510A293E71D600868F47 /* ClaimDescriptor.swift */, + 552E510B293E71D600868F47 /* IdTokenDescriptor.swift */, + ); + path = contract; + sourceTree = ""; + }; + 552E5113293E71D600868F47 /* claims */ = { + isa = PBXGroup; + children = ( + 552E5114293E71D600868F47 /* PinClaims.swift */, + 552E5115293E71D600868F47 /* IssuanceResponseClaims.swift */, + ); + path = claims; + sourceTree = ""; + }; + 552E5116293E71D600868F47 /* verifiableCredential */ = { + isa = PBXGroup; + children = ( + 552E5117293E71D600868F47 /* ServiceDescriptor.swift */, + 552E5118293E71D600868F47 /* VerifiableCredentialDescriptor.swift */, + 552E5119293E71D600868F47 /* VCClaims.swift */, + ); + path = verifiableCredential; + sourceTree = ""; + }; + 552E511A293E71D600868F47 /* validators */ = { + isa = PBXGroup; + children = ( + 552E511B293E71D600868F47 /* PresentationRequestValidator.swift */, + 552E511C293E71D600868F47 /* DomainLinkageCredentialValidator.swift */, + 552E511D293E71D600868F47 /* IssuanceRequestValidator.swift */, + ); + path = validators; + sourceTree = ""; + }; + 552E511E293E71D600868F47 /* backup */ = { + isa = PBXGroup; + children = ( + 552E511F293E71D600868F47 /* UnprotectedBackup.swift */, + 552E5120293E71D600868F47 /* content */, + 552E5129293E71D600868F47 /* container */, + ); + path = backup; + sourceTree = ""; + }; + 552E5120293E71D600868F47 /* content */ = { + isa = PBXGroup; + children = ( + 552E5121293E71D600868F47 /* ProtectedBackupData.swift */, + 552E5122293E71D600868F47 /* microsoft2020 */, + 552E5128293E71D600868F47 /* UnprotectedBackupData.swift */, + ); + path = content; + sourceTree = ""; + }; + 552E5122293E71D600868F47 /* microsoft2020 */ = { + isa = PBXGroup; + children = ( + 552E5123293E71D600868F47 /* Microsoft2020IdentifierBackup.swift */, + 552E5124293E71D600868F47 /* RawIdentity.swift */, + 552E5125293E71D600868F47 /* VcMetadata.swift */, + 552E5126293E71D600868F47 /* Microsoft2020UnprotectedBackup.swift */, + 552E5127293E71D600868F47 /* WalletMetadata.swift */, + ); + path = microsoft2020; + sourceTree = ""; + }; + 552E5129293E71D600868F47 /* container */ = { + isa = PBXGroup; + children = ( + 552E512A293E71D600868F47 /* BackupProtectionMethod.swift */, + 552E512B293E71D600868F47 /* jwe */, + ); + path = container; + sourceTree = ""; + }; + 552E512B293E71D600868F47 /* jwe */ = { + isa = PBXGroup; + children = ( + 552E512C293E71D600868F47 /* JwePasswordProtectedBackupData.swift */, + 552E512D293E71D600868F47 /* JwePasswordProtectionMethod.swift */, + ); + path = jwe; + sourceTree = ""; + }; + 552E512E293E71D600868F47 /* presentation */ = { + isa = PBXGroup; + children = ( + 552E512F293E71D600868F47 /* issuerIdToken */, + 552E5133293E71D600868F47 /* presentationExchange */, + 552E5141293E71D600868F47 /* RequestedVerifiableCredentialMapping.swift */, + 552E5142293E71D600868F47 /* PresentationRequest.swift */, + 552E5143293E71D600868F47 /* PresentationResponse.swift */, + 552E5144293E71D600868F47 /* PresentationResponseClaims.swift */, + 552E5145293E71D600868F47 /* PresentationResponseContainer.swift */, + 552E5146293E71D600868F47 /* claims */, + ); + path = presentation; + sourceTree = ""; + }; + 552E512F293E71D600868F47 /* issuerIdToken */ = { + isa = PBXGroup; + children = ( + 552E5130293E71D600868F47 /* IssuerIdToken.swift */, + 552E5131293E71D600868F47 /* PinDescriptor.swift */, + 552E5132293E71D600868F47 /* IssuerIdTokenClaims.swift */, + ); + path = issuerIdToken; + sourceTree = ""; + }; + 552E5133293E71D600868F47 /* presentationExchange */ = { + isa = PBXGroup; + children = ( + 552E5134293E71D600868F47 /* response */, + 552E5139293E71D600868F47 /* request */, + ); + path = presentationExchange; + sourceTree = ""; + }; + 552E5134293E71D600868F47 /* response */ = { + isa = PBXGroup; + children = ( + 552E5135293E71D600868F47 /* VPTokenResponseDescription.swift */, + 552E5136293E71D600868F47 /* PresentationSubmission.swift */, + 552E5137293E71D600868F47 /* NestedInputDescriptorMapping.swift */, + 552E5138293E71D600868F47 /* InputDescriptorMapping.swift */, + ); + path = response; + sourceTree = ""; + }; + 552E5139293E71D600868F47 /* request */ = { + isa = PBXGroup; + children = ( + 552E513A293E71D600868F47 /* PresentationInputDescriptor.swift */, + 552E513B293E71D600868F47 /* PresentationExchangeField.swift */, + 552E513C293E71D600868F47 /* PresentationExchangeFilter.swift */, + 552E513D293E71D600868F47 /* InputDescriptorSchema.swift */, + 552E513E293E71D600868F47 /* PresentationExchangeConstraints.swift */, + 552E513F293E71D600868F47 /* PresentationDefinition.swift */, + 552E5140293E71D600868F47 /* IssuanceMetadata.swift */, + ); + path = request; + sourceTree = ""; + }; + 552E5146293E71D600868F47 /* claims */ = { + isa = PBXGroup; + children = ( + 552E5147293E71D600868F47 /* presentationExchangeResponse */, + 552E514A293E71D600868F47 /* PresentationRequestClaims.swift */, + ); + path = claims; + sourceTree = ""; + }; + 552E5147293E71D600868F47 /* presentationExchangeResponse */ = { + isa = PBXGroup; + children = ( + 552E5148293E71D600868F47 /* NestedInputDescriptorMapping.swift */, + 552E5149293E71D600868F47 /* InputDescriptorMapping.swift */, + ); + path = presentationExchangeResponse; + sourceTree = ""; + }; + 552E514B293E71D600868F47 /* logging */ = { + isa = PBXGroup; + children = ( + 552E514C293E71D600868F47 /* VCLogConsumer.swift */, + 552E514D293E71D600868F47 /* MeasureTime.swift */, + 552E514E293E71D600868F47 /* VCSDKLog.swift */, + 552E514F293E71D600868F47 /* VCTraceLevel.swift */, + 552E5150293E71D600868F47 /* DefaultLogConsumer.swift */, + ); + path = logging; + sourceTree = ""; + }; + 552E5152293E71D600868F47 /* VCEntitiesTests */ = { + isa = PBXGroup; + children = ( + 552E5153293E71D600868F47 /* mocks */, + 552E515D293E71D600868F47 /* exchange */, + 552E515F293E71D600868F47 /* util */, + 552E5162293E71D600868F47 /* formatters */, + 552E5167293E71D600868F47 /* identifier */, + 552E5169293E71D600868F47 /* issuance */, + 552E516D293E71D600868F47 /* verifiableCredential */, + 552E516F293E71D600868F47 /* validators */, + 552E5172293E71D600868F47 /* OIDCClaimsTests.swift */, + 552E5173293E71D600868F47 /* Info.plist */, + ); + path = VCEntitiesTests; + sourceTree = ""; + }; + 552E5153293E71D600868F47 /* mocks */ = { + isa = PBXGroup; + children = ( + 552E5154293E71D600868F47 /* MockTokenVerifier.swift */, + 552E5155293E71D600868F47 /* MockCryptoSecret.swift */, + 552E5156293E71D600868F47 /* MockOIDCClaims.swift */, + 552E5157293E71D600868F47 /* MockTokenSigner.swift */, + 552E5158293E71D600868F47 /* TestData.swift */, + 552E5159293E71D600868F47 /* MockCryptoOperations.swift */, + 552E515A293E71D600868F47 /* SecretStoreMock.swift */, + 552E515B293E71D600868F47 /* MockCodableObject.swift */, + 552E515C293E71D600868F47 /* MockIdentifierFormatter.swift */, + ); + path = mocks; + sourceTree = ""; + }; + 552E515D293E71D600868F47 /* exchange */ = { + isa = PBXGroup; + children = ( + 552E515E293E71D600868F47 /* ExchangeRequestContainerTests.swift */, + ); + path = exchange; + sourceTree = ""; + }; + 552E515F293E71D600868F47 /* util */ = { + isa = PBXGroup; + children = ( + 552E5160293E71D600868F47 /* JSONCodingKeysTests.swift */, + 552E5161293E71D600868F47 /* MultihashTests.swift */, + ); + path = util; + sourceTree = ""; + }; + 552E5162293E71D600868F47 /* formatters */ = { + isa = PBXGroup; + children = ( + 552E5163293E71D600868F47 /* IssuanceResponseFormatterTests.swift */, + 552E5164293E71D600868F47 /* ExchangeRequestFormatterTests.swift */, + 552E5165293E71D600868F47 /* IdentifierFormatterTests.swift */, + 552E5166293E71D600868F47 /* PresentationResponseFormatterTests.swift */, + ); + path = formatters; + sourceTree = ""; + }; + 552E5167293E71D600868F47 /* identifier */ = { + isa = PBXGroup; + children = ( + 552E5168293E71D600868F47 /* IdentifierCreatorTests.swift */, + ); + path = identifier; + sourceTree = ""; + }; + 552E5169293E71D600868F47 /* issuance */ = { + isa = PBXGroup; + children = ( + 552E516A293E71D600868F47 /* IssuanceServiceResponseTests.swift */, + 552E516B293E71D600868F47 /* IssuanceResponseClaimsTests.swift */, + 552E516C293E71D600868F47 /* IssuancePinTests.swift */, + ); + path = issuance; + sourceTree = ""; + }; + 552E516D293E71D600868F47 /* verifiableCredential */ = { + isa = PBXGroup; + children = ( + 552E516E293E71D600868F47 /* VerifiableCredentialTests.swift */, + ); + path = verifiableCredential; + sourceTree = ""; + }; + 552E516F293E71D600868F47 /* validators */ = { + isa = PBXGroup; + children = ( + 552E5170293E71D600868F47 /* DomainLinkageCredentialValidatorTests.swift */, + 552E5171293E71D600868F47 /* PresentationRequestValidatorTests.swift */, + ); + path = validators; + sourceTree = ""; + }; + 552E5174293E71D600868F47 /* VCServices */ = { + isa = PBXGroup; + children = ( + 552E5175293E71D700868F47 /* VCServicesTests */, + 552E518F293E71D700868F47 /* Resources */, + 552E5191293E71D700868F47 /* VCServices */, + 552E51A4293E71D700868F47 /* VCServicesTestApp */, + 552E51AE293E71D700868F47 /* VCServices.xcodeproj */, + ); + path = VCServices; + sourceTree = ""; + }; + 552E5175293E71D700868F47 /* VCServicesTests */ = { + isa = PBXGroup; + children = ( + 552E5176293E71D700868F47 /* mocks */, + 552E5187293E71D700868F47 /* IssuanceServiceTests.swift */, + 552E5188293E71D700868F47 /* DifWordListTests.swift */, + 552E5189293E71D700868F47 /* CoreDataManagerTests.swift */, + 552E518A293E71D700868F47 /* LinkedDomainServiceTests.swift */, + 552E518B293E71D700868F47 /* ExchangeServiceTests.swift */, + 552E518C293E71D700868F47 /* IdentifierDatabaseTests.swift */, + 552E518D293E71D700868F47 /* PresentationServiceTests.swift */, + 552E518E293E71D700868F47 /* Info.plist */, + ); + path = VCServicesTests; + sourceTree = ""; + }; + 552E5176293E71D700868F47 /* mocks */ = { + isa = PBXGroup; + children = ( + 552E5177293E71D700868F47 /* MockIssuanceRequestValidator.swift */, + 552E5178293E71D700868F47 /* MockTokenSigner.swift */, + 552E5179293E71D700868F47 /* MockExchangeApiCalls.swift */, + 552E517A293E71D700868F47 /* MockIssuanceApiCalls.swift */, + 552E517B293E71D700868F47 /* TestData.swift */, + 552E517C293E71D700868F47 /* MockIssuanceResponseFormatter.swift */, + 552E517D293E71D700868F47 /* MockVCCryptoSecret.swift */, + 552E517E293E71D700868F47 /* MockVCSDKConfiguration.swift */, + 552E517F293E71D700868F47 /* MockPresentationApiCalls.swift */, + 552E5180293E71D700868F47 /* MockPresentationRequestValidator.swift */, + 552E5181293E71D700868F47 /* MockExchangeRequestFormatter.swift */, + 552E5182293E71D700868F47 /* MockDiscoveryApiCalls.swift */, + 552E5183293E71D700868F47 /* MockWellKnownConfigDocumentApiCalls.swift */, + 552E5184293E71D700868F47 /* SecretStoreMock.swift */, + 552E5185293E71D700868F47 /* MockDomainLinkageCredentialValidator.swift */, + 552E5186293E71D700868F47 /* MockPresentationResponseFormatter.swift */, + ); + path = mocks; + sourceTree = ""; + }; + 552E518F293E71D700868F47 /* Resources */ = { + isa = PBXGroup; + children = ( + 552E5190293E71D700868F47 /* difwordlist.txt */, + ); + path = Resources; + sourceTree = ""; + }; + 552E5191293E71D700868F47 /* VCServices */ = { + isa = PBXGroup; + children = ( + 552E5192293E71D700868F47 /* IdentifierService.swift */, + 552E5193293E71D700868F47 /* VCUseCase.h */, + 552E5194293E71D700868F47 /* Resources */, + 552E5196293E71D700868F47 /* PairwiseService.swift */, + 552E5197293E71D700868F47 /* coreData */, + 552E519C293E71D700868F47 /* LinkedDomainService.swift */, + 552E519D293E71D700868F47 /* ServicesConstants.swift */, + 552E519E293E71D700868F47 /* DifWordList.swift */, + 552E519F293E71D700868F47 /* ExchangeService.swift */, + 552E51A0293E71D700868F47 /* VerifiableCredentialSDK.swift */, + 552E51A1293E71D700868F47 /* Info.plist */, + 552E51A2293E71D700868F47 /* IssuanceService.swift */, + 552E51A3293E71D700868F47 /* PresentationService.swift */, + ); + path = VCServices; + sourceTree = ""; + }; + 552E5194293E71D700868F47 /* Resources */ = { + isa = PBXGroup; + children = ( + 552E5195293E71D700868F47 /* difwordlist.txt */, + ); + path = Resources; + sourceTree = ""; + }; + 552E5197293E71D700868F47 /* coreData */ = { + isa = PBXGroup; + children = ( + 552E5198293E71D700868F47 /* CoreDataManager.swift */, + 552E5199293E71D700868F47 /* VerifiableCredentialDataModel.xcdatamodeld */, + 552E519B293E71D700868F47 /* IdentifierDatabase.swift */, + ); + path = coreData; + sourceTree = ""; + }; + 552E51A4293E71D700868F47 /* VCServicesTestApp */ = { + isa = PBXGroup; + children = ( + 552E51A5293E71D700868F47 /* ViewController.swift */, + 552E51A6293E71D700868F47 /* Assets.xcassets */, + 552E51A7293E71D700868F47 /* LaunchScreen.storyboard */, + 552E51A9293E71D700868F47 /* Main.storyboard */, + 552E51AB293E71D700868F47 /* AppDelegate.swift */, + 552E51AC293E71D700868F47 /* Info.plist */, + 552E51AD293E71D700868F47 /* SceneDelegate.swift */, + ); + path = VCServicesTestApp; + sourceTree = ""; + }; + 552E51AF293E71D700868F47 /* Products */ = { + isa = PBXGroup; + children = ( + 552E52BD293E71D700868F47 /* VCServices.framework */, + 552E52BF293E71D700868F47 /* VCServicesTests.xctest */, + 552E52C1293E71D700868F47 /* VCServicesApp.app */, + ); + name = Products; + sourceTree = ""; + }; + 552E51B2293E71D700868F47 /* VCToken */ = { + isa = PBXGroup; + children = ( + 552E51B3293E71D700868F47 /* VCTokenTests */, + 552E51C2293E71D700868F47 /* VCToken */, + 552E51D8293E71D700868F47 /* VCToken.xcodeproj */, + ); + path = VCToken; + sourceTree = ""; + }; + 552E51B3293E71D700868F47 /* VCTokenTests */ = { + isa = PBXGroup; + children = ( + 552E51B4293E71D700868F47 /* mocks */, + 552E51BA293E71D700868F47 /* JwsDecoderTests.swift */, + 552E51BB293E71D700868F47 /* TokenVerifierTests.swift */, + 552E51BC293E71D700868F47 /* ClaimsTest.swift */, + 552E51BD293E71D700868F47 /* JwsTokenTests.swift */, + 552E51BE293E71D700868F47 /* ECPublicJwkTests.swift */, + 552E51BF293E71D700868F47 /* JwsEncoderTests.swift */, + 552E51C0293E71D700868F47 /* Info.plist */, + 552E51C1293E71D700868F47 /* Secp256k1Tests.swift */, + ); + path = VCTokenTests; + sourceTree = ""; + }; + 552E51B4293E71D700868F47 /* mocks */ = { + isa = PBXGroup; + children = ( + 552E51B5293E71D700868F47 /* MockClaims.swift */, + 552E51B6293E71D700868F47 /* MockAlgorithm.swift */, + 552E51B7293E71D700868F47 /* MockVerifier.swift */, + 552E51B8293E71D700868F47 /* MockCryptoOperations.swift */, + 552E51B9293E71D700868F47 /* MockSigner.swift */, + ); + path = mocks; + sourceTree = ""; + }; + 552E51C2293E71D700868F47 /* VCToken */ = { + isa = PBXGroup; + children = ( + 552E51C3293E71D700868F47 /* Claims.swift */, + 552E51C4293E71D700868F47 /* JweEncoder.swift */, + 552E51C5293E71D700868F47 /* JweDecoder.swift */, + 552E51C6293E71D700868F47 /* VCTokenError.swift */, + 552E51C7293E71D700868F47 /* algorithms */, + 552E51CB293E71D700868F47 /* JWK.swift */, + 552E51CC293E71D700868F47 /* Header.swift */, + 552E51CD293E71D700868F47 /* JwsEncoder.swift */, + 552E51CE293E71D700868F47 /* VCToken.h */, + 552E51CF293E71D700868F47 /* JweToken.swift */, + 552E51D0293E71D700868F47 /* JwsDecoder.swift */, + 552E51D1293E71D700868F47 /* TokenVerifier.swift */, + 552E51D2293E71D700868F47 /* protocols */, + 552E51D5293E71D700868F47 /* Info.plist */, + 552E51D6293E71D700868F47 /* JwsToken.swift */, + 552E51D7293E71D700868F47 /* KeyId.swift */, + ); + path = VCToken; + sourceTree = ""; + }; + 552E51C7293E71D700868F47 /* algorithms */ = { + isa = PBXGroup; + children = ( + 552E51C8293E71D700868F47 /* PbesJwe.swift */, + 552E51C9293E71D700868F47 /* ECPublicJwk.swift */, + 552E51CA293E71D700868F47 /* Secp256k1Signer.swift */, + ); + path = algorithms; + sourceTree = ""; + }; + 552E51D2293E71D700868F47 /* protocols */ = { + isa = PBXGroup; + children = ( + 552E51D3293E71D700868F47 /* TokenVerifying.swift */, + 552E51D4293E71D700868F47 /* TokenSigning.swift */, + ); + path = protocols; + sourceTree = ""; + }; + 552E51D9293E71D700868F47 /* Products */ = { + isa = PBXGroup; + children = ( + 552E52C5293E71D700868F47 /* VCToken.framework */, + 552E52C7293E71D700868F47 /* VCTokenTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 552E51E0293E71D700868F47 /* Submodules */ = { + isa = PBXGroup; + children = ( + 55E33685293E7B7D00CD2ED7 /* Secp256k1.xcodeproj */, + 55E3366F293E7B5F00CD2ED7 /* PromiseKit.xcodeproj */, + 55E33666293E7B5000CD2ED7 /* PMKFoundation.xcodeproj */, + ); + path = Submodules; + sourceTree = ""; + }; + 552E51E9293E71D700868F47 /* .github */ = { + isa = PBXGroup; + children = ( + 552E51EA293E71D700868F47 /* CODEOWNERS */, + ); + path = .github; + sourceTree = ""; + }; + 552E51EB293E71D700868F47 /* VCCrypto */ = { + isa = PBXGroup; + children = ( + 552E51EC293E71D700868F47 /* VCCryptoTests */, + 552E5203293E71D700868F47 /* VCCrypto */, + 552E5229293E71D700868F47 /* VCCrypto.xcodeproj */, + 552E522C293E71D700868F47 /* VCCryptoTestApp */, + ); + path = VCCrypto; + sourceTree = ""; + }; + 552E51EC293E71D700868F47 /* VCCryptoTests */ = { + isa = PBXGroup; + children = ( + 552E51ED293E71D700868F47 /* Sha256Tests.swift */, + 552E51EE293E71D700868F47 /* Mocks */, + 552E51F6293E71D700868F47 /* KeyManagementOperationsTests.swift */, + 552E51F7293E71D700868F47 /* Sha512Tests.swift */, + 552E51F8293E71D700868F47 /* AesTests.swift */, + 552E51F9293E71D700868F47 /* CryptoOperationsTests.swift */, + 552E51FA293E71D700868F47 /* Secp256k1PublicKeyTests.swift */, + 552E51FB293E71D700868F47 /* ES256kTests.swift */, + 552E51FC293E71D700868F47 /* PbkdfTests.swift */, + 552E51FD293E71D700868F47 /* KeychainSecretStoreTests.swift */, + 552E51FE293E71D700868F47 /* EdDSATests.swift */, + 552E51FF293E71D700868F47 /* Random32BytesSecretTests.swift */, + 552E5200293E71D700868F47 /* HmacSha512Tests.swift */, + 552E5201293E71D700868F47 /* Info.plist */, + 552E5202293E71D700868F47 /* Secp256k1Tests.swift */, + ); + path = VCCryptoTests; + sourceTree = ""; + }; + 552E51EE293E71D700868F47 /* Mocks */ = { + isa = PBXGroup; + children = ( + 552E51EF293E71D700868F47 /* Utf8TestData.swift */, + 552E51F0293E71D700868F47 /* VCSDKConfigurationMock.swift */, + 552E51F1293E71D700868F47 /* HashingMock.swift */, + 552E51F2293E71D700868F47 /* SecretStoreMock.swift */, + 552E51F3293E71D700868F47 /* SecretMock.swift */, + 552E51F4293E71D700868F47 /* SigningMock.swift */, + 552E51F5293E71D700868F47 /* PublicKeyMock.swift */, + ); + path = Mocks; + sourceTree = ""; + }; + 552E5203293E71D700868F47 /* VCCrypto */ = { + isa = PBXGroup; + children = ( + 552E5204293E71D700868F47 /* KeychainSecretStore.swift */, + 552E5205293E71D700868F47 /* Algo */, + 552E5212293E71D700868F47 /* Extensions */, + 552E5215293E71D700868F47 /* KeyManagementOperations.swift */, + 552E5216293E71D700868F47 /* CryptoOperations.swift */, + 552E5217293E71D700868F47 /* Keys */, + 552E521E293E71D700868F47 /* SecretStoring.swift */, + 552E521F293E71D700868F47 /* Protocols */, + 552E5227293E71D700868F47 /* VCCrypto.h */, + 552E5228293E71D700868F47 /* Info.plist */, + ); + path = VCCrypto; + sourceTree = ""; + }; + 552E5205293E71D700868F47 /* Algo */ = { + isa = PBXGroup; + children = ( + 552E5206293E71D700868F47 /* Aes.swift */, + 552E5207293E71D700868F47 /* HmacSha512.swift */, + 552E5208293E71D700868F47 /* Sha256.swift */, + 552E5209293E71D700868F47 /* SupportedSigningAlgorithms.swift */, + 552E520A293E71D700868F47 /* EdDSA.swift */, + 552E520B293E71D700868F47 /* Pbkdf.swift */, + 552E520C293E71D700868F47 /* SigningAlgorithm.swift */, + 552E520D293E71D700868F47 /* HmacSha2AesCbc.swift */, + 552E520E293E71D700868F47 /* ES256k.swift */, + 552E520F293E71D700868F47 /* Secp256k1.swift */, + 552E5210293E71D700868F47 /* HmacSha2.swift */, + 552E5211293E71D700868F47 /* Sha512.swift */, + ); + path = Algo; + sourceTree = ""; + }; + 552E5212293E71D700868F47 /* Extensions */ = { + isa = PBXGroup; + children = ( + 552E5213293E71D700868F47 /* Data+Hex.swift */, + 552E5214293E71D700868F47 /* Data+Base64.swift */, + ); + path = Extensions; + sourceTree = ""; + }; + 552E5217293E71D700868F47 /* Keys */ = { + isa = PBXGroup; + children = ( + 552E5218293E71D700868F47 /* PublicKey.swift */, + 552E5219293E71D700868F47 /* EphemeralSecret.swift */, + 552E521A293E71D700868F47 /* ED25519PublicKey.swift */, + 552E521B293E71D700868F47 /* Secret.swift */, + 552E521C293E71D700868F47 /* Random32BytesSecret.swift */, + 552E521D293E71D700868F47 /* Secp256k1PublicKey.swift */, + ); + path = Keys; + sourceTree = ""; + }; + 552E521F293E71D700868F47 /* Protocols */ = { + isa = PBXGroup; + children = ( + 552E5220293E71D700868F47 /* Signing.swift */, + 552E5221293E71D700868F47 /* VCSDKConfigurable.swift */, + 552E5222293E71D700868F47 /* Hashing.swift */, + 552E5223293E71D700868F47 /* CryptoOperating.swift */, + 552E5224293E71D700868F47 /* SupportedCurve.swift */, + 552E5225293E71D700868F47 /* SupportedHashAlgorithm.swift */, + 552E5226293E71D700868F47 /* KeyManagementOperating.swift */, + ); + path = Protocols; + sourceTree = ""; + }; + 552E522A293E71D700868F47 /* Products */ = { + isa = PBXGroup; + children = ( + 552E52A5293E71D700868F47 /* VCCrypto.framework */, + 552E52A7293E71D700868F47 /* VCCryptoTests.xctest */, + 552E52A9293E71D700868F47 /* VCCryptoTestApp.app */, + ); + name = Products; + sourceTree = ""; + }; + 552E522C293E71D700868F47 /* VCCryptoTestApp */ = { + isa = PBXGroup; + children = ( + 552E522D293E71D700868F47 /* Assets.xcassets */, + 552E522E293E71D700868F47 /* Preview Content */, + 552E5230293E71D700868F47 /* LaunchScreen.storyboard */, + 552E5232293E71D700868F47 /* AppDelegate.swift */, + 552E5233293E71D700868F47 /* ContentView.swift */, + 552E5234293E71D700868F47 /* Info.plist */, + 552E5235293E71D700868F47 /* SceneDelegate.swift */, + ); + path = VCCryptoTestApp; + sourceTree = ""; + }; + 552E522E293E71D700868F47 /* Preview Content */ = { + isa = PBXGroup; + children = ( + 552E522F293E71D700868F47 /* Preview Assets.xcassets */, + ); + path = "Preview Content"; + sourceTree = ""; + }; + 552E5236293E71D700868F47 /* VCNetworking */ = { + isa = PBXGroup; + children = ( + 552E5237293E71D700868F47 /* VCNetworking.xcodeproj */, + 552E523A293E71D700868F47 /* VCNetworkingTests */, + 552E5260293E71D700868F47 /* VCNetworking */, + ); + path = VCNetworking; + sourceTree = ""; + }; + 552E5238293E71D700868F47 /* Products */ = { + isa = PBXGroup; + children = ( + 552E52B3293E71D700868F47 /* VCNetworking.framework */, + 552E52B5293E71D700868F47 /* VCNetworkingTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 552E523A293E71D700868F47 /* VCNetworkingTests */ = { + isa = PBXGroup; + children = ( + 552E523B293E71D700868F47 /* mocks */, + 552E5241293E71D700868F47 /* util */, + 552E5243293E71D700868F47 /* successHandlers */, + 552E5245293E71D700868F47 /* retryHandlers */, + 552E5247293E71D700868F47 /* operations */, + 552E5252293E71D700868F47 /* extensions */, + 552E5254293E71D700868F47 /* failureHandlers */, + 552E5256293E71D700868F47 /* encoders */, + 552E5259293E71D700868F47 /* decoders */, + 552E525F293E71D700868F47 /* Info.plist */, + ); + path = VCNetworkingTests; + sourceTree = ""; + }; + 552E523B293E71D700868F47 /* mocks */ = { + isa = PBXGroup; + children = ( + 552E523C293E71D700868F47 /* MockNetworkOperation.swift */, + 552E523D293E71D700868F47 /* TestData.swift */, + 552E523E293E71D700868F47 /* UrlProtocolMock.swift */, + 552E523F293E71D700868F47 /* MockObject.swift */, + 552E5240293E71D700868F47 /* MockDecoder.swift */, + ); + path = mocks; + sourceTree = ""; + }; + 552E5241293E71D700868F47 /* util */ = { + isa = PBXGroup; + children = ( + 552E5242293E71D700868F47 /* HelperNetworkFunctionsTests.swift */, + ); + path = util; + sourceTree = ""; + }; + 552E5243293E71D700868F47 /* successHandlers */ = { + isa = PBXGroup; + children = ( + 552E5244293E71D700868F47 /* SimpleSuccessHandlerTests.swift */, + ); + path = successHandlers; + sourceTree = ""; + }; + 552E5245293E71D700868F47 /* retryHandlers */ = { + isa = PBXGroup; + children = ( + 552E5246293E71D700868F47 /* NoRetryTests.swift */, + ); + path = retryHandlers; + sourceTree = ""; + }; + 552E5247293E71D700868F47 /* operations */ = { + isa = PBXGroup; + children = ( + 552E5248293E71D700868F47 /* post */, + 552E524C293E71D700868F47 /* fetch */, + 552E5251293E71D700868F47 /* NetworkOperationTests.swift */, + ); + path = operations; + sourceTree = ""; + }; + 552E5248293E71D700868F47 /* post */ = { + isa = PBXGroup; + children = ( + 552E5249293E71D700868F47 /* PostIssuanceResponseOperationTests.swift */, + 552E524A293E71D700868F47 /* PostPresentationResponseOperationTests.swift */, + 552E524B293E71D700868F47 /* PostExchangeRequestOperationTests.swift */, + ); + path = post; + sourceTree = ""; + }; + 552E524C293E71D700868F47 /* fetch */ = { + isa = PBXGroup; + children = ( + 552E524D293E71D700868F47 /* FetchDIDDocumentOperationTests.swift */, + 552E524E293E71D700868F47 /* FetchWellKnownConfigDocumentOperationTests.swift */, + 552E524F293E71D700868F47 /* FetchContractOperationTests.swift */, + 552E5250293E71D700868F47 /* FetchPresentationRequestOperationTests.swift */, + ); + path = fetch; + sourceTree = ""; + }; + 552E5252293E71D700868F47 /* extensions */ = { + isa = PBXGroup; + children = ( + 552E5253293E71D700868F47 /* String+PercentEncodingTests.swift */, + ); + path = extensions; + sourceTree = ""; + }; + 552E5254293E71D700868F47 /* failureHandlers */ = { + isa = PBXGroup; + children = ( + 552E5255293E71D700868F47 /* SimpleFailureHandlerTests.swift */, + ); + path = failureHandlers; + sourceTree = ""; + }; + 552E5256293E71D700868F47 /* encoders */ = { + isa = PBXGroup; + children = ( + 552E5257293E71D700868F47 /* ExchangeRequestEncoderTests.swift */, + 552E5258293E71D700868F47 /* IssuanceResponseEncoderTests.swift */, + ); + path = encoders; + sourceTree = ""; + }; + 552E5259293E71D700868F47 /* decoders */ = { + isa = PBXGroup; + children = ( + 552E525A293E71D700868F47 /* PresentationServiceResponseDecoderTests.swift */, + 552E525B293E71D700868F47 /* ContractDecoderTests.swift */, + 552E525C293E71D700868F47 /* PresentationRequestDecoderTests.swift */, + 552E525D293E71D700868F47 /* DIDDocumentDecoderTests.swift */, + 552E525E293E71D700868F47 /* IssuanceServiceResponseDecoderTests.swift */, + ); + path = decoders; + sourceTree = ""; + }; + 552E5260293E71D700868F47 /* VCNetworking */ = { + isa = PBXGroup; + children = ( + 552E5261293E71D700868F47 /* NetworkingError.swift */, + 552E5262293E71D700868F47 /* util */, + 552E5264293E71D700868F47 /* ExchangeNetworkCalls.swift */, + 552E5265293E71D700868F47 /* WellKnownConfigDocumentNetworkCalls.swift */, + 552E5266293E71D700868F47 /* successHandlers */, + 552E5269293E71D700868F47 /* retryHandlers */, + 552E526C293E71D700868F47 /* IssuanceNetworkCalls.swift */, + 552E526D293E71D700868F47 /* operations */, + 552E527A293E71D700868F47 /* extensions */, + 552E527D293E71D700868F47 /* failureHandlers */, + 552E5280293E71D700868F47 /* NetworkingConstants.swift */, + 552E5281293E71D700868F47 /* encoders */, + 552E5287293E71D700868F47 /* PresentationNetworkCalls.swift */, + 552E5288293E71D700868F47 /* decoders */, + 552E5291293E71D700868F47 /* DIDDocumentNetworkCalls.swift */, + 552E5292293E71D700868F47 /* networking.h */, + 552E5293293E71D700868F47 /* Info.plist */, + ); + path = VCNetworking; + sourceTree = ""; + }; + 552E5262293E71D700868F47 /* util */ = { + isa = PBXGroup; + children = ( + 552E5263293E71D700868F47 /* HelperNetworkFunctions.swift */, + ); + path = util; + sourceTree = ""; + }; + 552E5266293E71D700868F47 /* successHandlers */ = { + isa = PBXGroup; + children = ( + 552E5267293E71D700868F47 /* SimpleSuccessHandler.swift */, + 552E5268293E71D700868F47 /* SuccessHandler.swift */, + ); + path = successHandlers; + sourceTree = ""; + }; + 552E5269293E71D700868F47 /* retryHandlers */ = { + isa = PBXGroup; + children = ( + 552E526A293E71D700868F47 /* NoRetry.swift */, + 552E526B293E71D700868F47 /* RetryHandler.swift */, + ); + path = retryHandlers; + sourceTree = ""; + }; + 552E526D293E71D700868F47 /* operations */ = { + isa = PBXGroup; + children = ( + 552E526E293E71D700868F47 /* NetworkOperation.swift */, + 552E526F293E71D700868F47 /* post */, + 552E5275293E71D700868F47 /* fetch */, + ); + path = operations; + sourceTree = ""; + }; + 552E526F293E71D700868F47 /* post */ = { + isa = PBXGroup; + children = ( + 552E5270293E71D700868F47 /* PostPresentationResponseOperation.swift */, + 552E5271293E71D700868F47 /* PostNetworkOperation.swift */, + 552E5272293E71D700868F47 /* PostIssuanceResponseOperation.swift */, + 552E5273293E71D700868F47 /* PostIssuanceCompletionResponse.swift */, + 552E5274293E71D700868F47 /* PostExchangeRequestOperation.swift */, + ); + path = post; + sourceTree = ""; + }; + 552E5275293E71D700868F47 /* fetch */ = { + isa = PBXGroup; + children = ( + 552E5276293E71D700868F47 /* FetchDIDDocumentOperation.swift */, + 552E5277293E71D700868F47 /* FetchContractOperation.swift */, + 552E5278293E71D700868F47 /* FetchWellKnownConfigDocumentOperation.swift */, + 552E5279293E71D700868F47 /* FetchPresentationRequestOperation.swift */, + ); + path = fetch; + sourceTree = ""; + }; + 552E527A293E71D700868F47 /* extensions */ = { + isa = PBXGroup; + children = ( + 552E527B293E71D700868F47 /* String+PercentEncoding.swift */, + 552E527C293E71D700868F47 /* URL+PercentEncodedString.swift */, + ); + path = extensions; + sourceTree = ""; + }; + 552E527D293E71D700868F47 /* failureHandlers */ = { + isa = PBXGroup; + children = ( + 552E527E293E71D700868F47 /* FailureHandler.swift */, + 552E527F293E71D700868F47 /* SimpleFailureHandler.swift */, + ); + path = failureHandlers; + sourceTree = ""; + }; + 552E5281293E71D700868F47 /* encoders */ = { + isa = PBXGroup; + children = ( + 552E5282293E71D700868F47 /* ExchangeRequestEncoder.swift */, + 552E5283293E71D700868F47 /* PresentationResponseEncoder.swift */, + 552E5284293E71D700868F47 /* Encoding.swift */, + 552E5285293E71D700868F47 /* IssuanceCompletionResponseEncoder.swift */, + 552E5286293E71D700868F47 /* IssuanceResponseEncoder.swift */, + ); + path = encoders; + sourceTree = ""; + }; + 552E5288293E71D700868F47 /* decoders */ = { + isa = PBXGroup; + children = ( + 552E5289293E71D700868F47 /* WellKnownConfigDocumentDecoder.swift */, + 552E528A293E71D700868F47 /* DIDDocumentDecoder.swift */, + 552E528B293E71D700868F47 /* BasicServiceResponseDecoder.swift */, + 552E528C293E71D700868F47 /* ContractDecoder.swift */, + 552E528D293E71D700868F47 /* IssuanceServiceResponseDecoder.swift */, + 552E528E293E71D700868F47 /* PresentationRequestDecoder.swift */, + 552E528F293E71D700868F47 /* Decoding.swift */, + 552E5290293E71D700868F47 /* PresentationServiceResponseDecoder.swift */, + ); + path = decoders; + sourceTree = ""; + }; + 552E5294293E71D700868F47 /* VCSamples */ = { + isa = PBXGroup; + children = ( + 552E5295293E71D700868F47 /* VCSamples.xcodeproj */, + 552E5298293E71D700868F47 /* VCSamples */, + ); + path = VCSamples; + sourceTree = ""; + }; + 552E5296293E71D700868F47 /* Products */ = { + isa = PBXGroup; + children = ( + 552E52B8293E71D700868F47 /* VCSamples.framework */, + ); + name = Products; + sourceTree = ""; + }; + 552E5298293E71D700868F47 /* VCSamples */ = { + isa = PBXGroup; + children = ( + 552E5299293E71D700868F47 /* IssuanceSample.swift */, + 552E529A293E71D700868F47 /* PresentationSample.swift */, + 552E529B293E71D700868F47 /* VCSamples.h */, + 552E529C293E71D700868F47 /* Info.plist */, + ); + path = VCSamples; + sourceTree = ""; + }; + 552E544A293E736C00868F47 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; + 55E33667293E7B5000CD2ED7 /* Products */ = { + isa = PBXGroup; + children = ( + 55E3366C293E7B5000CD2ED7 /* PMKFoundation.framework */, + 55E3366E293E7B5000CD2ED7 /* PMKNSTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 55E33670293E7B5F00CD2ED7 /* Products */ = { + isa = PBXGroup; + children = ( + 55E33679293E7B5F00CD2ED7 /* PromiseKit.framework */, + 55E3367B293E7B5F00CD2ED7 /* PMKA+Tests.xctest */, + 55E3367D293E7B5F00CD2ED7 /* PMKBridgeTests.xctest */, + 55E3367F293E7B5F00CD2ED7 /* PMKCoreTests.xctest */, + 55E33681293E7B5F00CD2ED7 /* PMKDeprecatedTests.xctest */, + 55E33683293E7B5F00CD2ED7 /* PMKJSA+Tests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 55E33686293E7B7D00CD2ED7 /* Products */ = { + isa = PBXGroup; + children = ( + 55E3368A293E7B7E00CD2ED7 /* Secp256k1.framework */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 552E508D293E6AB200868F47 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 552E5371293E71D800868F47 /* VCUseCase.h in Headers */, + 552E5432293E71D800868F47 /* VCSamples.h in Headers */, + 552E542E293E71D800868F47 /* networking.h in Headers */, + 552E539E293E71D800868F47 /* VCToken.h in Headers */, + 552E53E4293E71D800868F47 /* VCCrypto.h in Headers */, + 552E52CB293E71D700868F47 /* VCEntities.h in Headers */, + 552E50A1293E6AB200868F47 /* WalletLibrary.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 552E5091293E6AB200868F47 /* WalletLibrary */ = { + isa = PBXNativeTarget; + buildConfigurationList = 552E50A4293E6AB200868F47 /* Build configuration list for PBXNativeTarget "WalletLibrary" */; + buildPhases = ( + 552E508D293E6AB200868F47 /* Headers */, + 552E508E293E6AB200868F47 /* Sources */, + 552E508F293E6AB200868F47 /* Frameworks */, + 552E5090293E6AB200868F47 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = WalletLibrary; + productName = WalletLibrary; + productReference = 552E5092293E6AB200868F47 /* WalletLibrary.framework */; + productType = "com.apple.product-type.framework"; + }; + 552E5099293E6AB200868F47 /* WalletLibraryTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 552E50A7293E6AB200868F47 /* Build configuration list for PBXNativeTarget "WalletLibraryTests" */; + buildPhases = ( + 552E5096293E6AB200868F47 /* Sources */, + 552E5097293E6AB200868F47 /* Frameworks */, + 552E5098293E6AB200868F47 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 552E509D293E6AB200868F47 /* PBXTargetDependency */, + ); + name = WalletLibraryTests; + productName = WalletLibraryTests; + productReference = 552E509A293E6AB200868F47 /* WalletLibraryTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 552E5089293E6AB100868F47 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1400; + LastUpgradeCheck = 1400; + TargetAttributes = { + 552E5091293E6AB200868F47 = { + CreatedOnToolsVersion = 14.0.1; + LastSwiftMigration = 1400; + }; + 552E5099293E6AB200868F47 = { + CreatedOnToolsVersion = 14.0.1; + }; + }; + }; + buildConfigurationList = 552E508C293E6AB100868F47 /* Build configuration list for PBXProject "WalletLibrary" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 552E5088293E6AB100868F47; + productRefGroup = 552E5093293E6AB200868F47 /* Products */; + projectDirPath = ""; + projectReferences = ( + { + ProductGroup = 55E33667293E7B5000CD2ED7 /* Products */; + ProjectRef = 55E33666293E7B5000CD2ED7 /* PMKFoundation.xcodeproj */; + }, + { + ProductGroup = 55E33670293E7B5F00CD2ED7 /* Products */; + ProjectRef = 55E3366F293E7B5F00CD2ED7 /* PromiseKit.xcodeproj */; + }, + { + ProductGroup = 55E33686293E7B7D00CD2ED7 /* Products */; + ProjectRef = 55E33685293E7B7D00CD2ED7 /* Secp256k1.xcodeproj */; + }, + { + ProductGroup = 552E522A293E71D700868F47 /* Products */; + ProjectRef = 552E5229293E71D700868F47 /* VCCrypto.xcodeproj */; + }, + { + ProductGroup = 552E50BE293E71D600868F47 /* Products */; + ProjectRef = 552E50BD293E71D600868F47 /* VCEntities.xcodeproj */; + }, + { + ProductGroup = 552E5238293E71D700868F47 /* Products */; + ProjectRef = 552E5237293E71D700868F47 /* VCNetworking.xcodeproj */; + }, + { + ProductGroup = 552E5296293E71D700868F47 /* Products */; + ProjectRef = 552E5295293E71D700868F47 /* VCSamples.xcodeproj */; + }, + { + ProductGroup = 552E51AF293E71D700868F47 /* Products */; + ProjectRef = 552E51AE293E71D700868F47 /* VCServices.xcodeproj */; + }, + { + ProductGroup = 552E51D9293E71D700868F47 /* Products */; + ProjectRef = 552E51D8293E71D700868F47 /* VCToken.xcodeproj */; + }, + ); + projectRoot = ""; + targets = ( + 552E5091293E6AB200868F47 /* WalletLibrary */, + 552E5099293E6AB200868F47 /* WalletLibraryTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXReferenceProxy section */ + 552E52A5293E71D700868F47 /* VCCrypto.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = VCCrypto.framework; + remoteRef = 552E52A4293E71D700868F47 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 552E52A7293E71D700868F47 /* VCCryptoTests.xctest */ = { + isa = PBXReferenceProxy; + fileType = wrapper.cfbundle; + path = VCCryptoTests.xctest; + remoteRef = 552E52A6293E71D700868F47 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 552E52A9293E71D700868F47 /* VCCryptoTestApp.app */ = { + isa = PBXReferenceProxy; + fileType = wrapper.application; + path = VCCryptoTestApp.app; + remoteRef = 552E52A8293E71D700868F47 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 552E52AD293E71D700868F47 /* VCEntities.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = VCEntities.framework; + remoteRef = 552E52AC293E71D700868F47 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 552E52AF293E71D700868F47 /* VCEntitiesTests.xctest */ = { + isa = PBXReferenceProxy; + fileType = wrapper.cfbundle; + path = VCEntitiesTests.xctest; + remoteRef = 552E52AE293E71D700868F47 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 552E52B3293E71D700868F47 /* VCNetworking.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = VCNetworking.framework; + remoteRef = 552E52B2293E71D700868F47 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 552E52B5293E71D700868F47 /* VCNetworkingTests.xctest */ = { + isa = PBXReferenceProxy; + fileType = wrapper.cfbundle; + path = VCNetworkingTests.xctest; + remoteRef = 552E52B4293E71D700868F47 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 552E52B8293E71D700868F47 /* VCSamples.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = VCSamples.framework; + remoteRef = 552E52B7293E71D700868F47 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 552E52BD293E71D700868F47 /* VCServices.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = VCServices.framework; + remoteRef = 552E52BC293E71D700868F47 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 552E52BF293E71D700868F47 /* VCServicesTests.xctest */ = { + isa = PBXReferenceProxy; + fileType = wrapper.cfbundle; + path = VCServicesTests.xctest; + remoteRef = 552E52BE293E71D700868F47 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 552E52C1293E71D700868F47 /* VCServicesApp.app */ = { + isa = PBXReferenceProxy; + fileType = wrapper.application; + path = VCServicesApp.app; + remoteRef = 552E52C0293E71D700868F47 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 552E52C5293E71D700868F47 /* VCToken.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = VCToken.framework; + remoteRef = 552E52C4293E71D700868F47 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 552E52C7293E71D700868F47 /* VCTokenTests.xctest */ = { + isa = PBXReferenceProxy; + fileType = wrapper.cfbundle; + path = VCTokenTests.xctest; + remoteRef = 552E52C6293E71D700868F47 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 55E3366C293E7B5000CD2ED7 /* PMKFoundation.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = PMKFoundation.framework; + remoteRef = 55E3366B293E7B5000CD2ED7 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 55E3366E293E7B5000CD2ED7 /* PMKNSTests.xctest */ = { + isa = PBXReferenceProxy; + fileType = wrapper.cfbundle; + path = PMKNSTests.xctest; + remoteRef = 55E3366D293E7B5000CD2ED7 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 55E33679293E7B5F00CD2ED7 /* PromiseKit.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = PromiseKit.framework; + remoteRef = 55E33678293E7B5F00CD2ED7 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 55E3367B293E7B5F00CD2ED7 /* PMKA+Tests.xctest */ = { + isa = PBXReferenceProxy; + fileType = wrapper.cfbundle; + path = "PMKA+Tests.xctest"; + remoteRef = 55E3367A293E7B5F00CD2ED7 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 55E3367D293E7B5F00CD2ED7 /* PMKBridgeTests.xctest */ = { + isa = PBXReferenceProxy; + fileType = wrapper.cfbundle; + path = PMKBridgeTests.xctest; + remoteRef = 55E3367C293E7B5F00CD2ED7 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 55E3367F293E7B5F00CD2ED7 /* PMKCoreTests.xctest */ = { + isa = PBXReferenceProxy; + fileType = wrapper.cfbundle; + path = PMKCoreTests.xctest; + remoteRef = 55E3367E293E7B5F00CD2ED7 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 55E33681293E7B5F00CD2ED7 /* PMKDeprecatedTests.xctest */ = { + isa = PBXReferenceProxy; + fileType = wrapper.cfbundle; + path = PMKDeprecatedTests.xctest; + remoteRef = 55E33680293E7B5F00CD2ED7 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 55E33683293E7B5F00CD2ED7 /* PMKJSA+Tests.xctest */ = { + isa = PBXReferenceProxy; + fileType = wrapper.cfbundle; + path = "PMKJSA+Tests.xctest"; + remoteRef = 55E33682293E7B5F00CD2ED7 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 55E3368A293E7B7E00CD2ED7 /* Secp256k1.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = Secp256k1.framework; + remoteRef = 55E33689293E7B7E00CD2ED7 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; +/* End PBXReferenceProxy section */ + +/* Begin PBXResourcesBuildPhase section */ + 552E5090293E6AB200868F47 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 552E5098293E6AB200868F47 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 552E508E293E6AB200868F47 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 552E546B293E759300868F47 /* VerifiedIdFlow.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 552E5096293E6AB200868F47 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 552E50A0293E6AB200868F47 /* VerifiedIdFlowTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 552E509D293E6AB200868F47 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 552E5091293E6AB200868F47 /* WalletLibrary */; + targetProxy = 552E509C293E6AB200868F47 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 552E51A7293E71D700868F47 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 552E51A8293E71D700868F47 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; + 552E51A9293E71D700868F47 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 552E51AA293E71D700868F47 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 552E5230293E71D700868F47 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 552E5231293E71D700868F47 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 552E50A2293E6AB200868F47 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 552E50A3293E6AB200868F47 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 552E50A5293E6AB200868F47 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = UBF8T346G9; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + LD_RUNPATH_SEARCH_PATHS = ( + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = ( + "@executable_path/../Frameworks", + "@loader_path/Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 12.3; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.microsoft.entra.verifiedid.WalletLibrary; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = auto; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 552E50A6293E6AB200868F47 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = UBF8T346G9; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + LD_RUNPATH_SEARCH_PATHS = ( + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = ( + "@executable_path/../Frameworks", + "@loader_path/Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 12.3; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.microsoft.entra.verifiedid.WalletLibrary; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = auto; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + 552E50A8293E6AB200868F47 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = UBF8T346G9; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + MACOSX_DEPLOYMENT_TARGET = 12.3; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.microsoft.entra.verifiedid.WalletLibraryTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = auto; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 552E50A9293E6AB200868F47 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = UBF8T346G9; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + MACOSX_DEPLOYMENT_TARGET = 12.3; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.microsoft.entra.verifiedid.WalletLibraryTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = auto; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 552E508C293E6AB100868F47 /* Build configuration list for PBXProject "WalletLibrary" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 552E50A2293E6AB200868F47 /* Debug */, + 552E50A3293E6AB200868F47 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 552E50A4293E6AB200868F47 /* Build configuration list for PBXNativeTarget "WalletLibrary" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 552E50A5293E6AB200868F47 /* Debug */, + 552E50A6293E6AB200868F47 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 552E50A7293E6AB200868F47 /* Build configuration list for PBXNativeTarget "WalletLibraryTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 552E50A8293E6AB200868F47 /* Debug */, + 552E50A9293E6AB200868F47 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCVersionGroup section */ + 552E5199293E71D700868F47 /* VerifiableCredentialDataModel.xcdatamodeld */ = { + isa = XCVersionGroup; + children = ( + 552E519A293E71D700868F47 /* Identifier.xcdatamodel */, + ); + currentVersion = 552E519A293E71D700868F47 /* Identifier.xcdatamodel */; + path = VerifiableCredentialDataModel.xcdatamodeld; + sourceTree = ""; + versionGroupType = wrapper.xcdatamodel; + }; +/* End XCVersionGroup section */ + }; + rootObject = 552E5089293E6AB100868F47 /* Project object */; +} diff --git a/WalletLibrary/WalletLibrary.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/WalletLibrary/WalletLibrary.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..919434a6 --- /dev/null +++ b/WalletLibrary/WalletLibrary.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/WalletLibrary/WalletLibrary.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/WalletLibrary/WalletLibrary.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/WalletLibrary/WalletLibrary.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/WalletLibrary/WalletLibrary.xcodeproj/xcshareddata/xcschemes/WalletLibrary.xcscheme b/WalletLibrary/WalletLibrary.xcodeproj/xcshareddata/xcschemes/WalletLibrary.xcscheme new file mode 100644 index 00000000..34b863c7 --- /dev/null +++ b/WalletLibrary/WalletLibrary.xcodeproj/xcshareddata/xcschemes/WalletLibrary.xcscheme @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/WalletLibrary/WalletLibrary/WalletLibrary.h b/WalletLibrary/WalletLibrary/WalletLibrary.h new file mode 100644 index 00000000..f9d66ae9 --- /dev/null +++ b/WalletLibrary/WalletLibrary/WalletLibrary.h @@ -0,0 +1,16 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +#import + +//! Project version number for WalletLibrary. +FOUNDATION_EXPORT double WalletLibraryVersionNumber; + +//! Project version string for WalletLibrary. +FOUNDATION_EXPORT const unsigned char WalletLibraryVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + From 75fca955c95c0cb626befaa93e31af830d93e62a Mon Sep 17 00:00:00 2001 From: Sydney Morton Date: Mon, 5 Dec 2022 16:03:30 -0500 Subject: [PATCH 03/38] Create workspace --- .../contents.xcworkspacedata | 10 ++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 +++++ .../xcshareddata/WorkspaceSettings.xcsettings | 8 +++++ .../WalletLibrary.xcodeproj/project.pbxproj | 2 +- .../WalletLibrary/VerifiedIdFlow.swift | 16 ++++++++++ .../VerifiedIdFlowTests.swift | 31 +++++++++++++++++++ 6 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 WalletLibrary.xcworkspace/contents.xcworkspacedata create mode 100644 WalletLibrary.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 WalletLibrary.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 WalletLibrary/WalletLibrary/VerifiedIdFlow.swift create mode 100644 WalletLibrary/WalletLibraryTests/VerifiedIdFlowTests.swift diff --git a/WalletLibrary.xcworkspace/contents.xcworkspacedata b/WalletLibrary.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..94fab647 --- /dev/null +++ b/WalletLibrary.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/WalletLibrary.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/WalletLibrary.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/WalletLibrary.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/WalletLibrary.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/WalletLibrary.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/WalletLibrary.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj b/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj index 94587898..ceab8b5d 100644 --- a/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj +++ b/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj @@ -589,7 +589,6 @@ 552E5088293E6AB100868F47 = { isa = PBXGroup; children = ( - 552E50AB293E6F5500868F47 /* VerifiedIdFlow.swift */, 552E50AA293E6B6B00868F47 /* Submodules */, 552E5094293E6AB200868F47 /* WalletLibrary */, 552E509E293E6AB200868F47 /* WalletLibraryTests */, @@ -610,6 +609,7 @@ 552E5094293E6AB200868F47 /* WalletLibrary */ = { isa = PBXGroup; children = ( + 552E50AB293E6F5500868F47 /* VerifiedIdFlow.swift */, 552E5095293E6AB200868F47 /* WalletLibrary.h */, ); path = WalletLibrary; diff --git a/WalletLibrary/WalletLibrary/VerifiedIdFlow.swift b/WalletLibrary/WalletLibrary/VerifiedIdFlow.swift new file mode 100644 index 00000000..31eb2567 --- /dev/null +++ b/WalletLibrary/WalletLibrary/VerifiedIdFlow.swift @@ -0,0 +1,16 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +import Foundation +import VCEntities + +public class VerifiedIdFlow { + + public init() {} + + public func initiate() -> String { + return "Hello World" + } +} diff --git a/WalletLibrary/WalletLibraryTests/VerifiedIdFlowTests.swift b/WalletLibrary/WalletLibraryTests/VerifiedIdFlowTests.swift new file mode 100644 index 00000000..09b089dc --- /dev/null +++ b/WalletLibrary/WalletLibraryTests/VerifiedIdFlowTests.swift @@ -0,0 +1,31 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +import XCTest +@testable import WalletLibrary + +class VerifiedIdFlowTests: XCTestCase { + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testInitiateFlow() throws { + print("here") + print(VerifiedIdFlow().initiate()) + } + + func testPerformanceExample() throws { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +} From 810388ac5261706347430bd4d52bdb26f2ba1550 Mon Sep 17 00:00:00 2001 From: Sydney Morton Date: Mon, 5 Dec 2022 16:03:36 -0500 Subject: [PATCH 04/38] Create test app --- .../project.pbxproj | 408 ++++++++++++++++++ .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 63 +++ .../Assets.xcassets/Contents.json | 6 + .../WalletLibraryDemo/ContentView.swift | 18 + .../WalletLibraryDemo/Persistence.swift | 54 +++ .../Preview Assets.xcassets/Contents.json | 6 + .../WalletLibraryDemo.entitlements | 10 + .../.xccurrentversion | 8 + .../WalletLibraryDemo.xcdatamodel/contents | 9 + .../WalletLibraryDemoApp.swift | 18 + 11 files changed, 611 insertions(+) create mode 100644 Demo/WalletLibraryDemo/WalletLibraryDemo.xcodeproj/project.pbxproj create mode 100644 Demo/WalletLibraryDemo/WalletLibraryDemo/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 Demo/WalletLibraryDemo/WalletLibraryDemo/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Demo/WalletLibraryDemo/WalletLibraryDemo/Assets.xcassets/Contents.json create mode 100644 Demo/WalletLibraryDemo/WalletLibraryDemo/ContentView.swift create mode 100644 Demo/WalletLibraryDemo/WalletLibraryDemo/Persistence.swift create mode 100644 Demo/WalletLibraryDemo/WalletLibraryDemo/Preview Content/Preview Assets.xcassets/Contents.json create mode 100644 Demo/WalletLibraryDemo/WalletLibraryDemo/WalletLibraryDemo.entitlements create mode 100644 Demo/WalletLibraryDemo/WalletLibraryDemo/WalletLibraryDemo.xcdatamodeld/.xccurrentversion create mode 100644 Demo/WalletLibraryDemo/WalletLibraryDemo/WalletLibraryDemo.xcdatamodeld/WalletLibraryDemo.xcdatamodel/contents create mode 100644 Demo/WalletLibraryDemo/WalletLibraryDemo/WalletLibraryDemoApp.swift diff --git a/Demo/WalletLibraryDemo/WalletLibraryDemo.xcodeproj/project.pbxproj b/Demo/WalletLibraryDemo/WalletLibraryDemo.xcodeproj/project.pbxproj new file mode 100644 index 00000000..981ecf4f --- /dev/null +++ b/Demo/WalletLibraryDemo/WalletLibraryDemo.xcodeproj/project.pbxproj @@ -0,0 +1,408 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 56; + objects = { + +/* Begin PBXBuildFile section */ + 55E33698293E8F7500CD2ED7 /* WalletLibraryDemoApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E33697293E8F7500CD2ED7 /* WalletLibraryDemoApp.swift */; }; + 55E3369A293E8F7500CD2ED7 /* Persistence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E33699293E8F7500CD2ED7 /* Persistence.swift */; }; + 55E3369D293E8F7500CD2ED7 /* WalletLibraryDemo.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 55E3369B293E8F7500CD2ED7 /* WalletLibraryDemo.xcdatamodeld */; }; + 55E3369F293E8F7500CD2ED7 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E3369E293E8F7500CD2ED7 /* ContentView.swift */; }; + 55E336A1293E8F7700CD2ED7 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 55E336A0293E8F7700CD2ED7 /* Assets.xcassets */; }; + 55E336A5293E8F7700CD2ED7 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 55E336A4293E8F7700CD2ED7 /* Preview Assets.xcassets */; }; + 55E336CC293E906E00CD2ED7 /* WalletLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55E336CB293E906E00CD2ED7 /* WalletLibrary.framework */; }; + 55E336CD293E906E00CD2ED7 /* WalletLibrary.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 55E336CB293E906E00CD2ED7 /* WalletLibrary.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 55E336CE293E906E00CD2ED7 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 55E336CD293E906E00CD2ED7 /* WalletLibrary.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 55E33694293E8F7500CD2ED7 /* WalletLibraryDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = WalletLibraryDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 55E33697293E8F7500CD2ED7 /* WalletLibraryDemoApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletLibraryDemoApp.swift; sourceTree = ""; }; + 55E33699293E8F7500CD2ED7 /* Persistence.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Persistence.swift; sourceTree = ""; }; + 55E3369C293E8F7500CD2ED7 /* WalletLibraryDemo.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = WalletLibraryDemo.xcdatamodel; sourceTree = ""; }; + 55E3369E293E8F7500CD2ED7 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; + 55E336A0293E8F7700CD2ED7 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 55E336A2293E8F7700CD2ED7 /* WalletLibraryDemo.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = WalletLibraryDemo.entitlements; sourceTree = ""; }; + 55E336A4293E8F7700CD2ED7 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; + 55E336CB293E906E00CD2ED7 /* WalletLibrary.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = WalletLibrary.framework; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 55E33691293E8F7500CD2ED7 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 55E336CC293E906E00CD2ED7 /* WalletLibrary.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 55E3368B293E8F7500CD2ED7 = { + isa = PBXGroup; + children = ( + 55E33696293E8F7500CD2ED7 /* WalletLibraryDemo */, + 55E33695293E8F7500CD2ED7 /* Products */, + 55E336CA293E906E00CD2ED7 /* Frameworks */, + ); + sourceTree = ""; + }; + 55E33695293E8F7500CD2ED7 /* Products */ = { + isa = PBXGroup; + children = ( + 55E33694293E8F7500CD2ED7 /* WalletLibraryDemo.app */, + ); + name = Products; + sourceTree = ""; + }; + 55E33696293E8F7500CD2ED7 /* WalletLibraryDemo */ = { + isa = PBXGroup; + children = ( + 55E33697293E8F7500CD2ED7 /* WalletLibraryDemoApp.swift */, + 55E33699293E8F7500CD2ED7 /* Persistence.swift */, + 55E3369E293E8F7500CD2ED7 /* ContentView.swift */, + 55E336A0293E8F7700CD2ED7 /* Assets.xcassets */, + 55E336A2293E8F7700CD2ED7 /* WalletLibraryDemo.entitlements */, + 55E3369B293E8F7500CD2ED7 /* WalletLibraryDemo.xcdatamodeld */, + 55E336A3293E8F7700CD2ED7 /* Preview Content */, + ); + path = WalletLibraryDemo; + sourceTree = ""; + }; + 55E336A3293E8F7700CD2ED7 /* Preview Content */ = { + isa = PBXGroup; + children = ( + 55E336A4293E8F7700CD2ED7 /* Preview Assets.xcassets */, + ); + path = "Preview Content"; + sourceTree = ""; + }; + 55E336CA293E906E00CD2ED7 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 55E336CB293E906E00CD2ED7 /* WalletLibrary.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 55E33693293E8F7500CD2ED7 /* WalletLibraryDemo */ = { + isa = PBXNativeTarget; + buildConfigurationList = 55E336A8293E8F7700CD2ED7 /* Build configuration list for PBXNativeTarget "WalletLibraryDemo" */; + buildPhases = ( + 55E33690293E8F7500CD2ED7 /* Sources */, + 55E33691293E8F7500CD2ED7 /* Frameworks */, + 55E33692293E8F7500CD2ED7 /* Resources */, + 55E336CE293E906E00CD2ED7 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = WalletLibraryDemo; + productName = WalletLibraryDemo; + productReference = 55E33694293E8F7500CD2ED7 /* WalletLibraryDemo.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 55E3368C293E8F7500CD2ED7 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1400; + LastUpgradeCheck = 1400; + TargetAttributes = { + 55E33693293E8F7500CD2ED7 = { + CreatedOnToolsVersion = 14.0.1; + }; + }; + }; + buildConfigurationList = 55E3368F293E8F7500CD2ED7 /* Build configuration list for PBXProject "WalletLibraryDemo" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 55E3368B293E8F7500CD2ED7; + productRefGroup = 55E33695293E8F7500CD2ED7 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 55E33693293E8F7500CD2ED7 /* WalletLibraryDemo */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 55E33692293E8F7500CD2ED7 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 55E336A5293E8F7700CD2ED7 /* Preview Assets.xcassets in Resources */, + 55E336A1293E8F7700CD2ED7 /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 55E33690293E8F7500CD2ED7 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 55E3369D293E8F7500CD2ED7 /* WalletLibraryDemo.xcdatamodeld in Sources */, + 55E33698293E8F7500CD2ED7 /* WalletLibraryDemoApp.swift in Sources */, + 55E3369F293E8F7500CD2ED7 /* ContentView.swift in Sources */, + 55E3369A293E8F7500CD2ED7 /* Persistence.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 55E336A6293E8F7700CD2ED7 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 55E336A7293E8F7700CD2ED7 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 55E336A9293E8F7700CD2ED7 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_ENTITLEMENTS = WalletLibraryDemo/WalletLibraryDemo.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"WalletLibraryDemo/Preview Content\""; + DEVELOPMENT_TEAM = UBF8T346G9; + ENABLE_HARDENED_RUNTIME = YES; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphoneos*]" = UIStatusBarStyleDefault; + "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; + LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 12.3; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.microsoft.entra.verifiedid.WalletLibraryDemo; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = auto; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 55E336AA293E8F7700CD2ED7 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_ENTITLEMENTS = WalletLibraryDemo/WalletLibraryDemo.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"WalletLibraryDemo/Preview Content\""; + DEVELOPMENT_TEAM = UBF8T346G9; + ENABLE_HARDENED_RUNTIME = YES; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphoneos*]" = UIStatusBarStyleDefault; + "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; + LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 12.3; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.microsoft.entra.verifiedid.WalletLibraryDemo; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = auto; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 55E3368F293E8F7500CD2ED7 /* Build configuration list for PBXProject "WalletLibraryDemo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 55E336A6293E8F7700CD2ED7 /* Debug */, + 55E336A7293E8F7700CD2ED7 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 55E336A8293E8F7700CD2ED7 /* Build configuration list for PBXNativeTarget "WalletLibraryDemo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 55E336A9293E8F7700CD2ED7 /* Debug */, + 55E336AA293E8F7700CD2ED7 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCVersionGroup section */ + 55E3369B293E8F7500CD2ED7 /* WalletLibraryDemo.xcdatamodeld */ = { + isa = XCVersionGroup; + children = ( + 55E3369C293E8F7500CD2ED7 /* WalletLibraryDemo.xcdatamodel */, + ); + currentVersion = 55E3369C293E8F7500CD2ED7 /* WalletLibraryDemo.xcdatamodel */; + path = WalletLibraryDemo.xcdatamodeld; + sourceTree = ""; + versionGroupType = wrapper.xcdatamodel; + }; +/* End XCVersionGroup section */ + }; + rootObject = 55E3368C293E8F7500CD2ED7 /* Project object */; +} diff --git a/Demo/WalletLibraryDemo/WalletLibraryDemo/Assets.xcassets/AccentColor.colorset/Contents.json b/Demo/WalletLibraryDemo/WalletLibraryDemo/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 00000000..eb878970 --- /dev/null +++ b/Demo/WalletLibraryDemo/WalletLibraryDemo/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Demo/WalletLibraryDemo/WalletLibraryDemo/Assets.xcassets/AppIcon.appiconset/Contents.json b/Demo/WalletLibraryDemo/WalletLibraryDemo/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..532cd729 --- /dev/null +++ b/Demo/WalletLibraryDemo/WalletLibraryDemo/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,63 @@ +{ + "images" : [ + { + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "16x16" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "16x16" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "32x32" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "32x32" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "128x128" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "128x128" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "256x256" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "256x256" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "512x512" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "512x512" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Demo/WalletLibraryDemo/WalletLibraryDemo/Assets.xcassets/Contents.json b/Demo/WalletLibraryDemo/WalletLibraryDemo/Assets.xcassets/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/Demo/WalletLibraryDemo/WalletLibraryDemo/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Demo/WalletLibraryDemo/WalletLibraryDemo/ContentView.swift b/Demo/WalletLibraryDemo/WalletLibraryDemo/ContentView.swift new file mode 100644 index 00000000..e2e01e51 --- /dev/null +++ b/Demo/WalletLibraryDemo/WalletLibraryDemo/ContentView.swift @@ -0,0 +1,18 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +import SwiftUI +import CoreData +import WalletLibrary + +struct ContentView: View { + @Environment(\.managedObjectContext) private var viewContext + + var body: some View { + NavigationView { + Text(VerifiedIdFlow().initiate()) + } + } +} diff --git a/Demo/WalletLibraryDemo/WalletLibraryDemo/Persistence.swift b/Demo/WalletLibraryDemo/WalletLibraryDemo/Persistence.swift new file mode 100644 index 00000000..026696fb --- /dev/null +++ b/Demo/WalletLibraryDemo/WalletLibraryDemo/Persistence.swift @@ -0,0 +1,54 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +import CoreData + +struct PersistenceController { + static let shared = PersistenceController() + + static var preview: PersistenceController = { + let result = PersistenceController(inMemory: true) + let viewContext = result.container.viewContext + for _ in 0..<10 { + let newItem = Item(context: viewContext) + newItem.timestamp = Date() + } + do { + try viewContext.save() + } catch { + // Replace this implementation with code to handle the error appropriately. + // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. + let nsError = error as NSError + fatalError("Unresolved error \(nsError), \(nsError.userInfo)") + } + return result + }() + + let container: NSPersistentContainer + + init(inMemory: Bool = false) { + container = NSPersistentContainer(name: "WalletLibraryDemo") + if inMemory { + container.persistentStoreDescriptions.first!.url = URL(fileURLWithPath: "/dev/null") + } + container.loadPersistentStores(completionHandler: { (storeDescription, error) in + if let error = error as NSError? { + // Replace this implementation with code to handle the error appropriately. + // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. + + /* + Typical reasons for an error here include: + * The parent directory does not exist, cannot be created, or disallows writing. + * The persistent store is not accessible, due to permissions or data protection when the device is locked. + * The device is out of space. + * The store could not be migrated to the current model version. + Check the error message to determine what the actual problem was. + */ + fatalError("Unresolved error \(error), \(error.userInfo)") + } + }) + container.viewContext.automaticallyMergesChangesFromParent = true + } +} diff --git a/Demo/WalletLibraryDemo/WalletLibraryDemo/Preview Content/Preview Assets.xcassets/Contents.json b/Demo/WalletLibraryDemo/WalletLibraryDemo/Preview Content/Preview Assets.xcassets/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/Demo/WalletLibraryDemo/WalletLibraryDemo/Preview Content/Preview Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Demo/WalletLibraryDemo/WalletLibraryDemo/WalletLibraryDemo.entitlements b/Demo/WalletLibraryDemo/WalletLibraryDemo/WalletLibraryDemo.entitlements new file mode 100644 index 00000000..f2ef3ae0 --- /dev/null +++ b/Demo/WalletLibraryDemo/WalletLibraryDemo/WalletLibraryDemo.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.files.user-selected.read-only + + + diff --git a/Demo/WalletLibraryDemo/WalletLibraryDemo/WalletLibraryDemo.xcdatamodeld/.xccurrentversion b/Demo/WalletLibraryDemo/WalletLibraryDemo/WalletLibraryDemo.xcdatamodeld/.xccurrentversion new file mode 100644 index 00000000..aff2d229 --- /dev/null +++ b/Demo/WalletLibraryDemo/WalletLibraryDemo/WalletLibraryDemo.xcdatamodeld/.xccurrentversion @@ -0,0 +1,8 @@ + + + + + _XCCurrentVersionName + WalletLibraryDemo.xcdatamodel + + diff --git a/Demo/WalletLibraryDemo/WalletLibraryDemo/WalletLibraryDemo.xcdatamodeld/WalletLibraryDemo.xcdatamodel/contents b/Demo/WalletLibraryDemo/WalletLibraryDemo/WalletLibraryDemo.xcdatamodeld/WalletLibraryDemo.xcdatamodel/contents new file mode 100644 index 00000000..9ed2921a --- /dev/null +++ b/Demo/WalletLibraryDemo/WalletLibraryDemo/WalletLibraryDemo.xcdatamodeld/WalletLibraryDemo.xcdatamodel/contents @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/Demo/WalletLibraryDemo/WalletLibraryDemo/WalletLibraryDemoApp.swift b/Demo/WalletLibraryDemo/WalletLibraryDemo/WalletLibraryDemoApp.swift new file mode 100644 index 00000000..fd27a63b --- /dev/null +++ b/Demo/WalletLibraryDemo/WalletLibraryDemo/WalletLibraryDemoApp.swift @@ -0,0 +1,18 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +import SwiftUI + +@main +struct WalletLibraryDemoApp: App { + let persistenceController = PersistenceController.shared + + var body: some Scene { + WindowGroup { + ContentView() + .environment(\.managedObjectContext, persistenceController.container.viewContext) + } + } +} From 441f87388bada9d590333474b446102417969359 Mon Sep 17 00:00:00 2001 From: Sydney Morton Date: Mon, 5 Dec 2022 16:06:43 -0500 Subject: [PATCH 05/38] Fix nit for initial PR --- WalletLibrary/WalletLibraryTests/VerifiedIdFlowTests.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/WalletLibrary/WalletLibraryTests/VerifiedIdFlowTests.swift b/WalletLibrary/WalletLibraryTests/VerifiedIdFlowTests.swift index 09b089dc..126c86f7 100644 --- a/WalletLibrary/WalletLibraryTests/VerifiedIdFlowTests.swift +++ b/WalletLibrary/WalletLibraryTests/VerifiedIdFlowTests.swift @@ -17,7 +17,6 @@ class VerifiedIdFlowTests: XCTestCase { } func testInitiateFlow() throws { - print("here") print(VerifiedIdFlow().initiate()) } From eaf88b41bec206fd7517c09816141e75b3ec3cee Mon Sep 17 00:00:00 2001 From: Sydney Morton Date: Mon, 5 Dec 2022 16:15:39 -0500 Subject: [PATCH 06/38] Add code owners and pull request template --- .github/CODEOWNERS | 1 + .github/PULL_REQUEST_TEMPLATE.md | 33 ++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 .github/CODEOWNERS create mode 100644 .github/PULL_REQUEST_TEMPLATE.md diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 00000000..06b48242 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +@symorton @nithyaganeshng @kashifm-msft @dangodb diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000..b56d5014 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,33 @@ +**Problem:** +The product did not do XYZ. + + +**Solution:** +Used library A to complete scenario X with quality and style. + + +**Validation:** +Please include here how it was verified that the PR works as intended. + + +**Type of change:** +- [ ] Feature work +- [ ] Bug fix +- [ ] Documentation +- [ ] Engineering change +- [ ] Test +- [ ] Logging/Telemetry + + +**Risk**: +- [ ] High – Errors could cause MAJOR regression of many scenarios. (Example: new large features or high level infrastructure changes) +- [ ] Medium – Errors could cause regression of 1 or more scenarios. (Example: somewhat complex bug fixes, small new features) +- [ ] Small – No issues are expected. (Example: Very small bug fixes, string changes, or configuration settings changes) + + +**Work Item links**: +Please include here links for this work item, or deferred work, or related work. E.g. if the refactoring is too big to fit in this PR, or the localized strings need to be updated later, please link the TODO work items here. + + +**Documentation Links**: +Please include here links to any related background documentation for this PR. \ No newline at end of file From 5e654896c3abe39e9bb76d19277ff8e1a88ef0ac Mon Sep 17 00:00:00 2001 From: Sydney Morton Date: Fri, 9 Dec 2022 08:44:22 -0500 Subject: [PATCH 07/38] Add IssuanceRequest and Requirements --- .../Requests/IssuanceRequest.swift | 36 +++++++++++++++++++ .../WalletLibrary/Requests/Request.swift | 14 ++++++++ .../Requirements/AccessTokenRequirement.swift | 31 ++++++++++++++++ .../CredentialIssuanceParams.swift | 19 ++++++++++ .../Requirements/IdTokenRequirement.swift | 36 +++++++++++++++++++ .../SelfAttestedClaimRequirement.swift | 22 ++++++++++++ .../Requirements/VerifiedIdRequirement.swift | 35 ++++++++++++++++++ .../WalletLibrary/VerifiedId/VerifiedId.swift | 31 ++++++++++++++++ .../VerifiedId/VerifiedIdClaim.swift | 16 +++++++++ 9 files changed, 240 insertions(+) create mode 100644 WalletLibrary/WalletLibrary/Requests/IssuanceRequest.swift create mode 100644 WalletLibrary/WalletLibrary/Requests/Request.swift create mode 100644 WalletLibrary/WalletLibrary/Requests/Requirements/AccessTokenRequirement.swift create mode 100644 WalletLibrary/WalletLibrary/Requests/Requirements/CredentialIssuanceParams.swift create mode 100644 WalletLibrary/WalletLibrary/Requests/Requirements/IdTokenRequirement.swift create mode 100644 WalletLibrary/WalletLibrary/Requests/Requirements/SelfAttestedClaimRequirement.swift create mode 100644 WalletLibrary/WalletLibrary/Requests/Requirements/VerifiedIdRequirement.swift create mode 100644 WalletLibrary/WalletLibrary/VerifiedId/VerifiedId.swift create mode 100644 WalletLibrary/WalletLibrary/VerifiedId/VerifiedIdClaim.swift diff --git a/WalletLibrary/WalletLibrary/Requests/IssuanceRequest.swift b/WalletLibrary/WalletLibrary/Requests/IssuanceRequest.swift new file mode 100644 index 00000000..ffdaea77 --- /dev/null +++ b/WalletLibrary/WalletLibrary/Requests/IssuanceRequest.swift @@ -0,0 +1,36 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +/** + * Issuance Request object containing information needed to get a Verified Id. + */ +public struct IssuanceRequest: Request { + + /// URL of the customer who is the issuer + public let requester: String + + /// Information such as a list of contract URLs to describe where to get contract. + public let credentialIssuerMetadata: [String] + + /// A list of contracts that can be used to issue the verified id. + public let contracts: [Contract] + + /// Optional pin requirements needed to display a pin for the request. + public let pinRequirements: PinRequirements? + + /// Credential format data that describes requested verified id accepted formats. + let credentialFormats: [CredentialFormat] + + /// the state that is sent back with issuance completion response. + let state: String +} + +public protocol CredentialFormat { + +} + +public protocol PinRequirements { + +} diff --git a/WalletLibrary/WalletLibrary/Requests/Request.swift b/WalletLibrary/WalletLibrary/Requests/Request.swift new file mode 100644 index 00000000..b7e1ece4 --- /dev/null +++ b/WalletLibrary/WalletLibrary/Requests/Request.swift @@ -0,0 +1,14 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +/** + * Request Protocol that all Verified Id Requests will conform to. + */ +public protocol Request { + + /// A string to describe the requester. + var requester: String { get } + +} diff --git a/WalletLibrary/WalletLibrary/Requests/Requirements/AccessTokenRequirement.swift b/WalletLibrary/WalletLibrary/Requests/Requirements/AccessTokenRequirement.swift new file mode 100644 index 00000000..32783bac --- /dev/null +++ b/WalletLibrary/WalletLibrary/Requests/Requirements/AccessTokenRequirement.swift @@ -0,0 +1,31 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +/** + * Information to describe an access token required for a Verified Id issuance flow. + */ +public struct AccessTokenRequirement { + /// id of the requirement. + let id: String + + /// if the requirement should be encrypted. + let encrypted: Bool + + /// if the requirement is required or not. + public let required: Bool + + /// The configuration url to get Access Token through an authentication library. + public let configuration: String + + /// The client id used to get the access token through an authentication library + public let clientId: String + + /// The resource id used to get the access token through an authentication library. + public let resourceId: String + + /// The scope value used to get the access token through an authentication library. + public let scope: String +} + diff --git a/WalletLibrary/WalletLibrary/Requests/Requirements/CredentialIssuanceParams.swift b/WalletLibrary/WalletLibrary/Requests/Requirements/CredentialIssuanceParams.swift new file mode 100644 index 00000000..3c484117 --- /dev/null +++ b/WalletLibrary/WalletLibrary/Requests/Requirements/CredentialIssuanceParams.swift @@ -0,0 +1,19 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +/** + * Parameters used for an Issuance during Presentation flow + * to define information needed for the issuance of the requested Verified Id. + */ +public struct CredentialIssuanceParams { + + /// A list of issuers that are accepted. + public let acceptedIssuers: [String] + + /// Information such as a contract URL to describe where to get contract. + public let credentialIssuerMetadata: [String] +} + + diff --git a/WalletLibrary/WalletLibrary/Requests/Requirements/IdTokenRequirement.swift b/WalletLibrary/WalletLibrary/Requests/Requirements/IdTokenRequirement.swift new file mode 100644 index 00000000..489ab546 --- /dev/null +++ b/WalletLibrary/WalletLibrary/Requests/Requirements/IdTokenRequirement.swift @@ -0,0 +1,36 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +/** + * Information to describe an id token required for a Verified Id issuance flow. + */ +public struct IdTokenRequirement { + /// id of the requirement + let id: String + + /// if the requirement should be encrypted. + let encrypted: Bool + + /// if the requirement is required or not. + public let required: Bool + + /// The configuration url to get id token through an authentication library. + public let configuration: URL + + /// The client id used to get the id token through an authentication library + public let clientId: String + + /// The redirect url used to get the id token through an authentication library + public let redirectUri: String + + /// The scope used to get the id token through an authentication library + public let scope: String + + /// The nonce acts as an extra level of security and is used as an additional property + /// within the id token request through an authentication library. The nonce will be placed within + /// the id token retrieved and can be used for validation during an issuance request to an issuance service. + public let nonce: String +} + diff --git a/WalletLibrary/WalletLibrary/Requests/Requirements/SelfAttestedClaimRequirement.swift b/WalletLibrary/WalletLibrary/Requests/Requirements/SelfAttestedClaimRequirement.swift new file mode 100644 index 00000000..05c8f237 --- /dev/null +++ b/WalletLibrary/WalletLibrary/Requests/Requirements/SelfAttestedClaimRequirement.swift @@ -0,0 +1,22 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +/** + * Information to describe a self attested claim required for a Verified Id issuance flow. + */ +public struct SelfAttestedClaimRequirement { + /// id of the requirement + let id: String + + /// if the requirement should be encrypted. + let encrypted: Bool + + /// if the requirement is required or not. + public let required: Bool + + /// the claim requested. + public let claim: String +} + diff --git a/WalletLibrary/WalletLibrary/Requests/Requirements/VerifiedIdRequirement.swift b/WalletLibrary/WalletLibrary/Requests/Requirements/VerifiedIdRequirement.swift new file mode 100644 index 00000000..5a75a993 --- /dev/null +++ b/WalletLibrary/WalletLibrary/Requests/Requirements/VerifiedIdRequirement.swift @@ -0,0 +1,35 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +/** + * Information to describe Verified IDs required. + */ +public struct VerifiedIdRequirement { + /// id of the requirement. + let id: String + + /// If requirement must be encrypted. + let encrypted: Bool + + /// if the requirement is required or not. + public let required: Bool + + /// the type of the verified Id required. + public let types: [String] + + /// accepted issuers for verified Id required. + public let acceptedIssuers: [String] + + /// the purpose for the verified Id, developer can display to the user if desired. + public let purpose: String? + + /// optional property for info needed for issuance during presentation flow. + public let credentialIssuanceParams: CredentialIssuanceParams? + + /// helper method that returns Verified Id that match the requirement from a list of Verified Ids. + public func getMatches(verifiedIds: [VerifiedId]) -> [VerifiedId] { + return [] + } +} diff --git a/WalletLibrary/WalletLibrary/VerifiedId/VerifiedId.swift b/WalletLibrary/WalletLibrary/VerifiedId/VerifiedId.swift new file mode 100644 index 00000000..9029c9a0 --- /dev/null +++ b/WalletLibrary/WalletLibrary/VerifiedId/VerifiedId.swift @@ -0,0 +1,31 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +import Foundation + +/** + * The Verified Id Data Model. + */ +public struct VerifiedId { + + /// the id of the verified id. For example, this value would equal the jti of a Verifiable Credential. + public let id: String + + /// the type of the verified id. For example, Verifiable Credential would be the type of a VC. + public let type: String + + /// a list of claims within the verified id. + public let claims: [VerifiedIdClaim] + + /// date the verified id expires. + public let expiresOn: Date + + /// date the verified id was issued. + public let issuedOn: Date + + /// the raw representation of the verified id. + let raw: String +} + diff --git a/WalletLibrary/WalletLibrary/VerifiedId/VerifiedIdClaim.swift b/WalletLibrary/WalletLibrary/VerifiedId/VerifiedIdClaim.swift new file mode 100644 index 00000000..a3be5a5c --- /dev/null +++ b/WalletLibrary/WalletLibrary/VerifiedId/VerifiedIdClaim.swift @@ -0,0 +1,16 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +/** + * A mapping of the claims contained within a Verified Id. + */ +public struct VerifiedIdClaim { + /// id of the claim. For example, within a VC, it is the key value of credentialSubject. + let id: String + + /// the value of the claim + let value: Any +} + From 5ee938dcb11a9304bcbd0d4394a98d1ead18a19a Mon Sep 17 00:00:00 2001 From: Sydney Morton Date: Fri, 9 Dec 2022 08:44:38 -0500 Subject: [PATCH 08/38] Add Contract --- .../Requests/Contract/Contract.swift | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 WalletLibrary/WalletLibrary/Requests/Contract/Contract.swift diff --git a/WalletLibrary/WalletLibrary/Requests/Contract/Contract.swift b/WalletLibrary/WalletLibrary/Requests/Contract/Contract.swift new file mode 100644 index 00000000..40684c10 --- /dev/null +++ b/WalletLibrary/WalletLibrary/Requests/Contract/Contract.swift @@ -0,0 +1,38 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +/** + * A contract that contains the information needed to get a Verified Id + * including display information through the trait properties. + */ +public struct Contract { + + /// the traits like name to describe the issuer. + public let issuerTraits: RequesterTraits + + /// the traits such as background color and name to describe the verified id. + public let verifiedIdTraits: VerifiedIdTraits + + /// information to describe Verified IDs required for issuance. + public let verifiedIdRequirements: [VerifiedIdRequirement] + + /// information to describe id tokens required for issuance. + public let idTokenRequirements: [IdTokenRequirement] + + /// information to describe access tokens required for issuance. + public let accessTokenRequirements: [AccessTokenRequirement] + + /// information to describe self-attested required for issuance. + public let selfAttestedClaimRequirements: [SelfAttestedClaimRequirement] + + /// raw representation of the contract. + let raw: String +} + +/// TODO: implement Requester Traits +public protocol RequesterTraits {} + +/// TODO: implement VerifiedIdTraits +public protocol VerifiedIdTraits {} From fd287405bf37971a3b657d29b41c537d1be53bd7 Mon Sep 17 00:00:00 2001 From: Sydney Morton Date: Fri, 9 Dec 2022 08:45:05 -0500 Subject: [PATCH 09/38] Add Request Handling Protocol --- .../WalletLibrary.xcodeproj/project.pbxproj | 2076 +++-------------- ...ationService+PresentationServiceable.swift | 16 + .../Requests/Handlers/RequestHandling.swift | 13 + .../Requests/Handlers/RequestHandler.swift | 46 + 4 files changed, 411 insertions(+), 1740 deletions(-) create mode 100644 WalletLibrary/WalletLibrary/Extensions/PresentationService+PresentationServiceable.swift create mode 100644 WalletLibrary/WalletLibrary/Protocols/Requests/Handlers/RequestHandling.swift create mode 100644 WalletLibrary/WalletLibrary/Requests/Handlers/RequestHandler.swift diff --git a/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj b/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj index ceab8b5d..00c86c80 100644 --- a/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj +++ b/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj @@ -10,19 +10,21 @@ 552E509B293E6AB200868F47 /* WalletLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 552E5092293E6AB200868F47 /* WalletLibrary.framework */; }; 552E50A0293E6AB200868F47 /* VerifiedIdFlowTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 552E509F293E6AB200868F47 /* VerifiedIdFlowTests.swift */; }; 552E50A1293E6AB200868F47 /* WalletLibrary.h in Headers */ = {isa = PBXBuildFile; fileRef = 552E5095293E6AB200868F47 /* WalletLibrary.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 552E52CB293E71D700868F47 /* VCEntities.h in Headers */ = {isa = PBXBuildFile; fileRef = 552E50C2293E71D600868F47 /* VCEntities.h */; }; - 552E5371293E71D800868F47 /* VCUseCase.h in Headers */ = {isa = PBXBuildFile; fileRef = 552E5193293E71D700868F47 /* VCUseCase.h */; }; - 552E539E293E71D800868F47 /* VCToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 552E51CE293E71D700868F47 /* VCToken.h */; }; - 552E53E4293E71D800868F47 /* VCCrypto.h in Headers */ = {isa = PBXBuildFile; fileRef = 552E5227293E71D700868F47 /* VCCrypto.h */; }; - 552E542E293E71D800868F47 /* networking.h in Headers */ = {isa = PBXBuildFile; fileRef = 552E5292293E71D700868F47 /* networking.h */; }; - 552E5432293E71D800868F47 /* VCSamples.h in Headers */ = {isa = PBXBuildFile; fileRef = 552E529B293E71D700868F47 /* VCSamples.h */; }; - 552E544E293E736F00868F47 /* VCCrypto.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 552E52A5293E71D700868F47 /* VCCrypto.framework */; platformFilter = ios; }; - 552E5450293E737300868F47 /* VCEntities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 552E52AD293E71D700868F47 /* VCEntities.framework */; platformFilter = ios; }; - 552E5452293E737900868F47 /* VCNetworking.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 552E52B3293E71D700868F47 /* VCNetworking.framework */; platformFilter = ios; }; - 552E5454293E737F00868F47 /* VCServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 552E52BD293E71D700868F47 /* VCServices.framework */; platformFilter = ios; }; - 552E5456293E738200868F47 /* VCToken.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 552E52C5293E71D700868F47 /* VCToken.framework */; platformFilter = ios; }; 552E546B293E759300868F47 /* VerifiedIdFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 552E50AB293E6F5500868F47 /* VerifiedIdFlow.swift */; }; 55E33684293E7B6600CD2ED7 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55E33679293E7B5F00CD2ED7 /* PromiseKit.framework */; }; + 55E336D1293FA6F400CD2ED7 /* VerifiedIdRequirement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E336D0293FA6F400CD2ED7 /* VerifiedIdRequirement.swift */; }; + 55E336D4293FA75300CD2ED7 /* VerifiedId.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E336D3293FA75300CD2ED7 /* VerifiedId.swift */; }; + 55E336D6293FA78C00CD2ED7 /* VerifiedIdClaim.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E336D5293FA78C00CD2ED7 /* VerifiedIdClaim.swift */; }; + 55E336D8293FCE0500CD2ED7 /* CredentialIssuanceParams.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E336D7293FCE0500CD2ED7 /* CredentialIssuanceParams.swift */; }; + 55E33708293FD25900CD2ED7 /* AccessTokenRequirement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E33707293FD25900CD2ED7 /* AccessTokenRequirement.swift */; }; + 55E3370A293FD3E000CD2ED7 /* IdTokenRequirement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E33709293FD3E000CD2ED7 /* IdTokenRequirement.swift */; }; + 55E3370C293FD61E00CD2ED7 /* SelfAttestedClaimRequirement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E3370B293FD61E00CD2ED7 /* SelfAttestedClaimRequirement.swift */; }; + 55E3370E293FD84700CD2ED7 /* IssuanceRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E3370D293FD84700CD2ED7 /* IssuanceRequest.swift */; }; + 55E33711293FDE1400CD2ED7 /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E33710293FDE1400CD2ED7 /* Request.swift */; }; + 55E33714293FDEEF00CD2ED7 /* Contract.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E33713293FDEEF00CD2ED7 /* Contract.swift */; }; + 55E3375A2942317100CD2ED7 /* RequestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E337592942317100CD2ED7 /* RequestHandler.swift */; }; + 55E3375F2942321C00CD2ED7 /* RequestHandling.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E3375E2942321C00CD2ED7 /* RequestHandling.swift */; }; + 55E337622942361200CD2ED7 /* PresentationService+PresentationServiceable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E337612942361200CD2ED7 /* PresentationService+PresentationServiceable.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -33,97 +35,6 @@ remoteGlobalIDString = 552E5091293E6AB200868F47; remoteInfo = WalletLibrary; }; - 552E52A4293E71D700868F47 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 552E5229293E71D700868F47 /* VCCrypto.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 92CDE7AA24DC78DD00F95B5D; - remoteInfo = VCCrypto; - }; - 552E52A6293E71D700868F47 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 552E5229293E71D700868F47 /* VCCrypto.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 92CDE7B324DC78DD00F95B5D; - remoteInfo = VCCryptoTests; - }; - 552E52A8293E71D700868F47 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 552E5229293E71D700868F47 /* VCCrypto.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 92CDE7ED24DE1C6100F95B5D; - remoteInfo = VCCryptoTestApp; - }; - 552E52AC293E71D700868F47 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 552E50BD293E71D600868F47 /* VCEntities.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 5557572E251BC575009979AB; - remoteInfo = VCEntities; - }; - 552E52AE293E71D700868F47 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 552E50BD293E71D600868F47 /* VCEntities.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 55575737251BC575009979AB; - remoteInfo = VCEntitiesTests; - }; - 552E52B2293E71D700868F47 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 552E5237293E71D700868F47 /* VCNetworking.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 55D7BFEA24C4CBBD0090F495; - remoteInfo = VCNetworking; - }; - 552E52B4293E71D700868F47 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 552E5237293E71D700868F47 /* VCNetworking.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 55D7BFF324C4CBBD0090F495; - remoteInfo = VCNetworkingTests; - }; - 552E52B7293E71D700868F47 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 552E5295293E71D700868F47 /* VCSamples.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 554E0BAC261E0D8D006A4403; - remoteInfo = VCSamples; - }; - 552E52BC293E71D700868F47 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 552E51AE293E71D700868F47 /* VCServices.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 550F1E3525101758009AF467; - remoteInfo = VCServices; - }; - 552E52BE293E71D700868F47 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 552E51AE293E71D700868F47 /* VCServices.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 550F1E3E25101759009AF467; - remoteInfo = VCServicesTests; - }; - 552E52C0293E71D700868F47 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 552E51AE293E71D700868F47 /* VCServices.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 555BDAF52530E5E2001E7A18; - remoteInfo = VCServicesTestApp; - }; - 552E52C4293E71D700868F47 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 552E51D8293E71D700868F47 /* VCToken.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 55ADE25724F5406000D9990E; - remoteInfo = VCToken; - }; - 552E52C6293E71D700868F47 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 552E51D8293E71D700868F47 /* VCToken.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 55ADE26024F5406000D9990E; - remoteInfo = VCTokenTests; - }; 55E3366B293E7B5000CD2ED7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 55E33666293E7B5000CD2ED7 /* PMKFoundation.xcodeproj */; @@ -187,1647 +98,376 @@ remoteGlobalIDString = 92B9684D25240F2100F64AB0; remoteInfo = Secp256k1; }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 552E5092293E6AB200868F47 /* WalletLibrary.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = WalletLibrary.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 552E5095293E6AB200868F47 /* WalletLibrary.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WalletLibrary.h; sourceTree = ""; }; - 552E509A293E6AB200868F47 /* WalletLibraryTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WalletLibraryTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 552E509F293E6AB200868F47 /* VerifiedIdFlowTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VerifiedIdFlowTests.swift; sourceTree = ""; }; - 552E50AB293E6F5500868F47 /* VerifiedIdFlow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VerifiedIdFlow.swift; sourceTree = ""; }; - 552E50BD293E71D600868F47 /* VCEntities.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = VCEntities.xcodeproj; sourceTree = ""; }; - 552E50C1293E71D600868F47 /* ResponseMappings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ResponseMappings.swift; sourceTree = ""; }; - 552E50C2293E71D600868F47 /* VCEntities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VCEntities.h; sourceTree = ""; }; - 552E50C5293E71D600868F47 /* ExchangeRequestClaims.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExchangeRequestClaims.swift; sourceTree = ""; }; - 552E50C6293E71D600868F47 /* ExchangeRequestContainer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExchangeRequestContainer.swift; sourceTree = ""; }; - 552E50C8293E71D600868F47 /* VerifiablePresentationDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VerifiablePresentationDescriptor.swift; sourceTree = ""; }; - 552E50C9293E71D600868F47 /* VerifiablePresentationClaims.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VerifiablePresentationClaims.swift; sourceTree = ""; }; - 552E50CB293E71D600868F47 /* Multihash.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Multihash.swift; sourceTree = ""; }; - 552E50CC293E71D600868F47 /* VCEntitiesConstants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VCEntitiesConstants.swift; sourceTree = ""; }; - 552E50CD293E71D600868F47 /* VCSDKConfiguration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VCSDKConfiguration.swift; sourceTree = ""; }; - 552E50CE293E71D600868F47 /* CorrelationHeader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CorrelationHeader.swift; sourceTree = ""; }; - 552E50CF293E71D600868F47 /* JSONCodingKeys.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JSONCodingKeys.swift; sourceTree = ""; }; - 552E50D0293E71D600868F47 /* RequestedVerifiableCredentialMapping.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RequestedVerifiableCredentialMapping.swift; sourceTree = ""; }; - 552E50D1293E71D600868F47 /* ResponseContaining.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ResponseContaining.swift; sourceTree = ""; }; - 552E50D3293E71D600868F47 /* DomainLinkageCredentialSubject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DomainLinkageCredentialSubject.swift; sourceTree = ""; }; - 552E50D4293E71D600868F47 /* DomainLinkageCredential.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DomainLinkageCredential.swift; sourceTree = ""; }; - 552E50D5293E71D600868F47 /* DomainLinkageCredentialContent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DomainLinkageCredentialContent.swift; sourceTree = ""; }; - 552E50D6293E71D600868F47 /* LinkedDomainResult.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LinkedDomainResult.swift; sourceTree = ""; }; - 552E50D7293E71D600868F47 /* WellKnownConfigDocument.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WellKnownConfigDocument.swift; sourceTree = ""; }; - 552E50D9293E71D600868F47 /* DiscoveryServiceResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DiscoveryServiceResponse.swift; sourceTree = ""; }; - 552E50DB293E71D600868F47 /* OIDCClaims.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OIDCClaims.swift; sourceTree = ""; }; - 552E50DC293E71D600868F47 /* AllowedAlgorithms.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AllowedAlgorithms.swift; sourceTree = ""; }; - 552E50DD293E71D600868F47 /* PresentationRequestClaims.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationRequestClaims.swift; sourceTree = ""; }; - 552E50DE293E71D600868F47 /* RequestedVPToken.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RequestedVPToken.swift; sourceTree = ""; }; - 552E50DF293E71D600868F47 /* RegistrationClaims.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RegistrationClaims.swift; sourceTree = ""; }; - 552E50E0293E71D600868F47 /* SupportedVerifiablePresentationFormats.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SupportedVerifiablePresentationFormats.swift; sourceTree = ""; }; - 552E50E1293E71D600868F47 /* RequestedClaims.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RequestedClaims.swift; sourceTree = ""; }; - 552E50E3293E71D600868F47 /* PresentationResponseFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationResponseFormatter.swift; sourceTree = ""; }; - 552E50E4293E71D600868F47 /* TokenTimeConstraints.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TokenTimeConstraints.swift; sourceTree = ""; }; - 552E50E5293E71D600868F47 /* ExchangeRequestFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExchangeRequestFormatter.swift; sourceTree = ""; }; - 552E50E6293E71D600868F47 /* FormatterError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormatterError.swift; sourceTree = ""; }; - 552E50E7293E71D600868F47 /* JwsHeaderFormatter .swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "JwsHeaderFormatter .swift"; sourceTree = ""; }; - 552E50E8293E71D600868F47 /* IssuanceVPFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceVPFormatter.swift; sourceTree = ""; }; - 552E50E9293E71D600868F47 /* IdentifierFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IdentifierFormatter.swift; sourceTree = ""; }; - 552E50EA293E71D600868F47 /* IssuanceResponseFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceResponseFormatter.swift; sourceTree = ""; }; - 552E50EB293E71D600868F47 /* VerifiablePresentationFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VerifiablePresentationFormatter.swift; sourceTree = ""; }; - 552E50ED293E71D600868F47 /* IdentifierCreator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IdentifierCreator.swift; sourceTree = ""; }; - 552E50EE293E71D600868F47 /* AliasComputer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AliasComputer.swift; sourceTree = ""; }; - 552E50F0293E71D600868F47 /* IdentifierDocumentPublicKey.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IdentifierDocumentPublicKey.swift; sourceTree = ""; }; - 552E50F1293E71D600868F47 /* IdentifierDocumentServiceEndpoint.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IdentifierDocumentServiceEndpoint.swift; sourceTree = ""; }; - 552E50F3293E71D600868F47 /* IONDocumentPatch.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IONDocumentPatch.swift; sourceTree = ""; }; - 552E50F4293E71D600868F47 /* IONDocumentInitialState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IONDocumentInitialState.swift; sourceTree = ""; }; - 552E50F5293E71D600868F47 /* IONDocumentDeltaDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IONDocumentDeltaDescriptor.swift; sourceTree = ""; }; - 552E50F6293E71D600868F47 /* IONDocumentModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IONDocumentModel.swift; sourceTree = ""; }; - 552E50F7293E71D600868F47 /* IdentifierDocumentSuffixDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IdentifierDocumentSuffixDescriptor.swift; sourceTree = ""; }; - 552E50F8293E71D600868F47 /* IdentifierDocument.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IdentifierDocument.swift; sourceTree = ""; }; - 552E50F9293E71D600868F47 /* IdentifierDocumentServiceEndpointDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IdentifierDocumentServiceEndpointDescriptor.swift; sourceTree = ""; }; - 552E50FA293E71D600868F47 /* KeyContainer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyContainer.swift; sourceTree = ""; }; - 552E50FB293E71D600868F47 /* Identifier.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Identifier.swift; sourceTree = ""; }; - 552E50FE293E71D600868F47 /* AttestationsDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AttestationsDescriptor.swift; sourceTree = ""; }; - 552E50FF293E71D600868F47 /* PresentationDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationDescriptor.swift; sourceTree = ""; }; - 552E5100293E71D600868F47 /* ConsentDisplayDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConsentDisplayDescriptor.swift; sourceTree = ""; }; - 552E5101293E71D600868F47 /* LogoDisplayDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LogoDisplayDescriptor.swift; sourceTree = ""; }; - 552E5102293E71D600868F47 /* DisplayDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DisplayDescriptor.swift; sourceTree = ""; }; - 552E5103293E71D600868F47 /* ClaimDisplayDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ClaimDisplayDescriptor.swift; sourceTree = ""; }; - 552E5104293E71D600868F47 /* AccessTokenDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccessTokenDescriptor.swift; sourceTree = ""; }; - 552E5105293E71D600868F47 /* IssuerDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuerDescriptor.swift; sourceTree = ""; }; - 552E5106293E71D600868F47 /* ContractInputDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContractInputDescriptor.swift; sourceTree = ""; }; - 552E5107293E71D600868F47 /* Contract.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Contract.swift; sourceTree = ""; }; - 552E5108293E71D600868F47 /* CardDisplayDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CardDisplayDescriptor.swift; sourceTree = ""; }; - 552E5109293E71D600868F47 /* SelfIssuedClaimsDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelfIssuedClaimsDescriptor.swift; sourceTree = ""; }; - 552E510A293E71D600868F47 /* ClaimDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ClaimDescriptor.swift; sourceTree = ""; }; - 552E510B293E71D600868F47 /* IdTokenDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IdTokenDescriptor.swift; sourceTree = ""; }; - 552E510C293E71D600868F47 /* IssuanceCompletionResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceCompletionResponse.swift; sourceTree = ""; }; - 552E510D293E71D600868F47 /* IssuanceResponseContainer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceResponseContainer.swift; sourceTree = ""; }; - 552E510E293E71D600868F47 /* IssuanceRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceRequest.swift; sourceTree = ""; }; - 552E510F293E71D600868F47 /* AttestationResponseDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AttestationResponseDescriptor.swift; sourceTree = ""; }; - 552E5110293E71D600868F47 /* IssuanceServiceResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceServiceResponse.swift; sourceTree = ""; }; - 552E5111293E71D600868F47 /* ContractServiceResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContractServiceResponse.swift; sourceTree = ""; }; - 552E5112293E71D600868F47 /* IssuancePin.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuancePin.swift; sourceTree = ""; }; - 552E5114293E71D600868F47 /* PinClaims.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PinClaims.swift; sourceTree = ""; }; - 552E5115293E71D600868F47 /* IssuanceResponseClaims.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceResponseClaims.swift; sourceTree = ""; }; - 552E5117293E71D600868F47 /* ServiceDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ServiceDescriptor.swift; sourceTree = ""; }; - 552E5118293E71D600868F47 /* VerifiableCredentialDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VerifiableCredentialDescriptor.swift; sourceTree = ""; }; - 552E5119293E71D600868F47 /* VCClaims.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VCClaims.swift; sourceTree = ""; }; - 552E511B293E71D600868F47 /* PresentationRequestValidator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationRequestValidator.swift; sourceTree = ""; }; - 552E511C293E71D600868F47 /* DomainLinkageCredentialValidator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DomainLinkageCredentialValidator.swift; sourceTree = ""; }; - 552E511D293E71D600868F47 /* IssuanceRequestValidator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceRequestValidator.swift; sourceTree = ""; }; - 552E511F293E71D600868F47 /* UnprotectedBackup.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UnprotectedBackup.swift; sourceTree = ""; }; - 552E5121293E71D600868F47 /* ProtectedBackupData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProtectedBackupData.swift; sourceTree = ""; }; - 552E5123293E71D600868F47 /* Microsoft2020IdentifierBackup.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Microsoft2020IdentifierBackup.swift; sourceTree = ""; }; - 552E5124293E71D600868F47 /* RawIdentity.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RawIdentity.swift; sourceTree = ""; }; - 552E5125293E71D600868F47 /* VcMetadata.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VcMetadata.swift; sourceTree = ""; }; - 552E5126293E71D600868F47 /* Microsoft2020UnprotectedBackup.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Microsoft2020UnprotectedBackup.swift; sourceTree = ""; }; - 552E5127293E71D600868F47 /* WalletMetadata.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletMetadata.swift; sourceTree = ""; }; - 552E5128293E71D600868F47 /* UnprotectedBackupData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UnprotectedBackupData.swift; sourceTree = ""; }; - 552E512A293E71D600868F47 /* BackupProtectionMethod.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BackupProtectionMethod.swift; sourceTree = ""; }; - 552E512C293E71D600868F47 /* JwePasswordProtectedBackupData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JwePasswordProtectedBackupData.swift; sourceTree = ""; }; - 552E512D293E71D600868F47 /* JwePasswordProtectionMethod.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JwePasswordProtectionMethod.swift; sourceTree = ""; }; - 552E5130293E71D600868F47 /* IssuerIdToken.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuerIdToken.swift; sourceTree = ""; }; - 552E5131293E71D600868F47 /* PinDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PinDescriptor.swift; sourceTree = ""; }; - 552E5132293E71D600868F47 /* IssuerIdTokenClaims.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuerIdTokenClaims.swift; sourceTree = ""; }; - 552E5135293E71D600868F47 /* VPTokenResponseDescription.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VPTokenResponseDescription.swift; sourceTree = ""; }; - 552E5136293E71D600868F47 /* PresentationSubmission.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationSubmission.swift; sourceTree = ""; }; - 552E5137293E71D600868F47 /* NestedInputDescriptorMapping.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NestedInputDescriptorMapping.swift; sourceTree = ""; }; - 552E5138293E71D600868F47 /* InputDescriptorMapping.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InputDescriptorMapping.swift; sourceTree = ""; }; - 552E513A293E71D600868F47 /* PresentationInputDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationInputDescriptor.swift; sourceTree = ""; }; - 552E513B293E71D600868F47 /* PresentationExchangeField.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationExchangeField.swift; sourceTree = ""; }; - 552E513C293E71D600868F47 /* PresentationExchangeFilter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationExchangeFilter.swift; sourceTree = ""; }; - 552E513D293E71D600868F47 /* InputDescriptorSchema.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InputDescriptorSchema.swift; sourceTree = ""; }; - 552E513E293E71D600868F47 /* PresentationExchangeConstraints.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationExchangeConstraints.swift; sourceTree = ""; }; - 552E513F293E71D600868F47 /* PresentationDefinition.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationDefinition.swift; sourceTree = ""; }; - 552E5140293E71D600868F47 /* IssuanceMetadata.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceMetadata.swift; sourceTree = ""; }; - 552E5141293E71D600868F47 /* RequestedVerifiableCredentialMapping.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RequestedVerifiableCredentialMapping.swift; sourceTree = ""; }; - 552E5142293E71D600868F47 /* PresentationRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationRequest.swift; sourceTree = ""; }; - 552E5143293E71D600868F47 /* PresentationResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationResponse.swift; sourceTree = ""; }; - 552E5144293E71D600868F47 /* PresentationResponseClaims.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationResponseClaims.swift; sourceTree = ""; }; - 552E5145293E71D600868F47 /* PresentationResponseContainer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationResponseContainer.swift; sourceTree = ""; }; - 552E5148293E71D600868F47 /* NestedInputDescriptorMapping.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NestedInputDescriptorMapping.swift; sourceTree = ""; }; - 552E5149293E71D600868F47 /* InputDescriptorMapping.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InputDescriptorMapping.swift; sourceTree = ""; }; - 552E514A293E71D600868F47 /* PresentationRequestClaims.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationRequestClaims.swift; sourceTree = ""; }; - 552E514C293E71D600868F47 /* VCLogConsumer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VCLogConsumer.swift; sourceTree = ""; }; - 552E514D293E71D600868F47 /* MeasureTime.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MeasureTime.swift; sourceTree = ""; }; - 552E514E293E71D600868F47 /* VCSDKLog.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VCSDKLog.swift; sourceTree = ""; }; - 552E514F293E71D600868F47 /* VCTraceLevel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VCTraceLevel.swift; sourceTree = ""; }; - 552E5150293E71D600868F47 /* DefaultLogConsumer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DefaultLogConsumer.swift; sourceTree = ""; }; - 552E5151293E71D600868F47 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 552E5154293E71D600868F47 /* MockTokenVerifier.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockTokenVerifier.swift; sourceTree = ""; }; - 552E5155293E71D600868F47 /* MockCryptoSecret.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockCryptoSecret.swift; sourceTree = ""; }; - 552E5156293E71D600868F47 /* MockOIDCClaims.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockOIDCClaims.swift; sourceTree = ""; }; - 552E5157293E71D600868F47 /* MockTokenSigner.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockTokenSigner.swift; sourceTree = ""; }; - 552E5158293E71D600868F47 /* TestData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestData.swift; sourceTree = ""; }; - 552E5159293E71D600868F47 /* MockCryptoOperations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockCryptoOperations.swift; sourceTree = ""; }; - 552E515A293E71D600868F47 /* SecretStoreMock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecretStoreMock.swift; sourceTree = ""; }; - 552E515B293E71D600868F47 /* MockCodableObject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockCodableObject.swift; sourceTree = ""; }; - 552E515C293E71D600868F47 /* MockIdentifierFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockIdentifierFormatter.swift; sourceTree = ""; }; - 552E515E293E71D600868F47 /* ExchangeRequestContainerTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExchangeRequestContainerTests.swift; sourceTree = ""; }; - 552E5160293E71D600868F47 /* JSONCodingKeysTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JSONCodingKeysTests.swift; sourceTree = ""; }; - 552E5161293E71D600868F47 /* MultihashTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MultihashTests.swift; sourceTree = ""; }; - 552E5163293E71D600868F47 /* IssuanceResponseFormatterTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceResponseFormatterTests.swift; sourceTree = ""; }; - 552E5164293E71D600868F47 /* ExchangeRequestFormatterTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExchangeRequestFormatterTests.swift; sourceTree = ""; }; - 552E5165293E71D600868F47 /* IdentifierFormatterTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IdentifierFormatterTests.swift; sourceTree = ""; }; - 552E5166293E71D600868F47 /* PresentationResponseFormatterTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationResponseFormatterTests.swift; sourceTree = ""; }; - 552E5168293E71D600868F47 /* IdentifierCreatorTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IdentifierCreatorTests.swift; sourceTree = ""; }; - 552E516A293E71D600868F47 /* IssuanceServiceResponseTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceServiceResponseTests.swift; sourceTree = ""; }; - 552E516B293E71D600868F47 /* IssuanceResponseClaimsTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceResponseClaimsTests.swift; sourceTree = ""; }; - 552E516C293E71D600868F47 /* IssuancePinTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuancePinTests.swift; sourceTree = ""; }; - 552E516E293E71D600868F47 /* VerifiableCredentialTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VerifiableCredentialTests.swift; sourceTree = ""; }; - 552E5170293E71D600868F47 /* DomainLinkageCredentialValidatorTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DomainLinkageCredentialValidatorTests.swift; sourceTree = ""; }; - 552E5171293E71D600868F47 /* PresentationRequestValidatorTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationRequestValidatorTests.swift; sourceTree = ""; }; - 552E5172293E71D600868F47 /* OIDCClaimsTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OIDCClaimsTests.swift; sourceTree = ""; }; - 552E5173293E71D600868F47 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 552E5177293E71D700868F47 /* MockIssuanceRequestValidator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockIssuanceRequestValidator.swift; sourceTree = ""; }; - 552E5178293E71D700868F47 /* MockTokenSigner.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockTokenSigner.swift; sourceTree = ""; }; - 552E5179293E71D700868F47 /* MockExchangeApiCalls.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockExchangeApiCalls.swift; sourceTree = ""; }; - 552E517A293E71D700868F47 /* MockIssuanceApiCalls.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockIssuanceApiCalls.swift; sourceTree = ""; }; - 552E517B293E71D700868F47 /* TestData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestData.swift; sourceTree = ""; }; - 552E517C293E71D700868F47 /* MockIssuanceResponseFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockIssuanceResponseFormatter.swift; sourceTree = ""; }; - 552E517D293E71D700868F47 /* MockVCCryptoSecret.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockVCCryptoSecret.swift; sourceTree = ""; }; - 552E517E293E71D700868F47 /* MockVCSDKConfiguration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockVCSDKConfiguration.swift; sourceTree = ""; }; - 552E517F293E71D700868F47 /* MockPresentationApiCalls.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockPresentationApiCalls.swift; sourceTree = ""; }; - 552E5180293E71D700868F47 /* MockPresentationRequestValidator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockPresentationRequestValidator.swift; sourceTree = ""; }; - 552E5181293E71D700868F47 /* MockExchangeRequestFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockExchangeRequestFormatter.swift; sourceTree = ""; }; - 552E5182293E71D700868F47 /* MockDiscoveryApiCalls.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockDiscoveryApiCalls.swift; sourceTree = ""; }; - 552E5183293E71D700868F47 /* MockWellKnownConfigDocumentApiCalls.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockWellKnownConfigDocumentApiCalls.swift; sourceTree = ""; }; - 552E5184293E71D700868F47 /* SecretStoreMock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecretStoreMock.swift; sourceTree = ""; }; - 552E5185293E71D700868F47 /* MockDomainLinkageCredentialValidator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockDomainLinkageCredentialValidator.swift; sourceTree = ""; }; - 552E5186293E71D700868F47 /* MockPresentationResponseFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockPresentationResponseFormatter.swift; sourceTree = ""; }; - 552E5187293E71D700868F47 /* IssuanceServiceTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceServiceTests.swift; sourceTree = ""; }; - 552E5188293E71D700868F47 /* DifWordListTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DifWordListTests.swift; sourceTree = ""; }; - 552E5189293E71D700868F47 /* CoreDataManagerTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoreDataManagerTests.swift; sourceTree = ""; }; - 552E518A293E71D700868F47 /* LinkedDomainServiceTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LinkedDomainServiceTests.swift; sourceTree = ""; }; - 552E518B293E71D700868F47 /* ExchangeServiceTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExchangeServiceTests.swift; sourceTree = ""; }; - 552E518C293E71D700868F47 /* IdentifierDatabaseTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IdentifierDatabaseTests.swift; sourceTree = ""; }; - 552E518D293E71D700868F47 /* PresentationServiceTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationServiceTests.swift; sourceTree = ""; }; - 552E518E293E71D700868F47 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 552E5190293E71D700868F47 /* difwordlist.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = difwordlist.txt; sourceTree = ""; }; - 552E5192293E71D700868F47 /* IdentifierService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IdentifierService.swift; sourceTree = ""; }; - 552E5193293E71D700868F47 /* VCUseCase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VCUseCase.h; sourceTree = ""; }; - 552E5195293E71D700868F47 /* difwordlist.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = difwordlist.txt; sourceTree = ""; }; - 552E5196293E71D700868F47 /* PairwiseService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PairwiseService.swift; sourceTree = ""; }; - 552E5198293E71D700868F47 /* CoreDataManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoreDataManager.swift; sourceTree = ""; }; - 552E519A293E71D700868F47 /* Identifier.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Identifier.xcdatamodel; sourceTree = ""; }; - 552E519B293E71D700868F47 /* IdentifierDatabase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IdentifierDatabase.swift; sourceTree = ""; }; - 552E519C293E71D700868F47 /* LinkedDomainService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LinkedDomainService.swift; sourceTree = ""; }; - 552E519D293E71D700868F47 /* ServicesConstants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ServicesConstants.swift; sourceTree = ""; }; - 552E519E293E71D700868F47 /* DifWordList.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DifWordList.swift; sourceTree = ""; }; - 552E519F293E71D700868F47 /* ExchangeService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExchangeService.swift; sourceTree = ""; }; - 552E51A0293E71D700868F47 /* VerifiableCredentialSDK.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VerifiableCredentialSDK.swift; sourceTree = ""; }; - 552E51A1293E71D700868F47 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 552E51A2293E71D700868F47 /* IssuanceService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceService.swift; sourceTree = ""; }; - 552E51A3293E71D700868F47 /* PresentationService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationService.swift; sourceTree = ""; }; - 552E51A5293E71D700868F47 /* ViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; - 552E51A6293E71D700868F47 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 552E51A8293E71D700868F47 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 552E51AA293E71D700868F47 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 552E51AB293E71D700868F47 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 552E51AC293E71D700868F47 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 552E51AD293E71D700868F47 /* SceneDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; - 552E51AE293E71D700868F47 /* VCServices.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = VCServices.xcodeproj; sourceTree = ""; }; - 552E51B5293E71D700868F47 /* MockClaims.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockClaims.swift; sourceTree = ""; }; - 552E51B6293E71D700868F47 /* MockAlgorithm.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockAlgorithm.swift; sourceTree = ""; }; - 552E51B7293E71D700868F47 /* MockVerifier.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockVerifier.swift; sourceTree = ""; }; - 552E51B8293E71D700868F47 /* MockCryptoOperations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockCryptoOperations.swift; sourceTree = ""; }; - 552E51B9293E71D700868F47 /* MockSigner.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockSigner.swift; sourceTree = ""; }; - 552E51BA293E71D700868F47 /* JwsDecoderTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JwsDecoderTests.swift; sourceTree = ""; }; - 552E51BB293E71D700868F47 /* TokenVerifierTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TokenVerifierTests.swift; sourceTree = ""; }; - 552E51BC293E71D700868F47 /* ClaimsTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ClaimsTest.swift; sourceTree = ""; }; - 552E51BD293E71D700868F47 /* JwsTokenTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JwsTokenTests.swift; sourceTree = ""; }; - 552E51BE293E71D700868F47 /* ECPublicJwkTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ECPublicJwkTests.swift; sourceTree = ""; }; - 552E51BF293E71D700868F47 /* JwsEncoderTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JwsEncoderTests.swift; sourceTree = ""; }; - 552E51C0293E71D700868F47 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 552E51C1293E71D700868F47 /* Secp256k1Tests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Secp256k1Tests.swift; sourceTree = ""; }; - 552E51C3293E71D700868F47 /* Claims.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Claims.swift; sourceTree = ""; }; - 552E51C4293E71D700868F47 /* JweEncoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JweEncoder.swift; sourceTree = ""; }; - 552E51C5293E71D700868F47 /* JweDecoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JweDecoder.swift; sourceTree = ""; }; - 552E51C6293E71D700868F47 /* VCTokenError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VCTokenError.swift; sourceTree = ""; }; - 552E51C8293E71D700868F47 /* PbesJwe.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PbesJwe.swift; sourceTree = ""; }; - 552E51C9293E71D700868F47 /* ECPublicJwk.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ECPublicJwk.swift; sourceTree = ""; }; - 552E51CA293E71D700868F47 /* Secp256k1Signer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Secp256k1Signer.swift; sourceTree = ""; }; - 552E51CB293E71D700868F47 /* JWK.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JWK.swift; sourceTree = ""; }; - 552E51CC293E71D700868F47 /* Header.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Header.swift; sourceTree = ""; }; - 552E51CD293E71D700868F47 /* JwsEncoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JwsEncoder.swift; sourceTree = ""; }; - 552E51CE293E71D700868F47 /* VCToken.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VCToken.h; sourceTree = ""; }; - 552E51CF293E71D700868F47 /* JweToken.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JweToken.swift; sourceTree = ""; }; - 552E51D0293E71D700868F47 /* JwsDecoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JwsDecoder.swift; sourceTree = ""; }; - 552E51D1293E71D700868F47 /* TokenVerifier.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TokenVerifier.swift; sourceTree = ""; }; - 552E51D3293E71D700868F47 /* TokenVerifying.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TokenVerifying.swift; sourceTree = ""; }; - 552E51D4293E71D700868F47 /* TokenSigning.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TokenSigning.swift; sourceTree = ""; }; - 552E51D5293E71D700868F47 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 552E51D6293E71D700868F47 /* JwsToken.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JwsToken.swift; sourceTree = ""; }; - 552E51D7293E71D700868F47 /* KeyId.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyId.swift; sourceTree = ""; }; - 552E51D8293E71D700868F47 /* VCToken.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = VCToken.xcodeproj; sourceTree = ""; }; - 552E51DB293E71D700868F47 /* .gitmodules */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .gitmodules; sourceTree = ""; }; - 552E51DE293E71D700868F47 /* .gitignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .gitignore; sourceTree = ""; }; - 552E51EA293E71D700868F47 /* CODEOWNERS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CODEOWNERS; sourceTree = ""; }; - 552E51ED293E71D700868F47 /* Sha256Tests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Sha256Tests.swift; sourceTree = ""; }; - 552E51EF293E71D700868F47 /* Utf8TestData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Utf8TestData.swift; sourceTree = ""; }; - 552E51F0293E71D700868F47 /* VCSDKConfigurationMock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VCSDKConfigurationMock.swift; sourceTree = ""; }; - 552E51F1293E71D700868F47 /* HashingMock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HashingMock.swift; sourceTree = ""; }; - 552E51F2293E71D700868F47 /* SecretStoreMock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecretStoreMock.swift; sourceTree = ""; }; - 552E51F3293E71D700868F47 /* SecretMock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecretMock.swift; sourceTree = ""; }; - 552E51F4293E71D700868F47 /* SigningMock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SigningMock.swift; sourceTree = ""; }; - 552E51F5293E71D700868F47 /* PublicKeyMock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PublicKeyMock.swift; sourceTree = ""; }; - 552E51F6293E71D700868F47 /* KeyManagementOperationsTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyManagementOperationsTests.swift; sourceTree = ""; }; - 552E51F7293E71D700868F47 /* Sha512Tests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Sha512Tests.swift; sourceTree = ""; }; - 552E51F8293E71D700868F47 /* AesTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AesTests.swift; sourceTree = ""; }; - 552E51F9293E71D700868F47 /* CryptoOperationsTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CryptoOperationsTests.swift; sourceTree = ""; }; - 552E51FA293E71D700868F47 /* Secp256k1PublicKeyTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Secp256k1PublicKeyTests.swift; sourceTree = ""; }; - 552E51FB293E71D700868F47 /* ES256kTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ES256kTests.swift; sourceTree = ""; }; - 552E51FC293E71D700868F47 /* PbkdfTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PbkdfTests.swift; sourceTree = ""; }; - 552E51FD293E71D700868F47 /* KeychainSecretStoreTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeychainSecretStoreTests.swift; sourceTree = ""; }; - 552E51FE293E71D700868F47 /* EdDSATests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EdDSATests.swift; sourceTree = ""; }; - 552E51FF293E71D700868F47 /* Random32BytesSecretTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Random32BytesSecretTests.swift; sourceTree = ""; }; - 552E5200293E71D700868F47 /* HmacSha512Tests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HmacSha512Tests.swift; sourceTree = ""; }; - 552E5201293E71D700868F47 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 552E5202293E71D700868F47 /* Secp256k1Tests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Secp256k1Tests.swift; sourceTree = ""; }; - 552E5204293E71D700868F47 /* KeychainSecretStore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeychainSecretStore.swift; sourceTree = ""; }; - 552E5206293E71D700868F47 /* Aes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Aes.swift; sourceTree = ""; }; - 552E5207293E71D700868F47 /* HmacSha512.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HmacSha512.swift; sourceTree = ""; }; - 552E5208293E71D700868F47 /* Sha256.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Sha256.swift; sourceTree = ""; }; - 552E5209293E71D700868F47 /* SupportedSigningAlgorithms.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SupportedSigningAlgorithms.swift; sourceTree = ""; }; - 552E520A293E71D700868F47 /* EdDSA.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EdDSA.swift; sourceTree = ""; }; - 552E520B293E71D700868F47 /* Pbkdf.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Pbkdf.swift; sourceTree = ""; }; - 552E520C293E71D700868F47 /* SigningAlgorithm.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SigningAlgorithm.swift; sourceTree = ""; }; - 552E520D293E71D700868F47 /* HmacSha2AesCbc.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HmacSha2AesCbc.swift; sourceTree = ""; }; - 552E520E293E71D700868F47 /* ES256k.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ES256k.swift; sourceTree = ""; }; - 552E520F293E71D700868F47 /* Secp256k1.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Secp256k1.swift; sourceTree = ""; }; - 552E5210293E71D700868F47 /* HmacSha2.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HmacSha2.swift; sourceTree = ""; }; - 552E5211293E71D700868F47 /* Sha512.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Sha512.swift; sourceTree = ""; }; - 552E5213293E71D700868F47 /* Data+Hex.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Data+Hex.swift"; sourceTree = ""; }; - 552E5214293E71D700868F47 /* Data+Base64.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Data+Base64.swift"; sourceTree = ""; }; - 552E5215293E71D700868F47 /* KeyManagementOperations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyManagementOperations.swift; sourceTree = ""; }; - 552E5216293E71D700868F47 /* CryptoOperations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CryptoOperations.swift; sourceTree = ""; }; - 552E5218293E71D700868F47 /* PublicKey.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PublicKey.swift; sourceTree = ""; }; - 552E5219293E71D700868F47 /* EphemeralSecret.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EphemeralSecret.swift; sourceTree = ""; }; - 552E521A293E71D700868F47 /* ED25519PublicKey.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ED25519PublicKey.swift; sourceTree = ""; }; - 552E521B293E71D700868F47 /* Secret.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Secret.swift; sourceTree = ""; }; - 552E521C293E71D700868F47 /* Random32BytesSecret.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Random32BytesSecret.swift; sourceTree = ""; }; - 552E521D293E71D700868F47 /* Secp256k1PublicKey.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Secp256k1PublicKey.swift; sourceTree = ""; }; - 552E521E293E71D700868F47 /* SecretStoring.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecretStoring.swift; sourceTree = ""; }; - 552E5220293E71D700868F47 /* Signing.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Signing.swift; sourceTree = ""; }; - 552E5221293E71D700868F47 /* VCSDKConfigurable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VCSDKConfigurable.swift; sourceTree = ""; }; - 552E5222293E71D700868F47 /* Hashing.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Hashing.swift; sourceTree = ""; }; - 552E5223293E71D700868F47 /* CryptoOperating.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CryptoOperating.swift; sourceTree = ""; }; - 552E5224293E71D700868F47 /* SupportedCurve.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SupportedCurve.swift; sourceTree = ""; }; - 552E5225293E71D700868F47 /* SupportedHashAlgorithm.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SupportedHashAlgorithm.swift; sourceTree = ""; }; - 552E5226293E71D700868F47 /* KeyManagementOperating.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyManagementOperating.swift; sourceTree = ""; }; - 552E5227293E71D700868F47 /* VCCrypto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VCCrypto.h; sourceTree = ""; }; - 552E5228293E71D700868F47 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 552E5229293E71D700868F47 /* VCCrypto.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = VCCrypto.xcodeproj; sourceTree = ""; }; - 552E522D293E71D700868F47 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 552E522F293E71D700868F47 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; - 552E5231293E71D700868F47 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 552E5232293E71D700868F47 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 552E5233293E71D700868F47 /* ContentView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; - 552E5234293E71D700868F47 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 552E5235293E71D700868F47 /* SceneDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; - 552E5237293E71D700868F47 /* VCNetworking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = VCNetworking.xcodeproj; sourceTree = ""; }; - 552E523C293E71D700868F47 /* MockNetworkOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockNetworkOperation.swift; sourceTree = ""; }; - 552E523D293E71D700868F47 /* TestData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestData.swift; sourceTree = ""; }; - 552E523E293E71D700868F47 /* UrlProtocolMock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UrlProtocolMock.swift; sourceTree = ""; }; - 552E523F293E71D700868F47 /* MockObject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockObject.swift; sourceTree = ""; }; - 552E5240293E71D700868F47 /* MockDecoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockDecoder.swift; sourceTree = ""; }; - 552E5242293E71D700868F47 /* HelperNetworkFunctionsTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HelperNetworkFunctionsTests.swift; sourceTree = ""; }; - 552E5244293E71D700868F47 /* SimpleSuccessHandlerTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SimpleSuccessHandlerTests.swift; sourceTree = ""; }; - 552E5246293E71D700868F47 /* NoRetryTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NoRetryTests.swift; sourceTree = ""; }; - 552E5249293E71D700868F47 /* PostIssuanceResponseOperationTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostIssuanceResponseOperationTests.swift; sourceTree = ""; }; - 552E524A293E71D700868F47 /* PostPresentationResponseOperationTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostPresentationResponseOperationTests.swift; sourceTree = ""; }; - 552E524B293E71D700868F47 /* PostExchangeRequestOperationTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostExchangeRequestOperationTests.swift; sourceTree = ""; }; - 552E524D293E71D700868F47 /* FetchDIDDocumentOperationTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FetchDIDDocumentOperationTests.swift; sourceTree = ""; }; - 552E524E293E71D700868F47 /* FetchWellKnownConfigDocumentOperationTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FetchWellKnownConfigDocumentOperationTests.swift; sourceTree = ""; }; - 552E524F293E71D700868F47 /* FetchContractOperationTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FetchContractOperationTests.swift; sourceTree = ""; }; - 552E5250293E71D700868F47 /* FetchPresentationRequestOperationTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FetchPresentationRequestOperationTests.swift; sourceTree = ""; }; - 552E5251293E71D700868F47 /* NetworkOperationTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetworkOperationTests.swift; sourceTree = ""; }; - 552E5253293E71D700868F47 /* String+PercentEncodingTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String+PercentEncodingTests.swift"; sourceTree = ""; }; - 552E5255293E71D700868F47 /* SimpleFailureHandlerTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SimpleFailureHandlerTests.swift; sourceTree = ""; }; - 552E5257293E71D700868F47 /* ExchangeRequestEncoderTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExchangeRequestEncoderTests.swift; sourceTree = ""; }; - 552E5258293E71D700868F47 /* IssuanceResponseEncoderTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceResponseEncoderTests.swift; sourceTree = ""; }; - 552E525A293E71D700868F47 /* PresentationServiceResponseDecoderTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationServiceResponseDecoderTests.swift; sourceTree = ""; }; - 552E525B293E71D700868F47 /* ContractDecoderTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContractDecoderTests.swift; sourceTree = ""; }; - 552E525C293E71D700868F47 /* PresentationRequestDecoderTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationRequestDecoderTests.swift; sourceTree = ""; }; - 552E525D293E71D700868F47 /* DIDDocumentDecoderTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DIDDocumentDecoderTests.swift; sourceTree = ""; }; - 552E525E293E71D700868F47 /* IssuanceServiceResponseDecoderTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceServiceResponseDecoderTests.swift; sourceTree = ""; }; - 552E525F293E71D700868F47 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 552E5261293E71D700868F47 /* NetworkingError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetworkingError.swift; sourceTree = ""; }; - 552E5263293E71D700868F47 /* HelperNetworkFunctions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HelperNetworkFunctions.swift; sourceTree = ""; }; - 552E5264293E71D700868F47 /* ExchangeNetworkCalls.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExchangeNetworkCalls.swift; sourceTree = ""; }; - 552E5265293E71D700868F47 /* WellKnownConfigDocumentNetworkCalls.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WellKnownConfigDocumentNetworkCalls.swift; sourceTree = ""; }; - 552E5267293E71D700868F47 /* SimpleSuccessHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SimpleSuccessHandler.swift; sourceTree = ""; }; - 552E5268293E71D700868F47 /* SuccessHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SuccessHandler.swift; sourceTree = ""; }; - 552E526A293E71D700868F47 /* NoRetry.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NoRetry.swift; sourceTree = ""; }; - 552E526B293E71D700868F47 /* RetryHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RetryHandler.swift; sourceTree = ""; }; - 552E526C293E71D700868F47 /* IssuanceNetworkCalls.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceNetworkCalls.swift; sourceTree = ""; }; - 552E526E293E71D700868F47 /* NetworkOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetworkOperation.swift; sourceTree = ""; }; - 552E5270293E71D700868F47 /* PostPresentationResponseOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostPresentationResponseOperation.swift; sourceTree = ""; }; - 552E5271293E71D700868F47 /* PostNetworkOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostNetworkOperation.swift; sourceTree = ""; }; - 552E5272293E71D700868F47 /* PostIssuanceResponseOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostIssuanceResponseOperation.swift; sourceTree = ""; }; - 552E5273293E71D700868F47 /* PostIssuanceCompletionResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostIssuanceCompletionResponse.swift; sourceTree = ""; }; - 552E5274293E71D700868F47 /* PostExchangeRequestOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostExchangeRequestOperation.swift; sourceTree = ""; }; - 552E5276293E71D700868F47 /* FetchDIDDocumentOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FetchDIDDocumentOperation.swift; sourceTree = ""; }; - 552E5277293E71D700868F47 /* FetchContractOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FetchContractOperation.swift; sourceTree = ""; }; - 552E5278293E71D700868F47 /* FetchWellKnownConfigDocumentOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FetchWellKnownConfigDocumentOperation.swift; sourceTree = ""; }; - 552E5279293E71D700868F47 /* FetchPresentationRequestOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FetchPresentationRequestOperation.swift; sourceTree = ""; }; - 552E527B293E71D700868F47 /* String+PercentEncoding.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String+PercentEncoding.swift"; sourceTree = ""; }; - 552E527C293E71D700868F47 /* URL+PercentEncodedString.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "URL+PercentEncodedString.swift"; sourceTree = ""; }; - 552E527E293E71D700868F47 /* FailureHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FailureHandler.swift; sourceTree = ""; }; - 552E527F293E71D700868F47 /* SimpleFailureHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SimpleFailureHandler.swift; sourceTree = ""; }; - 552E5280293E71D700868F47 /* NetworkingConstants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetworkingConstants.swift; sourceTree = ""; }; - 552E5282293E71D700868F47 /* ExchangeRequestEncoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExchangeRequestEncoder.swift; sourceTree = ""; }; - 552E5283293E71D700868F47 /* PresentationResponseEncoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationResponseEncoder.swift; sourceTree = ""; }; - 552E5284293E71D700868F47 /* Encoding.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Encoding.swift; sourceTree = ""; }; - 552E5285293E71D700868F47 /* IssuanceCompletionResponseEncoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceCompletionResponseEncoder.swift; sourceTree = ""; }; - 552E5286293E71D700868F47 /* IssuanceResponseEncoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceResponseEncoder.swift; sourceTree = ""; }; - 552E5287293E71D700868F47 /* PresentationNetworkCalls.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationNetworkCalls.swift; sourceTree = ""; }; - 552E5289293E71D700868F47 /* WellKnownConfigDocumentDecoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WellKnownConfigDocumentDecoder.swift; sourceTree = ""; }; - 552E528A293E71D700868F47 /* DIDDocumentDecoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DIDDocumentDecoder.swift; sourceTree = ""; }; - 552E528B293E71D700868F47 /* BasicServiceResponseDecoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BasicServiceResponseDecoder.swift; sourceTree = ""; }; - 552E528C293E71D700868F47 /* ContractDecoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContractDecoder.swift; sourceTree = ""; }; - 552E528D293E71D700868F47 /* IssuanceServiceResponseDecoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceServiceResponseDecoder.swift; sourceTree = ""; }; - 552E528E293E71D700868F47 /* PresentationRequestDecoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationRequestDecoder.swift; sourceTree = ""; }; - 552E528F293E71D700868F47 /* Decoding.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Decoding.swift; sourceTree = ""; }; - 552E5290293E71D700868F47 /* PresentationServiceResponseDecoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationServiceResponseDecoder.swift; sourceTree = ""; }; - 552E5291293E71D700868F47 /* DIDDocumentNetworkCalls.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DIDDocumentNetworkCalls.swift; sourceTree = ""; }; - 552E5292293E71D700868F47 /* networking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = networking.h; sourceTree = ""; }; - 552E5293293E71D700868F47 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 552E5295293E71D700868F47 /* VCSamples.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = VCSamples.xcodeproj; sourceTree = ""; }; - 552E5299293E71D700868F47 /* IssuanceSample.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuanceSample.swift; sourceTree = ""; }; - 552E529A293E71D700868F47 /* PresentationSample.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationSample.swift; sourceTree = ""; }; - 552E529B293E71D700868F47 /* VCSamples.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VCSamples.h; sourceTree = ""; }; - 552E529C293E71D700868F47 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 55E33666293E7B5000CD2ED7 /* PMKFoundation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = PMKFoundation.xcodeproj; path = Foundation/PMKFoundation.xcodeproj; sourceTree = ""; }; - 55E3366F293E7B5F00CD2ED7 /* PromiseKit.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = PromiseKit.xcodeproj; path = PromiseKit/PromiseKit.xcodeproj; sourceTree = ""; }; - 55E33685293E7B7D00CD2ED7 /* Secp256k1.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Secp256k1.xcodeproj; path = Secp256k1/Secp256k1.xcodeproj; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 552E508F293E6AB200868F47 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 55E33684293E7B6600CD2ED7 /* PromiseKit.framework in Frameworks */, - 552E5450293E737300868F47 /* VCEntities.framework in Frameworks */, - 552E544E293E736F00868F47 /* VCCrypto.framework in Frameworks */, - 552E5456293E738200868F47 /* VCToken.framework in Frameworks */, - 552E5452293E737900868F47 /* VCNetworking.framework in Frameworks */, - 552E5454293E737F00868F47 /* VCServices.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 552E5097293E6AB200868F47 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 552E509B293E6AB200868F47 /* WalletLibrary.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 552E5088293E6AB100868F47 = { - isa = PBXGroup; - children = ( - 552E50AA293E6B6B00868F47 /* Submodules */, - 552E5094293E6AB200868F47 /* WalletLibrary */, - 552E509E293E6AB200868F47 /* WalletLibraryTests */, - 552E5093293E6AB200868F47 /* Products */, - 552E544A293E736C00868F47 /* Frameworks */, - ); - sourceTree = ""; - }; - 552E5093293E6AB200868F47 /* Products */ = { - isa = PBXGroup; - children = ( - 552E5092293E6AB200868F47 /* WalletLibrary.framework */, - 552E509A293E6AB200868F47 /* WalletLibraryTests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 552E5094293E6AB200868F47 /* WalletLibrary */ = { - isa = PBXGroup; - children = ( - 552E50AB293E6F5500868F47 /* VerifiedIdFlow.swift */, - 552E5095293E6AB200868F47 /* WalletLibrary.h */, - ); - path = WalletLibrary; - sourceTree = ""; - }; - 552E509E293E6AB200868F47 /* WalletLibraryTests */ = { - isa = PBXGroup; - children = ( - 552E509F293E6AB200868F47 /* VerifiedIdFlowTests.swift */, - ); - path = WalletLibraryTests; - sourceTree = ""; - }; - 552E50AA293E6B6B00868F47 /* Submodules */ = { - isa = PBXGroup; - children = ( - 552E50B9293E71D600868F47 /* VerifiableCredential-SDK-iOS */, - ); - path = Submodules; - sourceTree = ""; - }; - 552E50B9293E71D600868F47 /* VerifiableCredential-SDK-iOS */ = { - isa = PBXGroup; - children = ( - 552E50BC293E71D600868F47 /* VCEntities */, - 552E5174293E71D600868F47 /* VCServices */, - 552E51B2293E71D700868F47 /* VCToken */, - 552E51DB293E71D700868F47 /* .gitmodules */, - 552E51DE293E71D700868F47 /* .gitignore */, - 552E51E0293E71D700868F47 /* Submodules */, - 552E51E9293E71D700868F47 /* .github */, - 552E51EB293E71D700868F47 /* VCCrypto */, - 552E5236293E71D700868F47 /* VCNetworking */, - 552E5294293E71D700868F47 /* VCSamples */, - ); - path = "VerifiableCredential-SDK-iOS"; - sourceTree = ""; - }; - 552E50BC293E71D600868F47 /* VCEntities */ = { - isa = PBXGroup; - children = ( - 552E50BD293E71D600868F47 /* VCEntities.xcodeproj */, - 552E50C0293E71D600868F47 /* VCEntities */, - 552E5152293E71D600868F47 /* VCEntitiesTests */, - ); - path = VCEntities; - sourceTree = ""; - }; - 552E50BE293E71D600868F47 /* Products */ = { - isa = PBXGroup; - children = ( - 552E52AD293E71D700868F47 /* VCEntities.framework */, - 552E52AF293E71D700868F47 /* VCEntitiesTests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 552E50C0293E71D600868F47 /* VCEntities */ = { - isa = PBXGroup; - children = ( - 552E50C1293E71D600868F47 /* ResponseMappings.swift */, - 552E50C2293E71D600868F47 /* VCEntities.h */, - 552E50C3293E71D600868F47 /* exchange */, - 552E50C7293E71D600868F47 /* verifiablePresentation */, - 552E50CA293E71D600868F47 /* util */, - 552E50D0293E71D600868F47 /* RequestedVerifiableCredentialMapping.swift */, - 552E50D1293E71D600868F47 /* ResponseContaining.swift */, - 552E50D2293E71D600868F47 /* linkedDomains */, - 552E50D8293E71D600868F47 /* discovery */, - 552E50DA293E71D600868F47 /* oidc */, - 552E50E2293E71D600868F47 /* formatters */, - 552E50EC293E71D600868F47 /* identifier */, - 552E50FC293E71D600868F47 /* issuance */, - 552E5116293E71D600868F47 /* verifiableCredential */, - 552E511A293E71D600868F47 /* validators */, - 552E511E293E71D600868F47 /* backup */, - 552E512E293E71D600868F47 /* presentation */, - 552E514B293E71D600868F47 /* logging */, - 552E5151293E71D600868F47 /* Info.plist */, - ); - path = VCEntities; - sourceTree = ""; + 55E336DD293FCE4200CD2ED7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 552E50BD293E71D600868F47 /* VCEntities.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 5557572E251BC575009979AB; + remoteInfo = VCEntities; }; - 552E50C3293E71D600868F47 /* exchange */ = { - isa = PBXGroup; - children = ( - 552E50C4293E71D600868F47 /* claims */, - 552E50C6293E71D600868F47 /* ExchangeRequestContainer.swift */, - ); - path = exchange; - sourceTree = ""; + 55E336DF293FCE4200CD2ED7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 552E50BD293E71D600868F47 /* VCEntities.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 55575737251BC575009979AB; + remoteInfo = VCEntitiesTests; }; - 552E50C4293E71D600868F47 /* claims */ = { - isa = PBXGroup; - children = ( - 552E50C5293E71D600868F47 /* ExchangeRequestClaims.swift */, - ); - path = claims; - sourceTree = ""; + 55E336E6293FCE4F00CD2ED7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 552E51AE293E71D700868F47 /* VCServices.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 550F1E3525101758009AF467; + remoteInfo = VCServices; }; - 552E50C7293E71D600868F47 /* verifiablePresentation */ = { - isa = PBXGroup; - children = ( - 552E50C8293E71D600868F47 /* VerifiablePresentationDescriptor.swift */, - 552E50C9293E71D600868F47 /* VerifiablePresentationClaims.swift */, - ); - path = verifiablePresentation; - sourceTree = ""; + 55E336E8293FCE4F00CD2ED7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 552E51AE293E71D700868F47 /* VCServices.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 550F1E3E25101759009AF467; + remoteInfo = VCServicesTests; }; - 552E50CA293E71D600868F47 /* util */ = { - isa = PBXGroup; - children = ( - 552E50CB293E71D600868F47 /* Multihash.swift */, - 552E50CC293E71D600868F47 /* VCEntitiesConstants.swift */, - 552E50CD293E71D600868F47 /* VCSDKConfiguration.swift */, - 552E50CE293E71D600868F47 /* CorrelationHeader.swift */, - 552E50CF293E71D600868F47 /* JSONCodingKeys.swift */, - ); - path = util; - sourceTree = ""; + 55E336EA293FCE4F00CD2ED7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 552E51AE293E71D700868F47 /* VCServices.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 555BDAF52530E5E2001E7A18; + remoteInfo = VCServicesTestApp; }; - 552E50D2293E71D600868F47 /* linkedDomains */ = { - isa = PBXGroup; - children = ( - 552E50D3293E71D600868F47 /* DomainLinkageCredentialSubject.swift */, - 552E50D4293E71D600868F47 /* DomainLinkageCredential.swift */, - 552E50D5293E71D600868F47 /* DomainLinkageCredentialContent.swift */, - 552E50D6293E71D600868F47 /* LinkedDomainResult.swift */, - 552E50D7293E71D600868F47 /* WellKnownConfigDocument.swift */, - ); - path = linkedDomains; - sourceTree = ""; + 55E336F0293FCE5E00CD2ED7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 552E51D8293E71D700868F47 /* VCToken.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 55ADE25724F5406000D9990E; + remoteInfo = VCToken; }; - 552E50D8293E71D600868F47 /* discovery */ = { - isa = PBXGroup; - children = ( - 552E50D9293E71D600868F47 /* DiscoveryServiceResponse.swift */, - ); - path = discovery; - sourceTree = ""; + 55E336F2293FCE5E00CD2ED7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 552E51D8293E71D700868F47 /* VCToken.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 55ADE26024F5406000D9990E; + remoteInfo = VCTokenTests; }; - 552E50DA293E71D600868F47 /* oidc */ = { - isa = PBXGroup; - children = ( - 552E50DB293E71D600868F47 /* OIDCClaims.swift */, - 552E50DC293E71D600868F47 /* AllowedAlgorithms.swift */, - 552E50DD293E71D600868F47 /* PresentationRequestClaims.swift */, - 552E50DE293E71D600868F47 /* RequestedVPToken.swift */, - 552E50DF293E71D600868F47 /* RegistrationClaims.swift */, - 552E50E0293E71D600868F47 /* SupportedVerifiablePresentationFormats.swift */, - 552E50E1293E71D600868F47 /* RequestedClaims.swift */, - ); - path = oidc; - sourceTree = ""; + 55E336F9293FCE8200CD2ED7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 552E5229293E71D700868F47 /* VCCrypto.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 92CDE7AA24DC78DD00F95B5D; + remoteInfo = VCCrypto; }; - 552E50E2293E71D600868F47 /* formatters */ = { - isa = PBXGroup; - children = ( - 552E50E3293E71D600868F47 /* PresentationResponseFormatter.swift */, - 552E50E4293E71D600868F47 /* TokenTimeConstraints.swift */, - 552E50E5293E71D600868F47 /* ExchangeRequestFormatter.swift */, - 552E50E6293E71D600868F47 /* FormatterError.swift */, - 552E50E7293E71D600868F47 /* JwsHeaderFormatter .swift */, - 552E50E8293E71D600868F47 /* IssuanceVPFormatter.swift */, - 552E50E9293E71D600868F47 /* IdentifierFormatter.swift */, - 552E50EA293E71D600868F47 /* IssuanceResponseFormatter.swift */, - 552E50EB293E71D600868F47 /* VerifiablePresentationFormatter.swift */, - ); - path = formatters; - sourceTree = ""; + 55E336FB293FCE8200CD2ED7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 552E5229293E71D700868F47 /* VCCrypto.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 92CDE7B324DC78DD00F95B5D; + remoteInfo = VCCryptoTests; }; - 552E50EC293E71D600868F47 /* identifier */ = { - isa = PBXGroup; - children = ( - 552E50ED293E71D600868F47 /* IdentifierCreator.swift */, - 552E50EE293E71D600868F47 /* AliasComputer.swift */, - 552E50EF293E71D600868F47 /* document */, - 552E50FA293E71D600868F47 /* KeyContainer.swift */, - 552E50FB293E71D600868F47 /* Identifier.swift */, - ); - path = identifier; - sourceTree = ""; - }; - 552E50EF293E71D600868F47 /* document */ = { - isa = PBXGroup; - children = ( - 552E50F0293E71D600868F47 /* IdentifierDocumentPublicKey.swift */, - 552E50F1293E71D600868F47 /* IdentifierDocumentServiceEndpoint.swift */, - 552E50F2293E71D600868F47 /* ion */, - 552E50F7293E71D600868F47 /* IdentifierDocumentSuffixDescriptor.swift */, - 552E50F8293E71D600868F47 /* IdentifierDocument.swift */, - 552E50F9293E71D600868F47 /* IdentifierDocumentServiceEndpointDescriptor.swift */, - ); - path = document; - sourceTree = ""; - }; - 552E50F2293E71D600868F47 /* ion */ = { - isa = PBXGroup; - children = ( - 552E50F3293E71D600868F47 /* IONDocumentPatch.swift */, - 552E50F4293E71D600868F47 /* IONDocumentInitialState.swift */, - 552E50F5293E71D600868F47 /* IONDocumentDeltaDescriptor.swift */, - 552E50F6293E71D600868F47 /* IONDocumentModel.swift */, - ); - path = ion; - sourceTree = ""; - }; - 552E50FC293E71D600868F47 /* issuance */ = { - isa = PBXGroup; - children = ( - 552E50FD293E71D600868F47 /* contract */, - 552E510C293E71D600868F47 /* IssuanceCompletionResponse.swift */, - 552E510D293E71D600868F47 /* IssuanceResponseContainer.swift */, - 552E510E293E71D600868F47 /* IssuanceRequest.swift */, - 552E510F293E71D600868F47 /* AttestationResponseDescriptor.swift */, - 552E5110293E71D600868F47 /* IssuanceServiceResponse.swift */, - 552E5111293E71D600868F47 /* ContractServiceResponse.swift */, - 552E5112293E71D600868F47 /* IssuancePin.swift */, - 552E5113293E71D600868F47 /* claims */, - ); - path = issuance; - sourceTree = ""; - }; - 552E50FD293E71D600868F47 /* contract */ = { - isa = PBXGroup; - children = ( - 552E50FE293E71D600868F47 /* AttestationsDescriptor.swift */, - 552E50FF293E71D600868F47 /* PresentationDescriptor.swift */, - 552E5100293E71D600868F47 /* ConsentDisplayDescriptor.swift */, - 552E5101293E71D600868F47 /* LogoDisplayDescriptor.swift */, - 552E5102293E71D600868F47 /* DisplayDescriptor.swift */, - 552E5103293E71D600868F47 /* ClaimDisplayDescriptor.swift */, - 552E5104293E71D600868F47 /* AccessTokenDescriptor.swift */, - 552E5105293E71D600868F47 /* IssuerDescriptor.swift */, - 552E5106293E71D600868F47 /* ContractInputDescriptor.swift */, - 552E5107293E71D600868F47 /* Contract.swift */, - 552E5108293E71D600868F47 /* CardDisplayDescriptor.swift */, - 552E5109293E71D600868F47 /* SelfIssuedClaimsDescriptor.swift */, - 552E510A293E71D600868F47 /* ClaimDescriptor.swift */, - 552E510B293E71D600868F47 /* IdTokenDescriptor.swift */, - ); - path = contract; - sourceTree = ""; - }; - 552E5113293E71D600868F47 /* claims */ = { - isa = PBXGroup; - children = ( - 552E5114293E71D600868F47 /* PinClaims.swift */, - 552E5115293E71D600868F47 /* IssuanceResponseClaims.swift */, - ); - path = claims; - sourceTree = ""; - }; - 552E5116293E71D600868F47 /* verifiableCredential */ = { - isa = PBXGroup; - children = ( - 552E5117293E71D600868F47 /* ServiceDescriptor.swift */, - 552E5118293E71D600868F47 /* VerifiableCredentialDescriptor.swift */, - 552E5119293E71D600868F47 /* VCClaims.swift */, - ); - path = verifiableCredential; - sourceTree = ""; - }; - 552E511A293E71D600868F47 /* validators */ = { - isa = PBXGroup; - children = ( - 552E511B293E71D600868F47 /* PresentationRequestValidator.swift */, - 552E511C293E71D600868F47 /* DomainLinkageCredentialValidator.swift */, - 552E511D293E71D600868F47 /* IssuanceRequestValidator.swift */, - ); - path = validators; - sourceTree = ""; - }; - 552E511E293E71D600868F47 /* backup */ = { - isa = PBXGroup; - children = ( - 552E511F293E71D600868F47 /* UnprotectedBackup.swift */, - 552E5120293E71D600868F47 /* content */, - 552E5129293E71D600868F47 /* container */, - ); - path = backup; - sourceTree = ""; - }; - 552E5120293E71D600868F47 /* content */ = { - isa = PBXGroup; - children = ( - 552E5121293E71D600868F47 /* ProtectedBackupData.swift */, - 552E5122293E71D600868F47 /* microsoft2020 */, - 552E5128293E71D600868F47 /* UnprotectedBackupData.swift */, - ); - path = content; - sourceTree = ""; - }; - 552E5122293E71D600868F47 /* microsoft2020 */ = { - isa = PBXGroup; - children = ( - 552E5123293E71D600868F47 /* Microsoft2020IdentifierBackup.swift */, - 552E5124293E71D600868F47 /* RawIdentity.swift */, - 552E5125293E71D600868F47 /* VcMetadata.swift */, - 552E5126293E71D600868F47 /* Microsoft2020UnprotectedBackup.swift */, - 552E5127293E71D600868F47 /* WalletMetadata.swift */, - ); - path = microsoft2020; - sourceTree = ""; - }; - 552E5129293E71D600868F47 /* container */ = { - isa = PBXGroup; - children = ( - 552E512A293E71D600868F47 /* BackupProtectionMethod.swift */, - 552E512B293E71D600868F47 /* jwe */, - ); - path = container; - sourceTree = ""; - }; - 552E512B293E71D600868F47 /* jwe */ = { - isa = PBXGroup; - children = ( - 552E512C293E71D600868F47 /* JwePasswordProtectedBackupData.swift */, - 552E512D293E71D600868F47 /* JwePasswordProtectionMethod.swift */, - ); - path = jwe; - sourceTree = ""; - }; - 552E512E293E71D600868F47 /* presentation */ = { - isa = PBXGroup; - children = ( - 552E512F293E71D600868F47 /* issuerIdToken */, - 552E5133293E71D600868F47 /* presentationExchange */, - 552E5141293E71D600868F47 /* RequestedVerifiableCredentialMapping.swift */, - 552E5142293E71D600868F47 /* PresentationRequest.swift */, - 552E5143293E71D600868F47 /* PresentationResponse.swift */, - 552E5144293E71D600868F47 /* PresentationResponseClaims.swift */, - 552E5145293E71D600868F47 /* PresentationResponseContainer.swift */, - 552E5146293E71D600868F47 /* claims */, - ); - path = presentation; - sourceTree = ""; - }; - 552E512F293E71D600868F47 /* issuerIdToken */ = { - isa = PBXGroup; - children = ( - 552E5130293E71D600868F47 /* IssuerIdToken.swift */, - 552E5131293E71D600868F47 /* PinDescriptor.swift */, - 552E5132293E71D600868F47 /* IssuerIdTokenClaims.swift */, - ); - path = issuerIdToken; - sourceTree = ""; - }; - 552E5133293E71D600868F47 /* presentationExchange */ = { - isa = PBXGroup; - children = ( - 552E5134293E71D600868F47 /* response */, - 552E5139293E71D600868F47 /* request */, - ); - path = presentationExchange; - sourceTree = ""; - }; - 552E5134293E71D600868F47 /* response */ = { - isa = PBXGroup; - children = ( - 552E5135293E71D600868F47 /* VPTokenResponseDescription.swift */, - 552E5136293E71D600868F47 /* PresentationSubmission.swift */, - 552E5137293E71D600868F47 /* NestedInputDescriptorMapping.swift */, - 552E5138293E71D600868F47 /* InputDescriptorMapping.swift */, - ); - path = response; - sourceTree = ""; - }; - 552E5139293E71D600868F47 /* request */ = { - isa = PBXGroup; - children = ( - 552E513A293E71D600868F47 /* PresentationInputDescriptor.swift */, - 552E513B293E71D600868F47 /* PresentationExchangeField.swift */, - 552E513C293E71D600868F47 /* PresentationExchangeFilter.swift */, - 552E513D293E71D600868F47 /* InputDescriptorSchema.swift */, - 552E513E293E71D600868F47 /* PresentationExchangeConstraints.swift */, - 552E513F293E71D600868F47 /* PresentationDefinition.swift */, - 552E5140293E71D600868F47 /* IssuanceMetadata.swift */, - ); - path = request; - sourceTree = ""; - }; - 552E5146293E71D600868F47 /* claims */ = { - isa = PBXGroup; - children = ( - 552E5147293E71D600868F47 /* presentationExchangeResponse */, - 552E514A293E71D600868F47 /* PresentationRequestClaims.swift */, - ); - path = claims; - sourceTree = ""; - }; - 552E5147293E71D600868F47 /* presentationExchangeResponse */ = { - isa = PBXGroup; - children = ( - 552E5148293E71D600868F47 /* NestedInputDescriptorMapping.swift */, - 552E5149293E71D600868F47 /* InputDescriptorMapping.swift */, - ); - path = presentationExchangeResponse; - sourceTree = ""; - }; - 552E514B293E71D600868F47 /* logging */ = { - isa = PBXGroup; - children = ( - 552E514C293E71D600868F47 /* VCLogConsumer.swift */, - 552E514D293E71D600868F47 /* MeasureTime.swift */, - 552E514E293E71D600868F47 /* VCSDKLog.swift */, - 552E514F293E71D600868F47 /* VCTraceLevel.swift */, - 552E5150293E71D600868F47 /* DefaultLogConsumer.swift */, - ); - path = logging; - sourceTree = ""; - }; - 552E5152293E71D600868F47 /* VCEntitiesTests */ = { - isa = PBXGroup; - children = ( - 552E5153293E71D600868F47 /* mocks */, - 552E515D293E71D600868F47 /* exchange */, - 552E515F293E71D600868F47 /* util */, - 552E5162293E71D600868F47 /* formatters */, - 552E5167293E71D600868F47 /* identifier */, - 552E5169293E71D600868F47 /* issuance */, - 552E516D293E71D600868F47 /* verifiableCredential */, - 552E516F293E71D600868F47 /* validators */, - 552E5172293E71D600868F47 /* OIDCClaimsTests.swift */, - 552E5173293E71D600868F47 /* Info.plist */, - ); - path = VCEntitiesTests; - sourceTree = ""; - }; - 552E5153293E71D600868F47 /* mocks */ = { - isa = PBXGroup; - children = ( - 552E5154293E71D600868F47 /* MockTokenVerifier.swift */, - 552E5155293E71D600868F47 /* MockCryptoSecret.swift */, - 552E5156293E71D600868F47 /* MockOIDCClaims.swift */, - 552E5157293E71D600868F47 /* MockTokenSigner.swift */, - 552E5158293E71D600868F47 /* TestData.swift */, - 552E5159293E71D600868F47 /* MockCryptoOperations.swift */, - 552E515A293E71D600868F47 /* SecretStoreMock.swift */, - 552E515B293E71D600868F47 /* MockCodableObject.swift */, - 552E515C293E71D600868F47 /* MockIdentifierFormatter.swift */, - ); - path = mocks; - sourceTree = ""; - }; - 552E515D293E71D600868F47 /* exchange */ = { - isa = PBXGroup; - children = ( - 552E515E293E71D600868F47 /* ExchangeRequestContainerTests.swift */, - ); - path = exchange; - sourceTree = ""; - }; - 552E515F293E71D600868F47 /* util */ = { - isa = PBXGroup; - children = ( - 552E5160293E71D600868F47 /* JSONCodingKeysTests.swift */, - 552E5161293E71D600868F47 /* MultihashTests.swift */, - ); - path = util; - sourceTree = ""; - }; - 552E5162293E71D600868F47 /* formatters */ = { - isa = PBXGroup; - children = ( - 552E5163293E71D600868F47 /* IssuanceResponseFormatterTests.swift */, - 552E5164293E71D600868F47 /* ExchangeRequestFormatterTests.swift */, - 552E5165293E71D600868F47 /* IdentifierFormatterTests.swift */, - 552E5166293E71D600868F47 /* PresentationResponseFormatterTests.swift */, - ); - path = formatters; - sourceTree = ""; - }; - 552E5167293E71D600868F47 /* identifier */ = { - isa = PBXGroup; - children = ( - 552E5168293E71D600868F47 /* IdentifierCreatorTests.swift */, - ); - path = identifier; - sourceTree = ""; - }; - 552E5169293E71D600868F47 /* issuance */ = { - isa = PBXGroup; - children = ( - 552E516A293E71D600868F47 /* IssuanceServiceResponseTests.swift */, - 552E516B293E71D600868F47 /* IssuanceResponseClaimsTests.swift */, - 552E516C293E71D600868F47 /* IssuancePinTests.swift */, - ); - path = issuance; - sourceTree = ""; - }; - 552E516D293E71D600868F47 /* verifiableCredential */ = { - isa = PBXGroup; - children = ( - 552E516E293E71D600868F47 /* VerifiableCredentialTests.swift */, - ); - path = verifiableCredential; - sourceTree = ""; - }; - 552E516F293E71D600868F47 /* validators */ = { - isa = PBXGroup; - children = ( - 552E5170293E71D600868F47 /* DomainLinkageCredentialValidatorTests.swift */, - 552E5171293E71D600868F47 /* PresentationRequestValidatorTests.swift */, - ); - path = validators; - sourceTree = ""; - }; - 552E5174293E71D600868F47 /* VCServices */ = { - isa = PBXGroup; - children = ( - 552E5175293E71D700868F47 /* VCServicesTests */, - 552E518F293E71D700868F47 /* Resources */, - 552E5191293E71D700868F47 /* VCServices */, - 552E51A4293E71D700868F47 /* VCServicesTestApp */, - 552E51AE293E71D700868F47 /* VCServices.xcodeproj */, - ); - path = VCServices; - sourceTree = ""; - }; - 552E5175293E71D700868F47 /* VCServicesTests */ = { - isa = PBXGroup; - children = ( - 552E5176293E71D700868F47 /* mocks */, - 552E5187293E71D700868F47 /* IssuanceServiceTests.swift */, - 552E5188293E71D700868F47 /* DifWordListTests.swift */, - 552E5189293E71D700868F47 /* CoreDataManagerTests.swift */, - 552E518A293E71D700868F47 /* LinkedDomainServiceTests.swift */, - 552E518B293E71D700868F47 /* ExchangeServiceTests.swift */, - 552E518C293E71D700868F47 /* IdentifierDatabaseTests.swift */, - 552E518D293E71D700868F47 /* PresentationServiceTests.swift */, - 552E518E293E71D700868F47 /* Info.plist */, - ); - path = VCServicesTests; - sourceTree = ""; - }; - 552E5176293E71D700868F47 /* mocks */ = { - isa = PBXGroup; - children = ( - 552E5177293E71D700868F47 /* MockIssuanceRequestValidator.swift */, - 552E5178293E71D700868F47 /* MockTokenSigner.swift */, - 552E5179293E71D700868F47 /* MockExchangeApiCalls.swift */, - 552E517A293E71D700868F47 /* MockIssuanceApiCalls.swift */, - 552E517B293E71D700868F47 /* TestData.swift */, - 552E517C293E71D700868F47 /* MockIssuanceResponseFormatter.swift */, - 552E517D293E71D700868F47 /* MockVCCryptoSecret.swift */, - 552E517E293E71D700868F47 /* MockVCSDKConfiguration.swift */, - 552E517F293E71D700868F47 /* MockPresentationApiCalls.swift */, - 552E5180293E71D700868F47 /* MockPresentationRequestValidator.swift */, - 552E5181293E71D700868F47 /* MockExchangeRequestFormatter.swift */, - 552E5182293E71D700868F47 /* MockDiscoveryApiCalls.swift */, - 552E5183293E71D700868F47 /* MockWellKnownConfigDocumentApiCalls.swift */, - 552E5184293E71D700868F47 /* SecretStoreMock.swift */, - 552E5185293E71D700868F47 /* MockDomainLinkageCredentialValidator.swift */, - 552E5186293E71D700868F47 /* MockPresentationResponseFormatter.swift */, - ); - path = mocks; - sourceTree = ""; - }; - 552E518F293E71D700868F47 /* Resources */ = { - isa = PBXGroup; - children = ( - 552E5190293E71D700868F47 /* difwordlist.txt */, - ); - path = Resources; - sourceTree = ""; - }; - 552E5191293E71D700868F47 /* VCServices */ = { - isa = PBXGroup; - children = ( - 552E5192293E71D700868F47 /* IdentifierService.swift */, - 552E5193293E71D700868F47 /* VCUseCase.h */, - 552E5194293E71D700868F47 /* Resources */, - 552E5196293E71D700868F47 /* PairwiseService.swift */, - 552E5197293E71D700868F47 /* coreData */, - 552E519C293E71D700868F47 /* LinkedDomainService.swift */, - 552E519D293E71D700868F47 /* ServicesConstants.swift */, - 552E519E293E71D700868F47 /* DifWordList.swift */, - 552E519F293E71D700868F47 /* ExchangeService.swift */, - 552E51A0293E71D700868F47 /* VerifiableCredentialSDK.swift */, - 552E51A1293E71D700868F47 /* Info.plist */, - 552E51A2293E71D700868F47 /* IssuanceService.swift */, - 552E51A3293E71D700868F47 /* PresentationService.swift */, - ); - path = VCServices; - sourceTree = ""; - }; - 552E5194293E71D700868F47 /* Resources */ = { - isa = PBXGroup; - children = ( - 552E5195293E71D700868F47 /* difwordlist.txt */, - ); - path = Resources; - sourceTree = ""; - }; - 552E5197293E71D700868F47 /* coreData */ = { - isa = PBXGroup; - children = ( - 552E5198293E71D700868F47 /* CoreDataManager.swift */, - 552E5199293E71D700868F47 /* VerifiableCredentialDataModel.xcdatamodeld */, - 552E519B293E71D700868F47 /* IdentifierDatabase.swift */, - ); - path = coreData; - sourceTree = ""; - }; - 552E51A4293E71D700868F47 /* VCServicesTestApp */ = { - isa = PBXGroup; - children = ( - 552E51A5293E71D700868F47 /* ViewController.swift */, - 552E51A6293E71D700868F47 /* Assets.xcassets */, - 552E51A7293E71D700868F47 /* LaunchScreen.storyboard */, - 552E51A9293E71D700868F47 /* Main.storyboard */, - 552E51AB293E71D700868F47 /* AppDelegate.swift */, - 552E51AC293E71D700868F47 /* Info.plist */, - 552E51AD293E71D700868F47 /* SceneDelegate.swift */, - ); - path = VCServicesTestApp; - sourceTree = ""; - }; - 552E51AF293E71D700868F47 /* Products */ = { - isa = PBXGroup; - children = ( - 552E52BD293E71D700868F47 /* VCServices.framework */, - 552E52BF293E71D700868F47 /* VCServicesTests.xctest */, - 552E52C1293E71D700868F47 /* VCServicesApp.app */, - ); - name = Products; - sourceTree = ""; - }; - 552E51B2293E71D700868F47 /* VCToken */ = { - isa = PBXGroup; - children = ( - 552E51B3293E71D700868F47 /* VCTokenTests */, - 552E51C2293E71D700868F47 /* VCToken */, - 552E51D8293E71D700868F47 /* VCToken.xcodeproj */, - ); - path = VCToken; - sourceTree = ""; - }; - 552E51B3293E71D700868F47 /* VCTokenTests */ = { - isa = PBXGroup; - children = ( - 552E51B4293E71D700868F47 /* mocks */, - 552E51BA293E71D700868F47 /* JwsDecoderTests.swift */, - 552E51BB293E71D700868F47 /* TokenVerifierTests.swift */, - 552E51BC293E71D700868F47 /* ClaimsTest.swift */, - 552E51BD293E71D700868F47 /* JwsTokenTests.swift */, - 552E51BE293E71D700868F47 /* ECPublicJwkTests.swift */, - 552E51BF293E71D700868F47 /* JwsEncoderTests.swift */, - 552E51C0293E71D700868F47 /* Info.plist */, - 552E51C1293E71D700868F47 /* Secp256k1Tests.swift */, - ); - path = VCTokenTests; - sourceTree = ""; - }; - 552E51B4293E71D700868F47 /* mocks */ = { - isa = PBXGroup; - children = ( - 552E51B5293E71D700868F47 /* MockClaims.swift */, - 552E51B6293E71D700868F47 /* MockAlgorithm.swift */, - 552E51B7293E71D700868F47 /* MockVerifier.swift */, - 552E51B8293E71D700868F47 /* MockCryptoOperations.swift */, - 552E51B9293E71D700868F47 /* MockSigner.swift */, - ); - path = mocks; - sourceTree = ""; - }; - 552E51C2293E71D700868F47 /* VCToken */ = { - isa = PBXGroup; - children = ( - 552E51C3293E71D700868F47 /* Claims.swift */, - 552E51C4293E71D700868F47 /* JweEncoder.swift */, - 552E51C5293E71D700868F47 /* JweDecoder.swift */, - 552E51C6293E71D700868F47 /* VCTokenError.swift */, - 552E51C7293E71D700868F47 /* algorithms */, - 552E51CB293E71D700868F47 /* JWK.swift */, - 552E51CC293E71D700868F47 /* Header.swift */, - 552E51CD293E71D700868F47 /* JwsEncoder.swift */, - 552E51CE293E71D700868F47 /* VCToken.h */, - 552E51CF293E71D700868F47 /* JweToken.swift */, - 552E51D0293E71D700868F47 /* JwsDecoder.swift */, - 552E51D1293E71D700868F47 /* TokenVerifier.swift */, - 552E51D2293E71D700868F47 /* protocols */, - 552E51D5293E71D700868F47 /* Info.plist */, - 552E51D6293E71D700868F47 /* JwsToken.swift */, - 552E51D7293E71D700868F47 /* KeyId.swift */, - ); - path = VCToken; - sourceTree = ""; - }; - 552E51C7293E71D700868F47 /* algorithms */ = { - isa = PBXGroup; - children = ( - 552E51C8293E71D700868F47 /* PbesJwe.swift */, - 552E51C9293E71D700868F47 /* ECPublicJwk.swift */, - 552E51CA293E71D700868F47 /* Secp256k1Signer.swift */, - ); - path = algorithms; - sourceTree = ""; - }; - 552E51D2293E71D700868F47 /* protocols */ = { - isa = PBXGroup; - children = ( - 552E51D3293E71D700868F47 /* TokenVerifying.swift */, - 552E51D4293E71D700868F47 /* TokenSigning.swift */, - ); - path = protocols; - sourceTree = ""; - }; - 552E51D9293E71D700868F47 /* Products */ = { - isa = PBXGroup; - children = ( - 552E52C5293E71D700868F47 /* VCToken.framework */, - 552E52C7293E71D700868F47 /* VCTokenTests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 552E51E0293E71D700868F47 /* Submodules */ = { - isa = PBXGroup; - children = ( - 55E33685293E7B7D00CD2ED7 /* Secp256k1.xcodeproj */, - 55E3366F293E7B5F00CD2ED7 /* PromiseKit.xcodeproj */, - 55E33666293E7B5000CD2ED7 /* PMKFoundation.xcodeproj */, - ); - path = Submodules; - sourceTree = ""; - }; - 552E51E9293E71D700868F47 /* .github */ = { - isa = PBXGroup; - children = ( - 552E51EA293E71D700868F47 /* CODEOWNERS */, - ); - path = .github; - sourceTree = ""; - }; - 552E51EB293E71D700868F47 /* VCCrypto */ = { - isa = PBXGroup; - children = ( - 552E51EC293E71D700868F47 /* VCCryptoTests */, - 552E5203293E71D700868F47 /* VCCrypto */, - 552E5229293E71D700868F47 /* VCCrypto.xcodeproj */, - 552E522C293E71D700868F47 /* VCCryptoTestApp */, - ); - path = VCCrypto; - sourceTree = ""; - }; - 552E51EC293E71D700868F47 /* VCCryptoTests */ = { - isa = PBXGroup; - children = ( - 552E51ED293E71D700868F47 /* Sha256Tests.swift */, - 552E51EE293E71D700868F47 /* Mocks */, - 552E51F6293E71D700868F47 /* KeyManagementOperationsTests.swift */, - 552E51F7293E71D700868F47 /* Sha512Tests.swift */, - 552E51F8293E71D700868F47 /* AesTests.swift */, - 552E51F9293E71D700868F47 /* CryptoOperationsTests.swift */, - 552E51FA293E71D700868F47 /* Secp256k1PublicKeyTests.swift */, - 552E51FB293E71D700868F47 /* ES256kTests.swift */, - 552E51FC293E71D700868F47 /* PbkdfTests.swift */, - 552E51FD293E71D700868F47 /* KeychainSecretStoreTests.swift */, - 552E51FE293E71D700868F47 /* EdDSATests.swift */, - 552E51FF293E71D700868F47 /* Random32BytesSecretTests.swift */, - 552E5200293E71D700868F47 /* HmacSha512Tests.swift */, - 552E5201293E71D700868F47 /* Info.plist */, - 552E5202293E71D700868F47 /* Secp256k1Tests.swift */, - ); - path = VCCryptoTests; - sourceTree = ""; - }; - 552E51EE293E71D700868F47 /* Mocks */ = { - isa = PBXGroup; - children = ( - 552E51EF293E71D700868F47 /* Utf8TestData.swift */, - 552E51F0293E71D700868F47 /* VCSDKConfigurationMock.swift */, - 552E51F1293E71D700868F47 /* HashingMock.swift */, - 552E51F2293E71D700868F47 /* SecretStoreMock.swift */, - 552E51F3293E71D700868F47 /* SecretMock.swift */, - 552E51F4293E71D700868F47 /* SigningMock.swift */, - 552E51F5293E71D700868F47 /* PublicKeyMock.swift */, - ); - path = Mocks; - sourceTree = ""; - }; - 552E5203293E71D700868F47 /* VCCrypto */ = { - isa = PBXGroup; - children = ( - 552E5204293E71D700868F47 /* KeychainSecretStore.swift */, - 552E5205293E71D700868F47 /* Algo */, - 552E5212293E71D700868F47 /* Extensions */, - 552E5215293E71D700868F47 /* KeyManagementOperations.swift */, - 552E5216293E71D700868F47 /* CryptoOperations.swift */, - 552E5217293E71D700868F47 /* Keys */, - 552E521E293E71D700868F47 /* SecretStoring.swift */, - 552E521F293E71D700868F47 /* Protocols */, - 552E5227293E71D700868F47 /* VCCrypto.h */, - 552E5228293E71D700868F47 /* Info.plist */, - ); - path = VCCrypto; - sourceTree = ""; - }; - 552E5205293E71D700868F47 /* Algo */ = { - isa = PBXGroup; - children = ( - 552E5206293E71D700868F47 /* Aes.swift */, - 552E5207293E71D700868F47 /* HmacSha512.swift */, - 552E5208293E71D700868F47 /* Sha256.swift */, - 552E5209293E71D700868F47 /* SupportedSigningAlgorithms.swift */, - 552E520A293E71D700868F47 /* EdDSA.swift */, - 552E520B293E71D700868F47 /* Pbkdf.swift */, - 552E520C293E71D700868F47 /* SigningAlgorithm.swift */, - 552E520D293E71D700868F47 /* HmacSha2AesCbc.swift */, - 552E520E293E71D700868F47 /* ES256k.swift */, - 552E520F293E71D700868F47 /* Secp256k1.swift */, - 552E5210293E71D700868F47 /* HmacSha2.swift */, - 552E5211293E71D700868F47 /* Sha512.swift */, - ); - path = Algo; - sourceTree = ""; - }; - 552E5212293E71D700868F47 /* Extensions */ = { - isa = PBXGroup; - children = ( - 552E5213293E71D700868F47 /* Data+Hex.swift */, - 552E5214293E71D700868F47 /* Data+Base64.swift */, - ); - path = Extensions; - sourceTree = ""; - }; - 552E5217293E71D700868F47 /* Keys */ = { - isa = PBXGroup; - children = ( - 552E5218293E71D700868F47 /* PublicKey.swift */, - 552E5219293E71D700868F47 /* EphemeralSecret.swift */, - 552E521A293E71D700868F47 /* ED25519PublicKey.swift */, - 552E521B293E71D700868F47 /* Secret.swift */, - 552E521C293E71D700868F47 /* Random32BytesSecret.swift */, - 552E521D293E71D700868F47 /* Secp256k1PublicKey.swift */, - ); - path = Keys; - sourceTree = ""; - }; - 552E521F293E71D700868F47 /* Protocols */ = { - isa = PBXGroup; - children = ( - 552E5220293E71D700868F47 /* Signing.swift */, - 552E5221293E71D700868F47 /* VCSDKConfigurable.swift */, - 552E5222293E71D700868F47 /* Hashing.swift */, - 552E5223293E71D700868F47 /* CryptoOperating.swift */, - 552E5224293E71D700868F47 /* SupportedCurve.swift */, - 552E5225293E71D700868F47 /* SupportedHashAlgorithm.swift */, - 552E5226293E71D700868F47 /* KeyManagementOperating.swift */, - ); - path = Protocols; - sourceTree = ""; - }; - 552E522A293E71D700868F47 /* Products */ = { - isa = PBXGroup; - children = ( - 552E52A5293E71D700868F47 /* VCCrypto.framework */, - 552E52A7293E71D700868F47 /* VCCryptoTests.xctest */, - 552E52A9293E71D700868F47 /* VCCryptoTestApp.app */, - ); - name = Products; - sourceTree = ""; - }; - 552E522C293E71D700868F47 /* VCCryptoTestApp */ = { - isa = PBXGroup; - children = ( - 552E522D293E71D700868F47 /* Assets.xcassets */, - 552E522E293E71D700868F47 /* Preview Content */, - 552E5230293E71D700868F47 /* LaunchScreen.storyboard */, - 552E5232293E71D700868F47 /* AppDelegate.swift */, - 552E5233293E71D700868F47 /* ContentView.swift */, - 552E5234293E71D700868F47 /* Info.plist */, - 552E5235293E71D700868F47 /* SceneDelegate.swift */, - ); - path = VCCryptoTestApp; - sourceTree = ""; - }; - 552E522E293E71D700868F47 /* Preview Content */ = { - isa = PBXGroup; - children = ( - 552E522F293E71D700868F47 /* Preview Assets.xcassets */, - ); - path = "Preview Content"; - sourceTree = ""; - }; - 552E5236293E71D700868F47 /* VCNetworking */ = { - isa = PBXGroup; - children = ( - 552E5237293E71D700868F47 /* VCNetworking.xcodeproj */, - 552E523A293E71D700868F47 /* VCNetworkingTests */, - 552E5260293E71D700868F47 /* VCNetworking */, - ); - path = VCNetworking; - sourceTree = ""; - }; - 552E5238293E71D700868F47 /* Products */ = { - isa = PBXGroup; - children = ( - 552E52B3293E71D700868F47 /* VCNetworking.framework */, - 552E52B5293E71D700868F47 /* VCNetworkingTests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 552E523A293E71D700868F47 /* VCNetworkingTests */ = { - isa = PBXGroup; - children = ( - 552E523B293E71D700868F47 /* mocks */, - 552E5241293E71D700868F47 /* util */, - 552E5243293E71D700868F47 /* successHandlers */, - 552E5245293E71D700868F47 /* retryHandlers */, - 552E5247293E71D700868F47 /* operations */, - 552E5252293E71D700868F47 /* extensions */, - 552E5254293E71D700868F47 /* failureHandlers */, - 552E5256293E71D700868F47 /* encoders */, - 552E5259293E71D700868F47 /* decoders */, - 552E525F293E71D700868F47 /* Info.plist */, - ); - path = VCNetworkingTests; - sourceTree = ""; + 55E336FD293FCE8200CD2ED7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 552E5229293E71D700868F47 /* VCCrypto.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 92CDE7ED24DE1C6100F95B5D; + remoteInfo = VCCryptoTestApp; }; - 552E523B293E71D700868F47 /* mocks */ = { - isa = PBXGroup; - children = ( - 552E523C293E71D700868F47 /* MockNetworkOperation.swift */, - 552E523D293E71D700868F47 /* TestData.swift */, - 552E523E293E71D700868F47 /* UrlProtocolMock.swift */, - 552E523F293E71D700868F47 /* MockObject.swift */, - 552E5240293E71D700868F47 /* MockDecoder.swift */, - ); - path = mocks; - sourceTree = ""; + 55E33703293FCE9C00CD2ED7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 552E5237293E71D700868F47 /* VCNetworking.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 55D7BFEA24C4CBBD0090F495; + remoteInfo = VCNetworking; }; - 552E5241293E71D700868F47 /* util */ = { - isa = PBXGroup; - children = ( - 552E5242293E71D700868F47 /* HelperNetworkFunctionsTests.swift */, - ); - path = util; - sourceTree = ""; + 55E33705293FCE9C00CD2ED7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 552E5237293E71D700868F47 /* VCNetworking.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 55D7BFF324C4CBBD0090F495; + remoteInfo = VCNetworkingTests; }; - 552E5243293E71D700868F47 /* successHandlers */ = { - isa = PBXGroup; - children = ( - 552E5244293E71D700868F47 /* SimpleSuccessHandlerTests.swift */, +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 552E5092293E6AB200868F47 /* WalletLibrary.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = WalletLibrary.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 552E5095293E6AB200868F47 /* WalletLibrary.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WalletLibrary.h; sourceTree = ""; }; + 552E509A293E6AB200868F47 /* WalletLibraryTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WalletLibraryTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 552E509F293E6AB200868F47 /* VerifiedIdFlowTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VerifiedIdFlowTests.swift; sourceTree = ""; }; + 552E50AB293E6F5500868F47 /* VerifiedIdFlow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VerifiedIdFlow.swift; sourceTree = ""; }; + 552E50BD293E71D600868F47 /* VCEntities.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = VCEntities.xcodeproj; path = VCEntities/VCEntities.xcodeproj; sourceTree = ""; }; + 552E51AE293E71D700868F47 /* VCServices.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = VCServices.xcodeproj; path = VCServices/VCServices.xcodeproj; sourceTree = ""; }; + 552E51D8293E71D700868F47 /* VCToken.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = VCToken.xcodeproj; path = VCToken/VCToken.xcodeproj; sourceTree = ""; }; + 552E5229293E71D700868F47 /* VCCrypto.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = VCCrypto.xcodeproj; path = VCCrypto/VCCrypto.xcodeproj; sourceTree = ""; }; + 552E5237293E71D700868F47 /* VCNetworking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = VCNetworking.xcodeproj; path = VCNetworking/VCNetworking.xcodeproj; sourceTree = ""; }; + 55E33666293E7B5000CD2ED7 /* PMKFoundation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = PMKFoundation.xcodeproj; path = Foundation/PMKFoundation.xcodeproj; sourceTree = ""; }; + 55E3366F293E7B5F00CD2ED7 /* PromiseKit.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = PromiseKit.xcodeproj; path = PromiseKit/PromiseKit.xcodeproj; sourceTree = ""; }; + 55E33685293E7B7D00CD2ED7 /* Secp256k1.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Secp256k1.xcodeproj; path = Secp256k1/Secp256k1.xcodeproj; sourceTree = ""; }; + 55E336D0293FA6F400CD2ED7 /* VerifiedIdRequirement.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VerifiedIdRequirement.swift; sourceTree = ""; }; + 55E336D3293FA75300CD2ED7 /* VerifiedId.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VerifiedId.swift; sourceTree = ""; }; + 55E336D5293FA78C00CD2ED7 /* VerifiedIdClaim.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VerifiedIdClaim.swift; sourceTree = ""; }; + 55E336D7293FCE0500CD2ED7 /* CredentialIssuanceParams.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CredentialIssuanceParams.swift; sourceTree = ""; }; + 55E33707293FD25900CD2ED7 /* AccessTokenRequirement.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessTokenRequirement.swift; sourceTree = ""; }; + 55E33709293FD3E000CD2ED7 /* IdTokenRequirement.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IdTokenRequirement.swift; sourceTree = ""; }; + 55E3370B293FD61E00CD2ED7 /* SelfAttestedClaimRequirement.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelfAttestedClaimRequirement.swift; sourceTree = ""; }; + 55E3370D293FD84700CD2ED7 /* IssuanceRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IssuanceRequest.swift; sourceTree = ""; }; + 55E33710293FDE1400CD2ED7 /* Request.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Request.swift; sourceTree = ""; }; + 55E33713293FDEEF00CD2ED7 /* Contract.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Contract.swift; sourceTree = ""; }; + 55E337592942317100CD2ED7 /* RequestHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestHandler.swift; sourceTree = ""; }; + 55E3375E2942321C00CD2ED7 /* RequestHandling.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestHandling.swift; sourceTree = ""; }; + 55E337612942361200CD2ED7 /* PresentationService+PresentationServiceable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PresentationService+PresentationServiceable.swift"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 552E508F293E6AB200868F47 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 55E33684293E7B6600CD2ED7 /* PromiseKit.framework in Frameworks */, ); - path = successHandlers; - sourceTree = ""; + runOnlyForDeploymentPostprocessing = 0; }; - 552E5245293E71D700868F47 /* retryHandlers */ = { - isa = PBXGroup; - children = ( - 552E5246293E71D700868F47 /* NoRetryTests.swift */, + 552E5097293E6AB200868F47 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 552E509B293E6AB200868F47 /* WalletLibrary.framework in Frameworks */, ); - path = retryHandlers; - sourceTree = ""; + runOnlyForDeploymentPostprocessing = 0; }; - 552E5247293E71D700868F47 /* operations */ = { +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 552E5088293E6AB100868F47 = { isa = PBXGroup; children = ( - 552E5248293E71D700868F47 /* post */, - 552E524C293E71D700868F47 /* fetch */, - 552E5251293E71D700868F47 /* NetworkOperationTests.swift */, + 552E50AA293E6B6B00868F47 /* Submodules */, + 552E5094293E6AB200868F47 /* WalletLibrary */, + 552E509E293E6AB200868F47 /* WalletLibraryTests */, + 552E5093293E6AB200868F47 /* Products */, + 552E544A293E736C00868F47 /* Frameworks */, ); - path = operations; sourceTree = ""; }; - 552E5248293E71D700868F47 /* post */ = { + 552E5093293E6AB200868F47 /* Products */ = { isa = PBXGroup; children = ( - 552E5249293E71D700868F47 /* PostIssuanceResponseOperationTests.swift */, - 552E524A293E71D700868F47 /* PostPresentationResponseOperationTests.swift */, - 552E524B293E71D700868F47 /* PostExchangeRequestOperationTests.swift */, + 552E5092293E6AB200868F47 /* WalletLibrary.framework */, + 552E509A293E6AB200868F47 /* WalletLibraryTests.xctest */, ); - path = post; + name = Products; sourceTree = ""; }; - 552E524C293E71D700868F47 /* fetch */ = { + 552E5094293E6AB200868F47 /* WalletLibrary */ = { isa = PBXGroup; children = ( - 552E524D293E71D700868F47 /* FetchDIDDocumentOperationTests.swift */, - 552E524E293E71D700868F47 /* FetchWellKnownConfigDocumentOperationTests.swift */, - 552E524F293E71D700868F47 /* FetchContractOperationTests.swift */, - 552E5250293E71D700868F47 /* FetchPresentationRequestOperationTests.swift */, + 55E33760294235EE00CD2ED7 /* Extensions */, + 55E3375B294231F000CD2ED7 /* Protocols */, + 55E3370F293FDDF400CD2ED7 /* Requests */, + 55E336D2293FA74100CD2ED7 /* VerifiedId */, + 552E50AB293E6F5500868F47 /* VerifiedIdFlow.swift */, + 552E5095293E6AB200868F47 /* WalletLibrary.h */, ); - path = fetch; + path = WalletLibrary; sourceTree = ""; }; - 552E5252293E71D700868F47 /* extensions */ = { + 552E509E293E6AB200868F47 /* WalletLibraryTests */ = { isa = PBXGroup; children = ( - 552E5253293E71D700868F47 /* String+PercentEncodingTests.swift */, + 552E509F293E6AB200868F47 /* VerifiedIdFlowTests.swift */, ); - path = extensions; + path = WalletLibraryTests; sourceTree = ""; }; - 552E5254293E71D700868F47 /* failureHandlers */ = { + 552E50AA293E6B6B00868F47 /* Submodules */ = { isa = PBXGroup; children = ( - 552E5255293E71D700868F47 /* SimpleFailureHandlerTests.swift */, + 552E50B9293E71D600868F47 /* VerifiableCredential-SDK-iOS */, ); - path = failureHandlers; + path = Submodules; sourceTree = ""; }; - 552E5256293E71D700868F47 /* encoders */ = { + 552E50B9293E71D600868F47 /* VerifiableCredential-SDK-iOS */ = { isa = PBXGroup; children = ( - 552E5257293E71D700868F47 /* ExchangeRequestEncoderTests.swift */, - 552E5258293E71D700868F47 /* IssuanceResponseEncoderTests.swift */, + 552E5237293E71D700868F47 /* VCNetworking.xcodeproj */, + 552E5229293E71D700868F47 /* VCCrypto.xcodeproj */, + 552E50BD293E71D600868F47 /* VCEntities.xcodeproj */, + 552E51AE293E71D700868F47 /* VCServices.xcodeproj */, + 552E51D8293E71D700868F47 /* VCToken.xcodeproj */, + 552E51E0293E71D700868F47 /* Submodules */, ); - path = encoders; + path = "VerifiableCredential-SDK-iOS"; sourceTree = ""; }; - 552E5259293E71D700868F47 /* decoders */ = { + 552E51E0293E71D700868F47 /* Submodules */ = { isa = PBXGroup; children = ( - 552E525A293E71D700868F47 /* PresentationServiceResponseDecoderTests.swift */, - 552E525B293E71D700868F47 /* ContractDecoderTests.swift */, - 552E525C293E71D700868F47 /* PresentationRequestDecoderTests.swift */, - 552E525D293E71D700868F47 /* DIDDocumentDecoderTests.swift */, - 552E525E293E71D700868F47 /* IssuanceServiceResponseDecoderTests.swift */, + 55E33685293E7B7D00CD2ED7 /* Secp256k1.xcodeproj */, + 55E3366F293E7B5F00CD2ED7 /* PromiseKit.xcodeproj */, + 55E33666293E7B5000CD2ED7 /* PMKFoundation.xcodeproj */, ); - path = decoders; + path = Submodules; sourceTree = ""; }; - 552E5260293E71D700868F47 /* VCNetworking */ = { + 552E544A293E736C00868F47 /* Frameworks */ = { isa = PBXGroup; children = ( - 552E5261293E71D700868F47 /* NetworkingError.swift */, - 552E5262293E71D700868F47 /* util */, - 552E5264293E71D700868F47 /* ExchangeNetworkCalls.swift */, - 552E5265293E71D700868F47 /* WellKnownConfigDocumentNetworkCalls.swift */, - 552E5266293E71D700868F47 /* successHandlers */, - 552E5269293E71D700868F47 /* retryHandlers */, - 552E526C293E71D700868F47 /* IssuanceNetworkCalls.swift */, - 552E526D293E71D700868F47 /* operations */, - 552E527A293E71D700868F47 /* extensions */, - 552E527D293E71D700868F47 /* failureHandlers */, - 552E5280293E71D700868F47 /* NetworkingConstants.swift */, - 552E5281293E71D700868F47 /* encoders */, - 552E5287293E71D700868F47 /* PresentationNetworkCalls.swift */, - 552E5288293E71D700868F47 /* decoders */, - 552E5291293E71D700868F47 /* DIDDocumentNetworkCalls.swift */, - 552E5292293E71D700868F47 /* networking.h */, - 552E5293293E71D700868F47 /* Info.plist */, ); - path = VCNetworking; + name = Frameworks; sourceTree = ""; }; - 552E5262293E71D700868F47 /* util */ = { + 55E33667293E7B5000CD2ED7 /* Products */ = { isa = PBXGroup; children = ( - 552E5263293E71D700868F47 /* HelperNetworkFunctions.swift */, + 55E3366C293E7B5000CD2ED7 /* PMKFoundation.framework */, + 55E3366E293E7B5000CD2ED7 /* PMKNSTests.xctest */, ); - path = util; + name = Products; sourceTree = ""; }; - 552E5266293E71D700868F47 /* successHandlers */ = { + 55E33670293E7B5F00CD2ED7 /* Products */ = { isa = PBXGroup; children = ( - 552E5267293E71D700868F47 /* SimpleSuccessHandler.swift */, - 552E5268293E71D700868F47 /* SuccessHandler.swift */, + 55E33679293E7B5F00CD2ED7 /* PromiseKit.framework */, + 55E3367B293E7B5F00CD2ED7 /* PMKA+Tests.xctest */, + 55E3367D293E7B5F00CD2ED7 /* PMKBridgeTests.xctest */, + 55E3367F293E7B5F00CD2ED7 /* PMKCoreTests.xctest */, + 55E33681293E7B5F00CD2ED7 /* PMKDeprecatedTests.xctest */, + 55E33683293E7B5F00CD2ED7 /* PMKJSA+Tests.xctest */, ); - path = successHandlers; + name = Products; sourceTree = ""; }; - 552E5269293E71D700868F47 /* retryHandlers */ = { + 55E33686293E7B7D00CD2ED7 /* Products */ = { isa = PBXGroup; children = ( - 552E526A293E71D700868F47 /* NoRetry.swift */, - 552E526B293E71D700868F47 /* RetryHandler.swift */, + 55E3368A293E7B7E00CD2ED7 /* Secp256k1.framework */, ); - path = retryHandlers; + name = Products; sourceTree = ""; }; - 552E526D293E71D700868F47 /* operations */ = { + 55E336CF293FA6D900CD2ED7 /* Requirements */ = { isa = PBXGroup; children = ( - 552E526E293E71D700868F47 /* NetworkOperation.swift */, - 552E526F293E71D700868F47 /* post */, - 552E5275293E71D700868F47 /* fetch */, + 55E33707293FD25900CD2ED7 /* AccessTokenRequirement.swift */, + 55E336D7293FCE0500CD2ED7 /* CredentialIssuanceParams.swift */, + 55E33709293FD3E000CD2ED7 /* IdTokenRequirement.swift */, + 55E3370B293FD61E00CD2ED7 /* SelfAttestedClaimRequirement.swift */, + 55E336D0293FA6F400CD2ED7 /* VerifiedIdRequirement.swift */, ); - path = operations; + path = Requirements; sourceTree = ""; }; - 552E526F293E71D700868F47 /* post */ = { + 55E336D2293FA74100CD2ED7 /* VerifiedId */ = { isa = PBXGroup; children = ( - 552E5270293E71D700868F47 /* PostPresentationResponseOperation.swift */, - 552E5271293E71D700868F47 /* PostNetworkOperation.swift */, - 552E5272293E71D700868F47 /* PostIssuanceResponseOperation.swift */, - 552E5273293E71D700868F47 /* PostIssuanceCompletionResponse.swift */, - 552E5274293E71D700868F47 /* PostExchangeRequestOperation.swift */, + 55E336D3293FA75300CD2ED7 /* VerifiedId.swift */, + 55E336D5293FA78C00CD2ED7 /* VerifiedIdClaim.swift */, ); - path = post; + path = VerifiedId; sourceTree = ""; }; - 552E5275293E71D700868F47 /* fetch */ = { + 55E336D9293FCE4200CD2ED7 /* Products */ = { isa = PBXGroup; children = ( - 552E5276293E71D700868F47 /* FetchDIDDocumentOperation.swift */, - 552E5277293E71D700868F47 /* FetchContractOperation.swift */, - 552E5278293E71D700868F47 /* FetchWellKnownConfigDocumentOperation.swift */, - 552E5279293E71D700868F47 /* FetchPresentationRequestOperation.swift */, + 55E336DE293FCE4200CD2ED7 /* VCEntities.framework */, + 55E336E0293FCE4200CD2ED7 /* VCEntitiesTests.xctest */, ); - path = fetch; + name = Products; sourceTree = ""; }; - 552E527A293E71D700868F47 /* extensions */ = { + 55E336E1293FCE4F00CD2ED7 /* Products */ = { isa = PBXGroup; children = ( - 552E527B293E71D700868F47 /* String+PercentEncoding.swift */, - 552E527C293E71D700868F47 /* URL+PercentEncodedString.swift */, + 55E336E7293FCE4F00CD2ED7 /* VCServices.framework */, + 55E336E9293FCE4F00CD2ED7 /* VCServicesTests.xctest */, + 55E336EB293FCE4F00CD2ED7 /* VCServicesApp.app */, ); - path = extensions; + name = Products; sourceTree = ""; }; - 552E527D293E71D700868F47 /* failureHandlers */ = { + 55E336EC293FCE5E00CD2ED7 /* Products */ = { isa = PBXGroup; children = ( - 552E527E293E71D700868F47 /* FailureHandler.swift */, - 552E527F293E71D700868F47 /* SimpleFailureHandler.swift */, + 55E336F1293FCE5E00CD2ED7 /* VCToken.framework */, + 55E336F3293FCE5E00CD2ED7 /* VCTokenTests.xctest */, ); - path = failureHandlers; + name = Products; sourceTree = ""; }; - 552E5281293E71D700868F47 /* encoders */ = { + 55E336F4293FCE8200CD2ED7 /* Products */ = { isa = PBXGroup; children = ( - 552E5282293E71D700868F47 /* ExchangeRequestEncoder.swift */, - 552E5283293E71D700868F47 /* PresentationResponseEncoder.swift */, - 552E5284293E71D700868F47 /* Encoding.swift */, - 552E5285293E71D700868F47 /* IssuanceCompletionResponseEncoder.swift */, - 552E5286293E71D700868F47 /* IssuanceResponseEncoder.swift */, + 55E336FA293FCE8200CD2ED7 /* VCCrypto.framework */, + 55E336FC293FCE8200CD2ED7 /* VCCryptoTests.xctest */, + 55E336FE293FCE8200CD2ED7 /* VCCryptoTestApp.app */, ); - path = encoders; + name = Products; sourceTree = ""; }; - 552E5288293E71D700868F47 /* decoders */ = { + 55E336FF293FCE9C00CD2ED7 /* Products */ = { isa = PBXGroup; children = ( - 552E5289293E71D700868F47 /* WellKnownConfigDocumentDecoder.swift */, - 552E528A293E71D700868F47 /* DIDDocumentDecoder.swift */, - 552E528B293E71D700868F47 /* BasicServiceResponseDecoder.swift */, - 552E528C293E71D700868F47 /* ContractDecoder.swift */, - 552E528D293E71D700868F47 /* IssuanceServiceResponseDecoder.swift */, - 552E528E293E71D700868F47 /* PresentationRequestDecoder.swift */, - 552E528F293E71D700868F47 /* Decoding.swift */, - 552E5290293E71D700868F47 /* PresentationServiceResponseDecoder.swift */, + 55E33704293FCE9C00CD2ED7 /* VCNetworking.framework */, + 55E33706293FCE9C00CD2ED7 /* VCNetworkingTests.xctest */, ); - path = decoders; + name = Products; sourceTree = ""; }; - 552E5294293E71D700868F47 /* VCSamples */ = { + 55E3370F293FDDF400CD2ED7 /* Requests */ = { isa = PBXGroup; children = ( - 552E5295293E71D700868F47 /* VCSamples.xcodeproj */, - 552E5298293E71D700868F47 /* VCSamples */, + 55E337432942311000CD2ED7 /* Handlers */, + 55E33712293FDEDF00CD2ED7 /* Contract */, + 55E336CF293FA6D900CD2ED7 /* Requirements */, + 55E3370D293FD84700CD2ED7 /* IssuanceRequest.swift */, + 55E33710293FDE1400CD2ED7 /* Request.swift */, ); - path = VCSamples; + path = Requests; sourceTree = ""; }; - 552E5296293E71D700868F47 /* Products */ = { + 55E33712293FDEDF00CD2ED7 /* Contract */ = { isa = PBXGroup; children = ( - 552E52B8293E71D700868F47 /* VCSamples.framework */, + 55E33713293FDEEF00CD2ED7 /* Contract.swift */, ); - name = Products; + path = Contract; sourceTree = ""; }; - 552E5298293E71D700868F47 /* VCSamples */ = { + 55E337432942311000CD2ED7 /* Handlers */ = { isa = PBXGroup; children = ( - 552E5299293E71D700868F47 /* IssuanceSample.swift */, - 552E529A293E71D700868F47 /* PresentationSample.swift */, - 552E529B293E71D700868F47 /* VCSamples.h */, - 552E529C293E71D700868F47 /* Info.plist */, + 55E337592942317100CD2ED7 /* RequestHandler.swift */, ); - path = VCSamples; + path = Handlers; sourceTree = ""; }; - 552E544A293E736C00868F47 /* Frameworks */ = { + 55E3375B294231F000CD2ED7 /* Protocols */ = { isa = PBXGroup; children = ( + 55E3375C294231F600CD2ED7 /* Requests */, ); - name = Frameworks; + path = Protocols; sourceTree = ""; }; - 55E33667293E7B5000CD2ED7 /* Products */ = { + 55E3375C294231F600CD2ED7 /* Requests */ = { isa = PBXGroup; children = ( - 55E3366C293E7B5000CD2ED7 /* PMKFoundation.framework */, - 55E3366E293E7B5000CD2ED7 /* PMKNSTests.xctest */, + 55E3375D2942320600CD2ED7 /* Handlers */, ); - name = Products; + path = Requests; sourceTree = ""; }; - 55E33670293E7B5F00CD2ED7 /* Products */ = { + 55E3375D2942320600CD2ED7 /* Handlers */ = { isa = PBXGroup; children = ( - 55E33679293E7B5F00CD2ED7 /* PromiseKit.framework */, - 55E3367B293E7B5F00CD2ED7 /* PMKA+Tests.xctest */, - 55E3367D293E7B5F00CD2ED7 /* PMKBridgeTests.xctest */, - 55E3367F293E7B5F00CD2ED7 /* PMKCoreTests.xctest */, - 55E33681293E7B5F00CD2ED7 /* PMKDeprecatedTests.xctest */, - 55E33683293E7B5F00CD2ED7 /* PMKJSA+Tests.xctest */, + 55E3375E2942321C00CD2ED7 /* RequestHandling.swift */, ); - name = Products; + path = Handlers; sourceTree = ""; }; - 55E33686293E7B7D00CD2ED7 /* Products */ = { + 55E33760294235EE00CD2ED7 /* Extensions */ = { isa = PBXGroup; children = ( - 55E3368A293E7B7E00CD2ED7 /* Secp256k1.framework */, + 55E337612942361200CD2ED7 /* PresentationService+PresentationServiceable.swift */, ); - name = Products; + path = Extensions; sourceTree = ""; }; /* End PBXGroup section */ @@ -1837,12 +477,6 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 552E5371293E71D800868F47 /* VCUseCase.h in Headers */, - 552E5432293E71D800868F47 /* VCSamples.h in Headers */, - 552E542E293E71D800868F47 /* networking.h in Headers */, - 552E539E293E71D800868F47 /* VCToken.h in Headers */, - 552E53E4293E71D800868F47 /* VCCrypto.h in Headers */, - 552E52CB293E71D700868F47 /* VCEntities.h in Headers */, 552E50A1293E6AB200868F47 /* WalletLibrary.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; @@ -1930,27 +564,23 @@ ProjectRef = 55E33685293E7B7D00CD2ED7 /* Secp256k1.xcodeproj */; }, { - ProductGroup = 552E522A293E71D700868F47 /* Products */; + ProductGroup = 55E336F4293FCE8200CD2ED7 /* Products */; ProjectRef = 552E5229293E71D700868F47 /* VCCrypto.xcodeproj */; }, { - ProductGroup = 552E50BE293E71D600868F47 /* Products */; + ProductGroup = 55E336D9293FCE4200CD2ED7 /* Products */; ProjectRef = 552E50BD293E71D600868F47 /* VCEntities.xcodeproj */; }, { - ProductGroup = 552E5238293E71D700868F47 /* Products */; + ProductGroup = 55E336FF293FCE9C00CD2ED7 /* Products */; ProjectRef = 552E5237293E71D700868F47 /* VCNetworking.xcodeproj */; }, { - ProductGroup = 552E5296293E71D700868F47 /* Products */; - ProjectRef = 552E5295293E71D700868F47 /* VCSamples.xcodeproj */; - }, - { - ProductGroup = 552E51AF293E71D700868F47 /* Products */; + ProductGroup = 55E336E1293FCE4F00CD2ED7 /* Products */; ProjectRef = 552E51AE293E71D700868F47 /* VCServices.xcodeproj */; }, { - ProductGroup = 552E51D9293E71D700868F47 /* Products */; + ProductGroup = 55E336EC293FCE5E00CD2ED7 /* Products */; ProjectRef = 552E51D8293E71D700868F47 /* VCToken.xcodeproj */; }, ); @@ -1963,158 +593,151 @@ /* End PBXProject section */ /* Begin PBXReferenceProxy section */ - 552E52A5293E71D700868F47 /* VCCrypto.framework */ = { + 55E3366C293E7B5000CD2ED7 /* PMKFoundation.framework */ = { isa = PBXReferenceProxy; fileType = wrapper.framework; - path = VCCrypto.framework; - remoteRef = 552E52A4293E71D700868F47 /* PBXContainerItemProxy */; + path = PMKFoundation.framework; + remoteRef = 55E3366B293E7B5000CD2ED7 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 552E52A7293E71D700868F47 /* VCCryptoTests.xctest */ = { + 55E3366E293E7B5000CD2ED7 /* PMKNSTests.xctest */ = { isa = PBXReferenceProxy; fileType = wrapper.cfbundle; - path = VCCryptoTests.xctest; - remoteRef = 552E52A6293E71D700868F47 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 552E52A9293E71D700868F47 /* VCCryptoTestApp.app */ = { - isa = PBXReferenceProxy; - fileType = wrapper.application; - path = VCCryptoTestApp.app; - remoteRef = 552E52A8293E71D700868F47 /* PBXContainerItemProxy */; + path = PMKNSTests.xctest; + remoteRef = 55E3366D293E7B5000CD2ED7 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 552E52AD293E71D700868F47 /* VCEntities.framework */ = { + 55E33679293E7B5F00CD2ED7 /* PromiseKit.framework */ = { isa = PBXReferenceProxy; fileType = wrapper.framework; - path = VCEntities.framework; - remoteRef = 552E52AC293E71D700868F47 /* PBXContainerItemProxy */; + path = PromiseKit.framework; + remoteRef = 55E33678293E7B5F00CD2ED7 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 552E52AF293E71D700868F47 /* VCEntitiesTests.xctest */ = { + 55E3367B293E7B5F00CD2ED7 /* PMKA+Tests.xctest */ = { isa = PBXReferenceProxy; fileType = wrapper.cfbundle; - path = VCEntitiesTests.xctest; - remoteRef = 552E52AE293E71D700868F47 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 552E52B3293E71D700868F47 /* VCNetworking.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = VCNetworking.framework; - remoteRef = 552E52B2293E71D700868F47 /* PBXContainerItemProxy */; + path = "PMKA+Tests.xctest"; + remoteRef = 55E3367A293E7B5F00CD2ED7 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 552E52B5293E71D700868F47 /* VCNetworkingTests.xctest */ = { + 55E3367D293E7B5F00CD2ED7 /* PMKBridgeTests.xctest */ = { isa = PBXReferenceProxy; fileType = wrapper.cfbundle; - path = VCNetworkingTests.xctest; - remoteRef = 552E52B4293E71D700868F47 /* PBXContainerItemProxy */; + path = PMKBridgeTests.xctest; + remoteRef = 55E3367C293E7B5F00CD2ED7 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 552E52B8293E71D700868F47 /* VCSamples.framework */ = { + 55E3367F293E7B5F00CD2ED7 /* PMKCoreTests.xctest */ = { isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = VCSamples.framework; - remoteRef = 552E52B7293E71D700868F47 /* PBXContainerItemProxy */; + fileType = wrapper.cfbundle; + path = PMKCoreTests.xctest; + remoteRef = 55E3367E293E7B5F00CD2ED7 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 552E52BD293E71D700868F47 /* VCServices.framework */ = { + 55E33681293E7B5F00CD2ED7 /* PMKDeprecatedTests.xctest */ = { isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = VCServices.framework; - remoteRef = 552E52BC293E71D700868F47 /* PBXContainerItemProxy */; + fileType = wrapper.cfbundle; + path = PMKDeprecatedTests.xctest; + remoteRef = 55E33680293E7B5F00CD2ED7 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 552E52BF293E71D700868F47 /* VCServicesTests.xctest */ = { + 55E33683293E7B5F00CD2ED7 /* PMKJSA+Tests.xctest */ = { isa = PBXReferenceProxy; fileType = wrapper.cfbundle; - path = VCServicesTests.xctest; - remoteRef = 552E52BE293E71D700868F47 /* PBXContainerItemProxy */; + path = "PMKJSA+Tests.xctest"; + remoteRef = 55E33682293E7B5F00CD2ED7 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 552E52C1293E71D700868F47 /* VCServicesApp.app */ = { + 55E3368A293E7B7E00CD2ED7 /* Secp256k1.framework */ = { isa = PBXReferenceProxy; - fileType = wrapper.application; - path = VCServicesApp.app; - remoteRef = 552E52C0293E71D700868F47 /* PBXContainerItemProxy */; + fileType = wrapper.framework; + path = Secp256k1.framework; + remoteRef = 55E33689293E7B7E00CD2ED7 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 552E52C5293E71D700868F47 /* VCToken.framework */ = { + 55E336DE293FCE4200CD2ED7 /* VCEntities.framework */ = { isa = PBXReferenceProxy; fileType = wrapper.framework; - path = VCToken.framework; - remoteRef = 552E52C4293E71D700868F47 /* PBXContainerItemProxy */; + path = VCEntities.framework; + remoteRef = 55E336DD293FCE4200CD2ED7 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 552E52C7293E71D700868F47 /* VCTokenTests.xctest */ = { + 55E336E0293FCE4200CD2ED7 /* VCEntitiesTests.xctest */ = { isa = PBXReferenceProxy; fileType = wrapper.cfbundle; - path = VCTokenTests.xctest; - remoteRef = 552E52C6293E71D700868F47 /* PBXContainerItemProxy */; + path = VCEntitiesTests.xctest; + remoteRef = 55E336DF293FCE4200CD2ED7 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 55E3366C293E7B5000CD2ED7 /* PMKFoundation.framework */ = { + 55E336E7293FCE4F00CD2ED7 /* VCServices.framework */ = { isa = PBXReferenceProxy; fileType = wrapper.framework; - path = PMKFoundation.framework; - remoteRef = 55E3366B293E7B5000CD2ED7 /* PBXContainerItemProxy */; + path = VCServices.framework; + remoteRef = 55E336E6293FCE4F00CD2ED7 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 55E3366E293E7B5000CD2ED7 /* PMKNSTests.xctest */ = { + 55E336E9293FCE4F00CD2ED7 /* VCServicesTests.xctest */ = { isa = PBXReferenceProxy; fileType = wrapper.cfbundle; - path = PMKNSTests.xctest; - remoteRef = 55E3366D293E7B5000CD2ED7 /* PBXContainerItemProxy */; + path = VCServicesTests.xctest; + remoteRef = 55E336E8293FCE4F00CD2ED7 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 55E33679293E7B5F00CD2ED7 /* PromiseKit.framework */ = { + 55E336EB293FCE4F00CD2ED7 /* VCServicesApp.app */ = { isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = PromiseKit.framework; - remoteRef = 55E33678293E7B5F00CD2ED7 /* PBXContainerItemProxy */; + fileType = wrapper.application; + path = VCServicesApp.app; + remoteRef = 55E336EA293FCE4F00CD2ED7 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 55E3367B293E7B5F00CD2ED7 /* PMKA+Tests.xctest */ = { + 55E336F1293FCE5E00CD2ED7 /* VCToken.framework */ = { isa = PBXReferenceProxy; - fileType = wrapper.cfbundle; - path = "PMKA+Tests.xctest"; - remoteRef = 55E3367A293E7B5F00CD2ED7 /* PBXContainerItemProxy */; + fileType = wrapper.framework; + path = VCToken.framework; + remoteRef = 55E336F0293FCE5E00CD2ED7 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 55E3367D293E7B5F00CD2ED7 /* PMKBridgeTests.xctest */ = { + 55E336F3293FCE5E00CD2ED7 /* VCTokenTests.xctest */ = { isa = PBXReferenceProxy; fileType = wrapper.cfbundle; - path = PMKBridgeTests.xctest; - remoteRef = 55E3367C293E7B5F00CD2ED7 /* PBXContainerItemProxy */; + path = VCTokenTests.xctest; + remoteRef = 55E336F2293FCE5E00CD2ED7 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 55E3367F293E7B5F00CD2ED7 /* PMKCoreTests.xctest */ = { + 55E336FA293FCE8200CD2ED7 /* VCCrypto.framework */ = { isa = PBXReferenceProxy; - fileType = wrapper.cfbundle; - path = PMKCoreTests.xctest; - remoteRef = 55E3367E293E7B5F00CD2ED7 /* PBXContainerItemProxy */; + fileType = wrapper.framework; + path = VCCrypto.framework; + remoteRef = 55E336F9293FCE8200CD2ED7 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 55E33681293E7B5F00CD2ED7 /* PMKDeprecatedTests.xctest */ = { + 55E336FC293FCE8200CD2ED7 /* VCCryptoTests.xctest */ = { isa = PBXReferenceProxy; fileType = wrapper.cfbundle; - path = PMKDeprecatedTests.xctest; - remoteRef = 55E33680293E7B5F00CD2ED7 /* PBXContainerItemProxy */; + path = VCCryptoTests.xctest; + remoteRef = 55E336FB293FCE8200CD2ED7 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 55E33683293E7B5F00CD2ED7 /* PMKJSA+Tests.xctest */ = { + 55E336FE293FCE8200CD2ED7 /* VCCryptoTestApp.app */ = { isa = PBXReferenceProxy; - fileType = wrapper.cfbundle; - path = "PMKJSA+Tests.xctest"; - remoteRef = 55E33682293E7B5F00CD2ED7 /* PBXContainerItemProxy */; + fileType = wrapper.application; + path = VCCryptoTestApp.app; + remoteRef = 55E336FD293FCE8200CD2ED7 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 55E3368A293E7B7E00CD2ED7 /* Secp256k1.framework */ = { + 55E33704293FCE9C00CD2ED7 /* VCNetworking.framework */ = { isa = PBXReferenceProxy; fileType = wrapper.framework; - path = Secp256k1.framework; - remoteRef = 55E33689293E7B7E00CD2ED7 /* PBXContainerItemProxy */; + path = VCNetworking.framework; + remoteRef = 55E33703293FCE9C00CD2ED7 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 55E33706293FCE9C00CD2ED7 /* VCNetworkingTests.xctest */ = { + isa = PBXReferenceProxy; + fileType = wrapper.cfbundle; + path = VCNetworkingTests.xctest; + remoteRef = 55E33705293FCE9C00CD2ED7 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXReferenceProxy section */ @@ -2141,7 +764,20 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 55E3370E293FD84700CD2ED7 /* IssuanceRequest.swift in Sources */, + 55E3370A293FD3E000CD2ED7 /* IdTokenRequirement.swift in Sources */, + 55E3375A2942317100CD2ED7 /* RequestHandler.swift in Sources */, + 55E336D8293FCE0500CD2ED7 /* CredentialIssuanceParams.swift in Sources */, + 55E336D1293FA6F400CD2ED7 /* VerifiedIdRequirement.swift in Sources */, + 55E336D6293FA78C00CD2ED7 /* VerifiedIdClaim.swift in Sources */, + 55E3370C293FD61E00CD2ED7 /* SelfAttestedClaimRequirement.swift in Sources */, + 55E3375F2942321C00CD2ED7 /* RequestHandling.swift in Sources */, + 55E33714293FDEEF00CD2ED7 /* Contract.swift in Sources */, 552E546B293E759300868F47 /* VerifiedIdFlow.swift in Sources */, + 55E33711293FDE1400CD2ED7 /* Request.swift in Sources */, + 55E337622942361200CD2ED7 /* PresentationService+PresentationServiceable.swift in Sources */, + 55E336D4293FA75300CD2ED7 /* VerifiedId.swift in Sources */, + 55E33708293FD25900CD2ED7 /* AccessTokenRequirement.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2163,33 +799,6 @@ }; /* End PBXTargetDependency section */ -/* Begin PBXVariantGroup section */ - 552E51A7293E71D700868F47 /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 552E51A8293E71D700868F47 /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; - 552E51A9293E71D700868F47 /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 552E51AA293E71D700868F47 /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - 552E5230293E71D700868F47 /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 552E5231293E71D700868F47 /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - /* Begin XCBuildConfiguration section */ 552E50A2293E6AB200868F47 /* Debug */ = { isa = XCBuildConfiguration; @@ -2454,19 +1063,6 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ - -/* Begin XCVersionGroup section */ - 552E5199293E71D700868F47 /* VerifiableCredentialDataModel.xcdatamodeld */ = { - isa = XCVersionGroup; - children = ( - 552E519A293E71D700868F47 /* Identifier.xcdatamodel */, - ); - currentVersion = 552E519A293E71D700868F47 /* Identifier.xcdatamodel */; - path = VerifiableCredentialDataModel.xcdatamodeld; - sourceTree = ""; - versionGroupType = wrapper.xcdatamodel; - }; -/* End XCVersionGroup section */ }; rootObject = 552E5089293E6AB100868F47 /* Project object */; } diff --git a/WalletLibrary/WalletLibrary/Extensions/PresentationService+PresentationServiceable.swift b/WalletLibrary/WalletLibrary/Extensions/PresentationService+PresentationServiceable.swift new file mode 100644 index 00000000..5807cf0f --- /dev/null +++ b/WalletLibrary/WalletLibrary/Extensions/PresentationService+PresentationServiceable.swift @@ -0,0 +1,16 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +import VCServices +import VCEntities +import PromiseKit + +protocol PresentationServiceable { + func getRequest(usingUrl urlStr: String) -> Promise +} +/** + * + */ +extension PresentationService: PresentationServiceable { } diff --git a/WalletLibrary/WalletLibrary/Protocols/Requests/Handlers/RequestHandling.swift b/WalletLibrary/WalletLibrary/Protocols/Requests/Handlers/RequestHandling.swift new file mode 100644 index 00000000..4cc2e81d --- /dev/null +++ b/WalletLibrary/WalletLibrary/Protocols/Requests/Handlers/RequestHandling.swift @@ -0,0 +1,13 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +/** + * + */ +protocol RequestHandling { + + func handle(requestUri: URL) async throws -> Request + +} diff --git a/WalletLibrary/WalletLibrary/Requests/Handlers/RequestHandler.swift b/WalletLibrary/WalletLibrary/Requests/Handlers/RequestHandler.swift new file mode 100644 index 00000000..d7747bf8 --- /dev/null +++ b/WalletLibrary/WalletLibrary/Requests/Handlers/RequestHandler.swift @@ -0,0 +1,46 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +import VCServices + +enum RequestHandlerError: Error { + case Test(message: String, error: Error) +} + +/** + * + */ +class RequestHandler: RequestHandling { + + private let presentationService: PresentationServiceable + + + init(presentationService: PresentationServiceable = PresentationService()) { + self.presentationService = presentationService + } + + func handle(requestUri: URL) async throws -> Request { + do { + let request = try await withCheckedThrowingContinuation { continuation in + presentationService.getRequest(usingUrl: requestUri.absoluteString).done { request in + continuation.resume(returning: request) + }.catch { error in + continuation.resume(throwing: error) + } + } + print(request) + return IssuanceRequest(requester: request.content.nonce!, + credentialIssuerMetadata: [], + contracts: [], + pinRequirements: nil, + credentialFormats: [], + state: "") + + } catch { + throw RequestHandlerError.Test(message: "Unable to handle request", error: error) + } + } + +} From 29bfc513e1c88517fb51e1a70f67f77c0bc21f83 Mon Sep 17 00:00:00 2001 From: Sydney Morton Date: Mon, 12 Dec 2022 11:42:21 -0500 Subject: [PATCH 10/38] Add Async Wrapper --- .../Utilities/AsyncWrapper.swift | 28 +++++++++++ .../Utilities/AsyncWrapperTests.swift | 48 +++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 WalletLibrary/WalletLibrary/Utilities/AsyncWrapper.swift create mode 100644 WalletLibrary/WalletLibraryTests/Utilities/AsyncWrapperTests.swift diff --git a/WalletLibrary/WalletLibrary/Utilities/AsyncWrapper.swift b/WalletLibrary/WalletLibrary/Utilities/AsyncWrapper.swift new file mode 100644 index 00000000..5ed0a6f8 --- /dev/null +++ b/WalletLibrary/WalletLibrary/Utilities/AsyncWrapper.swift @@ -0,0 +1,28 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +import PromiseKit + +/** + * Utility class for managing async strategy transformations. + */ +struct AsyncWrapper { + + /// Helper function that wraps a promiseKit call into an async function + func wrap(promiseFunc: @escaping () -> Promise) -> (() async throws -> T) { + let asyncFunc = { () in + let result = try await withCheckedThrowingContinuation { continuation in + promiseFunc().done { result in + continuation.resume(returning: result) + }.catch { error in + continuation.resume(throwing: error) + } + } + return result + } + return asyncFunc + } + +} diff --git a/WalletLibrary/WalletLibraryTests/Utilities/AsyncWrapperTests.swift b/WalletLibrary/WalletLibraryTests/Utilities/AsyncWrapperTests.swift new file mode 100644 index 00000000..0fdc7ada --- /dev/null +++ b/WalletLibrary/WalletLibraryTests/Utilities/AsyncWrapperTests.swift @@ -0,0 +1,48 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +import XCTest +import PromiseKit +@testable import WalletLibrary + +private enum AsyncWrapperTestsError: Error { + case testCaseThrowsError +} + +class AsyncWrapperTests: XCTestCase { + + private let asyncWrapper = AsyncWrapper() + + private func testCase(input: String) -> Promise { + return Promise.value(input) + } + + private func errorThrowingTestCase(input: String) -> Promise { + return Promise(error: AsyncWrapperTestsError.testCaseThrowsError) + } + + func testSuccessfulWrapping() async throws { + let expectedResult = "expected1223" + let actualResult = try await asyncWrapper.wrap { () in + self.testCase(input: expectedResult) + }() + XCTAssertEqual(expectedResult, actualResult) + } + + func testWrappingThrowsError() async throws { + let expectedResult = "expected1243" + + let wrappedFunction = asyncWrapper.wrap { () in + self.errorThrowingTestCase(input: expectedResult) + } + do { + let result = try await wrappedFunction() + XCTFail(result) + } catch { + XCTAssertEqual(error as? AsyncWrapperTestsError, AsyncWrapperTestsError.testCaseThrowsError) + print("done") + } + } +} From 98f8e3a05e8fe833aa4b3e41cbf6c9aa07dba1b4 Mon Sep 17 00:00:00 2001 From: Sydney Morton Date: Mon, 12 Dec 2022 11:42:43 -0500 Subject: [PATCH 11/38] Add Protocol for Presentation Service and Extend it --- ...entationService+PresentationServiceable.swift | 16 ++++++++++------ .../Services/PresentationServiceable.swift | 10 ++++++++++ 2 files changed, 20 insertions(+), 6 deletions(-) create mode 100644 WalletLibrary/WalletLibrary/Protocols/Services/PresentationServiceable.swift diff --git a/WalletLibrary/WalletLibrary/Extensions/PresentationService+PresentationServiceable.swift b/WalletLibrary/WalletLibrary/Extensions/PresentationService+PresentationServiceable.swift index 5807cf0f..bf41e9fb 100644 --- a/WalletLibrary/WalletLibrary/Extensions/PresentationService+PresentationServiceable.swift +++ b/WalletLibrary/WalletLibrary/Extensions/PresentationService+PresentationServiceable.swift @@ -5,12 +5,16 @@ import VCServices import VCEntities -import PromiseKit -protocol PresentationServiceable { - func getRequest(usingUrl urlStr: String) -> Promise -} /** - * + * An Extension of the VCServices.PresentationService class. */ -extension PresentationService: PresentationServiceable { } +extension PresentationService: PresentationServiceable { + + /// An async function that gets and validates the presentation request + func getRequest(url: String) async throws -> VCEntities.PresentationRequest { + return try await AsyncWrapper().wrap { () in + self.getRequest(usingUrl: url) + }() + } +} diff --git a/WalletLibrary/WalletLibrary/Protocols/Services/PresentationServiceable.swift b/WalletLibrary/WalletLibrary/Protocols/Services/PresentationServiceable.swift new file mode 100644 index 00000000..4fc3bad7 --- /dev/null +++ b/WalletLibrary/WalletLibrary/Protocols/Services/PresentationServiceable.swift @@ -0,0 +1,10 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +import VCEntities + +protocol PresentationServiceable { + func getRequest(url: String) async throws -> VCEntities.PresentationRequest +} From e59e7ffd3815e9b6c18ebdc60efa455ff0b4cc94 Mon Sep 17 00:00:00 2001 From: Sydney Morton Date: Mon, 12 Dec 2022 11:43:17 -0500 Subject: [PATCH 12/38] Add protocol for request handling --- .../Protocols/Requests/Handlers/RequestHandling.swift | 3 ++- .../WalletLibrary/Requests/Handlers/RequestHandler.swift | 8 +------- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/WalletLibrary/WalletLibrary/Protocols/Requests/Handlers/RequestHandling.swift b/WalletLibrary/WalletLibrary/Protocols/Requests/Handlers/RequestHandling.swift index 4cc2e81d..73bc4eca 100644 --- a/WalletLibrary/WalletLibrary/Protocols/Requests/Handlers/RequestHandling.swift +++ b/WalletLibrary/WalletLibrary/Protocols/Requests/Handlers/RequestHandling.swift @@ -4,10 +4,11 @@ *--------------------------------------------------------------------------------------------*/ /** - * + * Request Handling Protocol */ protocol RequestHandling { + /// Handle a request using the request uri and return an object that conforms to the Request protocol. func handle(requestUri: URL) async throws -> Request } diff --git a/WalletLibrary/WalletLibrary/Requests/Handlers/RequestHandler.swift b/WalletLibrary/WalletLibrary/Requests/Handlers/RequestHandler.swift index d7747bf8..22af66f9 100644 --- a/WalletLibrary/WalletLibrary/Requests/Handlers/RequestHandler.swift +++ b/WalletLibrary/WalletLibrary/Requests/Handlers/RequestHandler.swift @@ -23,13 +23,7 @@ class RequestHandler: RequestHandling { func handle(requestUri: URL) async throws -> Request { do { - let request = try await withCheckedThrowingContinuation { continuation in - presentationService.getRequest(usingUrl: requestUri.absoluteString).done { request in - continuation.resume(returning: request) - }.catch { error in - continuation.resume(throwing: error) - } - } + let request = try await presentationService.getRequest(url: requestUri.absoluteString) print(request) return IssuanceRequest(requester: request.content.nonce!, credentialIssuerMetadata: [], From 442cf671e2407adb8ea8d556741578eae1a75bd1 Mon Sep 17 00:00:00 2001 From: Sydney Morton Date: Mon, 12 Dec 2022 11:43:30 -0500 Subject: [PATCH 13/38] Update project file --- .../WalletLibrary.xcodeproj/project.pbxproj | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj b/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj index 00c86c80..f49de396 100644 --- a/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj +++ b/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj @@ -25,6 +25,9 @@ 55E3375A2942317100CD2ED7 /* RequestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E337592942317100CD2ED7 /* RequestHandler.swift */; }; 55E3375F2942321C00CD2ED7 /* RequestHandling.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E3375E2942321C00CD2ED7 /* RequestHandling.swift */; }; 55E337622942361200CD2ED7 /* PresentationService+PresentationServiceable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E337612942361200CD2ED7 /* PresentationService+PresentationServiceable.swift */; }; + 55E337652943749600CD2ED7 /* AsyncWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E337642943749600CD2ED7 /* AsyncWrapper.swift */; }; + 55E3376829437E3500CD2ED7 /* PresentationServiceable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E3376729437E3500CD2ED7 /* PresentationServiceable.swift */; }; + 55E3376B29478C5000CD2ED7 /* AsyncWrapperTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E3376A29478C5000CD2ED7 /* AsyncWrapperTests.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -211,6 +214,9 @@ 55E337592942317100CD2ED7 /* RequestHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestHandler.swift; sourceTree = ""; }; 55E3375E2942321C00CD2ED7 /* RequestHandling.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestHandling.swift; sourceTree = ""; }; 55E337612942361200CD2ED7 /* PresentationService+PresentationServiceable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PresentationService+PresentationServiceable.swift"; sourceTree = ""; }; + 55E337642943749600CD2ED7 /* AsyncWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AsyncWrapper.swift; sourceTree = ""; }; + 55E3376729437E3500CD2ED7 /* PresentationServiceable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PresentationServiceable.swift; sourceTree = ""; }; + 55E3376A29478C5000CD2ED7 /* AsyncWrapperTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AsyncWrapperTests.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -256,6 +262,7 @@ 552E5094293E6AB200868F47 /* WalletLibrary */ = { isa = PBXGroup; children = ( + 55E337632943747E00CD2ED7 /* Utilities */, 55E33760294235EE00CD2ED7 /* Extensions */, 55E3375B294231F000CD2ED7 /* Protocols */, 55E3370F293FDDF400CD2ED7 /* Requests */, @@ -269,6 +276,7 @@ 552E509E293E6AB200868F47 /* WalletLibraryTests */ = { isa = PBXGroup; children = ( + 55E3376929478C3300CD2ED7 /* Utilities */, 552E509F293E6AB200868F47 /* VerifiedIdFlowTests.swift */, ); path = WalletLibraryTests; @@ -441,6 +449,7 @@ 55E3375B294231F000CD2ED7 /* Protocols */ = { isa = PBXGroup; children = ( + 55E3376629437E1000CD2ED7 /* Services */, 55E3375C294231F600CD2ED7 /* Requests */, ); path = Protocols; @@ -470,6 +479,30 @@ path = Extensions; sourceTree = ""; }; + 55E337632943747E00CD2ED7 /* Utilities */ = { + isa = PBXGroup; + children = ( + 55E337642943749600CD2ED7 /* AsyncWrapper.swift */, + ); + path = Utilities; + sourceTree = ""; + }; + 55E3376629437E1000CD2ED7 /* Services */ = { + isa = PBXGroup; + children = ( + 55E3376729437E3500CD2ED7 /* PresentationServiceable.swift */, + ); + path = Services; + sourceTree = ""; + }; + 55E3376929478C3300CD2ED7 /* Utilities */ = { + isa = PBXGroup; + children = ( + 55E3376A29478C5000CD2ED7 /* AsyncWrapperTests.swift */, + ); + path = Utilities; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -770,8 +803,10 @@ 55E336D8293FCE0500CD2ED7 /* CredentialIssuanceParams.swift in Sources */, 55E336D1293FA6F400CD2ED7 /* VerifiedIdRequirement.swift in Sources */, 55E336D6293FA78C00CD2ED7 /* VerifiedIdClaim.swift in Sources */, + 55E337652943749600CD2ED7 /* AsyncWrapper.swift in Sources */, 55E3370C293FD61E00CD2ED7 /* SelfAttestedClaimRequirement.swift in Sources */, 55E3375F2942321C00CD2ED7 /* RequestHandling.swift in Sources */, + 55E3376829437E3500CD2ED7 /* PresentationServiceable.swift in Sources */, 55E33714293FDEEF00CD2ED7 /* Contract.swift in Sources */, 552E546B293E759300868F47 /* VerifiedIdFlow.swift in Sources */, 55E33711293FDE1400CD2ED7 /* Request.swift in Sources */, @@ -785,6 +820,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 55E3376B29478C5000CD2ED7 /* AsyncWrapperTests.swift in Sources */, 552E50A0293E6AB200868F47 /* VerifiedIdFlowTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; From a5972a11e01ef5d31217e18ccbd55780170d75b5 Mon Sep 17 00:00:00 2001 From: Sydney Morton Date: Mon, 12 Dec 2022 11:44:33 -0500 Subject: [PATCH 14/38] Add Verified Id Flow --- .../WalletLibrary/VerifiedIdFlow.swift | 47 +++++++++++++++++-- .../VerifiedIdFlowTests.swift | 6 ++- 2 files changed, 46 insertions(+), 7 deletions(-) diff --git a/WalletLibrary/WalletLibrary/VerifiedIdFlow.swift b/WalletLibrary/WalletLibrary/VerifiedIdFlow.swift index 31eb2567..4c041387 100644 --- a/WalletLibrary/WalletLibrary/VerifiedIdFlow.swift +++ b/WalletLibrary/WalletLibrary/VerifiedIdFlow.swift @@ -3,14 +3,51 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import Foundation +import VCServices import VCEntities +public enum VerifiedIdFlowError: Error { + case Unimplemented +} + +/** + * External Interface/Protocol that handles Issuance and Presentation Flows. + */ public class VerifiedIdFlow { + /// User scans QR code/deep-links to app. Request URI contained within QR code, and returns either an Issuance or Presentation Request. + public func initiate(requestUri: URL) async throws -> Request { + let request = try await RequestHandler().handle(requestUri: requestUri) + print(request) + return request + } + + /// Returns true if VerifiedIdFlow can handle request uri, else returns false + public func canHandle(requestUri: URL) -> Bool { + return false + } + + /// Dev might choose to fetch contract for use cases like issuance during presentation/notifications without access to a requestUrl but rather just the Contract URL. + public func initiate(credentialIssuanceParams: CredentialIssuanceParams) async throws -> IssuanceRequest { + throw VerifiedIdFlowError.Unimplemented + } - public init() {} - - public func initiate() -> String { - return "Hello World" + /// Send presentation response to verifier, optional options for persona/did/algorithm extensibility. +// func complete(response: PresentationResponse, options: PresentationOptions?) async throws -> Void + + /// If there is a user error, or error outside of SDK control, send presentation completion error. +// func completeWithError(response: PresentationResponse, error: Error) -> Void + + /// Send issuance response to issuer and issuance completion response, optional options for persona/did/algorithm extensibility. + public func complete(response: IssuanceResponse, options: IssuanceOptions?) async throws -> VerifiedId { + throw VerifiedIdFlowError.Unimplemented + } + + /// If there is a user error, or error outside of SDK control, send issuance completion error. + public func completeWithError(response: IssuanceResponse, error: Error) async throws -> Void { + throw VerifiedIdFlowError.Unimplemented } } + +public struct IssuanceResponse {} + +public struct IssuanceOptions {} diff --git a/WalletLibrary/WalletLibraryTests/VerifiedIdFlowTests.swift b/WalletLibrary/WalletLibraryTests/VerifiedIdFlowTests.swift index 126c86f7..92f54807 100644 --- a/WalletLibrary/WalletLibraryTests/VerifiedIdFlowTests.swift +++ b/WalletLibrary/WalletLibraryTests/VerifiedIdFlowTests.swift @@ -16,8 +16,10 @@ class VerifiedIdFlowTests: XCTestCase { // Put teardown code here. This method is called after the invocation of each test method in the class. } - func testInitiateFlow() throws { - print(VerifiedIdFlow().initiate()) + func testInitiateFlow() async throws { + let requestUri = URL(string: "openid-vc://?request_uri=https://beta.did.msidentity.com/v1.0/tenants/9c59be8b-bd18-45d9-b9d9-082bc07c094f/verifiableCredentials/issuanceRequests/4eba26a1-ce31-435b-9f2a-f8a783fce5f8")! + let request = try await VerifiedIdFlow().initiate(requestUri: requestUri) + print(request) } func testPerformanceExample() throws { From 2c8751c2ae980773344670d92d724de6cb6c4336 Mon Sep 17 00:00:00 2001 From: Sydney Morton Date: Mon, 12 Dec 2022 11:56:05 -0500 Subject: [PATCH 15/38] Add PinRequirement and CredentialFormat --- .../WalletLibrary.xcodeproj/project.pbxproj | 20 ++++++++----------- .../Requests/IssuanceRequest.swift | 10 +--------- .../Requirements/CredentialFormat.swift | 16 +++++++++++++++ .../Requirements/PinRequirement.swift} | 18 ++++++++--------- 4 files changed, 34 insertions(+), 30 deletions(-) create mode 100644 WalletLibrary/WalletLibrary/Requests/Requirements/CredentialFormat.swift rename WalletLibrary/WalletLibrary/{Extensions/PresentationService+PresentationServiceable.swift => Requests/Requirements/PinRequirement.swift} (59%) diff --git a/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj b/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj index 00c86c80..065fb899 100644 --- a/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj +++ b/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj @@ -24,7 +24,8 @@ 55E33714293FDEEF00CD2ED7 /* Contract.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E33713293FDEEF00CD2ED7 /* Contract.swift */; }; 55E3375A2942317100CD2ED7 /* RequestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E337592942317100CD2ED7 /* RequestHandler.swift */; }; 55E3375F2942321C00CD2ED7 /* RequestHandling.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E3375E2942321C00CD2ED7 /* RequestHandling.swift */; }; - 55E337622942361200CD2ED7 /* PresentationService+PresentationServiceable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E337612942361200CD2ED7 /* PresentationService+PresentationServiceable.swift */; }; + 55E33775294792B900CD2ED7 /* PinRequirement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E33774294792B900CD2ED7 /* PinRequirement.swift */; }; + 55E3378C2947938300CD2ED7 /* CredentialFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E3378B2947938300CD2ED7 /* CredentialFormat.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -210,7 +211,8 @@ 55E33713293FDEEF00CD2ED7 /* Contract.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Contract.swift; sourceTree = ""; }; 55E337592942317100CD2ED7 /* RequestHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestHandler.swift; sourceTree = ""; }; 55E3375E2942321C00CD2ED7 /* RequestHandling.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestHandling.swift; sourceTree = ""; }; - 55E337612942361200CD2ED7 /* PresentationService+PresentationServiceable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PresentationService+PresentationServiceable.swift"; sourceTree = ""; }; + 55E33774294792B900CD2ED7 /* PinRequirement.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PinRequirement.swift; sourceTree = ""; }; + 55E3378B2947938300CD2ED7 /* CredentialFormat.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CredentialFormat.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -256,7 +258,6 @@ 552E5094293E6AB200868F47 /* WalletLibrary */ = { isa = PBXGroup; children = ( - 55E33760294235EE00CD2ED7 /* Extensions */, 55E3375B294231F000CD2ED7 /* Protocols */, 55E3370F293FDDF400CD2ED7 /* Requests */, 55E336D2293FA74100CD2ED7 /* VerifiedId */, @@ -348,8 +349,10 @@ 55E33707293FD25900CD2ED7 /* AccessTokenRequirement.swift */, 55E336D7293FCE0500CD2ED7 /* CredentialIssuanceParams.swift */, 55E33709293FD3E000CD2ED7 /* IdTokenRequirement.swift */, + 55E33774294792B900CD2ED7 /* PinRequirement.swift */, 55E3370B293FD61E00CD2ED7 /* SelfAttestedClaimRequirement.swift */, 55E336D0293FA6F400CD2ED7 /* VerifiedIdRequirement.swift */, + 55E3378B2947938300CD2ED7 /* CredentialFormat.swift */, ); path = Requirements; sourceTree = ""; @@ -462,14 +465,6 @@ path = Handlers; sourceTree = ""; }; - 55E33760294235EE00CD2ED7 /* Extensions */ = { - isa = PBXGroup; - children = ( - 55E337612942361200CD2ED7 /* PresentationService+PresentationServiceable.swift */, - ); - path = Extensions; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -764,10 +759,12 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 55E33775294792B900CD2ED7 /* PinRequirement.swift in Sources */, 55E3370E293FD84700CD2ED7 /* IssuanceRequest.swift in Sources */, 55E3370A293FD3E000CD2ED7 /* IdTokenRequirement.swift in Sources */, 55E3375A2942317100CD2ED7 /* RequestHandler.swift in Sources */, 55E336D8293FCE0500CD2ED7 /* CredentialIssuanceParams.swift in Sources */, + 55E3378C2947938300CD2ED7 /* CredentialFormat.swift in Sources */, 55E336D1293FA6F400CD2ED7 /* VerifiedIdRequirement.swift in Sources */, 55E336D6293FA78C00CD2ED7 /* VerifiedIdClaim.swift in Sources */, 55E3370C293FD61E00CD2ED7 /* SelfAttestedClaimRequirement.swift in Sources */, @@ -775,7 +772,6 @@ 55E33714293FDEEF00CD2ED7 /* Contract.swift in Sources */, 552E546B293E759300868F47 /* VerifiedIdFlow.swift in Sources */, 55E33711293FDE1400CD2ED7 /* Request.swift in Sources */, - 55E337622942361200CD2ED7 /* PresentationService+PresentationServiceable.swift in Sources */, 55E336D4293FA75300CD2ED7 /* VerifiedId.swift in Sources */, 55E33708293FD25900CD2ED7 /* AccessTokenRequirement.swift in Sources */, ); diff --git a/WalletLibrary/WalletLibrary/Requests/IssuanceRequest.swift b/WalletLibrary/WalletLibrary/Requests/IssuanceRequest.swift index ffdaea77..747e9fdb 100644 --- a/WalletLibrary/WalletLibrary/Requests/IssuanceRequest.swift +++ b/WalletLibrary/WalletLibrary/Requests/IssuanceRequest.swift @@ -18,7 +18,7 @@ public struct IssuanceRequest: Request { public let contracts: [Contract] /// Optional pin requirements needed to display a pin for the request. - public let pinRequirements: PinRequirements? + public let pinRequirements: PinRequirement? /// Credential format data that describes requested verified id accepted formats. let credentialFormats: [CredentialFormat] @@ -26,11 +26,3 @@ public struct IssuanceRequest: Request { /// the state that is sent back with issuance completion response. let state: String } - -public protocol CredentialFormat { - -} - -public protocol PinRequirements { - -} diff --git a/WalletLibrary/WalletLibrary/Requests/Requirements/CredentialFormat.swift b/WalletLibrary/WalletLibrary/Requests/Requirements/CredentialFormat.swift new file mode 100644 index 00000000..15b5c3ab --- /dev/null +++ b/WalletLibrary/WalletLibrary/Requests/Requirements/CredentialFormat.swift @@ -0,0 +1,16 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +/** + * Data that describes requested verified id formats. + */ +public struct CredentialFormat { + + /// the format of the Verified ID requested such as jwt-vc + public let format: String + + /// types of the requested verified ID + public let types: [String] +} diff --git a/WalletLibrary/WalletLibrary/Extensions/PresentationService+PresentationServiceable.swift b/WalletLibrary/WalletLibrary/Requests/Requirements/PinRequirement.swift similarity index 59% rename from WalletLibrary/WalletLibrary/Extensions/PresentationService+PresentationServiceable.swift rename to WalletLibrary/WalletLibrary/Requests/Requirements/PinRequirement.swift index 5807cf0f..645ef50a 100644 --- a/WalletLibrary/WalletLibrary/Extensions/PresentationService+PresentationServiceable.swift +++ b/WalletLibrary/WalletLibrary/Requests/Requirements/PinRequirement.swift @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import VCServices -import VCEntities -import PromiseKit - -protocol PresentationServiceable { - func getRequest(usingUrl urlStr: String) -> Promise -} /** - * + * Information to describe a pin that is required. */ -extension PresentationService: PresentationServiceable { } +public struct PinRequirement { + + /// the length of the pin to display. + public let length: String + + /// type of the pin such as alphanumeric or numeric + public let type: String +} From f14700d675eb9ade6e3084436fea18386a3eb38f Mon Sep 17 00:00:00 2001 From: Sydney Morton Date: Mon, 12 Dec 2022 12:02:57 -0500 Subject: [PATCH 16/38] Fix nits on comments. --- .../WalletLibrary.xcodeproj/project.pbxproj | 40 ---------------- .../Requests/Handlers/RequestHandling.swift | 13 ------ .../Requests/Handlers/RequestHandler.swift | 46 ------------------- .../Requests/IssuanceRequest.swift | 2 +- .../Requirements/AccessTokenRequirement.swift | 2 +- .../Requirements/CredentialFormat.swift | 4 +- .../Requirements/IdTokenRequirement.swift | 8 ++-- .../Requirements/PinRequirement.swift | 2 +- .../SelfAttestedClaimRequirement.swift | 2 +- .../Requirements/VerifiedIdRequirement.swift | 2 +- .../VerifiedId/VerifiedIdClaim.swift | 2 +- 11 files changed, 12 insertions(+), 111 deletions(-) delete mode 100644 WalletLibrary/WalletLibrary/Protocols/Requests/Handlers/RequestHandling.swift delete mode 100644 WalletLibrary/WalletLibrary/Requests/Handlers/RequestHandler.swift diff --git a/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj b/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj index 065fb899..260fb418 100644 --- a/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj +++ b/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj @@ -22,8 +22,6 @@ 55E3370E293FD84700CD2ED7 /* IssuanceRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E3370D293FD84700CD2ED7 /* IssuanceRequest.swift */; }; 55E33711293FDE1400CD2ED7 /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E33710293FDE1400CD2ED7 /* Request.swift */; }; 55E33714293FDEEF00CD2ED7 /* Contract.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E33713293FDEEF00CD2ED7 /* Contract.swift */; }; - 55E3375A2942317100CD2ED7 /* RequestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E337592942317100CD2ED7 /* RequestHandler.swift */; }; - 55E3375F2942321C00CD2ED7 /* RequestHandling.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E3375E2942321C00CD2ED7 /* RequestHandling.swift */; }; 55E33775294792B900CD2ED7 /* PinRequirement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E33774294792B900CD2ED7 /* PinRequirement.swift */; }; 55E3378C2947938300CD2ED7 /* CredentialFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E3378B2947938300CD2ED7 /* CredentialFormat.swift */; }; /* End PBXBuildFile section */ @@ -209,8 +207,6 @@ 55E3370D293FD84700CD2ED7 /* IssuanceRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IssuanceRequest.swift; sourceTree = ""; }; 55E33710293FDE1400CD2ED7 /* Request.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Request.swift; sourceTree = ""; }; 55E33713293FDEEF00CD2ED7 /* Contract.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Contract.swift; sourceTree = ""; }; - 55E337592942317100CD2ED7 /* RequestHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestHandler.swift; sourceTree = ""; }; - 55E3375E2942321C00CD2ED7 /* RequestHandling.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestHandling.swift; sourceTree = ""; }; 55E33774294792B900CD2ED7 /* PinRequirement.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PinRequirement.swift; sourceTree = ""; }; 55E3378B2947938300CD2ED7 /* CredentialFormat.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CredentialFormat.swift; sourceTree = ""; }; /* End PBXFileReference section */ @@ -258,7 +254,6 @@ 552E5094293E6AB200868F47 /* WalletLibrary */ = { isa = PBXGroup; children = ( - 55E3375B294231F000CD2ED7 /* Protocols */, 55E3370F293FDDF400CD2ED7 /* Requests */, 55E336D2293FA74100CD2ED7 /* VerifiedId */, 552E50AB293E6F5500868F47 /* VerifiedIdFlow.swift */, @@ -416,7 +411,6 @@ 55E3370F293FDDF400CD2ED7 /* Requests */ = { isa = PBXGroup; children = ( - 55E337432942311000CD2ED7 /* Handlers */, 55E33712293FDEDF00CD2ED7 /* Contract */, 55E336CF293FA6D900CD2ED7 /* Requirements */, 55E3370D293FD84700CD2ED7 /* IssuanceRequest.swift */, @@ -433,38 +427,6 @@ path = Contract; sourceTree = ""; }; - 55E337432942311000CD2ED7 /* Handlers */ = { - isa = PBXGroup; - children = ( - 55E337592942317100CD2ED7 /* RequestHandler.swift */, - ); - path = Handlers; - sourceTree = ""; - }; - 55E3375B294231F000CD2ED7 /* Protocols */ = { - isa = PBXGroup; - children = ( - 55E3375C294231F600CD2ED7 /* Requests */, - ); - path = Protocols; - sourceTree = ""; - }; - 55E3375C294231F600CD2ED7 /* Requests */ = { - isa = PBXGroup; - children = ( - 55E3375D2942320600CD2ED7 /* Handlers */, - ); - path = Requests; - sourceTree = ""; - }; - 55E3375D2942320600CD2ED7 /* Handlers */ = { - isa = PBXGroup; - children = ( - 55E3375E2942321C00CD2ED7 /* RequestHandling.swift */, - ); - path = Handlers; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -762,13 +724,11 @@ 55E33775294792B900CD2ED7 /* PinRequirement.swift in Sources */, 55E3370E293FD84700CD2ED7 /* IssuanceRequest.swift in Sources */, 55E3370A293FD3E000CD2ED7 /* IdTokenRequirement.swift in Sources */, - 55E3375A2942317100CD2ED7 /* RequestHandler.swift in Sources */, 55E336D8293FCE0500CD2ED7 /* CredentialIssuanceParams.swift in Sources */, 55E3378C2947938300CD2ED7 /* CredentialFormat.swift in Sources */, 55E336D1293FA6F400CD2ED7 /* VerifiedIdRequirement.swift in Sources */, 55E336D6293FA78C00CD2ED7 /* VerifiedIdClaim.swift in Sources */, 55E3370C293FD61E00CD2ED7 /* SelfAttestedClaimRequirement.swift in Sources */, - 55E3375F2942321C00CD2ED7 /* RequestHandling.swift in Sources */, 55E33714293FDEEF00CD2ED7 /* Contract.swift in Sources */, 552E546B293E759300868F47 /* VerifiedIdFlow.swift in Sources */, 55E33711293FDE1400CD2ED7 /* Request.swift in Sources */, diff --git a/WalletLibrary/WalletLibrary/Protocols/Requests/Handlers/RequestHandling.swift b/WalletLibrary/WalletLibrary/Protocols/Requests/Handlers/RequestHandling.swift deleted file mode 100644 index 4cc2e81d..00000000 --- a/WalletLibrary/WalletLibrary/Protocols/Requests/Handlers/RequestHandling.swift +++ /dev/null @@ -1,13 +0,0 @@ -/*--------------------------------------------------------------------------------------------- -* Copyright (c) Microsoft Corporation. All rights reserved. -* Licensed under the MIT License. See License.txt in the project root for license information. -*--------------------------------------------------------------------------------------------*/ - -/** - * - */ -protocol RequestHandling { - - func handle(requestUri: URL) async throws -> Request - -} diff --git a/WalletLibrary/WalletLibrary/Requests/Handlers/RequestHandler.swift b/WalletLibrary/WalletLibrary/Requests/Handlers/RequestHandler.swift deleted file mode 100644 index d7747bf8..00000000 --- a/WalletLibrary/WalletLibrary/Requests/Handlers/RequestHandler.swift +++ /dev/null @@ -1,46 +0,0 @@ -/*--------------------------------------------------------------------------------------------- -* Copyright (c) Microsoft Corporation. All rights reserved. -* Licensed under the MIT License. See License.txt in the project root for license information. -*--------------------------------------------------------------------------------------------*/ - -import VCServices - -enum RequestHandlerError: Error { - case Test(message: String, error: Error) -} - -/** - * - */ -class RequestHandler: RequestHandling { - - private let presentationService: PresentationServiceable - - - init(presentationService: PresentationServiceable = PresentationService()) { - self.presentationService = presentationService - } - - func handle(requestUri: URL) async throws -> Request { - do { - let request = try await withCheckedThrowingContinuation { continuation in - presentationService.getRequest(usingUrl: requestUri.absoluteString).done { request in - continuation.resume(returning: request) - }.catch { error in - continuation.resume(throwing: error) - } - } - print(request) - return IssuanceRequest(requester: request.content.nonce!, - credentialIssuerMetadata: [], - contracts: [], - pinRequirements: nil, - credentialFormats: [], - state: "") - - } catch { - throw RequestHandlerError.Test(message: "Unable to handle request", error: error) - } - } - -} diff --git a/WalletLibrary/WalletLibrary/Requests/IssuanceRequest.swift b/WalletLibrary/WalletLibrary/Requests/IssuanceRequest.swift index 747e9fdb..5be2eb68 100644 --- a/WalletLibrary/WalletLibrary/Requests/IssuanceRequest.swift +++ b/WalletLibrary/WalletLibrary/Requests/IssuanceRequest.swift @@ -8,7 +8,7 @@ */ public struct IssuanceRequest: Request { - /// URL of the customer who is the issuer + /// URL of the customer who is the issuer. public let requester: String /// Information such as a list of contract URLs to describe where to get contract. diff --git a/WalletLibrary/WalletLibrary/Requests/Requirements/AccessTokenRequirement.swift b/WalletLibrary/WalletLibrary/Requests/Requirements/AccessTokenRequirement.swift index 32783bac..6accca49 100644 --- a/WalletLibrary/WalletLibrary/Requests/Requirements/AccessTokenRequirement.swift +++ b/WalletLibrary/WalletLibrary/Requests/Requirements/AccessTokenRequirement.swift @@ -19,7 +19,7 @@ public struct AccessTokenRequirement { /// The configuration url to get Access Token through an authentication library. public let configuration: String - /// The client id used to get the access token through an authentication library + /// The client id used to get the access token through an authentication library. public let clientId: String /// The resource id used to get the access token through an authentication library. diff --git a/WalletLibrary/WalletLibrary/Requests/Requirements/CredentialFormat.swift b/WalletLibrary/WalletLibrary/Requests/Requirements/CredentialFormat.swift index 15b5c3ab..c1e5ee97 100644 --- a/WalletLibrary/WalletLibrary/Requests/Requirements/CredentialFormat.swift +++ b/WalletLibrary/WalletLibrary/Requests/Requirements/CredentialFormat.swift @@ -8,9 +8,9 @@ */ public struct CredentialFormat { - /// the format of the Verified ID requested such as jwt-vc + /// the format of the verified Id requested such as jwt-vc. public let format: String - /// types of the requested verified ID + /// types of the requested verified Id. public let types: [String] } diff --git a/WalletLibrary/WalletLibrary/Requests/Requirements/IdTokenRequirement.swift b/WalletLibrary/WalletLibrary/Requests/Requirements/IdTokenRequirement.swift index 489ab546..0cec4d6d 100644 --- a/WalletLibrary/WalletLibrary/Requests/Requirements/IdTokenRequirement.swift +++ b/WalletLibrary/WalletLibrary/Requests/Requirements/IdTokenRequirement.swift @@ -7,7 +7,7 @@ * Information to describe an id token required for a Verified Id issuance flow. */ public struct IdTokenRequirement { - /// id of the requirement + /// id of the requirement. let id: String /// if the requirement should be encrypted. @@ -19,13 +19,13 @@ public struct IdTokenRequirement { /// The configuration url to get id token through an authentication library. public let configuration: URL - /// The client id used to get the id token through an authentication library + /// The client id used to get the id token through an authentication library. public let clientId: String - /// The redirect url used to get the id token through an authentication library + /// The redirect url used to get the id token through an authentication library. public let redirectUri: String - /// The scope used to get the id token through an authentication library + /// The scope used to get the id token through an authentication library. public let scope: String /// The nonce acts as an extra level of security and is used as an additional property diff --git a/WalletLibrary/WalletLibrary/Requests/Requirements/PinRequirement.swift b/WalletLibrary/WalletLibrary/Requests/Requirements/PinRequirement.swift index 645ef50a..14b50d2d 100644 --- a/WalletLibrary/WalletLibrary/Requests/Requirements/PinRequirement.swift +++ b/WalletLibrary/WalletLibrary/Requests/Requirements/PinRequirement.swift @@ -11,6 +11,6 @@ public struct PinRequirement { /// the length of the pin to display. public let length: String - /// type of the pin such as alphanumeric or numeric + /// the type of the pin such as alphanumeric or numeric. public let type: String } diff --git a/WalletLibrary/WalletLibrary/Requests/Requirements/SelfAttestedClaimRequirement.swift b/WalletLibrary/WalletLibrary/Requests/Requirements/SelfAttestedClaimRequirement.swift index 05c8f237..a3ca6603 100644 --- a/WalletLibrary/WalletLibrary/Requests/Requirements/SelfAttestedClaimRequirement.swift +++ b/WalletLibrary/WalletLibrary/Requests/Requirements/SelfAttestedClaimRequirement.swift @@ -7,7 +7,7 @@ * Information to describe a self attested claim required for a Verified Id issuance flow. */ public struct SelfAttestedClaimRequirement { - /// id of the requirement + /// id of the requirement. let id: String /// if the requirement should be encrypted. diff --git a/WalletLibrary/WalletLibrary/Requests/Requirements/VerifiedIdRequirement.swift b/WalletLibrary/WalletLibrary/Requests/Requirements/VerifiedIdRequirement.swift index 5a75a993..3073db4a 100644 --- a/WalletLibrary/WalletLibrary/Requests/Requirements/VerifiedIdRequirement.swift +++ b/WalletLibrary/WalletLibrary/Requests/Requirements/VerifiedIdRequirement.swift @@ -28,7 +28,7 @@ public struct VerifiedIdRequirement { /// optional property for info needed for issuance during presentation flow. public let credentialIssuanceParams: CredentialIssuanceParams? - /// helper method that returns Verified Id that match the requirement from a list of Verified Ids. + /// TODO: helper method that returns verified id that match the requirement from a list of verified ids. public func getMatches(verifiedIds: [VerifiedId]) -> [VerifiedId] { return [] } diff --git a/WalletLibrary/WalletLibrary/VerifiedId/VerifiedIdClaim.swift b/WalletLibrary/WalletLibrary/VerifiedId/VerifiedIdClaim.swift index a3be5a5c..2e589108 100644 --- a/WalletLibrary/WalletLibrary/VerifiedId/VerifiedIdClaim.swift +++ b/WalletLibrary/WalletLibrary/VerifiedId/VerifiedIdClaim.swift @@ -10,7 +10,7 @@ public struct VerifiedIdClaim { /// id of the claim. For example, within a VC, it is the key value of credentialSubject. let id: String - /// the value of the claim + /// the value of the claim. let value: Any } From 69b3ca29e16d8982fa2e89a997b9fc219f9e7472 Mon Sep 17 00:00:00 2001 From: Sydney Morton Date: Mon, 12 Dec 2022 12:55:47 -0500 Subject: [PATCH 17/38] Remove trait properties from contract. --- .../WalletLibrary/Requests/Contract/Contract.swift | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/WalletLibrary/WalletLibrary/Requests/Contract/Contract.swift b/WalletLibrary/WalletLibrary/Requests/Contract/Contract.swift index 40684c10..5f913a32 100644 --- a/WalletLibrary/WalletLibrary/Requests/Contract/Contract.swift +++ b/WalletLibrary/WalletLibrary/Requests/Contract/Contract.swift @@ -6,14 +6,9 @@ /** * A contract that contains the information needed to get a Verified Id * including display information through the trait properties. + * TODO: Add display information properties once we have agreed on design. */ public struct Contract { - - /// the traits like name to describe the issuer. - public let issuerTraits: RequesterTraits - - /// the traits such as background color and name to describe the verified id. - public let verifiedIdTraits: VerifiedIdTraits /// information to describe Verified IDs required for issuance. public let verifiedIdRequirements: [VerifiedIdRequirement] @@ -30,9 +25,3 @@ public struct Contract { /// raw representation of the contract. let raw: String } - -/// TODO: implement Requester Traits -public protocol RequesterTraits {} - -/// TODO: implement VerifiedIdTraits -public protocol VerifiedIdTraits {} From 4c5ec3173c3888a0a9ba3741e4a3005bf2c8f50a Mon Sep 17 00:00:00 2001 From: Sydney Morton Date: Tue, 13 Dec 2022 15:25:31 -0500 Subject: [PATCH 18/38] Add Extension for PresentationService --- ...ationService+PresentationServiceable.swift | 27 +++++++++++++++++++ .../{ => Protocols}/Requests/Request.swift | 0 2 files changed, 27 insertions(+) create mode 100644 WalletLibrary/WalletLibrary/Extensions/PresentationService+PresentationServiceable.swift rename WalletLibrary/WalletLibrary/{ => Protocols}/Requests/Request.swift (100%) diff --git a/WalletLibrary/WalletLibrary/Extensions/PresentationService+PresentationServiceable.swift b/WalletLibrary/WalletLibrary/Extensions/PresentationService+PresentationServiceable.swift new file mode 100644 index 00000000..893eb7bc --- /dev/null +++ b/WalletLibrary/WalletLibrary/Extensions/PresentationService+PresentationServiceable.swift @@ -0,0 +1,27 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +import VCServices +import VCEntities + +/** + * An Extension of the VCServices.PresentationService class. + */ +extension PresentationService: PresentationServiceable { + + /// Fetches and validates the presentation request. + func getRequest(url: String) async throws -> VCEntities.PresentationRequest { + return try await AsyncWrapper().wrap { () in + self.getRequest(usingUrl: url) + }() + } + + /// Sends the presentation response container and if successful, returns void, if unsuccessful, throws an error. + func send(response: PresentationResponseContainer) async throws -> Void { + let _ = try await AsyncWrapper().wrap { () in + self.send(response: response) + }() + } +} diff --git a/WalletLibrary/WalletLibrary/Requests/Request.swift b/WalletLibrary/WalletLibrary/Protocols/Requests/Request.swift similarity index 100% rename from WalletLibrary/WalletLibrary/Requests/Request.swift rename to WalletLibrary/WalletLibrary/Protocols/Requests/Request.swift From 9845e6a7f36cb8dd900a43deba6db9d723ae34fb Mon Sep 17 00:00:00 2001 From: Sydney Morton Date: Wed, 14 Dec 2022 11:34:52 -0500 Subject: [PATCH 19/38] Add Translation Protocols --- .../WalletLibrary.xcodeproj/project.pbxproj | 194 +++++++++++++++--- .../Protocols/Extensions/Translateable.swift | 35 ++++ .../Protocols/Utilities/Translating.swift | 9 + .../WalletLibrary/Utilities/Translator.swift | 15 ++ 4 files changed, 225 insertions(+), 28 deletions(-) create mode 100644 WalletLibrary/WalletLibrary/Protocols/Extensions/Translateable.swift create mode 100644 WalletLibrary/WalletLibrary/Protocols/Utilities/Translating.swift create mode 100644 WalletLibrary/WalletLibrary/Utilities/Translator.swift diff --git a/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj b/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj index f49de396..f412fdde 100644 --- a/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj +++ b/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj @@ -11,6 +11,23 @@ 552E50A0293E6AB200868F47 /* VerifiedIdFlowTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 552E509F293E6AB200868F47 /* VerifiedIdFlowTests.swift */; }; 552E50A1293E6AB200868F47 /* WalletLibrary.h in Headers */ = {isa = PBXBuildFile; fileRef = 552E5095293E6AB200868F47 /* WalletLibrary.h */; settings = {ATTRIBUTES = (Public, ); }; }; 552E546B293E759300868F47 /* VerifiedIdFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 552E50AB293E6F5500868F47 /* VerifiedIdFlow.swift */; }; + 5534E5972948B8C2005D0765 /* VCServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55E336E7293FCE4F00CD2ED7 /* VCServices.framework */; platformFilter = ios; }; + 5534E5982948B8C2005D0765 /* VCServices.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 55E336E7293FCE4F00CD2ED7 /* VCServices.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 5534E5AC2948B8C8005D0765 /* VCEntities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55E336DE293FCE4200CD2ED7 /* VCEntities.framework */; platformFilter = ios; }; + 5534E5AD2948B8C8005D0765 /* VCEntities.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 55E336DE293FCE4200CD2ED7 /* VCEntities.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 5534E5B02948FAC5005D0765 /* RequestTranslator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E5AF2948FAC5005D0765 /* RequestTranslator.swift */; }; + 5534E5B32948FC9C005D0765 /* RequestRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E5B22948FC9C005D0765 /* RequestRepository.swift */; }; + 5534E5B52948FEB5005D0765 /* RootOfTrust.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E5B42948FEB5005D0765 /* RootOfTrust.swift */; }; + 5534E61B294933AB005D0765 /* ContractTranslator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E61A294933AB005D0765 /* ContractTranslator.swift */; }; + 5534E64D294A0888005D0765 /* PresentationDescriptor+Translateable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E64C294A0888005D0765 /* PresentationDescriptor+Translateable.swift */; }; + 5534E667294A0B6C005D0765 /* Translateable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E666294A0B6C005D0765 /* Translateable.swift */; }; + 5534E669294A0C3F005D0765 /* Translator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E668294A0C3F005D0765 /* Translator.swift */; }; + 5534E66E294A0F8F005D0765 /* Translating.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E66D294A0F8F005D0765 /* Translating.swift */; }; + 5534E670294A1008005D0765 /* PresentationRequest+Translateable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E66F294A1008005D0765 /* PresentationRequest+Translateable.swift */; }; + 5534E672294A19D5005D0765 /* IdTokenDescriptor+Translateable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E671294A19D5005D0765 /* IdTokenDescriptor+Translateable.swift */; }; + 5534E677294A1FA0005D0765 /* AccessTokenDescriptor+Translateable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E676294A1FA0005D0765 /* AccessTokenDescriptor+Translateable.swift */; }; + 5534E679294A286A005D0765 /* SeltAttestedDescriptor+Translateable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E678294A286A005D0765 /* SeltAttestedDescriptor+Translateable.swift */; }; + 5534E67B294A2B05005D0765 /* IssuanceRequest+Translateable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E67A294A2B05005D0765 /* IssuanceRequest+Translateable.swift */; }; 55E33684293E7B6600CD2ED7 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55E33679293E7B5F00CD2ED7 /* PromiseKit.framework */; }; 55E336D1293FA6F400CD2ED7 /* VerifiedIdRequirement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E336D0293FA6F400CD2ED7 /* VerifiedIdRequirement.swift */; }; 55E336D4293FA75300CD2ED7 /* VerifiedId.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E336D3293FA75300CD2ED7 /* VerifiedId.swift */; }; @@ -23,11 +40,13 @@ 55E33711293FDE1400CD2ED7 /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E33710293FDE1400CD2ED7 /* Request.swift */; }; 55E33714293FDEEF00CD2ED7 /* Contract.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E33713293FDEEF00CD2ED7 /* Contract.swift */; }; 55E3375A2942317100CD2ED7 /* RequestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E337592942317100CD2ED7 /* RequestHandler.swift */; }; - 55E3375F2942321C00CD2ED7 /* RequestHandling.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E3375E2942321C00CD2ED7 /* RequestHandling.swift */; }; - 55E337622942361200CD2ED7 /* PresentationService+PresentationServiceable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E337612942361200CD2ED7 /* PresentationService+PresentationServiceable.swift */; }; 55E337652943749600CD2ED7 /* AsyncWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E337642943749600CD2ED7 /* AsyncWrapper.swift */; }; 55E3376829437E3500CD2ED7 /* PresentationServiceable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E3376729437E3500CD2ED7 /* PresentationServiceable.swift */; }; 55E3376B29478C5000CD2ED7 /* AsyncWrapperTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E3376A29478C5000CD2ED7 /* AsyncWrapperTests.swift */; }; + 55E337B42948B4B000CD2ED7 /* CredentialFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E3379D2948B4B000CD2ED7 /* CredentialFormat.swift */; }; + 55E337B52948B4B000CD2ED7 /* PinRequirement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E337B32948B4B000CD2ED7 /* PinRequirement.swift */; }; + 55E337B92948B51E00CD2ED7 /* RequestHandling.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E337B82948B51E00CD2ED7 /* RequestHandling.swift */; }; + 55E337BC2948B5FE00CD2ED7 /* PresentationService+PresentationServiceable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E337BB2948B5FE00CD2ED7 /* PresentationService+PresentationServiceable.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -187,6 +206,21 @@ }; /* End PBXContainerItemProxy section */ +/* Begin PBXCopyFilesBuildPhase section */ + 5534E5992948B8C2005D0765 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 5534E5AD2948B8C8005D0765 /* VCEntities.framework in Embed Frameworks */, + 5534E5982948B8C2005D0765 /* VCServices.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + /* Begin PBXFileReference section */ 552E5092293E6AB200868F47 /* WalletLibrary.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = WalletLibrary.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 552E5095293E6AB200868F47 /* WalletLibrary.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WalletLibrary.h; sourceTree = ""; }; @@ -198,6 +232,19 @@ 552E51D8293E71D700868F47 /* VCToken.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = VCToken.xcodeproj; path = VCToken/VCToken.xcodeproj; sourceTree = ""; }; 552E5229293E71D700868F47 /* VCCrypto.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = VCCrypto.xcodeproj; path = VCCrypto/VCCrypto.xcodeproj; sourceTree = ""; }; 552E5237293E71D700868F47 /* VCNetworking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = VCNetworking.xcodeproj; path = VCNetworking/VCNetworking.xcodeproj; sourceTree = ""; }; + 5534E5AF2948FAC5005D0765 /* RequestTranslator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestTranslator.swift; sourceTree = ""; }; + 5534E5B22948FC9C005D0765 /* RequestRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestRepository.swift; sourceTree = ""; }; + 5534E5B42948FEB5005D0765 /* RootOfTrust.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootOfTrust.swift; sourceTree = ""; }; + 5534E61A294933AB005D0765 /* ContractTranslator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContractTranslator.swift; sourceTree = ""; }; + 5534E64C294A0888005D0765 /* PresentationDescriptor+Translateable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PresentationDescriptor+Translateable.swift"; sourceTree = ""; }; + 5534E666294A0B6C005D0765 /* Translateable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Translateable.swift; sourceTree = ""; }; + 5534E668294A0C3F005D0765 /* Translator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Translator.swift; sourceTree = ""; }; + 5534E66D294A0F8F005D0765 /* Translating.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Translating.swift; sourceTree = ""; }; + 5534E66F294A1008005D0765 /* PresentationRequest+Translateable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PresentationRequest+Translateable.swift"; sourceTree = ""; }; + 5534E671294A19D5005D0765 /* IdTokenDescriptor+Translateable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "IdTokenDescriptor+Translateable.swift"; sourceTree = ""; }; + 5534E676294A1FA0005D0765 /* AccessTokenDescriptor+Translateable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AccessTokenDescriptor+Translateable.swift"; sourceTree = ""; }; + 5534E678294A286A005D0765 /* SeltAttestedDescriptor+Translateable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SeltAttestedDescriptor+Translateable.swift"; sourceTree = ""; }; + 5534E67A294A2B05005D0765 /* IssuanceRequest+Translateable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "IssuanceRequest+Translateable.swift"; sourceTree = ""; }; 55E33666293E7B5000CD2ED7 /* PMKFoundation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = PMKFoundation.xcodeproj; path = Foundation/PMKFoundation.xcodeproj; sourceTree = ""; }; 55E3366F293E7B5F00CD2ED7 /* PromiseKit.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = PromiseKit.xcodeproj; path = PromiseKit/PromiseKit.xcodeproj; sourceTree = ""; }; 55E33685293E7B7D00CD2ED7 /* Secp256k1.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Secp256k1.xcodeproj; path = Secp256k1/Secp256k1.xcodeproj; sourceTree = ""; }; @@ -212,11 +259,13 @@ 55E33710293FDE1400CD2ED7 /* Request.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Request.swift; sourceTree = ""; }; 55E33713293FDEEF00CD2ED7 /* Contract.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Contract.swift; sourceTree = ""; }; 55E337592942317100CD2ED7 /* RequestHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestHandler.swift; sourceTree = ""; }; - 55E3375E2942321C00CD2ED7 /* RequestHandling.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestHandling.swift; sourceTree = ""; }; - 55E337612942361200CD2ED7 /* PresentationService+PresentationServiceable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PresentationService+PresentationServiceable.swift"; sourceTree = ""; }; 55E337642943749600CD2ED7 /* AsyncWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AsyncWrapper.swift; sourceTree = ""; }; 55E3376729437E3500CD2ED7 /* PresentationServiceable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PresentationServiceable.swift; sourceTree = ""; }; 55E3376A29478C5000CD2ED7 /* AsyncWrapperTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AsyncWrapperTests.swift; sourceTree = ""; }; + 55E3379D2948B4B000CD2ED7 /* CredentialFormat.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CredentialFormat.swift; path = WalletLibrary/Requests/Requirements/CredentialFormat.swift; sourceTree = SOURCE_ROOT; }; + 55E337B32948B4B000CD2ED7 /* PinRequirement.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PinRequirement.swift; path = WalletLibrary/Requests/Requirements/PinRequirement.swift; sourceTree = SOURCE_ROOT; }; + 55E337B82948B51E00CD2ED7 /* RequestHandling.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestHandling.swift; sourceTree = ""; }; + 55E337BB2948B5FE00CD2ED7 /* PresentationService+PresentationServiceable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PresentationService+PresentationServiceable.swift"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -224,7 +273,9 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 5534E5AC2948B8C8005D0765 /* VCEntities.framework in Frameworks */, 55E33684293E7B6600CD2ED7 /* PromiseKit.framework in Frameworks */, + 5534E5972948B8C2005D0765 /* VCServices.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -262,11 +313,12 @@ 552E5094293E6AB200868F47 /* WalletLibrary */ = { isa = PBXGroup; children = ( - 55E337632943747E00CD2ED7 /* Utilities */, - 55E33760294235EE00CD2ED7 /* Extensions */, + 55E337BA2948B5E700CD2ED7 /* Extensions */, 55E3375B294231F000CD2ED7 /* Protocols */, + 5534E5B12948FC1B005D0765 /* Repositories */, 55E3370F293FDDF400CD2ED7 /* Requests */, 55E336D2293FA74100CD2ED7 /* VerifiedId */, + 55E337632943747E00CD2ED7 /* Utilities */, 552E50AB293E6F5500868F47 /* VerifiedIdFlow.swift */, 552E5095293E6AB200868F47 /* WalletLibrary.h */, ); @@ -320,6 +372,68 @@ name = Frameworks; sourceTree = ""; }; + 5534E5AE2948FA1C005D0765 /* Translators */ = { + isa = PBXGroup; + children = ( + 5534E5AF2948FAC5005D0765 /* RequestTranslator.swift */, + 5534E61A294933AB005D0765 /* ContractTranslator.swift */, + ); + path = Translators; + sourceTree = ""; + }; + 5534E5B12948FC1B005D0765 /* Repositories */ = { + isa = PBXGroup; + children = ( + 5534E5B22948FC9C005D0765 /* RequestRepository.swift */, + ); + path = Repositories; + sourceTree = ""; + }; + 5534E663294A0B28005D0765 /* Translations */ = { + isa = PBXGroup; + children = ( + 5534E673294A1A00005D0765 /* VCSDK */, + ); + path = Translations; + sourceTree = ""; + }; + 5534E664294A0B3E005D0765 /* Services */ = { + isa = PBXGroup; + children = ( + 55E337BB2948B5FE00CD2ED7 /* PresentationService+PresentationServiceable.swift */, + ); + path = Services; + sourceTree = ""; + }; + 5534E665294A0B55005D0765 /* Extensions */ = { + isa = PBXGroup; + children = ( + 5534E666294A0B6C005D0765 /* Translateable.swift */, + ); + path = Extensions; + sourceTree = ""; + }; + 5534E66C294A0F76005D0765 /* Utilities */ = { + isa = PBXGroup; + children = ( + 5534E66D294A0F8F005D0765 /* Translating.swift */, + ); + path = Utilities; + sourceTree = ""; + }; + 5534E673294A1A00005D0765 /* VCSDK */ = { + isa = PBXGroup; + children = ( + 5534E676294A1FA0005D0765 /* AccessTokenDescriptor+Translateable.swift */, + 5534E67A294A2B05005D0765 /* IssuanceRequest+Translateable.swift */, + 5534E671294A19D5005D0765 /* IdTokenDescriptor+Translateable.swift */, + 5534E64C294A0888005D0765 /* PresentationDescriptor+Translateable.swift */, + 5534E66F294A1008005D0765 /* PresentationRequest+Translateable.swift */, + 5534E678294A286A005D0765 /* SeltAttestedDescriptor+Translateable.swift */, + ); + path = VCSDK; + sourceTree = ""; + }; 55E33667293E7B5000CD2ED7 /* Products */ = { isa = PBXGroup; children = ( @@ -354,8 +468,10 @@ isa = PBXGroup; children = ( 55E33707293FD25900CD2ED7 /* AccessTokenRequirement.swift */, + 55E3379D2948B4B000CD2ED7 /* CredentialFormat.swift */, 55E336D7293FCE0500CD2ED7 /* CredentialIssuanceParams.swift */, 55E33709293FD3E000CD2ED7 /* IdTokenRequirement.swift */, + 55E337B32948B4B000CD2ED7 /* PinRequirement.swift */, 55E3370B293FD61E00CD2ED7 /* SelfAttestedClaimRequirement.swift */, 55E336D0293FA6F400CD2ED7 /* VerifiedIdRequirement.swift */, ); @@ -421,11 +537,12 @@ 55E3370F293FDDF400CD2ED7 /* Requests */ = { isa = PBXGroup; children = ( + 5534E5AE2948FA1C005D0765 /* Translators */, 55E337432942311000CD2ED7 /* Handlers */, 55E33712293FDEDF00CD2ED7 /* Contract */, 55E336CF293FA6D900CD2ED7 /* Requirements */, 55E3370D293FD84700CD2ED7 /* IssuanceRequest.swift */, - 55E33710293FDE1400CD2ED7 /* Request.swift */, + 5534E5B42948FEB5005D0765 /* RootOfTrust.swift */, ); path = Requests; sourceTree = ""; @@ -449,58 +566,63 @@ 55E3375B294231F000CD2ED7 /* Protocols */ = { isa = PBXGroup; children = ( + 5534E66C294A0F76005D0765 /* Utilities */, + 5534E665294A0B55005D0765 /* Extensions */, + 55E337B62948B4F900CD2ED7 /* Requests */, 55E3376629437E1000CD2ED7 /* Services */, - 55E3375C294231F600CD2ED7 /* Requests */, ); path = Protocols; sourceTree = ""; }; - 55E3375C294231F600CD2ED7 /* Requests */ = { + 55E337632943747E00CD2ED7 /* Utilities */ = { isa = PBXGroup; children = ( - 55E3375D2942320600CD2ED7 /* Handlers */, + 55E337642943749600CD2ED7 /* AsyncWrapper.swift */, + 5534E668294A0C3F005D0765 /* Translator.swift */, ); - path = Requests; + path = Utilities; sourceTree = ""; }; - 55E3375D2942320600CD2ED7 /* Handlers */ = { + 55E3376629437E1000CD2ED7 /* Services */ = { isa = PBXGroup; children = ( - 55E3375E2942321C00CD2ED7 /* RequestHandling.swift */, + 55E3376729437E3500CD2ED7 /* PresentationServiceable.swift */, ); - path = Handlers; + path = Services; sourceTree = ""; }; - 55E33760294235EE00CD2ED7 /* Extensions */ = { + 55E3376929478C3300CD2ED7 /* Utilities */ = { isa = PBXGroup; children = ( - 55E337612942361200CD2ED7 /* PresentationService+PresentationServiceable.swift */, + 55E3376A29478C5000CD2ED7 /* AsyncWrapperTests.swift */, ); - path = Extensions; + path = Utilities; sourceTree = ""; }; - 55E337632943747E00CD2ED7 /* Utilities */ = { + 55E337B62948B4F900CD2ED7 /* Requests */ = { isa = PBXGroup; children = ( - 55E337642943749600CD2ED7 /* AsyncWrapper.swift */, + 55E337B72948B50800CD2ED7 /* Handlers */, + 55E33710293FDE1400CD2ED7 /* Request.swift */, ); - path = Utilities; + path = Requests; sourceTree = ""; }; - 55E3376629437E1000CD2ED7 /* Services */ = { + 55E337B72948B50800CD2ED7 /* Handlers */ = { isa = PBXGroup; children = ( - 55E3376729437E3500CD2ED7 /* PresentationServiceable.swift */, + 55E337B82948B51E00CD2ED7 /* RequestHandling.swift */, ); - path = Services; + path = Handlers; sourceTree = ""; }; - 55E3376929478C3300CD2ED7 /* Utilities */ = { + 55E337BA2948B5E700CD2ED7 /* Extensions */ = { isa = PBXGroup; children = ( - 55E3376A29478C5000CD2ED7 /* AsyncWrapperTests.swift */, + 5534E664294A0B3E005D0765 /* Services */, + 5534E663294A0B28005D0765 /* Translations */, ); - path = Utilities; + path = Extensions; sourceTree = ""; }; /* End PBXGroup section */ @@ -525,6 +647,7 @@ 552E508E293E6AB200868F47 /* Sources */, 552E508F293E6AB200868F47 /* Frameworks */, 552E5090293E6AB200868F47 /* Resources */, + 5534E5992948B8C2005D0765 /* Embed Frameworks */, ); buildRules = ( ); @@ -797,22 +920,37 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 5534E667294A0B6C005D0765 /* Translateable.swift in Sources */, + 5534E5B02948FAC5005D0765 /* RequestTranslator.swift in Sources */, + 5534E67B294A2B05005D0765 /* IssuanceRequest+Translateable.swift in Sources */, 55E3370E293FD84700CD2ED7 /* IssuanceRequest.swift in Sources */, 55E3370A293FD3E000CD2ED7 /* IdTokenRequirement.swift in Sources */, 55E3375A2942317100CD2ED7 /* RequestHandler.swift in Sources */, 55E336D8293FCE0500CD2ED7 /* CredentialIssuanceParams.swift in Sources */, 55E336D1293FA6F400CD2ED7 /* VerifiedIdRequirement.swift in Sources */, + 5534E670294A1008005D0765 /* PresentationRequest+Translateable.swift in Sources */, + 5534E679294A286A005D0765 /* SeltAttestedDescriptor+Translateable.swift in Sources */, + 5534E66E294A0F8F005D0765 /* Translating.swift in Sources */, 55E336D6293FA78C00CD2ED7 /* VerifiedIdClaim.swift in Sources */, + 5534E61B294933AB005D0765 /* ContractTranslator.swift in Sources */, 55E337652943749600CD2ED7 /* AsyncWrapper.swift in Sources */, + 5534E5B52948FEB5005D0765 /* RootOfTrust.swift in Sources */, + 55E337B52948B4B000CD2ED7 /* PinRequirement.swift in Sources */, + 5534E669294A0C3F005D0765 /* Translator.swift in Sources */, + 5534E64D294A0888005D0765 /* PresentationDescriptor+Translateable.swift in Sources */, + 55E337B42948B4B000CD2ED7 /* CredentialFormat.swift in Sources */, 55E3370C293FD61E00CD2ED7 /* SelfAttestedClaimRequirement.swift in Sources */, - 55E3375F2942321C00CD2ED7 /* RequestHandling.swift in Sources */, + 55E337B92948B51E00CD2ED7 /* RequestHandling.swift in Sources */, 55E3376829437E3500CD2ED7 /* PresentationServiceable.swift in Sources */, 55E33714293FDEEF00CD2ED7 /* Contract.swift in Sources */, 552E546B293E759300868F47 /* VerifiedIdFlow.swift in Sources */, + 5534E672294A19D5005D0765 /* IdTokenDescriptor+Translateable.swift in Sources */, 55E33711293FDE1400CD2ED7 /* Request.swift in Sources */, - 55E337622942361200CD2ED7 /* PresentationService+PresentationServiceable.swift in Sources */, + 5534E677294A1FA0005D0765 /* AccessTokenDescriptor+Translateable.swift in Sources */, + 55E337BC2948B5FE00CD2ED7 /* PresentationService+PresentationServiceable.swift in Sources */, 55E336D4293FA75300CD2ED7 /* VerifiedId.swift in Sources */, 55E33708293FD25900CD2ED7 /* AccessTokenRequirement.swift in Sources */, + 5534E5B32948FC9C005D0765 /* RequestRepository.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/WalletLibrary/WalletLibrary/Protocols/Extensions/Translateable.swift b/WalletLibrary/WalletLibrary/Protocols/Extensions/Translateable.swift new file mode 100644 index 00000000..6d1ef13f --- /dev/null +++ b/WalletLibrary/WalletLibrary/Protocols/Extensions/Translateable.swift @@ -0,0 +1,35 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +/** + * Errors pertaining to translating one data model to another using the Translateable protocol. + */ +enum TranslationError: Error { + case PropertyNotPresent(property: String, in: T.Type) + case InvalidProperty(property: String, in: T.Type) +} + +/** + * Translate the object that conforms to Translateable to object T. + * This pattern is very similar to the JSONEncoder pattern, and will be tied to a Translator. + */ +protocol Translateable { + associatedtype T + + /// Translates the object that conforms to the protocol to another object. + func translate(using translator: Translating) throws -> T +} + +extension Translateable { + + func getRequiredProperty(property: U?, propertyName: String) throws -> U { + + guard let requiredProperty = property else { + throw TranslationError.PropertyNotPresent(property: propertyName, in: T.self) + } + + return requiredProperty + } +} diff --git a/WalletLibrary/WalletLibrary/Protocols/Utilities/Translating.swift b/WalletLibrary/WalletLibrary/Protocols/Utilities/Translating.swift new file mode 100644 index 00000000..8647c61b --- /dev/null +++ b/WalletLibrary/WalletLibrary/Protocols/Utilities/Translating.swift @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +/// Protocol that defines a Translator used to translate one object to another. +protocol Translating { + func translate(_ object: T) throws -> T.T +} diff --git a/WalletLibrary/WalletLibrary/Utilities/Translator.swift b/WalletLibrary/WalletLibrary/Utilities/Translator.swift new file mode 100644 index 00000000..3fbba237 --- /dev/null +++ b/WalletLibrary/WalletLibrary/Utilities/Translator.swift @@ -0,0 +1,15 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +/** + * Utility Class used to handle data model transformations + */ +struct Translator: Translating { + + /// Translate one object into another. + func translate(_ object: T) throws -> T.T { + return try object.translate(using: self) + } +} From 82c02fb2144ae1fa0953950dfadb5d662f1fab1d Mon Sep 17 00:00:00 2001 From: Sydney Morton Date: Wed, 14 Dec 2022 11:36:24 -0500 Subject: [PATCH 20/38] Add PresentationService Extension --- ...ationService+PresentationServiceable.swift | 7 +- .../Translators/ContractTranslator.swift | 79 +++++++++++++++++++ 2 files changed, 83 insertions(+), 3 deletions(-) rename WalletLibrary/WalletLibrary/Extensions/{ => Services}/PresentationService+PresentationServiceable.swift (80%) create mode 100644 WalletLibrary/WalletLibrary/Requests/Translators/ContractTranslator.swift diff --git a/WalletLibrary/WalletLibrary/Extensions/PresentationService+PresentationServiceable.swift b/WalletLibrary/WalletLibrary/Extensions/Services/PresentationService+PresentationServiceable.swift similarity index 80% rename from WalletLibrary/WalletLibrary/Extensions/PresentationService+PresentationServiceable.swift rename to WalletLibrary/WalletLibrary/Extensions/Services/PresentationService+PresentationServiceable.swift index 893eb7bc..04241b6f 100644 --- a/WalletLibrary/WalletLibrary/Extensions/PresentationService+PresentationServiceable.swift +++ b/WalletLibrary/WalletLibrary/Extensions/Services/PresentationService+PresentationServiceable.swift @@ -7,7 +7,7 @@ import VCServices import VCEntities /** - * An Extension of the VCServices.PresentationService class. + * An extension of the VCServices.PresentationService class. */ extension PresentationService: PresentationServiceable { @@ -18,8 +18,9 @@ extension PresentationService: PresentationServiceable { }() } - /// Sends the presentation response container and if successful, returns void, if unsuccessful, throws an error. - func send(response: PresentationResponseContainer) async throws -> Void { + /// Sends the presentation response container and if successful, returns void, + /// If unsuccessful, throws an error. + func send(response: VCEntities.PresentationResponseContainer) async throws -> Void { let _ = try await AsyncWrapper().wrap { () in self.send(response: response) }() diff --git a/WalletLibrary/WalletLibrary/Requests/Translators/ContractTranslator.swift b/WalletLibrary/WalletLibrary/Requests/Translators/ContractTranslator.swift new file mode 100644 index 00000000..11b10d78 --- /dev/null +++ b/WalletLibrary/WalletLibrary/Requests/Translators/ContractTranslator.swift @@ -0,0 +1,79 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +import VCEntities + +enum ContractTranslatorError: Error { + case NoIdTokenScopePresent + case NoRawValueInContract(contractUrl: String) + case NoVerifiedIdRequirementIdPresent +} + +/** + * + */ +class ContractTranslator { + + init() { } + +// func translate(contract: VCEntities.IssuanceRequest) async throws -> Contract { +// +// guard let rawContract = contract.token.rawValue else { +// throw ContractTranslatorError.NoRawValueInContract(contractUrl: contract.content.id) +// } +// +// let rootOfTrust = getRootOfTrust(contract: contract) +// let verifiedIdRequirements = try getVerifiedIdRequirements(contract: contract.content) +// +// return Contract(rootOfTrust: rootOfTrust, +// verifiedIdRequirements: <#T##[VerifiedIdRequirement]#>, +// idTokenRequirements: <#T##[IdTokenRequirement]#>, +// accessTokenRequirements: <#T##[AccessTokenRequirement]#>, +// selfAttestedClaimRequirements: <#T##[SelfAttestedClaimRequirement]#>, +// raw: rawContract) +// } + + private func getRootOfTrust(contract: VCEntities.IssuanceRequest) -> RootOfTrust { + + switch contract.linkedDomainResult { + case .linkedDomainMissing: + return RootOfTrust(verified: false, source: nil) + case .linkedDomainUnverified(let domainUrl): + return RootOfTrust(verified: false, source: domainUrl) + case .linkedDomainVerified(let domainUrl): + return RootOfTrust(verified: true, source: domainUrl) + } + } + + private func getVerifiedIdRequirements(contract: VCEntities.Contract) throws -> [VerifiedIdRequirement] { + + guard let vpRequirements = contract.input.attestations?.presentations else { + return [] + } + + let verifiedIdRequirements = try vpRequirements.map { vpRequirement in + try translateVerifiedIdRequirement(vpRequirement: vpRequirement) + } + + return verifiedIdRequirements + } + + private func translateVerifiedIdRequirement(vpRequirement: PresentationDescriptor) throws -> VerifiedIdRequirement { + + let acceptedIssuers = vpRequirement.issuers?.compactMap { $0.iss } ?? [] + + var issuanceParams: CredentialIssuanceParams? = nil + if let contracts = vpRequirement.contracts { + issuanceParams = CredentialIssuanceParams(acceptedIssuers: acceptedIssuers, credentialIssuerMetadata: contracts) + } + + return VerifiedIdRequirement(encrypted: vpRequirement.encrypted ?? false, + required: vpRequirement.presentationRequired ?? false, + types: [vpRequirement.credentialType], + acceptedIssuers: acceptedIssuers, + purpose: nil, + credentialIssuanceParams: issuanceParams) + } +} From e7fb0aa4e8fc7e66d6bd037f18ed5f065ee6f719 Mon Sep 17 00:00:00 2001 From: Sydney Morton Date: Wed, 14 Dec 2022 11:40:04 -0500 Subject: [PATCH 21/38] Add Root of Trust Data Model --- .../WalletLibrary/Requests/RootOfTrust.swift | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 WalletLibrary/WalletLibrary/Requests/RootOfTrust.swift diff --git a/WalletLibrary/WalletLibrary/Requests/RootOfTrust.swift b/WalletLibrary/WalletLibrary/Requests/RootOfTrust.swift new file mode 100644 index 00000000..84aee13f --- /dev/null +++ b/WalletLibrary/WalletLibrary/Requests/RootOfTrust.swift @@ -0,0 +1,17 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +/** + * Root of Trust such as Linked Domain Verified for the request. + */ +public struct RootOfTrust { + + /// Whether root of trust is verified or not (for example, if the linked domain check succeeded. + public let verified: Bool + + /// The source of the root of trust (could be the well-known endpoint url or a hub perhaps). + public let source: String? + +} From 779de17d2c9a704aa8b9570d368bb336fcef996f Mon Sep 17 00:00:00 2001 From: Sydney Morton Date: Wed, 14 Dec 2022 11:43:01 -0500 Subject: [PATCH 22/38] Small nits on Requirements --- .../Requirements/AccessTokenRequirement.swift | 10 ++++------ .../Requests/Requirements/CredentialFormat.swift | 4 ++-- .../Requests/Requirements/IdTokenRequirement.swift | 10 ++++------ .../Requests/Requirements/PinRequirement.swift | 6 +++--- .../Requirements/SelfAttestedClaimRequirement.swift | 8 +++----- .../Requirements/VerifiedIdRequirement.swift | 12 +++++------- 6 files changed, 21 insertions(+), 29 deletions(-) diff --git a/WalletLibrary/WalletLibrary/Requests/Requirements/AccessTokenRequirement.swift b/WalletLibrary/WalletLibrary/Requests/Requirements/AccessTokenRequirement.swift index 6accca49..99f6ac95 100644 --- a/WalletLibrary/WalletLibrary/Requests/Requirements/AccessTokenRequirement.swift +++ b/WalletLibrary/WalletLibrary/Requests/Requirements/AccessTokenRequirement.swift @@ -7,20 +7,18 @@ * Information to describe an access token required for a Verified Id issuance flow. */ public struct AccessTokenRequirement { - /// id of the requirement. - let id: String - /// if the requirement should be encrypted. + /// If the requirement should be encrypted. let encrypted: Bool - /// if the requirement is required or not. + /// If the requirement is required or not. public let required: Bool /// The configuration url to get Access Token through an authentication library. public let configuration: String - /// The client id used to get the access token through an authentication library. - public let clientId: String + /// The optional client id used to get the access token through an authentication library. + public let clientId: String? /// The resource id used to get the access token through an authentication library. public let resourceId: String diff --git a/WalletLibrary/WalletLibrary/Requests/Requirements/CredentialFormat.swift b/WalletLibrary/WalletLibrary/Requests/Requirements/CredentialFormat.swift index c1e5ee97..d345fbd0 100644 --- a/WalletLibrary/WalletLibrary/Requests/Requirements/CredentialFormat.swift +++ b/WalletLibrary/WalletLibrary/Requests/Requirements/CredentialFormat.swift @@ -8,9 +8,9 @@ */ public struct CredentialFormat { - /// the format of the verified Id requested such as jwt-vc. + /// The format of the verified Id requested such as jwt-vc. public let format: String - /// types of the requested verified Id. + /// The types of the requested verified Id. public let types: [String] } diff --git a/WalletLibrary/WalletLibrary/Requests/Requirements/IdTokenRequirement.swift b/WalletLibrary/WalletLibrary/Requests/Requirements/IdTokenRequirement.swift index 0cec4d6d..0ffc6678 100644 --- a/WalletLibrary/WalletLibrary/Requests/Requirements/IdTokenRequirement.swift +++ b/WalletLibrary/WalletLibrary/Requests/Requirements/IdTokenRequirement.swift @@ -7,13 +7,11 @@ * Information to describe an id token required for a Verified Id issuance flow. */ public struct IdTokenRequirement { - /// id of the requirement. - let id: String - - /// if the requirement should be encrypted. + + /// If the requirement should be encrypted. let encrypted: Bool - /// if the requirement is required or not. + /// If the requirement is required or not. public let required: Bool /// The configuration url to get id token through an authentication library. @@ -31,6 +29,6 @@ public struct IdTokenRequirement { /// The nonce acts as an extra level of security and is used as an additional property /// within the id token request through an authentication library. The nonce will be placed within /// the id token retrieved and can be used for validation during an issuance request to an issuance service. - public let nonce: String + public internal(set) var nonce: String? = nil } diff --git a/WalletLibrary/WalletLibrary/Requests/Requirements/PinRequirement.swift b/WalletLibrary/WalletLibrary/Requests/Requirements/PinRequirement.swift index 14b50d2d..7b834aab 100644 --- a/WalletLibrary/WalletLibrary/Requests/Requirements/PinRequirement.swift +++ b/WalletLibrary/WalletLibrary/Requests/Requirements/PinRequirement.swift @@ -8,9 +8,9 @@ */ public struct PinRequirement { - /// the length of the pin to display. - public let length: String + /// The length of the pin to display. + public let length: Int - /// the type of the pin such as alphanumeric or numeric. + /// The type of the pin such as alphanumeric or numeric. public let type: String } diff --git a/WalletLibrary/WalletLibrary/Requests/Requirements/SelfAttestedClaimRequirement.swift b/WalletLibrary/WalletLibrary/Requests/Requirements/SelfAttestedClaimRequirement.swift index a3ca6603..d0cea6d2 100644 --- a/WalletLibrary/WalletLibrary/Requests/Requirements/SelfAttestedClaimRequirement.swift +++ b/WalletLibrary/WalletLibrary/Requests/Requirements/SelfAttestedClaimRequirement.swift @@ -7,16 +7,14 @@ * Information to describe a self attested claim required for a Verified Id issuance flow. */ public struct SelfAttestedClaimRequirement { - /// id of the requirement. - let id: String - /// if the requirement should be encrypted. + /// If the requirement should be encrypted. let encrypted: Bool - /// if the requirement is required or not. + /// If the requirement is required or not. public let required: Bool - /// the claim requested. + /// The claim requested. public let claim: String } diff --git a/WalletLibrary/WalletLibrary/Requests/Requirements/VerifiedIdRequirement.swift b/WalletLibrary/WalletLibrary/Requests/Requirements/VerifiedIdRequirement.swift index 3073db4a..4222ede9 100644 --- a/WalletLibrary/WalletLibrary/Requests/Requirements/VerifiedIdRequirement.swift +++ b/WalletLibrary/WalletLibrary/Requests/Requirements/VerifiedIdRequirement.swift @@ -7,25 +7,23 @@ * Information to describe Verified IDs required. */ public struct VerifiedIdRequirement { - /// id of the requirement. - let id: String /// If requirement must be encrypted. let encrypted: Bool - /// if the requirement is required or not. + /// If the requirement is required or not. public let required: Bool - /// the type of the verified Id required. + /// The type of the verified Id required. public let types: [String] - /// accepted issuers for verified Id required. + /// The accepted issuers for verified Id required. public let acceptedIssuers: [String] - /// the purpose for the verified Id, developer can display to the user if desired. + /// The purpose for the verified Id, developer can display to the user if desired. public let purpose: String? - /// optional property for info needed for issuance during presentation flow. + /// An optional property for information needed for issuance during presentation flow. public let credentialIssuanceParams: CredentialIssuanceParams? /// TODO: helper method that returns verified id that match the requirement from a list of verified ids. From b688d9577724b8eee6b88a6b5ee5ce2d4aa174b2 Mon Sep 17 00:00:00 2001 From: Sydney Morton Date: Wed, 14 Dec 2022 11:44:29 -0500 Subject: [PATCH 23/38] Add root of trust to Contract --- WalletLibrary/WalletLibrary/Requests/Contract/Contract.swift | 3 +++ 1 file changed, 3 insertions(+) diff --git a/WalletLibrary/WalletLibrary/Requests/Contract/Contract.swift b/WalletLibrary/WalletLibrary/Requests/Contract/Contract.swift index 5f913a32..75e8ce42 100644 --- a/WalletLibrary/WalletLibrary/Requests/Contract/Contract.swift +++ b/WalletLibrary/WalletLibrary/Requests/Contract/Contract.swift @@ -10,6 +10,9 @@ */ public struct Contract { + /// Root of Trust such as Linked Domain Verified for the request. + public let rootOfTrust: RootOfTrust + /// information to describe Verified IDs required for issuance. public let verifiedIdRequirements: [VerifiedIdRequirement] From b90ad7519ecdf24b138d2b1e595259d4bf0d51d1 Mon Sep 17 00:00:00 2001 From: Sydney Morton Date: Wed, 14 Dec 2022 11:45:00 -0500 Subject: [PATCH 24/38] Make contracts a internally set var --- .../WalletLibrary/Requests/IssuanceRequest.swift | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/WalletLibrary/WalletLibrary/Requests/IssuanceRequest.swift b/WalletLibrary/WalletLibrary/Requests/IssuanceRequest.swift index 5be2eb68..f116f6d2 100644 --- a/WalletLibrary/WalletLibrary/Requests/IssuanceRequest.swift +++ b/WalletLibrary/WalletLibrary/Requests/IssuanceRequest.swift @@ -15,14 +15,17 @@ public struct IssuanceRequest: Request { public let credentialIssuerMetadata: [String] /// A list of contracts that can be used to issue the verified id. - public let contracts: [Contract] + public internal(set) var contracts: [Contract] - /// Optional pin requirements needed to display a pin for the request. + /// The optional pin requirements needed to display a pin for the request. public let pinRequirements: PinRequirement? - /// Credential format data that describes requested verified id accepted formats. - let credentialFormats: [CredentialFormat] + /// The credential format data that describes requested verified id accepted formats. + let credentialFormats: [CredentialFormat]? - /// the state that is sent back with issuance completion response. + /// The state that is sent back with issuance completion response. let state: String + + /// The optional raw representation of the request. + let raw: String? } From d9e4a80d4d4ec522f5aa8d606dba92ec7daa2eb2 Mon Sep 17 00:00:00 2001 From: Sydney Morton Date: Wed, 14 Dec 2022 17:51:00 -0500 Subject: [PATCH 25/38] Add a Mapper for IdTokenDescriptor --- .../WalletLibrary.xcodeproj/project.pbxproj | 90 +++++++++--- .../VCSDK/IdTokenDescriptor+Mappable.swift | 34 +++++ .../{Translateable.swift => Mappable.swift} | 20 +-- .../{Translating.swift => Mapping.swift} | 6 +- .../{Translator.swift => Mapper.swift} | 6 +- .../VCSDK/IdTokenDescriptorMappingTests.swift | 134 ++++++++++++++++++ .../Mocks/MockClaimDescriptor.swift | 16 +++ .../Mocks/MockIdTokenDescriptor.swift | 24 ++++ .../Mocks/MockSelfIssuedClaimDescriptor.swift | 16 +++ 9 files changed, 311 insertions(+), 35 deletions(-) create mode 100644 WalletLibrary/WalletLibrary/Extensions/Mappings/VCSDK/IdTokenDescriptor+Mappable.swift rename WalletLibrary/WalletLibrary/Protocols/Extensions/{Translateable.swift => Mappable.swift} (57%) rename WalletLibrary/WalletLibrary/Protocols/Utilities/{Translating.swift => Mapping.swift} (67%) rename WalletLibrary/WalletLibrary/Utilities/{Translator.swift => Mapper.swift} (76%) create mode 100644 WalletLibrary/WalletLibraryTests/Extensions/Translations/VCSDK/IdTokenDescriptorMappingTests.swift create mode 100644 WalletLibrary/WalletLibraryTests/Mocks/MockClaimDescriptor.swift create mode 100644 WalletLibrary/WalletLibraryTests/Mocks/MockIdTokenDescriptor.swift create mode 100644 WalletLibrary/WalletLibraryTests/Mocks/MockSelfIssuedClaimDescriptor.swift diff --git a/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj b/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj index f412fdde..7339ca3f 100644 --- a/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj +++ b/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj @@ -20,14 +20,19 @@ 5534E5B52948FEB5005D0765 /* RootOfTrust.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E5B42948FEB5005D0765 /* RootOfTrust.swift */; }; 5534E61B294933AB005D0765 /* ContractTranslator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E61A294933AB005D0765 /* ContractTranslator.swift */; }; 5534E64D294A0888005D0765 /* PresentationDescriptor+Translateable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E64C294A0888005D0765 /* PresentationDescriptor+Translateable.swift */; }; - 5534E667294A0B6C005D0765 /* Translateable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E666294A0B6C005D0765 /* Translateable.swift */; }; - 5534E669294A0C3F005D0765 /* Translator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E668294A0C3F005D0765 /* Translator.swift */; }; - 5534E66E294A0F8F005D0765 /* Translating.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E66D294A0F8F005D0765 /* Translating.swift */; }; + 5534E667294A0B6C005D0765 /* Mappable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E666294A0B6C005D0765 /* Mappable.swift */; }; + 5534E669294A0C3F005D0765 /* Mapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E668294A0C3F005D0765 /* Mapper.swift */; }; + 5534E66E294A0F8F005D0765 /* Mapping.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E66D294A0F8F005D0765 /* Mapping.swift */; }; 5534E670294A1008005D0765 /* PresentationRequest+Translateable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E66F294A1008005D0765 /* PresentationRequest+Translateable.swift */; }; - 5534E672294A19D5005D0765 /* IdTokenDescriptor+Translateable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E671294A19D5005D0765 /* IdTokenDescriptor+Translateable.swift */; }; + 5534E672294A19D5005D0765 /* IdTokenDescriptor+Mappable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E671294A19D5005D0765 /* IdTokenDescriptor+Mappable.swift */; }; 5534E677294A1FA0005D0765 /* AccessTokenDescriptor+Translateable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E676294A1FA0005D0765 /* AccessTokenDescriptor+Translateable.swift */; }; 5534E679294A286A005D0765 /* SeltAttestedDescriptor+Translateable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E678294A286A005D0765 /* SeltAttestedDescriptor+Translateable.swift */; }; 5534E67B294A2B05005D0765 /* IssuanceRequest+Translateable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E67A294A2B05005D0765 /* IssuanceRequest+Translateable.swift */; }; + 5534E681294A3978005D0765 /* SelfIssuedDescriptorTranslationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E680294A3978005D0765 /* SelfIssuedDescriptorTranslationTests.swift */; }; + 5534E684294A3EC9005D0765 /* MockSelfIssuedClaimDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E683294A3EC9005D0765 /* MockSelfIssuedClaimDescriptor.swift */; }; + 5534E686294A3F19005D0765 /* MockClaimDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E685294A3F19005D0765 /* MockClaimDescriptor.swift */; }; + 5534E688294A5F16005D0765 /* IdTokenDescriptorMappingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E687294A5F16005D0765 /* IdTokenDescriptorMappingTests.swift */; }; + 5534E68A294A5F7B005D0765 /* MockIdTokenDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E689294A5F7B005D0765 /* MockIdTokenDescriptor.swift */; }; 55E33684293E7B6600CD2ED7 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55E33679293E7B5F00CD2ED7 /* PromiseKit.framework */; }; 55E336D1293FA6F400CD2ED7 /* VerifiedIdRequirement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E336D0293FA6F400CD2ED7 /* VerifiedIdRequirement.swift */; }; 55E336D4293FA75300CD2ED7 /* VerifiedId.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E336D3293FA75300CD2ED7 /* VerifiedId.swift */; }; @@ -237,14 +242,19 @@ 5534E5B42948FEB5005D0765 /* RootOfTrust.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootOfTrust.swift; sourceTree = ""; }; 5534E61A294933AB005D0765 /* ContractTranslator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContractTranslator.swift; sourceTree = ""; }; 5534E64C294A0888005D0765 /* PresentationDescriptor+Translateable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PresentationDescriptor+Translateable.swift"; sourceTree = ""; }; - 5534E666294A0B6C005D0765 /* Translateable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Translateable.swift; sourceTree = ""; }; - 5534E668294A0C3F005D0765 /* Translator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Translator.swift; sourceTree = ""; }; - 5534E66D294A0F8F005D0765 /* Translating.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Translating.swift; sourceTree = ""; }; + 5534E666294A0B6C005D0765 /* Mappable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Mappable.swift; sourceTree = ""; }; + 5534E668294A0C3F005D0765 /* Mapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Mapper.swift; sourceTree = ""; }; + 5534E66D294A0F8F005D0765 /* Mapping.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Mapping.swift; sourceTree = ""; }; 5534E66F294A1008005D0765 /* PresentationRequest+Translateable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PresentationRequest+Translateable.swift"; sourceTree = ""; }; - 5534E671294A19D5005D0765 /* IdTokenDescriptor+Translateable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "IdTokenDescriptor+Translateable.swift"; sourceTree = ""; }; + 5534E671294A19D5005D0765 /* IdTokenDescriptor+Mappable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "IdTokenDescriptor+Mappable.swift"; sourceTree = ""; }; 5534E676294A1FA0005D0765 /* AccessTokenDescriptor+Translateable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AccessTokenDescriptor+Translateable.swift"; sourceTree = ""; }; 5534E678294A286A005D0765 /* SeltAttestedDescriptor+Translateable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SeltAttestedDescriptor+Translateable.swift"; sourceTree = ""; }; 5534E67A294A2B05005D0765 /* IssuanceRequest+Translateable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "IssuanceRequest+Translateable.swift"; sourceTree = ""; }; + 5534E680294A3978005D0765 /* SelfIssuedDescriptorTranslationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelfIssuedDescriptorTranslationTests.swift; sourceTree = ""; }; + 5534E683294A3EC9005D0765 /* MockSelfIssuedClaimDescriptor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockSelfIssuedClaimDescriptor.swift; sourceTree = ""; }; + 5534E685294A3F19005D0765 /* MockClaimDescriptor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockClaimDescriptor.swift; sourceTree = ""; }; + 5534E687294A5F16005D0765 /* IdTokenDescriptorMappingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IdTokenDescriptorMappingTests.swift; sourceTree = ""; }; + 5534E689294A5F7B005D0765 /* MockIdTokenDescriptor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockIdTokenDescriptor.swift; sourceTree = ""; }; 55E33666293E7B5000CD2ED7 /* PMKFoundation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = PMKFoundation.xcodeproj; path = Foundation/PMKFoundation.xcodeproj; sourceTree = ""; }; 55E3366F293E7B5F00CD2ED7 /* PromiseKit.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = PromiseKit.xcodeproj; path = PromiseKit/PromiseKit.xcodeproj; sourceTree = ""; }; 55E33685293E7B7D00CD2ED7 /* Secp256k1.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Secp256k1.xcodeproj; path = Secp256k1/Secp256k1.xcodeproj; sourceTree = ""; }; @@ -328,6 +338,8 @@ 552E509E293E6AB200868F47 /* WalletLibraryTests */ = { isa = PBXGroup; children = ( + 5534E682294A3EB3005D0765 /* Mocks */, + 5534E67C294A392F005D0765 /* Extensions */, 55E3376929478C3300CD2ED7 /* Utilities */, 552E509F293E6AB200868F47 /* VerifiedIdFlowTests.swift */, ); @@ -389,12 +401,12 @@ path = Repositories; sourceTree = ""; }; - 5534E663294A0B28005D0765 /* Translations */ = { + 5534E663294A0B28005D0765 /* Mappings */ = { isa = PBXGroup; children = ( 5534E673294A1A00005D0765 /* VCSDK */, ); - path = Translations; + path = Mappings; sourceTree = ""; }; 5534E664294A0B3E005D0765 /* Services */ = { @@ -408,7 +420,7 @@ 5534E665294A0B55005D0765 /* Extensions */ = { isa = PBXGroup; children = ( - 5534E666294A0B6C005D0765 /* Translateable.swift */, + 5534E666294A0B6C005D0765 /* Mappable.swift */, ); path = Extensions; sourceTree = ""; @@ -416,7 +428,7 @@ 5534E66C294A0F76005D0765 /* Utilities */ = { isa = PBXGroup; children = ( - 5534E66D294A0F8F005D0765 /* Translating.swift */, + 5534E66D294A0F8F005D0765 /* Mapping.swift */, ); path = Utilities; sourceTree = ""; @@ -426,7 +438,7 @@ children = ( 5534E676294A1FA0005D0765 /* AccessTokenDescriptor+Translateable.swift */, 5534E67A294A2B05005D0765 /* IssuanceRequest+Translateable.swift */, - 5534E671294A19D5005D0765 /* IdTokenDescriptor+Translateable.swift */, + 5534E671294A19D5005D0765 /* IdTokenDescriptor+Mappable.swift */, 5534E64C294A0888005D0765 /* PresentationDescriptor+Translateable.swift */, 5534E66F294A1008005D0765 /* PresentationRequest+Translateable.swift */, 5534E678294A286A005D0765 /* SeltAttestedDescriptor+Translateable.swift */, @@ -434,6 +446,41 @@ path = VCSDK; sourceTree = ""; }; + 5534E67C294A392F005D0765 /* Extensions */ = { + isa = PBXGroup; + children = ( + 5534E67D294A3937005D0765 /* Translations */, + ); + path = Extensions; + sourceTree = ""; + }; + 5534E67D294A3937005D0765 /* Translations */ = { + isa = PBXGroup; + children = ( + 5534E67E294A3943005D0765 /* VCSDK */, + ); + path = Translations; + sourceTree = ""; + }; + 5534E67E294A3943005D0765 /* VCSDK */ = { + isa = PBXGroup; + children = ( + 5534E680294A3978005D0765 /* SelfIssuedDescriptorTranslationTests.swift */, + 5534E687294A5F16005D0765 /* IdTokenDescriptorMappingTests.swift */, + ); + path = VCSDK; + sourceTree = ""; + }; + 5534E682294A3EB3005D0765 /* Mocks */ = { + isa = PBXGroup; + children = ( + 5534E685294A3F19005D0765 /* MockClaimDescriptor.swift */, + 5534E689294A5F7B005D0765 /* MockIdTokenDescriptor.swift */, + 5534E683294A3EC9005D0765 /* MockSelfIssuedClaimDescriptor.swift */, + ); + path = Mocks; + sourceTree = ""; + }; 55E33667293E7B5000CD2ED7 /* Products */ = { isa = PBXGroup; children = ( @@ -578,7 +625,7 @@ isa = PBXGroup; children = ( 55E337642943749600CD2ED7 /* AsyncWrapper.swift */, - 5534E668294A0C3F005D0765 /* Translator.swift */, + 5534E668294A0C3F005D0765 /* Mapper.swift */, ); path = Utilities; sourceTree = ""; @@ -620,7 +667,7 @@ isa = PBXGroup; children = ( 5534E664294A0B3E005D0765 /* Services */, - 5534E663294A0B28005D0765 /* Translations */, + 5534E663294A0B28005D0765 /* Mappings */, ); path = Extensions; sourceTree = ""; @@ -920,7 +967,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 5534E667294A0B6C005D0765 /* Translateable.swift in Sources */, + 5534E667294A0B6C005D0765 /* Mappable.swift in Sources */, 5534E5B02948FAC5005D0765 /* RequestTranslator.swift in Sources */, 5534E67B294A2B05005D0765 /* IssuanceRequest+Translateable.swift in Sources */, 55E3370E293FD84700CD2ED7 /* IssuanceRequest.swift in Sources */, @@ -930,13 +977,13 @@ 55E336D1293FA6F400CD2ED7 /* VerifiedIdRequirement.swift in Sources */, 5534E670294A1008005D0765 /* PresentationRequest+Translateable.swift in Sources */, 5534E679294A286A005D0765 /* SeltAttestedDescriptor+Translateable.swift in Sources */, - 5534E66E294A0F8F005D0765 /* Translating.swift in Sources */, + 5534E66E294A0F8F005D0765 /* Mapping.swift in Sources */, 55E336D6293FA78C00CD2ED7 /* VerifiedIdClaim.swift in Sources */, 5534E61B294933AB005D0765 /* ContractTranslator.swift in Sources */, 55E337652943749600CD2ED7 /* AsyncWrapper.swift in Sources */, 5534E5B52948FEB5005D0765 /* RootOfTrust.swift in Sources */, 55E337B52948B4B000CD2ED7 /* PinRequirement.swift in Sources */, - 5534E669294A0C3F005D0765 /* Translator.swift in Sources */, + 5534E669294A0C3F005D0765 /* Mapper.swift in Sources */, 5534E64D294A0888005D0765 /* PresentationDescriptor+Translateable.swift in Sources */, 55E337B42948B4B000CD2ED7 /* CredentialFormat.swift in Sources */, 55E3370C293FD61E00CD2ED7 /* SelfAttestedClaimRequirement.swift in Sources */, @@ -944,7 +991,7 @@ 55E3376829437E3500CD2ED7 /* PresentationServiceable.swift in Sources */, 55E33714293FDEEF00CD2ED7 /* Contract.swift in Sources */, 552E546B293E759300868F47 /* VerifiedIdFlow.swift in Sources */, - 5534E672294A19D5005D0765 /* IdTokenDescriptor+Translateable.swift in Sources */, + 5534E672294A19D5005D0765 /* IdTokenDescriptor+Mappable.swift in Sources */, 55E33711293FDE1400CD2ED7 /* Request.swift in Sources */, 5534E677294A1FA0005D0765 /* AccessTokenDescriptor+Translateable.swift in Sources */, 55E337BC2948B5FE00CD2ED7 /* PresentationService+PresentationServiceable.swift in Sources */, @@ -959,7 +1006,12 @@ buildActionMask = 2147483647; files = ( 55E3376B29478C5000CD2ED7 /* AsyncWrapperTests.swift in Sources */, + 5534E684294A3EC9005D0765 /* MockSelfIssuedClaimDescriptor.swift in Sources */, + 5534E68A294A5F7B005D0765 /* MockIdTokenDescriptor.swift in Sources */, 552E50A0293E6AB200868F47 /* VerifiedIdFlowTests.swift in Sources */, + 5534E681294A3978005D0765 /* SelfIssuedDescriptorTranslationTests.swift in Sources */, + 5534E688294A5F16005D0765 /* IdTokenDescriptorMappingTests.swift in Sources */, + 5534E686294A3F19005D0765 /* MockClaimDescriptor.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/WalletLibrary/WalletLibrary/Extensions/Mappings/VCSDK/IdTokenDescriptor+Mappable.swift b/WalletLibrary/WalletLibrary/Extensions/Mappings/VCSDK/IdTokenDescriptor+Mappable.swift new file mode 100644 index 00000000..b96d24b8 --- /dev/null +++ b/WalletLibrary/WalletLibrary/Extensions/Mappings/VCSDK/IdTokenDescriptor+Mappable.swift @@ -0,0 +1,34 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +import VCEntities + +/** + * An Extension of the VCEntities.IdTokenDescriptor class to be able + * to map IdTokenDescriptor to IdTokenRequirement. + */ +extension VCEntities.IdTokenDescriptor: Mappable { + typealias T = IdTokenRequirement + + func map(using mapper: Mapping) throws -> IdTokenRequirement { + + guard let configuration = URL(string: configuration) else { + throw MappingError.InvalidProperty(property:"configuration", + in: String(describing: IdTokenDescriptor.self)) + } + + let redirectUri = try getRequiredProperty(property: redirectURI, propertyName: "redirectURI") + let scope = try getRequiredProperty(property: scope, propertyName: "scope") + + return IdTokenRequirement(encrypted: encrypted ?? false, + required: idTokenRequired ?? false, + configuration: configuration, + clientId: clientID, + redirectUri: redirectUri, + scope: scope, + nonce: nil) + } + +} diff --git a/WalletLibrary/WalletLibrary/Protocols/Extensions/Translateable.swift b/WalletLibrary/WalletLibrary/Protocols/Extensions/Mappable.swift similarity index 57% rename from WalletLibrary/WalletLibrary/Protocols/Extensions/Translateable.swift rename to WalletLibrary/WalletLibrary/Protocols/Extensions/Mappable.swift index 6d1ef13f..1e224e3d 100644 --- a/WalletLibrary/WalletLibrary/Protocols/Extensions/Translateable.swift +++ b/WalletLibrary/WalletLibrary/Protocols/Extensions/Mappable.swift @@ -4,30 +4,30 @@ *--------------------------------------------------------------------------------------------*/ /** - * Errors pertaining to translating one data model to another using the Translateable protocol. + * Errors pertaining to Mapping one data model to another using the Mappable protocol. */ -enum TranslationError: Error { - case PropertyNotPresent(property: String, in: T.Type) - case InvalidProperty(property: String, in: T.Type) +enum MappingError: Error, Equatable { + case PropertyNotPresent(property: String, in: String) + case InvalidProperty(property: String, in: String) } /** - * Translate the object that conforms to Translateable to object T. - * This pattern is very similar to the JSONEncoder pattern, and will be tied to a Translator. + * Translate the object that conforms to Mappable to object T. + * This pattern is very similar to the JSONEncoder pattern, and will be tied to a Mapper. */ -protocol Translateable { +protocol Mappable { associatedtype T /// Translates the object that conforms to the protocol to another object. - func translate(using translator: Translating) throws -> T + func map(using mapper: Mapping) throws -> T } -extension Translateable { +extension Mappable { func getRequiredProperty(property: U?, propertyName: String) throws -> U { guard let requiredProperty = property else { - throw TranslationError.PropertyNotPresent(property: propertyName, in: T.self) + throw MappingError.PropertyNotPresent(property: propertyName, in: String(describing: Self.self)) } return requiredProperty diff --git a/WalletLibrary/WalletLibrary/Protocols/Utilities/Translating.swift b/WalletLibrary/WalletLibrary/Protocols/Utilities/Mapping.swift similarity index 67% rename from WalletLibrary/WalletLibrary/Protocols/Utilities/Translating.swift rename to WalletLibrary/WalletLibrary/Protocols/Utilities/Mapping.swift index 8647c61b..58b2c6c1 100644 --- a/WalletLibrary/WalletLibrary/Protocols/Utilities/Translating.swift +++ b/WalletLibrary/WalletLibrary/Protocols/Utilities/Mapping.swift @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -/// Protocol that defines a Translator used to translate one object to another. -protocol Translating { - func translate(_ object: T) throws -> T.T +/// Protocol that defines a Mapper used to map one object to another. +protocol Mapping { + func map(_ object: T) throws -> T.T } diff --git a/WalletLibrary/WalletLibrary/Utilities/Translator.swift b/WalletLibrary/WalletLibrary/Utilities/Mapper.swift similarity index 76% rename from WalletLibrary/WalletLibrary/Utilities/Translator.swift rename to WalletLibrary/WalletLibrary/Utilities/Mapper.swift index 3fbba237..871b482a 100644 --- a/WalletLibrary/WalletLibrary/Utilities/Translator.swift +++ b/WalletLibrary/WalletLibrary/Utilities/Mapper.swift @@ -6,10 +6,10 @@ /** * Utility Class used to handle data model transformations */ -struct Translator: Translating { +struct Mapper: Mapping { /// Translate one object into another. - func translate(_ object: T) throws -> T.T { - return try object.translate(using: self) + func map(_ object: T) throws -> T.T { + return try object.map(using: self) } } diff --git a/WalletLibrary/WalletLibraryTests/Extensions/Translations/VCSDK/IdTokenDescriptorMappingTests.swift b/WalletLibrary/WalletLibraryTests/Extensions/Translations/VCSDK/IdTokenDescriptorMappingTests.swift new file mode 100644 index 00000000..36b6e928 --- /dev/null +++ b/WalletLibrary/WalletLibraryTests/Extensions/Translations/VCSDK/IdTokenDescriptorMappingTests.swift @@ -0,0 +1,134 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +import XCTest +import VCEntities +@testable import WalletLibrary + +class IdTokenDescriptorTranslationTests: XCTestCase { + + let mapper = Mapper() + + let encoder = JSONEncoder() + + let decoder = JSONDecoder() + + let expectedConfiguration = "https://test.com" + let expectedClientId = "clientId12" + let expectedRedirectUri = "redirectUri645" + let expectedScope = "scope234" + + func testSuccessfulTranslation() throws { + let (input, expectedResult) = try setUpInput(encrypted: false, required: false) + let actualResult = try mapper.map(input) + XCTAssertEqual(actualResult, expectedResult) + } + + func testTranslationWithEncryptedAsTrueValue() throws { + let (input, expectedResult) = try setUpInput(encrypted: true, required: false) + let actualResult = try mapper.map(input) + XCTAssertEqual(actualResult, expectedResult) + } + + func testTranslationWithEncryptedAsNilValue() throws { + let (input, expectedResult) = try setUpInput(encrypted: nil, required: false) + let actualResult = try mapper.map(input) + XCTAssertEqual(actualResult, expectedResult) + } + + func testTranslationWithRequiredAsTrueValue() throws { + let (input, expectedResult) = try setUpInput(encrypted: false, required: true) + let actualResult = try mapper.map(input) + XCTAssertEqual(actualResult, expectedResult) + } + + func testTranslationWithRequiredAsNilValue() throws { + let (input, expectedResult) = try setUpInput(encrypted: false, required: nil) + let actualResult = try mapper.map(input) + XCTAssertEqual(actualResult, expectedResult) + } + + func testTranslationWithNoRedirectUrlPresentError() throws { + let mockedInput = MockIdTokenDescriptor(encrypted: false, + claims: [], + idTokenRequired: false, + configuration: expectedConfiguration, + clientID: expectedClientId, + redirectURI: nil, + scope: expectedScope) + + let input = try setUpInput(mockedInput: mockedInput) + + XCTAssertThrowsError(try mapper.map(input)) { error in + XCTAssert(error is MappingError) + XCTAssertEqual(error as? MappingError, + .PropertyNotPresent(property: "redirectURI", in: String(describing: IdTokenDescriptor.self))) + } + } + + func testTranslationWithNoClientIdPresentError() throws { + let mockedInput = MockIdTokenDescriptor(encrypted: false, + claims: [], + idTokenRequired: false, + configuration: "$|[%=", + clientID: expectedConfiguration, + redirectURI: expectedRedirectUri, + scope: expectedScope) + + let input = try setUpInput(mockedInput: mockedInput) + + XCTAssertThrowsError(try mapper.map(input)) { error in + XCTAssert(error is MappingError) + XCTAssertEqual(error as? MappingError, + .InvalidProperty(property: "configuration", in: String(describing: IdTokenDescriptor.self))) + } + } + + func testTranslationWithNoScopePresentError() throws { + let mockedInput = MockIdTokenDescriptor(encrypted: false, + claims: [], + idTokenRequired: false, + configuration: expectedConfiguration, + clientID: expectedClientId, + redirectURI: expectedRedirectUri, + scope: nil) + + let input = try setUpInput(mockedInput: mockedInput) + + XCTAssertThrowsError(try mapper.map(input)) { error in + XCTAssert(error is MappingError) + XCTAssertEqual(error as? MappingError, + .PropertyNotPresent(property: "scope", in: String(describing: IdTokenDescriptor.self))) + } + } + + private func setUpInput(encrypted: Bool?, required: Bool?) throws -> (IdTokenDescriptor, IdTokenRequirement) { + let mockedInput = MockIdTokenDescriptor(encrypted: encrypted, + claims: [], + idTokenRequired: required, + configuration: expectedConfiguration, + clientID: expectedClientId, + redirectURI: expectedRedirectUri, + scope: expectedScope) + + let expectedResult = IdTokenRequirement(encrypted: encrypted ?? false, + required: required ?? false, + configuration: URL(string: expectedConfiguration)!, + clientId: expectedClientId, + redirectUri: expectedRedirectUri, + scope: expectedScope) + + let input = try setUpInput(mockedInput: mockedInput) + return (input, expectedResult) + } + + private func setUpInput(mockedInput: MockIdTokenDescriptor) throws -> IdTokenDescriptor { + let encodedData = try encoder.encode(mockedInput) + let expectedInput = try decoder.decode(IdTokenDescriptor.self, from: encodedData) + return expectedInput + } + + +} diff --git a/WalletLibrary/WalletLibraryTests/Mocks/MockClaimDescriptor.swift b/WalletLibrary/WalletLibraryTests/Mocks/MockClaimDescriptor.swift new file mode 100644 index 00000000..35675340 --- /dev/null +++ b/WalletLibrary/WalletLibraryTests/Mocks/MockClaimDescriptor.swift @@ -0,0 +1,16 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +struct MockClaimDescriptor: Codable, Equatable { + let claim: String + let claimRequired: Bool? + let indexed: Bool? + + enum CodingKeys: String, CodingKey { + case claim + case claimRequired = "required" + case indexed + } +} diff --git a/WalletLibrary/WalletLibraryTests/Mocks/MockIdTokenDescriptor.swift b/WalletLibrary/WalletLibraryTests/Mocks/MockIdTokenDescriptor.swift new file mode 100644 index 00000000..8a8a4c2b --- /dev/null +++ b/WalletLibrary/WalletLibraryTests/Mocks/MockIdTokenDescriptor.swift @@ -0,0 +1,24 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +struct MockIdTokenDescriptor: Codable, Equatable { + + let encrypted: Bool? + let claims: [MockClaimDescriptor] + let idTokenRequired: Bool? + let configuration: String + let clientID: String + let redirectURI: String? + let scope: String? + + enum CodingKeys: String, CodingKey { + case encrypted, claims + case idTokenRequired = "required" + case configuration + case clientID = "client_id" + case redirectURI = "redirect_uri" + case scope + } +} diff --git a/WalletLibrary/WalletLibraryTests/Mocks/MockSelfIssuedClaimDescriptor.swift b/WalletLibrary/WalletLibraryTests/Mocks/MockSelfIssuedClaimDescriptor.swift new file mode 100644 index 00000000..7f301daf --- /dev/null +++ b/WalletLibrary/WalletLibraryTests/Mocks/MockSelfIssuedClaimDescriptor.swift @@ -0,0 +1,16 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +struct MockSelfIssuedClaimsDescriptor: Codable, Equatable { + + let encrypted: Bool? + let claims: [MockClaimDescriptor]? + let selfIssuedRequired: Bool? + + enum CodingKeys: String, CodingKey { + case encrypted, claims + case selfIssuedRequired = "required" + } +} From 7714ffe2ce9b576efc5135ccc1089a42a2a20010 Mon Sep 17 00:00:00 2001 From: Sydney Morton Date: Wed, 14 Dec 2022 18:13:52 -0500 Subject: [PATCH 26/38] Add mapping of AccessTokenDescriptor to AccessTokenRequirement --- .../WalletLibrary.xcodeproj/project.pbxproj | 24 ++- .../AccessTokenDescriptor+Mappable.swift | 30 ++++ .../Protocols/Extensions/Mappable.swift | 6 +- .../Requirements/AccessTokenRequirement.swift | 2 +- .../Requirements/IdTokenRequirement.swift | 2 +- .../SelfAttestedClaimRequirement.swift | 2 +- .../AccessTokenDescriptorMappingTests.swift | 140 ++++++++++++++++++ .../VCSDK/IdTokenDescriptorMappingTests.swift | 2 +- .../Mocks/MockAccessTokenDescriptor.swift | 14 ++ 9 files changed, 207 insertions(+), 15 deletions(-) create mode 100644 WalletLibrary/WalletLibrary/Extensions/Mappings/VCSDK/AccessTokenDescriptor+Mappable.swift create mode 100644 WalletLibrary/WalletLibraryTests/Extensions/Translations/VCSDK/AccessTokenDescriptorMappingTests.swift create mode 100644 WalletLibrary/WalletLibraryTests/Mocks/MockAccessTokenDescriptor.swift diff --git a/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj b/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj index 7339ca3f..71293339 100644 --- a/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj +++ b/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj @@ -25,14 +25,16 @@ 5534E66E294A0F8F005D0765 /* Mapping.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E66D294A0F8F005D0765 /* Mapping.swift */; }; 5534E670294A1008005D0765 /* PresentationRequest+Translateable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E66F294A1008005D0765 /* PresentationRequest+Translateable.swift */; }; 5534E672294A19D5005D0765 /* IdTokenDescriptor+Mappable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E671294A19D5005D0765 /* IdTokenDescriptor+Mappable.swift */; }; - 5534E677294A1FA0005D0765 /* AccessTokenDescriptor+Translateable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E676294A1FA0005D0765 /* AccessTokenDescriptor+Translateable.swift */; }; + 5534E677294A1FA0005D0765 /* AccessTokenDescriptor+Mappable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E676294A1FA0005D0765 /* AccessTokenDescriptor+Mappable.swift */; }; 5534E679294A286A005D0765 /* SeltAttestedDescriptor+Translateable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E678294A286A005D0765 /* SeltAttestedDescriptor+Translateable.swift */; }; 5534E67B294A2B05005D0765 /* IssuanceRequest+Translateable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E67A294A2B05005D0765 /* IssuanceRequest+Translateable.swift */; }; - 5534E681294A3978005D0765 /* SelfIssuedDescriptorTranslationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E680294A3978005D0765 /* SelfIssuedDescriptorTranslationTests.swift */; }; + 5534E681294A3978005D0765 /* SelfIssuedDescriptorMappingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E680294A3978005D0765 /* SelfIssuedDescriptorMappingTests.swift */; }; 5534E684294A3EC9005D0765 /* MockSelfIssuedClaimDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E683294A3EC9005D0765 /* MockSelfIssuedClaimDescriptor.swift */; }; 5534E686294A3F19005D0765 /* MockClaimDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E685294A3F19005D0765 /* MockClaimDescriptor.swift */; }; 5534E688294A5F16005D0765 /* IdTokenDescriptorMappingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E687294A5F16005D0765 /* IdTokenDescriptorMappingTests.swift */; }; 5534E68A294A5F7B005D0765 /* MockIdTokenDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E689294A5F7B005D0765 /* MockIdTokenDescriptor.swift */; }; + 5534E68C294A8B8F005D0765 /* AccessTokenDescriptorMappingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E68B294A8B8F005D0765 /* AccessTokenDescriptorMappingTests.swift */; }; + 5534E68E294A8BC4005D0765 /* MockAccessTokenDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E68D294A8BC3005D0765 /* MockAccessTokenDescriptor.swift */; }; 55E33684293E7B6600CD2ED7 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55E33679293E7B5F00CD2ED7 /* PromiseKit.framework */; }; 55E336D1293FA6F400CD2ED7 /* VerifiedIdRequirement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E336D0293FA6F400CD2ED7 /* VerifiedIdRequirement.swift */; }; 55E336D4293FA75300CD2ED7 /* VerifiedId.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E336D3293FA75300CD2ED7 /* VerifiedId.swift */; }; @@ -247,14 +249,16 @@ 5534E66D294A0F8F005D0765 /* Mapping.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Mapping.swift; sourceTree = ""; }; 5534E66F294A1008005D0765 /* PresentationRequest+Translateable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PresentationRequest+Translateable.swift"; sourceTree = ""; }; 5534E671294A19D5005D0765 /* IdTokenDescriptor+Mappable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "IdTokenDescriptor+Mappable.swift"; sourceTree = ""; }; - 5534E676294A1FA0005D0765 /* AccessTokenDescriptor+Translateable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AccessTokenDescriptor+Translateable.swift"; sourceTree = ""; }; + 5534E676294A1FA0005D0765 /* AccessTokenDescriptor+Mappable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AccessTokenDescriptor+Mappable.swift"; sourceTree = ""; }; 5534E678294A286A005D0765 /* SeltAttestedDescriptor+Translateable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SeltAttestedDescriptor+Translateable.swift"; sourceTree = ""; }; 5534E67A294A2B05005D0765 /* IssuanceRequest+Translateable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "IssuanceRequest+Translateable.swift"; sourceTree = ""; }; - 5534E680294A3978005D0765 /* SelfIssuedDescriptorTranslationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelfIssuedDescriptorTranslationTests.swift; sourceTree = ""; }; + 5534E680294A3978005D0765 /* SelfIssuedDescriptorMappingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelfIssuedDescriptorMappingTests.swift; sourceTree = ""; }; 5534E683294A3EC9005D0765 /* MockSelfIssuedClaimDescriptor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockSelfIssuedClaimDescriptor.swift; sourceTree = ""; }; 5534E685294A3F19005D0765 /* MockClaimDescriptor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockClaimDescriptor.swift; sourceTree = ""; }; 5534E687294A5F16005D0765 /* IdTokenDescriptorMappingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IdTokenDescriptorMappingTests.swift; sourceTree = ""; }; 5534E689294A5F7B005D0765 /* MockIdTokenDescriptor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockIdTokenDescriptor.swift; sourceTree = ""; }; + 5534E68B294A8B8F005D0765 /* AccessTokenDescriptorMappingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessTokenDescriptorMappingTests.swift; sourceTree = ""; }; + 5534E68D294A8BC3005D0765 /* MockAccessTokenDescriptor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockAccessTokenDescriptor.swift; sourceTree = ""; }; 55E33666293E7B5000CD2ED7 /* PMKFoundation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = PMKFoundation.xcodeproj; path = Foundation/PMKFoundation.xcodeproj; sourceTree = ""; }; 55E3366F293E7B5F00CD2ED7 /* PromiseKit.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = PromiseKit.xcodeproj; path = PromiseKit/PromiseKit.xcodeproj; sourceTree = ""; }; 55E33685293E7B7D00CD2ED7 /* Secp256k1.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Secp256k1.xcodeproj; path = Secp256k1/Secp256k1.xcodeproj; sourceTree = ""; }; @@ -436,7 +440,7 @@ 5534E673294A1A00005D0765 /* VCSDK */ = { isa = PBXGroup; children = ( - 5534E676294A1FA0005D0765 /* AccessTokenDescriptor+Translateable.swift */, + 5534E676294A1FA0005D0765 /* AccessTokenDescriptor+Mappable.swift */, 5534E67A294A2B05005D0765 /* IssuanceRequest+Translateable.swift */, 5534E671294A19D5005D0765 /* IdTokenDescriptor+Mappable.swift */, 5534E64C294A0888005D0765 /* PresentationDescriptor+Translateable.swift */, @@ -465,7 +469,8 @@ 5534E67E294A3943005D0765 /* VCSDK */ = { isa = PBXGroup; children = ( - 5534E680294A3978005D0765 /* SelfIssuedDescriptorTranslationTests.swift */, + 5534E68B294A8B8F005D0765 /* AccessTokenDescriptorMappingTests.swift */, + 5534E680294A3978005D0765 /* SelfIssuedDescriptorMappingTests.swift */, 5534E687294A5F16005D0765 /* IdTokenDescriptorMappingTests.swift */, ); path = VCSDK; @@ -474,6 +479,7 @@ 5534E682294A3EB3005D0765 /* Mocks */ = { isa = PBXGroup; children = ( + 5534E68D294A8BC3005D0765 /* MockAccessTokenDescriptor.swift */, 5534E685294A3F19005D0765 /* MockClaimDescriptor.swift */, 5534E689294A5F7B005D0765 /* MockIdTokenDescriptor.swift */, 5534E683294A3EC9005D0765 /* MockSelfIssuedClaimDescriptor.swift */, @@ -993,7 +999,7 @@ 552E546B293E759300868F47 /* VerifiedIdFlow.swift in Sources */, 5534E672294A19D5005D0765 /* IdTokenDescriptor+Mappable.swift in Sources */, 55E33711293FDE1400CD2ED7 /* Request.swift in Sources */, - 5534E677294A1FA0005D0765 /* AccessTokenDescriptor+Translateable.swift in Sources */, + 5534E677294A1FA0005D0765 /* AccessTokenDescriptor+Mappable.swift in Sources */, 55E337BC2948B5FE00CD2ED7 /* PresentationService+PresentationServiceable.swift in Sources */, 55E336D4293FA75300CD2ED7 /* VerifiedId.swift in Sources */, 55E33708293FD25900CD2ED7 /* AccessTokenRequirement.swift in Sources */, @@ -1008,8 +1014,10 @@ 55E3376B29478C5000CD2ED7 /* AsyncWrapperTests.swift in Sources */, 5534E684294A3EC9005D0765 /* MockSelfIssuedClaimDescriptor.swift in Sources */, 5534E68A294A5F7B005D0765 /* MockIdTokenDescriptor.swift in Sources */, + 5534E68C294A8B8F005D0765 /* AccessTokenDescriptorMappingTests.swift in Sources */, 552E50A0293E6AB200868F47 /* VerifiedIdFlowTests.swift in Sources */, - 5534E681294A3978005D0765 /* SelfIssuedDescriptorTranslationTests.swift in Sources */, + 5534E681294A3978005D0765 /* SelfIssuedDescriptorMappingTests.swift in Sources */, + 5534E68E294A8BC4005D0765 /* MockAccessTokenDescriptor.swift in Sources */, 5534E688294A5F16005D0765 /* IdTokenDescriptorMappingTests.swift in Sources */, 5534E686294A3F19005D0765 /* MockClaimDescriptor.swift in Sources */, ); diff --git a/WalletLibrary/WalletLibrary/Extensions/Mappings/VCSDK/AccessTokenDescriptor+Mappable.swift b/WalletLibrary/WalletLibrary/Extensions/Mappings/VCSDK/AccessTokenDescriptor+Mappable.swift new file mode 100644 index 00000000..1a7cac94 --- /dev/null +++ b/WalletLibrary/WalletLibrary/Extensions/Mappings/VCSDK/AccessTokenDescriptor+Mappable.swift @@ -0,0 +1,30 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +import VCEntities + +/** + * An Extension of the VCEntities.AccessTokenDescriptor class to be able + * to map AccessTokenDescriptor to AccessTokenRequirement. + */ +extension VCEntities.AccessTokenDescriptor: Mappable { + + typealias T = AccessTokenRequirement + + func map(using mapper: Mapping) throws -> AccessTokenRequirement { + + let configuration = try getRequiredProperty(property: configuration, propertyName: "configuration") + let resourceId = try getRequiredProperty(property: resourceId, propertyName: "resourceId") + let scope = try getRequiredProperty(property: oboScope, propertyName: "oboScope") + + return AccessTokenRequirement(encrypted: encrypted ?? false, + required: self.required ?? false, + configuration: configuration, + clientId: nil, + resourceId: resourceId, + scope: scope) + } + +} diff --git a/WalletLibrary/WalletLibrary/Protocols/Extensions/Mappable.swift b/WalletLibrary/WalletLibrary/Protocols/Extensions/Mappable.swift index 1e224e3d..a9523eeb 100644 --- a/WalletLibrary/WalletLibrary/Protocols/Extensions/Mappable.swift +++ b/WalletLibrary/WalletLibrary/Protocols/Extensions/Mappable.swift @@ -12,18 +12,18 @@ enum MappingError: Error, Equatable { } /** - * Translate the object that conforms to Mappable to object T. - * This pattern is very similar to the JSONEncoder pattern, and will be tied to a Mapper. + * Map the object that conforms to Mappable to object T. */ protocol Mappable { associatedtype T - /// Translates the object that conforms to the protocol to another object. + /// Map the object that conforms to the protocol to another object. func map(using mapper: Mapping) throws -> T } extension Mappable { + /// Helper method to convert an optional property to a required property, else throw an error. func getRequiredProperty(property: U?, propertyName: String) throws -> U { guard let requiredProperty = property else { diff --git a/WalletLibrary/WalletLibrary/Requests/Requirements/AccessTokenRequirement.swift b/WalletLibrary/WalletLibrary/Requests/Requirements/AccessTokenRequirement.swift index 99f6ac95..0ccc687c 100644 --- a/WalletLibrary/WalletLibrary/Requests/Requirements/AccessTokenRequirement.swift +++ b/WalletLibrary/WalletLibrary/Requests/Requirements/AccessTokenRequirement.swift @@ -6,7 +6,7 @@ /** * Information to describe an access token required for a Verified Id issuance flow. */ -public struct AccessTokenRequirement { +public struct AccessTokenRequirement: Equatable { /// If the requirement should be encrypted. let encrypted: Bool diff --git a/WalletLibrary/WalletLibrary/Requests/Requirements/IdTokenRequirement.swift b/WalletLibrary/WalletLibrary/Requests/Requirements/IdTokenRequirement.swift index 0ffc6678..835c9650 100644 --- a/WalletLibrary/WalletLibrary/Requests/Requirements/IdTokenRequirement.swift +++ b/WalletLibrary/WalletLibrary/Requests/Requirements/IdTokenRequirement.swift @@ -6,7 +6,7 @@ /** * Information to describe an id token required for a Verified Id issuance flow. */ -public struct IdTokenRequirement { +public struct IdTokenRequirement: Equatable { /// If the requirement should be encrypted. let encrypted: Bool diff --git a/WalletLibrary/WalletLibrary/Requests/Requirements/SelfAttestedClaimRequirement.swift b/WalletLibrary/WalletLibrary/Requests/Requirements/SelfAttestedClaimRequirement.swift index d0cea6d2..1d05c83b 100644 --- a/WalletLibrary/WalletLibrary/Requests/Requirements/SelfAttestedClaimRequirement.swift +++ b/WalletLibrary/WalletLibrary/Requests/Requirements/SelfAttestedClaimRequirement.swift @@ -6,7 +6,7 @@ /** * Information to describe a self attested claim required for a Verified Id issuance flow. */ -public struct SelfAttestedClaimRequirement { +public struct SelfAttestedClaimRequirement: Equatable { /// If the requirement should be encrypted. let encrypted: Bool diff --git a/WalletLibrary/WalletLibraryTests/Extensions/Translations/VCSDK/AccessTokenDescriptorMappingTests.swift b/WalletLibrary/WalletLibraryTests/Extensions/Translations/VCSDK/AccessTokenDescriptorMappingTests.swift new file mode 100644 index 00000000..39fcef02 --- /dev/null +++ b/WalletLibrary/WalletLibraryTests/Extensions/Translations/VCSDK/AccessTokenDescriptorMappingTests.swift @@ -0,0 +1,140 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +import XCTest +import VCEntities +@testable import WalletLibrary + +class AccessTokenDescriptorMappingTests: XCTestCase { + + let mapper = Mapper() + + let encoder = JSONEncoder() + + let decoder = JSONDecoder() + + let expectedId = "id432" + let expectedConfiguration = "https://test.com" + let expectedClientId = "clientId12" + let expectedResourceId = "redirectUri645" + let expectedScope = "scope234" + + func testSuccessfulTranslation() throws { + let (input, expectedResult) = try setUpInput(encrypted: false, required: false) + let actualResult = try mapper.map(input) + XCTAssertEqual(actualResult, expectedResult) + } + + func testTranslationWithEncryptedAsTrueValue() throws { + let (input, expectedResult) = try setUpInput(encrypted: true, required: false) + let actualResult = try mapper.map(input) + XCTAssertEqual(actualResult, expectedResult) + } + + func testTranslationWithEncryptedAsNilValue() throws { + let (input, expectedResult) = try setUpInput(encrypted: nil, required: false) + let actualResult = try mapper.map(input) + XCTAssertEqual(actualResult, expectedResult) + } + + func testTranslationWithRequiredAsTrueValue() throws { + let (input, expectedResult) = try setUpInput(encrypted: false, required: true) + let actualResult = try mapper.map(input) + XCTAssertEqual(actualResult, expectedResult) + } + + func testTranslationWithRequiredAsNilValue() throws { + let (input, expectedResult) = try setUpInput(encrypted: false, required: nil) + let actualResult = try mapper.map(input) + XCTAssertEqual(actualResult, expectedResult) + } + + func testTranslationWithNoConfigurationPresentError() throws { + let mockedInput = MockAccessTokenDescriptor(id: expectedId, + encrypted: false, + claims: [], + required: false, + configuration: nil, + resourceId: expectedResourceId, + oboScope: expectedScope) + + let input = try setUpInput(mockedInput: mockedInput) + + XCTAssertThrowsError(try mapper.map(input)) { error in + XCTAssert(error is MappingError) + XCTAssertEqual(error as? MappingError, + .PropertyNotPresent(property: "configuration", + in: String(describing: AccessTokenDescriptor.self))) + } + } + + func testTranslationWithNoResourceIdPresentError() throws { + let mockedInput = MockAccessTokenDescriptor(id: expectedId, + encrypted: false, + claims: [], + required: false, + configuration: expectedConfiguration, + resourceId: nil, + oboScope: expectedScope) + + let input = try setUpInput(mockedInput: mockedInput) + + XCTAssertThrowsError(try mapper.map(input)) { error in + XCTAssert(error is MappingError) + XCTAssertEqual(error as? MappingError, + .PropertyNotPresent(property: "resourceId", + in: String(describing: AccessTokenDescriptor.self))) + } + } + + func testTranslationWithNoScopePresentError() throws { + let mockedInput = MockAccessTokenDescriptor(id: expectedId, + encrypted: false, + claims: [], + required: false, + configuration: expectedConfiguration, + resourceId: expectedResourceId, + oboScope: nil) + + let input = try setUpInput(mockedInput: mockedInput) + + XCTAssertThrowsError(try mapper.map(input)) { error in + XCTAssert(error is MappingError) + XCTAssertEqual(error as? MappingError, + .PropertyNotPresent(property: "oboScope", + in: String(describing: AccessTokenDescriptor.self))) + } + } + + private func setUpInput(encrypted: Bool?, + required: Bool?) throws -> (AccessTokenDescriptor, AccessTokenRequirement) { + let mockedInput = MockAccessTokenDescriptor(id: expectedId, + encrypted: encrypted, + claims: [], + required: required, + configuration: expectedConfiguration, + resourceId: expectedResourceId, + oboScope: expectedScope) + + let expectedResult = AccessTokenRequirement(encrypted: encrypted ?? false, + required: required ?? false, + configuration: expectedConfiguration, + clientId: nil, + resourceId: expectedResourceId, + scope: expectedScope) + + let input = try setUpInput(mockedInput: mockedInput) + return (input, expectedResult) + } + + private func setUpInput(mockedInput: MockAccessTokenDescriptor) throws -> AccessTokenDescriptor { + let encodedData = try encoder.encode(mockedInput) + let expectedInput = try decoder.decode(AccessTokenDescriptor.self, from: encodedData) + return expectedInput + } + + +} + diff --git a/WalletLibrary/WalletLibraryTests/Extensions/Translations/VCSDK/IdTokenDescriptorMappingTests.swift b/WalletLibrary/WalletLibraryTests/Extensions/Translations/VCSDK/IdTokenDescriptorMappingTests.swift index 36b6e928..45928be3 100644 --- a/WalletLibrary/WalletLibraryTests/Extensions/Translations/VCSDK/IdTokenDescriptorMappingTests.swift +++ b/WalletLibrary/WalletLibraryTests/Extensions/Translations/VCSDK/IdTokenDescriptorMappingTests.swift @@ -7,7 +7,7 @@ import XCTest import VCEntities @testable import WalletLibrary -class IdTokenDescriptorTranslationTests: XCTestCase { +class IdTokenDescriptorMappingTests: XCTestCase { let mapper = Mapper() diff --git a/WalletLibrary/WalletLibraryTests/Mocks/MockAccessTokenDescriptor.swift b/WalletLibrary/WalletLibraryTests/Mocks/MockAccessTokenDescriptor.swift new file mode 100644 index 00000000..e973fc49 --- /dev/null +++ b/WalletLibrary/WalletLibraryTests/Mocks/MockAccessTokenDescriptor.swift @@ -0,0 +1,14 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +struct MockAccessTokenDescriptor: Codable, Equatable { + let id: String? + let encrypted: Bool? + let claims: [MockClaimDescriptor]? + let required: Bool? + let configuration: String? + let resourceId: String? + let oboScope: String? +} From 2c6411095bfc0a6a62435ce762a5a65112f9a06f Mon Sep 17 00:00:00 2001 From: Sydney Morton Date: Wed, 14 Dec 2022 19:04:28 -0500 Subject: [PATCH 27/38] Update Id and Access Token Mappings --- .../Mappings/VCSDK/AccessTokenDescriptor+Mappable.swift | 2 -- .../Mappings/VCSDK/IdTokenDescriptor+Mappable.swift | 1 - .../WalletLibrary/Protocols/Extensions/Mappable.swift | 2 +- WalletLibrary/WalletLibrary/Utilities/Mapper.swift | 4 ++-- 4 files changed, 3 insertions(+), 6 deletions(-) diff --git a/WalletLibrary/WalletLibrary/Extensions/Mappings/VCSDK/AccessTokenDescriptor+Mappable.swift b/WalletLibrary/WalletLibrary/Extensions/Mappings/VCSDK/AccessTokenDescriptor+Mappable.swift index 1a7cac94..672ddd7e 100644 --- a/WalletLibrary/WalletLibrary/Extensions/Mappings/VCSDK/AccessTokenDescriptor+Mappable.swift +++ b/WalletLibrary/WalletLibrary/Extensions/Mappings/VCSDK/AccessTokenDescriptor+Mappable.swift @@ -11,8 +11,6 @@ import VCEntities */ extension VCEntities.AccessTokenDescriptor: Mappable { - typealias T = AccessTokenRequirement - func map(using mapper: Mapping) throws -> AccessTokenRequirement { let configuration = try getRequiredProperty(property: configuration, propertyName: "configuration") diff --git a/WalletLibrary/WalletLibrary/Extensions/Mappings/VCSDK/IdTokenDescriptor+Mappable.swift b/WalletLibrary/WalletLibrary/Extensions/Mappings/VCSDK/IdTokenDescriptor+Mappable.swift index b96d24b8..580bb186 100644 --- a/WalletLibrary/WalletLibrary/Extensions/Mappings/VCSDK/IdTokenDescriptor+Mappable.swift +++ b/WalletLibrary/WalletLibrary/Extensions/Mappings/VCSDK/IdTokenDescriptor+Mappable.swift @@ -10,7 +10,6 @@ import VCEntities * to map IdTokenDescriptor to IdTokenRequirement. */ extension VCEntities.IdTokenDescriptor: Mappable { - typealias T = IdTokenRequirement func map(using mapper: Mapping) throws -> IdTokenRequirement { diff --git a/WalletLibrary/WalletLibrary/Protocols/Extensions/Mappable.swift b/WalletLibrary/WalletLibrary/Protocols/Extensions/Mappable.swift index a9523eeb..9ee09905 100644 --- a/WalletLibrary/WalletLibrary/Protocols/Extensions/Mappable.swift +++ b/WalletLibrary/WalletLibrary/Protocols/Extensions/Mappable.swift @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ /** - * Errors pertaining to Mapping one data model to another using the Mappable protocol. + * Errors pertaining to mapping one data model to another using the Mappable protocol. */ enum MappingError: Error, Equatable { case PropertyNotPresent(property: String, in: String) diff --git a/WalletLibrary/WalletLibrary/Utilities/Mapper.swift b/WalletLibrary/WalletLibrary/Utilities/Mapper.swift index 871b482a..e12d2c45 100644 --- a/WalletLibrary/WalletLibrary/Utilities/Mapper.swift +++ b/WalletLibrary/WalletLibrary/Utilities/Mapper.swift @@ -4,11 +4,11 @@ *--------------------------------------------------------------------------------------------*/ /** - * Utility Class used to handle data model transformations + * Utility Class used to handle data model mapping. */ struct Mapper: Mapping { - /// Translate one object into another. + /// Map one object to another. func map(_ object: T) throws -> T.T { return try object.map(using: self) } From ffb12d7ea07cef549646b9afdfa047bf8a6600be Mon Sep 17 00:00:00 2001 From: Sydney Morton Date: Wed, 14 Dec 2022 19:11:28 -0500 Subject: [PATCH 28/38] Add PresentationServiceable Protocol --- .../Protocols/Services/PresentationServiceable.swift | 2 ++ 1 file changed, 2 insertions(+) diff --git a/WalletLibrary/WalletLibrary/Protocols/Services/PresentationServiceable.swift b/WalletLibrary/WalletLibrary/Protocols/Services/PresentationServiceable.swift index 4fc3bad7..d1a74c9d 100644 --- a/WalletLibrary/WalletLibrary/Protocols/Services/PresentationServiceable.swift +++ b/WalletLibrary/WalletLibrary/Protocols/Services/PresentationServiceable.swift @@ -7,4 +7,6 @@ import VCEntities protocol PresentationServiceable { func getRequest(url: String) async throws -> VCEntities.PresentationRequest + + func send(response: PresentationResponseContainer) async throws -> Void } From 22cc41669ea9090c8123b0c58463060e97d45d42 Mon Sep 17 00:00:00 2001 From: Sydney Morton Date: Wed, 14 Dec 2022 19:11:38 -0500 Subject: [PATCH 29/38] Add Async Wrapper Tests --- .../WalletLibraryTests/Utilities/AsyncWrapperTests.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/WalletLibrary/WalletLibraryTests/Utilities/AsyncWrapperTests.swift b/WalletLibrary/WalletLibraryTests/Utilities/AsyncWrapperTests.swift index 0fdc7ada..35ffa49f 100644 --- a/WalletLibrary/WalletLibraryTests/Utilities/AsyncWrapperTests.swift +++ b/WalletLibrary/WalletLibraryTests/Utilities/AsyncWrapperTests.swift @@ -42,7 +42,6 @@ class AsyncWrapperTests: XCTestCase { XCTFail(result) } catch { XCTAssertEqual(error as? AsyncWrapperTestsError, AsyncWrapperTestsError.testCaseThrowsError) - print("done") } } } From 3a211c413cbb28bceb7b3337c18dab0207035ea6 Mon Sep 17 00:00:00 2001 From: Sydney Morton Date: Wed, 14 Dec 2022 19:30:37 -0500 Subject: [PATCH 30/38] Remove Request Handler for next PR --- .../WalletLibrary.xcodeproj/project.pbxproj | 4 -- .../Requests/Handlers/RequestHandler.swift | 40 ------------------- 2 files changed, 44 deletions(-) delete mode 100644 WalletLibrary/WalletLibrary/Requests/Handlers/RequestHandler.swift diff --git a/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj b/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj index 71293339..46712697 100644 --- a/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj +++ b/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj @@ -46,7 +46,6 @@ 55E3370E293FD84700CD2ED7 /* IssuanceRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E3370D293FD84700CD2ED7 /* IssuanceRequest.swift */; }; 55E33711293FDE1400CD2ED7 /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E33710293FDE1400CD2ED7 /* Request.swift */; }; 55E33714293FDEEF00CD2ED7 /* Contract.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E33713293FDEEF00CD2ED7 /* Contract.swift */; }; - 55E3375A2942317100CD2ED7 /* RequestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E337592942317100CD2ED7 /* RequestHandler.swift */; }; 55E337652943749600CD2ED7 /* AsyncWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E337642943749600CD2ED7 /* AsyncWrapper.swift */; }; 55E3376829437E3500CD2ED7 /* PresentationServiceable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E3376729437E3500CD2ED7 /* PresentationServiceable.swift */; }; 55E3376B29478C5000CD2ED7 /* AsyncWrapperTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E3376A29478C5000CD2ED7 /* AsyncWrapperTests.swift */; }; @@ -272,7 +271,6 @@ 55E3370D293FD84700CD2ED7 /* IssuanceRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IssuanceRequest.swift; sourceTree = ""; }; 55E33710293FDE1400CD2ED7 /* Request.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Request.swift; sourceTree = ""; }; 55E33713293FDEEF00CD2ED7 /* Contract.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Contract.swift; sourceTree = ""; }; - 55E337592942317100CD2ED7 /* RequestHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestHandler.swift; sourceTree = ""; }; 55E337642943749600CD2ED7 /* AsyncWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AsyncWrapper.swift; sourceTree = ""; }; 55E3376729437E3500CD2ED7 /* PresentationServiceable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PresentationServiceable.swift; sourceTree = ""; }; 55E3376A29478C5000CD2ED7 /* AsyncWrapperTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AsyncWrapperTests.swift; sourceTree = ""; }; @@ -611,7 +609,6 @@ 55E337432942311000CD2ED7 /* Handlers */ = { isa = PBXGroup; children = ( - 55E337592942317100CD2ED7 /* RequestHandler.swift */, ); path = Handlers; sourceTree = ""; @@ -978,7 +975,6 @@ 5534E67B294A2B05005D0765 /* IssuanceRequest+Translateable.swift in Sources */, 55E3370E293FD84700CD2ED7 /* IssuanceRequest.swift in Sources */, 55E3370A293FD3E000CD2ED7 /* IdTokenRequirement.swift in Sources */, - 55E3375A2942317100CD2ED7 /* RequestHandler.swift in Sources */, 55E336D8293FCE0500CD2ED7 /* CredentialIssuanceParams.swift in Sources */, 55E336D1293FA6F400CD2ED7 /* VerifiedIdRequirement.swift in Sources */, 5534E670294A1008005D0765 /* PresentationRequest+Translateable.swift in Sources */, diff --git a/WalletLibrary/WalletLibrary/Requests/Handlers/RequestHandler.swift b/WalletLibrary/WalletLibrary/Requests/Handlers/RequestHandler.swift deleted file mode 100644 index 22af66f9..00000000 --- a/WalletLibrary/WalletLibrary/Requests/Handlers/RequestHandler.swift +++ /dev/null @@ -1,40 +0,0 @@ -/*--------------------------------------------------------------------------------------------- -* Copyright (c) Microsoft Corporation. All rights reserved. -* Licensed under the MIT License. See License.txt in the project root for license information. -*--------------------------------------------------------------------------------------------*/ - -import VCServices - -enum RequestHandlerError: Error { - case Test(message: String, error: Error) -} - -/** - * - */ -class RequestHandler: RequestHandling { - - private let presentationService: PresentationServiceable - - - init(presentationService: PresentationServiceable = PresentationService()) { - self.presentationService = presentationService - } - - func handle(requestUri: URL) async throws -> Request { - do { - let request = try await presentationService.getRequest(url: requestUri.absoluteString) - print(request) - return IssuanceRequest(requester: request.content.nonce!, - credentialIssuerMetadata: [], - contracts: [], - pinRequirements: nil, - credentialFormats: [], - state: "") - - } catch { - throw RequestHandlerError.Test(message: "Unable to handle request", error: error) - } - } - -} From fba07fce8a96391432cd81c7deeffcb1e5fe711a Mon Sep 17 00:00:00 2001 From: Sydney Morton Date: Wed, 14 Dec 2022 19:33:03 -0500 Subject: [PATCH 31/38] Update project file --- WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj | 4 ---- 1 file changed, 4 deletions(-) diff --git a/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj b/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj index 46712697..7c7a3ef6 100644 --- a/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj +++ b/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj @@ -51,7 +51,6 @@ 55E3376B29478C5000CD2ED7 /* AsyncWrapperTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E3376A29478C5000CD2ED7 /* AsyncWrapperTests.swift */; }; 55E337B42948B4B000CD2ED7 /* CredentialFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E3379D2948B4B000CD2ED7 /* CredentialFormat.swift */; }; 55E337B52948B4B000CD2ED7 /* PinRequirement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E337B32948B4B000CD2ED7 /* PinRequirement.swift */; }; - 55E337B92948B51E00CD2ED7 /* RequestHandling.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E337B82948B51E00CD2ED7 /* RequestHandling.swift */; }; 55E337BC2948B5FE00CD2ED7 /* PresentationService+PresentationServiceable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E337BB2948B5FE00CD2ED7 /* PresentationService+PresentationServiceable.swift */; }; /* End PBXBuildFile section */ @@ -276,7 +275,6 @@ 55E3376A29478C5000CD2ED7 /* AsyncWrapperTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AsyncWrapperTests.swift; sourceTree = ""; }; 55E3379D2948B4B000CD2ED7 /* CredentialFormat.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CredentialFormat.swift; path = WalletLibrary/Requests/Requirements/CredentialFormat.swift; sourceTree = SOURCE_ROOT; }; 55E337B32948B4B000CD2ED7 /* PinRequirement.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PinRequirement.swift; path = WalletLibrary/Requests/Requirements/PinRequirement.swift; sourceTree = SOURCE_ROOT; }; - 55E337B82948B51E00CD2ED7 /* RequestHandling.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestHandling.swift; sourceTree = ""; }; 55E337BB2948B5FE00CD2ED7 /* PresentationService+PresentationServiceable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PresentationService+PresentationServiceable.swift"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -661,7 +659,6 @@ 55E337B72948B50800CD2ED7 /* Handlers */ = { isa = PBXGroup; children = ( - 55E337B82948B51E00CD2ED7 /* RequestHandling.swift */, ); path = Handlers; sourceTree = ""; @@ -989,7 +986,6 @@ 5534E64D294A0888005D0765 /* PresentationDescriptor+Translateable.swift in Sources */, 55E337B42948B4B000CD2ED7 /* CredentialFormat.swift in Sources */, 55E3370C293FD61E00CD2ED7 /* SelfAttestedClaimRequirement.swift in Sources */, - 55E337B92948B51E00CD2ED7 /* RequestHandling.swift in Sources */, 55E3376829437E3500CD2ED7 /* PresentationServiceable.swift in Sources */, 55E33714293FDEEF00CD2ED7 /* Contract.swift in Sources */, 552E546B293E759300868F47 /* VerifiedIdFlow.swift in Sources */, From 1bf4848059ee2dc014c3c8000115b3c7ff6c4301 Mon Sep 17 00:00:00 2001 From: Sydney Morton Date: Wed, 14 Dec 2022 21:03:40 -0500 Subject: [PATCH 32/38] Fix comments on token mappers --- .../Mappings/VCSDK/AccessTokenDescriptor+Mappable.swift | 3 ++- .../Extensions/Mappings/VCSDK/IdTokenDescriptor+Mappable.swift | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/WalletLibrary/WalletLibrary/Extensions/Mappings/VCSDK/AccessTokenDescriptor+Mappable.swift b/WalletLibrary/WalletLibrary/Extensions/Mappings/VCSDK/AccessTokenDescriptor+Mappable.swift index 672ddd7e..d0e6c045 100644 --- a/WalletLibrary/WalletLibrary/Extensions/Mappings/VCSDK/AccessTokenDescriptor+Mappable.swift +++ b/WalletLibrary/WalletLibrary/Extensions/Mappings/VCSDK/AccessTokenDescriptor+Mappable.swift @@ -6,11 +6,12 @@ import VCEntities /** - * An Extension of the VCEntities.AccessTokenDescriptor class to be able + * An extension of the VCEntities.AccessTokenDescriptor class to be able * to map AccessTokenDescriptor to AccessTokenRequirement. */ extension VCEntities.AccessTokenDescriptor: Mappable { + /// Map the access token descriptor to access token requirement. func map(using mapper: Mapping) throws -> AccessTokenRequirement { let configuration = try getRequiredProperty(property: configuration, propertyName: "configuration") diff --git a/WalletLibrary/WalletLibrary/Extensions/Mappings/VCSDK/IdTokenDescriptor+Mappable.swift b/WalletLibrary/WalletLibrary/Extensions/Mappings/VCSDK/IdTokenDescriptor+Mappable.swift index 580bb186..3f87d9a9 100644 --- a/WalletLibrary/WalletLibrary/Extensions/Mappings/VCSDK/IdTokenDescriptor+Mappable.swift +++ b/WalletLibrary/WalletLibrary/Extensions/Mappings/VCSDK/IdTokenDescriptor+Mappable.swift @@ -6,11 +6,12 @@ import VCEntities /** - * An Extension of the VCEntities.IdTokenDescriptor class to be able + * An extension of the VCEntities.IdTokenDescriptor class to be able * to map IdTokenDescriptor to IdTokenRequirement. */ extension VCEntities.IdTokenDescriptor: Mappable { + /// Map the id token descriptor to the id token requirement. func map(using mapper: Mapping) throws -> IdTokenRequirement { guard let configuration = URL(string: configuration) else { From 2ad89e716316b96720a954c91e4c4b6ddaf61085 Mon Sep 17 00:00:00 2001 From: Sydney Morton Date: Wed, 14 Dec 2022 21:07:17 -0500 Subject: [PATCH 33/38] Add mapping for presentation descriptor to verified id requirement --- .../PresentationDescriptor+Mappable.swift | 32 +++++ .../CredentialIssuanceParams.swift | 2 +- .../Requirements/VerifiedIdRequirement.swift | 2 +- .../PresentationDescriptorMappingTests.swift | 123 ++++++++++++++++++ .../Mocks/MockIssuerDescriptor.swift | 8 ++ .../Mocks/MockPresentationDescriptor.swift | 19 +++ 6 files changed, 184 insertions(+), 2 deletions(-) create mode 100644 WalletLibrary/WalletLibrary/Extensions/Mappings/VCSDK/PresentationDescriptor+Mappable.swift create mode 100644 WalletLibrary/WalletLibraryTests/Extensions/Translations/VCSDK/PresentationDescriptorMappingTests.swift create mode 100644 WalletLibrary/WalletLibraryTests/Mocks/MockIssuerDescriptor.swift create mode 100644 WalletLibrary/WalletLibraryTests/Mocks/MockPresentationDescriptor.swift diff --git a/WalletLibrary/WalletLibrary/Extensions/Mappings/VCSDK/PresentationDescriptor+Mappable.swift b/WalletLibrary/WalletLibrary/Extensions/Mappings/VCSDK/PresentationDescriptor+Mappable.swift new file mode 100644 index 00000000..e64b87a2 --- /dev/null +++ b/WalletLibrary/WalletLibrary/Extensions/Mappings/VCSDK/PresentationDescriptor+Mappable.swift @@ -0,0 +1,32 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +import VCEntities + +/** + * An extension of the VCEntities.PresentationDescriptor class to be able + * to map PresentationDescriptor to VerifiedIdRequirement. + */ +extension VCEntities.PresentationDescriptor: Mappable { + + func map(using mapper: Mapping) throws -> VerifiedIdRequirement { + + let acceptedIssuers = issuers?.compactMap { $0.iss } ?? [] + + var issuanceParams: CredentialIssuanceParams? = nil + if let contracts = contracts, + !contracts.isEmpty { + issuanceParams = CredentialIssuanceParams(acceptedIssuers: acceptedIssuers, + credentialIssuerMetadata: contracts) + } + + return VerifiedIdRequirement(encrypted: encrypted ?? false, + required: presentationRequired ?? false, + types: [credentialType], + acceptedIssuers: acceptedIssuers, + purpose: nil, + credentialIssuanceParams: issuanceParams) + } +} diff --git a/WalletLibrary/WalletLibrary/Requests/Requirements/CredentialIssuanceParams.swift b/WalletLibrary/WalletLibrary/Requests/Requirements/CredentialIssuanceParams.swift index 3c484117..ee7de6c9 100644 --- a/WalletLibrary/WalletLibrary/Requests/Requirements/CredentialIssuanceParams.swift +++ b/WalletLibrary/WalletLibrary/Requests/Requirements/CredentialIssuanceParams.swift @@ -7,7 +7,7 @@ * Parameters used for an Issuance during Presentation flow * to define information needed for the issuance of the requested Verified Id. */ -public struct CredentialIssuanceParams { +public struct CredentialIssuanceParams: Equatable { /// A list of issuers that are accepted. public let acceptedIssuers: [String] diff --git a/WalletLibrary/WalletLibrary/Requests/Requirements/VerifiedIdRequirement.swift b/WalletLibrary/WalletLibrary/Requests/Requirements/VerifiedIdRequirement.swift index 4222ede9..54b83ff3 100644 --- a/WalletLibrary/WalletLibrary/Requests/Requirements/VerifiedIdRequirement.swift +++ b/WalletLibrary/WalletLibrary/Requests/Requirements/VerifiedIdRequirement.swift @@ -6,7 +6,7 @@ /** * Information to describe Verified IDs required. */ -public struct VerifiedIdRequirement { +public struct VerifiedIdRequirement: Equatable { /// If requirement must be encrypted. let encrypted: Bool diff --git a/WalletLibrary/WalletLibraryTests/Extensions/Translations/VCSDK/PresentationDescriptorMappingTests.swift b/WalletLibrary/WalletLibraryTests/Extensions/Translations/VCSDK/PresentationDescriptorMappingTests.swift new file mode 100644 index 00000000..856187db --- /dev/null +++ b/WalletLibrary/WalletLibraryTests/Extensions/Translations/VCSDK/PresentationDescriptorMappingTests.swift @@ -0,0 +1,123 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +import XCTest +import VCEntities +@testable import WalletLibrary + +class PresentationDescriptorMappingTests: XCTestCase { + + let mapper = Mapper() + + let encoder = JSONEncoder() + + let decoder = JSONDecoder() + + let exceptedCredentialType = "credentialType4235" + + func testSuccessfulMapping() throws { + let (input, expectedResult) = try setUpInput(encrypted: false, required: false) + let actualResult = try mapper.map(input) + XCTAssertEqual(actualResult, expectedResult) + } + + func testMappingWithEncryptedAsTrue() throws { + let (input, expectedResult) = try setUpInput(encrypted: true, required: false) + let actualResult = try mapper.map(input) + XCTAssertEqual(actualResult, expectedResult) + } + + func testMappingWithRequiredAsTrue() throws { + let (input, expectedResult) = try setUpInput(encrypted: false, required: true) + let actualResult = try mapper.map(input) + XCTAssertEqual(actualResult, expectedResult) + } + + func testMappingWithOneNilIssuerValue() throws { + let (input, expectedResult) = try setUpInput(issuers: [nil]) + let actualResult = try mapper.map(input) + XCTAssertEqual(actualResult, expectedResult) + } + + func testMappingWithOneIssuerValue() throws { + let (input, expectedResult) = try setUpInput(issuers: ["issuer235"]) + let actualResult = try mapper.map(input) + XCTAssertEqual(actualResult, expectedResult) + } + + func testMappingWithThreeIssuerValue() throws { + let (input, expectedResult) = try setUpInput(issuers: ["issuer235", + "issuer7345", + "issuer9083"]) + let actualResult = try mapper.map(input) + XCTAssertEqual(actualResult, expectedResult) + } + + func testMappingWithNilIssuerValue() throws { + let (input, expectedResult) = try setUpInput(issuers: nil) + let actualResult = try mapper.map(input) + XCTAssertEqual(actualResult, expectedResult) + } + + func testMappingWithNilContractValue() throws { + let (input, expectedResult) = try setUpInput(contracts: nil) + let actualResult = try mapper.map(input) + XCTAssertEqual(actualResult, expectedResult) + } + + func testMappingWithOneContractValue() throws { + let (input, expectedResult) = try setUpInput(contracts: ["contract2645"]) + let actualResult = try mapper.map(input) + XCTAssertEqual(actualResult, expectedResult) + } + + func testMappingWithThreeContractValue() throws { + let (input, expectedResult) = try setUpInput(contracts: ["contract2645", + "contract0394", + "contract2343"]) + let actualResult = try mapper.map(input) + XCTAssertEqual(actualResult, expectedResult) + } + + private func setUpInput(encrypted: Bool? = false, + required: Bool? = false, + issuers: [String?]? = [], + contracts: [String]? = []) throws -> (PresentationDescriptor, VerifiedIdRequirement) { + + let mockedIssuers = issuers?.compactMap { MockIssuerDescriptor(iss: $0) } + let mockedInput = MockPresentationDescriptor(encrypted: encrypted, + claims: [], + presentationRequired: required, + credentialType: exceptedCredentialType, + issuers: mockedIssuers, + contracts: contracts) + + let expectedIssuers = issuers?.compactMap { $0 } ?? [] + + var expectedIssuanceParams: CredentialIssuanceParams? = nil + if let expectedContracts = contracts, + !expectedContracts.isEmpty { + expectedIssuanceParams = CredentialIssuanceParams(acceptedIssuers: expectedIssuers, + credentialIssuerMetadata: expectedContracts) + } + + let expectedResult = VerifiedIdRequirement(encrypted: encrypted ?? false, + required: required ?? false, + types: [exceptedCredentialType], + acceptedIssuers: expectedIssuers, + purpose: nil, + credentialIssuanceParams: expectedIssuanceParams) + + let input = try setUpInput(mockedInput: mockedInput) + return (input, expectedResult) + } + + private func setUpInput(mockedInput: MockPresentationDescriptor) throws -> PresentationDescriptor { + let encodedData = try encoder.encode(mockedInput) + let expectedInput = try decoder.decode(PresentationDescriptor.self, from: encodedData) + return expectedInput + } + +} diff --git a/WalletLibrary/WalletLibraryTests/Mocks/MockIssuerDescriptor.swift b/WalletLibrary/WalletLibraryTests/Mocks/MockIssuerDescriptor.swift new file mode 100644 index 00000000..95bbef09 --- /dev/null +++ b/WalletLibrary/WalletLibraryTests/Mocks/MockIssuerDescriptor.swift @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +struct MockIssuerDescriptor: Codable, Equatable { + let iss: String? +} diff --git a/WalletLibrary/WalletLibraryTests/Mocks/MockPresentationDescriptor.swift b/WalletLibrary/WalletLibraryTests/Mocks/MockPresentationDescriptor.swift new file mode 100644 index 00000000..ab397502 --- /dev/null +++ b/WalletLibrary/WalletLibraryTests/Mocks/MockPresentationDescriptor.swift @@ -0,0 +1,19 @@ +/*--------------------------------------------------------------------------------------------- +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +*--------------------------------------------------------------------------------------------*/ + +struct MockPresentationDescriptor: Codable, Equatable { + let encrypted: Bool? + let claims: [MockClaimDescriptor] + let presentationRequired: Bool? + let credentialType: String + let issuers: [MockIssuerDescriptor]? + let contracts: [String]? + + enum CodingKeys: String, CodingKey { + case encrypted, claims + case presentationRequired = "required" + case credentialType, issuers, contracts + } +} From 34e37491ed1788a5319f889ae2d2627f71a1aba0 Mon Sep 17 00:00:00 2001 From: Sydney Morton Date: Wed, 14 Dec 2022 21:07:42 -0500 Subject: [PATCH 34/38] Add comments for PresentationServiceable protocol --- .../Protocols/Services/PresentationServiceable.swift | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/WalletLibrary/WalletLibrary/Protocols/Services/PresentationServiceable.swift b/WalletLibrary/WalletLibrary/Protocols/Services/PresentationServiceable.swift index d1a74c9d..ed096010 100644 --- a/WalletLibrary/WalletLibrary/Protocols/Services/PresentationServiceable.swift +++ b/WalletLibrary/WalletLibrary/Protocols/Services/PresentationServiceable.swift @@ -5,8 +5,13 @@ import VCEntities +/// Protocol that handles getting vc sdk presentation requests and sending vc sdk presentation responses. protocol PresentationServiceable { + + /// Fetches and validates the presentation request. func getRequest(url: String) async throws -> VCEntities.PresentationRequest + /// Sends the presentation response container and if successful, returns void, + /// If unsuccessful, throws an error. func send(response: PresentationResponseContainer) async throws -> Void } From 927c8a03491ef9bc12f28e3d2a98a194715a9199 Mon Sep 17 00:00:00 2001 From: Sydney Morton Date: Wed, 14 Dec 2022 21:07:57 -0500 Subject: [PATCH 35/38] Fix naming in token mapping tests --- .../AccessTokenDescriptorMappingTests.swift | 18 ++++++++---------- .../VCSDK/IdTokenDescriptorMappingTests.swift | 18 ++++++++---------- 2 files changed, 16 insertions(+), 20 deletions(-) diff --git a/WalletLibrary/WalletLibraryTests/Extensions/Translations/VCSDK/AccessTokenDescriptorMappingTests.swift b/WalletLibrary/WalletLibraryTests/Extensions/Translations/VCSDK/AccessTokenDescriptorMappingTests.swift index 39fcef02..75f114a3 100644 --- a/WalletLibrary/WalletLibraryTests/Extensions/Translations/VCSDK/AccessTokenDescriptorMappingTests.swift +++ b/WalletLibrary/WalletLibraryTests/Extensions/Translations/VCSDK/AccessTokenDescriptorMappingTests.swift @@ -21,37 +21,37 @@ class AccessTokenDescriptorMappingTests: XCTestCase { let expectedResourceId = "redirectUri645" let expectedScope = "scope234" - func testSuccessfulTranslation() throws { + func testSuccessfulMapping() throws { let (input, expectedResult) = try setUpInput(encrypted: false, required: false) let actualResult = try mapper.map(input) XCTAssertEqual(actualResult, expectedResult) } - func testTranslationWithEncryptedAsTrueValue() throws { + func testMappingWithEncryptedAsTrueValue() throws { let (input, expectedResult) = try setUpInput(encrypted: true, required: false) let actualResult = try mapper.map(input) XCTAssertEqual(actualResult, expectedResult) } - func testTranslationWithEncryptedAsNilValue() throws { + func testMappingWithEncryptedAsNilValue() throws { let (input, expectedResult) = try setUpInput(encrypted: nil, required: false) let actualResult = try mapper.map(input) XCTAssertEqual(actualResult, expectedResult) } - func testTranslationWithRequiredAsTrueValue() throws { + func testMappingWithRequiredAsTrueValue() throws { let (input, expectedResult) = try setUpInput(encrypted: false, required: true) let actualResult = try mapper.map(input) XCTAssertEqual(actualResult, expectedResult) } - func testTranslationWithRequiredAsNilValue() throws { + func testMappingWithRequiredAsNilValue() throws { let (input, expectedResult) = try setUpInput(encrypted: false, required: nil) let actualResult = try mapper.map(input) XCTAssertEqual(actualResult, expectedResult) } - func testTranslationWithNoConfigurationPresentError() throws { + func testMappingWithNoConfigurationPresentError() throws { let mockedInput = MockAccessTokenDescriptor(id: expectedId, encrypted: false, claims: [], @@ -70,7 +70,7 @@ class AccessTokenDescriptorMappingTests: XCTestCase { } } - func testTranslationWithNoResourceIdPresentError() throws { + func testMappingWithNoResourceIdPresentError() throws { let mockedInput = MockAccessTokenDescriptor(id: expectedId, encrypted: false, claims: [], @@ -89,7 +89,7 @@ class AccessTokenDescriptorMappingTests: XCTestCase { } } - func testTranslationWithNoScopePresentError() throws { + func testMappingWithNoScopePresentError() throws { let mockedInput = MockAccessTokenDescriptor(id: expectedId, encrypted: false, claims: [], @@ -134,7 +134,5 @@ class AccessTokenDescriptorMappingTests: XCTestCase { let expectedInput = try decoder.decode(AccessTokenDescriptor.self, from: encodedData) return expectedInput } - - } diff --git a/WalletLibrary/WalletLibraryTests/Extensions/Translations/VCSDK/IdTokenDescriptorMappingTests.swift b/WalletLibrary/WalletLibraryTests/Extensions/Translations/VCSDK/IdTokenDescriptorMappingTests.swift index 45928be3..5e26cf34 100644 --- a/WalletLibrary/WalletLibraryTests/Extensions/Translations/VCSDK/IdTokenDescriptorMappingTests.swift +++ b/WalletLibrary/WalletLibraryTests/Extensions/Translations/VCSDK/IdTokenDescriptorMappingTests.swift @@ -20,37 +20,37 @@ class IdTokenDescriptorMappingTests: XCTestCase { let expectedRedirectUri = "redirectUri645" let expectedScope = "scope234" - func testSuccessfulTranslation() throws { + func testSuccessfulMapping() throws { let (input, expectedResult) = try setUpInput(encrypted: false, required: false) let actualResult = try mapper.map(input) XCTAssertEqual(actualResult, expectedResult) } - func testTranslationWithEncryptedAsTrueValue() throws { + func testMappingWithEncryptedAsTrueValue() throws { let (input, expectedResult) = try setUpInput(encrypted: true, required: false) let actualResult = try mapper.map(input) XCTAssertEqual(actualResult, expectedResult) } - func testTranslationWithEncryptedAsNilValue() throws { + func testMappingWithEncryptedAsNilValue() throws { let (input, expectedResult) = try setUpInput(encrypted: nil, required: false) let actualResult = try mapper.map(input) XCTAssertEqual(actualResult, expectedResult) } - func testTranslationWithRequiredAsTrueValue() throws { + func testMappingWithRequiredAsTrueValue() throws { let (input, expectedResult) = try setUpInput(encrypted: false, required: true) let actualResult = try mapper.map(input) XCTAssertEqual(actualResult, expectedResult) } - func testTranslationWithRequiredAsNilValue() throws { + func testMappingWithRequiredAsNilValue() throws { let (input, expectedResult) = try setUpInput(encrypted: false, required: nil) let actualResult = try mapper.map(input) XCTAssertEqual(actualResult, expectedResult) } - func testTranslationWithNoRedirectUrlPresentError() throws { + func testMappingWithNoRedirectUrlPresentError() throws { let mockedInput = MockIdTokenDescriptor(encrypted: false, claims: [], idTokenRequired: false, @@ -68,7 +68,7 @@ class IdTokenDescriptorMappingTests: XCTestCase { } } - func testTranslationWithNoClientIdPresentError() throws { + func testMappingWithNoClientIdPresentError() throws { let mockedInput = MockIdTokenDescriptor(encrypted: false, claims: [], idTokenRequired: false, @@ -86,7 +86,7 @@ class IdTokenDescriptorMappingTests: XCTestCase { } } - func testTranslationWithNoScopePresentError() throws { + func testMappingWithNoScopePresentError() throws { let mockedInput = MockIdTokenDescriptor(encrypted: false, claims: [], idTokenRequired: false, @@ -129,6 +129,4 @@ class IdTokenDescriptorMappingTests: XCTestCase { let expectedInput = try decoder.decode(IdTokenDescriptor.self, from: encodedData) return expectedInput } - - } From 4d889d5bb1737d728017acefe836bd5b6d75754c Mon Sep 17 00:00:00 2001 From: Sydney Morton Date: Thu, 15 Dec 2022 08:01:35 -0500 Subject: [PATCH 36/38] Fix nits for PR --- .../WalletLibrary.xcodeproj/project.pbxproj | 36 ++++----- .../AccessTokenDescriptor+Mappable.swift | 1 - .../VCSDK/IdTokenDescriptor+Mappable.swift | 1 - ...ationService+PresentationServiceable.swift | 2 +- .../Services/PresentationServiceable.swift | 4 +- .../Protocols/Utilities/Mapping.swift | 4 +- .../Translators/ContractTranslator.swift | 79 ------------------- .../WalletLibrary/VerifiedIdFlow.swift | 45 +---------- .../VerifiedIdFlowTests.swift | 6 +- 9 files changed, 29 insertions(+), 149 deletions(-) delete mode 100644 WalletLibrary/WalletLibrary/Requests/Translators/ContractTranslator.swift diff --git a/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj b/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj index 7c7a3ef6..6929771a 100644 --- a/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj +++ b/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj @@ -15,11 +15,9 @@ 5534E5982948B8C2005D0765 /* VCServices.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 55E336E7293FCE4F00CD2ED7 /* VCServices.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 5534E5AC2948B8C8005D0765 /* VCEntities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55E336DE293FCE4200CD2ED7 /* VCEntities.framework */; platformFilter = ios; }; 5534E5AD2948B8C8005D0765 /* VCEntities.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 55E336DE293FCE4200CD2ED7 /* VCEntities.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 5534E5B02948FAC5005D0765 /* RequestTranslator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E5AF2948FAC5005D0765 /* RequestTranslator.swift */; }; 5534E5B32948FC9C005D0765 /* RequestRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E5B22948FC9C005D0765 /* RequestRepository.swift */; }; 5534E5B52948FEB5005D0765 /* RootOfTrust.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E5B42948FEB5005D0765 /* RootOfTrust.swift */; }; - 5534E61B294933AB005D0765 /* ContractTranslator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E61A294933AB005D0765 /* ContractTranslator.swift */; }; - 5534E64D294A0888005D0765 /* PresentationDescriptor+Translateable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E64C294A0888005D0765 /* PresentationDescriptor+Translateable.swift */; }; + 5534E64D294A0888005D0765 /* PresentationDescriptor+Mappable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E64C294A0888005D0765 /* PresentationDescriptor+Mappable.swift */; }; 5534E667294A0B6C005D0765 /* Mappable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E666294A0B6C005D0765 /* Mappable.swift */; }; 5534E669294A0C3F005D0765 /* Mapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E668294A0C3F005D0765 /* Mapper.swift */; }; 5534E66E294A0F8F005D0765 /* Mapping.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E66D294A0F8F005D0765 /* Mapping.swift */; }; @@ -35,6 +33,9 @@ 5534E68A294A5F7B005D0765 /* MockIdTokenDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E689294A5F7B005D0765 /* MockIdTokenDescriptor.swift */; }; 5534E68C294A8B8F005D0765 /* AccessTokenDescriptorMappingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E68B294A8B8F005D0765 /* AccessTokenDescriptorMappingTests.swift */; }; 5534E68E294A8BC4005D0765 /* MockAccessTokenDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E68D294A8BC3005D0765 /* MockAccessTokenDescriptor.swift */; }; + 5534E6AD294AAFA6005D0765 /* PresentationDescriptorMappingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E6AC294AAFA6005D0765 /* PresentationDescriptorMappingTests.swift */; }; + 5534E6AF294AAFF4005D0765 /* MockPresentationDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E6AE294AAFF4005D0765 /* MockPresentationDescriptor.swift */; }; + 5534E6B1294AB88B005D0765 /* MockIssuerDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E6B0294AB88B005D0765 /* MockIssuerDescriptor.swift */; }; 55E33684293E7B6600CD2ED7 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55E33679293E7B5F00CD2ED7 /* PromiseKit.framework */; }; 55E336D1293FA6F400CD2ED7 /* VerifiedIdRequirement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E336D0293FA6F400CD2ED7 /* VerifiedIdRequirement.swift */; }; 55E336D4293FA75300CD2ED7 /* VerifiedId.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E336D3293FA75300CD2ED7 /* VerifiedId.swift */; }; @@ -237,11 +238,9 @@ 552E51D8293E71D700868F47 /* VCToken.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = VCToken.xcodeproj; path = VCToken/VCToken.xcodeproj; sourceTree = ""; }; 552E5229293E71D700868F47 /* VCCrypto.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = VCCrypto.xcodeproj; path = VCCrypto/VCCrypto.xcodeproj; sourceTree = ""; }; 552E5237293E71D700868F47 /* VCNetworking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = VCNetworking.xcodeproj; path = VCNetworking/VCNetworking.xcodeproj; sourceTree = ""; }; - 5534E5AF2948FAC5005D0765 /* RequestTranslator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestTranslator.swift; sourceTree = ""; }; 5534E5B22948FC9C005D0765 /* RequestRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestRepository.swift; sourceTree = ""; }; 5534E5B42948FEB5005D0765 /* RootOfTrust.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootOfTrust.swift; sourceTree = ""; }; - 5534E61A294933AB005D0765 /* ContractTranslator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContractTranslator.swift; sourceTree = ""; }; - 5534E64C294A0888005D0765 /* PresentationDescriptor+Translateable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PresentationDescriptor+Translateable.swift"; sourceTree = ""; }; + 5534E64C294A0888005D0765 /* PresentationDescriptor+Mappable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PresentationDescriptor+Mappable.swift"; sourceTree = ""; }; 5534E666294A0B6C005D0765 /* Mappable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Mappable.swift; sourceTree = ""; }; 5534E668294A0C3F005D0765 /* Mapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Mapper.swift; sourceTree = ""; }; 5534E66D294A0F8F005D0765 /* Mapping.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Mapping.swift; sourceTree = ""; }; @@ -257,6 +256,9 @@ 5534E689294A5F7B005D0765 /* MockIdTokenDescriptor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockIdTokenDescriptor.swift; sourceTree = ""; }; 5534E68B294A8B8F005D0765 /* AccessTokenDescriptorMappingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessTokenDescriptorMappingTests.swift; sourceTree = ""; }; 5534E68D294A8BC3005D0765 /* MockAccessTokenDescriptor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockAccessTokenDescriptor.swift; sourceTree = ""; }; + 5534E6AC294AAFA6005D0765 /* PresentationDescriptorMappingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PresentationDescriptorMappingTests.swift; sourceTree = ""; }; + 5534E6AE294AAFF4005D0765 /* MockPresentationDescriptor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockPresentationDescriptor.swift; sourceTree = ""; }; + 5534E6B0294AB88B005D0765 /* MockIssuerDescriptor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockIssuerDescriptor.swift; sourceTree = ""; }; 55E33666293E7B5000CD2ED7 /* PMKFoundation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = PMKFoundation.xcodeproj; path = Foundation/PMKFoundation.xcodeproj; sourceTree = ""; }; 55E3366F293E7B5F00CD2ED7 /* PromiseKit.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = PromiseKit.xcodeproj; path = PromiseKit/PromiseKit.xcodeproj; sourceTree = ""; }; 55E33685293E7B7D00CD2ED7 /* Secp256k1.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Secp256k1.xcodeproj; path = Secp256k1/Secp256k1.xcodeproj; sourceTree = ""; }; @@ -384,15 +386,6 @@ name = Frameworks; sourceTree = ""; }; - 5534E5AE2948FA1C005D0765 /* Translators */ = { - isa = PBXGroup; - children = ( - 5534E5AF2948FAC5005D0765 /* RequestTranslator.swift */, - 5534E61A294933AB005D0765 /* ContractTranslator.swift */, - ); - path = Translators; - sourceTree = ""; - }; 5534E5B12948FC1B005D0765 /* Repositories */ = { isa = PBXGroup; children = ( @@ -439,7 +432,7 @@ 5534E676294A1FA0005D0765 /* AccessTokenDescriptor+Mappable.swift */, 5534E67A294A2B05005D0765 /* IssuanceRequest+Translateable.swift */, 5534E671294A19D5005D0765 /* IdTokenDescriptor+Mappable.swift */, - 5534E64C294A0888005D0765 /* PresentationDescriptor+Translateable.swift */, + 5534E64C294A0888005D0765 /* PresentationDescriptor+Mappable.swift */, 5534E66F294A1008005D0765 /* PresentationRequest+Translateable.swift */, 5534E678294A286A005D0765 /* SeltAttestedDescriptor+Translateable.swift */, ); @@ -468,6 +461,7 @@ 5534E68B294A8B8F005D0765 /* AccessTokenDescriptorMappingTests.swift */, 5534E680294A3978005D0765 /* SelfIssuedDescriptorMappingTests.swift */, 5534E687294A5F16005D0765 /* IdTokenDescriptorMappingTests.swift */, + 5534E6AC294AAFA6005D0765 /* PresentationDescriptorMappingTests.swift */, ); path = VCSDK; sourceTree = ""; @@ -478,6 +472,8 @@ 5534E68D294A8BC3005D0765 /* MockAccessTokenDescriptor.swift */, 5534E685294A3F19005D0765 /* MockClaimDescriptor.swift */, 5534E689294A5F7B005D0765 /* MockIdTokenDescriptor.swift */, + 5534E6B0294AB88B005D0765 /* MockIssuerDescriptor.swift */, + 5534E6AE294AAFF4005D0765 /* MockPresentationDescriptor.swift */, 5534E683294A3EC9005D0765 /* MockSelfIssuedClaimDescriptor.swift */, ); path = Mocks; @@ -586,7 +582,6 @@ 55E3370F293FDDF400CD2ED7 /* Requests */ = { isa = PBXGroup; children = ( - 5534E5AE2948FA1C005D0765 /* Translators */, 55E337432942311000CD2ED7 /* Handlers */, 55E33712293FDEDF00CD2ED7 /* Contract */, 55E336CF293FA6D900CD2ED7 /* Requirements */, @@ -968,7 +963,6 @@ buildActionMask = 2147483647; files = ( 5534E667294A0B6C005D0765 /* Mappable.swift in Sources */, - 5534E5B02948FAC5005D0765 /* RequestTranslator.swift in Sources */, 5534E67B294A2B05005D0765 /* IssuanceRequest+Translateable.swift in Sources */, 55E3370E293FD84700CD2ED7 /* IssuanceRequest.swift in Sources */, 55E3370A293FD3E000CD2ED7 /* IdTokenRequirement.swift in Sources */, @@ -978,12 +972,11 @@ 5534E679294A286A005D0765 /* SeltAttestedDescriptor+Translateable.swift in Sources */, 5534E66E294A0F8F005D0765 /* Mapping.swift in Sources */, 55E336D6293FA78C00CD2ED7 /* VerifiedIdClaim.swift in Sources */, - 5534E61B294933AB005D0765 /* ContractTranslator.swift in Sources */, 55E337652943749600CD2ED7 /* AsyncWrapper.swift in Sources */, 5534E5B52948FEB5005D0765 /* RootOfTrust.swift in Sources */, 55E337B52948B4B000CD2ED7 /* PinRequirement.swift in Sources */, 5534E669294A0C3F005D0765 /* Mapper.swift in Sources */, - 5534E64D294A0888005D0765 /* PresentationDescriptor+Translateable.swift in Sources */, + 5534E64D294A0888005D0765 /* PresentationDescriptor+Mappable.swift in Sources */, 55E337B42948B4B000CD2ED7 /* CredentialFormat.swift in Sources */, 55E3370C293FD61E00CD2ED7 /* SelfAttestedClaimRequirement.swift in Sources */, 55E3376829437E3500CD2ED7 /* PresentationServiceable.swift in Sources */, @@ -1004,6 +997,9 @@ buildActionMask = 2147483647; files = ( 55E3376B29478C5000CD2ED7 /* AsyncWrapperTests.swift in Sources */, + 5534E6B1294AB88B005D0765 /* MockIssuerDescriptor.swift in Sources */, + 5534E6AF294AAFF4005D0765 /* MockPresentationDescriptor.swift in Sources */, + 5534E6AD294AAFA6005D0765 /* PresentationDescriptorMappingTests.swift in Sources */, 5534E684294A3EC9005D0765 /* MockSelfIssuedClaimDescriptor.swift in Sources */, 5534E68A294A5F7B005D0765 /* MockIdTokenDescriptor.swift in Sources */, 5534E68C294A8B8F005D0765 /* AccessTokenDescriptorMappingTests.swift in Sources */, diff --git a/WalletLibrary/WalletLibrary/Extensions/Mappings/VCSDK/AccessTokenDescriptor+Mappable.swift b/WalletLibrary/WalletLibrary/Extensions/Mappings/VCSDK/AccessTokenDescriptor+Mappable.swift index d0e6c045..fdea9264 100644 --- a/WalletLibrary/WalletLibrary/Extensions/Mappings/VCSDK/AccessTokenDescriptor+Mappable.swift +++ b/WalletLibrary/WalletLibrary/Extensions/Mappings/VCSDK/AccessTokenDescriptor+Mappable.swift @@ -25,5 +25,4 @@ extension VCEntities.AccessTokenDescriptor: Mappable { resourceId: resourceId, scope: scope) } - } diff --git a/WalletLibrary/WalletLibrary/Extensions/Mappings/VCSDK/IdTokenDescriptor+Mappable.swift b/WalletLibrary/WalletLibrary/Extensions/Mappings/VCSDK/IdTokenDescriptor+Mappable.swift index 3f87d9a9..a8d41758 100644 --- a/WalletLibrary/WalletLibrary/Extensions/Mappings/VCSDK/IdTokenDescriptor+Mappable.swift +++ b/WalletLibrary/WalletLibrary/Extensions/Mappings/VCSDK/IdTokenDescriptor+Mappable.swift @@ -30,5 +30,4 @@ extension VCEntities.IdTokenDescriptor: Mappable { scope: scope, nonce: nil) } - } diff --git a/WalletLibrary/WalletLibrary/Extensions/Services/PresentationService+PresentationServiceable.swift b/WalletLibrary/WalletLibrary/Extensions/Services/PresentationService+PresentationServiceable.swift index 04241b6f..e13154ca 100644 --- a/WalletLibrary/WalletLibrary/Extensions/Services/PresentationService+PresentationServiceable.swift +++ b/WalletLibrary/WalletLibrary/Extensions/Services/PresentationService+PresentationServiceable.swift @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import VCServices import VCEntities +import VCServices /** * An extension of the VCServices.PresentationService class. diff --git a/WalletLibrary/WalletLibrary/Protocols/Services/PresentationServiceable.swift b/WalletLibrary/WalletLibrary/Protocols/Services/PresentationServiceable.swift index ed096010..7778817b 100644 --- a/WalletLibrary/WalletLibrary/Protocols/Services/PresentationServiceable.swift +++ b/WalletLibrary/WalletLibrary/Protocols/Services/PresentationServiceable.swift @@ -5,7 +5,9 @@ import VCEntities -/// Protocol that handles getting vc sdk presentation requests and sending vc sdk presentation responses. +/** + * Protocol that handles getting vc sdk presentation requests and sending vc sdk presentation responses. + */ protocol PresentationServiceable { /// Fetches and validates the presentation request. diff --git a/WalletLibrary/WalletLibrary/Protocols/Utilities/Mapping.swift b/WalletLibrary/WalletLibrary/Protocols/Utilities/Mapping.swift index 58b2c6c1..88720868 100644 --- a/WalletLibrary/WalletLibrary/Protocols/Utilities/Mapping.swift +++ b/WalletLibrary/WalletLibrary/Protocols/Utilities/Mapping.swift @@ -3,7 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -/// Protocol that defines a Mapper used to map one object to another. +/** + * Protocol that defines a Mapper used to map one object to another. + */ protocol Mapping { func map(_ object: T) throws -> T.T } diff --git a/WalletLibrary/WalletLibrary/Requests/Translators/ContractTranslator.swift b/WalletLibrary/WalletLibrary/Requests/Translators/ContractTranslator.swift deleted file mode 100644 index 11b10d78..00000000 --- a/WalletLibrary/WalletLibrary/Requests/Translators/ContractTranslator.swift +++ /dev/null @@ -1,79 +0,0 @@ -/*--------------------------------------------------------------------------------------------- -* Copyright (c) Microsoft Corporation. All rights reserved. -* Licensed under the MIT License. See License.txt in the project root for license information. -*--------------------------------------------------------------------------------------------*/ - -import VCEntities - -enum ContractTranslatorError: Error { - case NoIdTokenScopePresent - case NoRawValueInContract(contractUrl: String) - case NoVerifiedIdRequirementIdPresent -} - -/** - * - */ -class ContractTranslator { - - init() { } - -// func translate(contract: VCEntities.IssuanceRequest) async throws -> Contract { -// -// guard let rawContract = contract.token.rawValue else { -// throw ContractTranslatorError.NoRawValueInContract(contractUrl: contract.content.id) -// } -// -// let rootOfTrust = getRootOfTrust(contract: contract) -// let verifiedIdRequirements = try getVerifiedIdRequirements(contract: contract.content) -// -// return Contract(rootOfTrust: rootOfTrust, -// verifiedIdRequirements: <#T##[VerifiedIdRequirement]#>, -// idTokenRequirements: <#T##[IdTokenRequirement]#>, -// accessTokenRequirements: <#T##[AccessTokenRequirement]#>, -// selfAttestedClaimRequirements: <#T##[SelfAttestedClaimRequirement]#>, -// raw: rawContract) -// } - - private func getRootOfTrust(contract: VCEntities.IssuanceRequest) -> RootOfTrust { - - switch contract.linkedDomainResult { - case .linkedDomainMissing: - return RootOfTrust(verified: false, source: nil) - case .linkedDomainUnverified(let domainUrl): - return RootOfTrust(verified: false, source: domainUrl) - case .linkedDomainVerified(let domainUrl): - return RootOfTrust(verified: true, source: domainUrl) - } - } - - private func getVerifiedIdRequirements(contract: VCEntities.Contract) throws -> [VerifiedIdRequirement] { - - guard let vpRequirements = contract.input.attestations?.presentations else { - return [] - } - - let verifiedIdRequirements = try vpRequirements.map { vpRequirement in - try translateVerifiedIdRequirement(vpRequirement: vpRequirement) - } - - return verifiedIdRequirements - } - - private func translateVerifiedIdRequirement(vpRequirement: PresentationDescriptor) throws -> VerifiedIdRequirement { - - let acceptedIssuers = vpRequirement.issuers?.compactMap { $0.iss } ?? [] - - var issuanceParams: CredentialIssuanceParams? = nil - if let contracts = vpRequirement.contracts { - issuanceParams = CredentialIssuanceParams(acceptedIssuers: acceptedIssuers, credentialIssuerMetadata: contracts) - } - - return VerifiedIdRequirement(encrypted: vpRequirement.encrypted ?? false, - required: vpRequirement.presentationRequired ?? false, - types: [vpRequirement.credentialType], - acceptedIssuers: acceptedIssuers, - purpose: nil, - credentialIssuanceParams: issuanceParams) - } -} diff --git a/WalletLibrary/WalletLibrary/VerifiedIdFlow.swift b/WalletLibrary/WalletLibrary/VerifiedIdFlow.swift index 4c041387..8bbfd930 100644 --- a/WalletLibrary/WalletLibrary/VerifiedIdFlow.swift +++ b/WalletLibrary/WalletLibrary/VerifiedIdFlow.swift @@ -3,51 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import VCServices +import Foundation import VCEntities -public enum VerifiedIdFlowError: Error { - case Unimplemented -} - -/** - * External Interface/Protocol that handles Issuance and Presentation Flows. - */ public class VerifiedIdFlow { - /// User scans QR code/deep-links to app. Request URI contained within QR code, and returns either an Issuance or Presentation Request. - public func initiate(requestUri: URL) async throws -> Request { - let request = try await RequestHandler().handle(requestUri: requestUri) - print(request) - return request - } - - /// Returns true if VerifiedIdFlow can handle request uri, else returns false - public func canHandle(requestUri: URL) -> Bool { - return false - } - - /// Dev might choose to fetch contract for use cases like issuance during presentation/notifications without access to a requestUrl but rather just the Contract URL. - public func initiate(credentialIssuanceParams: CredentialIssuanceParams) async throws -> IssuanceRequest { - throw VerifiedIdFlowError.Unimplemented - } - /// Send presentation response to verifier, optional options for persona/did/algorithm extensibility. -// func complete(response: PresentationResponse, options: PresentationOptions?) async throws -> Void - - /// If there is a user error, or error outside of SDK control, send presentation completion error. -// func completeWithError(response: PresentationResponse, error: Error) -> Void - - /// Send issuance response to issuer and issuance completion response, optional options for persona/did/algorithm extensibility. - public func complete(response: IssuanceResponse, options: IssuanceOptions?) async throws -> VerifiedId { - throw VerifiedIdFlowError.Unimplemented - } + public init() {} - /// If there is a user error, or error outside of SDK control, send issuance completion error. - public func completeWithError(response: IssuanceResponse, error: Error) async throws -> Void { - throw VerifiedIdFlowError.Unimplemented + public func initiate() -> String { + return "Hello World" } } - -public struct IssuanceResponse {} - -public struct IssuanceOptions {} diff --git a/WalletLibrary/WalletLibraryTests/VerifiedIdFlowTests.swift b/WalletLibrary/WalletLibraryTests/VerifiedIdFlowTests.swift index 92f54807..89f48d05 100644 --- a/WalletLibrary/WalletLibraryTests/VerifiedIdFlowTests.swift +++ b/WalletLibrary/WalletLibraryTests/VerifiedIdFlowTests.swift @@ -16,10 +16,8 @@ class VerifiedIdFlowTests: XCTestCase { // Put teardown code here. This method is called after the invocation of each test method in the class. } - func testInitiateFlow() async throws { - let requestUri = URL(string: "openid-vc://?request_uri=https://beta.did.msidentity.com/v1.0/tenants/9c59be8b-bd18-45d9-b9d9-082bc07c094f/verifiableCredentials/issuanceRequests/4eba26a1-ce31-435b-9f2a-f8a783fce5f8")! - let request = try await VerifiedIdFlow().initiate(requestUri: requestUri) - print(request) + func testInitiateFlow() throws { + print(VerifiedIdFlow().initiate()) } func testPerformanceExample() throws { From af047730fc9058d5bfa0c3735a97294ca1d72a35 Mon Sep 17 00:00:00 2001 From: Sydney Morton Date: Thu, 15 Dec 2022 08:22:04 -0500 Subject: [PATCH 37/38] Fix small nit in tests --- .../Utilities/AsyncWrapperTests.swift | 10 ++++++---- .../WalletLibraryTests/VerifiedIdFlowTests.swift | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/WalletLibrary/WalletLibraryTests/Utilities/AsyncWrapperTests.swift b/WalletLibrary/WalletLibraryTests/Utilities/AsyncWrapperTests.swift index 35ffa49f..2fe80eed 100644 --- a/WalletLibrary/WalletLibraryTests/Utilities/AsyncWrapperTests.swift +++ b/WalletLibrary/WalletLibraryTests/Utilities/AsyncWrapperTests.swift @@ -15,6 +15,8 @@ class AsyncWrapperTests: XCTestCase { private let asyncWrapper = AsyncWrapper() + private let expectedResult = "expected1243" + private func testCase(input: String) -> Promise { return Promise.value(input) } @@ -24,18 +26,18 @@ class AsyncWrapperTests: XCTestCase { } func testSuccessfulWrapping() async throws { - let expectedResult = "expected1223" + let actualResult = try await asyncWrapper.wrap { () in - self.testCase(input: expectedResult) + self.testCase(input: self.expectedResult) }() + XCTAssertEqual(expectedResult, actualResult) } func testWrappingThrowsError() async throws { - let expectedResult = "expected1243" let wrappedFunction = asyncWrapper.wrap { () in - self.errorThrowingTestCase(input: expectedResult) + self.errorThrowingTestCase(input: self.expectedResult) } do { let result = try await wrappedFunction() diff --git a/WalletLibrary/WalletLibraryTests/VerifiedIdFlowTests.swift b/WalletLibrary/WalletLibraryTests/VerifiedIdFlowTests.swift index 89f48d05..126c86f7 100644 --- a/WalletLibrary/WalletLibraryTests/VerifiedIdFlowTests.swift +++ b/WalletLibrary/WalletLibraryTests/VerifiedIdFlowTests.swift @@ -17,7 +17,7 @@ class VerifiedIdFlowTests: XCTestCase { } func testInitiateFlow() throws { - print(VerifiedIdFlow().initiate()) + print(VerifiedIdFlow().initiate()) } func testPerformanceExample() throws { From ac90987b9684e07976168978f262a10252243a5f Mon Sep 17 00:00:00 2001 From: Sydney Morton Date: Fri, 16 Dec 2022 08:44:02 -0500 Subject: [PATCH 38/38] Remove mocked data models and use VC SDK data models instead for testing --- .../Submodules/VerifiableCredential-SDK-iOS | 2 +- .../WalletLibrary.xcodeproj/project.pbxproj | 60 --------------- .../AccessTokenDescriptorMappingTests.swift | 76 ++++++++----------- .../VCSDK/IdTokenDescriptorMappingTests.swift | 75 ++++++++---------- .../PresentationDescriptorMappingTests.swift | 29 +++---- .../Mocks/MockAccessTokenDescriptor.swift | 14 ---- .../Mocks/MockClaimDescriptor.swift | 16 ---- .../Mocks/MockIdTokenDescriptor.swift | 24 ------ .../Mocks/MockIssuerDescriptor.swift | 8 -- .../Mocks/MockPresentationDescriptor.swift | 19 ----- .../Mocks/MockSelfIssuedClaimDescriptor.swift | 16 ---- 11 files changed, 73 insertions(+), 266 deletions(-) delete mode 100644 WalletLibrary/WalletLibraryTests/Mocks/MockAccessTokenDescriptor.swift delete mode 100644 WalletLibrary/WalletLibraryTests/Mocks/MockClaimDescriptor.swift delete mode 100644 WalletLibrary/WalletLibraryTests/Mocks/MockIdTokenDescriptor.swift delete mode 100644 WalletLibrary/WalletLibraryTests/Mocks/MockIssuerDescriptor.swift delete mode 100644 WalletLibrary/WalletLibraryTests/Mocks/MockPresentationDescriptor.swift delete mode 100644 WalletLibrary/WalletLibraryTests/Mocks/MockSelfIssuedClaimDescriptor.swift diff --git a/WalletLibrary/Submodules/VerifiableCredential-SDK-iOS b/WalletLibrary/Submodules/VerifiableCredential-SDK-iOS index 7e25576f..adc058da 160000 --- a/WalletLibrary/Submodules/VerifiableCredential-SDK-iOS +++ b/WalletLibrary/Submodules/VerifiableCredential-SDK-iOS @@ -1 +1 @@ -Subproject commit 7e25576f3d3d1f881eedf697fcab4af7c95e5f08 +Subproject commit adc058da72b76d01aa6f137c67e17a55967141ab diff --git a/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj b/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj index 6929771a..d217a464 100644 --- a/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj +++ b/WalletLibrary/WalletLibrary.xcodeproj/project.pbxproj @@ -15,27 +15,16 @@ 5534E5982948B8C2005D0765 /* VCServices.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 55E336E7293FCE4F00CD2ED7 /* VCServices.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 5534E5AC2948B8C8005D0765 /* VCEntities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55E336DE293FCE4200CD2ED7 /* VCEntities.framework */; platformFilter = ios; }; 5534E5AD2948B8C8005D0765 /* VCEntities.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 55E336DE293FCE4200CD2ED7 /* VCEntities.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 5534E5B32948FC9C005D0765 /* RequestRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E5B22948FC9C005D0765 /* RequestRepository.swift */; }; 5534E5B52948FEB5005D0765 /* RootOfTrust.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E5B42948FEB5005D0765 /* RootOfTrust.swift */; }; 5534E64D294A0888005D0765 /* PresentationDescriptor+Mappable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E64C294A0888005D0765 /* PresentationDescriptor+Mappable.swift */; }; 5534E667294A0B6C005D0765 /* Mappable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E666294A0B6C005D0765 /* Mappable.swift */; }; 5534E669294A0C3F005D0765 /* Mapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E668294A0C3F005D0765 /* Mapper.swift */; }; 5534E66E294A0F8F005D0765 /* Mapping.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E66D294A0F8F005D0765 /* Mapping.swift */; }; - 5534E670294A1008005D0765 /* PresentationRequest+Translateable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E66F294A1008005D0765 /* PresentationRequest+Translateable.swift */; }; 5534E672294A19D5005D0765 /* IdTokenDescriptor+Mappable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E671294A19D5005D0765 /* IdTokenDescriptor+Mappable.swift */; }; 5534E677294A1FA0005D0765 /* AccessTokenDescriptor+Mappable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E676294A1FA0005D0765 /* AccessTokenDescriptor+Mappable.swift */; }; - 5534E679294A286A005D0765 /* SeltAttestedDescriptor+Translateable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E678294A286A005D0765 /* SeltAttestedDescriptor+Translateable.swift */; }; - 5534E67B294A2B05005D0765 /* IssuanceRequest+Translateable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E67A294A2B05005D0765 /* IssuanceRequest+Translateable.swift */; }; - 5534E681294A3978005D0765 /* SelfIssuedDescriptorMappingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E680294A3978005D0765 /* SelfIssuedDescriptorMappingTests.swift */; }; - 5534E684294A3EC9005D0765 /* MockSelfIssuedClaimDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E683294A3EC9005D0765 /* MockSelfIssuedClaimDescriptor.swift */; }; - 5534E686294A3F19005D0765 /* MockClaimDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E685294A3F19005D0765 /* MockClaimDescriptor.swift */; }; 5534E688294A5F16005D0765 /* IdTokenDescriptorMappingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E687294A5F16005D0765 /* IdTokenDescriptorMappingTests.swift */; }; - 5534E68A294A5F7B005D0765 /* MockIdTokenDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E689294A5F7B005D0765 /* MockIdTokenDescriptor.swift */; }; 5534E68C294A8B8F005D0765 /* AccessTokenDescriptorMappingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E68B294A8B8F005D0765 /* AccessTokenDescriptorMappingTests.swift */; }; - 5534E68E294A8BC4005D0765 /* MockAccessTokenDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E68D294A8BC3005D0765 /* MockAccessTokenDescriptor.swift */; }; 5534E6AD294AAFA6005D0765 /* PresentationDescriptorMappingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E6AC294AAFA6005D0765 /* PresentationDescriptorMappingTests.swift */; }; - 5534E6AF294AAFF4005D0765 /* MockPresentationDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E6AE294AAFF4005D0765 /* MockPresentationDescriptor.swift */; }; - 5534E6B1294AB88B005D0765 /* MockIssuerDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5534E6B0294AB88B005D0765 /* MockIssuerDescriptor.swift */; }; 55E33684293E7B6600CD2ED7 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55E33679293E7B5F00CD2ED7 /* PromiseKit.framework */; }; 55E336D1293FA6F400CD2ED7 /* VerifiedIdRequirement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E336D0293FA6F400CD2ED7 /* VerifiedIdRequirement.swift */; }; 55E336D4293FA75300CD2ED7 /* VerifiedId.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E336D3293FA75300CD2ED7 /* VerifiedId.swift */; }; @@ -238,27 +227,16 @@ 552E51D8293E71D700868F47 /* VCToken.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = VCToken.xcodeproj; path = VCToken/VCToken.xcodeproj; sourceTree = ""; }; 552E5229293E71D700868F47 /* VCCrypto.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = VCCrypto.xcodeproj; path = VCCrypto/VCCrypto.xcodeproj; sourceTree = ""; }; 552E5237293E71D700868F47 /* VCNetworking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = VCNetworking.xcodeproj; path = VCNetworking/VCNetworking.xcodeproj; sourceTree = ""; }; - 5534E5B22948FC9C005D0765 /* RequestRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestRepository.swift; sourceTree = ""; }; 5534E5B42948FEB5005D0765 /* RootOfTrust.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootOfTrust.swift; sourceTree = ""; }; 5534E64C294A0888005D0765 /* PresentationDescriptor+Mappable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PresentationDescriptor+Mappable.swift"; sourceTree = ""; }; 5534E666294A0B6C005D0765 /* Mappable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Mappable.swift; sourceTree = ""; }; 5534E668294A0C3F005D0765 /* Mapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Mapper.swift; sourceTree = ""; }; 5534E66D294A0F8F005D0765 /* Mapping.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Mapping.swift; sourceTree = ""; }; - 5534E66F294A1008005D0765 /* PresentationRequest+Translateable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PresentationRequest+Translateable.swift"; sourceTree = ""; }; 5534E671294A19D5005D0765 /* IdTokenDescriptor+Mappable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "IdTokenDescriptor+Mappable.swift"; sourceTree = ""; }; 5534E676294A1FA0005D0765 /* AccessTokenDescriptor+Mappable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AccessTokenDescriptor+Mappable.swift"; sourceTree = ""; }; - 5534E678294A286A005D0765 /* SeltAttestedDescriptor+Translateable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SeltAttestedDescriptor+Translateable.swift"; sourceTree = ""; }; - 5534E67A294A2B05005D0765 /* IssuanceRequest+Translateable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "IssuanceRequest+Translateable.swift"; sourceTree = ""; }; - 5534E680294A3978005D0765 /* SelfIssuedDescriptorMappingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelfIssuedDescriptorMappingTests.swift; sourceTree = ""; }; - 5534E683294A3EC9005D0765 /* MockSelfIssuedClaimDescriptor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockSelfIssuedClaimDescriptor.swift; sourceTree = ""; }; - 5534E685294A3F19005D0765 /* MockClaimDescriptor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockClaimDescriptor.swift; sourceTree = ""; }; 5534E687294A5F16005D0765 /* IdTokenDescriptorMappingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IdTokenDescriptorMappingTests.swift; sourceTree = ""; }; - 5534E689294A5F7B005D0765 /* MockIdTokenDescriptor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockIdTokenDescriptor.swift; sourceTree = ""; }; 5534E68B294A8B8F005D0765 /* AccessTokenDescriptorMappingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessTokenDescriptorMappingTests.swift; sourceTree = ""; }; - 5534E68D294A8BC3005D0765 /* MockAccessTokenDescriptor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockAccessTokenDescriptor.swift; sourceTree = ""; }; 5534E6AC294AAFA6005D0765 /* PresentationDescriptorMappingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PresentationDescriptorMappingTests.swift; sourceTree = ""; }; - 5534E6AE294AAFF4005D0765 /* MockPresentationDescriptor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockPresentationDescriptor.swift; sourceTree = ""; }; - 5534E6B0294AB88B005D0765 /* MockIssuerDescriptor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockIssuerDescriptor.swift; sourceTree = ""; }; 55E33666293E7B5000CD2ED7 /* PMKFoundation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = PMKFoundation.xcodeproj; path = Foundation/PMKFoundation.xcodeproj; sourceTree = ""; }; 55E3366F293E7B5F00CD2ED7 /* PromiseKit.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = PromiseKit.xcodeproj; path = PromiseKit/PromiseKit.xcodeproj; sourceTree = ""; }; 55E33685293E7B7D00CD2ED7 /* Secp256k1.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Secp256k1.xcodeproj; path = Secp256k1/Secp256k1.xcodeproj; sourceTree = ""; }; @@ -327,7 +305,6 @@ children = ( 55E337BA2948B5E700CD2ED7 /* Extensions */, 55E3375B294231F000CD2ED7 /* Protocols */, - 5534E5B12948FC1B005D0765 /* Repositories */, 55E3370F293FDDF400CD2ED7 /* Requests */, 55E336D2293FA74100CD2ED7 /* VerifiedId */, 55E337632943747E00CD2ED7 /* Utilities */, @@ -340,7 +317,6 @@ 552E509E293E6AB200868F47 /* WalletLibraryTests */ = { isa = PBXGroup; children = ( - 5534E682294A3EB3005D0765 /* Mocks */, 5534E67C294A392F005D0765 /* Extensions */, 55E3376929478C3300CD2ED7 /* Utilities */, 552E509F293E6AB200868F47 /* VerifiedIdFlowTests.swift */, @@ -386,14 +362,6 @@ name = Frameworks; sourceTree = ""; }; - 5534E5B12948FC1B005D0765 /* Repositories */ = { - isa = PBXGroup; - children = ( - 5534E5B22948FC9C005D0765 /* RequestRepository.swift */, - ); - path = Repositories; - sourceTree = ""; - }; 5534E663294A0B28005D0765 /* Mappings */ = { isa = PBXGroup; children = ( @@ -430,11 +398,8 @@ isa = PBXGroup; children = ( 5534E676294A1FA0005D0765 /* AccessTokenDescriptor+Mappable.swift */, - 5534E67A294A2B05005D0765 /* IssuanceRequest+Translateable.swift */, 5534E671294A19D5005D0765 /* IdTokenDescriptor+Mappable.swift */, 5534E64C294A0888005D0765 /* PresentationDescriptor+Mappable.swift */, - 5534E66F294A1008005D0765 /* PresentationRequest+Translateable.swift */, - 5534E678294A286A005D0765 /* SeltAttestedDescriptor+Translateable.swift */, ); path = VCSDK; sourceTree = ""; @@ -459,26 +424,12 @@ isa = PBXGroup; children = ( 5534E68B294A8B8F005D0765 /* AccessTokenDescriptorMappingTests.swift */, - 5534E680294A3978005D0765 /* SelfIssuedDescriptorMappingTests.swift */, 5534E687294A5F16005D0765 /* IdTokenDescriptorMappingTests.swift */, 5534E6AC294AAFA6005D0765 /* PresentationDescriptorMappingTests.swift */, ); path = VCSDK; sourceTree = ""; }; - 5534E682294A3EB3005D0765 /* Mocks */ = { - isa = PBXGroup; - children = ( - 5534E68D294A8BC3005D0765 /* MockAccessTokenDescriptor.swift */, - 5534E685294A3F19005D0765 /* MockClaimDescriptor.swift */, - 5534E689294A5F7B005D0765 /* MockIdTokenDescriptor.swift */, - 5534E6B0294AB88B005D0765 /* MockIssuerDescriptor.swift */, - 5534E6AE294AAFF4005D0765 /* MockPresentationDescriptor.swift */, - 5534E683294A3EC9005D0765 /* MockSelfIssuedClaimDescriptor.swift */, - ); - path = Mocks; - sourceTree = ""; - }; 55E33667293E7B5000CD2ED7 /* Products */ = { isa = PBXGroup; children = ( @@ -963,13 +914,10 @@ buildActionMask = 2147483647; files = ( 5534E667294A0B6C005D0765 /* Mappable.swift in Sources */, - 5534E67B294A2B05005D0765 /* IssuanceRequest+Translateable.swift in Sources */, 55E3370E293FD84700CD2ED7 /* IssuanceRequest.swift in Sources */, 55E3370A293FD3E000CD2ED7 /* IdTokenRequirement.swift in Sources */, 55E336D8293FCE0500CD2ED7 /* CredentialIssuanceParams.swift in Sources */, 55E336D1293FA6F400CD2ED7 /* VerifiedIdRequirement.swift in Sources */, - 5534E670294A1008005D0765 /* PresentationRequest+Translateable.swift in Sources */, - 5534E679294A286A005D0765 /* SeltAttestedDescriptor+Translateable.swift in Sources */, 5534E66E294A0F8F005D0765 /* Mapping.swift in Sources */, 55E336D6293FA78C00CD2ED7 /* VerifiedIdClaim.swift in Sources */, 55E337652943749600CD2ED7 /* AsyncWrapper.swift in Sources */, @@ -988,7 +936,6 @@ 55E337BC2948B5FE00CD2ED7 /* PresentationService+PresentationServiceable.swift in Sources */, 55E336D4293FA75300CD2ED7 /* VerifiedId.swift in Sources */, 55E33708293FD25900CD2ED7 /* AccessTokenRequirement.swift in Sources */, - 5534E5B32948FC9C005D0765 /* RequestRepository.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -997,17 +944,10 @@ buildActionMask = 2147483647; files = ( 55E3376B29478C5000CD2ED7 /* AsyncWrapperTests.swift in Sources */, - 5534E6B1294AB88B005D0765 /* MockIssuerDescriptor.swift in Sources */, - 5534E6AF294AAFF4005D0765 /* MockPresentationDescriptor.swift in Sources */, 5534E6AD294AAFA6005D0765 /* PresentationDescriptorMappingTests.swift in Sources */, - 5534E684294A3EC9005D0765 /* MockSelfIssuedClaimDescriptor.swift in Sources */, - 5534E68A294A5F7B005D0765 /* MockIdTokenDescriptor.swift in Sources */, 5534E68C294A8B8F005D0765 /* AccessTokenDescriptorMappingTests.swift in Sources */, 552E50A0293E6AB200868F47 /* VerifiedIdFlowTests.swift in Sources */, - 5534E681294A3978005D0765 /* SelfIssuedDescriptorMappingTests.swift in Sources */, - 5534E68E294A8BC4005D0765 /* MockAccessTokenDescriptor.swift in Sources */, 5534E688294A5F16005D0765 /* IdTokenDescriptorMappingTests.swift in Sources */, - 5534E686294A3F19005D0765 /* MockClaimDescriptor.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/WalletLibrary/WalletLibraryTests/Extensions/Translations/VCSDK/AccessTokenDescriptorMappingTests.swift b/WalletLibrary/WalletLibraryTests/Extensions/Translations/VCSDK/AccessTokenDescriptorMappingTests.swift index 75f114a3..a56345a1 100644 --- a/WalletLibrary/WalletLibraryTests/Extensions/Translations/VCSDK/AccessTokenDescriptorMappingTests.swift +++ b/WalletLibrary/WalletLibraryTests/Extensions/Translations/VCSDK/AccessTokenDescriptorMappingTests.swift @@ -1,7 +1,7 @@ /*--------------------------------------------------------------------------------------------- -* Copyright (c) Microsoft Corporation. All rights reserved. -* Licensed under the MIT License. See License.txt in the project root for license information. -*--------------------------------------------------------------------------------------------*/ + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ import XCTest import VCEntities @@ -52,15 +52,13 @@ class AccessTokenDescriptorMappingTests: XCTestCase { } func testMappingWithNoConfigurationPresentError() throws { - let mockedInput = MockAccessTokenDescriptor(id: expectedId, - encrypted: false, - claims: [], - required: false, - configuration: nil, - resourceId: expectedResourceId, - oboScope: expectedScope) - - let input = try setUpInput(mockedInput: mockedInput) + let input = AccessTokenDescriptor(id: expectedId, + encrypted: false, + claims: [], + required: false, + configuration: nil, + resourceId: expectedResourceId, + oboScope: expectedScope) XCTAssertThrowsError(try mapper.map(input)) { error in XCTAssert(error is MappingError) @@ -71,15 +69,13 @@ class AccessTokenDescriptorMappingTests: XCTestCase { } func testMappingWithNoResourceIdPresentError() throws { - let mockedInput = MockAccessTokenDescriptor(id: expectedId, - encrypted: false, - claims: [], - required: false, - configuration: expectedConfiguration, - resourceId: nil, - oboScope: expectedScope) - - let input = try setUpInput(mockedInput: mockedInput) + let input = AccessTokenDescriptor(id: expectedId, + encrypted: false, + claims: [], + required: false, + configuration: expectedConfiguration, + resourceId: nil, + oboScope: expectedScope) XCTAssertThrowsError(try mapper.map(input)) { error in XCTAssert(error is MappingError) @@ -90,15 +86,13 @@ class AccessTokenDescriptorMappingTests: XCTestCase { } func testMappingWithNoScopePresentError() throws { - let mockedInput = MockAccessTokenDescriptor(id: expectedId, - encrypted: false, - claims: [], - required: false, - configuration: expectedConfiguration, - resourceId: expectedResourceId, - oboScope: nil) - - let input = try setUpInput(mockedInput: mockedInput) + let input = AccessTokenDescriptor(id: expectedId, + encrypted: false, + claims: [], + required: false, + configuration: expectedConfiguration, + resourceId: expectedResourceId, + oboScope: nil) XCTAssertThrowsError(try mapper.map(input)) { error in XCTAssert(error is MappingError) @@ -110,13 +104,13 @@ class AccessTokenDescriptorMappingTests: XCTestCase { private func setUpInput(encrypted: Bool?, required: Bool?) throws -> (AccessTokenDescriptor, AccessTokenRequirement) { - let mockedInput = MockAccessTokenDescriptor(id: expectedId, - encrypted: encrypted, - claims: [], - required: required, - configuration: expectedConfiguration, - resourceId: expectedResourceId, - oboScope: expectedScope) + let input = AccessTokenDescriptor(id: expectedId, + encrypted: encrypted, + claims: [], + required: required, + configuration: expectedConfiguration, + resourceId: expectedResourceId, + oboScope: expectedScope) let expectedResult = AccessTokenRequirement(encrypted: encrypted ?? false, required: required ?? false, @@ -125,14 +119,6 @@ class AccessTokenDescriptorMappingTests: XCTestCase { resourceId: expectedResourceId, scope: expectedScope) - let input = try setUpInput(mockedInput: mockedInput) return (input, expectedResult) } - - private func setUpInput(mockedInput: MockAccessTokenDescriptor) throws -> AccessTokenDescriptor { - let encodedData = try encoder.encode(mockedInput) - let expectedInput = try decoder.decode(AccessTokenDescriptor.self, from: encodedData) - return expectedInput - } } - diff --git a/WalletLibrary/WalletLibraryTests/Extensions/Translations/VCSDK/IdTokenDescriptorMappingTests.swift b/WalletLibrary/WalletLibraryTests/Extensions/Translations/VCSDK/IdTokenDescriptorMappingTests.swift index 5e26cf34..b5b441f3 100644 --- a/WalletLibrary/WalletLibraryTests/Extensions/Translations/VCSDK/IdTokenDescriptorMappingTests.swift +++ b/WalletLibrary/WalletLibraryTests/Extensions/Translations/VCSDK/IdTokenDescriptorMappingTests.swift @@ -1,7 +1,7 @@ /*--------------------------------------------------------------------------------------------- -* Copyright (c) Microsoft Corporation. All rights reserved. -* Licensed under the MIT License. See License.txt in the project root for license information. -*--------------------------------------------------------------------------------------------*/ + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ import XCTest import VCEntities @@ -51,15 +51,13 @@ class IdTokenDescriptorMappingTests: XCTestCase { } func testMappingWithNoRedirectUrlPresentError() throws { - let mockedInput = MockIdTokenDescriptor(encrypted: false, - claims: [], - idTokenRequired: false, - configuration: expectedConfiguration, - clientID: expectedClientId, - redirectURI: nil, - scope: expectedScope) - - let input = try setUpInput(mockedInput: mockedInput) + let input = IdTokenDescriptor(encrypted: false, + claims: [], + idTokenRequired: false, + configuration: expectedConfiguration, + clientID: expectedClientId, + redirectURI: nil, + scope: expectedScope) XCTAssertThrowsError(try mapper.map(input)) { error in XCTAssert(error is MappingError) @@ -69,15 +67,13 @@ class IdTokenDescriptorMappingTests: XCTestCase { } func testMappingWithNoClientIdPresentError() throws { - let mockedInput = MockIdTokenDescriptor(encrypted: false, - claims: [], - idTokenRequired: false, - configuration: "$|[%=", - clientID: expectedConfiguration, - redirectURI: expectedRedirectUri, - scope: expectedScope) - - let input = try setUpInput(mockedInput: mockedInput) + let input = IdTokenDescriptor(encrypted: false, + claims: [], + idTokenRequired: false, + configuration: "$|[%=", + clientID: expectedConfiguration, + redirectURI: expectedRedirectUri, + scope: expectedScope) XCTAssertThrowsError(try mapper.map(input)) { error in XCTAssert(error is MappingError) @@ -87,15 +83,13 @@ class IdTokenDescriptorMappingTests: XCTestCase { } func testMappingWithNoScopePresentError() throws { - let mockedInput = MockIdTokenDescriptor(encrypted: false, - claims: [], - idTokenRequired: false, - configuration: expectedConfiguration, - clientID: expectedClientId, - redirectURI: expectedRedirectUri, - scope: nil) - - let input = try setUpInput(mockedInput: mockedInput) + let input = IdTokenDescriptor(encrypted: false, + claims: [], + idTokenRequired: false, + configuration: expectedConfiguration, + clientID: expectedClientId, + redirectURI: expectedRedirectUri, + scope: nil) XCTAssertThrowsError(try mapper.map(input)) { error in XCTAssert(error is MappingError) @@ -105,13 +99,13 @@ class IdTokenDescriptorMappingTests: XCTestCase { } private func setUpInput(encrypted: Bool?, required: Bool?) throws -> (IdTokenDescriptor, IdTokenRequirement) { - let mockedInput = MockIdTokenDescriptor(encrypted: encrypted, - claims: [], - idTokenRequired: required, - configuration: expectedConfiguration, - clientID: expectedClientId, - redirectURI: expectedRedirectUri, - scope: expectedScope) + let input = IdTokenDescriptor(encrypted: encrypted, + claims: [], + idTokenRequired: required, + configuration: expectedConfiguration, + clientID: expectedClientId, + redirectURI: expectedRedirectUri, + scope: expectedScope) let expectedResult = IdTokenRequirement(encrypted: encrypted ?? false, required: required ?? false, @@ -120,13 +114,6 @@ class IdTokenDescriptorMappingTests: XCTestCase { redirectUri: expectedRedirectUri, scope: expectedScope) - let input = try setUpInput(mockedInput: mockedInput) return (input, expectedResult) } - - private func setUpInput(mockedInput: MockIdTokenDescriptor) throws -> IdTokenDescriptor { - let encodedData = try encoder.encode(mockedInput) - let expectedInput = try decoder.decode(IdTokenDescriptor.self, from: encodedData) - return expectedInput - } } diff --git a/WalletLibrary/WalletLibraryTests/Extensions/Translations/VCSDK/PresentationDescriptorMappingTests.swift b/WalletLibrary/WalletLibraryTests/Extensions/Translations/VCSDK/PresentationDescriptorMappingTests.swift index 856187db..30976cea 100644 --- a/WalletLibrary/WalletLibraryTests/Extensions/Translations/VCSDK/PresentationDescriptorMappingTests.swift +++ b/WalletLibrary/WalletLibraryTests/Extensions/Translations/VCSDK/PresentationDescriptorMappingTests.swift @@ -1,7 +1,7 @@ /*--------------------------------------------------------------------------------------------- -* Copyright (c) Microsoft Corporation. All rights reserved. -* Licensed under the MIT License. See License.txt in the project root for license information. -*--------------------------------------------------------------------------------------------*/ + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ import XCTest import VCEntities @@ -86,13 +86,13 @@ class PresentationDescriptorMappingTests: XCTestCase { issuers: [String?]? = [], contracts: [String]? = []) throws -> (PresentationDescriptor, VerifiedIdRequirement) { - let mockedIssuers = issuers?.compactMap { MockIssuerDescriptor(iss: $0) } - let mockedInput = MockPresentationDescriptor(encrypted: encrypted, - claims: [], - presentationRequired: required, - credentialType: exceptedCredentialType, - issuers: mockedIssuers, - contracts: contracts) + let issuersInput = issuers?.compactMap { IssuerDescriptor(iss: $0) } + let input = PresentationDescriptor(encrypted: encrypted, + claims: [], + presentationRequired: required, + credentialType: exceptedCredentialType, + issuers: issuersInput, + contracts: contracts) let expectedIssuers = issuers?.compactMap { $0 } ?? [] @@ -109,15 +109,6 @@ class PresentationDescriptorMappingTests: XCTestCase { acceptedIssuers: expectedIssuers, purpose: nil, credentialIssuanceParams: expectedIssuanceParams) - - let input = try setUpInput(mockedInput: mockedInput) return (input, expectedResult) } - - private func setUpInput(mockedInput: MockPresentationDescriptor) throws -> PresentationDescriptor { - let encodedData = try encoder.encode(mockedInput) - let expectedInput = try decoder.decode(PresentationDescriptor.self, from: encodedData) - return expectedInput - } - } diff --git a/WalletLibrary/WalletLibraryTests/Mocks/MockAccessTokenDescriptor.swift b/WalletLibrary/WalletLibraryTests/Mocks/MockAccessTokenDescriptor.swift deleted file mode 100644 index e973fc49..00000000 --- a/WalletLibrary/WalletLibraryTests/Mocks/MockAccessTokenDescriptor.swift +++ /dev/null @@ -1,14 +0,0 @@ -/*--------------------------------------------------------------------------------------------- -* Copyright (c) Microsoft Corporation. All rights reserved. -* Licensed under the MIT License. See License.txt in the project root for license information. -*--------------------------------------------------------------------------------------------*/ - -struct MockAccessTokenDescriptor: Codable, Equatable { - let id: String? - let encrypted: Bool? - let claims: [MockClaimDescriptor]? - let required: Bool? - let configuration: String? - let resourceId: String? - let oboScope: String? -} diff --git a/WalletLibrary/WalletLibraryTests/Mocks/MockClaimDescriptor.swift b/WalletLibrary/WalletLibraryTests/Mocks/MockClaimDescriptor.swift deleted file mode 100644 index 35675340..00000000 --- a/WalletLibrary/WalletLibraryTests/Mocks/MockClaimDescriptor.swift +++ /dev/null @@ -1,16 +0,0 @@ -/*--------------------------------------------------------------------------------------------- -* Copyright (c) Microsoft Corporation. All rights reserved. -* Licensed under the MIT License. See License.txt in the project root for license information. -*--------------------------------------------------------------------------------------------*/ - -struct MockClaimDescriptor: Codable, Equatable { - let claim: String - let claimRequired: Bool? - let indexed: Bool? - - enum CodingKeys: String, CodingKey { - case claim - case claimRequired = "required" - case indexed - } -} diff --git a/WalletLibrary/WalletLibraryTests/Mocks/MockIdTokenDescriptor.swift b/WalletLibrary/WalletLibraryTests/Mocks/MockIdTokenDescriptor.swift deleted file mode 100644 index 8a8a4c2b..00000000 --- a/WalletLibrary/WalletLibraryTests/Mocks/MockIdTokenDescriptor.swift +++ /dev/null @@ -1,24 +0,0 @@ -/*--------------------------------------------------------------------------------------------- -* Copyright (c) Microsoft Corporation. All rights reserved. -* Licensed under the MIT License. See License.txt in the project root for license information. -*--------------------------------------------------------------------------------------------*/ - -struct MockIdTokenDescriptor: Codable, Equatable { - - let encrypted: Bool? - let claims: [MockClaimDescriptor] - let idTokenRequired: Bool? - let configuration: String - let clientID: String - let redirectURI: String? - let scope: String? - - enum CodingKeys: String, CodingKey { - case encrypted, claims - case idTokenRequired = "required" - case configuration - case clientID = "client_id" - case redirectURI = "redirect_uri" - case scope - } -} diff --git a/WalletLibrary/WalletLibraryTests/Mocks/MockIssuerDescriptor.swift b/WalletLibrary/WalletLibraryTests/Mocks/MockIssuerDescriptor.swift deleted file mode 100644 index 95bbef09..00000000 --- a/WalletLibrary/WalletLibraryTests/Mocks/MockIssuerDescriptor.swift +++ /dev/null @@ -1,8 +0,0 @@ -/*--------------------------------------------------------------------------------------------- -* Copyright (c) Microsoft Corporation. All rights reserved. -* Licensed under the MIT License. See License.txt in the project root for license information. -*--------------------------------------------------------------------------------------------*/ - -struct MockIssuerDescriptor: Codable, Equatable { - let iss: String? -} diff --git a/WalletLibrary/WalletLibraryTests/Mocks/MockPresentationDescriptor.swift b/WalletLibrary/WalletLibraryTests/Mocks/MockPresentationDescriptor.swift deleted file mode 100644 index ab397502..00000000 --- a/WalletLibrary/WalletLibraryTests/Mocks/MockPresentationDescriptor.swift +++ /dev/null @@ -1,19 +0,0 @@ -/*--------------------------------------------------------------------------------------------- -* Copyright (c) Microsoft Corporation. All rights reserved. -* Licensed under the MIT License. See License.txt in the project root for license information. -*--------------------------------------------------------------------------------------------*/ - -struct MockPresentationDescriptor: Codable, Equatable { - let encrypted: Bool? - let claims: [MockClaimDescriptor] - let presentationRequired: Bool? - let credentialType: String - let issuers: [MockIssuerDescriptor]? - let contracts: [String]? - - enum CodingKeys: String, CodingKey { - case encrypted, claims - case presentationRequired = "required" - case credentialType, issuers, contracts - } -} diff --git a/WalletLibrary/WalletLibraryTests/Mocks/MockSelfIssuedClaimDescriptor.swift b/WalletLibrary/WalletLibraryTests/Mocks/MockSelfIssuedClaimDescriptor.swift deleted file mode 100644 index 7f301daf..00000000 --- a/WalletLibrary/WalletLibraryTests/Mocks/MockSelfIssuedClaimDescriptor.swift +++ /dev/null @@ -1,16 +0,0 @@ -/*--------------------------------------------------------------------------------------------- -* Copyright (c) Microsoft Corporation. All rights reserved. -* Licensed under the MIT License. See License.txt in the project root for license information. -*--------------------------------------------------------------------------------------------*/ - -struct MockSelfIssuedClaimsDescriptor: Codable, Equatable { - - let encrypted: Bool? - let claims: [MockClaimDescriptor]? - let selfIssuedRequired: Bool? - - enum CodingKeys: String, CodingKey { - case encrypted, claims - case selfIssuedRequired = "required" - } -}