From 669eb029f12b6505bcfced83acfe392fc89620e5 Mon Sep 17 00:00:00 2001 From: Sergey Abramchuk Date: Fri, 17 Mar 2017 18:19:01 +0300 Subject: [PATCH] Move iOS client and tunnel provider to another repo --- Cartfile | 1 - Cartfile.resolved | 1 - Carthage/Checkouts/KeychainAccess/.gitignore | 28 - .../Checkouts/KeychainAccess/.ruby-version | 1 - Carthage/Checkouts/KeychainAccess/.travis.yml | 35 - .../Example-iOS.xcodeproj/project.pbxproj | 400 --- .../xcschemes/Example-iOS.xcscheme | 115 - .../Example-iOS/AccountsViewController.swift | 127 - .../Example-iOS/Example-iOS/AppDelegate.swift | 36 - .../Example-iOS/Base.lproj/LaunchScreen.xib | 20 - .../Example-iOS/Base.lproj/Main.storyboard | 209 -- .../Example-iOS/Example-iOS.entitlements | 10 - .../AppIcon.appiconset/Contents.json | 48 - .../Example-iOS/Example-iOS/Info.plist | 40 - .../Example-iOS/InputViewController.swift | 80 - .../contents.xcplayground | 7 - .../Playground-iOS.playground/section-1.swift | 144 - .../KeychainAccess/KeychainAccess.podspec | 35 - .../contents.xcworkspacedata | 13 - Carthage/Checkouts/KeychainAccess/LICENSE | 22 - .../KeychainAccess_Tests.provisionprofile.enc | 158 - .../KeychainAccess/Lib/Certificates/apple.cer | Bin 1063 -> 0 bytes .../Lib/Certificates/developer_id_app.p12.enc | 67 - .../iOS_Development.mobileprovision.enc | 188 -- .../Lib/Certificates/ios_developer.p12.enc | 131 - .../tvOS_Development.mobileprovision.enc | 158 - .../Lib/Configurations/Base.xcconfig | 39 - .../Lib/Configurations/Debug.xcconfig | 11 - .../Configurations/KeychainAccess.xcconfig | 23 - .../Lib/Configurations/Release.xcconfig | 8 - .../Lib/Configurations/TestHost.xcconfig | 30 - .../Lib/Configurations/Tests.xcconfig | 20 - Carthage/Checkouts/KeychainAccess/Lib/Gemfile | 5 - .../Checkouts/KeychainAccess/Lib/Gemfile.lock | 19 - .../KeychainAccess.xcodeproj/project.pbxproj | 483 --- .../contents.xcworkspacedata | 7 - .../xcschemes/KeychainAccess.xcscheme | 113 - .../xcshareddata/xcschemes/TestHost.xcscheme | 91 - .../Lib/KeychainAccess/Info.plist | 26 - .../Lib/KeychainAccess/Keychain.swift | 2889 ----------------- .../Lib/KeychainAccess/KeychainAccess.h | 29 - .../Lib/KeychainAccessTests/EnumTests.swift | 305 -- .../KeychainAccessTests/ErrorTypeTests.swift | 2102 ------------ .../Lib/KeychainAccessTests/Info.plist | 24 - .../KeychainAccessTests.swift | 1475 --------- .../SharedCredentialTests.swift | 84 - .../Checkouts/KeychainAccess/Lib/Rakefile | 110 - .../KeychainAccess/Lib/Scripts/add_key.sh | 14 - .../Lib/TestHost/AppDelegate.swift | 49 - .../AppIcon.appiconset/Contents.json | 93 - .../KeychainAccess/Lib/TestHost/Info.plist | 47 - .../Lib/TestHost/TestHost.entitlements | 11 - .../Checkouts/KeychainAccess/Package.swift | 13 - Carthage/Checkouts/KeychainAccess/README.md | 598 ---- .../KeychainAccess/Screenshots/01.png | Bin 54511 -> 0 bytes .../KeychainAccess/Screenshots/02.png | Bin 154692 -> 0 bytes .../KeychainAccess/Screenshots/03.png | Bin 219308 -> 0 bytes .../Screenshots/Installation.png | Bin 220147 -> 0 bytes .../KeychainAccess/Sources/Keychain.swift | 1 - .../project.pbxproj | 672 +--- .../contents.xcworkspacedata | 2 +- .../xcschemes/OpenVPN Adapter.xcscheme | 6 +- OpenVPN iOS Client/AppDelegate.swift | 46 - .../AppIcon.appiconset/Contents.json | 93 - .../Base.lproj/LaunchScreen.storyboard | 27 - OpenVPN iOS Client/Base.lproj/Main.storyboard | 29 - OpenVPN iOS Client/Info.plist | 46 - .../OpenVPN iOS Client.entitlements | 14 - OpenVPN iOS Tunnel Provider/Info.plist | 31 - .../KeychainAccess+Reference.swift | 45 - .../NEPacketTunnelFlow+OpenVPN.swift | 13 - .../OpenVPN iOS Tunnel Provider.entitlements | 10 - .../PacketTunnelProvider.swift | 116 - OpenVPN iOS Tunnel Provider/Then.swift | 62 - 74 files changed, 10 insertions(+), 11995 deletions(-) delete mode 100644 Cartfile delete mode 100644 Cartfile.resolved delete mode 100644 Carthage/Checkouts/KeychainAccess/.gitignore delete mode 100644 Carthage/Checkouts/KeychainAccess/.ruby-version delete mode 100644 Carthage/Checkouts/KeychainAccess/.travis.yml delete mode 100644 Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS.xcodeproj/project.pbxproj delete mode 100644 Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS.xcodeproj/xcshareddata/xcschemes/Example-iOS.xcscheme delete mode 100644 Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS/AccountsViewController.swift delete mode 100644 Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS/AppDelegate.swift delete mode 100644 Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS/Base.lproj/LaunchScreen.xib delete mode 100644 Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS/Base.lproj/Main.storyboard delete mode 100644 Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS/Example-iOS.entitlements delete mode 100644 Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS/Images.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS/Info.plist delete mode 100644 Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS/InputViewController.swift delete mode 100644 Carthage/Checkouts/KeychainAccess/Examples/Playground-iOS.playground/contents.xcplayground delete mode 100644 Carthage/Checkouts/KeychainAccess/Examples/Playground-iOS.playground/section-1.swift delete mode 100644 Carthage/Checkouts/KeychainAccess/KeychainAccess.podspec delete mode 100644 Carthage/Checkouts/KeychainAccess/KeychainAccess.xcworkspace/contents.xcworkspacedata delete mode 100644 Carthage/Checkouts/KeychainAccess/LICENSE delete mode 100644 Carthage/Checkouts/KeychainAccess/Lib/Certificates/KeychainAccess_Tests.provisionprofile.enc delete mode 100644 Carthage/Checkouts/KeychainAccess/Lib/Certificates/apple.cer delete mode 100644 Carthage/Checkouts/KeychainAccess/Lib/Certificates/developer_id_app.p12.enc delete mode 100644 Carthage/Checkouts/KeychainAccess/Lib/Certificates/iOS_Development.mobileprovision.enc delete mode 100644 Carthage/Checkouts/KeychainAccess/Lib/Certificates/ios_developer.p12.enc delete mode 100644 Carthage/Checkouts/KeychainAccess/Lib/Certificates/tvOS_Development.mobileprovision.enc delete mode 100644 Carthage/Checkouts/KeychainAccess/Lib/Configurations/Base.xcconfig delete mode 100644 Carthage/Checkouts/KeychainAccess/Lib/Configurations/Debug.xcconfig delete mode 100644 Carthage/Checkouts/KeychainAccess/Lib/Configurations/KeychainAccess.xcconfig delete mode 100644 Carthage/Checkouts/KeychainAccess/Lib/Configurations/Release.xcconfig delete mode 100644 Carthage/Checkouts/KeychainAccess/Lib/Configurations/TestHost.xcconfig delete mode 100644 Carthage/Checkouts/KeychainAccess/Lib/Configurations/Tests.xcconfig delete mode 100644 Carthage/Checkouts/KeychainAccess/Lib/Gemfile delete mode 100644 Carthage/Checkouts/KeychainAccess/Lib/Gemfile.lock delete mode 100644 Carthage/Checkouts/KeychainAccess/Lib/KeychainAccess.xcodeproj/project.pbxproj delete mode 100644 Carthage/Checkouts/KeychainAccess/Lib/KeychainAccess.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 Carthage/Checkouts/KeychainAccess/Lib/KeychainAccess.xcodeproj/xcshareddata/xcschemes/KeychainAccess.xcscheme delete mode 100644 Carthage/Checkouts/KeychainAccess/Lib/KeychainAccess.xcodeproj/xcshareddata/xcschemes/TestHost.xcscheme delete mode 100644 Carthage/Checkouts/KeychainAccess/Lib/KeychainAccess/Info.plist delete mode 100644 Carthage/Checkouts/KeychainAccess/Lib/KeychainAccess/Keychain.swift delete mode 100644 Carthage/Checkouts/KeychainAccess/Lib/KeychainAccess/KeychainAccess.h delete mode 100644 Carthage/Checkouts/KeychainAccess/Lib/KeychainAccessTests/EnumTests.swift delete mode 100644 Carthage/Checkouts/KeychainAccess/Lib/KeychainAccessTests/ErrorTypeTests.swift delete mode 100644 Carthage/Checkouts/KeychainAccess/Lib/KeychainAccessTests/Info.plist delete mode 100644 Carthage/Checkouts/KeychainAccess/Lib/KeychainAccessTests/KeychainAccessTests.swift delete mode 100644 Carthage/Checkouts/KeychainAccess/Lib/KeychainAccessTests/SharedCredentialTests.swift delete mode 100644 Carthage/Checkouts/KeychainAccess/Lib/Rakefile delete mode 100755 Carthage/Checkouts/KeychainAccess/Lib/Scripts/add_key.sh delete mode 100644 Carthage/Checkouts/KeychainAccess/Lib/TestHost/AppDelegate.swift delete mode 100644 Carthage/Checkouts/KeychainAccess/Lib/TestHost/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 Carthage/Checkouts/KeychainAccess/Lib/TestHost/Info.plist delete mode 100644 Carthage/Checkouts/KeychainAccess/Lib/TestHost/TestHost.entitlements delete mode 100644 Carthage/Checkouts/KeychainAccess/Package.swift delete mode 100644 Carthage/Checkouts/KeychainAccess/README.md delete mode 100644 Carthage/Checkouts/KeychainAccess/Screenshots/01.png delete mode 100644 Carthage/Checkouts/KeychainAccess/Screenshots/02.png delete mode 100644 Carthage/Checkouts/KeychainAccess/Screenshots/03.png delete mode 100644 Carthage/Checkouts/KeychainAccess/Screenshots/Installation.png delete mode 120000 Carthage/Checkouts/KeychainAccess/Sources/Keychain.swift rename {OpenVPN Client.xcodeproj => OpenVPN Adapter.xcodeproj}/project.pbxproj (50%) rename {OpenVPN Client.xcodeproj => OpenVPN Adapter.xcodeproj}/project.xcworkspace/contents.xcworkspacedata (72%) rename {OpenVPN Client.xcodeproj => OpenVPN Adapter.xcodeproj}/xcshareddata/xcschemes/OpenVPN Adapter.xcscheme (92%) delete mode 100644 OpenVPN iOS Client/AppDelegate.swift delete mode 100644 OpenVPN iOS Client/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 OpenVPN iOS Client/Base.lproj/LaunchScreen.storyboard delete mode 100644 OpenVPN iOS Client/Base.lproj/Main.storyboard delete mode 100644 OpenVPN iOS Client/Info.plist delete mode 100644 OpenVPN iOS Client/OpenVPN iOS Client.entitlements delete mode 100644 OpenVPN iOS Tunnel Provider/Info.plist delete mode 100644 OpenVPN iOS Tunnel Provider/KeychainAccess+Reference.swift delete mode 100644 OpenVPN iOS Tunnel Provider/NEPacketTunnelFlow+OpenVPN.swift delete mode 100644 OpenVPN iOS Tunnel Provider/OpenVPN iOS Tunnel Provider.entitlements delete mode 100644 OpenVPN iOS Tunnel Provider/PacketTunnelProvider.swift delete mode 100644 OpenVPN iOS Tunnel Provider/Then.swift diff --git a/Cartfile b/Cartfile deleted file mode 100644 index 9770784..0000000 --- a/Cartfile +++ /dev/null @@ -1 +0,0 @@ -github "kishikawakatsumi/KeychainAccess" ~> 3.0 diff --git a/Cartfile.resolved b/Cartfile.resolved deleted file mode 100644 index 2a2f928..0000000 --- a/Cartfile.resolved +++ /dev/null @@ -1 +0,0 @@ -github "kishikawakatsumi/KeychainAccess" "v3.0.1" diff --git a/Carthage/Checkouts/KeychainAccess/.gitignore b/Carthage/Checkouts/KeychainAccess/.gitignore deleted file mode 100644 index fcac566..0000000 --- a/Carthage/Checkouts/KeychainAccess/.gitignore +++ /dev/null @@ -1,28 +0,0 @@ -# OS X -.DS_Store - -# Xcode -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -profile -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate - -# Bundler -.bundle -vendor/ - -# Carthage -Carthage/Build diff --git a/Carthage/Checkouts/KeychainAccess/.ruby-version b/Carthage/Checkouts/KeychainAccess/.ruby-version deleted file mode 100644 index 2bf1c1c..0000000 --- a/Carthage/Checkouts/KeychainAccess/.ruby-version +++ /dev/null @@ -1 +0,0 @@ -2.3.1 diff --git a/Carthage/Checkouts/KeychainAccess/.travis.yml b/Carthage/Checkouts/KeychainAccess/.travis.yml deleted file mode 100644 index 29fdcf7..0000000 --- a/Carthage/Checkouts/KeychainAccess/.travis.yml +++ /dev/null @@ -1,35 +0,0 @@ -language: objective-c -osx_image: xcode8 -cache: - directories: - - Lib/vendor/bundle -before_install: - - brew update - - brew outdated carthage || brew upgrade carthage -install: - - "(cd Lib && bundle install --path=vendor/bundle --binstubs=vendor/bin)" -before_script: - - openssl aes-256-cbc -k "$ENCRYPTION_SECRET" -in ./Lib/Certificates/ios_developer.p12.enc -d -a -out ./Lib/Certificates/ios_developer.p12 || true - - openssl aes-256-cbc -k "$ENCRYPTION_SECRET" -in ./Lib/Certificates/developer_id_app.p12.enc -d -a -out ./Lib/Certificates/developer_id_app.p12 || true - - openssl aes-256-cbc -k "$ENCRYPTION_SECRET" -in ./Lib/Certificates/iOS_Development.mobileprovision.enc -d -a -out ./Lib/Certificates/iOS_Development.mobileprovision || true - - openssl aes-256-cbc -k "$ENCRYPTION_SECRET" -in ./Lib/Certificates/tvOS_Development.mobileprovision.enc -d -a -out ./Lib/Certificates/tvOS_Development.mobileprovision || true - - openssl aes-256-cbc -k "$ENCRYPTION_SECRET" -in ./Lib/Certificates/KeychainAccess_Tests.provisionprofile.enc -d -a -out ./Lib/Certificates/KeychainAccess_Tests.provisionprofile || true - - ./Lib/Scripts/add_key.sh || true -script: - - "(cd Lib && bundle exec rake $ACTION)" -branches: - only: - - master -env: - matrix: - - ACTION=build - - ACTION='build:carthage' - - ACTION='test:iphonesimulator:debug coverage:coveralls' - - ACTION='test:iphonesimulator:release coverage:coveralls' - - ACTION='test:appletvsimulator coverage:coveralls' - - ACTION='test:macosx coverage:coveralls' - global: - - LANG=en_US.UTF-8 - - LC_ALL=en_US.UTF-8 - - secure: KL59HA2XSRa215qVXXnFpx48Tb/k+vNfFAbzyc+0M4mXl1VhSJv3bkTslqDrX822t3iFDFYhXbJ6aUo7szSdcbnCXU7VIhNPRK5QM00eS1AI4V0UwDQZ06g2f4Dmt+cQxACg+0CB0OaPnUCA4rkQQKeBMAWa67Tp2hNgQHwsnio= - - secure: B8zXiyX1zEq6uWaCxap5iW1joQBoOjNjSUlcs1t+QKdaFCFtjOI8C1JCClzk7rTnGNDDrhahFlE8yskSNKoBsaW2UJ8TzPIkD4F2pkxTHkaFQl/GBsdbHdOUFL4h0/zGQ6wY1Qhw7C+8+3U+1c9QbnNw6jOQwXTF6gs/XTNzG9Y= diff --git a/Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS.xcodeproj/project.pbxproj b/Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS.xcodeproj/project.pbxproj deleted file mode 100644 index fdf0992..0000000 --- a/Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS.xcodeproj/project.pbxproj +++ /dev/null @@ -1,400 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 14DAEE961A51E1BE0070B77E /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14DAEE951A51E1BE0070B77E /* AppDelegate.swift */; }; - 14DAEE9B1A51E1BE0070B77E /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 14DAEE991A51E1BE0070B77E /* Main.storyboard */; }; - 14DAEE9D1A51E1BE0070B77E /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 14DAEE9C1A51E1BE0070B77E /* Images.xcassets */; }; - 14DAEEA01A51E1BE0070B77E /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 14DAEE9E1A51E1BE0070B77E /* LaunchScreen.xib */; }; - 14DAEEB71A51E2690070B77E /* AccountsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14DAEEB51A51E2690070B77E /* AccountsViewController.swift */; }; - 14DAEEB81A51E2690070B77E /* InputViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14DAEEB61A51E2690070B77E /* InputViewController.swift */; }; - 14DAEEC91A51E2D00070B77E /* KeychainAccess.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14DAEEC11A51E2A60070B77E /* KeychainAccess.framework */; }; - 14DAEECB1A51E2E10070B77E /* KeychainAccess.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 14DAEEC11A51E2A60070B77E /* KeychainAccess.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 1470425D1D6FFA97005A4C6E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 14DAEEB91A51E2A60070B77E /* KeychainAccess.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 14A630151D3293C700809B3F; - remoteInfo = TestHost; - }; - 14DAEEC01A51E2A60070B77E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 14DAEEB91A51E2A60070B77E /* KeychainAccess.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 140F195C1A49D79400B0016A; - remoteInfo = "KeychainAccess-iOS"; - }; - 14DAEEC21A51E2A60070B77E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 14DAEEB91A51E2A60070B77E /* KeychainAccess.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 140F19671A49D79500B0016A; - remoteInfo = "KeychainAccess-iOSTests"; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 14DAEECA1A51E2D70070B77E /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - 14DAEECB1A51E2E10070B77E /* KeychainAccess.framework in CopyFiles */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 145652E11D898BB9006E8D0E /* Example-iOS.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = "Example-iOS.entitlements"; sourceTree = ""; }; - 14DAEE901A51E1BE0070B77E /* Example-iOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Example-iOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; - 14DAEE941A51E1BE0070B77E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 14DAEE951A51E1BE0070B77E /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 14DAEE9A1A51E1BE0070B77E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 14DAEE9C1A51E1BE0070B77E /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; - 14DAEE9F1A51E1BE0070B77E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; - 14DAEEB51A51E2690070B77E /* AccountsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountsViewController.swift; sourceTree = ""; }; - 14DAEEB61A51E2690070B77E /* InputViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InputViewController.swift; sourceTree = ""; }; - 14DAEEB91A51E2A60070B77E /* KeychainAccess.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = KeychainAccess.xcodeproj; path = ../../Lib/KeychainAccess.xcodeproj; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 14DAEE8D1A51E1BE0070B77E /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 14DAEEC91A51E2D00070B77E /* KeychainAccess.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 14DAEE871A51E1BE0070B77E = { - isa = PBXGroup; - children = ( - 14DAEE921A51E1BE0070B77E /* Example-iOS */, - 14DAEE911A51E1BE0070B77E /* Products */, - 14DAEEB91A51E2A60070B77E /* KeychainAccess.xcodeproj */, - ); - sourceTree = ""; - }; - 14DAEE911A51E1BE0070B77E /* Products */ = { - isa = PBXGroup; - children = ( - 14DAEE901A51E1BE0070B77E /* Example-iOS.app */, - ); - name = Products; - sourceTree = ""; - }; - 14DAEE921A51E1BE0070B77E /* Example-iOS */ = { - isa = PBXGroup; - children = ( - 14DAEE951A51E1BE0070B77E /* AppDelegate.swift */, - 14DAEEB51A51E2690070B77E /* AccountsViewController.swift */, - 14DAEEB61A51E2690070B77E /* InputViewController.swift */, - 14DAEE991A51E1BE0070B77E /* Main.storyboard */, - 14DAEE9E1A51E1BE0070B77E /* LaunchScreen.xib */, - 14DAEE9C1A51E1BE0070B77E /* Images.xcassets */, - 14DAEE931A51E1BE0070B77E /* Supporting Files */, - ); - path = "Example-iOS"; - sourceTree = ""; - }; - 14DAEE931A51E1BE0070B77E /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 14DAEE941A51E1BE0070B77E /* Info.plist */, - 145652E11D898BB9006E8D0E /* Example-iOS.entitlements */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - 14DAEEBA1A51E2A60070B77E /* Products */ = { - isa = PBXGroup; - children = ( - 14DAEEC11A51E2A60070B77E /* KeychainAccess.framework */, - 14DAEEC31A51E2A60070B77E /* KeychainAccessTests.xctest */, - 1470425E1D6FFA97005A4C6E /* TestHost.app */, - ); - name = Products; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 14DAEE8F1A51E1BE0070B77E /* Example-iOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = 14DAEEAF1A51E1BE0070B77E /* Build configuration list for PBXNativeTarget "Example-iOS" */; - buildPhases = ( - 14DAEE8C1A51E1BE0070B77E /* Sources */, - 14DAEE8D1A51E1BE0070B77E /* Frameworks */, - 14DAEE8E1A51E1BE0070B77E /* Resources */, - 14DAEECA1A51E2D70070B77E /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "Example-iOS"; - productName = "Example-iOS"; - productReference = 14DAEE901A51E1BE0070B77E /* Example-iOS.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 14DAEE881A51E1BE0070B77E /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 0700; - LastUpgradeCheck = 0800; - ORGANIZATIONNAME = "kishikawa katsumi"; - TargetAttributes = { - 14DAEE8F1A51E1BE0070B77E = { - CreatedOnToolsVersion = 6.2; - DevelopmentTeam = 27AEDK3C9F; - }; - }; - }; - buildConfigurationList = 14DAEE8B1A51E1BE0070B77E /* Build configuration list for PBXProject "Example-iOS" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 14DAEE871A51E1BE0070B77E; - productRefGroup = 14DAEE911A51E1BE0070B77E /* Products */; - projectDirPath = ""; - projectReferences = ( - { - ProductGroup = 14DAEEBA1A51E2A60070B77E /* Products */; - ProjectRef = 14DAEEB91A51E2A60070B77E /* KeychainAccess.xcodeproj */; - }, - ); - projectRoot = ""; - targets = ( - 14DAEE8F1A51E1BE0070B77E /* Example-iOS */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXReferenceProxy section */ - 1470425E1D6FFA97005A4C6E /* TestHost.app */ = { - isa = PBXReferenceProxy; - fileType = wrapper.application; - path = TestHost.app; - remoteRef = 1470425D1D6FFA97005A4C6E /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 14DAEEC11A51E2A60070B77E /* KeychainAccess.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = KeychainAccess.framework; - remoteRef = 14DAEEC01A51E2A60070B77E /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 14DAEEC31A51E2A60070B77E /* KeychainAccessTests.xctest */ = { - isa = PBXReferenceProxy; - fileType = wrapper.cfbundle; - path = KeychainAccessTests.xctest; - remoteRef = 14DAEEC21A51E2A60070B77E /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; -/* End PBXReferenceProxy section */ - -/* Begin PBXResourcesBuildPhase section */ - 14DAEE8E1A51E1BE0070B77E /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 14DAEE9B1A51E1BE0070B77E /* Main.storyboard in Resources */, - 14DAEEA01A51E1BE0070B77E /* LaunchScreen.xib in Resources */, - 14DAEE9D1A51E1BE0070B77E /* Images.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 14DAEE8C1A51E1BE0070B77E /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 14DAEEB81A51E2690070B77E /* InputViewController.swift in Sources */, - 14DAEEB71A51E2690070B77E /* AccountsViewController.swift in Sources */, - 14DAEE961A51E1BE0070B77E /* AppDelegate.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - 14DAEE991A51E1BE0070B77E /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 14DAEE9A1A51E1BE0070B77E /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - 14DAEE9E1A51E1BE0070B77E /* LaunchScreen.xib */ = { - isa = PBXVariantGroup; - children = ( - 14DAEE9F1A51E1BE0070B77E /* Base */, - ); - name = LaunchScreen.xib; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 14DAEEAD1A51E1BE0070B77E /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_ENTITLEMENTS = "Example-iOS/Example-iOS.entitlements"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - 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 = 8.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - }; - name = Debug; - }; - 14DAEEAE1A51E1BE0070B77E /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_ENTITLEMENTS = "Example-iOS/Example-iOS.entitlements"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - 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 = 8.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 3.0; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 14DAEEB01A51E1BE0070B77E /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - DEVELOPMENT_TEAM = 27AEDK3C9F; - INFOPLIST_FILE = "Example-iOS/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "com.kishikawakatsumi.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Debug; - }; - 14DAEEB11A51E1BE0070B77E /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - DEVELOPMENT_TEAM = 27AEDK3C9F; - INFOPLIST_FILE = "Example-iOS/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "com.kishikawakatsumi.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 14DAEE8B1A51E1BE0070B77E /* Build configuration list for PBXProject "Example-iOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 14DAEEAD1A51E1BE0070B77E /* Debug */, - 14DAEEAE1A51E1BE0070B77E /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 14DAEEAF1A51E1BE0070B77E /* Build configuration list for PBXNativeTarget "Example-iOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 14DAEEB01A51E1BE0070B77E /* Debug */, - 14DAEEB11A51E1BE0070B77E /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 14DAEE881A51E1BE0070B77E /* Project object */; -} diff --git a/Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS.xcodeproj/xcshareddata/xcschemes/Example-iOS.xcscheme b/Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS.xcodeproj/xcshareddata/xcschemes/Example-iOS.xcscheme deleted file mode 100644 index 7031afd..0000000 --- a/Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS.xcodeproj/xcshareddata/xcschemes/Example-iOS.xcscheme +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS/AccountsViewController.swift b/Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS/AccountsViewController.swift deleted file mode 100644 index b352cda..0000000 --- a/Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS/AccountsViewController.swift +++ /dev/null @@ -1,127 +0,0 @@ -// -// AccountsViewController.swift -// Example -// -// Created by kishikawa katsumi on 2014/12/25. -// Copyright (c) 2014 kishikawa katsumi. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -import UIKit -import KeychainAccess - -class AccountsViewController: UITableViewController { - var itemsGroupedByService: [String: [[String: Any]]]? - - override func viewDidLoad() { - super.viewDidLoad() - } - - override func viewWillAppear(_ animated: Bool) { - super.viewWillAppear(animated) - - reloadData() - tableView.reloadData() - } - - override func didReceiveMemoryWarning() { - super.didReceiveMemoryWarning() - } - - // MARK: - - override func numberOfSections(in tableView: UITableView) -> Int { - if itemsGroupedByService != nil { - let services = Array(itemsGroupedByService!.keys) - return services.count - } - return 0 - } - - override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - let services = Array(itemsGroupedByService!.keys) - let service = services[section] - - let items = Keychain(service: service).allItems() - return items.count - } - - override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { - let services = Array(itemsGroupedByService!.keys) - return services[section] - } - - override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) - - let services = Array(itemsGroupedByService!.keys) - let service = services[indexPath.section] - - let items = Keychain(service: service).allItems() - let item = items[indexPath.row] - - cell.textLabel?.text = item["key"] as? String - cell.detailTextLabel?.text = item["value"] as? String - - return cell - } - - override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { - let services = Array(itemsGroupedByService!.keys) - let service = services[indexPath.section] - - let keychain = Keychain(service: service) - let items = keychain.allItems() - - let item = items[indexPath.row] - let key = item["key"] as! String - - keychain[key] = nil - - if items.count == 1 { - reloadData() - tableView.deleteSections(IndexSet(integer: indexPath.section), with: .automatic) - } else { - tableView.deleteRows(at: [indexPath], with: .automatic) - } - } - - // MARK: - - func reloadData() { - let items = Keychain.allItems(.genericPassword) - itemsGroupedByService = groupBy(items) { item -> String in - if let service = item["service"] as? String { - return service - } - return "" - } - } -} - -private func groupBy(_ xs: C, key: (C.Iterator.Element) -> K) -> [K:[C.Iterator.Element]] { - var gs: [K:[C.Iterator.Element]] = [:] - for x in xs { - let k = key(x) - var ys = gs[k] ?? [] - ys.append(x) - gs.updateValue(ys, forKey: k) - } - return gs -} diff --git a/Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS/AppDelegate.swift b/Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS/AppDelegate.swift deleted file mode 100644 index 375db56..0000000 --- a/Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS/AppDelegate.swift +++ /dev/null @@ -1,36 +0,0 @@ -// -// AppDelegate.swift -// Example -// -// Created by kishikawa katsumi on 2014/12/25. -// Copyright (c) 2014 kishikawa katsumi. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -import UIKit - -@UIApplicationMain -class AppDelegate: UIResponder, UIApplicationDelegate { - var window: UIWindow? - - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool { - return true - } - -} diff --git a/Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS/Base.lproj/LaunchScreen.xib b/Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS/Base.lproj/LaunchScreen.xib deleted file mode 100644 index 1295d0c..0000000 --- a/Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS/Base.lproj/LaunchScreen.xib +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS/Base.lproj/Main.storyboard b/Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS/Base.lproj/Main.storyboard deleted file mode 100644 index 0e010d6..0000000 --- a/Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS/Base.lproj/Main.storyboard +++ /dev/null @@ -1,209 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS/Example-iOS.entitlements b/Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS/Example-iOS.entitlements deleted file mode 100644 index b69e000..0000000 --- a/Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS/Example-iOS.entitlements +++ /dev/null @@ -1,10 +0,0 @@ - - - - - keychain-access-groups - - $(AppIdentifierPrefix)com.kishikawakatsumi.Example-iOS - - - diff --git a/Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS/Images.xcassets/AppIcon.appiconset/Contents.json b/Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS/Images.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index b8236c6..0000000 --- a/Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS/Images.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "size" : "20x20", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "20x20", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS/Info.plist b/Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS/Info.plist deleted file mode 100644 index 6905cc6..0000000 --- a/Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS/Info.plist +++ /dev/null @@ -1,40 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS/InputViewController.swift b/Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS/InputViewController.swift deleted file mode 100644 index 6ae4a66..0000000 --- a/Carthage/Checkouts/KeychainAccess/Examples/Example-iOS/Example-iOS/InputViewController.swift +++ /dev/null @@ -1,80 +0,0 @@ -// -// InputViewController.swift -// Example -// -// Created by kishikawa katsumi on 2014/12/26. -// Copyright (c) 2014 kishikawa katsumi. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -import UIKit -import KeychainAccess - -class InputViewController: UITableViewController { - - @IBOutlet weak var saveButton: UIBarButtonItem! - @IBOutlet weak var cancelButton: UIBarButtonItem! - - @IBOutlet weak var usernameField: UITextField! - @IBOutlet weak var passwordField: UITextField! - @IBOutlet weak var serviceField: UITextField! - - override func viewDidLoad() { - super.viewDidLoad() - - tableView.rowHeight = 44.0 - tableView.estimatedRowHeight = 44.0 - } - - override func didReceiveMemoryWarning() { - super.didReceiveMemoryWarning() - } - - // MARK: - - @IBAction func cancelAction(sender: UIBarButtonItem) { - dismiss(animated: true, completion: nil) - } - - @IBAction func saveAction(sender: UIBarButtonItem) { - let keychain: Keychain - if let service = serviceField.text, !service.isEmpty { - keychain = Keychain(service: service) - } else { - keychain = Keychain() - } - keychain[usernameField.text!] = passwordField.text - - dismiss(animated: true, completion: nil) - } - - @IBAction func editingChanged(sender: UITextField) { - switch (usernameField.text, passwordField.text) { - case let (username?, password?): - saveButton.isEnabled = !username.isEmpty && !password.isEmpty - case (_?, nil): - saveButton.isEnabled = false - case (nil, _?): - saveButton.isEnabled = false - case (nil, nil): - saveButton.isEnabled = false - } - } - -} diff --git a/Carthage/Checkouts/KeychainAccess/Examples/Playground-iOS.playground/contents.xcplayground b/Carthage/Checkouts/KeychainAccess/Examples/Playground-iOS.playground/contents.xcplayground deleted file mode 100644 index 5f39bbe..0000000 --- a/Carthage/Checkouts/KeychainAccess/Examples/Playground-iOS.playground/contents.xcplayground +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/Carthage/Checkouts/KeychainAccess/Examples/Playground-iOS.playground/section-1.swift b/Carthage/Checkouts/KeychainAccess/Examples/Playground-iOS.playground/section-1.swift deleted file mode 100644 index 6a75f33..0000000 --- a/Carthage/Checkouts/KeychainAccess/Examples/Playground-iOS.playground/section-1.swift +++ /dev/null @@ -1,144 +0,0 @@ -import UIKit -import XCPlayground - -import KeychainAccess - -var keychain: Keychain - -/*************** - * Instantiation - ***************/ - -/* for Application Password */ -keychain = Keychain(service: "com.example.github-token") - -/* for Internet Password */ -let url = URL(string: "https://github.com")! -keychain = Keychain(server: url, protocolType: .https) - - -/************** - * Adding items - **************/ - -/* subscripting */ -keychain["kishikawakatsumi"] = "01234567-89ab-cdef-0123-456789abcdef" - -/* set method */ -try? keychain.set("01234567-89ab-cdef-0123-456789abcdef", key: "kishikawakatsumi") - - -/***************** - * Obtaining items - *****************/ - -var token: String? -/* subscripting (automatically convert to String) */ -token = keychain["kishikawakatsumi"] - -/* get method */ - -// as String -token = try! keychain.get("kishikawakatsumi") -token = try! keychain.getString("kishikawakatsumi") - -// as Data -let data = try! keychain.getData("kishikawakatsumi") - -/**************** - * Removing items - ****************/ - -/* subscripting */ -keychain["kishikawakatsumi"] = nil - -/* remove method */ -try? keychain.remove("kishikawakatsumi") - - -/**************** - * Error handling - ****************/ - -/* set */ -do { - try keychain.set("01234567-89ab-cdef-0123-456789abcdef", key: "kishikawakatsumi") -} catch let error { - print("error: \(error.localizedDescription)") -} - -/* get */ -// First, get the failable (value or error) object -do { - let token = try keychain.get("kishikawakatsumi") -} catch let error { - print("error: \(error.localizedDescription)") -} - -/* remove */ -do { - try keychain.remove("kishikawakatsumi") -} catch let error { - print("error: \(error.localizedDescription)") -} - - -/******************* - * Label and Comment - *******************/ - -keychain = Keychain(server: URL(string: "https://github.com")!, protocolType: .https) - .label("github.com (kishikawakatsumi)") - .comment("github access token") - - -/*************** - * Configuration - ***************/ - -/* for background application */ -let background = Keychain(service: "com.example.github-token") - .accessibility(.afterFirstUnlock) - -/* for forground application */ -let forground = Keychain(service: "com.example.github-token") - .accessibility(.whenUnlocked) - -/* Sharing Keychain Items */ -let shared = Keychain(service: "com.example.github-token", accessGroup: "12ABCD3E4F.shared") - -/* Synchronizing Keychain items with iCloud */ -let iCloud = Keychain(service: "com.example.github-token") - .synchronizable(true) - -/* One-Shot configuration change */ - -try? keychain - .accessibility(.afterFirstUnlock) - .synchronizable(true) - .set("01234567-89ab-cdef-0123-456789abcdef", key: "kishikawakatsumi") - -try? keychain - .accessibility(.whenUnlocked) - .set("01234567-89ab-cdef-0123-456789abcdef", key: "kishikawakatsumi") - - -/*********** - * Debugging - ***********/ - -/* Display all stored items if print keychain object */ -keychain = Keychain(server: URL(string: "https://github.com")!, protocolType: .https) -print("\(keychain)") - -/* Obtaining all stored keys */ -let keys = keychain.allKeys() -for key in keys { - print("key: \(key)") -} - -/* Obtaining all stored items */ -let items = keychain.allItems() -for item in items { - print("item: \(item)") -} diff --git a/Carthage/Checkouts/KeychainAccess/KeychainAccess.podspec b/Carthage/Checkouts/KeychainAccess/KeychainAccess.podspec deleted file mode 100644 index 5563987..0000000 --- a/Carthage/Checkouts/KeychainAccess/KeychainAccess.podspec +++ /dev/null @@ -1,35 +0,0 @@ -Pod::Spec.new do |s| - s.name = 'KeychainAccess' - s.version = '3.0.1' - s.summary = 'KeychainAccess is a simple Swift wrapper for Keychain that works on iOS and OS X.' - s.description = <<-DESC - KeychainAccess is a simple Swift wrapper for Keychain that works on iOS and OS X. - Makes using Keychain APIs exremely easy and much more palatable to use in Swift. - - Features - - Simple interface - - Support access group - - Support accessibility - - Support iCloud sharing - - **Support TouchID and Keychain integration (iOS 8+)** - - **Support Shared Web Credentials (iOS 8+)** - - Works on both iOS & OS X - - watchOS and tvOS are also supported - DESC - s.homepage = 'https://github.com/kishikawakatsumi/KeychainAccess' - s.screenshots = 'https://raw.githubusercontent.com/kishikawakatsumi/KeychainAccess/master/Screenshots/01.png' - s.license = 'MIT' - s.author = { 'kishikawa katsumi' => 'kishikawakatsumi@mac.com' } - s.source = { :git => 'https://github.com/kishikawakatsumi/KeychainAccess.git', :tag => "v#{s.version}" } - s.social_media_url = 'https://twitter.com/k_katsumi' - - s.requires_arc = true - s.source_files = 'Lib/KeychainAccess/*.swift' - - s.pod_target_xcconfig = { 'SWIFT_VERSION' => '3.0' } - - s.ios.deployment_target = '8.0' - s.osx.deployment_target = '10.9' - s.watchos.deployment_target = '2.0' - s.tvos.deployment_target = '9.0' -end diff --git a/Carthage/Checkouts/KeychainAccess/KeychainAccess.xcworkspace/contents.xcworkspacedata b/Carthage/Checkouts/KeychainAccess/KeychainAccess.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 8dc9f8a..0000000 --- a/Carthage/Checkouts/KeychainAccess/KeychainAccess.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - diff --git a/Carthage/Checkouts/KeychainAccess/LICENSE b/Carthage/Checkouts/KeychainAccess/LICENSE deleted file mode 100644 index 7ab2a8e..0000000 --- a/Carthage/Checkouts/KeychainAccess/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 kishikawa katsumi - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/Carthage/Checkouts/KeychainAccess/Lib/Certificates/KeychainAccess_Tests.provisionprofile.enc b/Carthage/Checkouts/KeychainAccess/Lib/Certificates/KeychainAccess_Tests.provisionprofile.enc deleted file mode 100644 index ac99825..0000000 --- a/Carthage/Checkouts/KeychainAccess/Lib/Certificates/KeychainAccess_Tests.provisionprofile.enc +++ /dev/null @@ -1,158 +0,0 @@ -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 -m1nn1kcLs46WQmS7a7XSHQ== diff --git a/Carthage/Checkouts/KeychainAccess/Lib/Certificates/apple.cer b/Carthage/Checkouts/KeychainAccess/Lib/Certificates/apple.cer deleted file mode 100644 index 0de099b869bad748c60bbe8016a206cc2025b57d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1063 zcmXqLVo^3|V&-1J%*4pV#3*UN%f_kI=F#?@mywZ`mBAp%klTQhjX9KsO_(V(*ihI& z5X9jU=5j13$VpZ3%uCiYR5MTk333a|LIj;ti%K%nGLsWaGV}8k97{_w@{2M{Dh#CZ+Pkhlho)37^&2iXxi23lZ8 z@F+tJ56>^kNh!}vNmX!3ElbVGFGwv?2ujTXyQ$dF#lQ*d6dr3LR4d@{kUIV9Jtx~*mOc3N^qkf?1> z*PH#>5>p>AuVJj6&YFIXuXU<<)?3bP>(b8#rp!MUb8%02Ub<;Rnc0%|#ypGu8``3N z)v7n5_WLy-?7cMks#M|DggJAK{X%~VMewxk5aT`gwA{5fz+;!T?vp944__Radn{w= zhQ)u<>k4);MS7PzO|;zk_3T5R_Xn&!dX_y^jQyLHwR^dkX~LyvYd^bbo_uk*`(@>U zti*KDO&|U~&DfI^pLc%d-S^VT|0bobW@2V!U|ig|&Y*F%0Ut2DW%(Hy|Ff_FlUkbr zKZq|3;h`Ux;W>`Z4wFHZ(i^E<{o)8C}i<=19_0NGK++PSc8c6 zg-rJ;Wt{)MWcTVhEc@>6Th9?^UVJ@=m5ZPQlM_jVT^MR;3$ zd0QGKA5$P3W-0XaA+O+*PF1$OSGS1v#a)P;KH;Tzf$>s?CZBo|n@pP49Y^;$XV z-%{P_->Y|DYj<;MeH~=0wkdhVmW`+Sznpor`Gos}{j(yQf8Cl9tkv|jCRK0hP2Acw*r@b6HQk_fhp0-j|J~}V_hu*nMD<{Pj>*=eOiUI)R Cp^hm4 diff --git a/Carthage/Checkouts/KeychainAccess/Lib/Certificates/developer_id_app.p12.enc b/Carthage/Checkouts/KeychainAccess/Lib/Certificates/developer_id_app.p12.enc deleted file mode 100644 index 9dfcdd0..0000000 --- a/Carthage/Checkouts/KeychainAccess/Lib/Certificates/developer_id_app.p12.enc +++ /dev/null @@ -1,67 +0,0 @@ -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 diff --git a/Carthage/Checkouts/KeychainAccess/Lib/Certificates/iOS_Development.mobileprovision.enc b/Carthage/Checkouts/KeychainAccess/Lib/Certificates/iOS_Development.mobileprovision.enc deleted file mode 100644 index 7c2471e..0000000 --- a/Carthage/Checkouts/KeychainAccess/Lib/Certificates/iOS_Development.mobileprovision.enc +++ /dev/null @@ -1,188 +0,0 @@ -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 diff --git a/Carthage/Checkouts/KeychainAccess/Lib/Certificates/ios_developer.p12.enc b/Carthage/Checkouts/KeychainAccess/Lib/Certificates/ios_developer.p12.enc deleted file mode 100644 index b7d62bb..0000000 --- a/Carthage/Checkouts/KeychainAccess/Lib/Certificates/ios_developer.p12.enc +++ /dev/null @@ -1,131 +0,0 @@ -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 -hfJJH1uvIO2vkPfr+fxvTQ== diff --git a/Carthage/Checkouts/KeychainAccess/Lib/Certificates/tvOS_Development.mobileprovision.enc b/Carthage/Checkouts/KeychainAccess/Lib/Certificates/tvOS_Development.mobileprovision.enc deleted file mode 100644 index a6974e6..0000000 --- a/Carthage/Checkouts/KeychainAccess/Lib/Certificates/tvOS_Development.mobileprovision.enc +++ /dev/null @@ -1,158 +0,0 @@ -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 diff --git a/Carthage/Checkouts/KeychainAccess/Lib/Configurations/Base.xcconfig b/Carthage/Checkouts/KeychainAccess/Lib/Configurations/Base.xcconfig deleted file mode 100644 index 066bf69..0000000 --- a/Carthage/Checkouts/KeychainAccess/Lib/Configurations/Base.xcconfig +++ /dev/null @@ -1,39 +0,0 @@ -ALWAYS_SEARCH_USER_PATHS = NO; -CLANG_ANALYZER_NONNULL = YES -CLANG_CXX_LANGUAGE_STANDARD = gnu++0x; -CLANG_CXX_LIBRARY = libc++; -CLANG_ENABLE_MODULES = YES; -CLANG_ENABLE_OBJC_ARC = YES; -CLANG_WARN_BOOL_CONVERSION = YES; -CLANG_WARN_CONSTANT_CONVERSION = YES; -CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; -CLANG_WARN_EMPTY_BODY = YES; -CLANG_WARN_ENUM_CONVERSION = YES; -CLANG_WARN_INT_CONVERSION = YES; -CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; -CLANG_WARN_UNREACHABLE_CODE = YES; -CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; -CURRENT_PROJECT_VERSION = 1; -ENABLE_STRICT_OBJC_MSGSEND = YES; -GCC_C_LANGUAGE_STANDARD = gnu99; -GCC_NO_COMMON_BLOCKS = YES -GCC_DYNAMIC_NO_PIC = NO; -GCC_SYMBOLS_PRIVATE_EXTERN = NO; -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; -VERSIONING_SYSTEM = "apple-generic"; -VERSION_INFO_PREFIX = ""; - -CODE_SIGN_IDENTITY[sdk=iphoneos*] = iPhone Developer; -DEVELOPMENT_TEAM = ; - -IPHONEOS_DEPLOYMENT_TARGET = 8.0; -WATCHOS_DEPLOYMENT_TARGET = 2.0; -TVOS_DEPLOYMENT_TARGET = 9.0; -MACOSX_DEPLOYMENT_TARGET = 10.9; - -SWIFT_VERSION = 3.0; diff --git a/Carthage/Checkouts/KeychainAccess/Lib/Configurations/Debug.xcconfig b/Carthage/Checkouts/KeychainAccess/Lib/Configurations/Debug.xcconfig deleted file mode 100644 index e2cdcaf..0000000 --- a/Carthage/Checkouts/KeychainAccess/Lib/Configurations/Debug.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -#include "Base.xcconfig" - -BITCODE_GENERATION_MODE = marker; -MTL_ENABLE_DEBUG_INFO = YES; -COPY_PHASE_STRIP = NO; -ENABLE_TESTABILITY = YES; -GCC_OPTIMIZATION_LEVEL = 0; -ONLY_ACTIVE_ARCH = YES; -SWIFT_OPTIMIZATION_LEVEL = -Onone; - -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) DEBUG=1; diff --git a/Carthage/Checkouts/KeychainAccess/Lib/Configurations/KeychainAccess.xcconfig b/Carthage/Checkouts/KeychainAccess/Lib/Configurations/KeychainAccess.xcconfig deleted file mode 100644 index f76229e..0000000 --- a/Carthage/Checkouts/KeychainAccess/Lib/Configurations/KeychainAccess.xcconfig +++ /dev/null @@ -1,23 +0,0 @@ -SUPPORTED_PLATFORMS = macosx iphoneos iphonesimulator watchos watchsimulator appletvos appletvsimulator; -TARGETED_DEVICE_FAMILY = 1,2,3,4; - -COMBINE_HIDPI_IMAGES = YES; -PRODUCT_BUNDLE_IDENTIFIER = com.kishikawakatsumi.$(PRODUCT_NAME:rfc1034identifier); -PRODUCT_NAME = $(PROJECT_NAME); -APPLICATION_EXTENSION_API_ONLY = YES; -INFOPLIST_FILE = KeychainAccess/Info.plist; -SKIP_INSTALL = YES; - -DEFINES_MODULE = YES; -DYLIB_COMPATIBILITY_VERSION = 1; -DYLIB_CURRENT_VERSION = 1; -DYLIB_INSTALL_NAME_BASE = @rpath; - -ENABLE_BITCODE[sdk=iphone*] = YES; -ENABLE_BITCODE[sdk=watch*] = YES; -ENABLE_BITCODE[sdk=appletv*] = YES; - -LD_RUNPATH_SEARCH_PATHS[sdk=iphone*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks; -LD_RUNPATH_SEARCH_PATHS[sdk=watch*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks; -LD_RUNPATH_SEARCH_PATHS[sdk=appletv*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks; -LD_RUNPATH_SEARCH_PATHS[sdk=macosx*] = $(inherited) @executable_path/../Frameworks @loader_path/../Frameworks; diff --git a/Carthage/Checkouts/KeychainAccess/Lib/Configurations/Release.xcconfig b/Carthage/Checkouts/KeychainAccess/Lib/Configurations/Release.xcconfig deleted file mode 100644 index bac0614..0000000 --- a/Carthage/Checkouts/KeychainAccess/Lib/Configurations/Release.xcconfig +++ /dev/null @@ -1,8 +0,0 @@ -#include "Base.xcconfig" - -BITCODE_GENERATION_MODE = bitcode; -DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; -ENABLE_NS_ASSERTIONS = NO; -MTL_ENABLE_DEBUG_INFO = NO; -VALIDATE_PRODUCT = YES; -SWIFT_OPTIMIZATION_LEVEL = -Owholemodule; diff --git a/Carthage/Checkouts/KeychainAccess/Lib/Configurations/TestHost.xcconfig b/Carthage/Checkouts/KeychainAccess/Lib/Configurations/TestHost.xcconfig deleted file mode 100644 index 455ccc6..0000000 --- a/Carthage/Checkouts/KeychainAccess/Lib/Configurations/TestHost.xcconfig +++ /dev/null @@ -1,30 +0,0 @@ -SUPPORTED_PLATFORMS = macosx iphoneos iphonesimulator appletvos appletvsimulator; -TARGETED_DEVICE_FAMILY = 1,2,3; - -COMBINE_HIDPI_IMAGES = YES; -COPY_PHASE_STRIP = NO; -INFOPLIST_FILE = TestHost/Info.plist; -PRODUCT_NAME = $(TARGET_NAME); -CLANG_MODULES_AUTOLINK = NO; -ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; -EMBEDDED_CONTENT_CONTAINS_SWIFT = YES; - -PRODUCT_BUNDLE_IDENTIFIER = com.kishikawakatsumi.KeychainAccess.TestHost; - -CODE_SIGN_ENTITLEMENTS = TestHost/TestHost.entitlements; -PROVISIONING_PROFILE_SPECIFIER[sdk=iphone*] = iOS Development; - -CODE_SIGN_IDENTITY[sdk=macosx*] = Developer ID Application -PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*] = KeychainAccess Tests -OTHER_CODE_SIGN_FLAGS[sdk=macosx*] = --deep; - -DEVELOPMENT_TEAM = 27AEDK3C9F; - -PRINCIPAL_CLASS[sdk=iphone*] = UIApplication; -PRINCIPAL_CLASS[sdk=appletv*] = UIApplication; -PRINCIPAL_CLASS[sdk=macosx*] = NSApplication; - -LD_RUNPATH_SEARCH_PATHS[sdk=iphone*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks; -LD_RUNPATH_SEARCH_PATHS[sdk=watch*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks; -LD_RUNPATH_SEARCH_PATHS[sdk=appletv*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks; -LD_RUNPATH_SEARCH_PATHS[sdk=macosx*] = $(inherited) @executable_path/../Frameworks @loader_path/../Frameworks; diff --git a/Carthage/Checkouts/KeychainAccess/Lib/Configurations/Tests.xcconfig b/Carthage/Checkouts/KeychainAccess/Lib/Configurations/Tests.xcconfig deleted file mode 100644 index f916b04..0000000 --- a/Carthage/Checkouts/KeychainAccess/Lib/Configurations/Tests.xcconfig +++ /dev/null @@ -1,20 +0,0 @@ -SUPPORTED_PLATFORMS = macosx iphoneos iphonesimulator appletvos appletvsimulator; - -COMBINE_HIDPI_IMAGES = YES; -PRODUCT_BUNDLE_IDENTIFIER = com.kishikawakatsumi.$(PRODUCT_NAME:rfc1034identifier); -PRODUCT_NAME = $(TARGET_NAME); -APPLICATION_EXTENSION_API_ONLY = NO; -INFOPLIST_FILE = KeychainAccessTests/Info.plist; - -LD_RUNPATH_SEARCH_PATHS[sdk=iphone*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks; -LD_RUNPATH_SEARCH_PATHS[sdk=watch*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks; -LD_RUNPATH_SEARCH_PATHS[sdk=appletv*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks; -LD_RUNPATH_SEARCH_PATHS[sdk=macosx*] = $(inherited) @executable_path/../Frameworks @loader_path/../Frameworks; - -TEST_HOST[sdk=iphone*] = $(BUILT_PRODUCTS_DIR)/TestHost.app/TestHost; -TEST_HOST[sdk=appletv*] = $(BUILT_PRODUCTS_DIR)/TestHost.app/TestHost; -TEST_HOST[sdk=macosx*] = $(BUILT_PRODUCTS_DIR)/TestHost.app/Contents/MacOS/TestHost; - -EXCLUDED_SOURCE_FILE_NAMES[sdk=watch*] = *; -EXCLUDED_SOURCE_FILE_NAMES[sdk=appletv*] = SharedCredentialTests.swift; -EXCLUDED_SOURCE_FILE_NAMES[sdk=macosx*] = SharedCredentialTests.swift; diff --git a/Carthage/Checkouts/KeychainAccess/Lib/Gemfile b/Carthage/Checkouts/KeychainAccess/Lib/Gemfile deleted file mode 100644 index fe8a107..0000000 --- a/Carthage/Checkouts/KeychainAccess/Lib/Gemfile +++ /dev/null @@ -1,5 +0,0 @@ -source 'https://rubygems.org' - -gem 'rake' -gem 'xcpretty' -gem 'xcjobs' diff --git a/Carthage/Checkouts/KeychainAccess/Lib/Gemfile.lock b/Carthage/Checkouts/KeychainAccess/Lib/Gemfile.lock deleted file mode 100644 index ba5250b..0000000 --- a/Carthage/Checkouts/KeychainAccess/Lib/Gemfile.lock +++ /dev/null @@ -1,19 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - rake (11.2.2) - rouge (1.11.1) - xcjobs (0.5.1) - xcpretty (0.2.2) - rouge (~> 1.8) - -PLATFORMS - ruby - -DEPENDENCIES - rake - xcjobs - xcpretty - -BUNDLED WITH - 1.12.5 diff --git a/Carthage/Checkouts/KeychainAccess/Lib/KeychainAccess.xcodeproj/project.pbxproj b/Carthage/Checkouts/KeychainAccess/Lib/KeychainAccess.xcodeproj/project.pbxproj deleted file mode 100644 index 8f8cd47..0000000 --- a/Carthage/Checkouts/KeychainAccess/Lib/KeychainAccess.xcodeproj/project.pbxproj +++ /dev/null @@ -1,483 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 140F19621A49D79400B0016A /* KeychainAccess.h in Headers */ = {isa = PBXBuildFile; fileRef = 140F19611A49D79400B0016A /* KeychainAccess.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 140F196F1A49D79500B0016A /* KeychainAccessTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 140F196E1A49D79500B0016A /* KeychainAccessTests.swift */; }; - 140F197B1A49D89200B0016A /* Keychain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 140F197A1A49D89200B0016A /* Keychain.swift */; }; - 142EDA851BCB505F00A32149 /* ErrorTypeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 142EDA841BCB505F00A32149 /* ErrorTypeTests.swift */; }; - 142EDB041BCBB0DD00A32149 /* SharedCredentialTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 142EDB031BCBB0DD00A32149 /* SharedCredentialTests.swift */; }; - 148F9D4A1BCB4118006EDF48 /* EnumTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 148F9D491BCB4118006EDF48 /* EnumTests.swift */; }; - 14A630181D3293C700809B3F /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14A630171D3293C700809B3F /* AppDelegate.swift */; }; - 14A6301F1D3293C700809B3F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 14A6301E1D3293C700809B3F /* Assets.xcassets */; }; - 14C3A6781D32BF9C00349459 /* KeychainAccess.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 140F195C1A49D79400B0016A /* KeychainAccess.framework */; }; - 14C3A6791D32BF9C00349459 /* KeychainAccess.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 140F195C1A49D79400B0016A /* KeychainAccess.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 140F19691A49D79500B0016A /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 140F19531A49D79400B0016A /* Project object */; - proxyType = 1; - remoteGlobalIDString = 140F195B1A49D79400B0016A; - remoteInfo = KeychainAccess; - }; - 14C3A67A1D32BF9C00349459 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 140F19531A49D79400B0016A /* Project object */; - proxyType = 1; - remoteGlobalIDString = 140F195B1A49D79400B0016A; - remoteInfo = KeychainAccess; - }; - 14F0C1991D32A160007DCDDB /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 140F19531A49D79400B0016A /* Project object */; - proxyType = 1; - remoteGlobalIDString = 14A630141D3293C700809B3F; - remoteInfo = TestHost; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 14C3A67C1D32BF9D00349459 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - 14C3A6791D32BF9C00349459 /* KeychainAccess.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 140F195C1A49D79400B0016A /* KeychainAccess.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = KeychainAccess.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 140F19601A49D79400B0016A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 140F19611A49D79400B0016A /* KeychainAccess.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KeychainAccess.h; sourceTree = ""; }; - 140F19671A49D79500B0016A /* KeychainAccessTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = KeychainAccessTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 140F196D1A49D79500B0016A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 140F196E1A49D79500B0016A /* KeychainAccessTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeychainAccessTests.swift; sourceTree = ""; }; - 140F197A1A49D89200B0016A /* Keychain.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Keychain.swift; sourceTree = ""; }; - 142EDA841BCB505F00A32149 /* ErrorTypeTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ErrorTypeTests.swift; sourceTree = ""; }; - 142EDB031BCBB0DD00A32149 /* SharedCredentialTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SharedCredentialTests.swift; sourceTree = ""; }; - 148E44E51BF9EDCB004FFEC1 /* Base.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Base.xcconfig; path = Configurations/Base.xcconfig; sourceTree = ""; }; - 148E44E61BF9EDCB004FFEC1 /* Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Configurations/Debug.xcconfig; sourceTree = ""; }; - 148E44E71BF9EDCB004FFEC1 /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Configurations/Release.xcconfig; sourceTree = ""; }; - 148E44E91BF9EDE4004FFEC1 /* Tests.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Tests.xcconfig; path = Configurations/Tests.xcconfig; sourceTree = ""; }; - 148E44EB1BF9EEB3004FFEC1 /* KeychainAccess.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = KeychainAccess.xcconfig; path = Configurations/KeychainAccess.xcconfig; sourceTree = ""; }; - 148F9D491BCB4118006EDF48 /* EnumTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EnumTests.swift; sourceTree = ""; }; - 14A630151D3293C700809B3F /* TestHost.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TestHost.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 14A630171D3293C700809B3F /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 14A6301E1D3293C700809B3F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 14A630231D3293C700809B3F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 14F0C1961D3295C4007DCDDB /* TestHost.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = TestHost.entitlements; sourceTree = ""; }; - 14F0C1981D329832007DCDDB /* TestHost.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = TestHost.xcconfig; path = Configurations/TestHost.xcconfig; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 140F19581A49D79400B0016A /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 140F19641A49D79500B0016A /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 14A630121D3293C700809B3F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 14C3A6781D32BF9C00349459 /* KeychainAccess.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 140F19521A49D79400B0016A = { - isa = PBXGroup; - children = ( - 140F195E1A49D79400B0016A /* KeychainAccess */, - 140F196B1A49D79500B0016A /* KeychainAccessTests */, - 148E44E41BF9ED6D004FFEC1 /* Cofigurations */, - 14A630161D3293C700809B3F /* TestHost */, - 140F195D1A49D79400B0016A /* Products */, - ); - sourceTree = ""; - }; - 140F195D1A49D79400B0016A /* Products */ = { - isa = PBXGroup; - children = ( - 140F195C1A49D79400B0016A /* KeychainAccess.framework */, - 140F19671A49D79500B0016A /* KeychainAccessTests.xctest */, - 14A630151D3293C700809B3F /* TestHost.app */, - ); - name = Products; - sourceTree = ""; - }; - 140F195E1A49D79400B0016A /* KeychainAccess */ = { - isa = PBXGroup; - children = ( - 140F19611A49D79400B0016A /* KeychainAccess.h */, - 140F197A1A49D89200B0016A /* Keychain.swift */, - 140F195F1A49D79400B0016A /* Supporting Files */, - ); - path = KeychainAccess; - sourceTree = ""; - }; - 140F195F1A49D79400B0016A /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 140F19601A49D79400B0016A /* Info.plist */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - 140F196B1A49D79500B0016A /* KeychainAccessTests */ = { - isa = PBXGroup; - children = ( - 140F196E1A49D79500B0016A /* KeychainAccessTests.swift */, - 148F9D491BCB4118006EDF48 /* EnumTests.swift */, - 142EDA841BCB505F00A32149 /* ErrorTypeTests.swift */, - 142EDB031BCBB0DD00A32149 /* SharedCredentialTests.swift */, - 140F196C1A49D79500B0016A /* Supporting Files */, - ); - path = KeychainAccessTests; - sourceTree = ""; - }; - 140F196C1A49D79500B0016A /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 140F196D1A49D79500B0016A /* Info.plist */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - 148E44E41BF9ED6D004FFEC1 /* Cofigurations */ = { - isa = PBXGroup; - children = ( - 148E44E51BF9EDCB004FFEC1 /* Base.xcconfig */, - 148E44E61BF9EDCB004FFEC1 /* Debug.xcconfig */, - 148E44E71BF9EDCB004FFEC1 /* Release.xcconfig */, - 148E44EB1BF9EEB3004FFEC1 /* KeychainAccess.xcconfig */, - 148E44E91BF9EDE4004FFEC1 /* Tests.xcconfig */, - 14F0C1981D329832007DCDDB /* TestHost.xcconfig */, - ); - name = Cofigurations; - sourceTree = ""; - }; - 14A630161D3293C700809B3F /* TestHost */ = { - isa = PBXGroup; - children = ( - 14A630171D3293C700809B3F /* AppDelegate.swift */, - 14A6301E1D3293C700809B3F /* Assets.xcassets */, - 14A630231D3293C700809B3F /* Info.plist */, - 14F0C1961D3295C4007DCDDB /* TestHost.entitlements */, - ); - path = TestHost; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 140F19591A49D79400B0016A /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 140F19621A49D79400B0016A /* KeychainAccess.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 140F195B1A49D79400B0016A /* KeychainAccess */ = { - isa = PBXNativeTarget; - buildConfigurationList = 140F19721A49D79500B0016A /* Build configuration list for PBXNativeTarget "KeychainAccess" */; - buildPhases = ( - 140F19571A49D79400B0016A /* Sources */, - 140F19581A49D79400B0016A /* Frameworks */, - 140F19591A49D79400B0016A /* Headers */, - 140F195A1A49D79400B0016A /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = KeychainAccess; - productName = KeychainAccess; - productReference = 140F195C1A49D79400B0016A /* KeychainAccess.framework */; - productType = "com.apple.product-type.framework"; - }; - 140F19661A49D79500B0016A /* KeychainAccessTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 140F19751A49D79500B0016A /* Build configuration list for PBXNativeTarget "KeychainAccessTests" */; - buildPhases = ( - 140F19631A49D79500B0016A /* Sources */, - 140F19641A49D79500B0016A /* Frameworks */, - 140F19651A49D79500B0016A /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 140F196A1A49D79500B0016A /* PBXTargetDependency */, - 14F0C19A1D32A160007DCDDB /* PBXTargetDependency */, - ); - name = KeychainAccessTests; - productName = KeychainAccessTests; - productReference = 140F19671A49D79500B0016A /* KeychainAccessTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - 14A630141D3293C700809B3F /* TestHost */ = { - isa = PBXNativeTarget; - buildConfigurationList = 14A630241D3293C700809B3F /* Build configuration list for PBXNativeTarget "TestHost" */; - buildPhases = ( - 14A630111D3293C700809B3F /* Sources */, - 14A630121D3293C700809B3F /* Frameworks */, - 14A630131D3293C700809B3F /* Resources */, - 14C3A67C1D32BF9D00349459 /* Embed Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - 14C3A67B1D32BF9C00349459 /* PBXTargetDependency */, - ); - name = TestHost; - productName = TestHost; - productReference = 14A630151D3293C700809B3F /* TestHost.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 140F19531A49D79400B0016A /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 0730; - LastUpgradeCheck = 0730; - ORGANIZATIONNAME = "kishikawa katsumi"; - TargetAttributes = { - 140F195B1A49D79400B0016A = { - CreatedOnToolsVersion = 6.1.1; - ProvisioningStyle = Automatic; - }; - 140F19661A49D79500B0016A = { - CreatedOnToolsVersion = 6.1.1; - TestTargetID = 14A62FFC1D32922C00809B3F; - }; - 14A630141D3293C700809B3F = { - CreatedOnToolsVersion = 7.3.1; - SystemCapabilities = { - com.apple.Keychain = { - enabled = 1; - }; - }; - }; - }; - }; - buildConfigurationList = 140F19561A49D79400B0016A /* Build configuration list for PBXProject "KeychainAccess" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 140F19521A49D79400B0016A; - productRefGroup = 140F195D1A49D79400B0016A /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 140F195B1A49D79400B0016A /* KeychainAccess */, - 140F19661A49D79500B0016A /* KeychainAccessTests */, - 14A630141D3293C700809B3F /* TestHost */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 140F195A1A49D79400B0016A /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 140F19651A49D79500B0016A /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 14A630131D3293C700809B3F /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 14A6301F1D3293C700809B3F /* Assets.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 140F19571A49D79400B0016A /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 140F197B1A49D89200B0016A /* Keychain.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 140F19631A49D79500B0016A /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 140F196F1A49D79500B0016A /* KeychainAccessTests.swift in Sources */, - 148F9D4A1BCB4118006EDF48 /* EnumTests.swift in Sources */, - 142EDA851BCB505F00A32149 /* ErrorTypeTests.swift in Sources */, - 142EDB041BCBB0DD00A32149 /* SharedCredentialTests.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 14A630111D3293C700809B3F /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 14A630181D3293C700809B3F /* AppDelegate.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 140F196A1A49D79500B0016A /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 140F195B1A49D79400B0016A /* KeychainAccess */; - targetProxy = 140F19691A49D79500B0016A /* PBXContainerItemProxy */; - }; - 14C3A67B1D32BF9C00349459 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 140F195B1A49D79400B0016A /* KeychainAccess */; - targetProxy = 14C3A67A1D32BF9C00349459 /* PBXContainerItemProxy */; - }; - 14F0C19A1D32A160007DCDDB /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 14A630141D3293C700809B3F /* TestHost */; - targetProxy = 14F0C1991D32A160007DCDDB /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 140F19701A49D79500B0016A /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 148E44E61BF9EDCB004FFEC1 /* Debug.xcconfig */; - buildSettings = { - }; - name = Debug; - }; - 140F19711A49D79500B0016A /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 148E44E71BF9EDCB004FFEC1 /* Release.xcconfig */; - buildSettings = { - }; - name = Release; - }; - 140F19731A49D79500B0016A /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 148E44EB1BF9EEB3004FFEC1 /* KeychainAccess.xcconfig */; - buildSettings = { - }; - name = Debug; - }; - 140F19741A49D79500B0016A /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 148E44EB1BF9EEB3004FFEC1 /* KeychainAccess.xcconfig */; - buildSettings = { - }; - name = Release; - }; - 140F19761A49D79500B0016A /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 148E44E91BF9EDE4004FFEC1 /* Tests.xcconfig */; - buildSettings = { - }; - name = Debug; - }; - 140F19771A49D79500B0016A /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 148E44E91BF9EDE4004FFEC1 /* Tests.xcconfig */; - buildSettings = { - }; - name = Release; - }; - 14A630251D3293C700809B3F /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 14F0C1981D329832007DCDDB /* TestHost.xcconfig */; - buildSettings = { - }; - name = Debug; - }; - 14A630261D3293C700809B3F /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 14F0C1981D329832007DCDDB /* TestHost.xcconfig */; - buildSettings = { - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 140F19561A49D79400B0016A /* Build configuration list for PBXProject "KeychainAccess" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 140F19701A49D79500B0016A /* Debug */, - 140F19711A49D79500B0016A /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 140F19721A49D79500B0016A /* Build configuration list for PBXNativeTarget "KeychainAccess" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 140F19731A49D79500B0016A /* Debug */, - 140F19741A49D79500B0016A /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 140F19751A49D79500B0016A /* Build configuration list for PBXNativeTarget "KeychainAccessTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 140F19761A49D79500B0016A /* Debug */, - 140F19771A49D79500B0016A /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 14A630241D3293C700809B3F /* Build configuration list for PBXNativeTarget "TestHost" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 14A630251D3293C700809B3F /* Debug */, - 14A630261D3293C700809B3F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 140F19531A49D79400B0016A /* Project object */; -} diff --git a/Carthage/Checkouts/KeychainAccess/Lib/KeychainAccess.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Carthage/Checkouts/KeychainAccess/Lib/KeychainAccess.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 2901444..0000000 --- a/Carthage/Checkouts/KeychainAccess/Lib/KeychainAccess.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/Carthage/Checkouts/KeychainAccess/Lib/KeychainAccess.xcodeproj/xcshareddata/xcschemes/KeychainAccess.xcscheme b/Carthage/Checkouts/KeychainAccess/Lib/KeychainAccess.xcodeproj/xcshareddata/xcschemes/KeychainAccess.xcscheme deleted file mode 100644 index ac6d593..0000000 --- a/Carthage/Checkouts/KeychainAccess/Lib/KeychainAccess.xcodeproj/xcshareddata/xcschemes/KeychainAccess.xcscheme +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Carthage/Checkouts/KeychainAccess/Lib/KeychainAccess.xcodeproj/xcshareddata/xcschemes/TestHost.xcscheme b/Carthage/Checkouts/KeychainAccess/Lib/KeychainAccess.xcodeproj/xcshareddata/xcschemes/TestHost.xcscheme deleted file mode 100644 index 3974fcd..0000000 --- a/Carthage/Checkouts/KeychainAccess/Lib/KeychainAccess.xcodeproj/xcshareddata/xcschemes/TestHost.xcscheme +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Carthage/Checkouts/KeychainAccess/Lib/KeychainAccess/Info.plist b/Carthage/Checkouts/KeychainAccess/Lib/KeychainAccess/Info.plist deleted file mode 100644 index dc2b99a..0000000 --- a/Carthage/Checkouts/KeychainAccess/Lib/KeychainAccess/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - FMWK - CFBundleShortVersionString - 3.0.1 - CFBundleSignature - ???? - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - NSPrincipalClass - - - diff --git a/Carthage/Checkouts/KeychainAccess/Lib/KeychainAccess/Keychain.swift b/Carthage/Checkouts/KeychainAccess/Lib/KeychainAccess/Keychain.swift deleted file mode 100644 index c2cf917..0000000 --- a/Carthage/Checkouts/KeychainAccess/Lib/KeychainAccess/Keychain.swift +++ /dev/null @@ -1,2889 +0,0 @@ -// -// Keychain.swift -// KeychainAccess -// -// Created by kishikawa katsumi on 2014/12/24. -// Copyright (c) 2014 kishikawa katsumi. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -import Foundation -import Security - -public let KeychainAccessErrorDomain = "com.kishikawakatsumi.KeychainAccess.error" - -public enum ItemClass { - case genericPassword - case internetPassword -} - -public enum ProtocolType { - case ftp - case ftpAccount - case http - case irc - case nntp - case pop3 - case smtp - case socks - case imap - case ldap - case appleTalk - case afp - case telnet - case ssh - case ftps - case https - case httpProxy - case httpsProxy - case ftpProxy - case smb - case rtsp - case rtspProxy - case daap - case eppc - case ipp - case nntps - case ldaps - case telnetS - case imaps - case ircs - case pop3S -} - -public enum AuthenticationType { - case ntlm - case msn - case dpa - case rpa - case httpBasic - case httpDigest - case htmlForm - case `default` -} - -public enum Accessibility { - /** - Item data can only be accessed - while the device is unlocked. This is recommended for items that only - need be accesible while the application is in the foreground. Items - with this attribute will migrate to a new device when using encrypted - backups. - */ - case whenUnlocked - - /** - Item data can only be - accessed once the device has been unlocked after a restart. This is - recommended for items that need to be accesible by background - applications. Items with this attribute will migrate to a new device - when using encrypted backups. - */ - case afterFirstUnlock - - /** - Item data can always be accessed - regardless of the lock state of the device. This is not recommended - for anything except system use. Items with this attribute will migrate - to a new device when using encrypted backups. - */ - case always - - /** - Item data can - only be accessed while the device is unlocked. This class is only - available if a passcode is set on the device. This is recommended for - items that only need to be accessible while the application is in the - foreground. Items with this attribute will never migrate to a new - device, so after a backup is restored to a new device, these items - will be missing. No items can be stored in this class on devices - without a passcode. Disabling the device passcode will cause all - items in this class to be deleted. - */ - @available(iOS 8.0, OSX 10.10, *) - case whenPasscodeSetThisDeviceOnly - - /** - Item data can only - be accessed while the device is unlocked. This is recommended for items - that only need be accesible while the application is in the foreground. - Items with this attribute will never migrate to a new device, so after - a backup is restored to a new device, these items will be missing. - */ - case whenUnlockedThisDeviceOnly - - /** - Item data can - only be accessed once the device has been unlocked after a restart. - This is recommended for items that need to be accessible by background - applications. Items with this attribute will never migrate to a new - device, so after a backup is restored to a new device these items will - be missing. - */ - case afterFirstUnlockThisDeviceOnly - - /** - Item data can always - be accessed regardless of the lock state of the device. This option - is not recommended for anything except system use. Items with this - attribute will never migrate to a new device, so after a backup is - restored to a new device, these items will be missing. - */ - case alwaysThisDeviceOnly -} - -public struct AuthenticationPolicy: OptionSet { - /** - User presence policy using Touch ID or Passcode. Touch ID does not - have to be available or enrolled. Item is still accessible by Touch ID - even if fingers are added or removed. - */ - @available(iOS 8.0, OSX 10.10, *) - @available(watchOS, unavailable) - public static let userPresence = AuthenticationPolicy(rawValue: 1 << 0) - - /** - Constraint: Touch ID (any finger). Touch ID must be available and - at least one finger must be enrolled. Item is still accessible by - Touch ID even if fingers are added or removed. - */ - @available(iOS 9.0, *) - @available(OSX, unavailable) - @available(watchOS, unavailable) - public static let touchIDAny = AuthenticationPolicy(rawValue: 1 << 1) - - /** - Constraint: Touch ID from the set of currently enrolled fingers. - Touch ID must be available and at least one finger must be enrolled. - When fingers are added or removed, the item is invalidated. - */ - @available(iOS 9.0, *) - @available(OSX, unavailable) - @available(watchOS, unavailable) - public static let touchIDCurrentSet = AuthenticationPolicy(rawValue: 1 << 3) - - /** - Constraint: Device passcode - */ - @available(iOS 9.0, OSX 10.11, *) - @available(watchOS, unavailable) - public static let devicePasscode = AuthenticationPolicy(rawValue: 1 << 4) - - /** - Constraint logic operation: when using more than one constraint, - at least one of them must be satisfied. - */ - @available(iOS 9.0, *) - @available(OSX, unavailable) - @available(watchOS, unavailable) - public static let or = AuthenticationPolicy(rawValue: 1 << 14) - - /** - Constraint logic operation: when using more than one constraint, - all must be satisfied. - */ - @available(iOS 9.0, *) - @available(OSX, unavailable) - @available(watchOS, unavailable) - public static let and = AuthenticationPolicy(rawValue: 1 << 15) - - /** - Create access control for private key operations (i.e. sign operation) - */ - @available(iOS 9.0, *) - @available(OSX, unavailable) - @available(watchOS, unavailable) - public static let privateKeyUsage = AuthenticationPolicy(rawValue: 1 << 30) - - /** - Security: Application provided password for data encryption key generation. - This is not a constraint but additional item encryption mechanism. - */ - @available(iOS 9.0, *) - @available(OSX, unavailable) - @available(watchOS, unavailable) - public static let applicationPassword = AuthenticationPolicy(rawValue: 1 << 31) - - #if swift(>=2.3) - public let rawValue: UInt - - public init(rawValue: UInt) { - self.rawValue = rawValue - } - #else - public let rawValue: Int - - public init(rawValue: Int) { - self.rawValue = rawValue - } - #endif -} - -public struct Attributes { - public var `class`: String? { - return attributes[Class] as? String - } - public var data: Data? { - return attributes[ValueData] as? Data - } - public var ref: Data? { - return attributes[ValueRef] as? Data - } - public var persistentRef: Data? { - return attributes[ValuePersistentRef] as? Data - } - - public var accessible: String? { - return attributes[AttributeAccessible] as? String - } - public var accessControl: SecAccessControl? { - if #available(OSX 10.10, *) { - if let accessControl = attributes[AttributeAccessControl] { - return (accessControl as! SecAccessControl) - } - return nil - } else { - return nil - } - } - public var accessGroup: String? { - return attributes[AttributeAccessGroup] as? String - } - public var synchronizable: Bool? { - return attributes[AttributeSynchronizable] as? Bool - } - public var creationDate: Date? { - return attributes[AttributeCreationDate] as? Date - } - public var modificationDate: Date? { - return attributes[AttributeModificationDate] as? Date - } - public var attributeDescription: String? { - return attributes[AttributeDescription] as? String - } - public var comment: String? { - return attributes[AttributeComment] as? String - } - public var creator: String? { - return attributes[AttributeCreator] as? String - } - public var type: String? { - return attributes[AttributeType] as? String - } - public var label: String? { - return attributes[AttributeLabel] as? String - } - public var isInvisible: Bool? { - return attributes[AttributeIsInvisible] as? Bool - } - public var isNegative: Bool? { - return attributes[AttributeIsNegative] as? Bool - } - public var account: String? { - return attributes[AttributeAccount] as? String - } - public var service: String? { - return attributes[AttributeService] as? String - } - public var generic: Data? { - return attributes[AttributeGeneric] as? Data - } - public var securityDomain: String? { - return attributes[AttributeSecurityDomain] as? String - } - public var server: String? { - return attributes[AttributeServer] as? String - } - public var `protocol`: String? { - return attributes[AttributeProtocol] as? String - } - public var authenticationType: String? { - return attributes[AttributeAuthenticationType] as? String - } - public var port: Int? { - return attributes[AttributePort] as? Int - } - public var path: String? { - return attributes[AttributePath] as? String - } - - fileprivate let attributes: [String: Any] - - init(attributes: [String: Any]) { - self.attributes = attributes - } - - public subscript(key: String) -> Any? { - get { - return attributes[key] - } - } -} - -public final class Keychain { - public var itemClass: ItemClass { - return options.itemClass - } - - public var service: String { - return options.service - } - - public var accessGroup: String? { - return options.accessGroup - } - - public var server: URL { - return options.server - } - - public var protocolType: ProtocolType { - return options.protocolType - } - - public var authenticationType: AuthenticationType { - return options.authenticationType - } - - public var accessibility: Accessibility { - return options.accessibility - } - - @available(iOS 8.0, OSX 10.10, *) - @available(watchOS, unavailable) - public var authenticationPolicy: AuthenticationPolicy? { - return options.authenticationPolicy - } - - public var synchronizable: Bool { - return options.synchronizable - } - - public var label: String? { - return options.label - } - - public var comment: String? { - return options.comment - } - - @available(iOS 8.0, OSX 10.10, *) - @available(watchOS, unavailable) - public var authenticationPrompt: String? { - return options.authenticationPrompt - } - - fileprivate let options: Options - - // MARK: - - public convenience init() { - var options = Options() - if let bundleIdentifier = Bundle.main.bundleIdentifier { - options.service = bundleIdentifier - } - self.init(options) - } - - public convenience init(service: String) { - var options = Options() - options.service = service - self.init(options) - } - - public convenience init(accessGroup: String) { - var options = Options() - if let bundleIdentifier = Bundle.main.bundleIdentifier { - options.service = bundleIdentifier - } - options.accessGroup = accessGroup - self.init(options) - } - - public convenience init(service: String, accessGroup: String) { - var options = Options() - options.service = service - options.accessGroup = accessGroup - self.init(options) - } - - public convenience init(server: String, protocolType: ProtocolType, authenticationType: AuthenticationType = .default) { - self.init(server: URL(string: server)!, protocolType: protocolType, authenticationType: authenticationType) - } - - public convenience init(server: URL, protocolType: ProtocolType, authenticationType: AuthenticationType = .default) { - var options = Options() - options.itemClass = .internetPassword - options.server = server - options.protocolType = protocolType - options.authenticationType = authenticationType - self.init(options) - } - - fileprivate init(_ opts: Options) { - options = opts - } - - // MARK: - - public func accessibility(_ accessibility: Accessibility) -> Keychain { - var options = self.options - options.accessibility = accessibility - return Keychain(options) - } - - @available(iOS 8.0, OSX 10.10, *) - @available(watchOS, unavailable) - public func accessibility(_ accessibility: Accessibility, authenticationPolicy: AuthenticationPolicy) -> Keychain { - var options = self.options - options.accessibility = accessibility - options.authenticationPolicy = authenticationPolicy - return Keychain(options) - } - - public func synchronizable(_ synchronizable: Bool) -> Keychain { - var options = self.options - options.synchronizable = synchronizable - return Keychain(options) - } - - public func label(_ label: String) -> Keychain { - var options = self.options - options.label = label - return Keychain(options) - } - - public func comment(_ comment: String) -> Keychain { - var options = self.options - options.comment = comment - return Keychain(options) - } - - public func attributes(_ attributes: [String: Any]) -> Keychain { - var options = self.options - attributes.forEach { options.attributes.updateValue($1, forKey: $0) } - return Keychain(options) - } - - @available(iOS 8.0, OSX 10.10, *) - @available(watchOS, unavailable) - public func authenticationPrompt(_ authenticationPrompt: String) -> Keychain { - var options = self.options - options.authenticationPrompt = authenticationPrompt - return Keychain(options) - } - - // MARK: - - public func get(_ key: String) throws -> String? { - return try getString(key) - } - - public func getString(_ key: String) throws -> String? { - guard let data = try getData(key) else { - return nil - } - guard let string = String(data: data, encoding: .utf8) else { - print("failed to convert data to string") - throw Status.conversionError - } - return string - } - - public func getData(_ key: String) throws -> Data? { - var query = options.query() - - query[MatchLimit] = MatchLimitOne - query[ReturnData] = kCFBooleanTrue - - query[AttributeAccount] = key - - var result: AnyObject? - let status = SecItemCopyMatching(query as CFDictionary, &result) - - switch status { - case errSecSuccess: - guard let data = result as? Data else { - throw Status.unexpectedError - } - return data - case errSecItemNotFound: - return nil - default: - throw securityError(status: status) - } - } - - public func get(_ key: String, handler: (Attributes?) -> T) throws -> T { - var query = options.query() - - query[MatchLimit] = MatchLimitOne - - query[ReturnData] = kCFBooleanTrue - query[ReturnAttributes] = kCFBooleanTrue - query[ReturnRef] = kCFBooleanTrue - query[ReturnPersistentRef] = kCFBooleanTrue - - query[AttributeAccount] = key - - var result: AnyObject? - let status = SecItemCopyMatching(query as CFDictionary, &result) - - switch status { - case errSecSuccess: - guard let attributes = result as? [String: Any] else { - throw Status.unexpectedError - } - return handler(Attributes(attributes: attributes)) - case errSecItemNotFound: - return handler(nil) - default: - throw securityError(status: status) - } - } - - // MARK: - - public func set(_ value: String, key: String) throws { - guard let data = value.data(using: .utf8, allowLossyConversion: false) else { - print("failed to convert string to data") - throw Status.conversionError - } - try set(data, key: key) - } - - public func set(_ value: Data, key: String) throws { - var query = options.query() - query[AttributeAccount] = key - #if os(iOS) - if #available(iOS 9.0, *) { - query[UseAuthenticationUI] = UseAuthenticationUIFail - } else { - query[UseNoAuthenticationUI] = kCFBooleanTrue - } - #elseif os(OSX) - query[ReturnData] = kCFBooleanTrue - if #available(OSX 10.11, *) { - query[UseAuthenticationUI] = UseAuthenticationUIFail - } - #endif - - var status = SecItemCopyMatching(query as CFDictionary, nil) - switch status { - case errSecSuccess, errSecInteractionNotAllowed: - var query = options.query() - query[AttributeAccount] = key - - var (attributes, error) = options.attributes(key: nil, value: value) - if let error = error { - print(error.localizedDescription) - throw error - } - - options.attributes.forEach { attributes.updateValue($1, forKey: $0) } - - #if os(iOS) - if status == errSecInteractionNotAllowed && floor(NSFoundationVersionNumber) <= floor(NSFoundationVersionNumber_iOS_8_0) { - try remove(key) - try set(value, key: key) - } else { - status = SecItemUpdate(query as CFDictionary, attributes as CFDictionary) - if status != errSecSuccess { - throw securityError(status: status) - } - } - #else - status = SecItemUpdate(query as CFDictionary, attributes as CFDictionary) - if status != errSecSuccess { - throw securityError(status: status) - } - #endif - case errSecItemNotFound: - var (attributes, error) = options.attributes(key: key, value: value) - if let error = error { - print(error.localizedDescription) - throw error - } - - options.attributes.forEach { attributes.updateValue($1, forKey: $0) } - - status = SecItemAdd(attributes as CFDictionary, nil) - if status != errSecSuccess { - throw securityError(status: status) - } - default: - throw securityError(status: status) - } - } - - public subscript(key: String) -> String? { - get { - return (try? get(key)).flatMap { $0 } - } - - set { - if let value = newValue { - do { - try set(value, key: key) - } catch {} - } else { - do { - try remove(key) - } catch {} - } - } - } - - public subscript(string key: String) -> String? { - get { - return self[key] - } - - set { - self[key] = newValue - } - } - - public subscript(data key: String) -> Data? { - get { - return (try? getData(key)).flatMap { $0 } - } - - set { - if let value = newValue { - do { - try set(value, key: key) - } catch {} - } else { - do { - try remove(key) - } catch {} - } - } - } - - public subscript(attributes key: String) -> Attributes? { - get { - return (try? get(key) { $0 }).flatMap { $0 } - } - } - - // MARK: - - public func remove(_ key: String) throws { - var query = options.query() - query[AttributeAccount] = key - - let status = SecItemDelete(query as CFDictionary) - if status != errSecSuccess && status != errSecItemNotFound { - throw securityError(status: status) - } - } - - public func removeAll() throws { - var query = options.query() - #if !os(iOS) && !os(watchOS) && !os(tvOS) - query[MatchLimit] = MatchLimitAll - #endif - - let status = SecItemDelete(query as CFDictionary) - if status != errSecSuccess && status != errSecItemNotFound { - throw securityError(status: status) - } - } - - // MARK: - - public func contains(_ key: String) throws -> Bool { - var query = options.query() - query[AttributeAccount] = key - - let status = SecItemCopyMatching(query as CFDictionary, nil) - switch status { - case errSecSuccess: - return true - case errSecItemNotFound: - return false - default: - throw securityError(status: status) - } - } - - // MARK: - - public class func allKeys(_ itemClass: ItemClass) -> [(String, String)] { - var query = [String: Any]() - query[Class] = itemClass.rawValue - query[AttributeSynchronizable] = SynchronizableAny - query[MatchLimit] = MatchLimitAll - query[ReturnAttributes] = kCFBooleanTrue - - var result: AnyObject? - let status = SecItemCopyMatching(query as CFDictionary, &result) - - switch status { - case errSecSuccess: - if let items = result as? [[String: Any]] { - return prettify(itemClass: itemClass, items: items).map { - switch itemClass { - case .genericPassword: - return (($0["service"] ?? "") as! String, ($0["key"] ?? "") as! String) - case .internetPassword: - return (($0["server"] ?? "") as! String, ($0["key"] ?? "") as! String) - } - } - } - case errSecItemNotFound: - return [] - default: () - } - - securityError(status: status) - return [] - } - - public func allKeys() -> [String] { - return type(of: self).prettify(itemClass: itemClass, items: items()).map { $0["key"] as! String } - } - - public class func allItems(_ itemClass: ItemClass) -> [[String: Any]] { - var query = [String: Any]() - query[Class] = itemClass.rawValue - query[MatchLimit] = MatchLimitAll - query[ReturnAttributes] = kCFBooleanTrue - #if os(iOS) || os(watchOS) || os(tvOS) - query[ReturnData] = kCFBooleanTrue - #endif - - var result: AnyObject? - let status = SecItemCopyMatching(query as CFDictionary, &result) - - switch status { - case errSecSuccess: - if let items = result as? [[String: Any]] { - return prettify(itemClass: itemClass, items: items) - } - case errSecItemNotFound: - return [] - default: () - } - - securityError(status: status) - return [] - } - - public func allItems() -> [[String: Any]] { - return type(of: self).prettify(itemClass: itemClass, items: items()) - } - - #if os(iOS) - @available(iOS 8.0, *) - public func getSharedPassword(_ completion: @escaping (_ account: String?, _ password: String?, _ error: Error?) -> () = { account, password, error -> () in }) { - if let domain = server.host { - type(of: self).requestSharedWebCredential(domain: domain, account: nil) { (credentials, error) -> () in - if let credential = credentials.first { - let account = credential["account"] - let password = credential["password"] - completion(account, password, error) - } else { - completion(nil, nil, error) - } - } - } else { - let error = securityError(status: Status.param.rawValue) - completion(nil, nil, error) - } - } - #endif - - #if os(iOS) - @available(iOS 8.0, *) - public func getSharedPassword(_ account: String, completion: @escaping (_ password: String?, _ error: Error?) -> () = { password, error -> () in }) { - if let domain = server.host { - type(of: self).requestSharedWebCredential(domain: domain, account: account) { (credentials, error) -> () in - if let credential = credentials.first { - if let password = credential["password"] { - completion(password, error) - } else { - completion(nil, error) - } - } else { - completion(nil, error) - } - } - } else { - let error = securityError(status: Status.param.rawValue) - completion(nil, error) - } - } - #endif - - #if os(iOS) - @available(iOS 8.0, *) - public func setSharedPassword(_ password: String, account: String, completion: @escaping (_ error: Error?) -> () = { e -> () in }) { - setSharedPassword(password as String?, account: account, completion: completion) - } - #endif - - #if os(iOS) - @available(iOS 8.0, *) - fileprivate func setSharedPassword(_ password: String?, account: String, completion: @escaping (_ error: Error?) -> () = { e -> () in }) { - if let domain = server.host { - SecAddSharedWebCredential(domain as CFString, account as CFString, password as CFString?) { error -> () in - if let error = error { - completion(error.error) - } else { - completion(nil) - } - } - } else { - let error = securityError(status: Status.param.rawValue) - completion(error) - } - } - #endif - - #if os(iOS) - @available(iOS 8.0, *) - public func removeSharedPassword(_ account: String, completion: @escaping (_ error: Error?) -> () = { e -> () in }) { - setSharedPassword(nil, account: account, completion: completion) - } - #endif - - #if os(iOS) - @available(iOS 8.0, *) - public class func requestSharedWebCredential(_ completion: @escaping (_ credentials: [[String: String]], _ error: Error?) -> () = { credentials, error -> () in }) { - requestSharedWebCredential(domain: nil, account: nil, completion: completion) - } - #endif - - #if os(iOS) - @available(iOS 8.0, *) - public class func requestSharedWebCredential(domain: String, completion: @escaping (_ credentials: [[String: String]], _ error: Error?) -> () = { credentials, error -> () in }) { - requestSharedWebCredential(domain: domain, account: nil, completion: completion) - } - #endif - - #if os(iOS) - @available(iOS 8.0, *) - public class func requestSharedWebCredential(domain: String, account: String, completion: @escaping (_ credentials: [[String: String]], _ error: Error?) -> () = { credentials, error -> () in }) { - requestSharedWebCredential(domain: Optional(domain), account: Optional(account)!, completion: completion) - } - #endif - - #if os(iOS) - @available(iOS 8.0, *) - fileprivate class func requestSharedWebCredential(domain: String?, account: String?, completion: @escaping (_ credentials: [[String: String]], _ error: Error?) -> ()) { - SecRequestSharedWebCredential(domain as CFString?, account as CFString?) { (credentials, error) -> () in - var remoteError: NSError? - if let error = error { - remoteError = error.error - if remoteError?.code != Int(errSecItemNotFound) { - print("error:[\(remoteError!.code)] \(remoteError!.localizedDescription)") - } - } - if let credentials = credentials { - let credentials = (credentials as NSArray).map { credentials -> [String: String] in - var credential = [String: String]() - if let credentials = credentials as? [String: String] { - if let server = credentials[AttributeServer] { - credential["server"] = server - } - if let account = credentials[AttributeAccount] { - credential["account"] = account - } - if let password = credentials[SharedPassword] { - credential["password"] = password - } - } - return credential - } - completion(credentials, remoteError) - } else { - completion([], remoteError) - } - } - } - #endif - - #if os(iOS) - /** - @abstract Returns a randomly generated password. - @return String password in the form xxx-xxx-xxx-xxx where x is taken from the sets "abcdefghkmnopqrstuvwxy", "ABCDEFGHJKLMNPQRSTUVWXYZ", "3456789" with at least one character from each set being present. - */ - @available(iOS 8.0, *) - public class func generatePassword() -> String { - return SecCreateSharedWebCredentialPassword()! as String - } - #endif - - // MARK: - - fileprivate func items() -> [[String: Any]] { - var query = options.query() - query[MatchLimit] = MatchLimitAll - query[ReturnAttributes] = kCFBooleanTrue - #if os(iOS) || os(watchOS) || os(tvOS) - query[ReturnData] = kCFBooleanTrue - #endif - - var result: AnyObject? - let status = SecItemCopyMatching(query as CFDictionary, &result) - - switch status { - case errSecSuccess: - if let items = result as? [[String: Any]] { - return items - } - case errSecItemNotFound: - return [] - default: () - } - - securityError(status: status) - return [] - } - - fileprivate class func prettify(itemClass: ItemClass, items: [[String: Any]]) -> [[String: Any]] { - let items = items.map { attributes -> [String: Any] in - var item = [String: Any]() - - item["class"] = itemClass.description - - switch itemClass { - case .genericPassword: - if let service = attributes[AttributeService] as? String { - item["service"] = service - } - if let accessGroup = attributes[AttributeAccessGroup] as? String { - item["accessGroup"] = accessGroup - } - case .internetPassword: - if let server = attributes[AttributeServer] as? String { - item["server"] = server - } - if let proto = attributes[AttributeProtocol] as? String { - if let protocolType = ProtocolType(rawValue: proto) { - item["protocol"] = protocolType.description - } - } - if let auth = attributes[AttributeAuthenticationType] as? String { - if let authenticationType = AuthenticationType(rawValue: auth) { - item["authenticationType"] = authenticationType.description - } - } - } - - if let key = attributes[AttributeAccount] as? String { - item["key"] = key - } - if let data = attributes[ValueData] as? Data { - if let text = String(data: data, encoding: .utf8) { - item["value"] = text - } else { - item["value"] = data - } - } - - if let accessible = attributes[AttributeAccessible] as? String { - if let accessibility = Accessibility(rawValue: accessible) { - item["accessibility"] = accessibility.description - } - } - if let synchronizable = attributes[AttributeSynchronizable] as? Bool { - item["synchronizable"] = synchronizable ? "true" : "false" - } - - return item - } - return items - } - - // MARK: - - @discardableResult - fileprivate class func securityError(status: OSStatus) -> Error { - let error = Status(status: status) - print("OSStatus error:[\(error.errorCode)] \(error.description)") - - return error - } - - @discardableResult - fileprivate func securityError(status: OSStatus) -> Error { - return type(of: self).securityError(status: status) - } -} - -struct Options { - var itemClass: ItemClass = .genericPassword - - var service: String = "" - var accessGroup: String? = nil - - var server: URL! - var protocolType: ProtocolType! - var authenticationType: AuthenticationType = .default - - var accessibility: Accessibility = .afterFirstUnlock - var authenticationPolicy: AuthenticationPolicy? - - var synchronizable: Bool = false - - var label: String? - var comment: String? - - var authenticationPrompt: String? - - var attributes = [String: Any]() -} - -/** Class Key Constant */ -private let Class = String(kSecClass) - -/** Attribute Key Constants */ -private let AttributeAccessible = String(kSecAttrAccessible) - -@available(iOS 8.0, OSX 10.10, *) -private let AttributeAccessControl = String(kSecAttrAccessControl) - -private let AttributeAccessGroup = String(kSecAttrAccessGroup) -private let AttributeSynchronizable = String(kSecAttrSynchronizable) -private let AttributeCreationDate = String(kSecAttrCreationDate) -private let AttributeModificationDate = String(kSecAttrModificationDate) -private let AttributeDescription = String(kSecAttrDescription) -private let AttributeComment = String(kSecAttrComment) -private let AttributeCreator = String(kSecAttrCreator) -private let AttributeType = String(kSecAttrType) -private let AttributeLabel = String(kSecAttrLabel) -private let AttributeIsInvisible = String(kSecAttrIsInvisible) -private let AttributeIsNegative = String(kSecAttrIsNegative) -private let AttributeAccount = String(kSecAttrAccount) -private let AttributeService = String(kSecAttrService) -private let AttributeGeneric = String(kSecAttrGeneric) -private let AttributeSecurityDomain = String(kSecAttrSecurityDomain) -private let AttributeServer = String(kSecAttrServer) -private let AttributeProtocol = String(kSecAttrProtocol) -private let AttributeAuthenticationType = String(kSecAttrAuthenticationType) -private let AttributePort = String(kSecAttrPort) -private let AttributePath = String(kSecAttrPath) - -private let SynchronizableAny = kSecAttrSynchronizableAny - -/** Search Constants */ -private let MatchLimit = String(kSecMatchLimit) -private let MatchLimitOne = kSecMatchLimitOne -private let MatchLimitAll = kSecMatchLimitAll - -/** Return Type Key Constants */ -private let ReturnData = String(kSecReturnData) -private let ReturnAttributes = String(kSecReturnAttributes) -private let ReturnRef = String(kSecReturnRef) -private let ReturnPersistentRef = String(kSecReturnPersistentRef) - -/** Value Type Key Constants */ -private let ValueData = String(kSecValueData) -private let ValueRef = String(kSecValueRef) -private let ValuePersistentRef = String(kSecValuePersistentRef) - -/** Other Constants */ -@available(iOS 8.0, OSX 10.10, *) -private let UseOperationPrompt = String(kSecUseOperationPrompt) - -#if os(iOS) -@available(iOS, introduced: 8.0, deprecated: 9.0, message: "Use a UseAuthenticationUI instead.") -private let UseNoAuthenticationUI = String(kSecUseNoAuthenticationUI) -#endif - -@available(iOS 9.0, OSX 10.11, *) -@available(watchOS, unavailable) -private let UseAuthenticationUI = String(kSecUseAuthenticationUI) - -@available(iOS 9.0, OSX 10.11, *) -@available(watchOS, unavailable) -private let UseAuthenticationContext = String(kSecUseAuthenticationContext) - -@available(iOS 9.0, OSX 10.11, *) -@available(watchOS, unavailable) -private let UseAuthenticationUIAllow = String(kSecUseAuthenticationUIAllow) - -@available(iOS 9.0, OSX 10.11, *) -@available(watchOS, unavailable) -private let UseAuthenticationUIFail = String(kSecUseAuthenticationUIFail) - -@available(iOS 9.0, OSX 10.11, *) -@available(watchOS, unavailable) -private let UseAuthenticationUISkip = String(kSecUseAuthenticationUISkip) - -#if os(iOS) -/** Credential Key Constants */ -private let SharedPassword = String(kSecSharedPassword) -#endif - -extension Keychain: CustomStringConvertible, CustomDebugStringConvertible { - public var description: String { - let items = allItems() - if items.isEmpty { - return "[]" - } - var description = "[\n" - for item in items { - description += " " - description += "\(item)\n" - } - description += "]" - return description - } - - public var debugDescription: String { - return "\(items())" - } -} - -extension Options { - - func query() -> [String: Any] { - var query = [String: Any]() - - query[Class] = itemClass.rawValue - query[AttributeSynchronizable] = SynchronizableAny - - switch itemClass { - case .genericPassword: - query[AttributeService] = service - // Access group is not supported on any simulators. - #if (!arch(i386) && !arch(x86_64)) || (!os(iOS) && !os(watchOS) && !os(tvOS)) - if let accessGroup = self.accessGroup { - query[AttributeAccessGroup] = accessGroup - } - #endif - case .internetPassword: - query[AttributeServer] = server.host - query[AttributePort] = server.port - query[AttributeProtocol] = protocolType.rawValue - query[AttributeAuthenticationType] = authenticationType.rawValue - } - - if #available(OSX 10.10, *) { - if authenticationPrompt != nil { - query[UseOperationPrompt] = authenticationPrompt - } - } - - return query - } - - func attributes(key: String?, value: Data) -> ([String: Any], Error?) { - var attributes: [String: Any] - - if key != nil { - attributes = query() - attributes[AttributeAccount] = key - } else { - attributes = [String: Any]() - } - - attributes[ValueData] = value - - if label != nil { - attributes[AttributeLabel] = label - } - if comment != nil { - attributes[AttributeComment] = comment - } - - if let policy = authenticationPolicy { - if #available(OSX 10.10, *) { - var error: Unmanaged? - guard let accessControl = SecAccessControlCreateWithFlags(kCFAllocatorDefault, accessibility.rawValue as CFTypeRef, SecAccessControlCreateFlags(rawValue: CFOptionFlags(policy.rawValue)), &error) else { - if let error = error?.takeUnretainedValue() { - return (attributes, error.error) - } - - return (attributes, Status.unexpectedError) - } - attributes[AttributeAccessControl] = accessControl - } else { - print("Unavailable 'Touch ID integration' on OS X versions prior to 10.10.") - } - } else { - attributes[AttributeAccessible] = accessibility.rawValue - } - - attributes[AttributeSynchronizable] = synchronizable ? kCFBooleanTrue : kCFBooleanFalse - - return (attributes, nil) - } -} - -// MARK: - -extension Attributes: CustomStringConvertible, CustomDebugStringConvertible { - public var description: String { - return "\(attributes)" - } - - public var debugDescription: String { - return description - } -} - -extension ItemClass: RawRepresentable, CustomStringConvertible { - - public init?(rawValue: String) { - switch rawValue { - case String(kSecClassGenericPassword): - self = .genericPassword - case String(kSecClassInternetPassword): - self = .internetPassword - default: - return nil - } - } - - public var rawValue: String { - switch self { - case .genericPassword: - return String(kSecClassGenericPassword) - case .internetPassword: - return String(kSecClassInternetPassword) - } - } - - public var description: String { - switch self { - case .genericPassword: - return "GenericPassword" - case .internetPassword: - return "InternetPassword" - } - } -} - -extension ProtocolType: RawRepresentable, CustomStringConvertible { - - public init?(rawValue: String) { - switch rawValue { - case String(kSecAttrProtocolFTP): - self = .ftp - case String(kSecAttrProtocolFTPAccount): - self = .ftpAccount - case String(kSecAttrProtocolHTTP): - self = .http - case String(kSecAttrProtocolIRC): - self = .irc - case String(kSecAttrProtocolNNTP): - self = .nntp - case String(kSecAttrProtocolPOP3): - self = .pop3 - case String(kSecAttrProtocolSMTP): - self = .smtp - case String(kSecAttrProtocolSOCKS): - self = .socks - case String(kSecAttrProtocolIMAP): - self = .imap - case String(kSecAttrProtocolLDAP): - self = .ldap - case String(kSecAttrProtocolAppleTalk): - self = .appleTalk - case String(kSecAttrProtocolAFP): - self = .afp - case String(kSecAttrProtocolTelnet): - self = .telnet - case String(kSecAttrProtocolSSH): - self = .ssh - case String(kSecAttrProtocolFTPS): - self = .ftps - case String(kSecAttrProtocolHTTPS): - self = .https - case String(kSecAttrProtocolHTTPProxy): - self = .httpProxy - case String(kSecAttrProtocolHTTPSProxy): - self = .httpsProxy - case String(kSecAttrProtocolFTPProxy): - self = .ftpProxy - case String(kSecAttrProtocolSMB): - self = .smb - case String(kSecAttrProtocolRTSP): - self = .rtsp - case String(kSecAttrProtocolRTSPProxy): - self = .rtspProxy - case String(kSecAttrProtocolDAAP): - self = .daap - case String(kSecAttrProtocolEPPC): - self = .eppc - case String(kSecAttrProtocolIPP): - self = .ipp - case String(kSecAttrProtocolNNTPS): - self = .nntps - case String(kSecAttrProtocolLDAPS): - self = .ldaps - case String(kSecAttrProtocolTelnetS): - self = .telnetS - case String(kSecAttrProtocolIMAPS): - self = .imaps - case String(kSecAttrProtocolIRCS): - self = .ircs - case String(kSecAttrProtocolPOP3S): - self = .pop3S - default: - return nil - } - } - - public var rawValue: String { - switch self { - case .ftp: - return String(kSecAttrProtocolFTP) - case .ftpAccount: - return String(kSecAttrProtocolFTPAccount) - case .http: - return String(kSecAttrProtocolHTTP) - case .irc: - return String(kSecAttrProtocolIRC) - case .nntp: - return String(kSecAttrProtocolNNTP) - case .pop3: - return String(kSecAttrProtocolPOP3) - case .smtp: - return String(kSecAttrProtocolSMTP) - case .socks: - return String(kSecAttrProtocolSOCKS) - case .imap: - return String(kSecAttrProtocolIMAP) - case .ldap: - return String(kSecAttrProtocolLDAP) - case .appleTalk: - return String(kSecAttrProtocolAppleTalk) - case .afp: - return String(kSecAttrProtocolAFP) - case .telnet: - return String(kSecAttrProtocolTelnet) - case .ssh: - return String(kSecAttrProtocolSSH) - case .ftps: - return String(kSecAttrProtocolFTPS) - case .https: - return String(kSecAttrProtocolHTTPS) - case .httpProxy: - return String(kSecAttrProtocolHTTPProxy) - case .httpsProxy: - return String(kSecAttrProtocolHTTPSProxy) - case .ftpProxy: - return String(kSecAttrProtocolFTPProxy) - case .smb: - return String(kSecAttrProtocolSMB) - case .rtsp: - return String(kSecAttrProtocolRTSP) - case .rtspProxy: - return String(kSecAttrProtocolRTSPProxy) - case .daap: - return String(kSecAttrProtocolDAAP) - case .eppc: - return String(kSecAttrProtocolEPPC) - case .ipp: - return String(kSecAttrProtocolIPP) - case .nntps: - return String(kSecAttrProtocolNNTPS) - case .ldaps: - return String(kSecAttrProtocolLDAPS) - case .telnetS: - return String(kSecAttrProtocolTelnetS) - case .imaps: - return String(kSecAttrProtocolIMAPS) - case .ircs: - return String(kSecAttrProtocolIRCS) - case .pop3S: - return String(kSecAttrProtocolPOP3S) - } - } - - public var description: String { - switch self { - case .ftp: - return "FTP" - case .ftpAccount: - return "FTPAccount" - case .http: - return "HTTP" - case .irc: - return "IRC" - case .nntp: - return "NNTP" - case .pop3: - return "POP3" - case .smtp: - return "SMTP" - case .socks: - return "SOCKS" - case .imap: - return "IMAP" - case .ldap: - return "LDAP" - case .appleTalk: - return "AppleTalk" - case .afp: - return "AFP" - case .telnet: - return "Telnet" - case .ssh: - return "SSH" - case .ftps: - return "FTPS" - case .https: - return "HTTPS" - case .httpProxy: - return "HTTPProxy" - case .httpsProxy: - return "HTTPSProxy" - case .ftpProxy: - return "FTPProxy" - case .smb: - return "SMB" - case .rtsp: - return "RTSP" - case .rtspProxy: - return "RTSPProxy" - case .daap: - return "DAAP" - case .eppc: - return "EPPC" - case .ipp: - return "IPP" - case .nntps: - return "NNTPS" - case .ldaps: - return "LDAPS" - case .telnetS: - return "TelnetS" - case .imaps: - return "IMAPS" - case .ircs: - return "IRCS" - case .pop3S: - return "POP3S" - } - } -} - -extension AuthenticationType: RawRepresentable, CustomStringConvertible { - - public init?(rawValue: String) { - switch rawValue { - case String(kSecAttrAuthenticationTypeNTLM): - self = .ntlm - case String(kSecAttrAuthenticationTypeMSN): - self = .msn - case String(kSecAttrAuthenticationTypeDPA): - self = .dpa - case String(kSecAttrAuthenticationTypeRPA): - self = .rpa - case String(kSecAttrAuthenticationTypeHTTPBasic): - self = .httpBasic - case String(kSecAttrAuthenticationTypeHTTPDigest): - self = .httpDigest - case String(kSecAttrAuthenticationTypeHTMLForm): - self = .htmlForm - case String(kSecAttrAuthenticationTypeDefault): - self = .`default` - default: - return nil - } - } - - public var rawValue: String { - switch self { - case .ntlm: - return String(kSecAttrAuthenticationTypeNTLM) - case .msn: - return String(kSecAttrAuthenticationTypeMSN) - case .dpa: - return String(kSecAttrAuthenticationTypeDPA) - case .rpa: - return String(kSecAttrAuthenticationTypeRPA) - case .httpBasic: - return String(kSecAttrAuthenticationTypeHTTPBasic) - case .httpDigest: - return String(kSecAttrAuthenticationTypeHTTPDigest) - case .htmlForm: - return String(kSecAttrAuthenticationTypeHTMLForm) - case .`default`: - return String(kSecAttrAuthenticationTypeDefault) - } - } - - public var description: String { - switch self { - case .ntlm: - return "NTLM" - case .msn: - return "MSN" - case .dpa: - return "DPA" - case .rpa: - return "RPA" - case .httpBasic: - return "HTTPBasic" - case .httpDigest: - return "HTTPDigest" - case .htmlForm: - return "HTMLForm" - case .`default`: - return "Default" - } - } -} - -extension Accessibility: RawRepresentable, CustomStringConvertible { - - public init?(rawValue: String) { - if #available(OSX 10.10, *) { - switch rawValue { - case String(kSecAttrAccessibleWhenUnlocked): - self = .whenUnlocked - case String(kSecAttrAccessibleAfterFirstUnlock): - self = .afterFirstUnlock - case String(kSecAttrAccessibleAlways): - self = .always - case String(kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly): - self = .whenPasscodeSetThisDeviceOnly - case String(kSecAttrAccessibleWhenUnlockedThisDeviceOnly): - self = .whenUnlockedThisDeviceOnly - case String(kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly): - self = .afterFirstUnlockThisDeviceOnly - case String(kSecAttrAccessibleAlwaysThisDeviceOnly): - self = .alwaysThisDeviceOnly - default: - return nil - } - } else { - switch rawValue { - case String(kSecAttrAccessibleWhenUnlocked): - self = .whenUnlocked - case String(kSecAttrAccessibleAfterFirstUnlock): - self = .afterFirstUnlock - case String(kSecAttrAccessibleAlways): - self = .always - case String(kSecAttrAccessibleWhenUnlockedThisDeviceOnly): - self = .whenUnlockedThisDeviceOnly - case String(kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly): - self = .afterFirstUnlockThisDeviceOnly - case String(kSecAttrAccessibleAlwaysThisDeviceOnly): - self = .alwaysThisDeviceOnly - default: - return nil - } - } - } - - public var rawValue: String { - switch self { - case .whenUnlocked: - return String(kSecAttrAccessibleWhenUnlocked) - case .afterFirstUnlock: - return String(kSecAttrAccessibleAfterFirstUnlock) - case .always: - return String(kSecAttrAccessibleAlways) - case .whenPasscodeSetThisDeviceOnly: - if #available(OSX 10.10, *) { - return String(kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly) - } else { - fatalError("'Accessibility.WhenPasscodeSetThisDeviceOnly' is not available on this version of OS.") - } - case .whenUnlockedThisDeviceOnly: - return String(kSecAttrAccessibleWhenUnlockedThisDeviceOnly) - case .afterFirstUnlockThisDeviceOnly: - return String(kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly) - case .alwaysThisDeviceOnly: - return String(kSecAttrAccessibleAlwaysThisDeviceOnly) - } - } - - public var description: String { - switch self { - case .whenUnlocked: - return "WhenUnlocked" - case .afterFirstUnlock: - return "AfterFirstUnlock" - case .always: - return "Always" - case .whenPasscodeSetThisDeviceOnly: - return "WhenPasscodeSetThisDeviceOnly" - case .whenUnlockedThisDeviceOnly: - return "WhenUnlockedThisDeviceOnly" - case .afterFirstUnlockThisDeviceOnly: - return "AfterFirstUnlockThisDeviceOnly" - case .alwaysThisDeviceOnly: - return "AlwaysThisDeviceOnly" - } - } -} - -extension CFError { - var error: NSError { - let domain = CFErrorGetDomain(self) as String - let code = CFErrorGetCode(self) - let userInfo = CFErrorCopyUserInfo(self) as! [NSObject: Any] - - return NSError(domain: domain, code: code, userInfo: userInfo) - } -} - -public enum Status: OSStatus, Error { - case success = 0 - case unimplemented = -4 - case diskFull = -34 - case io = -36 - case opWr = -49 - case param = -50 - case wrPerm = -61 - case allocate = -108 - case userCanceled = -128 - case badReq = -909 - case internalComponent = -2070 - case notAvailable = -25291 - case readOnly = -25292 - case authFailed = -25293 - case noSuchKeychain = -25294 - case invalidKeychain = -25295 - case duplicateKeychain = -25296 - case duplicateCallback = -25297 - case invalidCallback = -25298 - case duplicateItem = -25299 - case itemNotFound = -25300 - case bufferTooSmall = -25301 - case dataTooLarge = -25302 - case noSuchAttr = -25303 - case invalidItemRef = -25304 - case invalidSearchRef = -25305 - case noSuchClass = -25306 - case noDefaultKeychain = -25307 - case interactionNotAllowed = -25308 - case readOnlyAttr = -25309 - case wrongSecVersion = -25310 - case keySizeNotAllowed = -25311 - case noStorageModule = -25312 - case noCertificateModule = -25313 - case noPolicyModule = -25314 - case interactionRequired = -25315 - case dataNotAvailable = -25316 - case dataNotModifiable = -25317 - case createChainFailed = -25318 - case invalidPrefsDomain = -25319 - case inDarkWake = -25320 - case aclNotSimple = -25240 - case policyNotFound = -25241 - case invalidTrustSetting = -25242 - case noAccessForItem = -25243 - case invalidOwnerEdit = -25244 - case trustNotAvailable = -25245 - case unsupportedFormat = -25256 - case unknownFormat = -25257 - case keyIsSensitive = -25258 - case multiplePrivKeys = -25259 - case passphraseRequired = -25260 - case invalidPasswordRef = -25261 - case invalidTrustSettings = -25262 - case noTrustSettings = -25263 - case pkcs12VerifyFailure = -25264 - case invalidCertificate = -26265 - case notSigner = -26267 - case policyDenied = -26270 - case invalidKey = -26274 - case decode = -26275 - case `internal` = -26276 - case unsupportedAlgorithm = -26268 - case unsupportedOperation = -26271 - case unsupportedPadding = -26273 - case itemInvalidKey = -34000 - case itemInvalidKeyType = -34001 - case itemInvalidValue = -34002 - case itemClassMissing = -34003 - case itemMatchUnsupported = -34004 - case useItemListUnsupported = -34005 - case useKeychainUnsupported = -34006 - case useKeychainListUnsupported = -34007 - case returnDataUnsupported = -34008 - case returnAttributesUnsupported = -34009 - case returnRefUnsupported = -34010 - case returnPersitentRefUnsupported = -34011 - case valueRefUnsupported = -34012 - case valuePersistentRefUnsupported = -34013 - case returnMissingPointer = -34014 - case matchLimitUnsupported = -34015 - case itemIllegalQuery = -34016 - case waitForCallback = -34017 - case missingEntitlement = -34018 - case upgradePending = -34019 - case mpSignatureInvalid = -25327 - case otrTooOld = -25328 - case otrIDTooNew = -25329 - case serviceNotAvailable = -67585 - case insufficientClientID = -67586 - case deviceReset = -67587 - case deviceFailed = -67588 - case appleAddAppACLSubject = -67589 - case applePublicKeyIncomplete = -67590 - case appleSignatureMismatch = -67591 - case appleInvalidKeyStartDate = -67592 - case appleInvalidKeyEndDate = -67593 - case conversionError = -67594 - case appleSSLv2Rollback = -67595 - case quotaExceeded = -67596 - case fileTooBig = -67597 - case invalidDatabaseBlob = -67598 - case invalidKeyBlob = -67599 - case incompatibleDatabaseBlob = -67600 - case incompatibleKeyBlob = -67601 - case hostNameMismatch = -67602 - case unknownCriticalExtensionFlag = -67603 - case noBasicConstraints = -67604 - case noBasicConstraintsCA = -67605 - case invalidAuthorityKeyID = -67606 - case invalidSubjectKeyID = -67607 - case invalidKeyUsageForPolicy = -67608 - case invalidExtendedKeyUsage = -67609 - case invalidIDLinkage = -67610 - case pathLengthConstraintExceeded = -67611 - case invalidRoot = -67612 - case crlExpired = -67613 - case crlNotValidYet = -67614 - case crlNotFound = -67615 - case crlServerDown = -67616 - case crlBadURI = -67617 - case unknownCertExtension = -67618 - case unknownCRLExtension = -67619 - case crlNotTrusted = -67620 - case crlPolicyFailed = -67621 - case idpFailure = -67622 - case smimeEmailAddressesNotFound = -67623 - case smimeBadExtendedKeyUsage = -67624 - case smimeBadKeyUsage = -67625 - case smimeKeyUsageNotCritical = -67626 - case smimeNoEmailAddress = -67627 - case smimeSubjAltNameNotCritical = -67628 - case sslBadExtendedKeyUsage = -67629 - case ocspBadResponse = -67630 - case ocspBadRequest = -67631 - case ocspUnavailable = -67632 - case ocspStatusUnrecognized = -67633 - case endOfData = -67634 - case incompleteCertRevocationCheck = -67635 - case networkFailure = -67636 - case ocspNotTrustedToAnchor = -67637 - case recordModified = -67638 - case ocspSignatureError = -67639 - case ocspNoSigner = -67640 - case ocspResponderMalformedReq = -67641 - case ocspResponderInternalError = -67642 - case ocspResponderTryLater = -67643 - case ocspResponderSignatureRequired = -67644 - case ocspResponderUnauthorized = -67645 - case ocspResponseNonceMismatch = -67646 - case codeSigningBadCertChainLength = -67647 - case codeSigningNoBasicConstraints = -67648 - case codeSigningBadPathLengthConstraint = -67649 - case codeSigningNoExtendedKeyUsage = -67650 - case codeSigningDevelopment = -67651 - case resourceSignBadCertChainLength = -67652 - case resourceSignBadExtKeyUsage = -67653 - case trustSettingDeny = -67654 - case invalidSubjectName = -67655 - case unknownQualifiedCertStatement = -67656 - case mobileMeRequestQueued = -67657 - case mobileMeRequestRedirected = -67658 - case mobileMeServerError = -67659 - case mobileMeServerNotAvailable = -67660 - case mobileMeServerAlreadyExists = -67661 - case mobileMeServerServiceErr = -67662 - case mobileMeRequestAlreadyPending = -67663 - case mobileMeNoRequestPending = -67664 - case mobileMeCSRVerifyFailure = -67665 - case mobileMeFailedConsistencyCheck = -67666 - case notInitialized = -67667 - case invalidHandleUsage = -67668 - case pvcReferentNotFound = -67669 - case functionIntegrityFail = -67670 - case internalError = -67671 - case memoryError = -67672 - case invalidData = -67673 - case mdsError = -67674 - case invalidPointer = -67675 - case selfCheckFailed = -67676 - case functionFailed = -67677 - case moduleManifestVerifyFailed = -67678 - case invalidGUID = -67679 - case invalidHandle = -67680 - case invalidDBList = -67681 - case invalidPassthroughID = -67682 - case invalidNetworkAddress = -67683 - case crlAlreadySigned = -67684 - case invalidNumberOfFields = -67685 - case verificationFailure = -67686 - case unknownTag = -67687 - case invalidSignature = -67688 - case invalidName = -67689 - case invalidCertificateRef = -67690 - case invalidCertificateGroup = -67691 - case tagNotFound = -67692 - case invalidQuery = -67693 - case invalidValue = -67694 - case callbackFailed = -67695 - case aclDeleteFailed = -67696 - case aclReplaceFailed = -67697 - case aclAddFailed = -67698 - case aclChangeFailed = -67699 - case invalidAccessCredentials = -67700 - case invalidRecord = -67701 - case invalidACL = -67702 - case invalidSampleValue = -67703 - case incompatibleVersion = -67704 - case privilegeNotGranted = -67705 - case invalidScope = -67706 - case pvcAlreadyConfigured = -67707 - case invalidPVC = -67708 - case emmLoadFailed = -67709 - case emmUnloadFailed = -67710 - case addinLoadFailed = -67711 - case invalidKeyRef = -67712 - case invalidKeyHierarchy = -67713 - case addinUnloadFailed = -67714 - case libraryReferenceNotFound = -67715 - case invalidAddinFunctionTable = -67716 - case invalidServiceMask = -67717 - case moduleNotLoaded = -67718 - case invalidSubServiceID = -67719 - case attributeNotInContext = -67720 - case moduleManagerInitializeFailed = -67721 - case moduleManagerNotFound = -67722 - case eventNotificationCallbackNotFound = -67723 - case inputLengthError = -67724 - case outputLengthError = -67725 - case privilegeNotSupported = -67726 - case deviceError = -67727 - case attachHandleBusy = -67728 - case notLoggedIn = -67729 - case algorithmMismatch = -67730 - case keyUsageIncorrect = -67731 - case keyBlobTypeIncorrect = -67732 - case keyHeaderInconsistent = -67733 - case unsupportedKeyFormat = -67734 - case unsupportedKeySize = -67735 - case invalidKeyUsageMask = -67736 - case unsupportedKeyUsageMask = -67737 - case invalidKeyAttributeMask = -67738 - case unsupportedKeyAttributeMask = -67739 - case invalidKeyLabel = -67740 - case unsupportedKeyLabel = -67741 - case invalidKeyFormat = -67742 - case unsupportedVectorOfBuffers = -67743 - case invalidInputVector = -67744 - case invalidOutputVector = -67745 - case invalidContext = -67746 - case invalidAlgorithm = -67747 - case invalidAttributeKey = -67748 - case missingAttributeKey = -67749 - case invalidAttributeInitVector = -67750 - case missingAttributeInitVector = -67751 - case invalidAttributeSalt = -67752 - case missingAttributeSalt = -67753 - case invalidAttributePadding = -67754 - case missingAttributePadding = -67755 - case invalidAttributeRandom = -67756 - case missingAttributeRandom = -67757 - case invalidAttributeSeed = -67758 - case missingAttributeSeed = -67759 - case invalidAttributePassphrase = -67760 - case missingAttributePassphrase = -67761 - case invalidAttributeKeyLength = -67762 - case missingAttributeKeyLength = -67763 - case invalidAttributeBlockSize = -67764 - case missingAttributeBlockSize = -67765 - case invalidAttributeOutputSize = -67766 - case missingAttributeOutputSize = -67767 - case invalidAttributeRounds = -67768 - case missingAttributeRounds = -67769 - case invalidAlgorithmParms = -67770 - case missingAlgorithmParms = -67771 - case invalidAttributeLabel = -67772 - case missingAttributeLabel = -67773 - case invalidAttributeKeyType = -67774 - case missingAttributeKeyType = -67775 - case invalidAttributeMode = -67776 - case missingAttributeMode = -67777 - case invalidAttributeEffectiveBits = -67778 - case missingAttributeEffectiveBits = -67779 - case invalidAttributeStartDate = -67780 - case missingAttributeStartDate = -67781 - case invalidAttributeEndDate = -67782 - case missingAttributeEndDate = -67783 - case invalidAttributeVersion = -67784 - case missingAttributeVersion = -67785 - case invalidAttributePrime = -67786 - case missingAttributePrime = -67787 - case invalidAttributeBase = -67788 - case missingAttributeBase = -67789 - case invalidAttributeSubprime = -67790 - case missingAttributeSubprime = -67791 - case invalidAttributeIterationCount = -67792 - case missingAttributeIterationCount = -67793 - case invalidAttributeDLDBHandle = -67794 - case missingAttributeDLDBHandle = -67795 - case invalidAttributeAccessCredentials = -67796 - case missingAttributeAccessCredentials = -67797 - case invalidAttributePublicKeyFormat = -67798 - case missingAttributePublicKeyFormat = -67799 - case invalidAttributePrivateKeyFormat = -67800 - case missingAttributePrivateKeyFormat = -67801 - case invalidAttributeSymmetricKeyFormat = -67802 - case missingAttributeSymmetricKeyFormat = -67803 - case invalidAttributeWrappedKeyFormat = -67804 - case missingAttributeWrappedKeyFormat = -67805 - case stagedOperationInProgress = -67806 - case stagedOperationNotStarted = -67807 - case verifyFailed = -67808 - case querySizeUnknown = -67809 - case blockSizeMismatch = -67810 - case publicKeyInconsistent = -67811 - case deviceVerifyFailed = -67812 - case invalidLoginName = -67813 - case alreadyLoggedIn = -67814 - case invalidDigestAlgorithm = -67815 - case invalidCRLGroup = -67816 - case certificateCannotOperate = -67817 - case certificateExpired = -67818 - case certificateNotValidYet = -67819 - case certificateRevoked = -67820 - case certificateSuspended = -67821 - case insufficientCredentials = -67822 - case invalidAction = -67823 - case invalidAuthority = -67824 - case verifyActionFailed = -67825 - case invalidCertAuthority = -67826 - case invaldCRLAuthority = -67827 - case invalidCRLEncoding = -67828 - case invalidCRLType = -67829 - case invalidCRL = -67830 - case invalidFormType = -67831 - case invalidID = -67832 - case invalidIdentifier = -67833 - case invalidIndex = -67834 - case invalidPolicyIdentifiers = -67835 - case invalidTimeString = -67836 - case invalidReason = -67837 - case invalidRequestInputs = -67838 - case invalidResponseVector = -67839 - case invalidStopOnPolicy = -67840 - case invalidTuple = -67841 - case multipleValuesUnsupported = -67842 - case notTrusted = -67843 - case noDefaultAuthority = -67844 - case rejectedForm = -67845 - case requestLost = -67846 - case requestRejected = -67847 - case unsupportedAddressType = -67848 - case unsupportedService = -67849 - case invalidTupleGroup = -67850 - case invalidBaseACLs = -67851 - case invalidTupleCredendtials = -67852 - case invalidEncoding = -67853 - case invalidValidityPeriod = -67854 - case invalidRequestor = -67855 - case requestDescriptor = -67856 - case invalidBundleInfo = -67857 - case invalidCRLIndex = -67858 - case noFieldValues = -67859 - case unsupportedFieldFormat = -67860 - case unsupportedIndexInfo = -67861 - case unsupportedLocality = -67862 - case unsupportedNumAttributes = -67863 - case unsupportedNumIndexes = -67864 - case unsupportedNumRecordTypes = -67865 - case fieldSpecifiedMultiple = -67866 - case incompatibleFieldFormat = -67867 - case invalidParsingModule = -67868 - case databaseLocked = -67869 - case datastoreIsOpen = -67870 - case missingValue = -67871 - case unsupportedQueryLimits = -67872 - case unsupportedNumSelectionPreds = -67873 - case unsupportedOperator = -67874 - case invalidDBLocation = -67875 - case invalidAccessRequest = -67876 - case invalidIndexInfo = -67877 - case invalidNewOwner = -67878 - case invalidModifyMode = -67879 - case missingRequiredExtension = -67880 - case extendedKeyUsageNotCritical = -67881 - case timestampMissing = -67882 - case timestampInvalid = -67883 - case timestampNotTrusted = -67884 - case timestampServiceNotAvailable = -67885 - case timestampBadAlg = -67886 - case timestampBadRequest = -67887 - case timestampBadDataFormat = -67888 - case timestampTimeNotAvailable = -67889 - case timestampUnacceptedPolicy = -67890 - case timestampUnacceptedExtension = -67891 - case timestampAddInfoNotAvailable = -67892 - case timestampSystemFailure = -67893 - case signingTimeMissing = -67894 - case timestampRejection = -67895 - case timestampWaiting = -67896 - case timestampRevocationWarning = -67897 - case timestampRevocationNotification = -67898 - case unexpectedError = -99999 -} - -extension Status: RawRepresentable, CustomStringConvertible { - - public init(status: OSStatus) { - if let mappedStatus = Status(rawValue: status) { - self = mappedStatus - } else { - self = .unexpectedError - } - } - - public var description: String { - switch self { - case .success: - return "No error." - case .unimplemented: - return "Function or operation not implemented." - case .diskFull: - return "The disk is full." - case .io: - return "I/O error (bummers)" - case .opWr: - return "file already open with with write permission" - case .param: - return "One or more parameters passed to a function were not valid." - case .wrPerm: - return "write permissions error" - case .allocate: - return "Failed to allocate memory." - case .userCanceled: - return "User canceled the operation." - case .badReq: - return "Bad parameter or invalid state for operation." - case .internalComponent: - return "" - case .notAvailable: - return "No keychain is available. You may need to restart your computer." - case .readOnly: - return "This keychain cannot be modified." - case .authFailed: - return "The user name or passphrase you entered is not correct." - case .noSuchKeychain: - return "The specified keychain could not be found." - case .invalidKeychain: - return "The specified keychain is not a valid keychain file." - case .duplicateKeychain: - return "A keychain with the same name already exists." - case .duplicateCallback: - return "The specified callback function is already installed." - case .invalidCallback: - return "The specified callback function is not valid." - case .duplicateItem: - return "The specified item already exists in the keychain." - case .itemNotFound: - return "The specified item could not be found in the keychain." - case .bufferTooSmall: - return "There is not enough memory available to use the specified item." - case .dataTooLarge: - return "This item contains information which is too large or in a format that cannot be displayed." - case .noSuchAttr: - return "The specified attribute does not exist." - case .invalidItemRef: - return "The specified item is no longer valid. It may have been deleted from the keychain." - case .invalidSearchRef: - return "Unable to search the current keychain." - case .noSuchClass: - return "The specified item does not appear to be a valid keychain item." - case .noDefaultKeychain: - return "A default keychain could not be found." - case .interactionNotAllowed: - return "User interaction is not allowed." - case .readOnlyAttr: - return "The specified attribute could not be modified." - case .wrongSecVersion: - return "This keychain was created by a different version of the system software and cannot be opened." - case .keySizeNotAllowed: - return "This item specifies a key size which is too large." - case .noStorageModule: - return "A required component (data storage module) could not be loaded. You may need to restart your computer." - case .noCertificateModule: - return "A required component (certificate module) could not be loaded. You may need to restart your computer." - case .noPolicyModule: - return "A required component (policy module) could not be loaded. You may need to restart your computer." - case .interactionRequired: - return "User interaction is required, but is currently not allowed." - case .dataNotAvailable: - return "The contents of this item cannot be retrieved." - case .dataNotModifiable: - return "The contents of this item cannot be modified." - case .createChainFailed: - return "One or more certificates required to validate this certificate cannot be found." - case .invalidPrefsDomain: - return "The specified preferences domain is not valid." - case .inDarkWake: - return "In dark wake, no UI possible" - case .aclNotSimple: - return "The specified access control list is not in standard (simple) form." - case .policyNotFound: - return "The specified policy cannot be found." - case .invalidTrustSetting: - return "The specified trust setting is invalid." - case .noAccessForItem: - return "The specified item has no access control." - case .invalidOwnerEdit: - return "Invalid attempt to change the owner of this item." - case .trustNotAvailable: - return "No trust results are available." - case .unsupportedFormat: - return "Import/Export format unsupported." - case .unknownFormat: - return "Unknown format in import." - case .keyIsSensitive: - return "Key material must be wrapped for export." - case .multiplePrivKeys: - return "An attempt was made to import multiple private keys." - case .passphraseRequired: - return "Passphrase is required for import/export." - case .invalidPasswordRef: - return "The password reference was invalid." - case .invalidTrustSettings: - return "The Trust Settings Record was corrupted." - case .noTrustSettings: - return "No Trust Settings were found." - case .pkcs12VerifyFailure: - return "MAC verification failed during PKCS12 import (wrong password?)" - case .invalidCertificate: - return "This certificate could not be decoded." - case .notSigner: - return "A certificate was not signed by its proposed parent." - case .policyDenied: - return "The certificate chain was not trusted due to a policy not accepting it." - case .invalidKey: - return "The provided key material was not valid." - case .decode: - return "Unable to decode the provided data." - case .`internal`: - return "An internal error occurred in the Security framework." - case .unsupportedAlgorithm: - return "An unsupported algorithm was encountered." - case .unsupportedOperation: - return "The operation you requested is not supported by this key." - case .unsupportedPadding: - return "The padding you requested is not supported." - case .itemInvalidKey: - return "A string key in dictionary is not one of the supported keys." - case .itemInvalidKeyType: - return "A key in a dictionary is neither a CFStringRef nor a CFNumberRef." - case .itemInvalidValue: - return "A value in a dictionary is an invalid (or unsupported) CF type." - case .itemClassMissing: - return "No kSecItemClass key was specified in a dictionary." - case .itemMatchUnsupported: - return "The caller passed one or more kSecMatch keys to a function which does not support matches." - case .useItemListUnsupported: - return "The caller passed in a kSecUseItemList key to a function which does not support it." - case .useKeychainUnsupported: - return "The caller passed in a kSecUseKeychain key to a function which does not support it." - case .useKeychainListUnsupported: - return "The caller passed in a kSecUseKeychainList key to a function which does not support it." - case .returnDataUnsupported: - return "The caller passed in a kSecReturnData key to a function which does not support it." - case .returnAttributesUnsupported: - return "The caller passed in a kSecReturnAttributes key to a function which does not support it." - case .returnRefUnsupported: - return "The caller passed in a kSecReturnRef key to a function which does not support it." - case .returnPersitentRefUnsupported: - return "The caller passed in a kSecReturnPersistentRef key to a function which does not support it." - case .valueRefUnsupported: - return "The caller passed in a kSecValueRef key to a function which does not support it." - case .valuePersistentRefUnsupported: - return "The caller passed in a kSecValuePersistentRef key to a function which does not support it." - case .returnMissingPointer: - return "The caller passed asked for something to be returned but did not pass in a result pointer." - case .matchLimitUnsupported: - return "The caller passed in a kSecMatchLimit key to a call which does not support limits." - case .itemIllegalQuery: - return "The caller passed in a query which contained too many keys." - case .waitForCallback: - return "This operation is incomplete, until the callback is invoked (not an error)." - case .missingEntitlement: - return "Internal error when a required entitlement isn't present, client has neither application-identifier nor keychain-access-groups entitlements." - case .upgradePending: - return "Error returned if keychain database needs a schema migration but the device is locked, clients should wait for a device unlock notification and retry the command." - case .mpSignatureInvalid: - return "Signature invalid on MP message" - case .otrTooOld: - return "Message is too old to use" - case .otrIDTooNew: - return "Key ID is too new to use! Message from the future?" - case .serviceNotAvailable: - return "The required service is not available." - case .insufficientClientID: - return "The client ID is not correct." - case .deviceReset: - return "A device reset has occurred." - case .deviceFailed: - return "A device failure has occurred." - case .appleAddAppACLSubject: - return "Adding an application ACL subject failed." - case .applePublicKeyIncomplete: - return "The public key is incomplete." - case .appleSignatureMismatch: - return "A signature mismatch has occurred." - case .appleInvalidKeyStartDate: - return "The specified key has an invalid start date." - case .appleInvalidKeyEndDate: - return "The specified key has an invalid end date." - case .conversionError: - return "A conversion error has occurred." - case .appleSSLv2Rollback: - return "A SSLv2 rollback error has occurred." - case .quotaExceeded: - return "The quota was exceeded." - case .fileTooBig: - return "The file is too big." - case .invalidDatabaseBlob: - return "The specified database has an invalid blob." - case .invalidKeyBlob: - return "The specified database has an invalid key blob." - case .incompatibleDatabaseBlob: - return "The specified database has an incompatible blob." - case .incompatibleKeyBlob: - return "The specified database has an incompatible key blob." - case .hostNameMismatch: - return "A host name mismatch has occurred." - case .unknownCriticalExtensionFlag: - return "There is an unknown critical extension flag." - case .noBasicConstraints: - return "No basic constraints were found." - case .noBasicConstraintsCA: - return "No basic CA constraints were found." - case .invalidAuthorityKeyID: - return "The authority key ID is not valid." - case .invalidSubjectKeyID: - return "The subject key ID is not valid." - case .invalidKeyUsageForPolicy: - return "The key usage is not valid for the specified policy." - case .invalidExtendedKeyUsage: - return "The extended key usage is not valid." - case .invalidIDLinkage: - return "The ID linkage is not valid." - case .pathLengthConstraintExceeded: - return "The path length constraint was exceeded." - case .invalidRoot: - return "The root or anchor certificate is not valid." - case .crlExpired: - return "The CRL has expired." - case .crlNotValidYet: - return "The CRL is not yet valid." - case .crlNotFound: - return "The CRL was not found." - case .crlServerDown: - return "The CRL server is down." - case .crlBadURI: - return "The CRL has a bad Uniform Resource Identifier." - case .unknownCertExtension: - return "An unknown certificate extension was encountered." - case .unknownCRLExtension: - return "An unknown CRL extension was encountered." - case .crlNotTrusted: - return "The CRL is not trusted." - case .crlPolicyFailed: - return "The CRL policy failed." - case .idpFailure: - return "The issuing distribution point was not valid." - case .smimeEmailAddressesNotFound: - return "An email address mismatch was encountered." - case .smimeBadExtendedKeyUsage: - return "The appropriate extended key usage for SMIME was not found." - case .smimeBadKeyUsage: - return "The key usage is not compatible with SMIME." - case .smimeKeyUsageNotCritical: - return "The key usage extension is not marked as critical." - case .smimeNoEmailAddress: - return "No email address was found in the certificate." - case .smimeSubjAltNameNotCritical: - return "The subject alternative name extension is not marked as critical." - case .sslBadExtendedKeyUsage: - return "The appropriate extended key usage for SSL was not found." - case .ocspBadResponse: - return "The OCSP response was incorrect or could not be parsed." - case .ocspBadRequest: - return "The OCSP request was incorrect or could not be parsed." - case .ocspUnavailable: - return "OCSP service is unavailable." - case .ocspStatusUnrecognized: - return "The OCSP server did not recognize this certificate." - case .endOfData: - return "An end-of-data was detected." - case .incompleteCertRevocationCheck: - return "An incomplete certificate revocation check occurred." - case .networkFailure: - return "A network failure occurred." - case .ocspNotTrustedToAnchor: - return "The OCSP response was not trusted to a root or anchor certificate." - case .recordModified: - return "The record was modified." - case .ocspSignatureError: - return "The OCSP response had an invalid signature." - case .ocspNoSigner: - return "The OCSP response had no signer." - case .ocspResponderMalformedReq: - return "The OCSP responder was given a malformed request." - case .ocspResponderInternalError: - return "The OCSP responder encountered an internal error." - case .ocspResponderTryLater: - return "The OCSP responder is busy, try again later." - case .ocspResponderSignatureRequired: - return "The OCSP responder requires a signature." - case .ocspResponderUnauthorized: - return "The OCSP responder rejected this request as unauthorized." - case .ocspResponseNonceMismatch: - return "The OCSP response nonce did not match the request." - case .codeSigningBadCertChainLength: - return "Code signing encountered an incorrect certificate chain length." - case .codeSigningNoBasicConstraints: - return "Code signing found no basic constraints." - case .codeSigningBadPathLengthConstraint: - return "Code signing encountered an incorrect path length constraint." - case .codeSigningNoExtendedKeyUsage: - return "Code signing found no extended key usage." - case .codeSigningDevelopment: - return "Code signing indicated use of a development-only certificate." - case .resourceSignBadCertChainLength: - return "Resource signing has encountered an incorrect certificate chain length." - case .resourceSignBadExtKeyUsage: - return "Resource signing has encountered an error in the extended key usage." - case .trustSettingDeny: - return "The trust setting for this policy was set to Deny." - case .invalidSubjectName: - return "An invalid certificate subject name was encountered." - case .unknownQualifiedCertStatement: - return "An unknown qualified certificate statement was encountered." - case .mobileMeRequestQueued: - return "The MobileMe request will be sent during the next connection." - case .mobileMeRequestRedirected: - return "The MobileMe request was redirected." - case .mobileMeServerError: - return "A MobileMe server error occurred." - case .mobileMeServerNotAvailable: - return "The MobileMe server is not available." - case .mobileMeServerAlreadyExists: - return "The MobileMe server reported that the item already exists." - case .mobileMeServerServiceErr: - return "A MobileMe service error has occurred." - case .mobileMeRequestAlreadyPending: - return "A MobileMe request is already pending." - case .mobileMeNoRequestPending: - return "MobileMe has no request pending." - case .mobileMeCSRVerifyFailure: - return "A MobileMe CSR verification failure has occurred." - case .mobileMeFailedConsistencyCheck: - return "MobileMe has found a failed consistency check." - case .notInitialized: - return "A function was called without initializing CSSM." - case .invalidHandleUsage: - return "The CSSM handle does not match with the service type." - case .pvcReferentNotFound: - return "A reference to the calling module was not found in the list of authorized callers." - case .functionIntegrityFail: - return "A function address was not within the verified module." - case .internalError: - return "An internal error has occurred." - case .memoryError: - return "A memory error has occurred." - case .invalidData: - return "Invalid data was encountered." - case .mdsError: - return "A Module Directory Service error has occurred." - case .invalidPointer: - return "An invalid pointer was encountered." - case .selfCheckFailed: - return "Self-check has failed." - case .functionFailed: - return "A function has failed." - case .moduleManifestVerifyFailed: - return "A module manifest verification failure has occurred." - case .invalidGUID: - return "An invalid GUID was encountered." - case .invalidHandle: - return "An invalid handle was encountered." - case .invalidDBList: - return "An invalid DB list was encountered." - case .invalidPassthroughID: - return "An invalid passthrough ID was encountered." - case .invalidNetworkAddress: - return "An invalid network address was encountered." - case .crlAlreadySigned: - return "The certificate revocation list is already signed." - case .invalidNumberOfFields: - return "An invalid number of fields were encountered." - case .verificationFailure: - return "A verification failure occurred." - case .unknownTag: - return "An unknown tag was encountered." - case .invalidSignature: - return "An invalid signature was encountered." - case .invalidName: - return "An invalid name was encountered." - case .invalidCertificateRef: - return "An invalid certificate reference was encountered." - case .invalidCertificateGroup: - return "An invalid certificate group was encountered." - case .tagNotFound: - return "The specified tag was not found." - case .invalidQuery: - return "The specified query was not valid." - case .invalidValue: - return "An invalid value was detected." - case .callbackFailed: - return "A callback has failed." - case .aclDeleteFailed: - return "An ACL delete operation has failed." - case .aclReplaceFailed: - return "An ACL replace operation has failed." - case .aclAddFailed: - return "An ACL add operation has failed." - case .aclChangeFailed: - return "An ACL change operation has failed." - case .invalidAccessCredentials: - return "Invalid access credentials were encountered." - case .invalidRecord: - return "An invalid record was encountered." - case .invalidACL: - return "An invalid ACL was encountered." - case .invalidSampleValue: - return "An invalid sample value was encountered." - case .incompatibleVersion: - return "An incompatible version was encountered." - case .privilegeNotGranted: - return "The privilege was not granted." - case .invalidScope: - return "An invalid scope was encountered." - case .pvcAlreadyConfigured: - return "The PVC is already configured." - case .invalidPVC: - return "An invalid PVC was encountered." - case .emmLoadFailed: - return "The EMM load has failed." - case .emmUnloadFailed: - return "The EMM unload has failed." - case .addinLoadFailed: - return "The add-in load operation has failed." - case .invalidKeyRef: - return "An invalid key was encountered." - case .invalidKeyHierarchy: - return "An invalid key hierarchy was encountered." - case .addinUnloadFailed: - return "The add-in unload operation has failed." - case .libraryReferenceNotFound: - return "A library reference was not found." - case .invalidAddinFunctionTable: - return "An invalid add-in function table was encountered." - case .invalidServiceMask: - return "An invalid service mask was encountered." - case .moduleNotLoaded: - return "A module was not loaded." - case .invalidSubServiceID: - return "An invalid subservice ID was encountered." - case .attributeNotInContext: - return "An attribute was not in the context." - case .moduleManagerInitializeFailed: - return "A module failed to initialize." - case .moduleManagerNotFound: - return "A module was not found." - case .eventNotificationCallbackNotFound: - return "An event notification callback was not found." - case .inputLengthError: - return "An input length error was encountered." - case .outputLengthError: - return "An output length error was encountered." - case .privilegeNotSupported: - return "The privilege is not supported." - case .deviceError: - return "A device error was encountered." - case .attachHandleBusy: - return "The CSP handle was busy." - case .notLoggedIn: - return "You are not logged in." - case .algorithmMismatch: - return "An algorithm mismatch was encountered." - case .keyUsageIncorrect: - return "The key usage is incorrect." - case .keyBlobTypeIncorrect: - return "The key blob type is incorrect." - case .keyHeaderInconsistent: - return "The key header is inconsistent." - case .unsupportedKeyFormat: - return "The key header format is not supported." - case .unsupportedKeySize: - return "The key size is not supported." - case .invalidKeyUsageMask: - return "The key usage mask is not valid." - case .unsupportedKeyUsageMask: - return "The key usage mask is not supported." - case .invalidKeyAttributeMask: - return "The key attribute mask is not valid." - case .unsupportedKeyAttributeMask: - return "The key attribute mask is not supported." - case .invalidKeyLabel: - return "The key label is not valid." - case .unsupportedKeyLabel: - return "The key label is not supported." - case .invalidKeyFormat: - return "The key format is not valid." - case .unsupportedVectorOfBuffers: - return "The vector of buffers is not supported." - case .invalidInputVector: - return "The input vector is not valid." - case .invalidOutputVector: - return "The output vector is not valid." - case .invalidContext: - return "An invalid context was encountered." - case .invalidAlgorithm: - return "An invalid algorithm was encountered." - case .invalidAttributeKey: - return "A key attribute was not valid." - case .missingAttributeKey: - return "A key attribute was missing." - case .invalidAttributeInitVector: - return "An init vector attribute was not valid." - case .missingAttributeInitVector: - return "An init vector attribute was missing." - case .invalidAttributeSalt: - return "A salt attribute was not valid." - case .missingAttributeSalt: - return "A salt attribute was missing." - case .invalidAttributePadding: - return "A padding attribute was not valid." - case .missingAttributePadding: - return "A padding attribute was missing." - case .invalidAttributeRandom: - return "A random number attribute was not valid." - case .missingAttributeRandom: - return "A random number attribute was missing." - case .invalidAttributeSeed: - return "A seed attribute was not valid." - case .missingAttributeSeed: - return "A seed attribute was missing." - case .invalidAttributePassphrase: - return "A passphrase attribute was not valid." - case .missingAttributePassphrase: - return "A passphrase attribute was missing." - case .invalidAttributeKeyLength: - return "A key length attribute was not valid." - case .missingAttributeKeyLength: - return "A key length attribute was missing." - case .invalidAttributeBlockSize: - return "A block size attribute was not valid." - case .missingAttributeBlockSize: - return "A block size attribute was missing." - case .invalidAttributeOutputSize: - return "An output size attribute was not valid." - case .missingAttributeOutputSize: - return "An output size attribute was missing." - case .invalidAttributeRounds: - return "The number of rounds attribute was not valid." - case .missingAttributeRounds: - return "The number of rounds attribute was missing." - case .invalidAlgorithmParms: - return "An algorithm parameters attribute was not valid." - case .missingAlgorithmParms: - return "An algorithm parameters attribute was missing." - case .invalidAttributeLabel: - return "A label attribute was not valid." - case .missingAttributeLabel: - return "A label attribute was missing." - case .invalidAttributeKeyType: - return "A key type attribute was not valid." - case .missingAttributeKeyType: - return "A key type attribute was missing." - case .invalidAttributeMode: - return "A mode attribute was not valid." - case .missingAttributeMode: - return "A mode attribute was missing." - case .invalidAttributeEffectiveBits: - return "An effective bits attribute was not valid." - case .missingAttributeEffectiveBits: - return "An effective bits attribute was missing." - case .invalidAttributeStartDate: - return "A start date attribute was not valid." - case .missingAttributeStartDate: - return "A start date attribute was missing." - case .invalidAttributeEndDate: - return "An end date attribute was not valid." - case .missingAttributeEndDate: - return "An end date attribute was missing." - case .invalidAttributeVersion: - return "A version attribute was not valid." - case .missingAttributeVersion: - return "A version attribute was missing." - case .invalidAttributePrime: - return "A prime attribute was not valid." - case .missingAttributePrime: - return "A prime attribute was missing." - case .invalidAttributeBase: - return "A base attribute was not valid." - case .missingAttributeBase: - return "A base attribute was missing." - case .invalidAttributeSubprime: - return "A subprime attribute was not valid." - case .missingAttributeSubprime: - return "A subprime attribute was missing." - case .invalidAttributeIterationCount: - return "An iteration count attribute was not valid." - case .missingAttributeIterationCount: - return "An iteration count attribute was missing." - case .invalidAttributeDLDBHandle: - return "A database handle attribute was not valid." - case .missingAttributeDLDBHandle: - return "A database handle attribute was missing." - case .invalidAttributeAccessCredentials: - return "An access credentials attribute was not valid." - case .missingAttributeAccessCredentials: - return "An access credentials attribute was missing." - case .invalidAttributePublicKeyFormat: - return "A public key format attribute was not valid." - case .missingAttributePublicKeyFormat: - return "A public key format attribute was missing." - case .invalidAttributePrivateKeyFormat: - return "A private key format attribute was not valid." - case .missingAttributePrivateKeyFormat: - return "A private key format attribute was missing." - case .invalidAttributeSymmetricKeyFormat: - return "A symmetric key format attribute was not valid." - case .missingAttributeSymmetricKeyFormat: - return "A symmetric key format attribute was missing." - case .invalidAttributeWrappedKeyFormat: - return "A wrapped key format attribute was not valid." - case .missingAttributeWrappedKeyFormat: - return "A wrapped key format attribute was missing." - case .stagedOperationInProgress: - return "A staged operation is in progress." - case .stagedOperationNotStarted: - return "A staged operation was not started." - case .verifyFailed: - return "A cryptographic verification failure has occurred." - case .querySizeUnknown: - return "The query size is unknown." - case .blockSizeMismatch: - return "A block size mismatch occurred." - case .publicKeyInconsistent: - return "The public key was inconsistent." - case .deviceVerifyFailed: - return "A device verification failure has occurred." - case .invalidLoginName: - return "An invalid login name was detected." - case .alreadyLoggedIn: - return "The user is already logged in." - case .invalidDigestAlgorithm: - return "An invalid digest algorithm was detected." - case .invalidCRLGroup: - return "An invalid CRL group was detected." - case .certificateCannotOperate: - return "The certificate cannot operate." - case .certificateExpired: - return "An expired certificate was detected." - case .certificateNotValidYet: - return "The certificate is not yet valid." - case .certificateRevoked: - return "The certificate was revoked." - case .certificateSuspended: - return "The certificate was suspended." - case .insufficientCredentials: - return "Insufficient credentials were detected." - case .invalidAction: - return "The action was not valid." - case .invalidAuthority: - return "The authority was not valid." - case .verifyActionFailed: - return "A verify action has failed." - case .invalidCertAuthority: - return "The certificate authority was not valid." - case .invaldCRLAuthority: - return "The CRL authority was not valid." - case .invalidCRLEncoding: - return "The CRL encoding was not valid." - case .invalidCRLType: - return "The CRL type was not valid." - case .invalidCRL: - return "The CRL was not valid." - case .invalidFormType: - return "The form type was not valid." - case .invalidID: - return "The ID was not valid." - case .invalidIdentifier: - return "The identifier was not valid." - case .invalidIndex: - return "The index was not valid." - case .invalidPolicyIdentifiers: - return "The policy identifiers are not valid." - case .invalidTimeString: - return "The time specified was not valid." - case .invalidReason: - return "The trust policy reason was not valid." - case .invalidRequestInputs: - return "The request inputs are not valid." - case .invalidResponseVector: - return "The response vector was not valid." - case .invalidStopOnPolicy: - return "The stop-on policy was not valid." - case .invalidTuple: - return "The tuple was not valid." - case .multipleValuesUnsupported: - return "Multiple values are not supported." - case .notTrusted: - return "The trust policy was not trusted." - case .noDefaultAuthority: - return "No default authority was detected." - case .rejectedForm: - return "The trust policy had a rejected form." - case .requestLost: - return "The request was lost." - case .requestRejected: - return "The request was rejected." - case .unsupportedAddressType: - return "The address type is not supported." - case .unsupportedService: - return "The service is not supported." - case .invalidTupleGroup: - return "The tuple group was not valid." - case .invalidBaseACLs: - return "The base ACLs are not valid." - case .invalidTupleCredendtials: - return "The tuple credentials are not valid." - case .invalidEncoding: - return "The encoding was not valid." - case .invalidValidityPeriod: - return "The validity period was not valid." - case .invalidRequestor: - return "The requestor was not valid." - case .requestDescriptor: - return "The request descriptor was not valid." - case .invalidBundleInfo: - return "The bundle information was not valid." - case .invalidCRLIndex: - return "The CRL index was not valid." - case .noFieldValues: - return "No field values were detected." - case .unsupportedFieldFormat: - return "The field format is not supported." - case .unsupportedIndexInfo: - return "The index information is not supported." - case .unsupportedLocality: - return "The locality is not supported." - case .unsupportedNumAttributes: - return "The number of attributes is not supported." - case .unsupportedNumIndexes: - return "The number of indexes is not supported." - case .unsupportedNumRecordTypes: - return "The number of record types is not supported." - case .fieldSpecifiedMultiple: - return "Too many fields were specified." - case .incompatibleFieldFormat: - return "The field format was incompatible." - case .invalidParsingModule: - return "The parsing module was not valid." - case .databaseLocked: - return "The database is locked." - case .datastoreIsOpen: - return "The data store is open." - case .missingValue: - return "A missing value was detected." - case .unsupportedQueryLimits: - return "The query limits are not supported." - case .unsupportedNumSelectionPreds: - return "The number of selection predicates is not supported." - case .unsupportedOperator: - return "The operator is not supported." - case .invalidDBLocation: - return "The database location is not valid." - case .invalidAccessRequest: - return "The access request is not valid." - case .invalidIndexInfo: - return "The index information is not valid." - case .invalidNewOwner: - return "The new owner is not valid." - case .invalidModifyMode: - return "The modify mode is not valid." - case .missingRequiredExtension: - return "A required certificate extension is missing." - case .extendedKeyUsageNotCritical: - return "The extended key usage extension was not marked critical." - case .timestampMissing: - return "A timestamp was expected but was not found." - case .timestampInvalid: - return "The timestamp was not valid." - case .timestampNotTrusted: - return "The timestamp was not trusted." - case .timestampServiceNotAvailable: - return "The timestamp service is not available." - case .timestampBadAlg: - return "An unrecognized or unsupported Algorithm Identifier in timestamp." - case .timestampBadRequest: - return "The timestamp transaction is not permitted or supported." - case .timestampBadDataFormat: - return "The timestamp data submitted has the wrong format." - case .timestampTimeNotAvailable: - return "The time source for the Timestamp Authority is not available." - case .timestampUnacceptedPolicy: - return "The requested policy is not supported by the Timestamp Authority." - case .timestampUnacceptedExtension: - return "The requested extension is not supported by the Timestamp Authority." - case .timestampAddInfoNotAvailable: - return "The additional information requested is not available." - case .timestampSystemFailure: - return "The timestamp request cannot be handled due to system failure." - case .signingTimeMissing: - return "A signing time was expected but was not found." - case .timestampRejection: - return "A timestamp transaction was rejected." - case .timestampWaiting: - return "A timestamp transaction is waiting." - case .timestampRevocationWarning: - return "A timestamp authority revocation warning was issued." - case .timestampRevocationNotification: - return "A timestamp authority revocation notification was issued." - case .unexpectedError: - return "Unexpected error has occurred." - } - } -} - -extension Status: CustomNSError { - - public static var errorDomain: String { - return KeychainAccessErrorDomain - } - - public var errorCode: Int { - return Int(rawValue) - } - - public var errorUserInfo: [String : Any] { - return [NSLocalizedDescriptionKey: description] - } -} diff --git a/Carthage/Checkouts/KeychainAccess/Lib/KeychainAccess/KeychainAccess.h b/Carthage/Checkouts/KeychainAccess/Lib/KeychainAccess/KeychainAccess.h deleted file mode 100644 index 4d29984..0000000 --- a/Carthage/Checkouts/KeychainAccess/Lib/KeychainAccess/KeychainAccess.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// KeychainAccess.h -// KeychainAccess -// -// Created by kishikawa katsumi on 2014/12/24. -// Copyright (c) 2014 kishikawa katsumi. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import - -FOUNDATION_EXPORT double KeychainAccessVersionNumber; -FOUNDATION_EXPORT const unsigned char KeychainAccessVersionString[]; diff --git a/Carthage/Checkouts/KeychainAccess/Lib/KeychainAccessTests/EnumTests.swift b/Carthage/Checkouts/KeychainAccess/Lib/KeychainAccessTests/EnumTests.swift deleted file mode 100644 index ecb610c..0000000 --- a/Carthage/Checkouts/KeychainAccess/Lib/KeychainAccessTests/EnumTests.swift +++ /dev/null @@ -1,305 +0,0 @@ -// -// EnumTests.swift -// KeychainAccessTests -// -// Created by kishikawa katsumi on 10/12/15. -// Copyright © 2015 kishikawa katsumi. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -import XCTest -import KeychainAccess - -class EnumTests: XCTestCase { - - override func setUp() { - super.setUp() - } - - override func tearDown() { - super.tearDown() - } - - func testItemClass() { - do { - let itemClass = ItemClass(rawValue: kSecClassGenericPassword as String) - XCTAssertEqual(itemClass, .genericPassword) - XCTAssertEqual(itemClass?.description, "GenericPassword") - } - do { - let itemClass = ItemClass(rawValue: kSecClassInternetPassword as String) - XCTAssertEqual(itemClass, .internetPassword) - XCTAssertEqual(itemClass?.description, "InternetPassword") - } - do { - let itemClass = ItemClass(rawValue: kSecClassCertificate as String) - XCTAssertNil(itemClass) - } - do { - let itemClass = ItemClass(rawValue: kSecClassKey as String) - XCTAssertNil(itemClass) - } - do { - let itemClass = ItemClass(rawValue: kSecClassIdentity as String) - XCTAssertNil(itemClass) - } - } - - func testProtocolType() { - do { - let protocolType = ProtocolType(rawValue: kSecAttrProtocolFTP as String) - XCTAssertEqual(protocolType, .ftp) - XCTAssertEqual(protocolType?.description, "FTP") - } - do { - let protocolType = ProtocolType(rawValue: kSecAttrProtocolFTPAccount as String) - XCTAssertEqual(protocolType, .ftpAccount) - XCTAssertEqual(protocolType?.description, "FTPAccount") - } - do { - let protocolType = ProtocolType(rawValue: kSecAttrProtocolHTTP as String) - XCTAssertEqual(protocolType, .http) - XCTAssertEqual(protocolType?.description, "HTTP") - } - do { - let protocolType = ProtocolType(rawValue: kSecAttrProtocolIRC as String) - XCTAssertEqual(protocolType, .irc) - XCTAssertEqual(protocolType?.description, "IRC") - } - do { - let protocolType = ProtocolType(rawValue: kSecAttrProtocolNNTP as String) - XCTAssertEqual(protocolType, .nntp) - XCTAssertEqual(protocolType?.description, "NNTP") - } - do { - let protocolType = ProtocolType(rawValue: kSecAttrProtocolPOP3 as String) - XCTAssertEqual(protocolType, .pop3) - XCTAssertEqual(protocolType?.description, "POP3") - } - do { - let protocolType = ProtocolType(rawValue: kSecAttrProtocolSMTP as String) - XCTAssertEqual(protocolType, .smtp) - XCTAssertEqual(protocolType?.description, "SMTP") - } - do { - let protocolType = ProtocolType(rawValue: kSecAttrProtocolSOCKS as String) - XCTAssertEqual(protocolType, .socks) - XCTAssertEqual(protocolType?.description, "SOCKS") - } - do { - let protocolType = ProtocolType(rawValue: kSecAttrProtocolIMAP as String) - XCTAssertEqual(protocolType, .imap) - XCTAssertEqual(protocolType?.description, "IMAP") - } - do { - let protocolType = ProtocolType(rawValue: kSecAttrProtocolLDAP as String) - XCTAssertEqual(protocolType, .ldap) - XCTAssertEqual(protocolType?.description, "LDAP") - } - do { - let protocolType = ProtocolType(rawValue: kSecAttrProtocolAppleTalk as String) - XCTAssertEqual(protocolType, .appleTalk) - XCTAssertEqual(protocolType?.description, "AppleTalk") - } - do { - let protocolType = ProtocolType(rawValue: kSecAttrProtocolAFP as String) - XCTAssertEqual(protocolType, .afp) - XCTAssertEqual(protocolType?.description, "AFP") - } - do { - let protocolType = ProtocolType(rawValue: kSecAttrProtocolTelnet as String) - XCTAssertEqual(protocolType, .telnet) - XCTAssertEqual(protocolType?.description, "Telnet") - } - do { - let protocolType = ProtocolType(rawValue: kSecAttrProtocolSSH as String) - XCTAssertEqual(protocolType, .ssh) - XCTAssertEqual(protocolType?.description, "SSH") - } - do { - let protocolType = ProtocolType(rawValue: kSecAttrProtocolFTPS as String) - XCTAssertEqual(protocolType, .ftps) - XCTAssertEqual(protocolType?.description, "FTPS") - } - do { - let protocolType = ProtocolType(rawValue: kSecAttrProtocolHTTPS as String) - XCTAssertEqual(protocolType, .https) - XCTAssertEqual(protocolType?.description, "HTTPS") - } - do { - let protocolType = ProtocolType(rawValue: kSecAttrProtocolHTTPProxy as String) - XCTAssertEqual(protocolType, .httpProxy) - XCTAssertEqual(protocolType?.description, "HTTPProxy") - } - do { - let protocolType = ProtocolType(rawValue: kSecAttrProtocolHTTPSProxy as String) - XCTAssertEqual(protocolType, .httpsProxy) - XCTAssertEqual(protocolType?.description, "HTTPSProxy") - } - do { - let protocolType = ProtocolType(rawValue: kSecAttrProtocolFTPProxy as String) - XCTAssertEqual(protocolType, .ftpProxy) - XCTAssertEqual(protocolType?.description, "FTPProxy") - } - do { - let protocolType = ProtocolType(rawValue: kSecAttrProtocolSMB as String) - XCTAssertEqual(protocolType, .smb) - XCTAssertEqual(protocolType?.description, "SMB") - } - do { - let protocolType = ProtocolType(rawValue: kSecAttrProtocolRTSP as String) - XCTAssertEqual(protocolType, .rtsp) - XCTAssertEqual(protocolType?.description, "RTSP") - } - do { - let protocolType = ProtocolType(rawValue: kSecAttrProtocolRTSPProxy as String) - XCTAssertEqual(protocolType, .rtspProxy) - XCTAssertEqual(protocolType?.description, "RTSPProxy") - } - do { - let protocolType = ProtocolType(rawValue: kSecAttrProtocolDAAP as String) - XCTAssertEqual(protocolType, .daap) - XCTAssertEqual(protocolType?.description, "DAAP") - } - do { - let protocolType = ProtocolType(rawValue: kSecAttrProtocolEPPC as String) - XCTAssertEqual(protocolType, .eppc) - XCTAssertEqual(protocolType?.description, "EPPC") - } - do { - let protocolType = ProtocolType(rawValue: kSecAttrProtocolIPP as String) - XCTAssertEqual(protocolType, .ipp) - XCTAssertEqual(protocolType?.description, "IPP") - } - do { - let protocolType = ProtocolType(rawValue: kSecAttrProtocolNNTPS as String) - XCTAssertEqual(protocolType, .nntps) - XCTAssertEqual(protocolType?.description, "NNTPS") - } - do { - let protocolType = ProtocolType(rawValue: kSecAttrProtocolLDAPS as String) - XCTAssertEqual(protocolType, .ldaps) - XCTAssertEqual(protocolType?.description, "LDAPS") - } - do { - let protocolType = ProtocolType(rawValue: kSecAttrProtocolTelnetS as String) - XCTAssertEqual(protocolType, .telnetS) - XCTAssertEqual(protocolType?.description, "TelnetS") - } - do { - let protocolType = ProtocolType(rawValue: kSecAttrProtocolIMAPS as String) - XCTAssertEqual(protocolType, .imaps) - XCTAssertEqual(protocolType?.description, "IMAPS") - } - do { - let protocolType = ProtocolType(rawValue: kSecAttrProtocolIRCS as String) - XCTAssertEqual(protocolType, .ircs) - XCTAssertEqual(protocolType?.description, "IRCS") - } - do { - let protocolType = ProtocolType(rawValue: kSecAttrProtocolPOP3S as String) - XCTAssertEqual(protocolType, .pop3S) - XCTAssertEqual(protocolType?.description, "POP3S") - } - } - - func testAuthenticationType() { - do { - let authenticationType = AuthenticationType(rawValue: kSecAttrAuthenticationTypeNTLM as String) - XCTAssertEqual(authenticationType, .ntlm) - XCTAssertEqual(authenticationType?.description, "NTLM") - } - do { - let authenticationType = AuthenticationType(rawValue: kSecAttrAuthenticationTypeMSN as String) - XCTAssertEqual(authenticationType, .msn) - XCTAssertEqual(authenticationType?.description, "MSN") - } - do { - let authenticationType = AuthenticationType(rawValue: kSecAttrAuthenticationTypeDPA as String) - XCTAssertEqual(authenticationType, .dpa) - XCTAssertEqual(authenticationType?.description, "DPA") - } - do { - let authenticationType = AuthenticationType(rawValue: kSecAttrAuthenticationTypeRPA as String) - XCTAssertEqual(authenticationType, .rpa) - XCTAssertEqual(authenticationType?.description, "RPA") - } - do { - let authenticationType = AuthenticationType(rawValue: kSecAttrAuthenticationTypeHTTPBasic as String) - XCTAssertEqual(authenticationType, .httpBasic) - XCTAssertEqual(authenticationType?.description, "HTTPBasic") - } - do { - let authenticationType = AuthenticationType(rawValue: kSecAttrAuthenticationTypeHTTPDigest as String) - XCTAssertEqual(authenticationType, .httpDigest) - XCTAssertEqual(authenticationType?.description, "HTTPDigest") - } - do { - let authenticationType = AuthenticationType(rawValue: kSecAttrAuthenticationTypeHTMLForm as String) - XCTAssertEqual(authenticationType, .htmlForm) - XCTAssertEqual(authenticationType?.description, "HTMLForm") - } - do { - let authenticationType = AuthenticationType(rawValue: kSecAttrAuthenticationTypeDefault as String) - XCTAssertEqual(authenticationType, .default) - XCTAssertEqual(authenticationType?.description, "Default") - } - } - - func testAccessibility() { - guard #available(OSX 10.10, *) else { - return - } - do { - let accessibility = Accessibility(rawValue: kSecAttrAccessibleWhenUnlocked as String) - XCTAssertEqual(accessibility, .whenUnlocked) - XCTAssertEqual(accessibility?.description, "WhenUnlocked") - } - do { - let accessibility = Accessibility(rawValue: kSecAttrAccessibleAfterFirstUnlock as String) - XCTAssertEqual(accessibility, .afterFirstUnlock) - XCTAssertEqual(accessibility?.description, "AfterFirstUnlock") - } - do { - let accessibility = Accessibility(rawValue: kSecAttrAccessibleAlways as String) - XCTAssertEqual(accessibility, .always) - XCTAssertEqual(accessibility?.description, "Always") - } - do { - let accessibility = Accessibility(rawValue: kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly as String) - XCTAssertEqual(accessibility, .whenPasscodeSetThisDeviceOnly) - XCTAssertEqual(accessibility?.description, "WhenPasscodeSetThisDeviceOnly") - } - do { - let accessibility = Accessibility(rawValue: kSecAttrAccessibleWhenUnlockedThisDeviceOnly as String) - XCTAssertEqual(accessibility, .whenUnlockedThisDeviceOnly) - XCTAssertEqual(accessibility?.description, "WhenUnlockedThisDeviceOnly") - } - do { - let accessibility = Accessibility(rawValue: kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly as String) - XCTAssertEqual(accessibility, .afterFirstUnlockThisDeviceOnly) - XCTAssertEqual(accessibility?.description, "AfterFirstUnlockThisDeviceOnly") - } - do { - let accessibility = Accessibility(rawValue: kSecAttrAccessibleAlwaysThisDeviceOnly as String) - XCTAssertEqual(accessibility, .alwaysThisDeviceOnly) - XCTAssertEqual(accessibility?.description, "AlwaysThisDeviceOnly") - } - } -} diff --git a/Carthage/Checkouts/KeychainAccess/Lib/KeychainAccessTests/ErrorTypeTests.swift b/Carthage/Checkouts/KeychainAccess/Lib/KeychainAccessTests/ErrorTypeTests.swift deleted file mode 100644 index ecfacd4..0000000 --- a/Carthage/Checkouts/KeychainAccess/Lib/KeychainAccessTests/ErrorTypeTests.swift +++ /dev/null @@ -1,2102 +0,0 @@ -// -// ErrorTypeTests.swift -// KeychainAccessTests -// -// Created by kishikawa katsumi on 10/12/15. -// Copyright © 2015 kishikawa katsumi. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -import XCTest -import KeychainAccess - -class ErrorTypeTests: XCTestCase { - - override func setUp() { - super.setUp() - } - - override func tearDown() { - super.tearDown() - } - - func testErrorType() { - do { - let status = Status(rawValue: errSecSuccess) - XCTAssertEqual(status, .success) - XCTAssertEqual(status?.description, "No error.") - } - do { - let status = Status(rawValue: errSecUnimplemented) - XCTAssertEqual(status, .unimplemented) - XCTAssertEqual(status?.description, "Function or operation not implemented.") - } - #if os(OSX) - do { - let status = Status(rawValue: errSecDskFull) - XCTAssertEqual(status, .diskFull) - XCTAssertEqual(status?.description, "The disk is full.") - } - #endif - do { - let status = Status(rawValue: errSecIO) - XCTAssertEqual(status, .io) - XCTAssertEqual(status?.description, "I/O error (bummers)") - } - #if os(iOS) - do { - let status = Status(rawValue: errSecOpWr) - XCTAssertEqual(status, .opWr) - XCTAssertEqual(status?.description, "file already open with with write permission") - } - #endif - do { - let status = Status(rawValue: errSecParam) - XCTAssertEqual(status, .param) - XCTAssertEqual(status?.description, "One or more parameters passed to a function were not valid.") - } - #if os(OSX) - do { - let status = Status(rawValue: errSecWrPerm) - XCTAssertEqual(status, .wrPerm) - XCTAssertEqual(status?.description, "write permissions error") - } - #endif - do { - let status = Status(rawValue: errSecAllocate) - XCTAssertEqual(status, .allocate) - XCTAssertEqual(status?.description, "Failed to allocate memory.") - } - do { - let status = Status(rawValue: errSecUserCanceled) - XCTAssertEqual(status, .userCanceled) - XCTAssertEqual(status?.description, "User canceled the operation.") - } - do { - let status = Status(rawValue: errSecBadReq) - XCTAssertEqual(status, .badReq) - XCTAssertEqual(status?.description, "Bad parameter or invalid state for operation.") - } - do { - let status = Status(rawValue: errSecInternalComponent) - XCTAssertEqual(status, .internalComponent) - XCTAssertEqual(status?.description, "") - } - do { - let status = Status(rawValue: errSecNotAvailable) - XCTAssertEqual(status, .notAvailable) - XCTAssertEqual(status?.description, "No keychain is available. You may need to restart your computer.") - } - #if os(OSX) - do { - let status = Status(rawValue: errSecReadOnly) - XCTAssertEqual(status, .readOnly) - XCTAssertEqual(status?.description, "This keychain cannot be modified.") - } - #endif - do { - let status = Status(rawValue: errSecAuthFailed) - XCTAssertEqual(status, .authFailed) - XCTAssertEqual(status?.description, "The user name or passphrase you entered is not correct.") - } - #if os(OSX) - do { - let status = Status(rawValue: errSecNoSuchKeychain) - XCTAssertEqual(status, .noSuchKeychain) - XCTAssertEqual(status?.description, "The specified keychain could not be found.") - } - do { - let status = Status(rawValue: errSecInvalidKeychain) - XCTAssertEqual(status, .invalidKeychain) - XCTAssertEqual(status?.description, "The specified keychain is not a valid keychain file.") - } - do { - let status = Status(rawValue: errSecDuplicateKeychain) - XCTAssertEqual(status, .duplicateKeychain) - XCTAssertEqual(status?.description, "A keychain with the same name already exists.") - } - do { - let status = Status(rawValue: errSecDuplicateCallback) - XCTAssertEqual(status, .duplicateCallback) - XCTAssertEqual(status?.description, "The specified callback function is already installed.") - } - do { - let status = Status(rawValue: errSecInvalidCallback) - XCTAssertEqual(status, .invalidCallback) - XCTAssertEqual(status?.description, "The specified callback function is not valid.") - } - #endif - do { - let status = Status(rawValue: errSecDuplicateItem) - XCTAssertEqual(status, .duplicateItem) - XCTAssertEqual(status?.description, "The specified item already exists in the keychain.") - } - do { - let status = Status(rawValue: errSecItemNotFound) - XCTAssertEqual(status, .itemNotFound) - XCTAssertEqual(status?.description, "The specified item could not be found in the keychain.") - } - #if os(OSX) - do { - let status = Status(rawValue: errSecBufferTooSmall) - XCTAssertEqual(status, .bufferTooSmall) - XCTAssertEqual(status?.description, "There is not enough memory available to use the specified item.") - } - do { - let status = Status(rawValue: errSecDataTooLarge) - XCTAssertEqual(status, .dataTooLarge) - XCTAssertEqual(status?.description, "This item contains information which is too large or in a format that cannot be displayed.") - } - do { - let status = Status(rawValue: errSecNoSuchAttr) - XCTAssertEqual(status, .noSuchAttr) - XCTAssertEqual(status?.description, "The specified attribute does not exist.") - } - do { - let status = Status(rawValue: errSecInvalidItemRef) - XCTAssertEqual(status, .invalidItemRef) - XCTAssertEqual(status?.description, "The specified item is no longer valid. It may have been deleted from the keychain.") - } - do { - let status = Status(rawValue: errSecInvalidSearchRef) - XCTAssertEqual(status, .invalidSearchRef) - XCTAssertEqual(status?.description, "Unable to search the current keychain.") - } - do { - let status = Status(rawValue: errSecNoSuchClass) - XCTAssertEqual(status, .noSuchClass) - XCTAssertEqual(status?.description, "The specified item does not appear to be a valid keychain item.") - } - do { - let status = Status(rawValue: errSecNoDefaultKeychain) - XCTAssertEqual(status, .noDefaultKeychain) - XCTAssertEqual(status?.description, "A default keychain could not be found.") - } - #endif - do { - let status = Status(rawValue: errSecInteractionNotAllowed) - XCTAssertEqual(status, .interactionNotAllowed) - XCTAssertEqual(status?.description, "User interaction is not allowed.") - } - #if os(OSX) - do { - let status = Status(rawValue: errSecReadOnlyAttr) - XCTAssertEqual(status, .readOnlyAttr) - XCTAssertEqual(status?.description, "The specified attribute could not be modified.") - } - do { - let status = Status(rawValue: errSecWrongSecVersion) - XCTAssertEqual(status, .wrongSecVersion) - XCTAssertEqual(status?.description, "This keychain was created by a different version of the system software and cannot be opened.") - } - do { - let status = Status(rawValue: errSecKeySizeNotAllowed) - XCTAssertEqual(status, .keySizeNotAllowed) - XCTAssertEqual(status?.description, "This item specifies a key size which is too large.") - } - do { - let status = Status(rawValue: errSecNoStorageModule) - XCTAssertEqual(status, .noStorageModule) - XCTAssertEqual(status?.description, "A required component (data storage module) could not be loaded. You may need to restart your computer.") - } - do { - let status = Status(rawValue: errSecNoCertificateModule) - XCTAssertEqual(status, .noCertificateModule) - XCTAssertEqual(status?.description, "A required component (certificate module) could not be loaded. You may need to restart your computer.") - } - do { - let status = Status(rawValue: errSecNoPolicyModule) - XCTAssertEqual(status, .noPolicyModule) - XCTAssertEqual(status?.description, "A required component (policy module) could not be loaded. You may need to restart your computer.") - } - do { - let status = Status(rawValue: errSecInteractionRequired) - XCTAssertEqual(status, .interactionRequired) - XCTAssertEqual(status?.description, "User interaction is required, but is currently not allowed.") - } - do { - let status = Status(rawValue: errSecDataNotAvailable) - XCTAssertEqual(status, .dataNotAvailable) - XCTAssertEqual(status?.description, "The contents of this item cannot be retrieved.") - } - do { - let status = Status(rawValue: errSecDataNotModifiable) - XCTAssertEqual(status, .dataNotModifiable) - XCTAssertEqual(status?.description, "The contents of this item cannot be modified.") - } - do { - let status = Status(rawValue: errSecCreateChainFailed) - XCTAssertEqual(status, .createChainFailed) - XCTAssertEqual(status?.description, "One or more certificates required to validate this certificate cannot be found.") - } - do { - let status = Status(rawValue: errSecInvalidPrefsDomain) - XCTAssertEqual(status, .invalidPrefsDomain) - XCTAssertEqual(status?.description, "The specified preferences domain is not valid.") - } - do { - let status = Status(rawValue: errSecInDarkWake) - XCTAssertEqual(status, .inDarkWake) - XCTAssertEqual(status?.description, "In dark wake, no UI possible") - } - do { - let status = Status(rawValue: errSecACLNotSimple) - XCTAssertEqual(status, .aclNotSimple) - XCTAssertEqual(status?.description, "The specified access control list is not in standard (simple) form.") - } - do { - let status = Status(rawValue: errSecPolicyNotFound) - XCTAssertEqual(status, .policyNotFound) - XCTAssertEqual(status?.description, "The specified policy cannot be found.") - } - do { - let status = Status(rawValue: errSecInvalidTrustSetting) - XCTAssertEqual(status, .invalidTrustSetting) - XCTAssertEqual(status?.description, "The specified trust setting is invalid.") - } - do { - let status = Status(rawValue: errSecNoAccessForItem) - XCTAssertEqual(status, .noAccessForItem) - XCTAssertEqual(status?.description, "The specified item has no access control.") - } - do { - let status = Status(rawValue: errSecInvalidOwnerEdit) - XCTAssertEqual(status, .invalidOwnerEdit) - XCTAssertEqual(status?.description, "Invalid attempt to change the owner of this item.") - } - do { - let status = Status(rawValue: errSecTrustNotAvailable) - XCTAssertEqual(status, .trustNotAvailable) - XCTAssertEqual(status?.description, "No trust results are available.") - } - do { - let status = Status(rawValue: errSecUnsupportedFormat) - XCTAssertEqual(status, .unsupportedFormat) - XCTAssertEqual(status?.description, "Import/Export format unsupported.") - } - do { - let status = Status(rawValue: errSecUnknownFormat) - XCTAssertEqual(status, .unknownFormat) - XCTAssertEqual(status?.description, "Unknown format in import.") - } - do { - let status = Status(rawValue: errSecKeyIsSensitive) - XCTAssertEqual(status, .keyIsSensitive) - XCTAssertEqual(status?.description, "Key material must be wrapped for export.") - } - do { - let status = Status(rawValue: errSecMultiplePrivKeys) - XCTAssertEqual(status, .multiplePrivKeys) - XCTAssertEqual(status?.description, "An attempt was made to import multiple private keys.") - } - do { - let status = Status(rawValue: errSecPassphraseRequired) - XCTAssertEqual(status, .passphraseRequired) - XCTAssertEqual(status?.description, "Passphrase is required for import/export.") - } - do { - let status = Status(rawValue: errSecInvalidPasswordRef) - XCTAssertEqual(status, .invalidPasswordRef) - XCTAssertEqual(status?.description, "The password reference was invalid.") - } - do { - let status = Status(rawValue: errSecInvalidTrustSettings) - XCTAssertEqual(status, .invalidTrustSettings) - XCTAssertEqual(status?.description, "The Trust Settings Record was corrupted.") - } - do { - let status = Status(rawValue: errSecNoTrustSettings) - XCTAssertEqual(status, .noTrustSettings) - XCTAssertEqual(status?.description, "No Trust Settings were found.") - } - do { - let status = Status(rawValue: errSecPkcs12VerifyFailure) - XCTAssertEqual(status, .pkcs12VerifyFailure) - XCTAssertEqual(status?.description, "MAC verification failed during PKCS12 import (wrong password?)") - } - do { - let errSecInvalidCertificate: OSStatus = -26265 - let status = Status(rawValue: errSecInvalidCertificate) - XCTAssertEqual(status, .invalidCertificate) - XCTAssertEqual(status?.description, "This certificate could not be decoded.") - } - do { - let status = Status(rawValue: errSecNotSigner) - XCTAssertEqual(status, .notSigner) - XCTAssertEqual(status?.description, "A certificate was not signed by its proposed parent.") - } - do { - let errSecPolicyDenied: OSStatus = -26270 - let status = Status(rawValue: errSecPolicyDenied) - XCTAssertEqual(status, .policyDenied) - XCTAssertEqual(status?.description, "The certificate chain was not trusted due to a policy not accepting it.") - } - do { - let errSecInvalidKey: OSStatus = -26274 - let status = Status(rawValue: errSecInvalidKey) - XCTAssertEqual(status, .invalidKey) - XCTAssertEqual(status?.description, "The provided key material was not valid.") - } - #endif - do { - let status = Status(rawValue: errSecDecode) - XCTAssertEqual(status, .decode) - XCTAssertEqual(status?.description, "Unable to decode the provided data.") - } - do { - let errSecInternal: OSStatus = -26276 - let status = Status(rawValue: errSecInternal) - XCTAssertEqual(status, .internal) - XCTAssertEqual(status?.description, "An internal error occurred in the Security framework.") - } - #if os(OSX) - do { - let status = Status(rawValue: errSecServiceNotAvailable) - XCTAssertEqual(status, .serviceNotAvailable) - XCTAssertEqual(status?.description, "The required service is not available.") - } - do { - let errSecUnsupportedAlgorithm: OSStatus = -26268 - let status = Status(rawValue: errSecUnsupportedAlgorithm) - XCTAssertEqual(status, .unsupportedAlgorithm) - XCTAssertEqual(status?.description, "An unsupported algorithm was encountered.") - } - do { - let errSecUnsupportedOperation: OSStatus = -26271 - let status = Status(rawValue: errSecUnsupportedOperation) - XCTAssertEqual(status, .unsupportedOperation) - XCTAssertEqual(status?.description, "The operation you requested is not supported by this key.") - } - do { - let errSecUnsupportedPadding: OSStatus = -26273 - let status = Status(rawValue: errSecUnsupportedPadding) - XCTAssertEqual(status, .unsupportedPadding) - XCTAssertEqual(status?.description, "The padding you requested is not supported.") - } - do { - let errSecItemInvalidKey: OSStatus = -34000 - let status = Status(rawValue: errSecItemInvalidKey) - XCTAssertEqual(status, .itemInvalidKey) - XCTAssertEqual(status?.description, "A string key in dictionary is not one of the supported keys.") - } - do { - let errSecItemInvalidKeyType: OSStatus = -34001 - let status = Status(rawValue: errSecItemInvalidKeyType) - XCTAssertEqual(status, .itemInvalidKeyType) - XCTAssertEqual(status?.description, "A key in a dictionary is neither a CFStringRef nor a CFNumberRef.") - } - do { - let errSecItemInvalidValue: OSStatus = -34002 - let status = Status(rawValue: errSecItemInvalidValue) - XCTAssertEqual(status, .itemInvalidValue) - XCTAssertEqual(status?.description, "A value in a dictionary is an invalid (or unsupported) CF type.") - } - do { - let errSecItemClassMissing: OSStatus = -34003 - let status = Status(rawValue: errSecItemClassMissing) - XCTAssertEqual(status, .itemClassMissing) - XCTAssertEqual(status?.description, "No kSecItemClass key was specified in a dictionary.") - } - do { - let errSecItemMatchUnsupported: OSStatus = -34004 - let status = Status(rawValue: errSecItemMatchUnsupported) - XCTAssertEqual(status, .itemMatchUnsupported) - XCTAssertEqual(status?.description, "The caller passed one or more kSecMatch keys to a function which does not support matches.") - } - do { - let errSecUseItemListUnsupported: OSStatus = -34005 - let status = Status(rawValue: errSecUseItemListUnsupported) - XCTAssertEqual(status, .useItemListUnsupported) - XCTAssertEqual(status?.description, "The caller passed in a kSecUseItemList key to a function which does not support it.") - } - do { - let errSecUseKeychainUnsupported: OSStatus = -34006 - let status = Status(rawValue: errSecUseKeychainUnsupported) - XCTAssertEqual(status, .useKeychainUnsupported) - XCTAssertEqual(status?.description, "The caller passed in a kSecUseKeychain key to a function which does not support it.") - } - do { - let errSecUseKeychainListUnsupported: OSStatus = -34007 - let status = Status(rawValue: errSecUseKeychainListUnsupported) - XCTAssertEqual(status, .useKeychainListUnsupported) - XCTAssertEqual(status?.description, "The caller passed in a kSecUseKeychainList key to a function which does not support it.") - } - do { - let errSecReturnDataUnsupported: OSStatus = -34008 - let status = Status(rawValue: errSecReturnDataUnsupported) - XCTAssertEqual(status, .returnDataUnsupported) - XCTAssertEqual(status?.description, "The caller passed in a kSecReturnData key to a function which does not support it.") - } - do { - let errSecReturnAttributesUnsupported: OSStatus = -34009 - let status = Status(rawValue: errSecReturnAttributesUnsupported) - XCTAssertEqual(status, .returnAttributesUnsupported) - XCTAssertEqual(status?.description, "The caller passed in a kSecReturnAttributes key to a function which does not support it.") - } - do { - let errSecReturnRefUnsupported: OSStatus = -34010 - let status = Status(rawValue: errSecReturnRefUnsupported) - XCTAssertEqual(status, .returnRefUnsupported) - XCTAssertEqual(status?.description, "The caller passed in a kSecReturnRef key to a function which does not support it.") - } - do { - let errSecReturnPersitentRefUnsupported: OSStatus = -34011 - let status = Status(rawValue: errSecReturnPersitentRefUnsupported) - XCTAssertEqual(status, .returnPersitentRefUnsupported) - XCTAssertEqual(status?.description, "The caller passed in a kSecReturnPersistentRef key to a function which does not support it.") - } - do { - let errSecValueRefUnsupported: OSStatus = -34012 - let status = Status(rawValue: errSecValueRefUnsupported) - XCTAssertEqual(status, .valueRefUnsupported) - XCTAssertEqual(status?.description, "The caller passed in a kSecValueRef key to a function which does not support it.") - } - do { - let errSecValuePersistentRefUnsupported: OSStatus = -34013 - let status = Status(rawValue: errSecValuePersistentRefUnsupported) - XCTAssertEqual(status, .valuePersistentRefUnsupported) - XCTAssertEqual(status?.description, "The caller passed in a kSecValuePersistentRef key to a function which does not support it.") - } - do { - let errSecReturnMissingPointer: OSStatus = -34014 - let status = Status(rawValue: errSecReturnMissingPointer) - XCTAssertEqual(status, .returnMissingPointer) - XCTAssertEqual(status?.description, "The caller passed asked for something to be returned but did not pass in a result pointer.") - } - do { - let errSecMatchLimitUnsupported: OSStatus = -34015 - let status = Status(rawValue: errSecMatchLimitUnsupported) - XCTAssertEqual(status, .matchLimitUnsupported) - XCTAssertEqual(status?.description, "The caller passed in a kSecMatchLimit key to a call which does not support limits.") - } - do { - let errSecItemIllegalQuery: OSStatus = -34016 - let status = Status(rawValue: errSecItemIllegalQuery) - XCTAssertEqual(status, .itemIllegalQuery) - XCTAssertEqual(status?.description, "The caller passed in a query which contained too many keys.") - } - do { - let errSecWaitForCallback: OSStatus = -34017 - let status = Status(rawValue: errSecWaitForCallback) - XCTAssertEqual(status, .waitForCallback) - XCTAssertEqual(status?.description, "This operation is incomplete, until the callback is invoked (not an error).") - } - do { - let errSecMissingEntitlement: OSStatus = -34018 - let status = Status(rawValue: errSecMissingEntitlement) - XCTAssertEqual(status, .missingEntitlement) - XCTAssertEqual(status?.description, "Internal error when a required entitlement isn't present, client has neither application-identifier nor keychain-access-groups entitlements.") - } - do { - let errSecUpgradePending: OSStatus = -34019 - let status = Status(rawValue: errSecUpgradePending) - XCTAssertEqual(status, .upgradePending) - XCTAssertEqual(status?.description, "Error returned if keychain database needs a schema migration but the device is locked, clients should wait for a device unlock notification and retry the command.") - } - do { - let errSecMPSignatureInvalid: OSStatus = -25327 - let status = Status(rawValue: errSecMPSignatureInvalid) - XCTAssertEqual(status, .mpSignatureInvalid) - XCTAssertEqual(status?.description, "Signature invalid on MP message") - } - do { - let errSecOTRTooOld: OSStatus = -25328 - let status = Status(rawValue: errSecOTRTooOld) - XCTAssertEqual(status, .otrTooOld) - XCTAssertEqual(status?.description, "Message is too old to use") - } - do { - let errSecOTRIDTooNew: OSStatus = -25329 - let status = Status(rawValue: errSecOTRIDTooNew) - XCTAssertEqual(status, .otrIDTooNew) - XCTAssertEqual(status?.description, "Key ID is too new to use! Message from the future?") - } - do { - let status = Status(rawValue: errSecInsufficientClientID) - XCTAssertEqual(status, .insufficientClientID) - XCTAssertEqual(status?.description, "The client ID is not correct.") - } - do { - let status = Status(rawValue: errSecDeviceReset) - XCTAssertEqual(status, .deviceReset) - XCTAssertEqual(status?.description, "A device reset has occurred.") - } - do { - let status = Status(rawValue: errSecDeviceFailed) - XCTAssertEqual(status, .deviceFailed) - XCTAssertEqual(status?.description, "A device failure has occurred.") - } - do { - let status = Status(rawValue: errSecAppleAddAppACLSubject) - XCTAssertEqual(status, .appleAddAppACLSubject) - XCTAssertEqual(status?.description, "Adding an application ACL subject failed.") - } - do { - let status = Status(rawValue: errSecApplePublicKeyIncomplete) - XCTAssertEqual(status, .applePublicKeyIncomplete) - XCTAssertEqual(status?.description, "The public key is incomplete.") - } - do { - let status = Status(rawValue: errSecAppleSignatureMismatch) - XCTAssertEqual(status, .appleSignatureMismatch) - XCTAssertEqual(status?.description, "A signature mismatch has occurred.") - } - do { - let status = Status(rawValue: errSecAppleInvalidKeyStartDate) - XCTAssertEqual(status, .appleInvalidKeyStartDate) - XCTAssertEqual(status?.description, "The specified key has an invalid start date.") - } - do { - let status = Status(rawValue: errSecAppleInvalidKeyEndDate) - XCTAssertEqual(status, .appleInvalidKeyEndDate) - XCTAssertEqual(status?.description, "The specified key has an invalid end date.") - } - do { - let status = Status(rawValue: errSecConversionError) - XCTAssertEqual(status, .conversionError) - XCTAssertEqual(status?.description, "A conversion error has occurred.") - } - do { - let status = Status(rawValue: errSecAppleSSLv2Rollback) - XCTAssertEqual(status, .appleSSLv2Rollback) - XCTAssertEqual(status?.description, "A SSLv2 rollback error has occurred.") - } - do { - let status = Status(rawValue: errSecDiskFull) - XCTAssertEqual(status, .diskFull) - XCTAssertEqual(status?.description, "The disk is full.") - } - do { - let status = Status(rawValue: errSecQuotaExceeded) - XCTAssertEqual(status, .quotaExceeded) - XCTAssertEqual(status?.description, "The quota was exceeded.") - } - do { - let status = Status(rawValue: errSecFileTooBig) - XCTAssertEqual(status, .fileTooBig) - XCTAssertEqual(status?.description, "The file is too big.") - } - do { - let status = Status(rawValue: errSecInvalidDatabaseBlob) - XCTAssertEqual(status, .invalidDatabaseBlob) - XCTAssertEqual(status?.description, "The specified database has an invalid blob.") - } - do { - let status = Status(rawValue: errSecInvalidKeyBlob) - XCTAssertEqual(status, .invalidKeyBlob) - XCTAssertEqual(status?.description, "The specified database has an invalid key blob.") - } - do { - let status = Status(rawValue: errSecIncompatibleDatabaseBlob) - XCTAssertEqual(status, .incompatibleDatabaseBlob) - XCTAssertEqual(status?.description, "The specified database has an incompatible blob.") - } - do { - let status = Status(rawValue: errSecIncompatibleKeyBlob) - XCTAssertEqual(status, .incompatibleKeyBlob) - XCTAssertEqual(status?.description, "The specified database has an incompatible key blob.") - } - do { - let status = Status(rawValue: errSecHostNameMismatch) - XCTAssertEqual(status, .hostNameMismatch) - XCTAssertEqual(status?.description, "A host name mismatch has occurred.") - } - do { - let status = Status(rawValue: errSecUnknownCriticalExtensionFlag) - XCTAssertEqual(status, .unknownCriticalExtensionFlag) - XCTAssertEqual(status?.description, "There is an unknown critical extension flag.") - } - do { - let status = Status(rawValue: errSecNoBasicConstraints) - XCTAssertEqual(status, .noBasicConstraints) - XCTAssertEqual(status?.description, "No basic constraints were found.") - } - do { - let status = Status(rawValue: errSecNoBasicConstraintsCA) - XCTAssertEqual(status, .noBasicConstraintsCA) - XCTAssertEqual(status?.description, "No basic CA constraints were found.") - } - do { - let status = Status(rawValue: errSecInvalidAuthorityKeyID) - XCTAssertEqual(status, .invalidAuthorityKeyID) - XCTAssertEqual(status?.description, "The authority key ID is not valid.") - } - do { - let status = Status(rawValue: errSecInvalidSubjectKeyID) - XCTAssertEqual(status, .invalidSubjectKeyID) - XCTAssertEqual(status?.description, "The subject key ID is not valid.") - } - do { - let status = Status(rawValue: errSecInvalidKeyUsageForPolicy) - XCTAssertEqual(status, .invalidKeyUsageForPolicy) - XCTAssertEqual(status?.description, "The key usage is not valid for the specified policy.") - } - do { - let status = Status(rawValue: errSecInvalidExtendedKeyUsage) - XCTAssertEqual(status, .invalidExtendedKeyUsage) - XCTAssertEqual(status?.description, "The extended key usage is not valid.") - } - do { - let status = Status(rawValue: errSecInvalidIDLinkage) - XCTAssertEqual(status, .invalidIDLinkage) - XCTAssertEqual(status?.description, "The ID linkage is not valid.") - } - do { - let status = Status(rawValue: errSecPathLengthConstraintExceeded) - XCTAssertEqual(status, .pathLengthConstraintExceeded) - XCTAssertEqual(status?.description, "The path length constraint was exceeded.") - } - do { - let status = Status(rawValue: errSecInvalidRoot) - XCTAssertEqual(status, .invalidRoot) - XCTAssertEqual(status?.description, "The root or anchor certificate is not valid.") - } - do { - let status = Status(rawValue: errSecCRLExpired) - XCTAssertEqual(status, .crlExpired) - XCTAssertEqual(status?.description, "The CRL has expired.") - } - do { - let status = Status(rawValue: errSecCRLNotValidYet) - XCTAssertEqual(status, .crlNotValidYet) - XCTAssertEqual(status?.description, "The CRL is not yet valid.") - } - do { - let status = Status(rawValue: errSecCRLNotFound) - XCTAssertEqual(status, .crlNotFound) - XCTAssertEqual(status?.description, "The CRL was not found.") - } - do { - let status = Status(rawValue: errSecCRLServerDown) - XCTAssertEqual(status, .crlServerDown) - XCTAssertEqual(status?.description, "The CRL server is down.") - } - do { - let status = Status(rawValue: errSecCRLBadURI) - XCTAssertEqual(status, .crlBadURI) - XCTAssertEqual(status?.description, "The CRL has a bad Uniform Resource Identifier.") - } - do { - let status = Status(rawValue: errSecUnknownCertExtension) - XCTAssertEqual(status, .unknownCertExtension) - XCTAssertEqual(status?.description, "An unknown certificate extension was encountered.") - } - do { - let status = Status(rawValue: errSecUnknownCRLExtension) - XCTAssertEqual(status, .unknownCRLExtension) - XCTAssertEqual(status?.description, "An unknown CRL extension was encountered.") - } - do { - let status = Status(rawValue: errSecCRLNotTrusted) - XCTAssertEqual(status, .crlNotTrusted) - XCTAssertEqual(status?.description, "The CRL is not trusted.") - } - do { - let status = Status(rawValue: errSecCRLPolicyFailed) - XCTAssertEqual(status, .crlPolicyFailed) - XCTAssertEqual(status?.description, "The CRL policy failed.") - } - do { - let status = Status(rawValue: errSecIDPFailure) - XCTAssertEqual(status, .idpFailure) - XCTAssertEqual(status?.description, "The issuing distribution point was not valid.") - } - do { - let status = Status(rawValue: errSecSMIMEEmailAddressesNotFound) - XCTAssertEqual(status, .smimeEmailAddressesNotFound) - XCTAssertEqual(status?.description, "An email address mismatch was encountered.") - } - do { - let status = Status(rawValue: errSecSMIMEBadExtendedKeyUsage) - XCTAssertEqual(status, .smimeBadExtendedKeyUsage) - XCTAssertEqual(status?.description, "The appropriate extended key usage for SMIME was not found.") - } - do { - let status = Status(rawValue: errSecSMIMEBadKeyUsage) - XCTAssertEqual(status, .smimeBadKeyUsage) - XCTAssertEqual(status?.description, "The key usage is not compatible with SMIME.") - } - do { - let status = Status(rawValue: errSecSMIMEKeyUsageNotCritical) - XCTAssertEqual(status, .smimeKeyUsageNotCritical) - XCTAssertEqual(status?.description, "The key usage extension is not marked as critical.") - } - do { - let status = Status(rawValue: errSecSMIMENoEmailAddress) - XCTAssertEqual(status, .smimeNoEmailAddress) - XCTAssertEqual(status?.description, "No email address was found in the certificate.") - } - do { - let status = Status(rawValue: errSecSMIMESubjAltNameNotCritical) - XCTAssertEqual(status, .smimeSubjAltNameNotCritical) - XCTAssertEqual(status?.description, "The subject alternative name extension is not marked as critical.") - } - do { - let status = Status(rawValue: errSecSSLBadExtendedKeyUsage) - XCTAssertEqual(status, .sslBadExtendedKeyUsage) - XCTAssertEqual(status?.description, "The appropriate extended key usage for SSL was not found.") - } - do { - let status = Status(rawValue: errSecOCSPBadResponse) - XCTAssertEqual(status, .ocspBadResponse) - XCTAssertEqual(status?.description, "The OCSP response was incorrect or could not be parsed.") - } - do { - let status = Status(rawValue: errSecOCSPBadRequest) - XCTAssertEqual(status, .ocspBadRequest) - XCTAssertEqual(status?.description, "The OCSP request was incorrect or could not be parsed.") - } - do { - let status = Status(rawValue: errSecOCSPUnavailable) - XCTAssertEqual(status, .ocspUnavailable) - XCTAssertEqual(status?.description, "OCSP service is unavailable.") - } - do { - let status = Status(rawValue: errSecOCSPStatusUnrecognized) - XCTAssertEqual(status, .ocspStatusUnrecognized) - XCTAssertEqual(status?.description, "The OCSP server did not recognize this certificate.") - } - do { - let status = Status(rawValue: errSecEndOfData) - XCTAssertEqual(status, .endOfData) - XCTAssertEqual(status?.description, "An end-of-data was detected.") - } - do { - let status = Status(rawValue: errSecIncompleteCertRevocationCheck) - XCTAssertEqual(status, .incompleteCertRevocationCheck) - XCTAssertEqual(status?.description, "An incomplete certificate revocation check occurred.") - } - do { - let status = Status(rawValue: errSecNetworkFailure) - XCTAssertEqual(status, .networkFailure) - XCTAssertEqual(status?.description, "A network failure occurred.") - } - do { - let status = Status(rawValue: errSecOCSPNotTrustedToAnchor) - XCTAssertEqual(status, .ocspNotTrustedToAnchor) - XCTAssertEqual(status?.description, "The OCSP response was not trusted to a root or anchor certificate.") - } - do { - let status = Status(rawValue: errSecRecordModified) - XCTAssertEqual(status, .recordModified) - XCTAssertEqual(status?.description, "The record was modified.") - } - do { - let status = Status(rawValue: errSecOCSPSignatureError) - XCTAssertEqual(status, .ocspSignatureError) - XCTAssertEqual(status?.description, "The OCSP response had an invalid signature.") - } - do { - let status = Status(rawValue: errSecOCSPNoSigner) - XCTAssertEqual(status, .ocspNoSigner) - XCTAssertEqual(status?.description, "The OCSP response had no signer.") - } - do { - let status = Status(rawValue: errSecOCSPResponderMalformedReq) - XCTAssertEqual(status, .ocspResponderMalformedReq) - XCTAssertEqual(status?.description, "The OCSP responder was given a malformed request.") - } - do { - let status = Status(rawValue: errSecOCSPResponderInternalError) - XCTAssertEqual(status, .ocspResponderInternalError) - XCTAssertEqual(status?.description, "The OCSP responder encountered an internal error.") - } - do { - let status = Status(rawValue: errSecOCSPResponderTryLater) - XCTAssertEqual(status, .ocspResponderTryLater) - XCTAssertEqual(status?.description, "The OCSP responder is busy, try again later.") - } - do { - let status = Status(rawValue: errSecOCSPResponderSignatureRequired) - XCTAssertEqual(status, .ocspResponderSignatureRequired) - XCTAssertEqual(status?.description, "The OCSP responder requires a signature.") - } - do { - let status = Status(rawValue: errSecOCSPResponderUnauthorized) - XCTAssertEqual(status, .ocspResponderUnauthorized) - XCTAssertEqual(status?.description, "The OCSP responder rejected this request as unauthorized.") - } - do { - let status = Status(rawValue: errSecOCSPResponseNonceMismatch) - XCTAssertEqual(status, .ocspResponseNonceMismatch) - XCTAssertEqual(status?.description, "The OCSP response nonce did not match the request.") - } - do { - let status = Status(rawValue: errSecCodeSigningBadCertChainLength) - XCTAssertEqual(status, .codeSigningBadCertChainLength) - XCTAssertEqual(status?.description, "Code signing encountered an incorrect certificate chain length.") - } - do { - let status = Status(rawValue: errSecCodeSigningNoBasicConstraints) - XCTAssertEqual(status, .codeSigningNoBasicConstraints) - XCTAssertEqual(status?.description, "Code signing found no basic constraints.") - } - do { - let status = Status(rawValue: errSecCodeSigningBadPathLengthConstraint) - XCTAssertEqual(status, .codeSigningBadPathLengthConstraint) - XCTAssertEqual(status?.description, "Code signing encountered an incorrect path length constraint.") - } - do { - let status = Status(rawValue: errSecCodeSigningNoExtendedKeyUsage) - XCTAssertEqual(status, .codeSigningNoExtendedKeyUsage) - XCTAssertEqual(status?.description, "Code signing found no extended key usage.") - } - do { - let status = Status(rawValue: errSecCodeSigningDevelopment) - XCTAssertEqual(status, .codeSigningDevelopment) - XCTAssertEqual(status?.description, "Code signing indicated use of a development-only certificate.") - } - do { - let status = Status(rawValue: errSecResourceSignBadCertChainLength) - XCTAssertEqual(status, .resourceSignBadCertChainLength) - XCTAssertEqual(status?.description, "Resource signing has encountered an incorrect certificate chain length.") - } - do { - let status = Status(rawValue: errSecResourceSignBadExtKeyUsage) - XCTAssertEqual(status, .resourceSignBadExtKeyUsage) - XCTAssertEqual(status?.description, "Resource signing has encountered an error in the extended key usage.") - } - do { - let status = Status(rawValue: errSecTrustSettingDeny) - XCTAssertEqual(status, .trustSettingDeny) - XCTAssertEqual(status?.description, "The trust setting for this policy was set to Deny.") - } - do { - let status = Status(rawValue: errSecInvalidSubjectName) - XCTAssertEqual(status, .invalidSubjectName) - XCTAssertEqual(status?.description, "An invalid certificate subject name was encountered.") - } - do { - let status = Status(rawValue: errSecUnknownQualifiedCertStatement) - XCTAssertEqual(status, .unknownQualifiedCertStatement) - XCTAssertEqual(status?.description, "An unknown qualified certificate statement was encountered.") - } - do { - let status = Status(rawValue: errSecMobileMeRequestQueued) - XCTAssertEqual(status, .mobileMeRequestQueued) - XCTAssertEqual(status?.description, "The MobileMe request will be sent during the next connection.") - } - do { - let status = Status(rawValue: errSecMobileMeRequestRedirected) - XCTAssertEqual(status, .mobileMeRequestRedirected) - XCTAssertEqual(status?.description, "The MobileMe request was redirected.") - } - do { - let status = Status(rawValue: errSecMobileMeServerError) - XCTAssertEqual(status, .mobileMeServerError) - XCTAssertEqual(status?.description, "A MobileMe server error occurred.") - } - do { - let status = Status(rawValue: errSecMobileMeServerNotAvailable) - XCTAssertEqual(status, .mobileMeServerNotAvailable) - XCTAssertEqual(status?.description, "The MobileMe server is not available.") - } - do { - let status = Status(rawValue: errSecMobileMeServerAlreadyExists) - XCTAssertEqual(status, .mobileMeServerAlreadyExists) - XCTAssertEqual(status?.description, "The MobileMe server reported that the item already exists.") - } - do { - let status = Status(rawValue: errSecMobileMeServerServiceErr) - XCTAssertEqual(status, .mobileMeServerServiceErr) - XCTAssertEqual(status?.description, "A MobileMe service error has occurred.") - } - do { - let status = Status(rawValue: errSecMobileMeRequestAlreadyPending) - XCTAssertEqual(status, .mobileMeRequestAlreadyPending) - XCTAssertEqual(status?.description, "A MobileMe request is already pending.") - } - do { - let status = Status(rawValue: errSecMobileMeNoRequestPending) - XCTAssertEqual(status, .mobileMeNoRequestPending) - XCTAssertEqual(status?.description, "MobileMe has no request pending.") - } - do { - let status = Status(rawValue: errSecMobileMeCSRVerifyFailure) - XCTAssertEqual(status, .mobileMeCSRVerifyFailure) - XCTAssertEqual(status?.description, "A MobileMe CSR verification failure has occurred.") - } - do { - let status = Status(rawValue: errSecMobileMeFailedConsistencyCheck) - XCTAssertEqual(status, .mobileMeFailedConsistencyCheck) - XCTAssertEqual(status?.description, "MobileMe has found a failed consistency check.") - } - do { - let status = Status(rawValue: errSecNotInitialized) - XCTAssertEqual(status, .notInitialized) - XCTAssertEqual(status?.description, "A function was called without initializing CSSM.") - } - do { - let status = Status(rawValue: errSecInvalidHandleUsage) - XCTAssertEqual(status, .invalidHandleUsage) - XCTAssertEqual(status?.description, "The CSSM handle does not match with the service type.") - } - do { - let status = Status(rawValue: errSecPVCReferentNotFound) - XCTAssertEqual(status, .pvcReferentNotFound) - XCTAssertEqual(status?.description, "A reference to the calling module was not found in the list of authorized callers.") - } - do { - let status = Status(rawValue: errSecFunctionIntegrityFail) - XCTAssertEqual(status, .functionIntegrityFail) - XCTAssertEqual(status?.description, "A function address was not within the verified module.") - } - do { - let status = Status(rawValue: errSecInternalError) - XCTAssertEqual(status, .internalError) - XCTAssertEqual(status?.description, "An internal error has occurred.") - } - do { - let status = Status(rawValue: errSecMemoryError) - XCTAssertEqual(status, .memoryError) - XCTAssertEqual(status?.description, "A memory error has occurred.") - } - do { - let status = Status(rawValue: errSecInvalidData) - XCTAssertEqual(status, .invalidData) - XCTAssertEqual(status?.description, "Invalid data was encountered.") - } - do { - let status = Status(rawValue: errSecMDSError) - XCTAssertEqual(status, .mdsError) - XCTAssertEqual(status?.description, "A Module Directory Service error has occurred.") - } - do { - let status = Status(rawValue: errSecInvalidPointer) - XCTAssertEqual(status, .invalidPointer) - XCTAssertEqual(status?.description, "An invalid pointer was encountered.") - } - do { - let status = Status(rawValue: errSecSelfCheckFailed) - XCTAssertEqual(status, .selfCheckFailed) - XCTAssertEqual(status?.description, "Self-check has failed.") - } - do { - let status = Status(rawValue: errSecFunctionFailed) - XCTAssertEqual(status, .functionFailed) - XCTAssertEqual(status?.description, "A function has failed.") - } - do { - let status = Status(rawValue: errSecModuleManifestVerifyFailed) - XCTAssertEqual(status, .moduleManifestVerifyFailed) - XCTAssertEqual(status?.description, "A module manifest verification failure has occurred.") - } - do { - let status = Status(rawValue: errSecInvalidGUID) - XCTAssertEqual(status, .invalidGUID) - XCTAssertEqual(status?.description, "An invalid GUID was encountered.") - } - do { - let status = Status(rawValue: errSecInvalidHandle) - XCTAssertEqual(status, .invalidHandle) - XCTAssertEqual(status?.description, "An invalid handle was encountered.") - } - do { - let status = Status(rawValue: errSecInvalidDBList) - XCTAssertEqual(status, .invalidDBList) - XCTAssertEqual(status?.description, "An invalid DB list was encountered.") - } - do { - let status = Status(rawValue: errSecInvalidPassthroughID) - XCTAssertEqual(status, .invalidPassthroughID) - XCTAssertEqual(status?.description, "An invalid passthrough ID was encountered.") - } - do { - let status = Status(rawValue: errSecInvalidNetworkAddress) - XCTAssertEqual(status, .invalidNetworkAddress) - XCTAssertEqual(status?.description, "An invalid network address was encountered.") - } - do { - let status = Status(rawValue: errSecCRLAlreadySigned) - XCTAssertEqual(status, .crlAlreadySigned) - XCTAssertEqual(status?.description, "The certificate revocation list is already signed.") - } - do { - let status = Status(rawValue: errSecInvalidNumberOfFields) - XCTAssertEqual(status, .invalidNumberOfFields) - XCTAssertEqual(status?.description, "An invalid number of fields were encountered.") - } - do { - let status = Status(rawValue: errSecVerificationFailure) - XCTAssertEqual(status, .verificationFailure) - XCTAssertEqual(status?.description, "A verification failure occurred.") - } - do { - let status = Status(rawValue: errSecUnknownTag) - XCTAssertEqual(status, .unknownTag) - XCTAssertEqual(status?.description, "An unknown tag was encountered.") - } - do { - let status = Status(rawValue: errSecInvalidSignature) - XCTAssertEqual(status, .invalidSignature) - XCTAssertEqual(status?.description, "An invalid signature was encountered.") - } - do { - let status = Status(rawValue: errSecInvalidName) - XCTAssertEqual(status, .invalidName) - XCTAssertEqual(status?.description, "An invalid name was encountered.") - } - do { - let status = Status(rawValue: errSecInvalidCertificateRef) - XCTAssertEqual(status, .invalidCertificateRef) - XCTAssertEqual(status?.description, "An invalid certificate reference was encountered.") - } - do { - let status = Status(rawValue: errSecInvalidCertificateGroup) - XCTAssertEqual(status, .invalidCertificateGroup) - XCTAssertEqual(status?.description, "An invalid certificate group was encountered.") - } - do { - let status = Status(rawValue: errSecTagNotFound) - XCTAssertEqual(status, .tagNotFound) - XCTAssertEqual(status?.description, "The specified tag was not found.") - } - do { - let status = Status(rawValue: errSecInvalidQuery) - XCTAssertEqual(status, .invalidQuery) - XCTAssertEqual(status?.description, "The specified query was not valid.") - } - do { - let status = Status(rawValue: errSecInvalidValue) - XCTAssertEqual(status, .invalidValue) - XCTAssertEqual(status?.description, "An invalid value was detected.") - } - do { - let status = Status(rawValue: errSecCallbackFailed) - XCTAssertEqual(status, .callbackFailed) - XCTAssertEqual(status?.description, "A callback has failed.") - } - do { - let status = Status(rawValue: errSecACLDeleteFailed) - XCTAssertEqual(status, .aclDeleteFailed) - XCTAssertEqual(status?.description, "An ACL delete operation has failed.") - } - do { - let status = Status(rawValue: errSecACLReplaceFailed) - XCTAssertEqual(status, .aclReplaceFailed) - XCTAssertEqual(status?.description, "An ACL replace operation has failed.") - } - do { - let status = Status(rawValue: errSecACLAddFailed) - XCTAssertEqual(status, .aclAddFailed) - XCTAssertEqual(status?.description, "An ACL add operation has failed.") - } - do { - let status = Status(rawValue: errSecACLChangeFailed) - XCTAssertEqual(status, .aclChangeFailed) - XCTAssertEqual(status?.description, "An ACL change operation has failed.") - } - do { - let status = Status(rawValue: errSecInvalidAccessCredentials) - XCTAssertEqual(status, .invalidAccessCredentials) - XCTAssertEqual(status?.description, "Invalid access credentials were encountered.") - } - do { - let status = Status(rawValue: errSecInvalidRecord) - XCTAssertEqual(status, .invalidRecord) - XCTAssertEqual(status?.description, "An invalid record was encountered.") - } - do { - let status = Status(rawValue: errSecInvalidACL) - XCTAssertEqual(status, .invalidACL) - XCTAssertEqual(status?.description, "An invalid ACL was encountered.") - } - do { - let status = Status(rawValue: errSecInvalidSampleValue) - XCTAssertEqual(status, .invalidSampleValue) - XCTAssertEqual(status?.description, "An invalid sample value was encountered.") - } - do { - let status = Status(rawValue: errSecIncompatibleVersion) - XCTAssertEqual(status, .incompatibleVersion) - XCTAssertEqual(status?.description, "An incompatible version was encountered.") - } - do { - let status = Status(rawValue: errSecPrivilegeNotGranted) - XCTAssertEqual(status, .privilegeNotGranted) - XCTAssertEqual(status?.description, "The privilege was not granted.") - } - do { - let status = Status(rawValue: errSecInvalidScope) - XCTAssertEqual(status, .invalidScope) - XCTAssertEqual(status?.description, "An invalid scope was encountered.") - } - do { - let status = Status(rawValue: errSecPVCAlreadyConfigured) - XCTAssertEqual(status, .pvcAlreadyConfigured) - XCTAssertEqual(status?.description, "The PVC is already configured.") - } - do { - let status = Status(rawValue: errSecInvalidPVC) - XCTAssertEqual(status, .invalidPVC) - XCTAssertEqual(status?.description, "An invalid PVC was encountered.") - } - do { - let status = Status(rawValue: errSecEMMLoadFailed) - XCTAssertEqual(status, .emmLoadFailed) - XCTAssertEqual(status?.description, "The EMM load has failed.") - } - do { - let status = Status(rawValue: errSecEMMUnloadFailed) - XCTAssertEqual(status, .emmUnloadFailed) - XCTAssertEqual(status?.description, "The EMM unload has failed.") - } - do { - let status = Status(rawValue: errSecAddinLoadFailed) - XCTAssertEqual(status, .addinLoadFailed) - XCTAssertEqual(status?.description, "The add-in load operation has failed.") - } - do { - let status = Status(rawValue: errSecInvalidKeyRef) - XCTAssertEqual(status, .invalidKeyRef) - XCTAssertEqual(status?.description, "An invalid key was encountered.") - } - do { - let status = Status(rawValue: errSecInvalidKeyHierarchy) - XCTAssertEqual(status, .invalidKeyHierarchy) - XCTAssertEqual(status?.description, "An invalid key hierarchy was encountered.") - } - do { - let status = Status(rawValue: errSecAddinUnloadFailed) - XCTAssertEqual(status, .addinUnloadFailed) - XCTAssertEqual(status?.description, "The add-in unload operation has failed.") - } - do { - let status = Status(rawValue: errSecLibraryReferenceNotFound) - XCTAssertEqual(status, .libraryReferenceNotFound) - XCTAssertEqual(status?.description, "A library reference was not found.") - } - do { - let status = Status(rawValue: errSecInvalidAddinFunctionTable) - XCTAssertEqual(status, .invalidAddinFunctionTable) - XCTAssertEqual(status?.description, "An invalid add-in function table was encountered.") - } - do { - let status = Status(rawValue: errSecInvalidServiceMask) - XCTAssertEqual(status, .invalidServiceMask) - XCTAssertEqual(status?.description, "An invalid service mask was encountered.") - } - do { - let status = Status(rawValue: errSecModuleNotLoaded) - XCTAssertEqual(status, .moduleNotLoaded) - XCTAssertEqual(status?.description, "A module was not loaded.") - } - do { - let status = Status(rawValue: errSecInvalidSubServiceID) - XCTAssertEqual(status, .invalidSubServiceID) - XCTAssertEqual(status?.description, "An invalid subservice ID was encountered.") - } - do { - let status = Status(rawValue: errSecAttributeNotInContext) - XCTAssertEqual(status, .attributeNotInContext) - XCTAssertEqual(status?.description, "An attribute was not in the context.") - } - do { - let status = Status(rawValue: errSecModuleManagerInitializeFailed) - XCTAssertEqual(status, .moduleManagerInitializeFailed) - XCTAssertEqual(status?.description, "A module failed to initialize.") - } - do { - let status = Status(rawValue: errSecModuleManagerNotFound) - XCTAssertEqual(status, .moduleManagerNotFound) - XCTAssertEqual(status?.description, "A module was not found.") - } - do { - let status = Status(rawValue: errSecEventNotificationCallbackNotFound) - XCTAssertEqual(status, .eventNotificationCallbackNotFound) - XCTAssertEqual(status?.description, "An event notification callback was not found.") - } - do { - let status = Status(rawValue: errSecInputLengthError) - XCTAssertEqual(status, .inputLengthError) - XCTAssertEqual(status?.description, "An input length error was encountered.") - } - do { - let status = Status(rawValue: errSecOutputLengthError) - XCTAssertEqual(status, .outputLengthError) - XCTAssertEqual(status?.description, "An output length error was encountered.") - } - do { - let status = Status(rawValue: errSecPrivilegeNotSupported) - XCTAssertEqual(status, .privilegeNotSupported) - XCTAssertEqual(status?.description, "The privilege is not supported.") - } - do { - let status = Status(rawValue: errSecDeviceError) - XCTAssertEqual(status, .deviceError) - XCTAssertEqual(status?.description, "A device error was encountered.") - } - do { - let status = Status(rawValue: errSecAttachHandleBusy) - XCTAssertEqual(status, .attachHandleBusy) - XCTAssertEqual(status?.description, "The CSP handle was busy.") - } - do { - let status = Status(rawValue: errSecNotLoggedIn) - XCTAssertEqual(status, .notLoggedIn) - XCTAssertEqual(status?.description, "You are not logged in.") - } - do { - let status = Status(rawValue: errSecAlgorithmMismatch) - XCTAssertEqual(status, .algorithmMismatch) - XCTAssertEqual(status?.description, "An algorithm mismatch was encountered.") - } - do { - let status = Status(rawValue: errSecKeyUsageIncorrect) - XCTAssertEqual(status, .keyUsageIncorrect) - XCTAssertEqual(status?.description, "The key usage is incorrect.") - } - do { - let status = Status(rawValue: errSecKeyBlobTypeIncorrect) - XCTAssertEqual(status, .keyBlobTypeIncorrect) - XCTAssertEqual(status?.description, "The key blob type is incorrect.") - } - do { - let status = Status(rawValue: errSecKeyHeaderInconsistent) - XCTAssertEqual(status, .keyHeaderInconsistent) - XCTAssertEqual(status?.description, "The key header is inconsistent.") - } - do { - let status = Status(rawValue: errSecUnsupportedKeyFormat) - XCTAssertEqual(status, .unsupportedKeyFormat) - XCTAssertEqual(status?.description, "The key header format is not supported.") - } - do { - let status = Status(rawValue: errSecUnsupportedKeySize) - XCTAssertEqual(status, .unsupportedKeySize) - XCTAssertEqual(status?.description, "The key size is not supported.") - } - do { - let status = Status(rawValue: errSecInvalidKeyUsageMask) - XCTAssertEqual(status, .invalidKeyUsageMask) - XCTAssertEqual(status?.description, "The key usage mask is not valid.") - } - do { - let status = Status(rawValue: errSecUnsupportedKeyUsageMask) - XCTAssertEqual(status, .unsupportedKeyUsageMask) - XCTAssertEqual(status?.description, "The key usage mask is not supported.") - } - do { - let status = Status(rawValue: errSecInvalidKeyAttributeMask) - XCTAssertEqual(status, .invalidKeyAttributeMask) - XCTAssertEqual(status?.description, "The key attribute mask is not valid.") - } - do { - let status = Status(rawValue: errSecUnsupportedKeyAttributeMask) - XCTAssertEqual(status, .unsupportedKeyAttributeMask) - XCTAssertEqual(status?.description, "The key attribute mask is not supported.") - } - do { - let status = Status(rawValue: errSecInvalidKeyLabel) - XCTAssertEqual(status, .invalidKeyLabel) - XCTAssertEqual(status?.description, "The key label is not valid.") - } - do { - let status = Status(rawValue: errSecUnsupportedKeyLabel) - XCTAssertEqual(status, .unsupportedKeyLabel) - XCTAssertEqual(status?.description, "The key label is not supported.") - } - do { - let status = Status(rawValue: errSecInvalidKeyFormat) - XCTAssertEqual(status, .invalidKeyFormat) - XCTAssertEqual(status?.description, "The key format is not valid.") - } - do { - let status = Status(rawValue: errSecUnsupportedVectorOfBuffers) - XCTAssertEqual(status, .unsupportedVectorOfBuffers) - XCTAssertEqual(status?.description, "The vector of buffers is not supported.") - } - do { - let status = Status(rawValue: errSecInvalidInputVector) - XCTAssertEqual(status, .invalidInputVector) - XCTAssertEqual(status?.description, "The input vector is not valid.") - } - do { - let status = Status(rawValue: errSecInvalidOutputVector) - XCTAssertEqual(status, .invalidOutputVector) - XCTAssertEqual(status?.description, "The output vector is not valid.") - } - do { - let status = Status(rawValue: errSecInvalidContext) - XCTAssertEqual(status, .invalidContext) - XCTAssertEqual(status?.description, "An invalid context was encountered.") - } - do { - let status = Status(rawValue: errSecInvalidAlgorithm) - XCTAssertEqual(status, .invalidAlgorithm) - XCTAssertEqual(status?.description, "An invalid algorithm was encountered.") - } - do { - let status = Status(rawValue: errSecInvalidAttributeKey) - XCTAssertEqual(status, .invalidAttributeKey) - XCTAssertEqual(status?.description, "A key attribute was not valid.") - } - do { - let status = Status(rawValue: errSecMissingAttributeKey) - XCTAssertEqual(status, .missingAttributeKey) - XCTAssertEqual(status?.description, "A key attribute was missing.") - } - do { - let status = Status(rawValue: errSecInvalidAttributeInitVector) - XCTAssertEqual(status, .invalidAttributeInitVector) - XCTAssertEqual(status?.description, "An init vector attribute was not valid.") - } - do { - let status = Status(rawValue: errSecMissingAttributeInitVector) - XCTAssertEqual(status, .missingAttributeInitVector) - XCTAssertEqual(status?.description, "An init vector attribute was missing.") - } - do { - let status = Status(rawValue: errSecInvalidAttributeSalt) - XCTAssertEqual(status, .invalidAttributeSalt) - XCTAssertEqual(status?.description, "A salt attribute was not valid.") - } - do { - let status = Status(rawValue: errSecMissingAttributeSalt) - XCTAssertEqual(status, .missingAttributeSalt) - XCTAssertEqual(status?.description, "A salt attribute was missing.") - } - do { - let status = Status(rawValue: errSecInvalidAttributePadding) - XCTAssertEqual(status, .invalidAttributePadding) - XCTAssertEqual(status?.description, "A padding attribute was not valid.") - } - do { - let status = Status(rawValue: errSecMissingAttributePadding) - XCTAssertEqual(status, .missingAttributePadding) - XCTAssertEqual(status?.description, "A padding attribute was missing.") - } - do { - let status = Status(rawValue: errSecInvalidAttributeRandom) - XCTAssertEqual(status, .invalidAttributeRandom) - XCTAssertEqual(status?.description, "A random number attribute was not valid.") - } - do { - let status = Status(rawValue: errSecMissingAttributeRandom) - XCTAssertEqual(status, .missingAttributeRandom) - XCTAssertEqual(status?.description, "A random number attribute was missing.") - } - do { - let status = Status(rawValue: errSecInvalidAttributeSeed) - XCTAssertEqual(status, .invalidAttributeSeed) - XCTAssertEqual(status?.description, "A seed attribute was not valid.") - } - do { - let status = Status(rawValue: errSecMissingAttributeSeed) - XCTAssertEqual(status, .missingAttributeSeed) - XCTAssertEqual(status?.description, "A seed attribute was missing.") - } - do { - let status = Status(rawValue: errSecInvalidAttributePassphrase) - XCTAssertEqual(status, .invalidAttributePassphrase) - XCTAssertEqual(status?.description, "A passphrase attribute was not valid.") - } - do { - let status = Status(rawValue: errSecMissingAttributePassphrase) - XCTAssertEqual(status, .missingAttributePassphrase) - XCTAssertEqual(status?.description, "A passphrase attribute was missing.") - } - do { - let status = Status(rawValue: errSecInvalidAttributeKeyLength) - XCTAssertEqual(status, .invalidAttributeKeyLength) - XCTAssertEqual(status?.description, "A key length attribute was not valid.") - } - do { - let status = Status(rawValue: errSecMissingAttributeKeyLength) - XCTAssertEqual(status, .missingAttributeKeyLength) - XCTAssertEqual(status?.description, "A key length attribute was missing.") - } - do { - let status = Status(rawValue: errSecInvalidAttributeBlockSize) - XCTAssertEqual(status, .invalidAttributeBlockSize) - XCTAssertEqual(status?.description, "A block size attribute was not valid.") - } - do { - let status = Status(rawValue: errSecMissingAttributeBlockSize) - XCTAssertEqual(status, .missingAttributeBlockSize) - XCTAssertEqual(status?.description, "A block size attribute was missing.") - } - do { - let status = Status(rawValue: errSecInvalidAttributeOutputSize) - XCTAssertEqual(status, .invalidAttributeOutputSize) - XCTAssertEqual(status?.description, "An output size attribute was not valid.") - } - do { - let status = Status(rawValue: errSecMissingAttributeOutputSize) - XCTAssertEqual(status, .missingAttributeOutputSize) - XCTAssertEqual(status?.description, "An output size attribute was missing.") - } - do { - let status = Status(rawValue: errSecInvalidAttributeRounds) - XCTAssertEqual(status, .invalidAttributeRounds) - XCTAssertEqual(status?.description, "The number of rounds attribute was not valid.") - } - do { - let status = Status(rawValue: errSecMissingAttributeRounds) - XCTAssertEqual(status, .missingAttributeRounds) - XCTAssertEqual(status?.description, "The number of rounds attribute was missing.") - } - do { - let status = Status(rawValue: errSecInvalidAlgorithmParms) - XCTAssertEqual(status, .invalidAlgorithmParms) - XCTAssertEqual(status?.description, "An algorithm parameters attribute was not valid.") - } - do { - let status = Status(rawValue: errSecMissingAlgorithmParms) - XCTAssertEqual(status, .missingAlgorithmParms) - XCTAssertEqual(status?.description, "An algorithm parameters attribute was missing.") - } - do { - let status = Status(rawValue: errSecInvalidAttributeLabel) - XCTAssertEqual(status, .invalidAttributeLabel) - XCTAssertEqual(status?.description, "A label attribute was not valid.") - } - do { - let status = Status(rawValue: errSecMissingAttributeLabel) - XCTAssertEqual(status, .missingAttributeLabel) - XCTAssertEqual(status?.description, "A label attribute was missing.") - } - do { - let status = Status(rawValue: errSecInvalidAttributeKeyType) - XCTAssertEqual(status, .invalidAttributeKeyType) - XCTAssertEqual(status?.description, "A key type attribute was not valid.") - } - do { - let status = Status(rawValue: errSecMissingAttributeKeyType) - XCTAssertEqual(status, .missingAttributeKeyType) - XCTAssertEqual(status?.description, "A key type attribute was missing.") - } - do { - let status = Status(rawValue: errSecInvalidAttributeMode) - XCTAssertEqual(status, .invalidAttributeMode) - XCTAssertEqual(status?.description, "A mode attribute was not valid.") - } - do { - let status = Status(rawValue: errSecMissingAttributeMode) - XCTAssertEqual(status, .missingAttributeMode) - XCTAssertEqual(status?.description, "A mode attribute was missing.") - } - do { - let status = Status(rawValue: errSecInvalidAttributeEffectiveBits) - XCTAssertEqual(status, .invalidAttributeEffectiveBits) - XCTAssertEqual(status?.description, "An effective bits attribute was not valid.") - } - do { - let status = Status(rawValue: errSecMissingAttributeEffectiveBits) - XCTAssertEqual(status, .missingAttributeEffectiveBits) - XCTAssertEqual(status?.description, "An effective bits attribute was missing.") - } - do { - let status = Status(rawValue: errSecInvalidAttributeStartDate) - XCTAssertEqual(status, .invalidAttributeStartDate) - XCTAssertEqual(status?.description, "A start date attribute was not valid.") - } - do { - let status = Status(rawValue: errSecMissingAttributeStartDate) - XCTAssertEqual(status, .missingAttributeStartDate) - XCTAssertEqual(status?.description, "A start date attribute was missing.") - } - do { - let status = Status(rawValue: errSecInvalidAttributeEndDate) - XCTAssertEqual(status, .invalidAttributeEndDate) - XCTAssertEqual(status?.description, "An end date attribute was not valid.") - } - do { - let status = Status(rawValue: errSecMissingAttributeEndDate) - XCTAssertEqual(status, .missingAttributeEndDate) - XCTAssertEqual(status?.description, "An end date attribute was missing.") - } - do { - let status = Status(rawValue: errSecInvalidAttributeVersion) - XCTAssertEqual(status, .invalidAttributeVersion) - XCTAssertEqual(status?.description, "A version attribute was not valid.") - } - do { - let status = Status(rawValue: errSecMissingAttributeVersion) - XCTAssertEqual(status, .missingAttributeVersion) - XCTAssertEqual(status?.description, "A version attribute was missing.") - } - do { - let status = Status(rawValue: errSecInvalidAttributePrime) - XCTAssertEqual(status, .invalidAttributePrime) - XCTAssertEqual(status?.description, "A prime attribute was not valid.") - } - do { - let status = Status(rawValue: errSecMissingAttributePrime) - XCTAssertEqual(status, .missingAttributePrime) - XCTAssertEqual(status?.description, "A prime attribute was missing.") - } - do { - let status = Status(rawValue: errSecInvalidAttributeBase) - XCTAssertEqual(status, .invalidAttributeBase) - XCTAssertEqual(status?.description, "A base attribute was not valid.") - } - do { - let status = Status(rawValue: errSecMissingAttributeBase) - XCTAssertEqual(status, .missingAttributeBase) - XCTAssertEqual(status?.description, "A base attribute was missing.") - } - do { - let status = Status(rawValue: errSecInvalidAttributeSubprime) - XCTAssertEqual(status, .invalidAttributeSubprime) - XCTAssertEqual(status?.description, "A subprime attribute was not valid.") - } - do { - let status = Status(rawValue: errSecMissingAttributeSubprime) - XCTAssertEqual(status, .missingAttributeSubprime) - XCTAssertEqual(status?.description, "A subprime attribute was missing.") - } - do { - let status = Status(rawValue: errSecInvalidAttributeIterationCount) - XCTAssertEqual(status, .invalidAttributeIterationCount) - XCTAssertEqual(status?.description, "An iteration count attribute was not valid.") - } - do { - let status = Status(rawValue: errSecMissingAttributeIterationCount) - XCTAssertEqual(status, .missingAttributeIterationCount) - XCTAssertEqual(status?.description, "An iteration count attribute was missing.") - } - do { - let status = Status(rawValue: errSecInvalidAttributeDLDBHandle) - XCTAssertEqual(status, .invalidAttributeDLDBHandle) - XCTAssertEqual(status?.description, "A database handle attribute was not valid.") - } - do { - let status = Status(rawValue: errSecMissingAttributeDLDBHandle) - XCTAssertEqual(status, .missingAttributeDLDBHandle) - XCTAssertEqual(status?.description, "A database handle attribute was missing.") - } - do { - let status = Status(rawValue: errSecInvalidAttributeAccessCredentials) - XCTAssertEqual(status, .invalidAttributeAccessCredentials) - XCTAssertEqual(status?.description, "An access credentials attribute was not valid.") - } - do { - let status = Status(rawValue: errSecMissingAttributeAccessCredentials) - XCTAssertEqual(status, .missingAttributeAccessCredentials) - XCTAssertEqual(status?.description, "An access credentials attribute was missing.") - } - do { - let status = Status(rawValue: errSecInvalidAttributePublicKeyFormat) - XCTAssertEqual(status, .invalidAttributePublicKeyFormat) - XCTAssertEqual(status?.description, "A public key format attribute was not valid.") - } - do { - let status = Status(rawValue: errSecMissingAttributePublicKeyFormat) - XCTAssertEqual(status, .missingAttributePublicKeyFormat) - XCTAssertEqual(status?.description, "A public key format attribute was missing.") - } - do { - let status = Status(rawValue: errSecInvalidAttributePrivateKeyFormat) - XCTAssertEqual(status, .invalidAttributePrivateKeyFormat) - XCTAssertEqual(status?.description, "A private key format attribute was not valid.") - } - do { - let status = Status(rawValue: errSecMissingAttributePrivateKeyFormat) - XCTAssertEqual(status, .missingAttributePrivateKeyFormat) - XCTAssertEqual(status?.description, "A private key format attribute was missing.") - } - do { - let status = Status(rawValue: errSecInvalidAttributeSymmetricKeyFormat) - XCTAssertEqual(status, .invalidAttributeSymmetricKeyFormat) - XCTAssertEqual(status?.description, "A symmetric key format attribute was not valid.") - } - do { - let status = Status(rawValue: errSecMissingAttributeSymmetricKeyFormat) - XCTAssertEqual(status, .missingAttributeSymmetricKeyFormat) - XCTAssertEqual(status?.description, "A symmetric key format attribute was missing.") - } - do { - let status = Status(rawValue: errSecInvalidAttributeWrappedKeyFormat) - XCTAssertEqual(status, .invalidAttributeWrappedKeyFormat) - XCTAssertEqual(status?.description, "A wrapped key format attribute was not valid.") - } - do { - let status = Status(rawValue: errSecMissingAttributeWrappedKeyFormat) - XCTAssertEqual(status, .missingAttributeWrappedKeyFormat) - XCTAssertEqual(status?.description, "A wrapped key format attribute was missing.") - } - do { - let status = Status(rawValue: errSecStagedOperationInProgress) - XCTAssertEqual(status, .stagedOperationInProgress) - XCTAssertEqual(status?.description, "A staged operation is in progress.") - } - do { - let status = Status(rawValue: errSecStagedOperationNotStarted) - XCTAssertEqual(status, .stagedOperationNotStarted) - XCTAssertEqual(status?.description, "A staged operation was not started.") - } - do { - let status = Status(rawValue: errSecVerifyFailed) - XCTAssertEqual(status, .verifyFailed) - XCTAssertEqual(status?.description, "A cryptographic verification failure has occurred.") - } - do { - let status = Status(rawValue: errSecQuerySizeUnknown) - XCTAssertEqual(status, .querySizeUnknown) - XCTAssertEqual(status?.description, "The query size is unknown.") - } - do { - let status = Status(rawValue: errSecBlockSizeMismatch) - XCTAssertEqual(status, .blockSizeMismatch) - XCTAssertEqual(status?.description, "A block size mismatch occurred.") - } - do { - let status = Status(rawValue: errSecPublicKeyInconsistent) - XCTAssertEqual(status, .publicKeyInconsistent) - XCTAssertEqual(status?.description, "The public key was inconsistent.") - } - do { - let status = Status(rawValue: errSecDeviceVerifyFailed) - XCTAssertEqual(status, .deviceVerifyFailed) - XCTAssertEqual(status?.description, "A device verification failure has occurred.") - } - do { - let status = Status(rawValue: errSecInvalidLoginName) - XCTAssertEqual(status, .invalidLoginName) - XCTAssertEqual(status?.description, "An invalid login name was detected.") - } - do { - let status = Status(rawValue: errSecAlreadyLoggedIn) - XCTAssertEqual(status, .alreadyLoggedIn) - XCTAssertEqual(status?.description, "The user is already logged in.") - } - do { - let status = Status(rawValue: errSecInvalidDigestAlgorithm) - XCTAssertEqual(status, .invalidDigestAlgorithm) - XCTAssertEqual(status?.description, "An invalid digest algorithm was detected.") - } - do { - let status = Status(rawValue: errSecInvalidCRLGroup) - XCTAssertEqual(status, .invalidCRLGroup) - XCTAssertEqual(status?.description, "An invalid CRL group was detected.") - } - do { - let status = Status(rawValue: errSecCertificateCannotOperate) - XCTAssertEqual(status, .certificateCannotOperate) - XCTAssertEqual(status?.description, "The certificate cannot operate.") - } - do { - let status = Status(rawValue: errSecCertificateExpired) - XCTAssertEqual(status, .certificateExpired) - XCTAssertEqual(status?.description, "An expired certificate was detected.") - } - do { - let status = Status(rawValue: errSecCertificateNotValidYet) - XCTAssertEqual(status, .certificateNotValidYet) - XCTAssertEqual(status?.description, "The certificate is not yet valid.") - } - do { - let status = Status(rawValue: errSecCertificateRevoked) - XCTAssertEqual(status, .certificateRevoked) - XCTAssertEqual(status?.description, "The certificate was revoked.") - } - do { - let status = Status(rawValue: errSecCertificateSuspended) - XCTAssertEqual(status, .certificateSuspended) - XCTAssertEqual(status?.description, "The certificate was suspended.") - } - do { - let status = Status(rawValue: errSecInsufficientCredentials) - XCTAssertEqual(status, .insufficientCredentials) - XCTAssertEqual(status?.description, "Insufficient credentials were detected.") - } - do { - let status = Status(rawValue: errSecInvalidAction) - XCTAssertEqual(status, .invalidAction) - XCTAssertEqual(status?.description, "The action was not valid.") - } - do { - let status = Status(rawValue: errSecInvalidAuthority) - XCTAssertEqual(status, .invalidAuthority) - XCTAssertEqual(status?.description, "The authority was not valid.") - } - do { - let status = Status(rawValue: errSecVerifyActionFailed) - XCTAssertEqual(status, .verifyActionFailed) - XCTAssertEqual(status?.description, "A verify action has failed.") - } - do { - let status = Status(rawValue: errSecInvalidCertAuthority) - XCTAssertEqual(status, .invalidCertAuthority) - XCTAssertEqual(status?.description, "The certificate authority was not valid.") - } - do { - let status = Status(rawValue: errSecInvaldCRLAuthority) - XCTAssertEqual(status, .invaldCRLAuthority) - XCTAssertEqual(status?.description, "The CRL authority was not valid.") - } - do { - let status = Status(rawValue: errSecInvalidCRLEncoding) - XCTAssertEqual(status, .invalidCRLEncoding) - XCTAssertEqual(status?.description, "The CRL encoding was not valid.") - } - do { - let status = Status(rawValue: errSecInvalidCRLType) - XCTAssertEqual(status, .invalidCRLType) - XCTAssertEqual(status?.description, "The CRL type was not valid.") - } - do { - let status = Status(rawValue: errSecInvalidCRL) - XCTAssertEqual(status, .invalidCRL) - XCTAssertEqual(status?.description, "The CRL was not valid.") - } - do { - let status = Status(rawValue: errSecInvalidFormType) - XCTAssertEqual(status, .invalidFormType) - XCTAssertEqual(status?.description, "The form type was not valid.") - } - do { - let status = Status(rawValue: errSecInvalidID) - XCTAssertEqual(status, .invalidID) - XCTAssertEqual(status?.description, "The ID was not valid.") - } - do { - let status = Status(rawValue: errSecInvalidIdentifier) - XCTAssertEqual(status, .invalidIdentifier) - XCTAssertEqual(status?.description, "The identifier was not valid.") - } - do { - let status = Status(rawValue: errSecInvalidIndex) - XCTAssertEqual(status, .invalidIndex) - XCTAssertEqual(status?.description, "The index was not valid.") - } - do { - let status = Status(rawValue: errSecInvalidPolicyIdentifiers) - XCTAssertEqual(status, .invalidPolicyIdentifiers) - XCTAssertEqual(status?.description, "The policy identifiers are not valid.") - } - do { - let status = Status(rawValue: errSecInvalidTimeString) - XCTAssertEqual(status, .invalidTimeString) - XCTAssertEqual(status?.description, "The time specified was not valid.") - } - do { - let status = Status(rawValue: errSecInvalidReason) - XCTAssertEqual(status, .invalidReason) - XCTAssertEqual(status?.description, "The trust policy reason was not valid.") - } - do { - let status = Status(rawValue: errSecInvalidRequestInputs) - XCTAssertEqual(status, .invalidRequestInputs) - XCTAssertEqual(status?.description, "The request inputs are not valid.") - } - do { - let status = Status(rawValue: errSecInvalidResponseVector) - XCTAssertEqual(status, .invalidResponseVector) - XCTAssertEqual(status?.description, "The response vector was not valid.") - } - do { - let status = Status(rawValue: errSecInvalidStopOnPolicy) - XCTAssertEqual(status, .invalidStopOnPolicy) - XCTAssertEqual(status?.description, "The stop-on policy was not valid.") - } - do { - let status = Status(rawValue: errSecInvalidTuple) - XCTAssertEqual(status, .invalidTuple) - XCTAssertEqual(status?.description, "The tuple was not valid.") - } - do { - let status = Status(rawValue: errSecMultipleValuesUnsupported) - XCTAssertEqual(status, .multipleValuesUnsupported) - XCTAssertEqual(status?.description, "Multiple values are not supported.") - } - do { - let status = Status(rawValue: errSecNotTrusted) - XCTAssertEqual(status, .notTrusted) - XCTAssertEqual(status?.description, "The trust policy was not trusted.") - } - do { - let status = Status(rawValue: errSecNoDefaultAuthority) - XCTAssertEqual(status, .noDefaultAuthority) - XCTAssertEqual(status?.description, "No default authority was detected.") - } - do { - let status = Status(rawValue: errSecRejectedForm) - XCTAssertEqual(status, .rejectedForm) - XCTAssertEqual(status?.description, "The trust policy had a rejected form.") - } - do { - let status = Status(rawValue: errSecRequestLost) - XCTAssertEqual(status, .requestLost) - XCTAssertEqual(status?.description, "The request was lost.") - } - do { - let status = Status(rawValue: errSecRequestRejected) - XCTAssertEqual(status, .requestRejected) - XCTAssertEqual(status?.description, "The request was rejected.") - } - do { - let status = Status(rawValue: errSecUnsupportedAddressType) - XCTAssertEqual(status, .unsupportedAddressType) - XCTAssertEqual(status?.description, "The address type is not supported.") - } - do { - let status = Status(rawValue: errSecUnsupportedService) - XCTAssertEqual(status, .unsupportedService) - XCTAssertEqual(status?.description, "The service is not supported.") - } - do { - let status = Status(rawValue: errSecInvalidTupleGroup) - XCTAssertEqual(status, .invalidTupleGroup) - XCTAssertEqual(status?.description, "The tuple group was not valid.") - } - do { - let status = Status(rawValue: errSecInvalidBaseACLs) - XCTAssertEqual(status, .invalidBaseACLs) - XCTAssertEqual(status?.description, "The base ACLs are not valid.") - } - do { - let status = Status(rawValue: errSecInvalidTupleCredendtials) - XCTAssertEqual(status, .invalidTupleCredendtials) - XCTAssertEqual(status?.description, "The tuple credentials are not valid.") - } - do { - let status = Status(rawValue: errSecInvalidEncoding) - XCTAssertEqual(status, .invalidEncoding) - XCTAssertEqual(status?.description, "The encoding was not valid.") - } - do { - let status = Status(rawValue: errSecInvalidValidityPeriod) - XCTAssertEqual(status, .invalidValidityPeriod) - XCTAssertEqual(status?.description, "The validity period was not valid.") - } - do { - let status = Status(rawValue: errSecInvalidRequestor) - XCTAssertEqual(status, .invalidRequestor) - XCTAssertEqual(status?.description, "The requestor was not valid.") - } - do { - let status = Status(rawValue: errSecRequestDescriptor) - XCTAssertEqual(status, .requestDescriptor) - XCTAssertEqual(status?.description, "The request descriptor was not valid.") - } - do { - let status = Status(rawValue: errSecInvalidBundleInfo) - XCTAssertEqual(status, .invalidBundleInfo) - XCTAssertEqual(status?.description, "The bundle information was not valid.") - } - do { - let status = Status(rawValue: errSecInvalidCRLIndex) - XCTAssertEqual(status, .invalidCRLIndex) - XCTAssertEqual(status?.description, "The CRL index was not valid.") - } - do { - let status = Status(rawValue: errSecNoFieldValues) - XCTAssertEqual(status, .noFieldValues) - XCTAssertEqual(status?.description, "No field values were detected.") - } - do { - let status = Status(rawValue: errSecUnsupportedFieldFormat) - XCTAssertEqual(status, .unsupportedFieldFormat) - XCTAssertEqual(status?.description, "The field format is not supported.") - } - do { - let status = Status(rawValue: errSecUnsupportedIndexInfo) - XCTAssertEqual(status, .unsupportedIndexInfo) - XCTAssertEqual(status?.description, "The index information is not supported.") - } - do { - let status = Status(rawValue: errSecUnsupportedLocality) - XCTAssertEqual(status, .unsupportedLocality) - XCTAssertEqual(status?.description, "The locality is not supported.") - } - do { - let status = Status(rawValue: errSecUnsupportedNumAttributes) - XCTAssertEqual(status, .unsupportedNumAttributes) - XCTAssertEqual(status?.description, "The number of attributes is not supported.") - } - do { - let status = Status(rawValue: errSecUnsupportedNumIndexes) - XCTAssertEqual(status, .unsupportedNumIndexes) - XCTAssertEqual(status?.description, "The number of indexes is not supported.") - } - do { - let status = Status(rawValue: errSecUnsupportedNumRecordTypes) - XCTAssertEqual(status, .unsupportedNumRecordTypes) - XCTAssertEqual(status?.description, "The number of record types is not supported.") - } - do { - let status = Status(rawValue: errSecFieldSpecifiedMultiple) - XCTAssertEqual(status, .fieldSpecifiedMultiple) - XCTAssertEqual(status?.description, "Too many fields were specified.") - } - do { - let status = Status(rawValue: errSecIncompatibleFieldFormat) - XCTAssertEqual(status, .incompatibleFieldFormat) - XCTAssertEqual(status?.description, "The field format was incompatible.") - } - do { - let status = Status(rawValue: errSecInvalidParsingModule) - XCTAssertEqual(status, .invalidParsingModule) - XCTAssertEqual(status?.description, "The parsing module was not valid.") - } - do { - let status = Status(rawValue: errSecDatabaseLocked) - XCTAssertEqual(status, .databaseLocked) - XCTAssertEqual(status?.description, "The database is locked.") - } - do { - let status = Status(rawValue: errSecDatastoreIsOpen) - XCTAssertEqual(status, .datastoreIsOpen) - XCTAssertEqual(status?.description, "The data store is open.") - } - do { - let status = Status(rawValue: errSecMissingValue) - XCTAssertEqual(status, .missingValue) - XCTAssertEqual(status?.description, "A missing value was detected.") - } - do { - let status = Status(rawValue: errSecUnsupportedQueryLimits) - XCTAssertEqual(status, .unsupportedQueryLimits) - XCTAssertEqual(status?.description, "The query limits are not supported.") - } - do { - let status = Status(rawValue: errSecUnsupportedNumSelectionPreds) - XCTAssertEqual(status, .unsupportedNumSelectionPreds) - XCTAssertEqual(status?.description, "The number of selection predicates is not supported.") - } - do { - let status = Status(rawValue: errSecUnsupportedOperator) - XCTAssertEqual(status, .unsupportedOperator) - XCTAssertEqual(status?.description, "The operator is not supported.") - } - do { - let status = Status(rawValue: errSecInvalidDBLocation) - XCTAssertEqual(status, .invalidDBLocation) - XCTAssertEqual(status?.description, "The database location is not valid.") - } - do { - let status = Status(rawValue: errSecInvalidAccessRequest) - XCTAssertEqual(status, .invalidAccessRequest) - XCTAssertEqual(status?.description, "The access request is not valid.") - } - do { - let status = Status(rawValue: errSecInvalidIndexInfo) - XCTAssertEqual(status, .invalidIndexInfo) - XCTAssertEqual(status?.description, "The index information is not valid.") - } - do { - let status = Status(rawValue: errSecInvalidNewOwner) - XCTAssertEqual(status, .invalidNewOwner) - XCTAssertEqual(status?.description, "The new owner is not valid.") - } - do { - let status = Status(rawValue: errSecInvalidModifyMode) - XCTAssertEqual(status, .invalidModifyMode) - XCTAssertEqual(status?.description, "The modify mode is not valid.") - } - do { - let status = Status(rawValue: errSecMissingRequiredExtension) - XCTAssertEqual(status, .missingRequiredExtension) - XCTAssertEqual(status?.description, "A required certificate extension is missing.") - } - do { - let status = Status(rawValue: errSecExtendedKeyUsageNotCritical) - XCTAssertEqual(status, .extendedKeyUsageNotCritical) - XCTAssertEqual(status?.description, "The extended key usage extension was not marked critical.") - } - do { - let status = Status(rawValue: errSecTimestampMissing) - XCTAssertEqual(status, .timestampMissing) - XCTAssertEqual(status?.description, "A timestamp was expected but was not found.") - } - do { - let status = Status(rawValue: errSecTimestampInvalid) - XCTAssertEqual(status, .timestampInvalid) - XCTAssertEqual(status?.description, "The timestamp was not valid.") - } - do { - let status = Status(rawValue: errSecTimestampNotTrusted) - XCTAssertEqual(status, .timestampNotTrusted) - XCTAssertEqual(status?.description, "The timestamp was not trusted.") - } - do { - let status = Status(rawValue: errSecTimestampServiceNotAvailable) - XCTAssertEqual(status, .timestampServiceNotAvailable) - XCTAssertEqual(status?.description, "The timestamp service is not available.") - } - do { - let status = Status(rawValue: errSecTimestampBadAlg) - XCTAssertEqual(status, .timestampBadAlg) - XCTAssertEqual(status?.description, "An unrecognized or unsupported Algorithm Identifier in timestamp.") - } - do { - let status = Status(rawValue: errSecTimestampBadRequest) - XCTAssertEqual(status, .timestampBadRequest) - XCTAssertEqual(status?.description, "The timestamp transaction is not permitted or supported.") - } - do { - let status = Status(rawValue: errSecTimestampBadDataFormat) - XCTAssertEqual(status, .timestampBadDataFormat) - XCTAssertEqual(status?.description, "The timestamp data submitted has the wrong format.") - } - do { - let status = Status(rawValue: errSecTimestampTimeNotAvailable) - XCTAssertEqual(status, .timestampTimeNotAvailable) - XCTAssertEqual(status?.description, "The time source for the Timestamp Authority is not available.") - } - do { - let status = Status(rawValue: errSecTimestampUnacceptedPolicy) - XCTAssertEqual(status, .timestampUnacceptedPolicy) - XCTAssertEqual(status?.description, "The requested policy is not supported by the Timestamp Authority.") - } - do { - let status = Status(rawValue: errSecTimestampUnacceptedExtension) - XCTAssertEqual(status, .timestampUnacceptedExtension) - XCTAssertEqual(status?.description, "The requested extension is not supported by the Timestamp Authority.") - } - do { - let status = Status(rawValue: errSecTimestampAddInfoNotAvailable) - XCTAssertEqual(status, .timestampAddInfoNotAvailable) - XCTAssertEqual(status?.description, "The additional information requested is not available.") - } - do { - let status = Status(rawValue: errSecTimestampSystemFailure) - XCTAssertEqual(status, .timestampSystemFailure) - XCTAssertEqual(status?.description, "The timestamp request cannot be handled due to system failure.") - } - do { - let status = Status(rawValue: errSecSigningTimeMissing) - XCTAssertEqual(status, .signingTimeMissing) - XCTAssertEqual(status?.description, "A signing time was expected but was not found.") - } - do { - let status = Status(rawValue: errSecTimestampRejection) - XCTAssertEqual(status, .timestampRejection) - XCTAssertEqual(status?.description, "A timestamp transaction was rejected.") - } - do { - let status = Status(rawValue: errSecTimestampWaiting) - XCTAssertEqual(status, .timestampWaiting) - XCTAssertEqual(status?.description, "A timestamp transaction is waiting.") - } - do { - let status = Status(rawValue: errSecTimestampRevocationWarning) - XCTAssertEqual(status, .timestampRevocationWarning) - XCTAssertEqual(status?.description, "A timestamp authority revocation warning was issued.") - } - do { - let status = Status(rawValue: errSecTimestampRevocationNotification) - XCTAssertEqual(status, .timestampRevocationNotification) - XCTAssertEqual(status?.description, "A timestamp authority revocation notification was issued.") - } - #endif - } -} diff --git a/Carthage/Checkouts/KeychainAccess/Lib/KeychainAccessTests/Info.plist b/Carthage/Checkouts/KeychainAccess/Lib/KeychainAccessTests/Info.plist deleted file mode 100644 index a30f7d0..0000000 --- a/Carthage/Checkouts/KeychainAccess/Lib/KeychainAccessTests/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - - diff --git a/Carthage/Checkouts/KeychainAccess/Lib/KeychainAccessTests/KeychainAccessTests.swift b/Carthage/Checkouts/KeychainAccess/Lib/KeychainAccessTests/KeychainAccessTests.swift deleted file mode 100644 index f6a70e7..0000000 --- a/Carthage/Checkouts/KeychainAccess/Lib/KeychainAccessTests/KeychainAccessTests.swift +++ /dev/null @@ -1,1475 +0,0 @@ -// -// KeychainAccessTests.swift -// KeychainAccessTests -// -// Created by kishikawa katsumi on 2014/12/24. -// Copyright (c) 2014 kishikawa katsumi. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -import Foundation -import XCTest - -import KeychainAccess - -class KeychainAccessTests: XCTestCase { - - override func setUp() { - super.setUp() - - do { try Keychain(service: "Twitter", accessGroup: "27AEDK3C9F.shared").removeAll() } catch {} - do { try Keychain(service: "Twitter").removeAll() } catch {} - - do { try Keychain(server: URL(string: "https://example.com")!, protocolType: .https).removeAll() } catch {} - do { try Keychain(server: URL(string: "https://example.com:443")!, protocolType: .https).removeAll() } catch {} - - do { try Keychain().removeAll() } catch {} - } - - override func tearDown() { - super.tearDown() - } - - // MARK: - - func testGenericPassword() { - do { - // Add Keychain items - let keychain = Keychain(service: "Twitter") - - do { try keychain.set("kishikawa_katsumi", key: "username") } catch {} - do { try keychain.set("password_1234", key: "password") } catch {} - - let username = try! keychain.get("username") - XCTAssertEqual(username, "kishikawa_katsumi") - - let password = try! keychain.get("password") - XCTAssertEqual(password, "password_1234") - } - - do { - // Update Keychain items - let keychain = Keychain(service: "Twitter") - - do { try keychain.set("katsumi_kishikawa", key: "username") } catch {} - do { try keychain.set("1234_password", key: "password") } catch {} - - let username = try! keychain.get("username") - XCTAssertEqual(username, "katsumi_kishikawa") - - let password = try! keychain.get("password") - XCTAssertEqual(password, "1234_password") - } - - do { - // Remove Keychain items - let keychain = Keychain(service: "Twitter") - - do { try keychain.remove("username") } catch {} - do { try keychain.remove("password") } catch {} - - XCTAssertNil(try! keychain.get("username")) - XCTAssertNil(try! keychain.get("password")) - } - } - - func testGenericPasswordSubscripting() { - do { - // Add Keychain items - let keychain = Keychain(service: "Twitter", accessGroup: "27AEDK3C9F.shared") - - keychain["username"] = "kishikawa_katsumi" - keychain["password"] = "password_1234" - - let username = keychain["username"] - XCTAssertEqual(username, "kishikawa_katsumi") - - let password = keychain["password"] - XCTAssertEqual(password, "password_1234") - } - - do { - // Update Keychain items - let keychain = Keychain(service: "Twitter", accessGroup: "27AEDK3C9F.shared") - - keychain["username"] = "katsumi_kishikawa" - keychain["password"] = "1234_password" - - let username = keychain["username"] - XCTAssertEqual(username, "katsumi_kishikawa") - - let password = keychain["password"] - XCTAssertEqual(password, "1234_password") - } - - do { - // Remove Keychain items - let keychain = Keychain(service: "Twitter", accessGroup: "27AEDK3C9F.shared") - - keychain["username"] = nil - keychain["password"] = nil - - XCTAssertNil(keychain["username"]) - XCTAssertNil(keychain["password"]) - } - } - - // MARK: - - func testInternetPassword() { - do { - // Add Keychain items - let keychain = Keychain(server: URL(string: "https://kishikawakatsumi.com")!, protocolType: .https) - - do { try keychain.set("kishikawa_katsumi", key: "username") } catch {} - do { try keychain.set("password_1234", key: "password") } catch {} - - let username = try! keychain.get("username") - XCTAssertEqual(username, "kishikawa_katsumi") - - let password = try! keychain.get("password") - XCTAssertEqual(password, "password_1234") - } - - do { - // Update Keychain items - let keychain = Keychain(server: URL(string: "https://kishikawakatsumi.com")!, protocolType: .https) - - do { try keychain.set("katsumi_kishikawa", key: "username") } catch {} - do { try keychain.set("1234_password", key: "password") } catch {} - - let username = try! keychain.get("username") - XCTAssertEqual(username, "katsumi_kishikawa") - - let password = try! keychain.get("password") - XCTAssertEqual(password, "1234_password") - } - - do { - // Remove Keychain items - let keychain = Keychain(server: URL(string: "https://kishikawakatsumi.com")!, protocolType: .https) - - do { try keychain.remove("username") } catch {} - do { try keychain.remove("password") } catch {} - - XCTAssertNil(try! keychain.get("username")) - XCTAssertNil(try! keychain.get("password")) - } - } - - func testInternetPasswordSubscripting() { - do { - // Add Keychain items - let keychain = Keychain(server: URL(string: "https://kishikawakatsumi.com")!, protocolType: .https) - - keychain["username"] = "kishikawa_katsumi" - keychain["password"] = "password_1234" - - let username = keychain["username"] - XCTAssertEqual(username, "kishikawa_katsumi") - - let password = keychain["password"] - XCTAssertEqual(password, "password_1234") - } - - do { - // Update Keychain items - let keychain = Keychain(server: URL(string: "https://kishikawakatsumi.com")!, protocolType: .https) - - keychain["username"] = "katsumi_kishikawa" - keychain["password"] = "1234_password" - - let username = keychain["username"] - XCTAssertEqual(username, "katsumi_kishikawa") - - let password = keychain["password"] - XCTAssertEqual(password, "1234_password") - } - - do { - // Remove Keychain items - let keychain = Keychain(server: URL(string: "https://kishikawakatsumi.com")!, protocolType: .https) - - keychain["username"] = nil - keychain["password"] = nil - - XCTAssertNil(keychain["username"]) - XCTAssertNil(keychain["password"]) - } - } - - // MARK: - - func testDefaultInitializer() { - let keychain = Keychain() - XCTAssertEqual(keychain.service, Bundle.main.bundleIdentifier) - XCTAssertEqual(keychain.service, "com.kishikawakatsumi.KeychainAccess.TestHost") - XCTAssertNil(keychain.accessGroup) - } - - func testInitializerWithService() { - let keychain = Keychain(service: "com.example.github-token") - XCTAssertEqual(keychain.service, "com.example.github-token") - XCTAssertNil(keychain.accessGroup) - } - - func testInitializerWithAccessGroup() { - let keychain = Keychain(accessGroup: "27AEDK3C9F.shared") - XCTAssertEqual(keychain.service, "com.kishikawakatsumi.KeychainAccess.TestHost") - XCTAssertEqual(keychain.accessGroup, "27AEDK3C9F.shared") - } - - func testInitializerWithServiceAndAccessGroup() { - let keychain = Keychain(service: "com.example.github-token", accessGroup: "27AEDK3C9F.shared") - XCTAssertEqual(keychain.service, "com.example.github-token") - XCTAssertEqual(keychain.accessGroup, "27AEDK3C9F.shared") - } - - func testInitializerWithServer() { - let server = "https://kishikawakatsumi.com" - let url = URL(string: server)! - - do { - let keychain = Keychain(server: server, protocolType: .https) - XCTAssertEqual(keychain.server, url) - XCTAssertEqual(keychain.protocolType, ProtocolType.https) - XCTAssertEqual(keychain.authenticationType, AuthenticationType.default) - } - do { - let keychain = Keychain(server: url, protocolType: .https) - XCTAssertEqual(keychain.server, url) - XCTAssertEqual(keychain.protocolType, ProtocolType.https) - XCTAssertEqual(keychain.authenticationType, AuthenticationType.default) - } - } - - func testInitializerWithServerAndAuthenticationType() { - let server = "https://kishikawakatsumi.com" - let url = URL(string: server)! - - do { - let keychain = Keychain(server: server, protocolType: .https, authenticationType: .htmlForm) - XCTAssertEqual(keychain.server, url) - XCTAssertEqual(keychain.protocolType, ProtocolType.https) - XCTAssertEqual(keychain.authenticationType, AuthenticationType.htmlForm) - } - do { - let keychain = Keychain(server: url, protocolType: .https, authenticationType: .htmlForm) - XCTAssertEqual(keychain.server, url) - XCTAssertEqual(keychain.protocolType, ProtocolType.https) - XCTAssertEqual(keychain.authenticationType, AuthenticationType.htmlForm) - } - } - - // MARK: - - func testContains() { - let keychain = Keychain(service: "Twitter") - - XCTAssertFalse(try! keychain.contains("username"), "not stored username") - XCTAssertFalse(try! keychain.contains("password"), "not stored password") - - do { try keychain.set("kishikawakatsumi", key: "username") } catch {} - XCTAssertTrue(try! keychain.contains("username"), "stored username") - XCTAssertFalse(try! keychain.contains("password"), "not stored password") - - do { try keychain.set("password1234", key: "password") } catch {} - XCTAssertTrue(try! keychain.contains("username"), "stored username") - XCTAssertTrue(try! keychain.contains("password"), "stored password") - } - - // MARK: - - func testSetString() { - let keychain = Keychain(service: "Twitter") - - XCTAssertNil(try! keychain.get("username"), "not stored username") - XCTAssertNil(try! keychain.get("password"), "not stored password") - - do { try keychain.set("kishikawakatsumi", key: "username") } catch {} - XCTAssertEqual(try! keychain.get("username"), "kishikawakatsumi", "stored username") - XCTAssertNil(try! keychain.get("password"), "not stored password") - - do { try keychain.set("password1234", key: "password") } catch {} - XCTAssertEqual(try! keychain.get("username"), "kishikawakatsumi", "stored username") - XCTAssertEqual(try! keychain.get("password"), "password1234", "stored password") - } - - func testSetStringWithLabel() { - let keychain = Keychain(service: "Twitter") - .label("Twitter Account") - - XCTAssertNil(keychain["kishikawakatsumi"], "not stored password") - - do { - let label = try keychain.get("kishikawakatsumi") { (attributes) -> String? in - return attributes?.label - } - XCTAssertNil(label) - } catch { - XCTFail("error occurred") - } - - keychain["kishikawakatsumi"] = "password1234" - XCTAssertEqual(keychain["kishikawakatsumi"], "password1234", "stored password") - - do { - let label = try keychain.get("kishikawakatsumi") { (attributes) -> String? in - return attributes?.label - } - XCTAssertEqual(label, "Twitter Account") - } catch { - XCTFail("error occurred") - } - } - - func testSetStringWithComment() { - let keychain = Keychain(service: "Twitter") - .comment("Kishikawa Katsumi") - - XCTAssertNil(keychain["kishikawakatsumi"], "not stored password") - - do { - let comment = try keychain.get("kishikawakatsumi") { (attributes) -> String? in - return attributes?.comment - } - XCTAssertNil(comment) - } catch { - XCTFail("error occurred") - } - - keychain["kishikawakatsumi"] = "password1234" - XCTAssertEqual(keychain["kishikawakatsumi"], "password1234", "stored password") - - do { - let comment = try keychain.get("kishikawakatsumi") { (attributes) -> String? in - return attributes?.comment - } - XCTAssertEqual(comment, "Kishikawa Katsumi") - } catch { - XCTFail("error occurred") - } - } - - func testSetStringWithLabelAndComment() { - let keychain = Keychain(service: "Twitter") - .label("Twitter Account") - .comment("Kishikawa Katsumi") - - XCTAssertNil(keychain["kishikawakatsumi"], "not stored password") - - do { - let label = try keychain.get("kishikawakatsumi") { (attributes) -> String? in - return attributes?.label - } - XCTAssertNil(label) - - let comment = try keychain.get("kishikawakatsumi") { (attributes) -> String? in - return attributes?.comment - } - XCTAssertNil(comment) - } catch { - XCTFail("error occurred") - } - - keychain["kishikawakatsumi"] = "password1234" - XCTAssertEqual(keychain["kishikawakatsumi"], "password1234", "stored password") - - do { - let label = try keychain.get("kishikawakatsumi") { (attributes) -> String? in - return attributes?.label - } - XCTAssertEqual(label, "Twitter Account") - - let comment = try keychain.get("kishikawakatsumi") { (attributes) -> String? in - return attributes?.comment - } - XCTAssertEqual(comment, "Kishikawa Katsumi") - } catch { - XCTFail("error occurred") - } - } - - func testSetData() { - let JSONObject = ["username": "kishikawakatsumi", "password": "password1234"] - let JSONData = try! JSONSerialization.data(withJSONObject: JSONObject, options: []) - - let keychain = Keychain(service: "Twitter") - - XCTAssertNil(try! keychain.getData("JSONData"), "not stored JSON data") - - do { try keychain.set(JSONData, key: "JSONData") } catch {} - XCTAssertEqual(try! keychain.getData("JSONData"), JSONData, "stored JSON data") - } - - func testStringConversionError() { - let keychain = Keychain(service: "Twitter") - - let length = 256 - let data = NSMutableData(length: length)! - let bytes = data.mutableBytes.bindMemory(to: UInt8.self, capacity: length) - _ = SecRandomCopyBytes(kSecRandomDefault, length, bytes) - - do { - try keychain.set(data as Data, key: "RandomData") - let _ = try keychain.getString("RandomData") - XCTFail("no error occurred") - } catch let error as NSError { - XCTAssertEqual(error.domain, KeychainAccessErrorDomain) - XCTAssertEqual(error.code, Int(Status.conversionError.rawValue)) - XCTAssertEqual(error.userInfo[NSLocalizedDescriptionKey] as! String, Status.conversionError.localizedDescription) - } catch { - XCTFail("unexpected error occurred") - } - - do { - try keychain.set(data as Data, key: "RandomData") - let _ = try keychain.getString("RandomData") - XCTFail("no error occurred") - } catch Status.conversionError { - XCTAssertTrue(true) - } catch { - XCTFail("unexpected error occurred") - } - } - - func testGetPersistentRef() { - let keychain = Keychain(service: "Twitter") - - XCTAssertNil(keychain["kishikawakatsumi"], "not stored password") - - do { - let persistentRef = try keychain.get("kishikawakatsumi") { $0?.persistentRef } - XCTAssertNil(persistentRef) - } catch { - XCTFail("error occurred") - } - - keychain["kishikawakatsumi"] = "password1234" - XCTAssertEqual(keychain["kishikawakatsumi"], "password1234", "stored password") - - do { - let persistentRef = try keychain.get("kishikawakatsumi") { $0?.persistentRef } - XCTAssertNotNil(persistentRef) - } catch { - XCTFail("error occurred") - } - } - - #if os(iOS) || os(tvOS) - func testSetAttributes() { - let expectation = self.expectation(description: "Touch ID authentication") - - DispatchQueue.global(qos: .default).async { - do { - var attributes = [String: Any]() - attributes[String(kSecAttrDescription)] = "Description Test" - attributes[String(kSecAttrComment)] = "Comment Test" - attributes[String(kSecAttrCreator)] = "Creator Test" - attributes[String(kSecAttrType)] = "Type Test" - attributes[String(kSecAttrLabel)] = "Label Test" - attributes[String(kSecAttrIsInvisible)] = true - attributes[String(kSecAttrIsNegative)] = true - - let keychain = Keychain(service: "Twitter") - .attributes(attributes) - .accessibility(.whenPasscodeSetThisDeviceOnly, authenticationPolicy: .userPresence) - - XCTAssertNil(keychain["kishikawakatsumi"], "not stored password") - - do { - let attributes = try keychain.get("kishikawakatsumi") { $0 } - XCTAssertNil(attributes) - } catch { - XCTFail("error occurred") - } - - keychain["kishikawakatsumi"] = "password1234" - XCTAssertEqual(keychain["kishikawakatsumi"], "password1234", "stored password") - - do { - let attributes = try keychain.get("kishikawakatsumi") { $0 } - XCTAssertEqual(attributes?.`class`, ItemClass.genericPassword.rawValue) - XCTAssertEqual(attributes?.data, "password1234".data(using: .utf8)) - XCTAssertNil(attributes?.ref) - XCTAssertNotNil(attributes?.persistentRef) - XCTAssertEqual(attributes?.accessible, Accessibility.whenPasscodeSetThisDeviceOnly.rawValue) - XCTAssertNotNil(attributes?.accessControl) - XCTAssertEqual(attributes?.accessGroup, "27AEDK3C9F.com.kishikawakatsumi.KeychainAccess.TestHost") - XCTAssertNotNil(attributes?.synchronizable) - XCTAssertNotNil(attributes?.creationDate) - XCTAssertNotNil(attributes?.modificationDate) - XCTAssertEqual(attributes?.attributeDescription, "Description Test") - XCTAssertEqual(attributes?.comment, "Comment Test") - XCTAssertEqual(attributes?.creator, "Creator Test") - XCTAssertEqual(attributes?.type, "Type Test") - XCTAssertEqual(attributes?.label, "Label Test") - XCTAssertEqual(attributes?.isInvisible, true) - XCTAssertEqual(attributes?.isNegative, true) - XCTAssertEqual(attributes?.account, "kishikawakatsumi") - XCTAssertEqual(attributes?.service, "Twitter") - XCTAssertNil(attributes?.generic) - XCTAssertNil(attributes?.securityDomain) - XCTAssertNil(attributes?.server) - XCTAssertNil(attributes?.`protocol`) - XCTAssertNil(attributes?.authenticationType) - XCTAssertNil(attributes?.port) - XCTAssertNil(attributes?.path) - - XCTAssertEqual(attributes![String(kSecClass)] as? String, ItemClass.genericPassword.rawValue) - XCTAssertEqual(attributes![String(kSecValueData)] as? Data, "password1234".data(using: .utf8)) - - expectation.fulfill() - } catch { - XCTFail("error occurred") - } - } - } - waitForExpectations(timeout: 10.0, handler: nil) - - do { - var attributes = [String: Any]() - attributes[String(kSecAttrDescription)] = "Description Test" - attributes[String(kSecAttrComment)] = "Comment Test" - attributes[String(kSecAttrCreator)] = "Creator Test" - attributes[String(kSecAttrType)] = "Type Test" - attributes[String(kSecAttrLabel)] = "Label Test" - attributes[String(kSecAttrIsInvisible)] = true - attributes[String(kSecAttrIsNegative)] = true - attributes[String(kSecAttrSecurityDomain)] = "securitydomain" - - let keychain = Keychain(server: URL(string: "https://example.com:443/api/login/")!, protocolType: .https) - .attributes(attributes) - - XCTAssertNil(keychain["kishikawakatsumi"], "not stored password") - - do { - let attributes = try keychain.get("kishikawakatsumi") { $0 } - XCTAssertNil(attributes) - } catch { - XCTFail("error occurred") - } - - do { - keychain["kishikawakatsumi"] = "password1234" - XCTAssertEqual(keychain["kishikawakatsumi"], "password1234", "stored password") - - let attributes = try keychain.get("kishikawakatsumi") { $0 } - XCTAssertEqual(attributes?.`class`, ItemClass.internetPassword.rawValue) - XCTAssertEqual(attributes?.data, "password1234".data(using: .utf8)) - XCTAssertNil(attributes?.ref) - XCTAssertNotNil(attributes?.persistentRef) - XCTAssertEqual(attributes?.accessible, Accessibility.afterFirstUnlock.rawValue) - if #available(iOS 9.0, *) { - XCTAssertNil(attributes?.accessControl) - } else { - XCTAssertNotNil(attributes?.accessControl) - } - XCTAssertEqual(attributes?.accessGroup, "27AEDK3C9F.com.kishikawakatsumi.KeychainAccess.TestHost") - XCTAssertNotNil(attributes?.synchronizable) - XCTAssertNotNil(attributes?.creationDate) - XCTAssertNotNil(attributes?.modificationDate) - XCTAssertEqual(attributes?.attributeDescription, "Description Test") - XCTAssertEqual(attributes?.comment, "Comment Test") - XCTAssertEqual(attributes?.creator, "Creator Test") - XCTAssertEqual(attributes?.type, "Type Test") - XCTAssertEqual(attributes?.label, "Label Test") - XCTAssertEqual(attributes?.isInvisible, true) - XCTAssertEqual(attributes?.isNegative, true) - XCTAssertEqual(attributes?.account, "kishikawakatsumi") - XCTAssertNil(attributes?.service) - XCTAssertNil(attributes?.generic) - XCTAssertEqual(attributes?.securityDomain, "securitydomain") - XCTAssertEqual(attributes?.server, "example.com") - XCTAssertEqual(attributes?.`protocol`, ProtocolType.https.rawValue) - XCTAssertEqual(attributes?.authenticationType, AuthenticationType.default.rawValue) - XCTAssertEqual(attributes?.port, 443) - XCTAssertEqual(attributes?.path, "") - } catch { - XCTFail("error occurred") - } - do { - let keychain = Keychain(server: URL(string: "https://example.com:443/api/login/")!, protocolType: .https) - - XCTAssertEqual(keychain["kishikawakatsumi"], "password1234", "stored password") - - keychain["kishikawakatsumi"] = "1234password" - XCTAssertEqual(keychain["kishikawakatsumi"], "1234password", "updated password") - - let attributes = try keychain.get("kishikawakatsumi") { $0 } - XCTAssertEqual(attributes?.`class`, ItemClass.internetPassword.rawValue) - XCTAssertEqual(attributes?.data, "1234password".data(using: .utf8)) - XCTAssertNil(attributes?.ref) - XCTAssertNotNil(attributes?.persistentRef) - XCTAssertEqual(attributes?.accessible, Accessibility.afterFirstUnlock.rawValue) - if #available(iOS 9.0, *) { - XCTAssertNil(attributes?.accessControl) - } else { - XCTAssertNotNil(attributes?.accessControl) - } - XCTAssertEqual(attributes?.accessGroup, "27AEDK3C9F.com.kishikawakatsumi.KeychainAccess.TestHost") - XCTAssertNotNil(attributes?.synchronizable) - XCTAssertNotNil(attributes?.creationDate) - XCTAssertNotNil(attributes?.modificationDate) - XCTAssertEqual(attributes?.attributeDescription, "Description Test") - XCTAssertEqual(attributes?.comment, "Comment Test") - XCTAssertEqual(attributes?.creator, "Creator Test") - XCTAssertEqual(attributes?.type, "Type Test") - XCTAssertEqual(attributes?.label, "Label Test") - XCTAssertEqual(attributes?.isInvisible, true) - XCTAssertEqual(attributes?.isNegative, true) - XCTAssertEqual(attributes?.account, "kishikawakatsumi") - XCTAssertNil(attributes?.service) - XCTAssertNil(attributes?.generic) - XCTAssertEqual(attributes?.securityDomain, "securitydomain") - XCTAssertEqual(attributes?.server, "example.com") - XCTAssertEqual(attributes?.`protocol`, ProtocolType.https.rawValue) - XCTAssertEqual(attributes?.authenticationType, AuthenticationType.default.rawValue) - XCTAssertEqual(attributes?.port, 443) - XCTAssertEqual(attributes?.path, "") - } catch { - XCTFail("error occurred") - } - do { - let keychain = Keychain(server: URL(string: "https://example.com:443/api/login/")!, protocolType: .https) - .attributes([String(kSecAttrDescription): "Updated Description"]) - - XCTAssertEqual(keychain["kishikawakatsumi"], "1234password", "stored password") - - keychain["kishikawakatsumi"] = "password1234" - XCTAssertEqual(keychain["kishikawakatsumi"], "password1234", "updated password") - - let attributes = keychain[attributes: "kishikawakatsumi"] - XCTAssertEqual(attributes?.`class`, ItemClass.internetPassword.rawValue) - XCTAssertEqual(attributes?.data, "password1234".data(using: .utf8)) - XCTAssertNil(attributes?.ref) - XCTAssertNotNil(attributes?.persistentRef) - XCTAssertEqual(attributes?.accessible, Accessibility.afterFirstUnlock.rawValue) - if #available(iOS 9.0, *) { - XCTAssertNil(attributes?.accessControl) - } else { - XCTAssertNotNil(attributes?.accessControl) - } - XCTAssertEqual(attributes?.accessGroup, "27AEDK3C9F.com.kishikawakatsumi.KeychainAccess.TestHost") - XCTAssertNotNil(attributes?.synchronizable) - XCTAssertNotNil(attributes?.creationDate) - XCTAssertNotNil(attributes?.modificationDate) - XCTAssertEqual(attributes?.attributeDescription, "Updated Description") - XCTAssertEqual(attributes?.comment, "Comment Test") - XCTAssertEqual(attributes?.creator, "Creator Test") - XCTAssertEqual(attributes?.type, "Type Test") - XCTAssertEqual(attributes?.label, "Label Test") - XCTAssertEqual(attributes?.isInvisible, true) - XCTAssertEqual(attributes?.isNegative, true) - XCTAssertEqual(attributes?.account, "kishikawakatsumi") - XCTAssertNil(attributes?.service) - XCTAssertNil(attributes?.generic) - XCTAssertEqual(attributes?.securityDomain, "securitydomain") - XCTAssertEqual(attributes?.server, "example.com") - XCTAssertEqual(attributes?.`protocol`, ProtocolType.https.rawValue) - XCTAssertEqual(attributes?.authenticationType, AuthenticationType.default.rawValue) - XCTAssertEqual(attributes?.port, 443) - XCTAssertEqual(attributes?.path, "") - } - } - } - #endif - - func testRemoveString() { - let keychain = Keychain(service: "Twitter") - - XCTAssertNil(try! keychain.get("username"), "not stored username") - XCTAssertNil(try! keychain.get("password"), "not stored password") - - do { try keychain.set("kishikawakatsumi", key: "username") } catch {} - XCTAssertEqual(try! keychain.get("username"), "kishikawakatsumi", "stored username") - - do { try keychain.set("password1234", key: "password") } catch {} - XCTAssertEqual(try! keychain.get("password"), "password1234", "stored password") - - do { try keychain.remove("username") } catch {} - XCTAssertNil(try! keychain.get("username"), "removed username") - XCTAssertEqual(try! keychain.get("password"), "password1234", "left password") - - do { try keychain.remove("password") } catch {} - XCTAssertNil(try! keychain.get("username"), "removed username") - XCTAssertNil(try! keychain.get("password"), "removed password") - } - - func testRemoveData() { - let JSONObject = ["username": "kishikawakatsumi", "password": "password1234"] - let JSONData = try! JSONSerialization.data(withJSONObject: JSONObject, options: []) - - let keychain = Keychain(service: "Twitter") - - XCTAssertNil(try! keychain.getData("JSONData"), "not stored JSON data") - - do { try keychain.set(JSONData, key: "JSONData") } catch {} - XCTAssertEqual(try! keychain.getData("JSONData"), JSONData, "stored JSON data") - - do { try keychain.remove("JSONData") } catch {} - XCTAssertNil(try! keychain.getData("JSONData"), "removed JSON data") - } - - // MARK: - - func testSubscripting() { - let keychain = Keychain(service: "Twitter") - - XCTAssertNil(keychain["username"], "not stored username") - XCTAssertNil(keychain["password"], "not stored password") - XCTAssertNil(keychain[string: "username"], "not stored username") - XCTAssertNil(keychain[string: "password"], "not stored password") - - keychain["username"] = "kishikawakatsumi" - XCTAssertEqual(keychain["username"], "kishikawakatsumi", "stored username") - XCTAssertEqual(keychain[string: "username"], "kishikawakatsumi", "stored username") - - keychain["password"] = "password1234" - XCTAssertEqual(keychain["password"], "password1234", "stored password") - XCTAssertEqual(keychain[string: "password"], "password1234", "stored password") - - keychain[string: "username"] = nil - XCTAssertNil(keychain["username"], "removed username") - XCTAssertEqual(keychain["password"], "password1234", "left password") - XCTAssertNil(keychain[string: "username"], "removed username") - XCTAssertEqual(keychain[string: "password"], "password1234", "left password") - - keychain[string: "password"] = nil - XCTAssertNil(keychain["username"], "removed username") - XCTAssertNil(keychain["password"], "removed password") - XCTAssertNil(keychain[string: "username"], "removed username") - XCTAssertNil(keychain[string: "password"], "removed password") - - let JSONObject = ["username": "kishikawakatsumi", "password": "password1234"] - let JSONData = try! JSONSerialization.data(withJSONObject: JSONObject, options: []) - - XCTAssertNil(keychain[data:"JSONData"], "not stored JSON data") - - keychain[data: "JSONData"] = JSONData - XCTAssertEqual(keychain[data: "JSONData"], JSONData, "stored JSON data") - - keychain[data: "JSONData"] = nil - XCTAssertNil(keychain[data:"JSONData"], "removed JSON data") - } - - // MARK: - - func testErrorHandling() { - do { - let keychain = Keychain(service: "Twitter", accessGroup: "27AEDK3C9F.shared") - try keychain.removeAll() - XCTAssertTrue(true, "no error occurred") - } catch { - XCTFail("error occurred") - } - - do { - let keychain = Keychain(service: "Twitter") - try keychain.removeAll() - XCTAssertTrue(true, "no error occurred") - } catch { - XCTFail("error occurred") - } - - do { - let keychain = Keychain(server: URL(string: "https://kishikawakatsumi.com")!, protocolType: .https) - try keychain.removeAll() - XCTAssertTrue(true, "no error occurred") - } catch { - XCTFail("error occurred") - } - - do { - let keychain = Keychain() - try keychain.removeAll() - XCTAssertTrue(true, "no error occurred") - } catch { - XCTFail("error occurred") - } - - do { - // Add Keychain items - let keychain = Keychain(service: "Twitter") - - do { - try keychain.set("kishikawa_katsumi", key: "username") - XCTAssertTrue(true, "no error occurred") - } catch { - XCTFail("error occurred") - } - do { - try keychain.set("password_1234", key: "password") - XCTAssertTrue(true, "no error occurred") - } catch { - XCTFail("error occurred") - } - - do { - let username = try keychain.get("username") - XCTAssertEqual(username, "kishikawa_katsumi") - } catch { - XCTFail("error occurred") - } - do { - let password = try keychain.get("password") - XCTAssertEqual(password, "password_1234") - } catch { - XCTFail("error occurred") - } - } - - do { - // Update Keychain items - let keychain = Keychain(service: "Twitter") - - do { - try keychain.set("katsumi_kishikawa", key: "username") - XCTAssertTrue(true, "no error occurred") - } catch { - XCTFail("error occurred") - } - do { - try keychain.set("1234_password", key: "password") - XCTAssertTrue(true, "no error occurred") - } catch { - XCTFail("error occurred") - } - - do { - let username = try keychain.get("username") - XCTAssertEqual(username, "katsumi_kishikawa") - } catch { - XCTFail("error occurred") - } - do { - let password = try keychain.get("password") - XCTAssertEqual(password, "1234_password") - } catch { - XCTFail("error occurred") - } - } - - do { - // Remove Keychain items - let keychain = Keychain(service: "Twitter") - - do { - try keychain.remove("username") - XCTAssertNil(try! keychain.get("username")) - } catch { - XCTFail("error occurred") - } - do { - try keychain.remove("password") - XCTAssertNil(try! keychain.get("username")) - } catch { - XCTFail("error occurred") - } - } - } - - // MARK: - - func testSetStringWithCustomService() { - let username_1 = "kishikawakatsumi" - let password_1 = "password1234" - let username_2 = "kishikawa_katsumi" - let password_2 = "password_1234" - let username_3 = "k_katsumi" - let password_3 = "12341234" - - let service_1 = "" - let service_2 = "com.kishikawakatsumi.KeychainAccess" - let service_3 = "example.com" - - do { try Keychain().removeAll() } catch {} - do { try Keychain(service: service_1).removeAll() } catch {} - do { try Keychain(service: service_2).removeAll() } catch {} - do { try Keychain(service: service_3).removeAll() } catch {} - - XCTAssertNil(try! Keychain().get("username"), "not stored username") - XCTAssertNil(try! Keychain().get("password"), "not stored password") - XCTAssertNil(try! Keychain(service: service_1).get("username"), "not stored username") - XCTAssertNil(try! Keychain(service: service_1).get("password"), "not stored password") - XCTAssertNil(try! Keychain(service: service_2).get("username"), "not stored username") - XCTAssertNil(try! Keychain(service: service_2).get("password"), "not stored password") - XCTAssertNil(try! Keychain(service: service_3).get("username"), "not stored username") - XCTAssertNil(try! Keychain(service: service_3).get("password"), "not stored password") - - do { try Keychain().set(username_1, key: "username") } catch {} - XCTAssertEqual(try! Keychain().get("username"), username_1, "stored username") - XCTAssertNil(try! Keychain(service: service_1).get("password"), "not stored password") - XCTAssertNil(try! Keychain(service: service_2).get("username"), "not stored username") - XCTAssertNil(try! Keychain(service: service_3).get("username"), "not stored username") - - do { try Keychain(service: service_1).set(username_1, key: "username") } catch {} - XCTAssertEqual(try! Keychain().get("username"), username_1, "stored username") - XCTAssertEqual(try! Keychain(service: service_1).get("username"), username_1, "stored username") - XCTAssertNil(try! Keychain(service: service_2).get("username"), "not stored username") - XCTAssertNil(try! Keychain(service: service_3).get("username"), "not stored username") - - do { try Keychain(service: service_2).set(username_2, key: "username") } catch {} - XCTAssertEqual(try! Keychain().get("username"), username_1, "stored username") - XCTAssertEqual(try! Keychain(service: service_1).get("username"), username_1, "stored username") - XCTAssertEqual(try! Keychain(service: service_2).get("username"), username_2, "stored username") - XCTAssertNil(try! Keychain(service: service_3).get("username"), "not stored username") - - do { try Keychain(service: service_3).set(username_3, key: "username") } catch {} - XCTAssertEqual(try! Keychain().get("username"), username_1, "stored username") - XCTAssertEqual(try! Keychain(service: service_1).get("username"), username_1, "stored username") - XCTAssertEqual(try! Keychain(service: service_2).get("username"), username_2, "stored username") - XCTAssertEqual(try! Keychain(service: service_3).get("username"), username_3, "stored username") - - do { try Keychain().set(password_1, key: "password") } catch {} - XCTAssertEqual(try! Keychain().get("password"), password_1, "stored password") - XCTAssertNil(try! Keychain(service: service_1).get("password"), "not stored password") - XCTAssertNil(try! Keychain(service: service_2).get("password"), "not stored password") - XCTAssertNil(try! Keychain(service: service_3).get("password"), "not stored password") - - do { try Keychain(service: service_1).set(password_1, key: "password") } catch {} - XCTAssertEqual(try! Keychain().get("password"), password_1, "stored password") - XCTAssertEqual(try! Keychain(service: service_1).get("password"), password_1, "stored password") - XCTAssertNil(try! Keychain(service: service_2).get("password"), "not stored password") - XCTAssertNil(try! Keychain(service: service_3).get("password"), "not stored password") - - do { try Keychain(service: service_2).set(password_2, key: "password") } catch {} - XCTAssertEqual(try! Keychain().get("password"), password_1, "stored password") - XCTAssertEqual(try! Keychain(service: service_1).get("password"), password_1, "stored password") - XCTAssertEqual(try! Keychain(service: service_2).get("password"), password_2, "stored password") - XCTAssertNil(try! Keychain(service: service_3).get("password"), "not stored password") - - do { try Keychain(service: service_3).set(password_3, key: "password") } catch {} - XCTAssertEqual(try! Keychain().get("password"), password_1, "stored password") - XCTAssertEqual(try! Keychain(service: service_1).get("password"), password_1, "stored password") - XCTAssertEqual(try! Keychain(service: service_2).get("password"), password_2, "stored password") - XCTAssertEqual(try! Keychain(service: service_3).get("password"), password_3, "stored password") - - do { try Keychain().remove("username") } catch {} - XCTAssertNil(try! Keychain().get("username"), "removed username") - XCTAssertEqual(try! Keychain(service: service_1).get("username"), username_1, "left username") - XCTAssertEqual(try! Keychain(service: service_2).get("username"), username_2, "left username") - XCTAssertEqual(try! Keychain(service: service_3).get("username"), username_3, "left username") - - do { try Keychain(service: service_1).remove("username") } catch {} - XCTAssertNil(try! Keychain().get("username"), "removed username") - XCTAssertNil(try! Keychain(service: service_1).get("username"), "removed username") - XCTAssertEqual(try! Keychain(service: service_2).get("username"), username_2, "left username") - XCTAssertEqual(try! Keychain(service: service_3).get("username"), username_3, "left username") - - do { try Keychain(service: service_2).remove("username") } catch {} - XCTAssertNil(try! Keychain().get("username"), "removed username") - XCTAssertNil(try! Keychain(service: service_1).get("username"), "removed username") - XCTAssertNil(try! Keychain(service: service_2).get("username"), "removed username") - XCTAssertEqual(try! Keychain(service: service_3).get("username"), username_3, "left username") - - do { try Keychain(service: service_3).remove("username") } catch {} - XCTAssertNil(try! Keychain().get("username"), "removed username") - XCTAssertNil(try! Keychain(service: service_1).get("username"), "removed username") - XCTAssertNil(try! Keychain(service: service_2).get("username"), "removed username") - XCTAssertNil(try! Keychain(service: service_3).get("username"), "removed username") - - do { try Keychain().remove("password") } catch {} - XCTAssertNil(try! Keychain().get("password"), "removed password") - XCTAssertEqual(try! Keychain(service: service_1).get("password"), password_1, "left password") - XCTAssertEqual(try! Keychain(service: service_2).get("password"), password_2, "left password") - XCTAssertEqual(try! Keychain(service: service_3).get("password"), password_3, "left password") - - do { try Keychain(service: service_1).remove("password") } catch {} - XCTAssertNil(try! Keychain().get("password"), "removed password") - XCTAssertNil(try! Keychain(service: service_1).get("password"), "removed password") - XCTAssertEqual(try! Keychain(service: service_2).get("password"), password_2, "left password") - XCTAssertEqual(try! Keychain(service: service_3).get("password"), password_3, "left password") - - do { try Keychain(service: service_2).remove("password") } catch {} - XCTAssertNil(try! Keychain().get("password"), "removed password") - XCTAssertNil(try! Keychain(service: service_1).get("password"), "removed password") - XCTAssertNil(try! Keychain(service: service_2).get("password"), "removed password") - XCTAssertEqual(try! Keychain(service: service_3).get("password"), password_3, "left password") - - do { try Keychain(service: service_3).remove("password") } catch {} - XCTAssertNil(try! Keychain().get("password"), "removed password") - XCTAssertNil(try! Keychain(service: service_2).get("password"), "removed password") - XCTAssertNil(try! Keychain(service: service_2).get("password"), "removed password") - XCTAssertNil(try! Keychain(service: service_2).get("password"), "removed password") - } - - // MARK: - - func testProperties() { - guard #available(OSX 10.10, *) else { - return - } - - let keychain = Keychain() - - XCTAssertEqual(keychain.synchronizable, false) - XCTAssertEqual(keychain.synchronizable(true).synchronizable, true) - XCTAssertEqual(keychain.synchronizable(false).synchronizable, false) - XCTAssertEqual(keychain.accessibility(.afterFirstUnlock).accessibility, Accessibility.afterFirstUnlock) - XCTAssertEqual(keychain.accessibility(.whenPasscodeSetThisDeviceOnly, authenticationPolicy: .userPresence).accessibility, Accessibility.whenPasscodeSetThisDeviceOnly) - XCTAssertEqual(keychain.accessibility(.whenPasscodeSetThisDeviceOnly, authenticationPolicy: .userPresence).authenticationPolicy, AuthenticationPolicy.userPresence) - XCTAssertNil(keychain.label) - XCTAssertEqual(keychain.label("Label").label, "Label") - XCTAssertNil(keychain.comment) - XCTAssertEqual(keychain.comment("Comment").comment, "Comment") - XCTAssertEqual(keychain.authenticationPrompt("Prompt").authenticationPrompt, "Prompt") - } - - // MARK: - - func testAllKeys() { - do { - let keychain = Keychain() - keychain["key1"] = "value1" - keychain["key2"] = "value2" - keychain["key3"] = "value3" - - let allKeys = keychain.allKeys() - XCTAssertEqual(allKeys.count, 3) - XCTAssertEqual(allKeys.sorted(), ["key1", "key2", "key3"]) - - let allItems = keychain.allItems() - XCTAssertEqual(allItems.count, 3) - - let sortedItems = allItems.sorted { (item1, item2) -> Bool in - let key1 = item1["key"] as! String - let key2 = item2["key"] as! String - return key1.compare(key2) == .orderedAscending || key1.compare(key2) == .orderedSame - } - - #if !os(OSX) - XCTAssertEqual(sortedItems[0]["accessGroup"] as? String, "27AEDK3C9F.com.kishikawakatsumi.KeychainAccess.TestHost") - XCTAssertEqual(sortedItems[0]["synchronizable"] as? String, "false") - XCTAssertEqual(sortedItems[0]["service"] as? String, "com.kishikawakatsumi.KeychainAccess.TestHost") - XCTAssertEqual(sortedItems[0]["value"] as? String, "value1") - XCTAssertEqual(sortedItems[0]["key"] as? String, "key1") - XCTAssertEqual(sortedItems[0]["class"] as? String, "GenericPassword") - XCTAssertEqual(sortedItems[0]["accessibility"] as? String, "AfterFirstUnlock") - - XCTAssertEqual(sortedItems[1]["accessGroup"] as? String, "27AEDK3C9F.com.kishikawakatsumi.KeychainAccess.TestHost") - XCTAssertEqual(sortedItems[1]["synchronizable"] as? String, "false") - XCTAssertEqual(sortedItems[1]["service"] as? String, "com.kishikawakatsumi.KeychainAccess.TestHost") - XCTAssertEqual(sortedItems[1]["value"] as? String, "value2") - XCTAssertEqual(sortedItems[1]["key"] as? String, "key2") - XCTAssertEqual(sortedItems[1]["class"] as? String, "GenericPassword") - XCTAssertEqual(sortedItems[1]["accessibility"] as? String, "AfterFirstUnlock") - - XCTAssertEqual(sortedItems[2]["accessGroup"] as? String, "27AEDK3C9F.com.kishikawakatsumi.KeychainAccess.TestHost") - XCTAssertEqual(sortedItems[2]["synchronizable"] as? String, "false") - XCTAssertEqual(sortedItems[2]["service"] as? String, "com.kishikawakatsumi.KeychainAccess.TestHost") - XCTAssertEqual(sortedItems[2]["value"] as? String, "value3") - XCTAssertEqual(sortedItems[2]["key"] as? String, "key3") - XCTAssertEqual(sortedItems[2]["class"] as? String, "GenericPassword") - XCTAssertEqual(sortedItems[2]["accessibility"] as? String, "AfterFirstUnlock") - #else - XCTAssertEqual(sortedItems[0]["service"] as? String, "com.kishikawakatsumi.KeychainAccess.TestHost") - XCTAssertEqual(sortedItems[0]["key"] as? String, "key1") - XCTAssertEqual(sortedItems[0]["class"] as? String, "GenericPassword") - - XCTAssertEqual(sortedItems[1]["service"] as? String, "com.kishikawakatsumi.KeychainAccess.TestHost") - XCTAssertEqual(sortedItems[1]["key"] as? String, "key2") - XCTAssertEqual(sortedItems[1]["class"] as? String, "GenericPassword") - - XCTAssertEqual(sortedItems[2]["service"] as? String, "com.kishikawakatsumi.KeychainAccess.TestHost") - XCTAssertEqual(sortedItems[2]["key"] as? String, "key3") - XCTAssertEqual(sortedItems[2]["class"] as? String, "GenericPassword") - #endif - } - do { - let keychain = Keychain(service: "service1") - try! keychain - .synchronizable(true) - .accessibility(.whenUnlockedThisDeviceOnly) - .set("service1_value1", key: "service1_key1") - - try! keychain - .synchronizable(false) - .accessibility(.afterFirstUnlockThisDeviceOnly) - .set("service1_value2", key: "service1_key2") - - let allKeys = keychain.allKeys() - XCTAssertEqual(allKeys.count, 2) - XCTAssertEqual(allKeys.sorted(), ["service1_key1", "service1_key2"]) - - let allItems = keychain.allItems() - XCTAssertEqual(allItems.count, 2) - - let sortedItems = allItems.sorted { (item1, item2) -> Bool in - let key1 = item1["key"] as! String - let key2 = item2["key"] as! String - return key1.compare(key2) == .orderedAscending || key1.compare(key2) == .orderedSame - } - - #if !os(OSX) - XCTAssertEqual(sortedItems[0]["accessGroup"] as? String, "27AEDK3C9F.com.kishikawakatsumi.KeychainAccess.TestHost") - XCTAssertEqual(sortedItems[0]["synchronizable"] as? String, "true") - XCTAssertEqual(sortedItems[0]["service"] as? String, "service1") - XCTAssertEqual(sortedItems[0]["value"] as? String, "service1_value1") - XCTAssertEqual(sortedItems[0]["key"] as? String, "service1_key1") - XCTAssertEqual(sortedItems[0]["class"] as? String, "GenericPassword") - XCTAssertEqual(sortedItems[0]["accessibility"] as? String, "WhenUnlockedThisDeviceOnly") - - XCTAssertEqual(sortedItems[1]["accessGroup"] as? String, "27AEDK3C9F.com.kishikawakatsumi.KeychainAccess.TestHost") - XCTAssertEqual(sortedItems[1]["synchronizable"] as? String, "false") - XCTAssertEqual(sortedItems[1]["service"] as? String, "service1") - XCTAssertEqual(sortedItems[1]["value"] as? String, "service1_value2") - XCTAssertEqual(sortedItems[1]["key"] as? String, "service1_key2") - XCTAssertEqual(sortedItems[1]["class"] as? String, "GenericPassword") - XCTAssertEqual(sortedItems[1]["accessibility"] as? String, "AfterFirstUnlockThisDeviceOnly") - #else - XCTAssertEqual(sortedItems[0]["service"] as? String, "service1") - XCTAssertEqual(sortedItems[0]["key"] as? String, "service1_key1") - XCTAssertEqual(sortedItems[0]["class"] as? String, "GenericPassword") - - XCTAssertEqual(sortedItems[1]["service"] as? String, "service1") - XCTAssertEqual(sortedItems[1]["key"] as? String, "service1_key2") - XCTAssertEqual(sortedItems[1]["class"] as? String, "GenericPassword") - #endif - } - do { - let keychain = Keychain(server: "https://google.com", protocolType: .https) - try! keychain - .synchronizable(false) - .accessibility(.alwaysThisDeviceOnly) - .set("google.com_value1", key: "google.com_key1") - - try! keychain - .synchronizable(true) - .accessibility(.always) - .set("google.com_value2", key: "google.com_key2") - - let allKeys = keychain.allKeys() - XCTAssertEqual(allKeys.count, 2) - XCTAssertEqual(allKeys.sorted(), ["google.com_key1", "google.com_key2"]) - - let allItems = keychain.allItems() - XCTAssertEqual(allItems.count, 2) - - let sortedItems = allItems.sorted { (item1, item2) -> Bool in - let key1 = item1["key"] as! String - let key2 = item2["key"] as! String - return key1.compare(key2) == .orderedAscending || key1.compare(key2) == .orderedSame - } - - #if !os(OSX) - XCTAssertEqual(sortedItems[0]["synchronizable"] as? String, "false") - XCTAssertEqual(sortedItems[0]["value"] as? String, "google.com_value1") - XCTAssertEqual(sortedItems[0]["key"] as? String, "google.com_key1") - XCTAssertEqual(sortedItems[0]["server"] as? String, "google.com") - XCTAssertEqual(sortedItems[0]["class"] as? String, "InternetPassword") - XCTAssertEqual(sortedItems[0]["authenticationType"] as? String, "Default") - XCTAssertEqual(sortedItems[0]["protocol"] as? String, "HTTPS") - XCTAssertEqual(sortedItems[0]["accessibility"] as? String, "AlwaysThisDeviceOnly") - - XCTAssertEqual(sortedItems[1]["synchronizable"] as? String, "true") - XCTAssertEqual(sortedItems[1]["value"] as? String, "google.com_value2") - XCTAssertEqual(sortedItems[1]["key"] as? String, "google.com_key2") - XCTAssertEqual(sortedItems[1]["server"] as? String, "google.com") - XCTAssertEqual(sortedItems[1]["class"] as? String, "InternetPassword") - XCTAssertEqual(sortedItems[1]["authenticationType"] as? String, "Default") - XCTAssertEqual(sortedItems[1]["protocol"] as? String, "HTTPS") - XCTAssertEqual(sortedItems[1]["accessibility"] as? String, "Always") - #else - XCTAssertEqual(sortedItems[0]["key"] as? String, "google.com_key1") - XCTAssertEqual(sortedItems[0]["server"] as? String, "google.com") - XCTAssertEqual(sortedItems[0]["class"] as? String, "InternetPassword") - XCTAssertEqual(sortedItems[0]["authenticationType"] as? String, "Default") - XCTAssertEqual(sortedItems[0]["protocol"] as? String, "HTTPS") - - XCTAssertEqual(sortedItems[1]["key"] as? String, "google.com_key2") - XCTAssertEqual(sortedItems[1]["server"] as? String, "google.com") - XCTAssertEqual(sortedItems[1]["class"] as? String, "InternetPassword") - XCTAssertEqual(sortedItems[1]["authenticationType"] as? String, "Default") - XCTAssertEqual(sortedItems[1]["protocol"] as? String, "HTTPS") - #endif - } - - #if !os(OSX) - do { - let allKeys = Keychain.allKeys(.genericPassword) - XCTAssertEqual(allKeys.count, 5) - - let sortedKeys = allKeys.sorted { (key1, key2) -> Bool in - return key1.1.compare(key2.1) == .orderedAscending || key1.1.compare(key2.1) == .orderedSame - } - XCTAssertEqual(sortedKeys[0].0, "com.kishikawakatsumi.KeychainAccess.TestHost") - XCTAssertEqual(sortedKeys[0].1, "key1") - XCTAssertEqual(sortedKeys[1].0, "com.kishikawakatsumi.KeychainAccess.TestHost") - XCTAssertEqual(sortedKeys[1].1, "key2") - XCTAssertEqual(sortedKeys[2].0, "com.kishikawakatsumi.KeychainAccess.TestHost") - XCTAssertEqual(sortedKeys[2].1, "key3") - XCTAssertEqual(sortedKeys[3].0, "service1") - XCTAssertEqual(sortedKeys[3].1, "service1_key1") - XCTAssertEqual(sortedKeys[4].0, "service1") - XCTAssertEqual(sortedKeys[4].1, "service1_key2") - } - do { - let allKeys = Keychain.allKeys(.internetPassword) - XCTAssertEqual(allKeys.count, 2) - - let sortedKeys = allKeys.sorted { (key1, key2) -> Bool in - return key1.1.compare(key2.1) == .orderedAscending || key1.1.compare(key2.1) == .orderedSame - } - XCTAssertEqual(sortedKeys[0].0, "google.com") - XCTAssertEqual(sortedKeys[0].1, "google.com_key1") - XCTAssertEqual(sortedKeys[1].0, "google.com") - XCTAssertEqual(sortedKeys[1].1, "google.com_key2") - } - #endif - } - - func testDescription() { - do { - let keychain = Keychain() - - XCTAssertEqual(keychain.description, "[]") - XCTAssertEqual(keychain.debugDescription, "[]") - } - } - - // MARK: - - func testAuthenticationPolicy() { - guard #available(iOS 9.0, OSX 10.11, *) else { - return - } - - do { - let accessibility: Accessibility = .whenPasscodeSetThisDeviceOnly - - let policy: AuthenticationPolicy = [.userPresence] - let flags = SecAccessControlCreateFlags(rawValue: policy.rawValue) - - var error: Unmanaged? - let accessControl = SecAccessControlCreateWithFlags(kCFAllocatorDefault, accessibility.rawValue as CFTypeRef, flags, &error) - - XCTAssertNil(error) - XCTAssertNotNil(accessControl) - } - #if os(iOS) - do { - let accessibility: Accessibility = .whenPasscodeSetThisDeviceOnly - - let policy: AuthenticationPolicy = [.userPresence, .applicationPassword] - let flags = SecAccessControlCreateFlags(rawValue: policy.rawValue) - - var error: Unmanaged? - let accessControl = SecAccessControlCreateWithFlags(kCFAllocatorDefault, accessibility.rawValue as CFTypeRef, flags, &error) - - XCTAssertNil(error) - XCTAssertNotNil(accessControl) - } - do { - let accessibility: Accessibility = .whenPasscodeSetThisDeviceOnly - - let policy: AuthenticationPolicy = [.userPresence, .applicationPassword, .privateKeyUsage] - let flags = SecAccessControlCreateFlags(rawValue: policy.rawValue) - - var error: Unmanaged? - let accessControl = SecAccessControlCreateWithFlags(kCFAllocatorDefault, accessibility.rawValue as CFTypeRef, flags, &error) - - XCTAssertNil(error) - XCTAssertNotNil(accessControl) - } - do { - let accessibility: Accessibility = .whenPasscodeSetThisDeviceOnly - - let policy: AuthenticationPolicy = [.applicationPassword] - let flags = SecAccessControlCreateFlags(rawValue: policy.rawValue) - - var error: Unmanaged? - let accessControl = SecAccessControlCreateWithFlags(kCFAllocatorDefault, accessibility.rawValue as CFTypeRef, flags, &error) - - XCTAssertNil(error) - XCTAssertNotNil(accessControl) - } - do { - let accessibility: Accessibility = .whenPasscodeSetThisDeviceOnly - - let policy: AuthenticationPolicy = [.applicationPassword, .privateKeyUsage] - let flags = SecAccessControlCreateFlags(rawValue: policy.rawValue) - - var error: Unmanaged? - let accessControl = SecAccessControlCreateWithFlags(kCFAllocatorDefault, accessibility.rawValue as CFTypeRef, flags, &error) - - XCTAssertNil(error) - XCTAssertNotNil(accessControl) - } - do { - let accessibility: Accessibility = .whenPasscodeSetThisDeviceOnly - - let policy: AuthenticationPolicy = [.privateKeyUsage] - let flags = SecAccessControlCreateFlags(rawValue: policy.rawValue) - - var error: Unmanaged? - let accessControl = SecAccessControlCreateWithFlags(kCFAllocatorDefault, accessibility.rawValue as CFTypeRef, flags, &error) - - XCTAssertNil(error) - XCTAssertNotNil(accessControl) - } - do { - let accessibility: Accessibility = .whenPasscodeSetThisDeviceOnly - - let policy: AuthenticationPolicy = [.touchIDAny] - let flags = SecAccessControlCreateFlags(rawValue: policy.rawValue) - - var error: Unmanaged? - let accessControl = SecAccessControlCreateWithFlags(kCFAllocatorDefault, accessibility.rawValue as CFTypeRef, flags, &error) - - XCTAssertNil(error) - XCTAssertNotNil(accessControl) - } - do { - let accessibility: Accessibility = .whenPasscodeSetThisDeviceOnly - - let policy: AuthenticationPolicy = [.touchIDAny, .devicePasscode] - let flags = SecAccessControlCreateFlags(rawValue: policy.rawValue) - - var error: Unmanaged? - let accessControl = SecAccessControlCreateWithFlags(kCFAllocatorDefault, accessibility.rawValue as CFTypeRef, flags, &error) - - XCTAssertNil(error) - XCTAssertNotNil(accessControl) - } - do { - let accessibility: Accessibility = .whenPasscodeSetThisDeviceOnly - - let policy: AuthenticationPolicy = [.touchIDAny, .applicationPassword] - let flags = SecAccessControlCreateFlags(rawValue: policy.rawValue) - - var error: Unmanaged? - let accessControl = SecAccessControlCreateWithFlags(kCFAllocatorDefault, accessibility.rawValue as CFTypeRef, flags, &error) - - XCTAssertNil(error) - XCTAssertNotNil(accessControl) - } - do { - let accessibility: Accessibility = .whenPasscodeSetThisDeviceOnly - - let policy: AuthenticationPolicy = [.touchIDAny, .applicationPassword, .privateKeyUsage] - let flags = SecAccessControlCreateFlags(rawValue: policy.rawValue) - - var error: Unmanaged? - let accessControl = SecAccessControlCreateWithFlags(kCFAllocatorDefault, accessibility.rawValue as CFTypeRef, flags, &error) - - XCTAssertNil(error) - XCTAssertNotNil(accessControl) - } - do { - let accessibility: Accessibility = .whenPasscodeSetThisDeviceOnly - - let policy: AuthenticationPolicy = [.touchIDCurrentSet] - let flags = SecAccessControlCreateFlags(rawValue: policy.rawValue) - - var error: Unmanaged? - let accessControl = SecAccessControlCreateWithFlags(kCFAllocatorDefault, accessibility.rawValue as CFTypeRef, flags, &error) - - XCTAssertNil(error) - XCTAssertNotNil(accessControl) - } - do { - let accessibility: Accessibility = .whenPasscodeSetThisDeviceOnly - - let policy: AuthenticationPolicy = [.touchIDCurrentSet, .devicePasscode] - let flags = SecAccessControlCreateFlags(rawValue: policy.rawValue) - - var error: Unmanaged? - let accessControl = SecAccessControlCreateWithFlags(kCFAllocatorDefault, accessibility.rawValue as CFTypeRef, flags, &error) - - XCTAssertNil(error) - XCTAssertNotNil(accessControl) - } - do { - let accessibility: Accessibility = .whenPasscodeSetThisDeviceOnly - - let policy: AuthenticationPolicy = [.touchIDCurrentSet, .applicationPassword] - let flags = SecAccessControlCreateFlags(rawValue: policy.rawValue) - - var error: Unmanaged? - let accessControl = SecAccessControlCreateWithFlags(kCFAllocatorDefault, accessibility.rawValue as CFTypeRef, flags, &error) - - XCTAssertNil(error) - XCTAssertNotNil(accessControl) - } - do { - let accessibility: Accessibility = .whenPasscodeSetThisDeviceOnly - - let policy: AuthenticationPolicy = [.touchIDCurrentSet, .applicationPassword, .privateKeyUsage] - let flags = SecAccessControlCreateFlags(rawValue: policy.rawValue) - - var error: Unmanaged? - let accessControl = SecAccessControlCreateWithFlags(kCFAllocatorDefault, accessibility.rawValue as CFTypeRef, flags, &error) - - XCTAssertNil(error) - XCTAssertNotNil(accessControl) - } - do { - let accessibility: Accessibility = .whenPasscodeSetThisDeviceOnly - - let policy: AuthenticationPolicy = [.touchIDAny, .or, .devicePasscode] - let flags = SecAccessControlCreateFlags(rawValue: policy.rawValue) - - var error: Unmanaged? - let accessControl = SecAccessControlCreateWithFlags(kCFAllocatorDefault, accessibility.rawValue as CFTypeRef, flags, &error) - - XCTAssertNil(error) - XCTAssertNotNil(accessControl) - } - do { - let accessibility: Accessibility = .whenPasscodeSetThisDeviceOnly - - let policy: AuthenticationPolicy = [.touchIDAny, .and, .devicePasscode] - let flags = SecAccessControlCreateFlags(rawValue: policy.rawValue) - - var error: Unmanaged? - let accessControl = SecAccessControlCreateWithFlags(kCFAllocatorDefault, accessibility.rawValue as CFTypeRef, flags, &error) - - XCTAssertNil(error) - XCTAssertNotNil(accessControl) - } - #endif - #if os(OSX) - do { - let accessibility: Accessibility = .whenPasscodeSetThisDeviceOnly - - let policy: AuthenticationPolicy = [.userPresence] - let flags = SecAccessControlCreateFlags(rawValue: policy.rawValue) - - var error: Unmanaged? - let accessControl = SecAccessControlCreateWithFlags(kCFAllocatorDefault, accessibility.rawValue as CFTypeRef, flags, &error) - - XCTAssertNil(error) - XCTAssertNotNil(accessControl) - } - do { - let accessibility: Accessibility = .whenPasscodeSetThisDeviceOnly - - let policy: AuthenticationPolicy = [.devicePasscode] - let flags = SecAccessControlCreateFlags(rawValue: policy.rawValue) - - var error: Unmanaged? - let accessControl = SecAccessControlCreateWithFlags(kCFAllocatorDefault, accessibility.rawValue as CFTypeRef, flags, &error) - - XCTAssertNil(error) - XCTAssertNotNil(accessControl) - } - #endif - } -} diff --git a/Carthage/Checkouts/KeychainAccess/Lib/KeychainAccessTests/SharedCredentialTests.swift b/Carthage/Checkouts/KeychainAccess/Lib/KeychainAccessTests/SharedCredentialTests.swift deleted file mode 100644 index 69a3b1d..0000000 --- a/Carthage/Checkouts/KeychainAccess/Lib/KeychainAccessTests/SharedCredentialTests.swift +++ /dev/null @@ -1,84 +0,0 @@ -// -// SharedCredentialTests.swift -// KeychainAccessTests -// -// Created by kishikawa katsumi on 10/12/15. -// Copyright © 2015 kishikawa katsumi. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -import XCTest -import KeychainAccess - -class SharedCredentialTests: XCTestCase { - - override func setUp() { - super.setUp() - } - - override func tearDown() { - super.tearDown() - } - - func testGetSharedPassword() { - do { - let expectation = self.expectation(description: "getSharedPassword") - - let keychain = Keychain(server: "https://kishikawakatsumi.com", protocolType: .https) - - keychain.getSharedPassword("kishikawakatsumi") { (password, error) -> () in - XCTAssertNil(password) - XCTAssertNotNil(error) - expectation.fulfill() - } - - waitForExpectations(timeout: 10.0, handler: nil) - } - do { - let expectation = self.expectation(description: "getSharedPassword") - - let keychain = Keychain(server: "https://kishikawakatsumi.com", protocolType: .https) - - keychain.getSharedPassword { (account, password, error) -> () in - XCTAssertNil(account) - XCTAssertNil(password) - XCTAssertNotNil(error) - expectation.fulfill() - } - - waitForExpectations(timeout: 10.0, handler: nil) - } - - } - - func testGeneratePassword() { - do { - var passwords = Set() - for _ in 0...100_000 { - let password = Keychain.generatePassword() - - XCTAssertEqual(password.characters.count, "xxx-xxx-xxx-xxx".characters.count) - XCTAssertFalse(passwords.contains(password)) - - passwords.insert(password) - } - } - } - -} diff --git a/Carthage/Checkouts/KeychainAccess/Lib/Rakefile b/Carthage/Checkouts/KeychainAccess/Lib/Rakefile deleted file mode 100644 index 94d918e..0000000 --- a/Carthage/Checkouts/KeychainAccess/Lib/Rakefile +++ /dev/null @@ -1,110 +0,0 @@ -require 'xcjobs' -require 'json' - -def destinations(platform: 'iphonesimulator') - if platform == 'iphonesimulator' - [ 'name=iPhone 5,OS=10.0', - 'name=iPhone 5s,OS=10.0', - 'name=iPhone 6,OS=10.0', - 'name=iPhone 6s Plus,OS=10.0', - 'name=iPhone SE,OS=10.0', - 'name=iPad Air 2,OS=10.0', - 'name=iPad Pro (9.7 inch),OS=10.0', - 'name=iPad Pro (12.9 inch),OS=10.0' - ] - elsif platform == 'watchsimulator' - [ 'name=Apple Watch - 38mm,OS=3.0', - 'name=Apple Watch - 42mm,OS=3.0' - ] - elsif platform == 'appletvsimulator' - [ 'name=Apple TV 1080p,OS=10.0' - ] - else - [] - end -end - -def supportedPlatforms - ['macosx', 'iphoneos', 'iphonesimulator', 'watchos', 'watchsimulator', 'appletvos', 'appletvsimulator'] -end - -def configurations - ['Debug', 'Release'] -end - -desc "build for all platforms" -task :build do |t| - supportedPlatforms - .product(configurations) - .map { |platform, configuration| Rake::Task["build:#{platform}:#{configuration.downcase}"] } - .map(&:invoke) -end - -namespace :build do - supportedPlatforms.product(configurations).each do |platform, configuration| - XCJobs::Build.new("#{platform}:#{configuration.downcase}") do |t| - t.project = 'KeychainAccess' - t.scheme = 'KeychainAccess' - t.sdk = platform - if platform == 'iphonesimulator' - t.add_destination('name=iPhone 6,OS=10.0') - elsif platform == 'watchsimulator' - t.add_destination('name=Apple Watch - 42mm,OS=3.0') - elsif platform == 'appletvsimulator' - t.add_destination('name=Apple TV 1080p,OS=10.0') - end - t.configuration = configuration - t.build_dir = 'build' - t.formatter = 'xcpretty -c' - if ENV['CI'] - t.add_build_setting('CODE_SIGN_IDENTITY', '') - t.add_build_setting('CODE_SIGNING_REQUIRED', 'NO') - end - end - end - - task :carthage do - sh %[echo 'github \"kishikawakatsumi/KeychainAccess\" \"#{branch_name}\"' > Cartfile] - sh %[carthage update --no-use-binaries] - end - - def branch_name - if ENV['CI'] - pull_req = %[https://api.github.com/repos/#{ENV['TRAVIS_REPO_SLUG']}/pulls/#{ENV['TRAVIS_PULL_REQUEST']}] - auth_token = 'kishikawakatsumi:209558699492df7782fbe62dda1891d6a6ba010f' - (ENV['TRAVIS_PULL_REQUEST'] == 'false' ? ENV['TRAVIS_BRANCH'] : JSON.parse(`curl -u #{auth_token} -s #{pull_req}`)['head']['ref']).strip - else - %x[git rev-parse --abbrev-ref HEAD] - end - end -end - -namespace :test do - supportedPlatforms - .select { |platform| platform == 'macosx' || platform.end_with?('simulator') }.map do |platform| - task platform do |t| - configurations - .map { |configuration| Rake::Task["test:#{platform}:#{configuration.downcase}"] } - .map(&:invoke) - end - end -end - -namespace :test do - supportedPlatforms.product(configurations).each do |platform, configuration| - XCJobs::Test.new("#{platform}:#{configuration.downcase}") do |t| - t.project = 'KeychainAccess' - t.scheme = 'KeychainAccess' - t.sdk = platform - destinations(platform: platform).each do |destination| - t.add_destination(destination) - end - t.configuration = configuration - t.coverage = true - t.build_dir = 'build' - t.formatter = 'xcpretty -c' - end - end -end - -XCJobs::Coverage::Coveralls.new() diff --git a/Carthage/Checkouts/KeychainAccess/Lib/Scripts/add_key.sh b/Carthage/Checkouts/KeychainAccess/Lib/Scripts/add_key.sh deleted file mode 100755 index adf1b6b..0000000 --- a/Carthage/Checkouts/KeychainAccess/Lib/Scripts/add_key.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh - -security create-keychain -p travis build.keychain -security default-keychain -s build.keychain -security unlock-keychain -p travis build.keychain -security set-keychain-settings -t 3600 -l ~/Library/Keychains/build.keychain - -security import ./Lib/Certificates/apple.cer -k ~/Library/Keychains/build.keychain -T /usr/bin/codesign -security import ./Lib/Certificates/ios_developer.p12 -k ~/Library/Keychains/build.keychain -P $PASSPHRASE -T /usr/bin/codesign -security import ./Lib/Certificates/developer_id_app.p12 -k ~/Library/Keychains/build.keychain -P $PASSPHRASE -T /usr/bin/codesign - -mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles -cp ./Lib/Certificates/*.mobileprovision ~/Library/MobileDevice/Provisioning\ Profiles/ -cp ./Lib/Certificates/*.provisionprofile ~/Library/MobileDevice/Provisioning\ Profiles/ diff --git a/Carthage/Checkouts/KeychainAccess/Lib/TestHost/AppDelegate.swift b/Carthage/Checkouts/KeychainAccess/Lib/TestHost/AppDelegate.swift deleted file mode 100644 index b767117..0000000 --- a/Carthage/Checkouts/KeychainAccess/Lib/TestHost/AppDelegate.swift +++ /dev/null @@ -1,49 +0,0 @@ -// -// AppDelegate.swift -// TestHost -// -// Created by kishikawa katsumi on 7/10/16. -// Copyright © 2016 kishikawa katsumi. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(OSX) -import Cocoa - -@NSApplicationMain -class AppDelegate: NSObject, NSApplicationDelegate { - - @IBOutlet weak var window: NSWindow! - - func applicationDidFinishLaunching(aNotification: NSNotification) {} - -} -#else -import UIKit - -@UIApplicationMain -class AppDelegate: UIResponder, UIApplicationDelegate { - - var window: UIWindow? - - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool { - return true - } -} -#endif diff --git a/Carthage/Checkouts/KeychainAccess/Lib/TestHost/Assets.xcassets/AppIcon.appiconset/Contents.json b/Carthage/Checkouts/KeychainAccess/Lib/TestHost/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 1d060ed..0000000 --- a/Carthage/Checkouts/KeychainAccess/Lib/TestHost/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "size" : "20x20", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "20x20", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "3x" - }, - { - "idiom" : "ipad", - "size" : "20x20", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "20x20", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "29x29", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "40x40", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "76x76", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "76x76", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "83.5x83.5", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/KeychainAccess/Lib/TestHost/Info.plist b/Carthage/Checkouts/KeychainAccess/Lib/TestHost/Info.plist deleted file mode 100644 index 32cfe6b..0000000 --- a/Carthage/Checkouts/KeychainAccess/Lib/TestHost/Info.plist +++ /dev/null @@ -1,47 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UIRequiresFullScreen - - NSPrincipalClass - $(PRINCIPAL_CLASS) - - diff --git a/Carthage/Checkouts/KeychainAccess/Lib/TestHost/TestHost.entitlements b/Carthage/Checkouts/KeychainAccess/Lib/TestHost/TestHost.entitlements deleted file mode 100644 index 3a7fd24..0000000 --- a/Carthage/Checkouts/KeychainAccess/Lib/TestHost/TestHost.entitlements +++ /dev/null @@ -1,11 +0,0 @@ - - - - - keychain-access-groups - - $(AppIdentifierPrefix)com.kishikawakatsumi.KeychainAccess.TestHost - $(AppIdentifierPrefix)shared - - - diff --git a/Carthage/Checkouts/KeychainAccess/Package.swift b/Carthage/Checkouts/KeychainAccess/Package.swift deleted file mode 100644 index 7fa41f0..0000000 --- a/Carthage/Checkouts/KeychainAccess/Package.swift +++ /dev/null @@ -1,13 +0,0 @@ -// -// Package.swift -// KeychainAccess -// -// Created by kishikawa katsumi on 2015/12/4. -// Copyright (c) 2015 kishikawa katsumi. All rights reserved. -// - -import PackageDescription - -let package = Package( - name: "KeychainAccess" -) diff --git a/Carthage/Checkouts/KeychainAccess/README.md b/Carthage/Checkouts/KeychainAccess/README.md deleted file mode 100644 index 480f121..0000000 --- a/Carthage/Checkouts/KeychainAccess/README.md +++ /dev/null @@ -1,598 +0,0 @@ -# KeychainAccess -[![CI Status](http://img.shields.io/travis/kishikawakatsumi/KeychainAccess.svg)](https://travis-ci.org/kishikawakatsumi/KeychainAccess) -[![Coverage Status](https://img.shields.io/coveralls/kishikawakatsumi/KeychainAccess.svg)](https://coveralls.io/github/kishikawakatsumi/KeychainAccess?branch=master) -[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) -[![Version](https://img.shields.io/cocoapods/v/KeychainAccess.svg)](http://cocoadocs.org/docsets/KeychainAccess) -[![Platform](https://img.shields.io/cocoapods/p/KeychainAccess.svg)](http://cocoadocs.org/docsets/KeychainAccess) - -KeychainAccess is a simple Swift wrapper for Keychain that works on iOS and OS X. Makes using Keychain APIs extremely easy and much more palatable to use in Swift. - - - - - -## :bulb: Features - -- Simple interface -- Support access group -- [Support accessibility](#accessibility) -- [Support iCloud sharing](#icloud_sharing) -- **[Support TouchID and Keychain integration (iOS 8+)](#touch_id_integration)** -- **[Support Shared Web Credentials (iOS 8+)](#shared_web_credentials)** -- [Works on both iOS & OS X](#requirements) -- [watchOS and tvOS are supported](#requirements) -- **[Swift 3 & Swift 2.3 compatible](#requirements)** - -## :book: Usage - -##### :eyes: See also: -- [:link: Playground](https://github.com/kishikawakatsumi/KeychainAccess/blob/master/Examples/Playground-iOS.playground/section-1.swift) -- [:link: iOS Example Project](https://github.com/kishikawakatsumi/KeychainAccess/tree/master/Examples/Example-iOS) - -### :key: Basics - -#### Saving Application Password - -```swift -let keychain = Keychain(service: "com.example.github-token") -keychain["kishikawakatsumi"] = "01234567-89ab-cdef-0123-456789abcdef" -``` - -#### Saving Internet Password - -```swift -let keychain = Keychain(server: "https://github.com", protocolType: .HTTPS) -keychain["kishikawakatsumi"] = "01234567-89ab-cdef-0123-456789abcdef" -``` - -### :key: Instantiation - -#### Create Keychain for Application Password - -```swift -let keychain = Keychain(service: "com.example.github-token") -``` - -```swift -let keychain = Keychain(service: "com.example.github-token", accessGroup: "12ABCD3E4F.shared") -``` - -#### Create Keychain for Internet Password - -```swift -let keychain = Keychain(server: "https://github.com", protocolType: .HTTPS) -``` - -```swift -let keychain = Keychain(server: "https://github.com", protocolType: .HTTPS, authenticationType: .HTMLForm) -``` - -### :key: Adding an item - -#### subscripting - -##### for String - -```swift -keychain["kishikawakatsumi"] = "01234567-89ab-cdef-0123-456789abcdef" -``` - -```swift -keychain[string: "kishikawakatsumi"] = "01234567-89ab-cdef-0123-456789abcdef" -``` - -##### for NSData - -```swift -keychain[data: "secret"] = NSData(contentsOfFile: "secret.bin") -``` - -#### set method - -```swift -keychain.set("01234567-89ab-cdef-0123-456789abcdef", key: "kishikawakatsumi") -``` - -#### error handling - -```swift -do { - try keychain.set("01234567-89ab-cdef-0123-456789abcdef", key: "kishikawakatsumi") -} -catch let error { - print(error) -} -``` - -### :key: Obtaining an item - -#### subscripting - -##### for String (If the value is NSData, attempt to convert to String) - -```swift -let token = keychain["kishikawakatsumi"] -``` - -```swift -let token = keychain[string: "kishikawakatsumi"] -``` - -##### for NSData - -```swift -let secretData = keychain[data: "secret"] -``` - -#### get methods - -##### as String - -```swift -let token = try? keychain.get("kishikawakatsumi") -``` - -```swift -let token = try? keychain.getString("kishikawakatsumi") -``` - -##### as NSData - -```swift -let data = try? keychain.getData("kishikawakatsumi") -``` - -### :key: Removing an item - -#### subscripting - -```swift -keychain["kishikawakatsumi"] = nil -``` - -#### remove method - -```swift -do { - try keychain.remove("kishikawakatsumi") -} catch let error { - print("error: \(error)") -} -``` - -### :key: Set Label and Comment - -```swift -let keychain = Keychain(server: "https://github.com", protocolType: .HTTPS) -do { - try keychain - .label("github.com (kishikawakatsumi)") - .comment("github access token") - .set("01234567-89ab-cdef-0123-456789abcdef", key: "kishikawakatsumi") -} catch let error { - print("error: \(error)") -} -``` - -### :key: Obtaining Other Attributes - -#### PersistentRef - -```swift -let keychain = Keychain() -let persistentRef = keychain[attributes: "kishikawakatsumi"].persistentRef -... -``` - -#### Creation Date - -```swift -let keychain = Keychain() -let creationDate = keychain[attributes: "kishikawakatsumi"].creationDate -... -``` - -#### All Attributes - -```swift -let keychain = Keychain() -do { - let attributes = try keychain.get("kishikawakatsumi") { $0 } - print(attributes.comment) - print(attributes.label) - print(attributes.creator) - ... -} catch let error { - print("error: \(error)") -} -``` - -##### subscripting - -```swift -let keychain = Keychain() -let attributes = keychain[attributes: "kishikawakatsumi"] -print(attributes.comment) -print(attributes.label) -print(attributes.creator) -``` - -### :key: Configuration (Accessibility, Sharing, iCloud Sync) - -**Provides fluent interfaces** - -```swift -let keychain = Keychain(service: "com.example.github-token") - .label("github.com (kishikawakatsumi)") - .synchronizable(true) - .accessibility(.afterFirstUnlock) -``` - -#### Accessibility - -##### Default accessibility matches background application (=kSecAttrAccessibleAfterFirstUnlock) - -```swift -let keychain = Keychain(service: "com.example.github-token") -``` - -##### For background application - -###### Creating instance - -```swift -let keychain = Keychain(service: "com.example.github-token") - .accessibility(.AfterFirstUnlock) - -keychain["kishikawakatsumi"] = "01234567-89ab-cdef-0123-456789abcdef" -``` - -###### One-shot - -```swift -let keychain = Keychain(service: "com.example.github-token") - -do { - try keychain - .accessibility(.afterFirstUnlock) - .set("01234567-89ab-cdef-0123-456789abcdef", key: "kishikawakatsumi") -} catch let error { - print("error: \(error)") -} -``` - -##### For foreground application - -###### Creating instance - -```swift -let keychain = Keychain(service: "com.example.github-token") - .accessibility(.WhenUnlocked) - -keychain["kishikawakatsumi"] = "01234567-89ab-cdef-0123-456789abcdef" -``` - -###### One-shot - -```swift -let keychain = Keychain(service: "com.example.github-token") - -do { - try keychain - .accessibility(.whenUnlocked) - .set("01234567-89ab-cdef-0123-456789abcdef", key: "kishikawakatsumi") -} catch let error { - print("error: \(error)") -} -``` - -#### :couple: Sharing Keychain items - -```swift -let keychain = Keychain(service: "com.example.github-token", accessGroup: "12ABCD3E4F.shared") -``` - -#### :arrows_counterclockwise: Synchronizing Keychain items with iCloud - -###### Creating instance - -```swift -let keychain = Keychain(service: "com.example.github-token") - .synchronizable(true) - -keychain["kishikawakatsumi"] = "01234567-89ab-cdef-0123-456789abcdef" -``` - -###### One-shot - -```swift -let keychain = Keychain(service: "com.example.github-token") - -do { - try keychain - .synchronizable(true) - .set("01234567-89ab-cdef-0123-456789abcdef", key: "kishikawakatsumi") -} catch let error { - print("error: \(error)") -} -``` - -### :fu: Touch ID integration - -**Any Operation that require authentication must be run in the background thread.** -**If you run in the main thread, UI thread will lock for the system to try to display the authentication dialog.** - -#### :closed_lock_with_key: Adding a Touch ID protected item - -If you want to store the Touch ID protected Keychain item, specify `accessibility` and `authenticationPolicy` attributes. - -```swift -let keychain = Keychain(service: "com.example.github-token") - -dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { - do { - // Should be the secret invalidated when passcode is removed? If not then use `.WhenUnlocked` - try keychain - .accessibility(.WhenPasscodeSetThisDeviceOnly, authenticationPolicy: .UserPresence) - .set("01234567-89ab-cdef-0123-456789abcdef", key: "kishikawakatsumi") - } catch let error { - // Error handling if needed... - } -} -``` - -#### :closed_lock_with_key: Updating a Touch ID protected item - -The same way as when adding. - -**Do not run in the main thread if there is a possibility that the item you are trying to add already exists, and protected.** -**Because updating protected items requires authentication.** - -Additionally, you want to show custom authentication prompt message when updating, specify an `authenticationPrompt` attribute. -If the item not protected, the `authenticationPrompt` parameter just be ignored. - -```swift -let keychain = Keychain(service: "com.example.github-token") - -DispatchQueue.global(qos: DispatchQoS.QoSClass.default).async { - do { - // Should be the secret invalidated when passcode is removed? If not then use `.WhenUnlocked` - try keychain - .accessibility(.whenPasscodeSetThisDeviceOnly, authenticationPolicy: .userPresence) - .authenticationPrompt("Authenticate to update your access token") - .set("01234567-89ab-cdef-0123-456789abcdef", key: "kishikawakatsumi") - } catch let error { - // Error handling if needed... - } -} -``` - -#### :closed_lock_with_key: Obtaining a Touch ID protected item - -The same way as when you get a normal item. It will be displayed automatically Touch ID or passcode authentication If the item you try to get is protected. -If you want to show custom authentication prompt message, specify an `authenticationPrompt` attribute. -If the item not protected, the `authenticationPrompt` parameter just be ignored. - -```swift -let keychain = Keychain(service: "com.example.github-token") - -DispatchQueue.global(qos: DispatchQoS.QoSClass.default).async { - do { - let password = try keychain - .authenticationPrompt("Authenticate to login to server") - .get("kishikawakatsumi") - - print("password: \(password)") - } catch let error { - // Error handling if needed... - } -} -``` - -#### :closed_lock_with_key: Removing a Touch ID protected item - -The same way as when you remove a normal item. -There is no way to show Touch ID or passcode authentication when removing Keychain items. - -```swift -let keychain = Keychain(service: "com.example.github-token") - -do { - try keychain.remove("kishikawakatsumi") -} catch let error { - // Error handling if needed... -} -``` - -### :key: Shared Web Credentials - -> Shared web credentials is a programming interface that enables native iOS apps to share credentials with their website counterparts. For example, a user may log in to a website in Safari, entering a user name and password, and save those credentials using the iCloud Keychain. Later, the user may run a native app from the same developer, and instead of the app requiring the user to reenter a user name and password, shared web credentials gives it access to the credentials that were entered earlier in Safari. The user can also create new accounts, update passwords, or delete her account from within the app. These changes are then saved and used by Safari. - - - -```swift -let keychain = Keychain(server: "https://www.kishikawakatsumi.com", protocolType: .HTTPS) - -let username = "kishikawakatsumi@mac.com" - -// First, check the credential in the app's Keychain -if let password = try? keychain.get(username) { - // If found password in the Keychain, - // then log into the server -} else { - // If not found password in the Keychain, - // try to read from Shared Web Credentials - keychain.getSharedPassword(username) { (password, error) -> () in - if password != nil { - // If found password in the Shared Web Credentials, - // then log into the server - // and save the password to the Keychain - - keychain[username] = password - } else { - // If not found password either in the Keychain also Shared Web Credentials, - // prompt for username and password - - // Log into server - - // If the login is successful, - // save the credentials to both the Keychain and the Shared Web Credentials. - - keychain[username] = inputPassword - keychain.setSharedPassword(inputPassword, account: username) - } - } -} -``` - -#### Request all associated domain's credentials - -```swift -Keychain.requestSharedWebCredential { (credentials, error) -> () in - -} -``` - -#### Generate strong random password - -Generate strong random password that is in the same format used by Safari autofill (xxx-xxx-xxx-xxx). - -```swift -let password = Keychain.generatePassword() // => Nhu-GKm-s3n-pMx -``` - -#### How to set up Shared Web Credentials - -> 1. Add a com.apple.developer.associated-domains entitlement to your app. This entitlement must include all the domains with which you want to share credentials. - -> 2. Add an apple-app-site-association file to your website. This file must include application identifiers for all the apps with which the site wants to share credentials, and it must be properly signed. - -> 3. When the app is installed, the system downloads and verifies the site association file for each of its associated domains. If the verification is successful, the app is associated with the domain. - -**More details:** - - -### :key: Debugging - -#### Display all stored items if print keychain object - -```swift -let keychain = Keychain(server: "https://github.com", protocolType: .HTTPS) -print("\(keychain)") -``` - -``` -=> -[ - [authenticationType: Default, key: kishikawakatsumi, server: github.com, class: InternetPassword, protocol: HTTPS] - [authenticationType: Default, key: hirohamada, server: github.com, class: InternetPassword, protocol: HTTPS] - [authenticationType: Default, key: honeylemon, server: github.com, class: InternetPassword, protocol: HTTPS] -] -``` - -#### Obtaining all stored keys - -```swift -let keychain = Keychain(server: "https://github.com", protocolType: .https) - -let keys = keychain.allKeys() -for key in keys { - print("key: \(key)") -} -``` - -``` -=> -key: kishikawakatsumi -key: hirohamada -key: honeylemon -``` - -#### Obtaining all stored items - -```swift -let keychain = Keychain(server: "https://github.com", protocolType: .https) - -let items = keychain.allItems() -for item in items { - print("item: \(item)") -} -``` - -``` -=> -item: [authenticationType: Default, key: kishikawakatsumi, server: github.com, class: InternetPassword, protocol: HTTPS] -item: [authenticationType: Default, key: hirohamada, server: github.com, class: InternetPassword, protocol: HTTPS] -item: [authenticationType: Default, key: honeylemon, server: github.com, class: InternetPassword, protocol: HTTPS] -``` - -## Requirements - -| | OS | Swift | -|------------|----------------------------------------|---------------| -| **v1.1.x** | iOS 7+, OSX 10.9+ | 1.1 | -| **v1.2.x** | iOS 7+, OSX 10.9+ | 1.2 | -| **v2.0.x** | iOS 7+, OSX 10.9+, watchOS 2+ | 2.0 | -| **v2.1.x** | iOS 7+, OSX 10.9+, watchOS 2+ | 2.0 | -| **v2.2.x** | iOS 8+, OSX 10.9+, watchOS 2+, tvOS 9+ | 2.0, 2.1 | -| **v2.3.x** | iOS 8+, OSX 10.9+, watchOS 2+, tvOS 9+ | 2.0, 2.1, 2.2 | -| **v2.4.x** | iOS 8+, OSX 10.9+, watchOS 2+, tvOS 9+ | 2.2, 2.3 | -| **v3.x** | iOS 8+, OSX 10.9+, watchOS 2+, tvOS 9+ | 3.0 | - -## Installation - -### CocoaPods - -KeychainAccess is available through [CocoaPods](http://cocoapods.org). To install -it, simply add the following lines to your Podfile: - -```ruby -use_frameworks! -pod 'KeychainAccess' -``` - -### Carthage - -KeychainAccess is available through [Carthage](https://github.com/Carthage/Carthage). To install -it, simply add the following line to your Cartfile: - -`github "kishikawakatsumi/KeychainAccess"` - -### Swift Package Manager - -KeychainAccess is also available through [Swift Package Manager](https://github.com/apple/swift-package-manager/). -First, create `Package.swift` that its package declaration includes: - -```swift -import PackageDescription - -let package = Package( - dependencies: [ - .Package(url: "https://github.com/kishikawakatsumi/KeychainAccess.git", majorVersion: 2) - ] -) -``` - -Then, type - -```shell -$ swift build -``` - -### To manually add to your project - -1. Add `Lib/KeychainAccess.xcodeproj` to your project -2. Link `KeychainAccess.framework` with your target -3. Add `Copy Files Build Phase` to include the framework to your application bundle - -_See [iOS Example Project](https://github.com/kishikawakatsumi/KeychainAccess/tree/master/Examples/Example-iOS) as reference._ - - - -## Author - -kishikawa katsumi, kishikawakatsumi@mac.com - -## License - -KeychainAccess is available under the MIT license. See the LICENSE file for more info. diff --git a/Carthage/Checkouts/KeychainAccess/Screenshots/01.png b/Carthage/Checkouts/KeychainAccess/Screenshots/01.png deleted file mode 100644 index de3ed0be086b3c045f6b06e517ad9461ffb113ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54511 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%0ADJeD?*Kh58c^@VyEJ~l1r0WR) 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ðoc+6F83$cN{H5Y8huFjZ(t5LcM6TPBuLomS4%n; zD;5qaSpy8mIbOyzLj`Dph-`T77KF<{&4`ywmdt>|bYdAhF< z?x{d4qitCpgYpZIR(Cgm|-?^Xl2~1 zs}PsVY919T%6VJP%3a~DGbJR{i8x76H&}7k9(`5?y1hLu%?_zP(ymlh{oE-Xl+?5~=){_wdu$d*(}crV)r z@-3{HzU!^ix*8J3Rd~0|6^E)aTma}iPKH?BE{V(G#|5ETX3K;iokySd1CKs-V|c%6 zigw6uLk%g{;V##nX_wu8q_Ox58vP?leyc+UCclEh5-sC>)+Y9RQQ`XUk7mKmM7-Tc5UNt2+x1puu zh!)^d3>pAONd;WDd*NIsEIi@J%v_8sp5uYpEsxMK2C{}^ytk&FkdZts-oq}XPsPaB zRh;~Lj_(}zK=$7^Tl!FgrFCO(7r#v(9SzP|oJq!~mVyt;JRO9!*FO?qD!bQ07^rOo z;=;5`FcY}B{F4yi^aXh<9IVXGN31(Zn!c>E`-Sw1p zHwRN}TAS(B)63+TrhnTUpvu|JaCC}(J!jaYXQWq`*!pYq@&UBcLn{v)EdH?fTmYKR zTX~jwzGCdA6A5seP6CGIjb>$zT|$mRNASn3XMAjNbb=vz=u+kDVf#_g(>0SGOqxV4 zY#^wJVTVJFcn8tlnyd)Zd{c&ytla$H*2?F*d-TtKw6G6R@XkJo8Tm*!zWg)zJT5q( z_$_yT{X#$7*ob8zs@n4D-C#fFNbvr8rZ2>2F=JbJAh5lGd=zerx7ze(u+JA1YvGce zM@O{(&UCZ1`3WDm=_mixvW(@~<8!FKT@(P&xGukDU0x^~X8eCs(psXL;-0 zQSMRCg@lg&##B{kxbGO7DScHe zM50Ib9I07n^%MQQOC6)u(v55kGaMrnGf+@sxV=LQhRmEIKxh55MnCqtu?? zMDgn;_qn1&G?Ujg2Qy-RCDUx&RUU%Vnbuy|Hn| zcxpfTPnb>W-}s|=&+RENH}Y|bo7Kr~e!FjN!;AOrm-K`xa}^ROSOo(D%q=e|Ct&cn zRznnyRv<95q*+8kAz_A(K8FGmAZP?fevTcSHF96K8_1++!HNIgoc0M9br!yxL*U^H8utrl}{;@Xl^fKi*bVla;CGlq2C0`8o&@W8z zn~C73lFGqo3{J52p<7FW8o1@xhFilR;wS9FH+w1x#vH7H)h>vNY`Q6rfPLP6llQvy z{Y=RIuR{1vObSZRHa;bn6fCBL`gxI<)C8CF6!p8zDaey#upNaUz3youKk522xFS62 zjx~;9YkJK6kYVM%RM=>5=!AolT3;cG;gZ&zgy+#szXg>KZ98mxgN+)iV$DqNY4wDi zo}0h==rcC}>I0^!2L}Poz###;8sZcW(?6SHFnh=oi&1fB6PZQBts^$UWp^QbRc;V% z63uhxuDv~-{}~_Q9P|BhFnJf8HlE?QsK$tsGj)T@fEr@ec*jPg%jPR^A^0j|!`X$2 zno=9{RF9d_me7^8SWRBiP<7BLZR=QI<%eb5c3ZssJZXFty@DNA)%Cw7DMz0bJlT{3 zAvX*{M*?E%qG}Ow#{`ATD3x?@NC?ihGvcqI=W#8(b;Zz3%0RBw$E9Fa(scx*7?Sbx zLQ6m;(*j8`v2<;HneZ&EXm$i1X9qf=J^pLc4^vTYl9W5Y@(d~OVN84`H~BW~fT$t_ z=YX1>I_~O6_%YB56M|0(;@~oV=G4#`?RgyUSf$djLH)mmULNGA%o|w~y=1OJq=v8B zrMar$W3Em#*%nbNl>v9EMIchD|P&VbG2PUr4`N^QN1fk|097Q=DZ=kRm`**45rAwSyrRFak z{g&(M4d1ovzH##i#dD?4Ec2}}U zEnsXV04opvs>mO1AMR;olNh6!mE$Cm0Cx$E_z9b4$}la?^`lhG`&MjlhUv`a3HK(~ zXA~)L&>6o8sm3;)-z(oEkis$q+cnx_@J0{XuL@VZ``OjLq94AOQY|xAdk>5B@z$5n zXc;c_5R%t_8)n)7s&|t*Ym&??tt%AdRSE{xy(D^cgI$Y_o$eZgq`ip zcJyv^`8HCfMK1{xLN44p;X;U4nt$z?vpmn-D{t<4=xK0?xoAHSl(-5wIB^r*DW89G zwg{!SWLy}QwQRxm&}L~t0b^^S5H?vYtfu<aMtW$kBhGvL9=NOci6lU>82z5}-2pN_r#K0lzSALiffWZR-@a@Td9?vip@!hFmd z|4H6$Ant+2b`CgT+AA|xUw<|P77qKxjTf37-^cSQ=>Th|5{WQ09lGFM;ER4KNoleg zDCi{h?X=9xE%}{d`P?L1;zT-MnCEj78RIeizCE(!Zkb=9-$;U@eyn2lO=Xe0Rv&(3 zVMEIoR|Z32%($j@*r0B2L#oR-?{*H8Q-C*R-+StKiKVs0;@K9p<+E9fTzF7Rb3c8a z;oq^AxFX??mCe|tQoEqyzTWCSuxzuw0Wr?Z`D-0~6dWuk4k808jFS0@_8+8U-0`{S z=Cpx|!1Y&c~_^UR`T2M*4sd(M>ezUhwte35Gc?m0u~%#EcX zW0?oZOd0a``j-2mDx(P^!F}9O!>Ccheg#=9s{H5vGU3EOI5$08ax?6H0J^lb4{A|q zT19j;HdQO-Z}B<-X=_F7rJ)apC1>GmSZb)SF$dERtt8tq6$;%8@xa>&u)#t%vn2CQ ziX2&hF7aHp^+2G0{!(Lv=PutLNzgO{PflQXD7#c#g{%NZZ7b`jjN-F#e_E}=9O1M5 z>%j&Kn69>4255l$^htKasSvm{tWs*&<=MH&my*|w=b&OuuLo)Z7u>@zaY8Jd z4er-{Ca8(Hfa614*5lwTveJG>Vt5~o(6!8Dz8B+=2cm}Zx*>7VSuwsaL~X!qsvFD_ z-0nIs;%wS8)8&LWVwwPMpxB^?uq4?mn7xki5Zcx z+L}j{o3l zL0nL;9Tcz{X4#rHtbt$@mJt1Evw}#YZ1DhPKsM{@SnEqUs|EG<8~-u842RHseD)MZ zC(hX{-`TI+NzyesXpNv~pP^(h&@tHD1-(zMg6Ubh5Ir#oLa>gGtg({A!?ZGaH!^x8 z6jeOH$^H6FX6HSddtaBoagTf(o0IgbWRk~*?LC?lyF+lKW7tZoz4pQEA`H>qG{JTuFIm#E{;);_?Y}qK!DCTioRlP8J+AnW?Ed6IWRARKu`4{MRiVAPI_j`& zOS+ejdBJ^uX;k4zkCKS3m5O=gV!^CCAc0)~<7lWNcXKaXwr)F{MY?2rShDIy{lIeCK(KkAKmcvCXC`~R-)|_LLZl>XYxpgD5EO@-ZU~@G1o||FHLK0l-Rf{ z!^sf5>`EPP>QHeos?AkvfQbNarn4s&qUb7{Cu%2T{7mnbX2pEh0zWWMQ!-4 zD$^y~*V_>BN$z%>$S0CYk&%S`aty}#CnyK?reXK~Gv>g&tA+Jvv*4uY_In1VYA~ z+;>iNvP4sO*CyDjW$=A0#_`x}N7+mFKDuEyv_Q2e;f0hH9YySN+A zA?G;7#ll7ClDr!g zqq$^R{ka{muV^)+NF>#~@}6zBrNiq0WfcPkehdV*KX62I zb-WDgBsJPh9SY89YerEq;;mGvn!=olH`;)EJ+{I;+onHEkGV-ae&c6sf}`IP^2(E2 zvNfn&&ld4Gi7anZ2=_b)!WyARYv;7r)j+|1ZFM!+xjfgC+T$OALtkVz62e*fxmn8k zQ%k3xd}j*E{Iq!Q(T*zL;X>ZwZ{oN$!uh`C)+ZE zIVxSOOb2gxc_$fa;Z-p;)o!P?GquBqlp1>{+Qt2)BfXE@+B2;?wJ6*F5<5*?vltLk@`uS$jJ z+>)`lS23Sb)@JRy2O-=4MOwb~|OOgi_(_Lqp8bv5_!x zBvBLMPwIDJzleXrwD*=2>+;KZ?mb;8p~qF`Gik2QkSQAIXGJ%?wrx|rL|)LMIK_j1 zH7XK|Q%?yH4C~((?MSxKFu)zp39t;F97%=7TI}Kou$jmZsY!&}k1hj==jDJZMgCgjWA0 z+nZz9IKNczuKLjR_3w;?(-hhR^?QeA9{7#raXJeKGfaMhV_5{{!CgC)~P1D8KpO@#vMpAT6!PumFO&waFU9KZKi(a$7t zPu@z^H_M6wQ#Ne`3D!}GYC&C0h02ux|N6Cy773(CknirTL}(+O;yDZ_Q3puhO$6 z@#3|sUBpp`(9?+Fx5Yh4&wU;I#XEFM>R1vRwjXP=jW45ZAW{oD7iEiT;^d6~n*~7k zQ^1C;o2lz42~Z}^psJ8xSP8J>VimMY8h+1bN1-sOgs^2Id~ILutpGGD!OE3fx9;ps zFPru0_bG>fez;RE?L48Kxi|c-%ZtUx+;sZM-^L3Rp=IU{tvH)wDumKS>3nh`tkf|~ z;KVex>kY)(frkL|D7cQ)vlh-+0=#-{(^Z)hhJUsTU!4$Tr1bka%R4(axI?|lA72(9 zInM`nUyywd1MBi5kBSO0>$A>_1DOn=XFUqgjbFR+t!X5m$B!klCBKsu>4-pOe8~7^ z>|-I&s|3YX-Na^t{oT_THiO`EW2V@+QHB+J4SZZ&lljvpy?ol+Q`+!koJKsc2i$WO zA%72)?M;kwPxDHZ@T_sNNR$y1@F%F`4<_w#&z*hBeakN9l4aWQRI-x){kE70$jH#L zq8Q$fF?y#{kNPz~*Yk8Yd{*7PYZ}R39Kb&IS%#$L1Torn8Hb1z9q{eo}r9&3buWGW^!t* z`(c=IjD*}R&KQy7UwwzW@iz#<9)afTFAQx(bE_uEIhFN`eIZdjA-q)yq3^3D24H%+ zU(>-G0p6+PE5gl{ggczIEWR+@ND!+cgx+2C@=KkM!qYNUE~WI0phr#Ftv|9If%wg_ z&O+O(f?4-s6$6Y@FLb2lSb$y1P1&=kYGUy8(A790unkTELzQ%cSF%DHV16<7reDnt z96b*K!b~;k8Jt&n_R8JiW#MzoPwd@ouaBErd`h>(d$rYDovTQCY>KoWsgmA#xb`ef zTF^g+S-Bee>rt> z(rRF6wHwU^aIk)4kz825+FEk))I6fO%cfz&YU8qZ(jFJj6Zc1y%C8UHa=Cr$6O&De zLpM0Z_h9$MPYAo^YbW#gQa((WO4U~AHfAGK@?rd+CxW1!W^?yb6^gKaNrv)n@!h55 zGh(f@0K1(fd`q5X` zlKTlfr0O1W*j6r1!@aiNm+jnByGX5jGLn1{b4nUc`1f zr6$F4>lbscdp8p__jq^;bt?`y)fmq@sdvjf_c&mi7B4(tsbPrFvB1pw4B+x#2o2c9 zthV=H1;sU!_k_(lRwdryjD-a+K-uaL0x5evkbh^^=V_n_$OniQ;7{^fKP7cd8D%}d z(z~P#j+7NC|3K)&PqskryUstw-TsPuFc+gWcgid%o_+Nmg>u_ignR!P3&6zw#krgE z^T1)hLr+#|hE`3ao~P+!!`AO8ot{E9kXpRBk)lPslWD_{S~4buwd|Ed!V01d0>Vxv zy2iQG{_H=d1O#3RwAYD;a_w>?vF@Qv`0SllIikqkulOsJx+Q1OmxVLwNrCG<2*t{c zwF)9prJ+l4mbi;<$@1~0D*!F6Q(Y+Iwp_bTh<7gFC+qB zk^zznM$O0`%vgF+pC4L_K~j|&YQG&W8|O(N<7tkSR;<#x%d;Y2H_DaN_*XIWpPJ+L z$KQS+XUNvn1M0M>IS+D3PN2o+m3zAK zv5a2d>cM`ldYFVH)Ggy_b7v)GLi`Yw5y0>qsGOxq)w+L3mt{5-gUpJ#du0JN9lW!d zeT}EUER(deTjnt1R!%!o^EQ|`XMzjXkF#G1`Gj&$cyPBE=BBZ}L6W{r*dOqf^Y+Da zdu%J&8)1_@7b&@D|Can@PjyF89l!OSFoWEOp-Ms}6TO{i1oN?v!jlA4u5Zq96H#8j z*F}+jOLz((`B@1sKm#NF=#}7PBc>*h$Aee03G9scM|!$t5Q|_LiHm~8)Rn;r2jlhV zG36cvztKpbqTvqgfKLou;)CSm#J&%nZm2{kOj7J6jXgC;4qMN@W2fgY!urLtmWQf3 z_NACTX+(wG$Z`yrmSgMHADYGcs5>omIH}K())NumbsKdqQqBlakAr|Lc+u7I{Vw4w zL6e6AH*EJ@)mY6w>wh-3Ff9-xFBf{eSTra(?j@T=bV+txKB;Z}5s0DQQDbp0K#taz zMrl4p&9^w?pjK5f3Fz8v5%0yodizk71}9|G7bZ3ilTdknJ+l&Sdsy-7v#U6&yv=!o z-TPJZKF9gQm7jUtd^U{_v;i?A(S7v3F6ttR|xxZ7pG}s zVe$eT4Wli|hQ4ve*CoEHdZt$`tKRTGSI0^SOOA2o%V1vvnNb>JBn)6Z>z)pM60Gx( z9kO^XB?uks^x~)Bd3DzaG?;&!d6uz+di8-rt2JaQl43&tgkh8rU5=y{tg;aUcb1C zMCn&75mu=!%n(j5D!(DJ_ z4xsh*bn_r1ZisMn$lYRs9OD>+LJnQe%f z6HoV6TC%;oMI&pML5#2Yd7hK$K!pkukfPv``-;LxetfL>UOr(i#C$-&qLXu;5A|cz zjwKydh^!ZdWjJLyA4VZvp=iy{6wu}2eNKrqB_(r8rD(Pc5dQ@#4&cNbp>UUj&*Zvj zNayfgSU;FfV!Ab18iGmGJB#}kjEsJTHcpp8kk}6Ac z{#rxhE^=cOqC@waRscv0DX3EgxFLEfI#o<2+qhnG&QogVC}Ykf)t@!ZmK1wKM-ts@ z>PJ|~mfv+h;#uiqQ1K5MFF>?NcE-epSN;5~2Ai0$1Tld7xK*jD%RTp030q|mNo*20 zyE>y)J}FHZc_2^M8XxolS8u_g-ditIWYr>IS0p?7%-h@bKr44;Z-^I?n)W2pv3E z*O4>W?NoGY9lbJ~oXV77U8z@as*iD!`q~^PIzi4maG8Jh{kB=a6gV7ycK*c>NbEV{(<^eD6O~delMQ8A~w=P+$vOkmsjIdx)F#Rn~}=f2Po!i z+^7)6;h0&U4xt{WwArg%w>(;P(apX?-Lv`F`|DxMiOQ!bclDV|M{)H|8MFAR6rN#vqK#~+gnj@%9>jpl})#;=YOW{dK};5=R`4eYvJn&D_= zPgQi211LE@O>gt+WjUfG?tN7<&!aAt^a~=9^|&x*q=knjt24@YksKY86{Yn;1SopB z2t>80LST`dD|n+U-}!faTvbB>bP1RElf3A_N!h2^!cxQaXL$9|QroXxIp* zl4_ZG63$H`7{$&RXtjkplN2~ObAa+0gIhgOpOpZIYm$iR-|2#eN@&!yCxF@Rq)r8i zf?4E4sy=47TrRJA+k;E0!K4dlXjw5`J-U%w(~D!%aviYj(9OVyP4xkCX2CXFNUKVG9|kQW%Aa=&F3>7Hzk&btN6=PNB5`I+=GgyQM^Uw+eURs$7#U?SDcA54$J&Kes{ z1yJW5K!a%^1ee*OEVdf{&2kSG4_^1j&IV`vP;q`HA~mws%KoIbMyp&(TU@)Zen~bx zFSSUIPThnphdtb|JdIq042szp^+ba>`Z5uWz z365cu913p3=KR6%DAS{2I)b^+uU;fgnzOq#R|ik0GG~p_mW~XVX{`CxpdFZOGW#QvT8Fz(M@UM@uQOO%&2qUq$9>pGL*dqK6BN1xmkrwZ&H{h)Sq*qnv z$chj>nRxA(OZUHu`g6zGK=@n4ne*&avO2@2-o=@}S3G1jl2+c!&t8-Z%>c2X`G@Jd zNGqeDl=xmIslz_1>cFLuugBs?HG=16L+Yv%%Sn?WR#+9wZz>Mgd@A>-E7Z!;P=Pc;Pwsc@lSFi z=9_h!U7!6$riJ5~YH5vy|n*`DLu1UGER_Ow}YGW{KZg z@@U{7Pcjtl_CnMZ6H8@{$q%+-LBu62rgV+yr?Yi`p7@I^yS?|%u&Hi5>)=_?FQJ>m z4$cAk(j0bqEnWt#dkK~D^sU=lX;IO+Sr-rcX;WcUg_@2Whx>*pG-AJUJJ8Y0@hUNW zN2$=mxj|p*+%%jF|9-^TjdP^Cz{Hie3aw3ZjCO61?KuZrA}w zXC*gwL`OK*xvl{}n?L8oCAgK&t9{O_SEPE@igV;z>9O~IZ>8Sr*g3b3w!AXG?4;cv zZS4(*w!3yb$f~rX*50KpGVCEgCOfu^{`8-0?^O7*J8t(}^iuibo!^=I_Q9^+%4D~T z>ozfe$z~GdZ;Uw!lRGt<&Km5XP4DZ+Li;*yad+`AH4`bU>sMNWFTbHCOqS3y*H{Nh z+g)w`H>b9Q^$*ptV`xc$Brvx$3ayX{QCyY0>`|}HBacCQPIH>SAzL1NHO{oJNn$mTtI=_BZsHlKzY62pYMQAU z?Sylmt_%~YU$cR>|J;M*A6VORuq48UFNQ*QwU@o8r#BO$ZwBUe!DgQ%Q8dzg^S~U% z*iJ}$%wcqE_I4sy(1GI0shOdh&)LY&UvqBfacJ8kS`eM(J*ROtZEO}_&$!q`lM*4WMhnC^r;;;=nMq(M1yw~;NYxj-r3>pMJ zxB-FXw)yYA=Nu8`)qk58V*K>qu0rDxcr)ww-ITJ#ZH;nyPX4Pa*;jeORI6LT&p+}7 zoIHQy^aaf%`byt*zGDq*F4vjm>-l_B%(!1XxqH|FIub2<=R2c2GqLQbS{{&JCN0P4 zv36|Km2WZ$3P}jLoY&i|>3!pfXV}mCeV?vbIdqq8 zFo$H=3TW=JK1PdvXXS=P+a9++8qqyA`PI+TAdT|O-Xy%pN(aA3)?6}uEAXa$?x^(0 zp_gjw=HKcakzZ$(=UtG!t8!>0)|?VXWMt%wtU>nN!h5{9>F5fn;qn;5hv|evof&)o z>9}W-+}se|I6{Sh)GbWhNT7BomJ-t#{Ov#IAR&7}U%QW4Z|%OcNIHKP%@Vr%@$1z4 zEO)ipE@<2SxciUL2|>IiLWWdB0RRZomoM=9td-@U5UXMKtL(;i{SWcIHouwwB zEG=`Vc0guY2uI1Eu(+V{QC< z!fMvf_txoOVv+iP%6iYdE1bn6jvHWvTv%&lVXo{@!^@aq36K>`9rdR8`H^*Emn%?x zl5e~O1Dx80t(j=()I-b*`JmqAkR5;2SCFjHL%iiyV(`!W4mx!?;KEojok^e8I2FLa z>~X=PYaf_%>jIFcSMI3mm-)`m@%@yRPLTA)zp0l0F2izi*fc`dCQT)F1jhv?(LDDI`LH^)Z9r(ZUp z1O#I20Ad{QM_~4m&_N&o!jR66SgV^8WBY#N z4>G>z_}f|-k(OIg7xKs4d$7uetru@?jL_68FsQgf1O2Q}%+TG+z*X(`qlyp4Jc6vN zNx7kMyd&2(l2eUh&fvOCp0M#2k`0I3E7SdG8Eu-I=xbLshQ3A!y$1qmJw&(hGLUN9 z4U2k&O+fKVV}ed1_#I^R=~{`>5ObMv_HUL;P%61t#ZpaZO!FIJehy`bYVeaeXFy$< zT(d6>GFyv0q=jvk;VNc3JN%5evfUebd7rfIw=jVqpxg3ES^u+Zt%l5C!)J7l$P5II zi*%)EuYL&UuE()qo?x=-5y)}8ja{s}5&%bpu5*#`^6$w0dxg{G(Z2EZ_N*7vNcYNJ zgGPx^=r0G>8gba}Ulm)@stgg&MExw6J%aw=s<>6B!|ac>aRNm?u?aF;*&8xZG~Bs- z4C?h!p}-1a43@Ryh-w%G1_|&hhh++zB!hIv^AAeMabhz6n7L?u9b>cLUg{D(VFGS7 zsuN)<9krTabBh|9MMHFCBY_r6>YSgI_>3$c}a}M7P8RWPf3#}!|uwcFK6pYz{DbVkYBx{0cRxquSE{T~@Ig8V> zO;PqAqXXc$F(c-xar{!Ycqw8oIqFPL?;@~>aLs54S+OFa^FY8Q{{`!YpQ?4GTE{B# z#k$zRzg*UL_YTfHc|9$5X-35wi2(vtS^uIw2iL9h9d<)oIxqa&xht!{(*w@MgzDcF;gv&03&h zPRW}LgEu@hStXITdBp`5tezQaLJZ)y!7NqXpE0eNzBI<7SoZs{_2<(`bWuEwXqJn` zlk;WjI|Mk#b|*6DsE;AA`yt{hAD%XEtL016*B?4P+`oZu6c(wbO+K|e1b;C9hZqhm zc6Pdo8`%JmTgoxDVEb;Yrcm2ZcN02Eq*&a9%L67~jf>A$>lgg4fOhh;{Q%Wrgm>b%Vc-4&xqk#B9vG`zDM=Uog_;*QFfyGT|>BXK@mT=qvT zr0_^}N~qq>rh7SzBD*hDL*+qff)JrjS?!=N{12UEAL_Sc~kGy3s3voICaiqyx~kYdy#pIi}8 zs45jF9mfqSIA}_TbFF|EXRiS#_|Dp&z28q&1Tgda0GS*WWRdcVU+-Tw4bh~T9Enu- zK`uHifqJ^}S~m)UH8`;(*xx5bzER-{y{{?wvF$s;%d~ npPe2R5PFR4BAL>HZCQ z%S^xF9oA{-$xyX%*e3pPTg_|DrROmH^9o}~HOJ<6YM-Y&@su4sFViYOvN<_?$l6rI zP62&QA=gfqOqVw+YC}JyXW<8E#Xdx5aaPX@3zy*VVeR)aV&CACKV`z4j{ssf->IY7dREvy|`d z;cW<#Z!y*t=u0$TV9B>E;u|5KW3jLRUHG^~UTpK-SsL}K^ABbaFa0`gZ@~}vwfe?n zh2>r>VEd3aVs*Tp&4J>ob0%S6uVW9q-uuc~eF=tS$6CX9+TlNEmO9ScE=um4#p;e~d%X!8RImRfK_hYCwy| zHRw{Z6zdpj=xJU1vQ^#%PtYjJzUZl{{F7%OGGc0v5kolB?%Xt!QGfGvN1Zx|_aP@j zdumj)Y81$dETN=uquV|YyG`yrr<6v@8~)sMcN;cr`B+!zMRB^;A&|51L}0NC=!Xn8M$IX$Isid|4m>jbd8Ky?4aPmdWnO#MD+IIp;$sy}%r4S- z3Uf)GW9e1kIbf{5-VeKn5+g76$)XF4XeW!iks!?koI7btii->BIdovH>H?M{OUPnh z;9N}Et3ZEdHBV97u zrO*PnY&gc{1QTWUDh8X`ap!j)NiMjO^hM+ei~qCTI{XqQvgbCq^|+(=vDXgnzbBdQ zIPUDf`bd1b%XbAt8vi^M?cTzn8tn0c>mwBf3C5*T?7`a=ubN#-=j~}bMJEZ0m~I_F zd-a5t8-0J%e$Qo)B)MeaYSx^#Nm?y$!tpv}*u9umv0FjstWOoS6NW&0tB=X7$q=?X zef0~hbJIxc3t5@elkrpFZxXB=zNyXxZ4QjJIW6g;5(LZRnE$I6MLikD{MG7R??JHL zQALI!%Or>{b}VwG(XtjiOnt{OOWdqxd@li~94+L6HI+hKJA0qJhr@cE(&K0h333gT*Ku;n*pP4%l*@~P zjxYmlXlw}}cFQ)D)50;Ls+^&IHmvTmCHN&ImWe!3W`vsY8eFuW6|RPhJe1&2ALtXVp?QX{TW4K(ci%s|F)&k78#%& zq6e0eI6Zl<%$Cz>HK3PXS6BJH&<<1i12&D~+!WyR-5G{s#~h)iEvyJ1t8f+5mLc84 z%eyp(D;@qfkT3k?yBv%`@YM!CxkH&>1T7H_F#<@pVx7Dwq&0BOra2<;3e>w|jDdw1 z93li0E6XQ9I~A{1_<$*tSIClrICL+ou2|p~qQ#iPz9N^-QMDT`vp%st;lDRc^U5{K z+pqk${+jmS^pFBeP0(L^K#tJ`dT`K%LFG+s5eu?_1;VghLd_L80P8;=V24 z_$#WeO%

ls12h9zl933KQTjXBtF=KC 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

wCf}xhBeLPwjw4kXu7W3ew~q1Tp^_}$9xW{ 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 diff --git a/Carthage/Checkouts/KeychainAccess/Sources/Keychain.swift b/Carthage/Checkouts/KeychainAccess/Sources/Keychain.swift deleted file mode 120000 index 39fcda4..0000000 --- a/Carthage/Checkouts/KeychainAccess/Sources/Keychain.swift +++ /dev/null @@ -1 +0,0 @@ -../Lib/KeychainAccess/Keychain.swift \ No newline at end of file diff --git a/OpenVPN Client.xcodeproj/project.pbxproj b/OpenVPN Adapter.xcodeproj/project.pbxproj similarity index 50% rename from OpenVPN Client.xcodeproj/project.pbxproj rename to OpenVPN Adapter.xcodeproj/project.pbxproj index 3ef6065..dc7fbf0 100644 --- a/OpenVPN Client.xcodeproj/project.pbxproj +++ b/OpenVPN Adapter.xcodeproj/project.pbxproj @@ -7,19 +7,8 @@ objects = { /* Begin PBXBuildFile section */ - C90BAD201E73ECE800DEFB32 /* OpenVPNAdapter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9BB475C1E71663A00F3F98C /* OpenVPNAdapter.framework */; }; C90BAD311E73FF6C00DEFB32 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C90BAD301E73FF6C00DEFB32 /* SystemConfiguration.framework */; }; - C91031061E47237A0004DFFE /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C91031051E47237A0004DFFE /* AppDelegate.swift */; }; - C910310B1E47237A0004DFFE /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C91031091E47237A0004DFFE /* Main.storyboard */; }; - C910310D1E47237A0004DFFE /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C910310C1E47237A0004DFFE /* Assets.xcassets */; }; - C91031101E47237A0004DFFE /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C910310E1E47237A0004DFFE /* LaunchScreen.storyboard */; }; - C91031271E4727E20004DFFE /* PacketTunnelProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = C91031261E4727E20004DFFE /* PacketTunnelProvider.swift */; }; - C910312B1E4727E20004DFFE /* OpenVPN iOS Tunnel Provider.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = C91031221E4727E20004DFFE /* OpenVPN iOS Tunnel Provider.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - C91031381E472C870004DFFE /* KeychainAccess.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C91031371E472C870004DFFE /* KeychainAccess.framework */; }; - C91031391E472C9C0004DFFE /* KeychainAccess.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C91031371E472C870004DFFE /* KeychainAccess.framework */; }; - C92638FC1E71B4B500B3D77A /* NEPacketTunnelFlow+OpenVPN.swift in Sources */ = {isa = PBXBuildFile; fileRef = C92638FB1E71B4B500B3D77A /* NEPacketTunnelFlow+OpenVPN.swift */; }; - C92638FF1E71BF9C00B3D77A /* Then.swift in Sources */ = {isa = PBXBuildFile; fileRef = C92638FE1E71BF9C00B3D77A /* Then.swift */; }; - C928AD731E6E952F00DA04BD /* KeychainAccess+Reference.swift in Sources */ = {isa = PBXBuildFile; fileRef = C928AD721E6E952F00DA04BD /* KeychainAccess+Reference.swift */; }; + C912BB251E7C3339002B9414 /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C912BB241E7C3339002B9414 /* NetworkExtension.framework */; }; C9BB47601E71663A00F3F98C /* Umbrella-Header.h in Headers */ = {isa = PBXBuildFile; fileRef = C9BB475E1E71663A00F3F98C /* Umbrella-Header.h */; settings = {ATTRIBUTES = (Public, ); }; }; C9BB476C1E716AEE00F3F98C /* ovpncli.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9BB476A1E716AEE00F3F98C /* ovpncli.hpp */; }; C9BB476D1E716AEE00F3F98C /* ovpncli.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9BB476B1E716AEE00F3F98C /* ovpncli.cpp */; }; @@ -33,7 +22,6 @@ C9BB47801E7173C700F3F98C /* OpenVPNAdapter+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = C9BB477C1E7173C700F3F98C /* OpenVPNAdapter+Internal.h */; }; C9BB47811E7173C700F3F98C /* OpenVPNAdapter+Public.h in Headers */ = {isa = PBXBuildFile; fileRef = C9BB477D1E7173C700F3F98C /* OpenVPNAdapter+Public.h */; settings = {ATTRIBUTES = (Public, ); }; }; C9BB47821E7173C700F3F98C /* OpenVPNAdapter.mm in Sources */ = {isa = PBXBuildFile; fileRef = C9BB477E1E7173C700F3F98C /* OpenVPNAdapter.mm */; }; - C9BB47841E71762C00F3F98C /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9BB47831E71762C00F3F98C /* NetworkExtension.framework */; }; C9BB47911E71821A00F3F98C /* OpenVPNAdapterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9BB47901E71821A00F3F98C /* OpenVPNAdapterTests.swift */; }; C9BB47931E71821A00F3F98C /* OpenVPNAdapter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9BB475C1E71663A00F3F98C /* OpenVPNAdapter.framework */; }; C9BB479C1E71836100F3F98C /* free_openvpn_udp.ovpn in Resources */ = {isa = PBXBuildFile; fileRef = C9BB479B1E71836100F3F98C /* free_openvpn_udp.ovpn */; }; @@ -41,13 +29,6 @@ /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - C91031291E4727E20004DFFE /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C91030F81E471D760004DFFE /* Project object */; - proxyType = 1; - remoteGlobalIDString = C91031211E4727E20004DFFE; - remoteInfo = "OpenVPN Tunnel Provider"; - }; C9BB47941E71821A00F3F98C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = C91030F81E471D760004DFFE /* Project object */; @@ -57,22 +38,7 @@ }; /* End PBXContainerItemProxy section */ -/* Begin PBXCopyFilesBuildPhase section */ - C910312F1E4727E20004DFFE /* Embed App Extensions */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 13; - files = ( - C910312B1E4727E20004DFFE /* OpenVPN iOS Tunnel Provider.appex in Embed App Extensions */, - ); - name = "Embed App Extensions"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - /* Begin PBXFileReference section */ - C90BAD1E1E73E44E00DEFB32 /* NetworkExtension.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NetworkExtension.framework; path = System/Library/Frameworks/NetworkExtension.framework; sourceTree = SDKROOT; }; C90BAD261E73F47E00DEFB32 /* Info-Framework.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-Framework.plist"; sourceTree = ""; }; C90BAD271E73F47E00DEFB32 /* Info-Tests.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-Tests.plist"; sourceTree = ""; }; C90BAD291E73F56800DEFB32 /* Framework.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Framework.xcconfig; sourceTree = ""; }; @@ -81,21 +47,7 @@ C90BAD2C1E73F69500DEFB32 /* Release.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; C90BAD2F1E73FA7400DEFB32 /* Tests.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Tests.xcconfig; sourceTree = ""; }; C90BAD301E73FF6C00DEFB32 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; - C91031021E47237A0004DFFE /* OpenVPN iOS Client.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "OpenVPN iOS Client.app"; sourceTree = BUILT_PRODUCTS_DIR; }; - C91031051E47237A0004DFFE /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - C910310A1E47237A0004DFFE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - C910310C1E47237A0004DFFE /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - C910310F1E47237A0004DFFE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - C91031111E47237A0004DFFE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C91031221E4727E20004DFFE /* OpenVPN iOS Tunnel Provider.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "OpenVPN iOS Tunnel Provider.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; - C91031251E4727E20004DFFE /* OpenVPN iOS Tunnel Provider.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "OpenVPN iOS Tunnel Provider.entitlements"; sourceTree = ""; }; - C91031261E4727E20004DFFE /* PacketTunnelProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PacketTunnelProvider.swift; sourceTree = ""; }; - C91031281E4727E20004DFFE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C91031371E472C870004DFFE /* KeychainAccess.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = KeychainAccess.framework; path = Carthage/Build/iOS/KeychainAccess.framework; sourceTree = ""; }; - C92638FB1E71B4B500B3D77A /* NEPacketTunnelFlow+OpenVPN.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NEPacketTunnelFlow+OpenVPN.swift"; sourceTree = ""; }; - C92638FE1E71BF9C00B3D77A /* Then.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Then.swift; sourceTree = ""; }; - C928AD721E6E952F00DA04BD /* KeychainAccess+Reference.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "KeychainAccess+Reference.swift"; sourceTree = ""; }; - C9990B361E62F0E800474227 /* OpenVPN iOS Client.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "OpenVPN iOS Client.entitlements"; sourceTree = ""; }; + C912BB241E7C3339002B9414 /* NetworkExtension.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NetworkExtension.framework; path = System/Library/Frameworks/NetworkExtension.framework; sourceTree = SDKROOT; }; C9BB475C1E71663A00F3F98C /* OpenVPNAdapter.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OpenVPNAdapter.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C9BB475E1E71663A00F3F98C /* Umbrella-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Umbrella-Header.h"; sourceTree = ""; }; C9BB476A1E716AEE00F3F98C /* ovpncli.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ovpncli.hpp; path = Vendors/openvpn/openvpn/client/ovpncli.hpp; sourceTree = ""; }; @@ -110,7 +62,6 @@ C9BB477C1E7173C700F3F98C /* OpenVPNAdapter+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "OpenVPNAdapter+Internal.h"; sourceTree = ""; }; C9BB477D1E7173C700F3F98C /* OpenVPNAdapter+Public.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "OpenVPNAdapter+Public.h"; sourceTree = ""; }; C9BB477E1E7173C700F3F98C /* OpenVPNAdapter.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; lineEnding = 0; path = OpenVPNAdapter.mm; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - C9BB47831E71762C00F3F98C /* NetworkExtension.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NetworkExtension.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.2.sdk/System/Library/Frameworks/NetworkExtension.framework; sourceTree = DEVELOPER_DIR; }; C9BB478E1E71821A00F3F98C /* OpenVPN Adapter Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "OpenVPN Adapter Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; C9BB47901E71821A00F3F98C /* OpenVPNAdapterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenVPNAdapterTests.swift; sourceTree = ""; }; C9BB479B1E71836100F3F98C /* free_openvpn_udp.ovpn */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = free_openvpn_udp.ovpn; sourceTree = ""; }; @@ -118,29 +69,12 @@ /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - C91030FF1E47237A0004DFFE /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - C91031391E472C9C0004DFFE /* KeychainAccess.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C910311F1E4727E20004DFFE /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - C90BAD201E73ECE800DEFB32 /* OpenVPNAdapter.framework in Frameworks */, - C91031381E472C870004DFFE /* KeychainAccess.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; C9BB47581E71663A00F3F98C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + C912BB251E7C3339002B9414 /* NetworkExtension.framework in Frameworks */, C90BAD311E73FF6C00DEFB32 /* SystemConfiguration.framework in Frameworks */, - C9BB47841E71762C00F3F98C /* NetworkExtension.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -175,8 +109,6 @@ C90BAD251E73F47E00DEFB32 /* Configuration */, C9BB475D1E71663A00F3F98C /* OpenVPN Adapter */, C9BB478F1E71821A00F3F98C /* OpenVPN Adapter Tests */, - C91031041E47237A0004DFFE /* OpenVPN iOS Client */, - C91031231E4727E20004DFFE /* OpenVPN iOS Tunnel Provider */, C91031031E47237A0004DFFE /* Products */, C91031361E472C870004DFFE /* Frameworks */, ); @@ -185,164 +117,21 @@ C91031031E47237A0004DFFE /* Products */ = { isa = PBXGroup; children = ( - C91031021E47237A0004DFFE /* OpenVPN iOS Client.app */, - C91031221E4727E20004DFFE /* OpenVPN iOS Tunnel Provider.appex */, C9BB475C1E71663A00F3F98C /* OpenVPNAdapter.framework */, C9BB478E1E71821A00F3F98C /* OpenVPN Adapter Tests.xctest */, ); name = Products; sourceTree = ""; }; - C91031041E47237A0004DFFE /* OpenVPN iOS Client */ = { - isa = PBXGroup; - children = ( - C91031151E47242D0004DFFE /* Controllers */, - C91031191E4724D10004DFFE /* Storyboards */, - C91031171E47249E0004DFFE /* Libraries */, - C910311C1E4724FE0004DFFE /* Resources */, - C91031161E4724660004DFFE /* Application */, - ); - path = "OpenVPN iOS Client"; - sourceTree = ""; - }; - C91031151E47242D0004DFFE /* Controllers */ = { - isa = PBXGroup; - children = ( - ); - name = Controllers; - sourceTree = ""; - }; - C91031161E4724660004DFFE /* Application */ = { - isa = PBXGroup; - children = ( - C91031051E47237A0004DFFE /* AppDelegate.swift */, - ); - name = Application; - sourceTree = ""; - }; - C91031171E47249E0004DFFE /* Libraries */ = { - isa = PBXGroup; - children = ( - C910311A1E4724EE0004DFFE /* Base */, - C910311B1E4724F20004DFFE /* Helpers */, - C91031181E4724A90004DFFE /* Configuration */, - ); - name = Libraries; - sourceTree = ""; - }; - C91031181E4724A90004DFFE /* Configuration */ = { - isa = PBXGroup; - children = ( - C9990B361E62F0E800474227 /* OpenVPN iOS Client.entitlements */, - C91031111E47237A0004DFFE /* Info.plist */, - ); - name = Configuration; - sourceTree = ""; - }; - C91031191E4724D10004DFFE /* Storyboards */ = { - isa = PBXGroup; - children = ( - C91031091E47237A0004DFFE /* Main.storyboard */, - C910310E1E47237A0004DFFE /* LaunchScreen.storyboard */, - ); - name = Storyboards; - path = ..; - sourceTree = ""; - }; - C910311A1E4724EE0004DFFE /* Base */ = { - isa = PBXGroup; - children = ( - ); - name = Base; - sourceTree = ""; - }; - C910311B1E4724F20004DFFE /* Helpers */ = { - isa = PBXGroup; - children = ( - ); - name = Helpers; - sourceTree = ""; - }; - C910311C1E4724FE0004DFFE /* Resources */ = { - isa = PBXGroup; - children = ( - C910310C1E47237A0004DFFE /* Assets.xcassets */, - ); - name = Resources; - sourceTree = ""; - }; - C91031231E4727E20004DFFE /* OpenVPN iOS Tunnel Provider */ = { - isa = PBXGroup; - children = ( - C91031301E4728F10004DFFE /* Libraries */, - C91031321E4729120004DFFE /* Provider */, - ); - path = "OpenVPN iOS Tunnel Provider"; - sourceTree = ""; - }; - C91031301E4728F10004DFFE /* Libraries */ = { - isa = PBXGroup; - children = ( - C91031341E4729270004DFFE /* Helpers */, - C91031311E4728F70004DFFE /* Configuration */, - ); - name = Libraries; - sourceTree = ""; - }; - C91031311E4728F70004DFFE /* Configuration */ = { - isa = PBXGroup; - children = ( - C91031281E4727E20004DFFE /* Info.plist */, - C91031251E4727E20004DFFE /* OpenVPN iOS Tunnel Provider.entitlements */, - ); - name = Configuration; - sourceTree = ""; - }; - C91031321E4729120004DFFE /* Provider */ = { - isa = PBXGroup; - children = ( - C91031261E4727E20004DFFE /* PacketTunnelProvider.swift */, - ); - name = Provider; - sourceTree = ""; - }; - C91031341E4729270004DFFE /* Helpers */ = { - isa = PBXGroup; - children = ( - C928AD711E6E94FE00DA04BD /* Extensions */, - C92638FD1E71BF7D00B3D77A /* Utils */, - ); - name = Helpers; - sourceTree = ""; - }; C91031361E472C870004DFFE /* Frameworks */ = { isa = PBXGroup; children = ( + C912BB241E7C3339002B9414 /* NetworkExtension.framework */, C90BAD301E73FF6C00DEFB32 /* SystemConfiguration.framework */, - C90BAD1E1E73E44E00DEFB32 /* NetworkExtension.framework */, - C9BB47831E71762C00F3F98C /* NetworkExtension.framework */, - C91031371E472C870004DFFE /* KeychainAccess.framework */, ); name = Frameworks; sourceTree = ""; }; - C92638FD1E71BF7D00B3D77A /* Utils */ = { - isa = PBXGroup; - children = ( - C92638FE1E71BF9C00B3D77A /* Then.swift */, - ); - name = Utils; - sourceTree = ""; - }; - C928AD711E6E94FE00DA04BD /* Extensions */ = { - isa = PBXGroup; - children = ( - C928AD721E6E952F00DA04BD /* KeychainAccess+Reference.swift */, - C92638FB1E71B4B500B3D77A /* NEPacketTunnelFlow+OpenVPN.swift */, - ); - name = Extensions; - sourceTree = ""; - }; C9BB475D1E71663A00F3F98C /* OpenVPN Adapter */ = { isa = PBXGroup; children = ( @@ -475,46 +264,6 @@ /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - C91031011E47237A0004DFFE /* OpenVPN iOS Client */ = { - isa = PBXNativeTarget; - buildConfigurationList = C91031141E47237A0004DFFE /* Build configuration list for PBXNativeTarget "OpenVPN iOS Client" */; - buildPhases = ( - C910311D1E4725740004DFFE /* Check Warning And Error Tags */, - C91030FE1E47237A0004DFFE /* Sources */, - C910313B1E472CD70004DFFE /* Copy Carthage Dependencies */, - C91030FF1E47237A0004DFFE /* Frameworks */, - C91031001E47237A0004DFFE /* Resources */, - C910312F1E4727E20004DFFE /* Embed App Extensions */, - ); - buildRules = ( - ); - dependencies = ( - C910312A1E4727E20004DFFE /* PBXTargetDependency */, - ); - name = "OpenVPN iOS Client"; - productName = "OpenVPN Client"; - productReference = C91031021E47237A0004DFFE /* OpenVPN iOS Client.app */; - productType = "com.apple.product-type.application"; - }; - C91031211E4727E20004DFFE /* OpenVPN iOS Tunnel Provider */ = { - isa = PBXNativeTarget; - buildConfigurationList = C910312C1E4727E20004DFFE /* Build configuration list for PBXNativeTarget "OpenVPN iOS Tunnel Provider" */; - buildPhases = ( - C910313D1E472E170004DFFE /* Check Warning And Error Tags */, - C910311E1E4727E20004DFFE /* Sources */, - C910313C1E472D1B0004DFFE /* Copy Carthage Dependencies */, - C910311F1E4727E20004DFFE /* Frameworks */, - C91031201E4727E20004DFFE /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "OpenVPN iOS Tunnel Provider"; - productName = "OpenVPN Tunnel Provider"; - productReference = C91031221E4727E20004DFFE /* OpenVPN iOS Tunnel Provider.appex */; - productType = "com.apple.product-type.app-extension"; - }; C9BB475B1E71663A00F3F98C /* OpenVPN Adapter */ = { isa = PBXNativeTarget; buildConfigurationList = C9BB47631E71663A00F3F98C /* Build configuration list for PBXNativeTarget "OpenVPN Adapter" */; @@ -561,33 +310,6 @@ LastSwiftUpdateCheck = 0820; LastUpgradeCheck = 0820; TargetAttributes = { - C91031011E47237A0004DFFE = { - CreatedOnToolsVersion = 8.2.1; - DevelopmentTeam = 2TWXCGG7R3; - ProvisioningStyle = Manual; - SystemCapabilities = { - com.apple.ApplicationGroups.iOS = { - enabled = 1; - }; - com.apple.Keychain = { - enabled = 1; - }; - }; - }; - C91031211E4727E20004DFFE = { - CreatedOnToolsVersion = 8.2.1; - DevelopmentTeam = 2TWXCGG7R3; - LastSwiftMigration = 0820; - ProvisioningStyle = Manual; - SystemCapabilities = { - com.apple.ApplicationGroups.iOS = { - enabled = 1; - }; - com.apple.Keychain = { - enabled = 0; - }; - }; - }; C9BB475B1E71663A00F3F98C = { CreatedOnToolsVersion = 8.2.1; ProvisioningStyle = Manual; @@ -599,7 +321,7 @@ }; }; }; - buildConfigurationList = C91030FB1E471D760004DFFE /* Build configuration list for PBXProject "OpenVPN Client" */; + buildConfigurationList = C91030FB1E471D760004DFFE /* Build configuration list for PBXProject "OpenVPN Adapter" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; @@ -614,30 +336,11 @@ targets = ( C9BB475B1E71663A00F3F98C /* OpenVPN Adapter */, C9BB478D1E71821A00F3F98C /* OpenVPN Adapter Tests */, - C91031011E47237A0004DFFE /* OpenVPN iOS Client */, - C91031211E4727E20004DFFE /* OpenVPN iOS Tunnel Provider */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - C91031001E47237A0004DFFE /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - C91031101E47237A0004DFFE /* LaunchScreen.storyboard in Resources */, - C910310D1E47237A0004DFFE /* Assets.xcassets in Resources */, - C910310B1E47237A0004DFFE /* Main.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C91031201E4727E20004DFFE /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; C9BB475A1E71663A00F3F98C /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -656,64 +359,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - C910311D1E4725740004DFFE /* Check Warning And Error Tags */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Check Warning And Error Tags"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "TAGS=\"TODO:|FIXME:|\\?\\?\\?|\\!\\!\\!\"\nERRORTAG=\"ERROR:\"\nfind \"${SRCROOT}/${TARGET_NAME}\" \\( -name \"*.h\" -or -name \"*.mm\" -or -name \"*.m\" -or -name \"*.swift\" \\) ! -path \"*/Vendors/*\" -print0 | xargs -0 egrep --with-filename --line-number --only-matching \"($TAGS).*\\$|($ERRORTAG).*\\$\" | perl -p -e \"s/($TAGS)/ warning: \\$1/\" | perl -p -e \"s/($ERRORTAG)/ error: \\$1/\""; - }; - C910313B1E472CD70004DFFE /* Copy Carthage Dependencies */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Copy Carthage Dependencies"; - outputPaths = ( - "$(SRCROOT)/Carthage/Build/iOS/KeychainAccess.framework", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "carthage copy-frameworks"; - }; - C910313C1E472D1B0004DFFE /* Copy Carthage Dependencies */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "$(SRCROOT)/Carthage/Build/iOS/KeychainAccess.framework", - ); - name = "Copy Carthage Dependencies"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "carthage copy-frameworks"; - }; - C910313D1E472E170004DFFE /* Check Warning And Error Tags */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Check Warning And Error Tags"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "TAGS=\"TODO:|FIXME:|\\?\\?\\?|\\!\\!\\!\"\nERRORTAG=\"ERROR:\"\nfind \"${SRCROOT}/${TARGET_NAME}\" \\( -name \"*.h\" -or -name \"*.mm\" -or -name \"*.m\" -or -name \"*.swift\" \\) ! -path \"*/Vendors/*\" -print0 | xargs -0 egrep --with-filename --line-number --only-matching \"($TAGS).*\\$|($ERRORTAG).*\\$\" | perl -p -e \"s/($TAGS)/ warning: \\$1/\" | perl -p -e \"s/($ERRORTAG)/ error: \\$1/\""; - }; C9BB476E1E716E7000F3F98C /* Check Warning And Error Tags */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -731,25 +376,6 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - C91030FE1E47237A0004DFFE /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - C91031061E47237A0004DFFE /* AppDelegate.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C910311E1E4727E20004DFFE /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - C92638FF1E71BF9C00B3D77A /* Then.swift in Sources */, - C92638FC1E71B4B500B3D77A /* NEPacketTunnelFlow+OpenVPN.swift in Sources */, - C91031271E4727E20004DFFE /* PacketTunnelProvider.swift in Sources */, - C928AD731E6E952F00DA04BD /* KeychainAccess+Reference.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; C9BB47571E71663A00F3F98C /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -773,11 +399,6 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - C910312A1E4727E20004DFFE /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = C91031211E4727E20004DFFE /* OpenVPN iOS Tunnel Provider */; - targetProxy = C91031291E4727E20004DFFE /* PBXContainerItemProxy */; - }; C9BB47951E71821A00F3F98C /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = C9BB475B1E71663A00F3F98C /* OpenVPN Adapter */; @@ -785,27 +406,6 @@ }; /* End PBXTargetDependency section */ -/* Begin PBXVariantGroup section */ - C91031091E47237A0004DFFE /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - C910310A1E47237A0004DFFE /* Base */, - ); - name = Main.storyboard; - path = "OpenVPN Client"; - sourceTree = ""; - }; - C910310E1E47237A0004DFFE /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - C910310F1E47237A0004DFFE /* Base */, - ); - name = LaunchScreen.storyboard; - path = "OpenVPN Client"; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - /* Begin XCBuildConfiguration section */ C91030FC1E471D760004DFFE /* Debug */ = { isa = XCBuildConfiguration; @@ -823,248 +423,6 @@ }; name = Release; }; - C91031121E47237A0004DFFE /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = 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_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_ENTITLEMENTS = "OpenVPN iOS Client/OpenVPN iOS Client.entitlements"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = 2TWXCGG7R3; - ENABLE_BITCODE = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); - GCC_C_LANGUAGE_STANDARD = gnu99; - 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; - INFOPLIST_FILE = "$(SRCROOT)/OpenVPN iOS Client/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = "me.ss-abramchuk.openvpn-ios-client"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE = "65d9b784-150e-4ccb-a551-8b59e2a558db"; - PROVISIONING_PROFILE_SPECIFIER = "OpenVPN iOS Client Dev Profile"; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - C91031131E47237A0004DFFE /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = 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_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_ENTITLEMENTS = "OpenVPN iOS Client/OpenVPN iOS Client.entitlements"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = ""; - ENABLE_BITCODE = NO; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); - GCC_C_LANGUAGE_STANDARD = gnu99; - 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; - INFOPLIST_FILE = "$(SRCROOT)/OpenVPN iOS Client/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = "me.ss-abramchuk.openvpn-ios-client"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - C910312D1E4727E20004DFFE /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = NO; - CLANG_WARN_CONSTANT_CONVERSION = NO; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = NO; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_ENTITLEMENTS = "OpenVPN iOS Tunnel Provider/OpenVPN iOS Tunnel Provider.entitlements"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = 2TWXCGG7R3; - ENABLE_BITCODE = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(PROJECT_DIR)/Carthage/Build/iOS\"", - ); - GCC_C_LANGUAGE_STANDARD = gnu99; - 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 = NO; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = "$(SRCROOT)/OpenVPN iOS Tunnel Provider/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = "me.ss-abramchuk.openvpn-ios-client.tunnel-provider"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE = "3b8150a9-e826-4354-a88b-cf6ac7093f1d"; - PROVISIONING_PROFILE_SPECIFIER = "OpenVPN iOS Tunnel Provider Dev Profile"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OBJC_BRIDGING_HEADER = ""; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - C910312E1E4727E20004DFFE /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = NO; - CLANG_WARN_CONSTANT_CONVERSION = NO; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = NO; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_ENTITLEMENTS = "OpenVPN iOS Tunnel Provider/OpenVPN iOS Tunnel Provider.entitlements"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = ""; - ENABLE_BITCODE = YES; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(PROJECT_DIR)/Carthage/Build/iOS\"", - ); - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = NO; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = "$(SRCROOT)/OpenVPN iOS Tunnel Provider/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = "me.ss-abramchuk.openvpn-ios-client.tunnel-provider"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_OBJC_BRIDGING_HEADER = ""; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; C9BB47611E71663A00F3F98C /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = C90BAD2B1E73F69500DEFB32 /* Debug.xcconfig */; @@ -1266,7 +624,7 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - C91030FB1E471D760004DFFE /* Build configuration list for PBXProject "OpenVPN Client" */ = { + C91030FB1E471D760004DFFE /* Build configuration list for PBXProject "OpenVPN Adapter" */ = { isa = XCConfigurationList; buildConfigurations = ( C91030FC1E471D760004DFFE /* Debug */, @@ -1275,24 +633,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - C91031141E47237A0004DFFE /* Build configuration list for PBXNativeTarget "OpenVPN iOS Client" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C91031121E47237A0004DFFE /* Debug */, - C91031131E47237A0004DFFE /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - C910312C1E4727E20004DFFE /* Build configuration list for PBXNativeTarget "OpenVPN iOS Tunnel Provider" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C910312D1E4727E20004DFFE /* Debug */, - C910312E1E4727E20004DFFE /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; C9BB47631E71663A00F3F98C /* Build configuration list for PBXNativeTarget "OpenVPN Adapter" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/OpenVPN Client.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/OpenVPN Adapter.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 72% rename from OpenVPN Client.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to OpenVPN Adapter.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 523a004..83a2ed5 100644 --- a/OpenVPN Client.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/OpenVPN Adapter.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:/Users/ss.abramchuk/Sources.localized/open-source.localized/openvpn-adapter/OpenVPN Adapter.xcodeproj"> diff --git a/OpenVPN Client.xcodeproj/xcshareddata/xcschemes/OpenVPN Adapter.xcscheme b/OpenVPN Adapter.xcodeproj/xcshareddata/xcschemes/OpenVPN Adapter.xcscheme similarity index 92% rename from OpenVPN Client.xcodeproj/xcshareddata/xcschemes/OpenVPN Adapter.xcscheme rename to OpenVPN Adapter.xcodeproj/xcshareddata/xcschemes/OpenVPN Adapter.xcscheme index b6da6c8..627b67c 100644 --- a/OpenVPN Client.xcodeproj/xcshareddata/xcschemes/OpenVPN Adapter.xcscheme +++ b/OpenVPN Adapter.xcodeproj/xcshareddata/xcschemes/OpenVPN Adapter.xcscheme @@ -17,7 +17,7 @@ BlueprintIdentifier = "C9BB475B1E71663A00F3F98C" BuildableName = "OpenVPNAdapter.framework" BlueprintName = "OpenVPN Adapter" - ReferencedContainer = "container:OpenVPN Client.xcodeproj"> + ReferencedContainer = "container:OpenVPN Adapter.xcodeproj"> @@ -48,7 +48,7 @@ BlueprintIdentifier = "C9BB475B1E71663A00F3F98C" BuildableName = "OpenVPNAdapter.framework" BlueprintName = "OpenVPN Adapter" - ReferencedContainer = "container:OpenVPN Client.xcodeproj"> + ReferencedContainer = "container:OpenVPN Adapter.xcodeproj"> @@ -66,7 +66,7 @@ BlueprintIdentifier = "C9BB475B1E71663A00F3F98C" BuildableName = "OpenVPNAdapter.framework" BlueprintName = "OpenVPN Adapter" - ReferencedContainer = "container:OpenVPN Client.xcodeproj"> + ReferencedContainer = "container:OpenVPN Adapter.xcodeproj"> diff --git a/OpenVPN iOS Client/AppDelegate.swift b/OpenVPN iOS Client/AppDelegate.swift deleted file mode 100644 index e4b9e74..0000000 --- a/OpenVPN iOS Client/AppDelegate.swift +++ /dev/null @@ -1,46 +0,0 @@ -// -// AppDelegate.swift -// OpenVPN Client -// -// Created by Sergey Abramchuk on 05.02.17. -// -// - -import UIKit - -@UIApplicationMain -class AppDelegate: UIResponder, UIApplicationDelegate { - - var window: UIWindow? - - - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { - // Override point for customization after application launch. - return true - } - - func applicationWillResignActive(_ application: UIApplication) { - // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. - // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. - } - - func applicationDidEnterBackground(_ application: UIApplication) { - // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. - // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. - } - - func applicationWillEnterForeground(_ application: UIApplication) { - // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. - } - - func applicationDidBecomeActive(_ application: UIApplication) { - // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. - } - - func applicationWillTerminate(_ application: UIApplication) { - // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. - } - - -} - diff --git a/OpenVPN iOS Client/Assets.xcassets/AppIcon.appiconset/Contents.json b/OpenVPN iOS Client/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 1d060ed..0000000 --- a/OpenVPN iOS Client/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "size" : "20x20", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "20x20", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "3x" - }, - { - "idiom" : "ipad", - "size" : "20x20", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "20x20", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "29x29", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "40x40", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "76x76", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "76x76", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "83.5x83.5", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/OpenVPN iOS Client/Base.lproj/LaunchScreen.storyboard b/OpenVPN iOS Client/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index fdf3f97..0000000 --- a/OpenVPN iOS Client/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/OpenVPN iOS Client/Base.lproj/Main.storyboard b/OpenVPN iOS Client/Base.lproj/Main.storyboard deleted file mode 100644 index f2b5b8d..0000000 --- a/OpenVPN iOS Client/Base.lproj/Main.storyboard +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/OpenVPN iOS Client/Info.plist b/OpenVPN iOS Client/Info.plist deleted file mode 100644 index 149fa50..0000000 --- a/OpenVPN iOS Client/Info.plist +++ /dev/null @@ -1,46 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - OpenVPN Client - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0.0 - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/OpenVPN iOS Client/OpenVPN iOS Client.entitlements b/OpenVPN iOS Client/OpenVPN iOS Client.entitlements deleted file mode 100644 index 3e0ed63..0000000 --- a/OpenVPN iOS Client/OpenVPN iOS Client.entitlements +++ /dev/null @@ -1,14 +0,0 @@ - - - - - com.apple.security.application-groups - - group.me.ss-abramchuk.openvpn-ios-client - - keychain-access-groups - - $(AppIdentifierPrefix)keychain-shared - - - diff --git a/OpenVPN iOS Tunnel Provider/Info.plist b/OpenVPN iOS Tunnel Provider/Info.plist deleted file mode 100644 index 855ea39..0000000 --- a/OpenVPN iOS Tunnel Provider/Info.plist +++ /dev/null @@ -1,31 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - OpenVPN iOS Tunnel Provider - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - XPC! - CFBundleShortVersionString - 1.0.0 - CFBundleVersion - 1 - NSExtension - - NSExtensionPointIdentifier - com.apple.networkextension.packet-tunnel - NSExtensionPrincipalClass - $(PRODUCT_MODULE_NAME).PacketTunnelProvider - - - diff --git a/OpenVPN iOS Tunnel Provider/KeychainAccess+Reference.swift b/OpenVPN iOS Tunnel Provider/KeychainAccess+Reference.swift deleted file mode 100644 index d0fac2a..0000000 --- a/OpenVPN iOS Tunnel Provider/KeychainAccess+Reference.swift +++ /dev/null @@ -1,45 +0,0 @@ -// -// KeychainAccess+Reference.swift -// OpenVPN iOS Client -// -// Created by Sergey Abramchuk on 07.03.17. -// -// - -import Foundation -import KeychainAccess - -extension Keychain { - - public func get(ref: Data) throws -> String? { - guard let data = try getData(ref: ref) else { - return nil - } - - return String(data: data, encoding: .utf8) - } - - public func getData(ref: Data) throws -> Data? { - let query: [String: Any] = [ - String(kSecClass): itemClass.rawValue, - String(kSecReturnData): kCFBooleanTrue, - String(kSecValuePersistentRef): ref as CFData - ] - - var result: AnyObject? - let status = SecItemCopyMatching(query as CFDictionary, &result) - - switch status { - case errSecSuccess: - guard let data = result as? Data else { - throw Status.unexpectedError - } - return data - case errSecItemNotFound: - return nil - default: - throw Status(status: status) - } - } - -} diff --git a/OpenVPN iOS Tunnel Provider/NEPacketTunnelFlow+OpenVPN.swift b/OpenVPN iOS Tunnel Provider/NEPacketTunnelFlow+OpenVPN.swift deleted file mode 100644 index 1588f82..0000000 --- a/OpenVPN iOS Tunnel Provider/NEPacketTunnelFlow+OpenVPN.swift +++ /dev/null @@ -1,13 +0,0 @@ -// -// NEPacketTunnelFlow+OpenVPN.swift -// OpenVPN iOS Client -// -// Created by Sergey Abramchuk on 09.03.17. -// -// - -import Foundation -import NetworkExtension -import OpenVPNAdapter - -extension NEPacketTunnelFlow: OpenVPNAdapterPacketFlow { } diff --git a/OpenVPN iOS Tunnel Provider/OpenVPN iOS Tunnel Provider.entitlements b/OpenVPN iOS Tunnel Provider/OpenVPN iOS Tunnel Provider.entitlements deleted file mode 100644 index 1d9dfa3..0000000 --- a/OpenVPN iOS Tunnel Provider/OpenVPN iOS Tunnel Provider.entitlements +++ /dev/null @@ -1,10 +0,0 @@ - - - - - com.apple.security.application-groups - - group.me.ss-abramchuk.openvpn-ios-client - - - diff --git a/OpenVPN iOS Tunnel Provider/PacketTunnelProvider.swift b/OpenVPN iOS Tunnel Provider/PacketTunnelProvider.swift deleted file mode 100644 index 37c4da6..0000000 --- a/OpenVPN iOS Tunnel Provider/PacketTunnelProvider.swift +++ /dev/null @@ -1,116 +0,0 @@ -// -// PacketTunnelProvider.swift -// OpenVPN Tunnel Provider -// -// Created by Sergey Abramchuk on 05.02.17. -// -// - -import NetworkExtension -import KeychainAccess -import OpenVPNAdapter - -enum PacketTunnelProviderError: Error { - case fatalError(message: String) -} - -class PacketTunnelProvider: NEPacketTunnelProvider { - - let keychain = Keychain(service: "me.ss-abramchuk.openvpn-ios-client", accessGroup: "2TWXCGG7R3.keychain-shared") - - lazy var vpnAdapter: OpenVPNAdapter = { - return OpenVPNAdapter().then { $0.delegate = self } - }() - - var startHandler: ((Error?) -> Void)? - var stopHandler: (() -> Void)? - - override func startTunnel(options: [String : NSObject]? = nil, completionHandler: @escaping (Error?) -> Void) { - guard let settings = options?["Settings"] as? Data else { - let error = PacketTunnelProviderError.fatalError(message: "Failed to retrieve OpenVPN settings from options") - completionHandler(error) - - return - } - - if let username = protocolConfiguration.username { - vpnAdapter.username = username - } - - if let reference = protocolConfiguration.passwordReference { - do { - guard let password = try keychain.get(ref: reference) else { - throw PacketTunnelProviderError.fatalError(message: "Failed to retrieve password from keychain") - } - - vpnAdapter.password = password - } catch { - completionHandler(error) - return - } - } - - do { - try vpnAdapter.configure(using: settings) - } catch { - completionHandler(error) - return - } - - startHandler = completionHandler - vpnAdapter.connect() - } - - override func stopTunnel(with reason: NEProviderStopReason, completionHandler: @escaping () -> Void) { - stopHandler = completionHandler - vpnAdapter.disconnect() - } - -} - -extension PacketTunnelProvider: OpenVPNAdapterDelegate { - - func configureTunnel(settings: NEPacketTunnelNetworkSettings, callback: @escaping (OpenVPNAdapterPacketFlow?) -> Void) { - setTunnelNetworkSettings(settings) { (error) in - callback(error == nil ? self.packetFlow : nil) - } - } - - func handle(event: OpenVPNEvent, message: String?) { - switch event { - case .connected: // Successfully connected to the VPN server - guard let startHandler = startHandler else { - return - } - - startHandler(nil) - self.startHandler = nil - - case .disconnected: // Disconnected from the VPN server - guard let stopHandler = stopHandler else { - return - } - - stopHandler() - self.startHandler = nil - - default: - break - } - } - - func handle(error: Error) { - // Handle only fatal errors - guard let fatal = (error as NSError).userInfo[OpenVPNAdapterErrorFatalKey] as? Bool, fatal == true else { - return - } - - if let startHandler = startHandler { - startHandler(error) - self.startHandler = nil - } else { - cancelTunnelWithError(error) - } - } - -} diff --git a/OpenVPN iOS Tunnel Provider/Then.swift b/OpenVPN iOS Tunnel Provider/Then.swift deleted file mode 100644 index 58e76f6..0000000 --- a/OpenVPN iOS Tunnel Provider/Then.swift +++ /dev/null @@ -1,62 +0,0 @@ -// -// Then.swift -// MCPEBot -// -// Created by Sergey Abramchuk on 27.01.17. -// Copyright © 2017 ss-abramchuk. All rights reserved. -// - -import Foundation -import CoreGraphics - -public protocol Then {} - -extension Then where Self: Any { - - /// Makes it available to set properties with closures just after initializing and copying the value types. - /// - /// let frame = CGRect().with { - /// $0.origin.x = 10 - /// $0.size.width = 100 - /// } - public func with(_ block: (inout Self) -> Void) -> Self { - var copy = self - block(©) - return copy - } - - /// Makes it available to execute something with closures. - /// - /// UserDefaults.standard.do { - /// $0.set("devxoul", forKey: "username") - /// $0.set("devxoul@gmail.com", forKey: "email") - /// $0.synchronize() - /// } - public func `do`(_ block: (Self) -> Void) { - block(self) - } - -} - -extension Then where Self: AnyObject { - - /// Makes it available to set properties with closures just after initializing. - /// - /// let label = UILabel().then { - /// $0.textAlignment = .Center - /// $0.textColor = UIColor.blackColor() - /// $0.text = "Hello, World!" - /// } - public func then(_ block: (Self) -> Void) -> Self { - block(self) - return self - } - -} - -extension NSObject: Then {} - -extension CGPoint: Then {} -extension CGRect: Then {} -extension CGSize: Then {} -extension CGVector: Then {}

iU6p`H`I0fWgd%3sm)94TPOo*n8I<=g+7KHv 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
m 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�rRGDGm!j6_luw^ZvwqzP2;yWtM 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
x>s7P80W%CzoEfWky9S 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%0A2#@u(Z3urvc;r)zuY%si%aIg$}EIj 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 diff --git a/Carthage/Checkouts/KeychainAccess/Screenshots/03.png b/Carthage/Checkouts/KeychainAccess/Screenshots/03.png deleted file mode 100644 index f8e24a810f44929c8334ce07c64b32aea6f9b3cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 219308 zcmeEuWmH_*)-53rtOE&}-~ND20Y5>Lm>P zgjl$l(t1Jc9bARI#Gd_8LKyh{>oVvW?H@(l?8KhwD5=oCbab(x<>TPx;Cv>IOG`^D z>SAswtoG{7KOYDFC-%(R&CN*|1oHIsSD=1zF3~?q{>Qa{xATwkD%Or}j=(6m*qF&V zxLLRW54)NE>YX_EKcD{l5`V1=>|$d9y!9VX|Eul)dF`L&MM1w_{C^C@KSueFtH3ae z{kAuyZZ&ML zcprX;Bm6R~EJxD#VaXz!0k`=JNnBmZVbfZ(p}k7^oBKes75~}Q z|BKB^e#U?z28~muOSMxgJ0q&qTY}Iq-qO9xVkaGPL;qjhETTP{x5`XL9=49Y&~G3% zr69w^z~@58Ucj#=8d&@5Oi1n$%{99gB9`G$D^d=F->b^cz-06xk~0{O>MX)P1^usS z3;g5jc^q2nQned5{J-`GW{!@$gbM^*b<+&RvBo}b z@Q(#yM4+PRoW9YyGEidwby4Io(q=~}l8~|MnQK)T*mPX|z@sO6lfO`JmueOv)Kh0W zJ>a%CHScz?@SPHRwPv$uW@U;^Dd_Y?^n6O)a<;9asAlM?r01H={I4=DL2z=t4}(=@19 zzp+ASGmb7})v9PsZ17`QRd>J$$*rDn>izmohvn_9ZUU=0c)v84bcX;=cg{^uM%#BNnL{;9)Axl$(-)z;ae^=KPzhV$p#;7Xa? z-QKsHEU5gP&`Z78^hl{^;{8f>M!>B%@>XM5J>GUaCm)q`FjX8Y79s4uH|J~*>sU_R zSX%X8s^mP~8sssrP+{PI?e~;g4-p=4dUL4ehcivv_ zzX=*w&E+`8z%Obb$?&piygC`IOwz5jOu^%5`eK_fQ(;(Ihh^|?TrSpiJSTEE^X?|- zQmkny&2t4&jlH-*e;h4C&ENfj0Q5zb(jHxEQHr!|Q%Vv&Mgp}9o=JR{H#Tb=;QvD6 zchUFq@q`Rj9tXmwGy0Bt_fqfPM#DK7)AT$1l2MZnTLSKGx6URTDn>ysRURMg^MJJN=B)mBz5CQcsPZ z=bFxBnK6Yv;+O}6PLF@trR>e#V+ zrp@cJ@%pvM>}`^+G_9h^WWliIa!dV1%Fns#mtLN74m5&C^(3opz?Sv!^G9CrS!Mbw zZ@{aK+I?31OEYX>9qFi}o14>7F{#D<3q#1yISH?zM#ilP1rT4#swi>H)lf3eqU}*Q zrML6UWvgOuhtIif>0_^HO>K+sdmFJ}{^3-CMw%OAC?X#M{qYSaZz6X!Jt=LdDBj#)Ku8b+QMzAvw3^Apx&x_s@*p-2*s4EBYL^ydf{_0mioTr z4O!q_yv1QoGvR1El6E~CM~E#^4aZ{M!`65lm@eX}d&l=_Xluf6y6jGlIo;gqoyDO> z-x(5iCoUJppW47^KrViB)<-5lH985F*lbtn4G`@*9%R^b3_zCRq!#$yB80(X{9o8o z()mNh@y`QS<$GyhQz9U;7LV6kO3B=eHSLe-M}9Bs#m6R2dAH&!fjZ*>$3kLf&t|o% zjPap^46l67#%0>96Ka*p_3DS}XN^)%KiC0wWXOHi(CPs`r8RZHjWd1VGO(409||n3 zA{^L^O;hWv+#-`#lY1SOn#R>ho3c$3!w>Uu?P_q@`zrbWLFkbZGO5k)HNfWxb@7Ncm z-uA)DgXVL^MPD!)MoGk%!)4zg)a6~Je{>{yDD*Uz8Qjo`Saj@Mp7gRM)Z{I^Y4^Q+ z4Hev&Qps}Cqz0Qj@z4zFsESe&$@|{ubxi2^zWJoKjRty^jdJSKvTk&QL4B#a%`7O; zor$8VmsfOyV5()oRQ13a}r`3fx_8)$WSeOt#99!=7hgiM@cu zYa1m`i|nY%O!L8zE9F{W7^M<3?0h2I?{1O9jld>stE)Kq&f>amAG>k@^Vu)2Bih-Y z4RAPYzckv1gJLgCvKJ?v`{vsP_q>@OwmU4h=pGCM_AjNf<9dKc_og;_w=P6<-j9RD zDYVjG&~}OiITEeZuBfP8u4gg)I=}xyNfFNz#FywP-g|Q#2_`-VEa(B?Z&drs1~-o3 zNa<&PoS?>_U1g|(EPBA-BV@oLrWvlC+>9C`Yav9C5H0iWZb zo^F`8Jy*e1Wz;Smt9^TLI81>vzPWwV$d|@^IYWXYAjdfN(nlg{5GOyHUdCtktg>w8 z8d&ZSWf6$=n??e7r^LK%ZYdPL;{RDO05AS*`PsuM$Drn-uw>pv+r29>{O|G|#{8X; z5mX|iZKXMQ3md^U19AN`Z7LERjLUv4Zo5AWqk^BI?&pc9ExdR!>Q*+76)64a>gM!( zD-i2YfP&xNiGMcxrHt#0uGQ1!4FduLtNczY`6sgrwQI95VBH+p7{9ns%(}IFIrCw^ zKX3Q270%zdft?X;*2kI)n>!YnUuVlQT+)u=e%EAwOM+9eug)!K6ns#7z?2|9j(}BH?I`CWeSZ}Ni z>rp_vB{_wxZ$?F3Lp+3H zd9!(;jO_#l&fiH!T+97eN5S{MuIKwYzEj?%Pi;2g-fI2$TB{ET0 z?7Te`3VuhsPnK@tKSPHW=!LTrszr|7#gLt3w1A2vd41b@y*Hlmre}{q!j>B=I*UDR za!>L_HLkFZLJeOZg&Q!#!up=C%5my4EZb4YzQ_T715DT-4o>0S4H6A&mPvBOUEv zve0qB(KuQjEPDKEpTP6x3g=A_;~n(p9@}AC)m^TOKJ^pgU!63M}=fE zDW{oWS`qG<|H$vp$D;A$%%0Bm)W@j;=5*P#6V_>047bxwy@G9rk+REAth!C(Yz-$J zXSdJ970OkmI^KH3L=A)3Vs(-`ZWlXIsqXjb*~baQuV{C5D{4X=M&S~Iy0i6m0umzC zaUKP{%Nsdw9)ogYf*SijWMqVM<0Qbk)kt_{sJaEjV3&hiu48%DQ{Re=nKCU@MRoSD z*bd_5VwsrQ+d{F567}USHTl)Qb-k@;6*+KuVwLUve)M$#WEh)-J~Xr{bT4=8fV4&I zPSDk6_HO5RU&~Ur?DQ#L0fj@;I387i{e;6X_3Z|;=ls}7vJrpGbIa!J#KG3XmO<;YylFPIxeAp_jOBtrR3XNpGkYmA~BT zna}oB9Gf`(9n)6cGLiCpQ$6 z6=IcaCi3JwcCVQgFmTB8G^zvc#I>X6PI&`QzTyS&{|Yt4!gIIFZA@FFtZxdv7nHtx z5omU9XZTjsH(*DY-duUwOIEpEN+m)f7Wu(?LPhvipM8Oy#I# zHBPjMpzS<7@dE1x+>*6I6GQEc1qHHV-qed550dO9@Cl4ue0#z+R<~&a@cwRcSO>|B z{kTjm{kM{>EU4z_^69usLf$bsX8JdL1@`MZe5#tsy30YU))$}NEaHJg;k=8V$m1A> zCZG!2Dz!Qgz!%IZGR@!6-W23(je-nVrX?@Ltg7=EvT0XT(a@YM(n>}0Mx90Hk{wsA zGN`96fC>iycfNr}=-O#K{Abg8L@izXCXqCqU!)LIRpm1=^mRINZ3b(hQ| zWpvaTpF0KlA^N6xlg`>s;L}|o?J) z2A7ASwaUNm@jRDEzpF129)JVOef++@>|6oylzprO4~~Zc(IJiBQMNle92vd8*jU-T zm11Y_y{LkNik&H3nMF;NYJ&p!T#C6nnrnt)FMrObV;`yPTm%KrwIQ;O6h{TMW1d#W zbj%v;=04h$w($g0+IeuH-W@YF#~n0%X8BliD9R7@2zCZFYkhD33nH! z!_|2dCQN=~7D}GZoEQXk+E34JK9WeKNDKi*O5BD_c6C@jJ7?a`K3R6XMQktHy)bMg zS*P3%KSdpJ9z1bp)LMoU zvun*p8vy`_#~byp^f()Qb`=C1v!|xRDfKHTWY)U9(kjOA=dUc9QSdjg5; z&Qxan-s%OEXEuc=pPuU!DpQSK8iFJ9DIde-d2_R{UCyKJVvf{DJtTIUi#&3N;2TLg z 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�mN&h@lE4t+CqUNdpu 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