diff --git a/SwiftSRP-Tests/Info.plist b/SwiftSRP-Tests/Info.plist
new file mode 100644
index 0000000..ba72822
--- /dev/null
+++ b/SwiftSRP-Tests/Info.plist
@@ -0,0 +1,24 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ BNDL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1
+
+
diff --git a/SwiftSRP-Tests/SRP.swift b/SwiftSRP-Tests/SRP.swift
new file mode 100644
index 0000000..b70ca3a
--- /dev/null
+++ b/SwiftSRP-Tests/SRP.swift
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2023, Jean-David Gadina - www.xs-labs.com
+ *
+ * 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 SwiftSRP
+import XCTest
+
+final class SRPTest: XCTestCase
+{
+ func testFoo()
+ {
+ XCTAssertTrue( true )
+ }
+
+ func testBar()
+ {
+ XCTAssertTrue( true )
+ }
+}
diff --git a/SwiftSRP.xcodeproj/project.pbxproj b/SwiftSRP.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..db8decf
--- /dev/null
+++ b/SwiftSRP.xcodeproj/project.pbxproj
@@ -0,0 +1,650 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 54;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 058A42732CE53F5A00768026 /* SwiftSRP.h in Headers */ = {isa = PBXBuildFile; fileRef = 058A42712CE53F5A00768026 /* SwiftSRP.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 058A42772CE5406800768026 /* SwiftSRP.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 058A42692CE53F4500768026 /* SwiftSRP.framework */; };
+ 058A427C2CE5416800768026 /* SRP.swift in Sources */ = {isa = PBXBuildFile; fileRef = 058A42752CE5405100768026 /* SRP.swift */; };
+ 058A428A2CE541E800768026 /* libSRPXX.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 058A42852CE541D700768026 /* libSRPXX.a */; };
+ 058A428E2CE5425600768026 /* SRPClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 058A428D2CE5425200768026 /* SRPClient.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 058A42902CE5425B00768026 /* SRPClient.mm in Sources */ = {isa = PBXBuildFile; fileRef = 058A428F2CE5425A00768026 /* SRPClient.mm */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 058A42782CE5407000768026 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 056C87C618C8B0F8006260B3 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 058A42682CE53F4500768026;
+ remoteInfo = SwiftSRP;
+ };
+ 058A42842CE541D700768026 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 058A427D2CE541D700768026 /* SRPXX.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 056C881218C8B85F006260B3;
+ remoteInfo = SRPXX;
+ };
+ 058A42862CE541D700768026 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 058A427D2CE541D700768026 /* SRPXX.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 056C58BF1B1898FF00C6214A;
+ remoteInfo = "SRPXX-Tests";
+ };
+ 058A42882CE541D700768026 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 058A427D2CE541D700768026 /* SRPXX.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 05D95FFA2CE3B6C80092F68E;
+ remoteInfo = "SRPXX-Debug";
+ };
+ 058A428B2CE541EC00768026 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 058A427D2CE541D700768026 /* SRPXX.xcodeproj */;
+ proxyType = 1;
+ remoteGlobalIDString = 056C881118C8B85F006260B3;
+ remoteInfo = SRPXX;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+ 051F09651946EB70004B6E47 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; };
+ 056C58BF1B1898FF00C6214A /* SwiftSRP-Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "SwiftSRP-Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 05818D4F2CDFD2ED00001415 /* CODE_OF_CONDUCT.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = CODE_OF_CONDUCT.md; sourceTree = ""; };
+ 05818D502CDFD2ED00001415 /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE; sourceTree = ""; };
+ 05818D512CDFD32400001415 /* FUNDING.yml */ = {isa = PBXFileReference; lastKnownFileType = text.yaml; path = FUNDING.yml; sourceTree = ""; };
+ 05818D532CDFD32400001415 /* C++.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "C++.xcconfig"; sourceTree = ""; };
+ 05818D542CDFD32400001415 /* Modules.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Modules.xcconfig; sourceTree = ""; };
+ 05818D552CDFD32400001415 /* Objective-C.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Objective-C.xcconfig"; sourceTree = ""; };
+ 05818D572CDFD32400001415 /* All-Languages.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "All-Languages.xcconfig"; sourceTree = ""; };
+ 05818D582CDFD32400001415 /* C++.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "C++.xcconfig"; sourceTree = ""; };
+ 05818D592CDFD32400001415 /* Objective-C.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Objective-C.xcconfig"; sourceTree = ""; };
+ 05818D5A2CDFD32400001415 /* Objective-C-ARC.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Objective-C-ARC.xcconfig"; sourceTree = ""; };
+ 05818D5C2CDFD32400001415 /* Address-Sanitizer.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Address-Sanitizer.xcconfig"; sourceTree = ""; };
+ 05818D5D2CDFD32400001415 /* Code-Generation.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Code-Generation.xcconfig"; sourceTree = ""; };
+ 05818D5E2CDFD32400001415 /* Language.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Language.xcconfig; sourceTree = ""; };
+ 05818D5F2CDFD32400001415 /* Preprocessing.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Preprocessing.xcconfig; sourceTree = ""; };
+ 05818D602CDFD32400001415 /* Undefined-Behavior-Sanitizer.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Undefined-Behavior-Sanitizer.xcconfig"; sourceTree = ""; };
+ 05818D612CDFD32400001415 /* Warning-Policies.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Warning-Policies.xcconfig"; sourceTree = ""; };
+ 05818D622CDFD32400001415 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; };
+ 05818D642CDFD32400001415 /* Analysis-Policy.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Analysis-Policy.xcconfig"; sourceTree = ""; };
+ 05818D652CDFD32400001415 /* Apple-APIs.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Apple-APIs.xcconfig"; sourceTree = ""; };
+ 05818D662CDFD32400001415 /* Generic-Issues.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Generic-Issues.xcconfig"; sourceTree = ""; };
+ 05818D672CDFD32400001415 /* Objective-C.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Objective-C.xcconfig"; sourceTree = ""; };
+ 05818D682CDFD32400001415 /* Security.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Security.xcconfig; sourceTree = ""; };
+ 05818D6A2CDFD32400001415 /* Issues.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Issues.xcconfig; sourceTree = ""; };
+ 05818D6C2CDFD32400001415 /* Code-Generation.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Code-Generation.xcconfig"; sourceTree = ""; };
+ 05818D6D2CDFD32400001415 /* General.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = General.xcconfig; sourceTree = ""; };
+ 05818D6E2CDFD32400001415 /* Language.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Language.xcconfig; sourceTree = ""; };
+ 05818D6F2CDFD32400001415 /* Warnings-Policies.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Warnings-Policies.xcconfig"; sourceTree = ""; };
+ 05818D712CDFD32400001415 /* Apple-LLVM.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Apple-LLVM.xcconfig"; sourceTree = ""; };
+ 05818D722CDFD32400001415 /* Architectures.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Architectures.xcconfig; sourceTree = ""; };
+ 05818D732CDFD32400001415 /* Build-Options.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Build-Options.xcconfig"; sourceTree = ""; };
+ 05818D742CDFD32400001415 /* Deployment.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Deployment.xcconfig; sourceTree = ""; };
+ 05818D752CDFD32400001415 /* Search-Paths.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Search-Paths.xcconfig"; sourceTree = ""; };
+ 05818D762CDFD32400001415 /* Signing.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Signing.xcconfig; sourceTree = ""; };
+ 05818D772CDFD32400001415 /* Static-Analyzer.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Static-Analyzer.xcconfig"; sourceTree = ""; };
+ 05818D782CDFD32400001415 /* Swift-Compiler.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Swift-Compiler.xcconfig"; sourceTree = ""; };
+ 05818D7A2CDFD32400001415 /* ccache.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = ccache.sh; sourceTree = ""; };
+ 05818D7B2CDFD32400001415 /* ccache-config.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = "ccache-config.sh"; sourceTree = ""; };
+ 05818D7D2CDFD32400001415 /* .gitignore */ = {isa = PBXFileReference; lastKnownFileType = text; path = .gitignore; sourceTree = ""; };
+ 05818D7E2CDFD32400001415 /* CODE_OF_CONDUCT.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = CODE_OF_CONDUCT.md; sourceTree = ""; };
+ 05818D7F2CDFD32400001415 /* Common.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Common.xcconfig; sourceTree = ""; };
+ 05818D802CDFD32400001415 /* Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; };
+ 05818D812CDFD32400001415 /* Debug - ccache.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Debug - ccache.xcconfig"; sourceTree = ""; };
+ 05818D822CDFD32400001415 /* Debug - Library.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Debug - Library.xcconfig"; sourceTree = ""; };
+ 05818D832CDFD32400001415 /* Debug - zld.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Debug - zld.xcconfig"; sourceTree = ""; };
+ 05818D842CDFD32400001415 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; };
+ 05818D852CDFD32400001415 /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; };
+ 05818D862CDFD32400001415 /* Release - ccache.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Release - ccache.xcconfig"; sourceTree = ""; };
+ 05818D872CDFD32400001415 /* Release - Library.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Release - Library.xcconfig"; sourceTree = ""; };
+ 058A42692CE53F4500768026 /* SwiftSRP.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftSRP.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 058A42712CE53F5A00768026 /* SwiftSRP.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SwiftSRP.h; sourceTree = ""; };
+ 058A42752CE5405100768026 /* SRP.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SRP.swift; sourceTree = ""; };
+ 058A427D2CE541D700768026 /* SRPXX.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SRPXX.xcodeproj; path = Submodules/SRPXX/SRPXX.xcodeproj; sourceTree = ""; };
+ 058A428D2CE5425200768026 /* SRPClient.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SRPClient.h; sourceTree = ""; };
+ 058A428F2CE5425A00768026 /* SRPClient.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SRPClient.mm; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 056C58BC1B1898FF00C6214A /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 058A42772CE5406800768026 /* SwiftSRP.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 058A42662CE53F4500768026 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 058A428A2CE541E800768026 /* libSRPXX.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 056C87C518C8B0F8006260B3 = {
+ isa = PBXGroup;
+ children = (
+ 051F09651946EB70004B6E47 /* README.md */,
+ 05818D502CDFD2ED00001415 /* LICENSE */,
+ 05818D4F2CDFD2ED00001415 /* CODE_OF_CONDUCT.md */,
+ 058A427D2CE541D700768026 /* SRPXX.xcodeproj */,
+ 058A42722CE53F5A00768026 /* SwiftSRP */,
+ 058A42742CE53FC000768026 /* SwiftSRP-Tests */,
+ 05818D882CDFD32400001415 /* xcconfig */,
+ 058A42762CE5406800768026 /* Frameworks */,
+ 056C87CF18C8B0F8006260B3 /* Products */,
+ );
+ sourceTree = "";
+ };
+ 056C87CF18C8B0F8006260B3 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 056C58BF1B1898FF00C6214A /* SwiftSRP-Tests.xctest */,
+ 058A42692CE53F4500768026 /* SwiftSRP.framework */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 05818D522CDFD32400001415 /* .github */ = {
+ isa = PBXGroup;
+ children = (
+ 05818D512CDFD32400001415 /* FUNDING.yml */,
+ );
+ path = .github;
+ sourceTree = "";
+ };
+ 05818D562CDFD32400001415 /* Language */ = {
+ isa = PBXGroup;
+ children = (
+ 05818D532CDFD32400001415 /* C++.xcconfig */,
+ 05818D542CDFD32400001415 /* Modules.xcconfig */,
+ 05818D552CDFD32400001415 /* Objective-C.xcconfig */,
+ );
+ path = Language;
+ sourceTree = "";
+ };
+ 05818D5B2CDFD32400001415 /* Warnings */ = {
+ isa = PBXGroup;
+ children = (
+ 05818D572CDFD32400001415 /* All-Languages.xcconfig */,
+ 05818D582CDFD32400001415 /* C++.xcconfig */,
+ 05818D592CDFD32400001415 /* Objective-C.xcconfig */,
+ 05818D5A2CDFD32400001415 /* Objective-C-ARC.xcconfig */,
+ );
+ path = Warnings;
+ sourceTree = "";
+ };
+ 05818D632CDFD32400001415 /* Apple-LLVM */ = {
+ isa = PBXGroup;
+ children = (
+ 05818D562CDFD32400001415 /* Language */,
+ 05818D5B2CDFD32400001415 /* Warnings */,
+ 05818D5C2CDFD32400001415 /* Address-Sanitizer.xcconfig */,
+ 05818D5D2CDFD32400001415 /* Code-Generation.xcconfig */,
+ 05818D5E2CDFD32400001415 /* Language.xcconfig */,
+ 05818D5F2CDFD32400001415 /* Preprocessing.xcconfig */,
+ 05818D602CDFD32400001415 /* Undefined-Behavior-Sanitizer.xcconfig */,
+ 05818D612CDFD32400001415 /* Warning-Policies.xcconfig */,
+ 05818D622CDFD32400001415 /* Warnings.xcconfig */,
+ );
+ path = "Apple-LLVM";
+ sourceTree = "";
+ };
+ 05818D692CDFD32400001415 /* Issues */ = {
+ isa = PBXGroup;
+ children = (
+ 05818D642CDFD32400001415 /* Analysis-Policy.xcconfig */,
+ 05818D652CDFD32400001415 /* Apple-APIs.xcconfig */,
+ 05818D662CDFD32400001415 /* Generic-Issues.xcconfig */,
+ 05818D672CDFD32400001415 /* Objective-C.xcconfig */,
+ 05818D682CDFD32400001415 /* Security.xcconfig */,
+ );
+ path = Issues;
+ sourceTree = "";
+ };
+ 05818D6B2CDFD32400001415 /* Static-Analyzer */ = {
+ isa = PBXGroup;
+ children = (
+ 05818D692CDFD32400001415 /* Issues */,
+ 05818D6A2CDFD32400001415 /* Issues.xcconfig */,
+ );
+ path = "Static-Analyzer";
+ sourceTree = "";
+ };
+ 05818D702CDFD32400001415 /* Swift-Compiler */ = {
+ isa = PBXGroup;
+ children = (
+ 05818D6C2CDFD32400001415 /* Code-Generation.xcconfig */,
+ 05818D6D2CDFD32400001415 /* General.xcconfig */,
+ 05818D6E2CDFD32400001415 /* Language.xcconfig */,
+ 05818D6F2CDFD32400001415 /* Warnings-Policies.xcconfig */,
+ );
+ path = "Swift-Compiler";
+ sourceTree = "";
+ };
+ 05818D792CDFD32400001415 /* Common */ = {
+ isa = PBXGroup;
+ children = (
+ 05818D632CDFD32400001415 /* Apple-LLVM */,
+ 05818D6B2CDFD32400001415 /* Static-Analyzer */,
+ 05818D702CDFD32400001415 /* Swift-Compiler */,
+ 05818D712CDFD32400001415 /* Apple-LLVM.xcconfig */,
+ 05818D722CDFD32400001415 /* Architectures.xcconfig */,
+ 05818D732CDFD32400001415 /* Build-Options.xcconfig */,
+ 05818D742CDFD32400001415 /* Deployment.xcconfig */,
+ 05818D752CDFD32400001415 /* Search-Paths.xcconfig */,
+ 05818D762CDFD32400001415 /* Signing.xcconfig */,
+ 05818D772CDFD32400001415 /* Static-Analyzer.xcconfig */,
+ 05818D782CDFD32400001415 /* Swift-Compiler.xcconfig */,
+ );
+ path = Common;
+ sourceTree = "";
+ };
+ 05818D7C2CDFD32400001415 /* Scripts */ = {
+ isa = PBXGroup;
+ children = (
+ 05818D7A2CDFD32400001415 /* ccache.sh */,
+ 05818D7B2CDFD32400001415 /* ccache-config.sh */,
+ );
+ path = Scripts;
+ sourceTree = "";
+ };
+ 05818D882CDFD32400001415 /* xcconfig */ = {
+ isa = PBXGroup;
+ children = (
+ 05818D522CDFD32400001415 /* .github */,
+ 05818D792CDFD32400001415 /* Common */,
+ 05818D7C2CDFD32400001415 /* Scripts */,
+ 05818D7D2CDFD32400001415 /* .gitignore */,
+ 05818D7E2CDFD32400001415 /* CODE_OF_CONDUCT.md */,
+ 05818D7F2CDFD32400001415 /* Common.xcconfig */,
+ 05818D802CDFD32400001415 /* Debug.xcconfig */,
+ 05818D812CDFD32400001415 /* Debug - ccache.xcconfig */,
+ 05818D822CDFD32400001415 /* Debug - Library.xcconfig */,
+ 05818D832CDFD32400001415 /* Debug - zld.xcconfig */,
+ 05818D842CDFD32400001415 /* README.md */,
+ 05818D852CDFD32400001415 /* Release.xcconfig */,
+ 05818D862CDFD32400001415 /* Release - ccache.xcconfig */,
+ 05818D872CDFD32400001415 /* Release - Library.xcconfig */,
+ );
+ name = xcconfig;
+ path = Submodules/xcconfig;
+ sourceTree = "";
+ };
+ 058A42722CE53F5A00768026 /* SwiftSRP */ = {
+ isa = PBXGroup;
+ children = (
+ 058A42712CE53F5A00768026 /* SwiftSRP.h */,
+ 058A428D2CE5425200768026 /* SRPClient.h */,
+ 058A428F2CE5425A00768026 /* SRPClient.mm */,
+ );
+ path = SwiftSRP;
+ sourceTree = "";
+ };
+ 058A42742CE53FC000768026 /* SwiftSRP-Tests */ = {
+ isa = PBXGroup;
+ children = (
+ 058A42752CE5405100768026 /* SRP.swift */,
+ );
+ path = "SwiftSRP-Tests";
+ sourceTree = "";
+ };
+ 058A42762CE5406800768026 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+ 058A427E2CE541D700768026 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 058A42852CE541D700768026 /* libSRPXX.a */,
+ 058A42872CE541D700768026 /* SRPXX-Tests.xctest */,
+ 058A42892CE541D700768026 /* SRPXX-Debug */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+ 058A42642CE53F4500768026 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 058A428E2CE5425600768026 /* SRPClient.h in Headers */,
+ 058A42732CE53F5A00768026 /* SwiftSRP.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXNativeTarget section */
+ 056C58BE1B1898FF00C6214A /* SwiftSRP-Tests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 056C58C81B1898FF00C6214A /* Build configuration list for PBXNativeTarget "SwiftSRP-Tests" */;
+ buildPhases = (
+ 056C58BB1B1898FF00C6214A /* Sources */,
+ 056C58BC1B1898FF00C6214A /* Frameworks */,
+ 056C58BD1B1898FF00C6214A /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 058A42792CE5407000768026 /* PBXTargetDependency */,
+ );
+ name = "SwiftSRP-Tests";
+ productName = "CF++ Tests";
+ productReference = 056C58BF1B1898FF00C6214A /* SwiftSRP-Tests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
+ 058A42682CE53F4500768026 /* SwiftSRP */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 058A426E2CE53F4500768026 /* Build configuration list for PBXNativeTarget "SwiftSRP" */;
+ buildPhases = (
+ 058A42642CE53F4500768026 /* Headers */,
+ 058A42652CE53F4500768026 /* Sources */,
+ 058A42662CE53F4500768026 /* Frameworks */,
+ 058A42672CE53F4500768026 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 058A428C2CE541EC00768026 /* PBXTargetDependency */,
+ );
+ name = SwiftSRP;
+ packageProductDependencies = (
+ );
+ productName = SwiftSRP;
+ productReference = 058A42692CE53F4500768026 /* SwiftSRP.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 056C87C618C8B0F8006260B3 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ BuildIndependentTargetsInParallel = YES;
+ LastUpgradeCheck = 1610;
+ ORGANIZATIONNAME = "XS-Labs";
+ TargetAttributes = {
+ 056C58BE1B1898FF00C6214A = {
+ CreatedOnToolsVersion = 6.4;
+ DevelopmentTeam = 326Y53CJMD;
+ ProvisioningStyle = Automatic;
+ };
+ 058A42682CE53F4500768026 = {
+ CreatedOnToolsVersion = 16.1;
+ };
+ };
+ };
+ buildConfigurationList = 056C87C918C8B0F8006260B3 /* Build configuration list for PBXProject "SwiftSRP" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = en;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ );
+ mainGroup = 056C87C518C8B0F8006260B3;
+ productRefGroup = 056C87CF18C8B0F8006260B3 /* Products */;
+ projectDirPath = "";
+ projectReferences = (
+ {
+ ProductGroup = 058A427E2CE541D700768026 /* Products */;
+ ProjectRef = 058A427D2CE541D700768026 /* SRPXX.xcodeproj */;
+ },
+ );
+ projectRoot = "";
+ targets = (
+ 058A42682CE53F4500768026 /* SwiftSRP */,
+ 056C58BE1B1898FF00C6214A /* SwiftSRP-Tests */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXReferenceProxy section */
+ 058A42852CE541D700768026 /* libSRPXX.a */ = {
+ isa = PBXReferenceProxy;
+ fileType = archive.ar;
+ path = libSRPXX.a;
+ remoteRef = 058A42842CE541D700768026 /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+ 058A42872CE541D700768026 /* SRPXX-Tests.xctest */ = {
+ isa = PBXReferenceProxy;
+ fileType = wrapper.cfbundle;
+ path = "SRPXX-Tests.xctest";
+ remoteRef = 058A42862CE541D700768026 /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+ 058A42892CE541D700768026 /* SRPXX-Debug */ = {
+ isa = PBXReferenceProxy;
+ fileType = "compiled.mach-o.executable";
+ path = "SRPXX-Debug";
+ remoteRef = 058A42882CE541D700768026 /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+/* End PBXReferenceProxy section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 056C58BD1B1898FF00C6214A /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 058A42672CE53F4500768026 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 056C58BB1B1898FF00C6214A /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 058A427C2CE5416800768026 /* SRP.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 058A42652CE53F4500768026 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 058A42902CE5425B00768026 /* SRPClient.mm in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ 058A42792CE5407000768026 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 058A42682CE53F4500768026 /* SwiftSRP */;
+ targetProxy = 058A42782CE5407000768026 /* PBXContainerItemProxy */;
+ };
+ 058A428C2CE541EC00768026 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ name = SRPXX;
+ targetProxy = 058A428B2CE541EC00768026 /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin XCBuildConfiguration section */
+ 056C58C91B1898FF00C6214A /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(DEVELOPER_FRAMEWORKS_DIR)",
+ "$(inherited)",
+ );
+ INFOPLIST_FILE = "SwiftSRP-Tests/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ "@loader_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.xs-labs.$(PRODUCT_NAME:rfc1034identifier)";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Debug;
+ };
+ 056C58CA1B1898FF00C6214A /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(DEVELOPER_FRAMEWORKS_DIR)",
+ "$(inherited)",
+ );
+ INFOPLIST_FILE = "SwiftSRP-Tests/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ "@loader_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.xs-labs.$(PRODUCT_NAME:rfc1034identifier)";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Release;
+ };
+ 056C87D518C8B0F8006260B3 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 05818D802CDFD32400001415 /* Debug.xcconfig */;
+ buildSettings = {
+ MACOSX_DEPLOYMENT_TARGET = 10.11;
+ };
+ name = Debug;
+ };
+ 056C87D618C8B0F8006260B3 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 05818D852CDFD32400001415 /* Release.xcconfig */;
+ buildSettings = {
+ MACOSX_DEPLOYMENT_TARGET = 10.11;
+ };
+ name = Release;
+ };
+ 058A426F2CE53F4500768026 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ GENERATE_INFOPLIST_FILE = YES;
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ Submodules/SRPXX/SRPXX/include,
+ );
+ INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2024 XS-Labs. All rights reserved.";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ "@loader_path/Frameworks",
+ );
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ Submodules/SRPXX/Submodules/BoringSSL/lib/macOS,
+ );
+ MARKETING_VERSION = 1.0;
+ OTHER_LDFLAGS = (
+ "-lcrypto",
+ "-lssl",
+ "-ldecrepit",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.xs-labs.SwiftSRP";
+ PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
+ SKIP_INSTALL = YES;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Debug;
+ };
+ 058A42702CE53F4500768026 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ GENERATE_INFOPLIST_FILE = YES;
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ Submodules/SRPXX/SRPXX/include,
+ );
+ INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2024 XS-Labs. All rights reserved.";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ "@loader_path/Frameworks",
+ );
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ Submodules/SRPXX/Submodules/BoringSSL/lib/macOS,
+ );
+ MARKETING_VERSION = 1.0;
+ OTHER_LDFLAGS = (
+ "-lcrypto",
+ "-lssl",
+ "-ldecrepit",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.xs-labs.SwiftSRP";
+ PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
+ SKIP_INSTALL = YES;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 056C58C81B1898FF00C6214A /* Build configuration list for PBXNativeTarget "SwiftSRP-Tests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 056C58C91B1898FF00C6214A /* Debug */,
+ 056C58CA1B1898FF00C6214A /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 056C87C918C8B0F8006260B3 /* Build configuration list for PBXProject "SwiftSRP" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 056C87D518C8B0F8006260B3 /* Debug */,
+ 056C87D618C8B0F8006260B3 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 058A426E2CE53F4500768026 /* Build configuration list for PBXNativeTarget "SwiftSRP" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 058A426F2CE53F4500768026 /* Debug */,
+ 058A42702CE53F4500768026 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 056C87C618C8B0F8006260B3 /* Project object */;
+}
diff --git a/SwiftSRP.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/SwiftSRP.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..890c20e
--- /dev/null
+++ b/SwiftSRP.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/SwiftSRP.xcodeproj/xcshareddata/xcschemes/SwiftSRP-Tests.xcscheme b/SwiftSRP.xcodeproj/xcshareddata/xcschemes/SwiftSRP-Tests.xcscheme
new file mode 100644
index 0000000..8a1e722
--- /dev/null
+++ b/SwiftSRP.xcodeproj/xcshareddata/xcschemes/SwiftSRP-Tests.xcscheme
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SwiftSRP.xcodeproj/xcshareddata/xcschemes/SwiftSRP.xcscheme b/SwiftSRP.xcodeproj/xcshareddata/xcschemes/SwiftSRP.xcscheme
new file mode 100644
index 0000000..1e6529a
--- /dev/null
+++ b/SwiftSRP.xcodeproj/xcshareddata/xcschemes/SwiftSRP.xcscheme
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SwiftSRP/SRPClient.h b/SwiftSRP/SRPClient.h
new file mode 100644
index 0000000..2cf7ecb
--- /dev/null
+++ b/SwiftSRP/SRPClient.h
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2023, Jean-David Gadina - www.xs-labs.com
+ *
+ * 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
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SRPClient: NSObject
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SwiftSRP/SRPClient.mm b/SwiftSRP/SRPClient.mm
new file mode 100644
index 0000000..acc99ff
--- /dev/null
+++ b/SwiftSRP/SRPClient.mm
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2023, Jean-David Gadina - www.xs-labs.com
+ *
+ * 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 "SRPClient.h"
+#import
+
+@implementation SRPClient
+
+@end
diff --git a/SwiftSRP/SwiftSRP.h b/SwiftSRP/SwiftSRP.h
new file mode 100644
index 0000000..f54eec9
--- /dev/null
+++ b/SwiftSRP/SwiftSRP.h
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2023, Jean-David Gadina - www.xs-labs.com
+ *
+ * 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