From 4bdbc308738ddf62e711e78c10909a89b2cbfe47 Mon Sep 17 00:00:00 2001 From: Hinton Date: Thu, 27 Apr 2023 14:38:32 +0200 Subject: [PATCH] Dylib --- src/iOS.Autofill/AppDelegate.cs | 15 +++++++++ src/iOS.Autofill/BitwardenClient.cs | 31 +++++++++++++++++++ src/iOS.Autofill/BitwardenClientSafeHandle.cs | 18 +++++++++++ src/iOS.Autofill/BitwardenClientWrapper.cs | 23 ++++++++++++++ src/iOS.Autofill/iOS.Autofill.csproj | 9 ++++++ src/iOS/AppDelegate.cs | 7 ++++- src/iOS/iOS.csproj | 26 ++++++++++------ 7 files changed, 118 insertions(+), 11 deletions(-) create mode 100644 src/iOS.Autofill/BitwardenClient.cs create mode 100644 src/iOS.Autofill/BitwardenClientSafeHandle.cs create mode 100644 src/iOS.Autofill/BitwardenClientWrapper.cs diff --git a/src/iOS.Autofill/AppDelegate.cs b/src/iOS.Autofill/AppDelegate.cs index e27c57ae6..ca20eda72 100644 --- a/src/iOS.Autofill/AppDelegate.cs +++ b/src/iOS.Autofill/AppDelegate.cs @@ -11,6 +11,21 @@ namespace Bit.iOS.Autofill get; set; } + public override void FinishedLaunching(UIApplication application) + { + + var ln = @"libbitwarden_c.framework/libbitwarden_c"; + var documentsPath = NSBundle.MainBundle.BundlePath; + var filePath = System.IO.Path.Combine(documentsPath, "Frameworks", ln); + var ptr = ObjCRuntime.Dlfcn.dlopen(filePath, 0); + + var sdkClient = new BitwardenClient(); + var test = sdkClient.Fingerprint(); + + + base.FinishedLaunching(application); + } + public override void OnResignActivation(UIApplication application) { } diff --git a/src/iOS.Autofill/BitwardenClient.cs b/src/iOS.Autofill/BitwardenClient.cs new file mode 100644 index 000000000..0cbef9db4 --- /dev/null +++ b/src/iOS.Autofill/BitwardenClient.cs @@ -0,0 +1,31 @@ +using System; + +namespace Bit.iOS +{ + public class BitwardenClient : IDisposable + { + private readonly BitwardenClientSafeHandle handle; + + public BitwardenClient() + { + handle = BitwardenClientWrapper.init(""); + } + + public string Fingerprint() + { + return BitwardenClientWrapper.run_command("{}", handle.Ptr); + } + + protected virtual void Dispose(bool disposing) + { + if (handle != null && !handle.IsInvalid) + handle.Dispose(); + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + } +} \ No newline at end of file diff --git a/src/iOS.Autofill/BitwardenClientSafeHandle.cs b/src/iOS.Autofill/BitwardenClientSafeHandle.cs new file mode 100644 index 000000000..eb22ca4d6 --- /dev/null +++ b/src/iOS.Autofill/BitwardenClientSafeHandle.cs @@ -0,0 +1,18 @@ +using System; +using Microsoft.Win32.SafeHandles; + +namespace Bit.iOS +{ + internal class BitwardenClientSafeHandle : SafeHandleZeroOrMinusOneIsInvalid + { + public BitwardenClientSafeHandle() : base(true) { } + + public IntPtr Ptr => this.handle; + + protected override bool ReleaseHandle() + { + BitwardenClientWrapper.free_mem(handle); + return true; + } + } +} \ No newline at end of file diff --git a/src/iOS.Autofill/BitwardenClientWrapper.cs b/src/iOS.Autofill/BitwardenClientWrapper.cs new file mode 100644 index 000000000..2d06ad412 --- /dev/null +++ b/src/iOS.Autofill/BitwardenClientWrapper.cs @@ -0,0 +1,23 @@ +using System; +using System.Runtime.InteropServices; + +namespace Bit.iOS +{ + internal static class BitwardenClientWrapper + { +#if Android + const string DllName = "libBitwardenC.so"; +#else + const string DllName = "__Internal"; +#endif + + [DllImport(DllName, EntryPoint = "init")] + internal static extern BitwardenClientSafeHandle init(string settings); + + [DllImport(DllName, EntryPoint = "free_mem")] + internal static extern void free_mem(IntPtr clientPtr); + + [DllImport(DllName, EntryPoint = "run_command")] + internal static extern string run_command(string loginRequest, IntPtr clientPtr); + } +} \ No newline at end of file diff --git a/src/iOS.Autofill/iOS.Autofill.csproj b/src/iOS.Autofill/iOS.Autofill.csproj index ce5fc0b09..a970dc937 100644 --- a/src/iOS.Autofill/iOS.Autofill.csproj +++ b/src/iOS.Autofill/iOS.Autofill.csproj @@ -194,6 +194,9 @@ + + + @@ -278,5 +281,11 @@ + + + Framework + False + + \ No newline at end of file diff --git a/src/iOS/AppDelegate.cs b/src/iOS/AppDelegate.cs index 6fc420b50..ff182c9e7 100644 --- a/src/iOS/AppDelegate.cs +++ b/src/iOS/AppDelegate.cs @@ -182,10 +182,15 @@ namespace Bit.iOS LoggerHelper.LogEvenIfCantBeResolved(ex); } }); + + var ln = @"libbitwarden_c.framework/libbitwarden_c"; + var documentsPath = NSBundle.MainBundle.BundlePath; + var filePath = System.IO.Path.Combine(documentsPath, "Frameworks", ln); + var ptr = ObjCRuntime.Dlfcn.dlopen(filePath, 0); var sdkClient = new BitwardenClient(); var test = sdkClient.Fingerprint(); - + return base.FinishedLaunching(app, options); } diff --git a/src/iOS/iOS.csproj b/src/iOS/iOS.csproj index 9c1dc3160..94f3620bc 100644 --- a/src/iOS/iOS.csproj +++ b/src/iOS/iOS.csproj @@ -29,7 +29,7 @@ None true true - --nodevcodeshare --http-message-handler=NSUrlSessionHandler -gcc_flags "-L${ProjectDir}/../../lib/ios -largon2 -force_load ${ProjectDir}/../../lib/ios/libargon2.a -lbitwarden_c -force_load ${ProjectDir}/../../lib/ios/libbitwarden_c.a" + --nodevcodeshare --http-message-handler=NSUrlSessionHandler -gcc_flags "-L${ProjectDir}/../../lib/ios -largon2 -force_load ${ProjectDir}/../../lib/ios/libargon2.a" Entitlements.plist @@ -41,7 +41,7 @@ Full x86_64 false - --nodevcodeshare --http-message-handler=NSUrlSessionHandler --linkskip=BitwardeniOS --linkskip=BitwardeniOSCore --linkskip=BitwardeniOSAutofill --linkskip=BitwardeniOSExtension --linkskip=BitwardenApp --linkskip=BitwardenCore --linkskip=LiteDB --linkskip=CsvHelper --linkskip=BitwardeniOSShareExtension -gcc_flags "-L${ProjectDir}/../../lib/ios -largon2 -force_load ${ProjectDir}/../../lib/ios/libargon2.a -lbitwarden_c -force_load ${ProjectDir}/../../lib/ios/libbitwarden_c.a" + --nodevcodeshare --http-message-handler=NSUrlSessionHandler --linkskip=BitwardeniOS --linkskip=BitwardeniOSCore --linkskip=BitwardeniOSAutofill --linkskip=BitwardeniOSExtension --linkskip=BitwardenApp --linkskip=BitwardenCore --linkskip=LiteDB --linkskip=CsvHelper --linkskip=BitwardeniOSShareExtension -gcc_flags "-L${ProjectDir}/../../lib/ios -largon2 -force_load ${ProjectDir}/../../lib/ios/libargon2.a" true Entitlements.plist @@ -60,7 +60,7 @@ Entitlements.plist None false - --nodevcodeshare --http-message-handler=NSUrlSessionHandler -gcc_flags "-L${ProjectDir}/../../lib/ios -largon2 -force_load ${ProjectDir}/../../lib/ios/libargon2.a -lbitwarden_c -force_load ${ProjectDir}/../../lib/ios/libbitwarden_c.a" + --nodevcodeshare --http-message-handler=NSUrlSessionHandler -gcc_flags "-L${ProjectDir}/../../lib/ios -largon2 -force_load ${ProjectDir}/../../lib/ios/libargon2.a" true @@ -74,7 +74,7 @@ iPhone Developer Entitlements.plist Full - --nodevcodeshare --http-message-handler=NSUrlSessionHandler --linkskip=BitwardeniOS --linkskip=BitwardeniOSCore --linkskip=BitwardeniOSAutofill --linkskip=BitwardeniOSExtension --linkskip=BitwardenApp --linkskip=BitwardenCore --linkskip=LiteDB --linkskip=CsvHelper --linkskip=BitwardeniOSShareExtension -gcc_flags "-L${ProjectDir}/../../lib/ios -largon2 -force_load ${ProjectDir}/../../lib/ios/libargon2.a -lbitwarden_c -force_load ${ProjectDir}/../../lib/ios/libbitwarden_c.a" + --nodevcodeshare --http-message-handler=NSUrlSessionHandler --linkskip=BitwardeniOS --linkskip=BitwardeniOSCore --linkskip=BitwardeniOSAutofill --linkskip=BitwardeniOSExtension --linkskip=BitwardenApp --linkskip=BitwardenCore --linkskip=LiteDB --linkskip=CsvHelper --linkskip=BitwardeniOSShareExtension -gcc_flags "-L${ProjectDir}/../../lib/ios -largon2 -force_load ${ProjectDir}/../../lib/ios/libargon2.a" true @@ -89,7 +89,7 @@ iPhone Distribution Entitlements.plist Full - --nodevcodeshare --http-message-handler=NSUrlSessionHandler --linkskip=BitwardeniOS --linkskip=BitwardeniOSCore --linkskip=BitwardeniOSAutofill --linkskip=BitwardeniOSExtension --linkskip=BitwardenApp --linkskip=BitwardenCore --linkskip=LiteDB --linkskip=CsvHelper --linkskip=BitwardeniOSShareExtension -gcc_flags "-L${ProjectDir}/../../lib/ios -largon2 -force_load ${ProjectDir}/../../lib/ios/libargon2.a -lbitwarden_c -force_load ${ProjectDir}/../../lib/ios/libbitwarden_c.a" + --nodevcodeshare --http-message-handler=NSUrlSessionHandler --linkskip=BitwardeniOS --linkskip=BitwardeniOSCore --linkskip=BitwardeniOSAutofill --linkskip=BitwardeniOSExtension --linkskip=BitwardenApp --linkskip=BitwardenCore --linkskip=LiteDB --linkskip=CsvHelper --linkskip=BitwardeniOSShareExtension -gcc_flags "-L${ProjectDir}/../../lib/ios -largon2 -force_load ${ProjectDir}/../../lib/ios/libargon2.a" Automatic:AdHoc @@ -103,7 +103,7 @@ Automatic:AppStore iPhone Distribution Entitlements.plist - --nodevcodeshare --http-message-handler=NSUrlSessionHandler --linkskip=BitwardeniOS --linkskip=BitwardeniOSCore --linkskip=BitwardeniOSAutofill --linkskip=BitwardeniOSExtension --linkskip=BitwardenApp --linkskip=BitwardenCore --linkskip=LiteDB --linkskip=CsvHelper --linkskip=BitwardeniOSShareExtension -gcc_flags "-L${ProjectDir}/../../lib/ios -largon2 -force_load ${ProjectDir}/../../lib/ios/libargon2.a -lbitwarden_c -force_load ${ProjectDir}/../../lib/ios/libbitwarden_c.a" + --nodevcodeshare --http-message-handler=NSUrlSessionHandler --linkskip=BitwardeniOS --linkskip=BitwardeniOSCore --linkskip=BitwardeniOSAutofill --linkskip=BitwardeniOSExtension --linkskip=BitwardenApp --linkskip=BitwardenCore --linkskip=LiteDB --linkskip=CsvHelper --linkskip=BitwardeniOSShareExtension -gcc_flags "-L${ProjectDir}/../../lib/ios -largon2 -force_load ${ProjectDir}/../../lib/ios/libargon2.a" true Full @@ -115,7 +115,7 @@ false prompt MinimumRecommendedRules.ruleset - --nodevcodeshare --http-message-handler=NSUrlSessionHandler --linkskip=BitwardeniOS --linkskip=BitwardeniOSCore --linkskip=BitwardeniOSAutofill --linkskip=BitwardeniOSExtension --linkskip=BitwardenApp --linkskip=BitwardenCore --linkskip=LiteDB --linkskip=CsvHelper -gcc_flags "-L${ProjectDir}/../../lib/ios -largon2 -force_load ${ProjectDir}/../../lib/ios/libargon2.a -lbitwarden_c -force_load ${ProjectDir}/../../lib/ios/libbitwarden_c.a" + --nodevcodeshare --http-message-handler=NSUrlSessionHandler --linkskip=BitwardeniOS --linkskip=BitwardeniOSCore --linkskip=BitwardeniOSAutofill --linkskip=BitwardeniOSExtension --linkskip=BitwardenApp --linkskip=BitwardenCore --linkskip=LiteDB --linkskip=CsvHelper -gcc_flags "-L${ProjectDir}/../../lib/ios -largon2 -force_load ${ProjectDir}/../../lib/ios/libargon2.a" true SdkOnly @@ -144,9 +144,6 @@ - - - @@ -186,6 +183,9 @@ + + + @@ -427,6 +427,12 @@ <_ResolvedWatchAppReferences Include="$(WatchAppBundleFullPath)" /> + + + Framework + False + + --deep